{"version":3,"sources":["webpack:///./node_modules/dojo/ready.js","webpack:///./node_modules/dojo/_base/lang.js","webpack:///./node_modules/dojo/_base/array.js","webpack:///./node_modules/dojo/_base/kernel.js","webpack:///./node_modules/dojo/on.js","webpack:///./node_modules/dojo/dom.js","webpack:///./node_modules/@syncfusion/ej2-base/src/util.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/hijri-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/observer.js","webpack:///./node_modules/@syncfusion/ej2-base/src/internationalization.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/ajax.js","webpack:///./node_modules/@syncfusion/ej2-base/src/browser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/event-handler.js","webpack:///./node_modules/@syncfusion/ej2-base/src/template.js","webpack:///./node_modules/@syncfusion/ej2-base/src/template-engine.js","webpack:///./node_modules/@syncfusion/ej2-base/src/virtual-dom.js","webpack:///./node_modules/@syncfusion/ej2-base/src/dom.js","webpack:///./node_modules/@syncfusion/ej2-base/src/base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/notify-property-change.js","webpack:///./node_modules/@syncfusion/ej2-base/src/animation.js","webpack:///./node_modules/@syncfusion/ej2-base/src/module-loader.js","webpack:///./node_modules/@syncfusion/ej2-base/src/component.js","webpack:///./node_modules/@syncfusion/ej2-base/src/child-property.js","webpack:///./node_modules/@syncfusion/ej2-base/src/draggable.js","webpack:///./node_modules/@syncfusion/ej2-base/src/droppable.js","webpack:///./node_modules/@syncfusion/ej2-base/src/keyboard.js","webpack:///./node_modules/@syncfusion/ej2-base/src/l10n.js","webpack:///./node_modules/@syncfusion/ej2-base/src/touch.js","webpack:///./node_modules/@syncfusion/ej2-base/src/sanitize-helper.js","webpack:///./node_modules/dojo/has.js","webpack:///./node_modules/dojo/sniff.js","webpack:///./node_modules/dojo/dom-style.js","webpack:///./node_modules/dojo/_base/window.js","webpack:///./node_modules/dojo/dom-class.js","webpack:///./node_modules/dojo/_base/config.js","webpack:///./node_modules/dojo/aspect.js","webpack:///./node_modules/ol/extent.js","webpack:///./node_modules/dojo/domReady.js","webpack:///./node_modules/ol/style/Style.js","webpack:///./node_modules/ol/proj/epsg3857.js","webpack:///./node_modules/ol/proj/epsg4326.js","webpack:///./node_modules/ol/proj/projections.js","webpack:///./node_modules/ol/proj.js","webpack:///./node_modules/ol/geom/GeometryType.js","webpack:///./node_modules/date-fns/_lib/requiredArgs/index.js","webpack:///./node_modules/ol/Feature.js","webpack:///./node_modules/dojo/Deferred.js","webpack:///./node_modules/dojo/Evented.js","webpack:///./node_modules/ol/style/Circle.js","webpack:///./node_modules/ol/layer/BaseVector.js","webpack:///./node_modules/ol/render/canvas/Instruction.js","webpack:///./node_modules/ol/render/VectorContext.js","webpack:///./node_modules/ol/render/canvas/Builder.js","webpack:///./node_modules/ol/render/canvas/ImageBuilder.js","webpack:///./node_modules/ol/render/canvas/LineStringBuilder.js","webpack:///./node_modules/ol/render/canvas/PolygonBuilder.js","webpack:///./node_modules/ol/geom/flat/straightchunk.js","webpack:///./node_modules/ol/render/canvas/TextBuilder.js","webpack:///./node_modules/ol/render/canvas/BuilderGroup.js","webpack:///./node_modules/ol/render/canvas/BuilderType.js","webpack:///./node_modules/ol/geom/flat/textpath.js","webpack:///./node_modules/ol/render/canvas/Executor.js","webpack:///./node_modules/ol/render/canvas/ExecutorGroup.js","webpack:///./node_modules/ol/render/canvas/Immediate.js","webpack:///./node_modules/ol/renderer/vector.js","webpack:///./node_modules/ol/renderer/canvas/VectorLayer.js","webpack:///./node_modules/ol/render/canvas/hitdetect.js","webpack:///./node_modules/ol/layer/Vector.js","webpack:///./node_modules/ol/geom/Polygon.js","webpack:///./node_modules/ol/geom/Point.js","webpack:///./node_modules/date-fns/toDate/index.js","webpack:///./node_modules/ol/featureloader.js","webpack:///./node_modules/ol/source/Vector.js","webpack:///./node_modules/ol/util.js","webpack:///./node_modules/ol/style/IconImage.js","webpack:///./node_modules/ol/style/IconOrigin.js","webpack:///./node_modules/ol/style/Icon.js","webpack:///./node_modules/ol/events/EventType.js","webpack:///./node_modules/dojo/request/xhr.js","webpack:///./node_modules/dojo/json.js","webpack:///./node_modules/ol/style/Fill.js","webpack:///./node_modules/ol/style/Stroke.js","webpack:///./node_modules/ol/obj.js","webpack:///./node_modules/ol/color.js","webpack:///./node_modules/ol/math.js","webpack:///./node_modules/ol/array.js","webpack:///./node_modules/dojo/io-query.js","webpack:///./node_modules/ol/asserts.js","webpack:///./node_modules/lit-html/lib/default-template-processor.js","webpack:///./node_modules/lit-html/lit-html.js","webpack:///./node_modules/ol/events.js","webpack:///./node_modules/ol/Object.js","webpack:///./node_modules/ol/functions.js","webpack:///./node_modules/ol/interaction/Pointer.js","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///./node_modules/ol/dom.js","webpack:///./node_modules/ol/events/condition.js","webpack:///./node_modules/dojo/promise/Promise.js","webpack:///./node_modules/ol/Collection.js","webpack:///./node_modules/ol/events/Event.js","webpack:///./node_modules/ol/style/RegularShape.js","webpack:///./node_modules/dojo/errors/CancelError.js","webpack:///./node_modules/dojo/_base/fx.js","webpack:///./node_modules/lit-html/lib/parts.js","webpack:///./node_modules/ol/style/Text.js","webpack:///./node_modules/ol/coordinate.js","webpack:///./node_modules/dojo/request/util.js","webpack:///./node_modules/ol/proj/Units.js","webpack:///./node_modules/ol/transform.js","webpack:///./node_modules/ol/render/canvas.js","webpack:///./node_modules/dojo/request.js","webpack:///./node_modules/dojo/request/watch.js","webpack:///./node_modules/ol/interaction/Interaction.js","webpack:///./node_modules/lit-html/lib/template.js","webpack:///./node_modules/ol/CollectionEventType.js","webpack:///./node_modules/ol/MapBrowserEventType.js","webpack:///./node_modules/ol/geom/flat/deflate.js","webpack:///./node_modules/ol/geom/SimpleGeometry.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/ol/Observable.js","webpack:///./node_modules/ol/css.js","webpack:///./node_modules/ol/easing.js","webpack:///./node_modules/ol/has.js","webpack:///./node_modules/ol/TileState.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lit-html/lib/dom.js","webpack:///./node_modules/ol/ImageState.js","webpack:///./node_modules/ol/geom/flat/inflate.js","webpack:///./node_modules/ol/geom/GeometryLayout.js","webpack:///./node_modules/ol/geom/flat/transform.js","webpack:///./node_modules/dojo-webpack-plugin/lib/NoModule.js","webpack:///./node_modules/ol/events/Target.js","webpack:///./node_modules/ol/layer/Layer.js","webpack:///./node_modules/ol/source/State.js","webpack:///./node_modules/ol/proj/Projection.js","webpack:///./node_modules/ol/geom/flat/simplify.js","webpack:///./node_modules/ol/size.js","webpack:///./node_modules/ol/structs/RBush.js","webpack:///./node_modules/ol/source/VectorEventType.js","webpack:///./node_modules/ol/tilecoord.js","webpack:///./node_modules/ol/ObjectEventType.js","webpack:///./node_modules/ol/MapEventType.js","webpack:///./node_modules/ol/geom/flat/closest.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lit-html/lib/template-result.js","webpack:///./node_modules/lit-html/lib/template-factory.js","webpack:///./node_modules/ol/reproj/common.js","webpack:///./node_modules/ol/tilegrid/TileGrid.js","webpack:///./node_modules/ol/tilegrid.js","webpack:///./node_modules/dojo/global.js","webpack:///./node_modules/ol/render/EventType.js","webpack:///./node_modules/ol/geom/flat/contains.js","webpack:///./node_modules/ol/geom/LinearRing.js","webpack:///./node_modules/ol/geom/flat/intersectsextent.js","webpack:///./node_modules/ol/MapBrowserEvent.js","webpack:///./node_modules/ol/ViewHint.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lit-html/lib/render.js","webpack:///./node_modules/lit-html/lib/directive.js","webpack:///./node_modules/lit-html/lib/part.js","webpack:///./node_modules/lit-html/lib/template-instance.js","webpack:///./node_modules/ol/colorlike.js","webpack:///./node_modules/dojo/regexp.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/slider/slider.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/common/common.js","webpack:///./node_modules/ol/Disposable.js","webpack:///./node_modules/ol/rotationconstraint.js","webpack:///./node_modules/ol/geom/flat/area.js","webpack:///./node_modules/ol/geom/Geometry.js","webpack:///./node_modules/ol/proj/transforms.js","webpack:///./node_modules/ol/tilegrid/common.js","webpack:///./node_modules/lodash/forIn.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/isArrayLike.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/dojo/errors/create.js","webpack:///./node_modules/dojo/errors/RequestError.js","webpack:///./node_modules/ol/Image.js","webpack:///./node_modules/ol/loadingstrategy.js","webpack:///./node_modules/ol/source/Source.js","webpack:///./node_modules/ol/source/common.js","webpack:///./node_modules/date-fns/isValid/index.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/common/position.js","webpack:///./node_modules/@syncfusion/ej2-data/src/query.js","webpack:///./node_modules/@syncfusion/ej2-data/src/util.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/v-scroll.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/menu-scroll.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/menu-base.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/context-menu/context-menu.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/treeview/treeview.js","webpack:///./node_modules/ol/geom/flat/reverse.js","webpack:///./node_modules/ol/geom/flat/orient.js","webpack:///./node_modules/ol/renderer/Layer.js","webpack:///./node_modules/ol/renderer/canvas/Layer.js","webpack:///./node_modules/ol/AssertionError.js","webpack:///./node_modules/ol/layer/Property.js","webpack:///./node_modules/ol/layer/Base.js","webpack:///./node_modules/ol/interaction/Property.js","webpack:///./node_modules/ol/extent/Relationship.js","webpack:///./node_modules/ol/extent/Corner.js","webpack:///./node_modules/ol/geom/flat/interiorpoint.js","webpack:///./node_modules/ol/sphere.js","webpack:///./node_modules/ol/geom/flat/segments.js","webpack:///./node_modules/ol/render/Event.js","webpack:///./node_modules/ol/style/IconImageCache.js","webpack:///./node_modules/ol/MapEvent.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/isLength.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/set.js","webpack:///./node_modules/dojo/_base/Color.js","webpack:///./node_modules/ol/style/IconAnchorUnits.js","webpack:///./node_modules/ol/ImageBase.js","webpack:///./node_modules/ol/style/Image.js","webpack:///./node_modules/ol/style/TextPlacement.js","webpack:///./node_modules/ol/geom/flat/length.js","webpack:///./node_modules/rbush/rbush.min.js","webpack:///./node_modules/ol/format/FormatType.js","webpack:///./node_modules/ol/TileRange.js","webpack:///./node_modules/ol/reproj.js","webpack:///./node_modules/ol/reproj/Triangulation.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/common/collision.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/input/input.js","webpack:///./node_modules/ol/Tile.js","webpack:///./node_modules/ol/ImageTile.js","webpack:///./node_modules/ol/reproj/Tile.js","webpack:///./node_modules/ol/structs/LRUCache.js","webpack:///./node_modules/ol/TileCache.js","webpack:///./node_modules/ol/source/TileEventType.js","webpack:///./node_modules/ol/source/Tile.js","webpack:///./node_modules/ol/tileurlfunction.js","webpack:///./node_modules/ol/source/UrlTile.js","webpack:///./node_modules/ol/source/TileImage.js","webpack:///./node_modules/ol/source/XYZ.js","webpack:///./node_modules/ol/ViewProperty.js","webpack:///./node_modules/ol/centerconstraint.js","webpack:///./node_modules/ol/resolutionconstraint.js","webpack:///./node_modules/ol/View.js","webpack:///./node_modules/ol/ol.css?bd93","webpack:///./node_modules/lodash/_baseFor.js","webpack:///./node_modules/lodash/_createBaseFor.js","webpack:///./node_modules/lodash/_castFunction.js","webpack:///./node_modules/lodash/identity.js","webpack:///./node_modules/lodash/keysIn.js","webpack:///./node_modules/lodash/_arrayLikeKeys.js","webpack:///./node_modules/lodash/_baseTimes.js","webpack:///./node_modules/lodash/isArguments.js","webpack:///./node_modules/lodash/_baseIsArguments.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isBuffer.js","webpack:///./node_modules/lodash/stubFalse.js","webpack:///./node_modules/lodash/isTypedArray.js","webpack:///./node_modules/lodash/_baseIsTypedArray.js","webpack:///./node_modules/lodash/_baseUnary.js","webpack:///./node_modules/lodash/_nodeUtil.js","webpack:///./node_modules/lodash/_baseKeysIn.js","webpack:///./node_modules/lodash/_isPrototype.js","webpack:///./node_modules/lodash/_nativeKeysIn.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/dojo/promise/instrumentation.js","webpack:///./node_modules/dojo/promise/tracer.js","webpack:///./node_modules/dojo/errors/RequestTimeoutError.js","webpack:///./node_modules/dojo/request/handlers.js","webpack:///./node_modules/lit-html/directives/unsafe-html.js","webpack:///./node_modules/ol/source/OSM.js","webpack:///./node_modules/date-fns/max/index.js","webpack:///./node_modules/dojo/cookie.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/popup/popup.js","webpack:///./node_modules/ol/renderer/Map.js","webpack:///./node_modules/ol/renderer/Composite.js","webpack:///./node_modules/ol/layer/Group.js","webpack:///./node_modules/ol/pointer/EventType.js","webpack:///./node_modules/ol/MapBrowserEventHandler.js","webpack:///./node_modules/ol/MapProperty.js","webpack:///./node_modules/ol/structs/PriorityQueue.js","webpack:///./node_modules/ol/TileQueue.js","webpack:///./node_modules/ol/PluggableMap.js","webpack:///./node_modules/ol/control/Control.js","webpack:///./node_modules/ol/control/Attribution.js","webpack:///./node_modules/ol/control/Rotate.js","webpack:///./node_modules/ol/control/Zoom.js","webpack:///./node_modules/ol/interaction/DoubleClickZoom.js","webpack:///./node_modules/ol/interaction/DragPan.js","webpack:///./node_modules/ol/interaction/DragRotate.js","webpack:///./node_modules/ol/render/Box.js","webpack:///./node_modules/ol/interaction/DragBox.js","webpack:///./node_modules/ol/interaction/DragZoom.js","webpack:///./node_modules/ol/events/KeyCode.js","webpack:///./node_modules/ol/interaction/KeyboardPan.js","webpack:///./node_modules/ol/interaction/KeyboardZoom.js","webpack:///./node_modules/ol/Kinetic.js","webpack:///./node_modules/ol/interaction/MouseWheelZoom.js","webpack:///./node_modules/ol/interaction/PinchRotate.js","webpack:///./node_modules/ol/interaction/PinchZoom.js","webpack:///./node_modules/ol/Map.js","webpack:///./node_modules/ol/control.js","webpack:///./node_modules/ol/interaction.js","webpack:///./node_modules/lit-html/lib/modify-template.js","webpack:///./node_modules/lit-html/lib/shady-render.js","webpack:///./node_modules/lit-element/lib/updating-element.js","webpack:///./node_modules/lit-element/lib/decorators.js","webpack:///./node_modules/lit-element/lib/css-tag.js","webpack:///./node_modules/lit-element/lit-element.js","webpack:///./node_modules/ol/layer/BaseTile.js","webpack:///./node_modules/ol/layer/TileProperty.js","webpack:///./node_modules/ol/renderer/canvas/TileLayer.js","webpack:///./node_modules/ol/layer/Tile.js","webpack:///./node_modules/ol/reproj/Image.js","webpack:///./node_modules/ol/source/Image.js","webpack:///./node_modules/ol/source/ImageArcGISRest.js","webpack:///./node_modules/ol/uri.js","webpack:///./node_modules/ol/layer/BaseImage.js","webpack:///./node_modules/ol/renderer/canvas/ImageLayer.js","webpack:///./node_modules/ol/layer/Image.js","webpack:///./node_modules/@syncfusion/ej2-data/src/adaptors.js","webpack:///./node_modules/@syncfusion/ej2-data/src/manager.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","webpack:///./node_modules/@syncfusion/ej2-lists/src/common/list-base.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js"],"names":["dojo","has","require","domReady","lang","isDomReady","loadQ","onLoadRecursiveGuard","handleDomReady","_postLoad","config","afterOnLoad","onEvent","_Q","length","idle","f","shift","e","info","message","signal","on","_onQEmpty","ready","addOnLoad","priority","context","callback","hitchArgs","_toArray","arguments","hitch","apply","i","splice","add","dca","isArray","parseOnLoad","isAsync","parser","deprecated","toString","_extraNames","split","_extraLen","getProp","parts","create","scopeMap","global","p","opts","Object","prototype","efficient","obj","offset","startWith","concat","Array","slice","call","_pattern","_mixin","dest","source","copyFunc","name","s","empty","mixin","sources","l","setObject","value","pop","undefined","getObject","exists","isString","it","String","isFunction","isObject","isArrayLike","tagName","toLowerCase","isFinite","isAlien","test","extend","ctor","props","_hitchArgs","scope","method","pre","named","args","this","join","delegate","TMP","tmp","slow","arr","x","push","partial","clone","src","nodeType","cloneNode","Date","getTime","RegExp","r","constructor","trim","str","replace","tmpl","map","pattern","_","k","cache","buildFn","fn","Function","everyOrSome","some","every","a","o","result","index","up","delta","lOver","uOver","from","last","array","lastIndexOf","end","u","indexOf","forEach","thisObject","Ctr","out","filter","clearCache","module","item","dijit","dojox","packageMap","id","match","_scopeName","noGlobals","baseUrl","async","locale","rev","version","major","minor","patch","flag","revision","NaN","v","exit","exitcode","quit","bind","console","log","tn","cn","tcn","unshift","_fake","isDebug","experimental","behaviour","extra","removal","warn","moduleName","modulePaths","paths","moduleUrl","url","toUrl","_hasResource","aspect","window","ScriptEngineMajorVersion","ScriptEngineMinorVersion","Event","stopImmediatePropagation","doc","element","EventDelegate","document","createEvent","eventDelegate","target","type","listener","dontFix","parse","addListener","pausable","paused","pause","resume","once","remove","matchesTarget","events","eventName","handles","touchEvents","selector","fixTouchListener","addStopImmediate","addEventListener","capture","captures","adjustedType","removeEventListener","fixAttach","attachEvent","Error","syntheticPreventDefault","cancelable","defaultPrevented","syntheticStopPropagation","bubbles","matches","node","children","query","parentNode","eventType","bubble","select","eventTarget","event","selectorTarget","syntheticDispatch","emit","newEvent","preventDefault","stopPropagation","focusin","focusout","immediatelyStopped","modified","dispatchEvent","ownerDocument","nativeEvent","initEvent","_fixEvent","evt","sender","parentWindow","lastEvent","srcElement","currentTarget","relatedTarget","fromElement","toElement","c","charCode","keyCode","_setKeyChar","IESignal","handle","_dojoIEListeners_","setTimeout","fixListener","top","emitter","listeners","oldListener","after","keyChar","fromCharCode","charOrCode","cancelBubble","_preventDefault","bubbledKeyCode","ctrlKey","returnValue","windowOrientation","orientation","originalEvent","corrected","rotation","scale","TouchEvent","firstChangeTouch","changedTouches","win","kernel","execCommand","dom","byId","_d","te","getElementById","attributes","eles","all","nodeName","contains","isDescendant","ancestor","style","prefixes","cssUserSelect","setSelectable","selectable","nodes","getElementsByTagName","removeAttribute","setAttribute","instances","uid","isBlazorPlatform","createInstance","classFunction","params","arrayParam","getValue","nameSpace","splits","isUndefined","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","merge","destination","temrObj","tempProp","_i","keys_1","copied","first","second","deep","_loop_1","arguments_1","obj1","copy","isArrayChanged","blazorEventExtend","isBlazor","hasOwnProperty","getUniqueID","definedName","compareElementParent","child","parent","throwError","stack","formatUnit","getElement","Node","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","getInstance","component","elem","querySelector","_a","inst","HijriParser","defaultNumberingSystem","defaultNumberSymbols","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","prop","res","propKeys_1","getSymbolRegex","regexStr","getSymbolMatch","ret","matchKeys_1","constructRegex","val","len","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","blazorMode","cur","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","mapper","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","blazorCurrencyData","dateCorrection","getHijriDate","gDate","day","getDate","month","getMonth","year","getFullYear","tMonth","tYear","yPrefix","Math","floor","julilanOffset","julianNumber","b","d","tempMonth","modifiedJulianDate","z","cyc","j","iy","im","tempDay","iln","ii","hYear","hmonth","hDate","date","toGregorian","julianDate","gDay","gMonth","gYear","abbreviateRegexGlobal","weekdayKey","timeSetter","m","h","H","datePartMatcher","DateFormat","dateFormat","culture","option","cldr","_this","dependable","getDependables","calendar","numObject","dateObject","formatOptions","isIslamic","islamicRegex","isServerRendered","compareBlazorDateFormats","resPattern","format","getResultantPattern","skeleton","dateSeperator","getDateSeparator","ConvertDateToWeekFormat","numMapper","parserObject","patternMatch_1","char","weekday","monthIndex","days","designator","eText","era","timeZone","isNaN","intDateFormatter","options","dateParseRegex","dObject","getCurrentDateValue","matches_1","length_1","curval","curvalstr","processNumber","curstr","getDay","curlength","substring","substr","desig","getHours","dec","retu","timezone","getTimezoneOffset","pattern_1","hourFormat","gmtZeroFormat","getTimeZoneValue","gmtFormat","getWeekOfYear","checkTwodigitNumber","latnParseRegex","tVal","curPattern","no","abs","ishour","errorText","NumberFormat","numberFormatter","symbolPattern","fOptions","cOptions","dOptions","numericObject","numberMapper","currencySymbol","getCurrencySymbol","currency","defaultCurrencyCode","altSymbol","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","getSymbolPattern","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","useGrouping","defaultCurrency","nData","pData","replaceBlazorCurrency","getFormatData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","intNumberFormatter","negativeDataRegex","temp","primary","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","text","range","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","toExponential","groupNumbers","nlead","nend","min","max","toPrecision","level1","sep","decimalSymbol","level2","prefix","toFixed","lead","minute","hour","milliseconds","DateParser","dateParser","numOptions","parseOptions","hourOnly","regexString","evalposition","patternMatch","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","numbers","canUpdate","charKey","optional","weekData","weekObject","monthData","hour12","periodValur","tzone","hpattern","parseTimeZoneRegx","pos","parserRegex","parsedDateParts","internalDateParse","dobj","tDate","ystrig","is2DigitYear","parseInt","getDateObject","setMilliseconds","y","setFullYear","tKeys_1","tValue","setDate","pDate","lDate","lastDay","setHours","tzValue","setMinutes","getMinutes","num","retOptions","props_1","curObject","matchString","internalNumberParser","toUpperCase","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","custom","symbolpattern","symbolRegex","infinity","getParsedNumber","isNegative","tempValue","Infinity","exponent","parseFloat","convertMaxFracDigits","decimalSplitValue","Observer","ranArray","boundedEvents","property","handler","cntxt","notExist","isHandlerPresent","off","indexLocation","notify","argument","successHandler","errorHandler","blazorCallback","curObject_1","objs","isTrigger","obj_1","promise","then","data","isJson","JSON","dateReviver","catch","destroy","boundedEvents_1","onIntlChange","rightToLeft","cldrData","defaultCulture","Internationalization","cultureName","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","isExcelFormat","getActualDateTimeFormat","getNumberPattern","isExcel","getActualNumberFormat","getFirstDayOfWeek","getWeekData","getNumericObject","numSystem","symbPattern","getDefaultDateObject","mode","blazorCultureFormats","IntlBase","customRegex","fractionRegex","patternRegex","'","dateConverterMapper","firstDayMapper","currencyFormatRegex","curWithoutNumberRegex","typeMapper","0","1","blazorCulture","iType","basicPatterns","dPattern","tPattern","calendartype","blazorDefaultObject","defaultObject","dateString","convertMapper","tempString","curFormatMapper","patternMatcher","needFraction","cSymbol","fractionOnly","changeCurrencySymbol","groupPattern","fraction","fmatch","sym","currencyCode","customNumberFormat","integerPart","fractionPart","isCurrencyPercent","actual","symbol","part","loc","3","4","5","C","P","N","A","E","formatSplit","dateObj","actualPattern","tLength","timeZonePattern","options_1","minFrac","numrericObject","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","diff","fractionDigitsPattern","integer","minimumIntegerPattern","groupingPattern","cPattern","processSymbol","firstDay","iCulture","aCurrency","rCurrency","iCurrency","pData_1","weeknum","newYear","daynum","nday","headerRegex","Ajax","contentType","emitError","send","eventArgs","cancel","httpRequest","Promise","resolve","reject","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","open","setRequestHeader","beforeSend","onSuccess","failureHandler","reason","onFailure","responseText","dataType","error","readyState","status","statusText","getResponseHeader","responseHeaders","header","headers","exec","getAllResponseHeaders","REGX_MOBILE","REGX_IE","REGX_IE11","REGX_IOS","REGX_IOS7","REGX_ANDROID","REGX_WINDOWS","REGX_VERSION","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","Browser","extractBrowserDetail","browserInfo","clientInfo","userAgent","language","navigator","getEvent","isPointer","isTouch","isDevice","move","isWindows","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","regX","defineProperty","get","uA","set","enumerable","configurable","maxTouchPoints","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","EventHandler","addOrGetEventData","__eventList","bindTo","intDebounce","debounceListener","eventFunction","delay","eventData","later","clearTimeout","debounce","isIE","passive","clearEvents","copyData","trigger","eventProp","eventData_1","event_1","LINES","QUOTES","IF_STMT","ELSEIF_STMT","ELSE_STMT","FOR_STMT","IF_OR_FOR","CALL_FUNCTION","NOT_NUMBER","WORD","DBL_QUOTED_STR","WORDIF","exp","ARR_OBJ","SINGLE_SLASH","DOUBLE_SLASH","WORDFUNC","WINDOWFUNC","compile","template","helper","evalExpResult","varCOunt","localKeys","isClass","singleSpace","cnt","matchStr","rlStr","addNameSpace","strs","HandleSpecialCharArrObj","rlStr_1","mtc","fnStr","fNameSpace","ftArray","SlashReplace","NameSpaceForspecialChar","evalExp","addNS","ignoreList","emptyStrCheck","tempStr","nameSpaceNew","quotes","NameSpaceArrObj","HAS_ROW","HAS_SVG","blazorTemplates","getRandomId","random","templateString","compiler","engineObj","propName","templateId","isStringTemplate","blazorId","className","innerHTML","childNodes","updateBlazorTemplate","templateName","comp","isEmpty","callBack","updateTemplate","resetBlazorTemplate","templateDiv","innerTemplates","getElementsByClassName","tempId","getAttribute","tempElement","appendChild","setTemplateEngine","classObj","getTemplateEngine","Engine","simpleRegex","multipleSplitRegex","idClassSelector","selectMapper","assigner","emptyElements","blockElements","inlineElement","selfClosingElements","fillAttrs","cspElement","nameMapper","startRegex","endRegex","attributeRegex","VirtualDOM","assignParent","childrens","detach","processSelector","curMapper","canPush","existValue","accessElement","ele","selectAll","immediateParent","temp_1","matched","mapper_1","expected","actualValue","ConvertHTMLToJSon","htmlString","isText","results","tagArray","nodeArray","lastVal","getLastValue","iterateText","iterateEndTag","iterateStartTag","tagIndex","rest","isSelfTag","attrs","names","valArr","vObj","length_3","cVal","styleSplit","tagObject","parent_3","parent_4","parent_5","createElement","properties","extended","styles","append","fromElements","prepend","vDomSelector","iSelector","curColl","length_2","parent_2","curSelector","splitSelector_1","dParent","descendent","_b","dSelector_1","sel","descendentChild","_c","dParent_1","iCurSelector","parent_1","curParent","setStyleAttribute","SVG_REG","createElementNS","addClass","elements","classes","classList","getClassList","classList_1","curClass","removeClass","classList_2","classArr","isVisible","visibility","offsetWidth","isEval","docFrag","createDocumentFragment","insertBefore","firstElementChild","executeScript","querySelectorAll","script","head","removeChild","iKey","needsVDOM","querySelectId","charRegex","idList","list","splitId","setId","closest","el","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","isColEName","Base","isRendered","isComplexArraySetter","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","ignoreCollectionWatch","finalUpdate","childChangedProperties","modelObserver","addInstance","setProperties","isDestroyed","muteOnChange","prevDetection","dataBind","serverDataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","updateModel","saveChanges","newValue","oldValue","unbind","Uint16Array","msCrypto","crypto","getRandomValues","secret","combineArray","messageHandler","postMessage","setImmediate","moduleClass","getModuleName","ej2_instances","instance","curKey","defaultValue","getObjectArray","isSetter","isFactory","curType","propertyGetter","propertySetter","oldVal","complexGetter","complexSetter","complexArrayGetter","defCollection","ignore","controlParent","extendFunc","descriptor","complexArrayDefinedCallback","complexArraySetter","oldValueCollection","newValCollection","dFunc","keyString","getParentKey","model_1","getArrayModel","model","ejsAction","isControlParent","arrayFunction","modelObject","Property","propertyDescriptor","addPropertyCollection","Complex","Collection","eventDescriptor","finalContext","getParentContext","curText","NotifyPropertyChanges","classConstructor","propertyType","propList","complexProps","colProps","propNames","complexPropNames","colPropNames","eventNames","propertyName","extendStatics","__extends","setPrototypeOf","__proto__","__","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","_super","Animation","easing","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","animate","getModel","elements_1","element_1","delayAnimation","stop","animation","animationId","frameId","cancelAnimationFrame","applyAnimation","timeStamp","step","timerId","prevTimeStamp","duration","startAnimation","begin","avg","timingFunction","progress","requestAnimationFrame","performance","now","fail","newProp","oldProp","rippleEffect","rippleOptions","done","rippleModel","rippleFlag","isCenterRipple","getRippleModel","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","left","right","bottom","radius","sqrt","diameter","rippleElement","getComputedStyle","getPropertyValue","transform","removeRipple","rippleElements","opacity","lastPageID","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","modules","usedModules","arg","removableModule_1","mod","ChildProperty","parentObj","isParentArray","updateChange","updateTimeOut","changeTime_1","curIndex","restrictServerDataBind","isSaveChanges","action","parentKey","complexKeys","isFinal","valueLength","componentCount","lastHistoryLen","versionBasedStatePersistence","Component","randomId","uniqueID","needsID","isReactHybrid","enableRtl","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","localStorage","getItem","ej2StatePersistenceVersion","mergePersistData","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","setItem","getPersistData","renderReactTemplates","clearTemplate","isHistoryChanged","pageID","location","href","history","hash","charCodeAt","addOnPersist","persistObj","objValue","getActualProperties","stringify","ignoreOnPersist","iterateJsonProperties","newObj","newList","this_1","defaultPosition","isDraggedObject","isDragged","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","borderWidth","padding","diffX","prevLeft","prevTop","dragProcessStarted","tapHoldTimer","externalInitialize","diffY","parentScrollX","parentScrollY","droppables","toggleEvents","isUnWire","enableTapHold","mobileInitialize","initialize","removeTapholdTimer","tapHoldThreshold","getScrollableParent","axis","tempScrollHeight","scrollHeight","tempScrollWidth","scrollWidth","getScrollableValues","curTarget","currentStateTarget","isDragStarted","abort","abortSelectors","intCoord","getCoordinates","initialPosition","clientX","clientY","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isPreventSelect","isChangeTouch","intCordinate","styleProp","margin","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","isReplaceDragEle","currentStateCheck","calculateParentPosition","position","getMousePosition","isDragScroll","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","offsetParent","dragStart","getProperTargetElement","bindEvents","bindDragEvents","dragElement","dragArea","setDragArea","enableTailMode","posValue","getProcessedPositionValue","dragElePosition","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","offsetTop","offsetLeft","width","height","offsetHeight","pageYOffset","pageXOffset","innerHeight","innerWidth","queryPositionInfo","rect","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","hoverObject","triggerOutFunction","dragData","intOver","tLeft","tTop","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","draEleTop","draEleLeft","iTop","iLeft","tempDraEleTop","dragValue","enableAutoScroll","scrollIntoView","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","change","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","pointerEvents","elementFromPoint","oldEle","isdragscroll","dragEle","isOffsetParent","cursorAt","reset","draggable","draggedElement","dropIns","getDropInstance","parentElement","drop","eleInst","eleInst_1","Droppable","mouseOver","wireEvents","area","accept","isDrag","isDropArea","canDrop","droppedElement","display","coord","KeyboardEvents","keyPressHandler","isAltKey","altKey","isCtrlKey","isShiftKey","shiftKey","curkeyCode","which","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","keyAction","unwireEvents","configCache","keyData","Number","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","getConstant","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","point","updateChangeTouches","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","timeOutTapHold","tapHoldEvent","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","startX","startY","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","endPoint","calcPoints","swipeArgs","swipeDirection","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","moved","checkSwipe","modeClear","lastTapTime","eleStyle","overflow","overflowX","overflowY","eTapArgs","pnt","newX","newY","newT","xDist","yDist","interval","removeTags","removeAttrs","attribute","jsEvents","SanitizeHtmlHelper","beforeSanitize","selectors","tags","sanitize","serializeValue","wrapElement","removeXssTags","removeJsEvents","removeXssAttrs","tempEleValue","removeElement","localName","attr","hasAttribute","isBrowser","force","process","versions","v8","Packages","msMaxTouchPoints","pointerEnabled","msPointerEnabled","screen","availWidth","form","clearElement","normalize","toAbsMid","tokens","skip","term","parentRequire","loaded","n","dua","dav","appVersion","tv","compatMode","$1","os","SVGAngle","documentMode","opera","wiiremote","toPixel","dv","defaultView","currentStyle","opener","avalue","rs","runtimeStyle","cs","sLeft","rsLeft","pixelLeft","toPixelValue","astr","af","filters","_getOpacity","Opacity","_setOpacity","ov","zoom","Enabled","td","firstChild","nextSibling","_pixelNamesCache","_pixelRegExp","_toStyleValue","_floatAliases","cssFloat","styleFloat","op","setContext","globalObject","globalDocument","withGlobal","cbArguments","oldGlob","withDoc","documentObject","pwin","oldDoc","oldQ","oldIE","isQuirks","cls","spaces","a1","str2array","fakeNode","classStr","oldLen","addClassStr","removeClassStr","toggle","condition","rawConfig","adviseHas","featureSet","booting","dojoConfig","djConfig","languages","userLanguage","methodName","advice","receiveArguments","dispatcher","existing","executionId","nextId","before","next","around","newResults","previous","advised","advise","boundingExtent","coordinates","extent","createEmpty","extendCoordinate","buffer","opt_extent","closestSquaredDistanceXY","dx","dy","containsCoordinate","coordinate","containsXY","containsExtent","extent1","extent2","coordinateRelationship","minX","minY","maxX","maxY","relationship","UNKNOWN","LEFT","RIGHT","BELOW","ABOVE","INTERSECTING","createOrUpdate","createOrUpdateEmpty","createOrUpdateFromCoordinate","createOrUpdateFromCoordinates","extendCoordinates","createOrUpdateFromFlatCoordinates","flatCoordinates","stride","extendFlatCoordinates","createOrUpdateFromRings","rings","extendRings","equals","approximatelyEquals","tolerance","extendXY","forEachCorner","getBottomLeft","getBottomRight","getTopRight","getTopLeft","getArea","getWidth","getHeight","getCenter","getCorner","corner","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","getEnlargedArea","getForViewAndSize","center","resolution","size","cosRotation","cos","sinRotation","sin","xCos","xSin","yCos","ySin","x0","x1","x2","x3","y0","y1","y2","y3","getIntersectionArea","getIntersection","intersection","intersects","getMargin","getSize","returnOrUpdate","scaleFromCenter","deltaX","deltaY","intersectsSegment","startRel","endRel","endX","endY","slope","applyTransform","transformFn","opt_stops","xs","ys","_boundingExtentXYs","wrapX","projection","projectionExtent","getExtent","canWrapX","worldWidth","recursiveGuard","readyStates","fixReadyState","readyQ","processQ","err","req","tests","detectReady","detachEvent","div","doScroll","frameElement","poller","Style","opt_options","geometry_","geometryFunction_","defaultGeometryFunction","geometry","setGeometry","fill_","fill","image_","image","renderer_","renderer","stroke_","stroke","text_","zIndex_","zIndex","getGeometry","getFill","getImage","getStroke","getText","getZIndex","getRenderer","setRenderer","getGeometryFunction","setFill","setImage","setStroke","setText","feature","setZIndex","toFunction","styleFunction","styles_1","defaultStyles","createDefaultStyle","color","createEditingStyle","white","blue","POLYGON","MULTI_POLYGON","LINE_STRING","MULTI_LINE_STRING","CIRCLE","POINT","MULTI_POINT","GEOMETRY_COLLECTION","HALF_SIZE","PI","EXTENT","WORLD_EXTENT","MAX_SAFE_Y","tan","EPSG3857Projection","code","units","Units","METERS","worldExtent","getPointResolution","Projection","PROJECTIONS","fromEPSG4326","input","opt_output","opt_dimension","dimension","output","toEPSG4326","atan","METERS_PER_UNIT","EPSG4326Projection","opt_axisOrientation","DEGREES","axisOrientation","metersPerUnit","cloneTransform","identityTransform","addProjection","getCode","addProjections","projections","projectionLike","opt_units","pointResolution","getter","getPointResolutionFunc","getUnits","getMetersPerUnit","toEPSG4326_1","getTransformFromProjections","vertices","addEquivalentProjections","addEquivalentTransforms","projections1","projections2","forwardTransform","inverseTransform","projection1","projection2","clearAllProjections","createProjection","defaultCode","createTransformFromCoordinateTransform","coordTransform","addCoordinateTransforms","forward","inverse","sourceProj","destProj","fromLonLat","opt_projection","toLonLat","lonLat","lon","equivalent","equalUnits","sourceProjection","destinationProjection","sourceCode","destinationCode","transformFunc","getTransform","transformExtent","transformWithProjections","userProjection","setUserProjection","clearUserProjection","getUserProjection","useGeographic","toUserCoordinate","fromUserCoordinate","destProjection","toUserExtent","fromUserExtent","createSafeCoordinateTransform","transformed","worldsAway","sourceX","sourceY","sourceExtent","sourceExtentWidth","addCommon","LINEAR_RING","exports","default","required","TypeError","Feature","opt_geometryOrProperties","id_","geometryName_","style_","styleFunction_","geometryChangeKey_","handleGeometryChanged_","hasProperties","getProperties","setGeometryName","getGeometryName","getStyle","setStyle","getId","getStyleFunction","handleGeometryChange_","changed","CHANGE","opt_style","createStyleFunction","CancelError","instrumentation","FULFILLED_ERROR_MESSAGE","freezeObject","freeze","signalWaiting","waiting","rejection","deferred","Deferred","instrumentRejected","signalListener","func","newResult","signalDeferred","makeDeferredSignaler","isCanceled","canceler","fulfilled","canceled","captureStackTrace","isResolved","isRejected","isFulfilled","update","strict","errback","progback","returnedReason","Evented","CircleStyle","points","rotateWithView","displacement","getScale","getRadius","getRotation","getRotateWithView","getDisplacement","setOpacity","getOpacity","setRadius","radius_","BaseVector","BaseVectorLayer","baseOptions","renderBuffer","updateWhileAnimating","updateWhileInteracting","declutter_","declutter","renderBuffer_","updateWhileAnimating_","updateWhileInteracting_","getDeclutter","getFeatures","pixel","getRenderBuffer","getRenderOrder","getUpdateWhileAnimating","getUpdateWhileInteracting","renderDeclutter","frameState","declutterTree","setRenderOrder","renderOrder","Layer","Instruction","BEGIN_GEOMETRY","BEGIN_PATH","CLOSE_PATH","CUSTOM","DRAW_CHARS","DRAW_IMAGE","END_GEOMETRY","FILL","MOVE_TO_LINE_TO","SET_FILL_STYLE","SET_STROKE_STYLE","STROKE","beginPathInstruction","closePathInstruction","VectorContext","drawCustom","drawGeometry","drawCircle","circleGeometry","drawFeature","drawGeometryCollection","geometryCollectionGeometry","drawLineString","lineStringGeometry","drawMultiLineString","multiLineStringGeometry","drawMultiPoint","multiPointGeometry","drawMultiPolygon","multiPolygonGeometry","drawPoint","pointGeometry","drawPolygon","polygonGeometry","drawText","setFillStrokeStyle","fillStyle","strokeStyle","setImageStyle","imageStyle","opt_declutterImageWithText","setTextStyle","textStyle","CanvasBuilder","maxExtent","pixelRatio","maxLineWidth","beginGeometryInstruction1_","beginGeometryInstruction2_","bufferedMaxExtent_","instructions","tmpCoordinate_","hitDetectionInstructions","state","applyPixelRatio","dashArray","dash","appendFlatPointCoordinates","getBufferedMaxExtent","tmpCoord","myEnd","appendFlatLineCoordinates","closed","skipFirst","lastRel","nextRel","lastXCoord","lastYCoord","nextCoord","skipped","Relationship","drawCustomCoordinates_","ends","builderEnds","builderEnd","beginGeometry","builderEndss","getType","getStride","builderBegin","GeometryType","getOrientedFlatCoordinates","endss","getEndss","myEnds","inflate","getFlatCoordinates","getEnds","endGeometry","finish","reverseHitDetectionInstructions","reverse","instruction","fillStyleColor","getColor","strokeStyleColor","strokeStyleLineCap","getLineCap","lineCap","strokeStyleLineDash","getLineDash","lineDash","strokeStyleLineDashOffset","getLineDashOffset","lineDashOffset","strokeStyleLineJoin","getLineJoin","lineJoin","strokeStyleWidth","lineWidth","strokeStyleMiterLimit","getMiterLimit","miterLimit","createFill","fillInstruction","applyStroke","createStroke","updateFillStyle","currentFillStyle","updateStrokeStyle","currentStrokeStyle","currentLineCap","currentLineDash","currentLineDashOffset","currentLineJoin","currentLineWidth","currentMiterLimit","endGeometryInstruction","CanvasImageBuilder","hitDetectionImage_","imagePixelRatio_","anchorX_","anchorY_","height_","opacity_","originX_","originY_","rotateWithView_","rotation_","scale_","width_","declutterImageWithText_","myBegin","ceil","opt_sharedData","anchor","getAnchor","hitDetectionImage","getHitDetectionImage","origin","getOrigin","getPixelRatio","getScaleArray","CanvasLineStringBuilder","drawFlatCoordinates_","moveToLineToInstruction","lastStroke","CanvasPolygonBuilder","drawFlatCoordinatess_","numEnds","setFillStrokeStyles_","circleInstruction","matchingChunk","maxAngle","m12","m23","x12","y12","x23","y23","chunkStart","chunkEnd","chunkM","acos","TEXT_ALIGN","BATCH_CONSTRUCTORS","PolygonBuilder","Builder","ImageBuilder","LineStringBuilder","CanvasTextBuilder","labels_","textOffsetX_","textOffsetY_","textRotateWithView_","textRotation_","textFillState_","fillStates","textStrokeState_","strokeStates","textState_","textStates","textKey_","fillKey_","strokeKey_","fillState","strokeState","textState","geometryType","placement","TextPlacement","LINE","geometryWidths","getFlatMidpoint","getFlatMidpoints","getFlatInteriorPoint","interiorPoints","getFlatInteriorPoints","saveTextStates_","backgroundFill","backgroundStroke","p0","p1","p2","p3","pixelRatio_1","textAlign","flatOffset","flatEnd","oo","drawChars_","strokeKey","textKey","font","textBaseline","fillKey","baseline","strokeWidth","textFillStyle","textStrokeStyle","getFont","textScale","getOverflow","getMaxAngle","getPlacement","getTextAlign","getTextBaseline","getBackgroundFill","getBackgroundStroke","getPadding","textOffsetX","getOffsetX","textOffsetY","getOffsetY","textRotateWithView","textRotation","BuilderGroup","tolerance_","maxExtent_","pixelRatio_","resolution_","buildersByZIndex_","builderInstructions","zKey","builders","builderKey","builderInstruction","getBuilder","builderType","zIndexKey","replays","replay","Constructor","drawTextOnPath","startM","measureAndCacheTextWidth","segmentLength","segmentM","advance","interpolate","beginX","beginY","startOffset","startLength","endM","flat","previousAngle","singleSegment","previousAngle_1","atan2","angle","iStart","charLength","chars","tmpExtent","p4","getDeclutterBox","replayImageOrLabelArgs","declutterBox","rtlRegEx","horizontalTextAlign","align","Executor","overlaps","alignFill_","coordinateCache_","renderedTransform_","pixelCoordinates_","viewRotation_","widths_","createLabel","lines","numLines","widths","lineHeight","renderWidth","contextInstructions","w","label","OffscreenCanvasRenderingContext2D","CanvasRenderingContext2D","setLineDash","leftRight","replayTextBackground_","strokeInstruction","beginPath","moveTo","lineTo","setStrokeStyle_","calculateImageOrLabelDimensions_","sheetWidth","sheetHeight","centerX","centerY","anchorX","anchorY","originX","originY","snapToPixel","fillStroke","boxW","boxH","boxX","boxY","round","drawImageX","drawImageY","drawImageW","drawImageH","canvasTransform","replayImageOrLabel_","contextScale","imageOrLabel","dimensions","box","canvas","strokePadding","origin_1","repeatSize","save","translate","rotate","restore","drawLabelWithPointPlacement_","execute_","opt_featureCallback","opt_hitExtent","opt_declutterTree","pixelCoordinates","dd","prevX","prevY","roundX","roundY","currentGeometry","pendingFill","pendingStroke","lastFillInstruction","lastStrokeInstruction","coordinateCache","viewRotation","viewRotationFromTransform","batchSize","arc","closePath","coords","declutterImageWithText","labelWithAnchor","widthIndex","imageArgs","imageDeclutterBox","collides","insert","measurePixelRatio","pixelRatioScale","cachedWidths","pathLength","textLength","drawChars","cc","i_1","ii_1","execute","executeHitDetection","ORDER","BuilderType","ExecutorGroup","allInstructions","opt_renderBuffer","overlaps_","executorsByZIndex_","hitDetectionContext_","hitDetectionTransform_","createExecutors_","clip","flatClipCoords","getClipCoords","executors","instructionByZindex","hasExecutors","candidates","forEachFeatureAtCoordinate","hitTolerance","declutteredFeatures","contextSize","newContext","hitExtent","clearRect","indexes","circlePixelIndexArrayCache","maxDistanceSq","distances","distanceSq","pixelIndex","getPixelIndexArray","featureCallback","imageData","getImageData","idx","result_1","executor","zs","sort","opt_builderTypes","jj","builderTypes","CanvasImmediateRenderer","opt_squaredTolerance","opt_userTransform","context_","extent_","transform_","squaredTolerance_","userTransform_","contextFillState_","contextStrokeState_","contextTextState_","fillState_","strokeState_","imageAnchorX_","imageAnchorY_","imageHeight_","imageOpacity_","imageOriginX_","imageOriginY_","imageRotateWithView_","imageRotation_","imageScale_","imageWidth_","textScale_","tmpLocalTransform_","drawImages_","localTransform","alpha","globalAlpha","setTransform","drawImage","drawText_","setContextFillState_","setContextStrokeState_","setContextTextState_","strokeText","fillText","moveToLineTo_","close","drawRings_","geometries","getGeometriesArray","simplifyTransformed","flatMidpoint","geometryExtent","flatMidpoints","flatInteriorPoint","flatInteriorPoints","contextFillState","contextStrokeState","contextTextState","imageSize","imageAnchor","imageImage","imageOrigin","imageScale","textFillStyleColor","textStrokeStyleColor","textStrokeStyleLineCap","textStrokeStyleLineDash","textStrokeStyleLineDashOffset","textStrokeStyleLineJoin","textStrokeStyleWidth","textStrokeStyleMiterLimit","textFont","textText","textTextAlign","textTextBaseline","GEOMETRY_RENDERERS","builderGroup","opt_declutterBuilderGroup","getImageState","ImageState","LOADED","imageReplay","textReplay","lineStringReplay","polygonReplay","replayGroup","geometryRenderer","circleReplay","defaultOrder","feature1","feature2","getTolerance","renderFeature","squaredTolerance","opt_transform","loading","imageState","ERROR","unlistenImageChange","IDLE","listenImageChange","simplifiedGeometry","renderGeometry","getGeometries","renderFeatureInternal","CanvasVectorLayerRenderer","vectorLayer","boundHandleStyleImageChange_","handleStyleImageChange_","animatingOrInteracting_","dirty_","hitDetectionImageData_","renderedFeatures_","renderedRevision_","renderedResolution_","renderedExtent_","renderedRotation_","renderedCenter_","renderedProjection_","renderedRenderOrder_","replayGroup_","replayGroupChanged","declutterExecutorGroup","clipping","useContainer","renderWorlds","executorGroup","viewState","vectorSource","getLayer","getSource","viewHints","ViewHint","ANIMATING","INTERACTING","multiWorld","getWrapX","endWorld","world","getRenderTransform","renderFrame","layerState","layerStatesArray","layerIndex","pixelTransform","inversePixelTransform","containerReused","container","clipped","layerExtent","clipUnrotated","postRender","layer","transforms","features","imageSmoothingEnabled","featureCount","indexFactor","featuresByZIndex","featureStyleFunction","originalStyle","setColor","imgSize","getImageSize","canvas_1","imgContext","getContext","img","fillRect","width_1","height_1","Icon","anchorXUnits","IconAnchorUnits","PIXELS","anchorYUnits","byGeometryType","zIndexKeys","geomAndStyle","kk","createHitDetectionImageData","resultFeatures","g","hitDetect","executorGroups","handleFontsChanged","getVisible","renderIfReadyAndVisible","prepareFrame","animating","interacting","frameStateExtent","vectorLayerRevision","getRevision","vectorLayerRenderBuffer","vectorLayerRenderOrder","loadExtents","gutter","loadExtent","declutterBuilderGroup","userTransform","loadFeatures","dirty","userExtent","getFeaturesInExtent","replayGroupInstructions","getOverlaps","VectorLayer","createRenderer","Polygon","opt_layout","opt_ends","ends_","flatInteriorPointRevision_","flatInteriorPoint_","maxDelta_","maxDeltaRevision_","orientedRevision_","orientedFlatCoordinates_","setFlatCoordinates","setCoordinates","appendLinearRing","linearRing","polygon","layout","applyProperties","closestPointXY","closestPoint","minSquaredDistance","opt_right","flatCenter","getInteriorPoint","XYM","getLinearRingCount","getLinearRing","getLinearRings","linearRings","getSimplifiedGeometryInternal","simplifiedFlatCoordinates","simplifiedEnds","XY","intersectsExtent","setLayout","circular","opt_n","opt_sphereRadius","fromExtent","fromCircle","circle","opt_sides","opt_angle","sides","getLayout","arrayLength","makeRegular","startAngle","Point","squaredDistance","computeExtent","_index","argStr","__esModule","withCredentials","success","failure","xhr","FormatType","ARRAY_BUFFER","responseType","TEXT","XML","responseXML","DOMParser","parseFromString","readFeatures","featureProjection","readProjection","loadFeaturesXhr","dataProjection","addFeatures","VectorSourceEvent","opt_feature","opt_features","VectorSource","attributions","READY","loader_","format_","url_","loader","strategy_","strategy","collection","useSpatialIndex","featuresRtree_","RBush","loadedExtentsRtree_","nullGeometryFeatures_","idIndex_","uidIndex_","featureChangeKeys_","featuresCollection_","getArray","addFeaturesInternal","bindFeaturesCollection_","addFeature","addFeatureInternal","featureKey","addToIndex_","setupChangeEvents_","VectorEventType","ADDFEATURE","EventType","handleFeatureChange_","ObjectEventType","PROPERTYCHANGE","valid","extents","newFeatures","geometryFeatures","modifyingCollection","REMOVEFEATURE","CollectionEventType","ADD","REMOVE","removeFeature","clear","opt_fast","featureId","removeFeatureInternal","clearEvent","CLEAR","forEachFeature","forEachFeatureAtCoordinateDirect","forEachFeatureInExtent","intersectsCoordinate","forEachInExtent","forEachFeatureIntersectingExtent","getFeaturesCollection","getAll","getFeaturesAtCoordinate","getInExtent","getClosestFeatureToCoordinate","opt_filter","closestFeature","previousMinSquaredDistance","minDistance","getFeatureById","getFeatureByUid","getFormat","getUrl","sid","removeFromIdIndex_","CHANGEFEATURE","hasFeature","loadedExtentsRtree","extentsToLoad","extentToLoad","object","FEATURESLOADSTART","FEATURESLOADEND","FEATURESLOADERROR","removeLoadedExtent","removed","setLoader","setUrl","Source","abstract","uidCounter_","getUid","ol_uid","VERSION","taintedTestContext","IconImage","crossOrigin","Image","canvas_","color_","unlisten_","imageState_","size_","src_","tainted_","isTainted_","dispatchChangeEvent_","handleImageError_","unlistenImage_","handleImageLoad_","replaceColor_","getSrc","LOADING","ctx","globalCompositeOperation","imgData","putImageData","anchor_","normalizedAnchor_","anchorOrigin_","anchorOrigin","IconOrigin","anchorXUnits_","FRACTION","anchorYUnits_","crossOrigin_","iconImage_","iconImage","offset_","offsetOrigin_","offsetOrigin","origin_","setAnchor","getHitDetectionImageSize","iconImageSize","BLUR","CONTEXTMENU","CLICK","DBLCLICK","DRAGENTER","DRAGOVER","DROP","FOCUS","KEYDOWN","KEYPRESS","LOAD","RESIZE","TOUCHMOVE","WHEEL","RequestError","watch","handlers","util","protocol","FormData","Blob","ArrayBuffer","isValid","isReady","addListeners","nativeResponseTypes","handleResponse","response","handleError","_xhr","handleAs","checkStatus","getHeader","headerName","dfd","uploadProgress","transferType","lengthComputable","total","onDownloadProgress","_at","defaultOptions","sync","returnDeferred","isFormData","parseArgs","deepCreate","hasNoData","remover","_create","user","password","hdr","ActiveXObject","addCommonMethods","hasJSON","escapeString","SyntaxError","eval","replacer","spacer","indent","objtype","toJSON","t","plus","valueOf","nextIndent","newLine","itl","keyStr","Fill","Stroke","lineCap_","lineDash_","lineDashOffset_","lineJoin_","miterLimit_","setLineCap","setLineDashOffset","setLineJoin","setMiterLimit","setWidth","assign","var_sources","getValues","values","HEX_COLOR_RE_","NAMED_COLOR_RE_","asString","fromNamed","rgb","cacheSize","fromString","hasAlpha","fromStringInternal_","asArray","isStringColor","clamp","cosh","log2","LOG2E","squaredSegmentDistance","solveLinearSystem","mat","maxRow","maxEl","absValue","coef","toDegrees","angleInRadians","toRadians","angleInDegrees","modulo","lerp","binarySearch","haystack","needle","opt_comparator","mid","cmp","comparator","numberSafeCompareFunction","low","high","found","linearFindNearest","direction","reverseSubArray","extension","arr1","arr2","len1","isSorted","opt_func","opt_strict","compare","currentVal","backstop","objectToQuery","enc","encodeURIComponent","pairs","queryToObject","decodeURIComponent","qp","assert","assertion","errorCode","strings","eventContext","defaultTemplateProcessor","html","svg","listen","opt_this","opt_once","originalListener_1","eventsKey","listenOnce","unlistenByKey","ObjectEvent","BaseObject","opt_values","values_","getKeys","getChangeEventType","opt_silent","unset","changeEventTypeCache","TRUE","FALSE","VOID","memoizeOne","lastResult","lastArgs","lastThis","called","nextArgs","PointerInteraction","handleDownEvent","handleDragEvent","handleMoveEvent","handleUpEvent","stopDown","handlingDownUpSequence","trackedPointers_","targetPointers","getPointerCount","mapBrowserEvent","handleEvent","stopEvent","updateTrackedPointers_","POINTERDRAG","POINTERUP","handledUp","POINTERDOWN","handled","POINTERMOVE","isPointerDraggingEvent","pointerId","centroid","memo","isOldIE","Boolean","atob","getTarget","styleTarget","HTMLIFrameElement","contentDocument","stylesInDom","getIndexByIdentifier","identifier","modulesToDom","idCountMap","identifiers","base","count","css","media","sourceMap","references","updater","addStyle","insertStyleElement","nonce","textStore","replaceText","replacement","applyToSingletonTag","styleSheet","cssText","cssNode","createTextNode","applyToTag","btoa","unescape","singleton","singletonCounter","styleIndex","removeStyleElement","lastIdentifiers","newLastIdentifiers","createCanvasContext2D","opt_width","opt_height","opt_canvasPool","OffscreenCanvas","outerWidth","outerHeight","replaceNode","newNode","oldNode","replaceChild","removeNode","removeChildren","lastChild","replaceChildren","oldChildren","oldChild","newChild","var_args","conditions","pass","altKeyOnly","metaKey","altShiftKeysOnly","focus","getTargetElement","activeElement","focusWithTabindex","always","click","mouseActionButton","button","never","pointerMove","singleClick","SINGLECLICK","doubleClick","noModifierKeys","platformModifierKeyOnly","shiftKeyOnly","targetNotEditable","mouseOnly","pointerEvent","pointerType","touchOnly","pointerEvt","penOnly","primaryAction","isPrimary","throwAbstract","valueOrPromise","callbackOrErrback","otherwise","trace","traceRejected","CollectionEvent","opt_element","opt_index","opt_array","unique_","unique","array_","assertUnique_","updateLength_","getLength","insertAt","removeAt","prev","setAt","opt_except","BaseEvent","propagationStopped","RegularShape","hitDetectionCanvas_","points_","radius1","radius2_","radius2","angle_","imageSize_","hitDetectionImageSize_","getPoints","getRadius2","getAngle","renderOptions","createRenderOptions","createHitDetectionCanvas_","draw_","angle0","radiusC","drawHitDetectionCanvas_","dojoType","Color","basefx","_Line","curve","repeat","rate","_percent","_startRepeatCount","_getStep","_p","_e","_fire","debugAtAllCosts","play","gotoStart","_t","_delayTimer","_clearTimer","_stopTimer","_active","_paused","de","_play","_startTime","_cycle","gotoPercent","percent","andPlay","gotoEnd","_timer","curr","_startTimer","ctr","timer","runner","run","setInterval","clearInterval","_makeFadeable","ns","_fade","fArgs","anim","animateProperty","fadeIn","fadeOut","_defaultEasing","PropLine","_properties","tempColor","blendColors","toCss","pm","isColor","onEnd","_Animation","isPrimitive","isIterable","Symbol","iterator","AttributeCommitter","_createPart","AttributePart","_getValue","committer","directive","commit","NodePart","__pendingValue","startNode","endNode","ref","__insert","__commitText","__commitTemplateResult","__commitNode","__commitIterable","valueAsString","previousSibling","templateFactory","processor","fragment","_clone","itemParts","itemPart","partIndex","appendIntoPart","insertAfterPart","BooleanAttributePart","PropertyCommitter","super","single","PropertyPart","eventOptionsSupported","EventPart","__boundHandleEvent","newListener","shouldRemoveListener","shouldAddListener","__options","getOptions","Text","font_","scaleArray_","textAlign_","textBaseline_","maxAngle_","placement_","overflow_","offsetX_","offsetY_","backgroundFill_","backgroundStroke_","padding_","setOverflow","setFont","setMaxAngle","setOffsetX","setOffsetY","setPlacement","setRotateWithView","setRotation","setScale","setTextAlign","setTextBaseline","setBackgroundFill","setBackgroundStroke","setPadding","closestOnCircle","closestOnSegment","segment","along","coordinate1","coordinate2","cosAngle","sinAngle","coord1","coord2","squaredDistanceToSegment","getWorldsAway","opt_sourceExtentWidth","ioQuery","isArrayBuffer","isBlob","shouldDeepCopy","Element","isElement","deepCopy","tval","sval","deepCopyArray","clonedArray","svalItem","okHandler","dataHandler","def","responsePromise","dataPromise","provider","methods","skipData","preventCache","stat","FEET","TILE_PIXELS","USFEET","setFromArray","transform1","transform2","makeScale","compose","dx1","dy1","sx","sy","dx2","dy2","makeInverse","det","defaultFont","defaultFillStyle","defaultLineCap","defaultLineDash","defaultLineDashOffset","defaultLineJoin","defaultMiterLimit","defaultStrokeStyle","defaultTextAlign","defaultTextBaseline","defaultPadding","defaultLineWidth","checkedFonts","setSize","measureFont","measureContext","textHeights","registerFont","referenceWidth","referenceFonts","isAvailable","fontStyle","fontWeight","fontFamily","available","referenceFont","measureTextWidth","check","fonts","fontSpec","families","family","weight","measureTextHeight","metrics","measureText","actualBoundingBoxAscent","actualBoundingBoxDescent","measureTextWidths","currentWidth","rotateAtOffset","drawImageOrLabel","labelOrImage","executeLabelInstructions","createTransformStringCanvas","createTransformString","request","RequestTimeoutError","_inFlightIntvl","_inFlight","watchInFlight","_onAction","startTime","timeout","_onInFlight","cancelAll","Interaction","map_","setActive","getActive","ACTIVE","getMap","active","setMap","pan","view","opt_duration","currentCenter","getCenterInternal","animateInternal","getConstrainedCenter","zoomByDelta","opt_anchor","currentZoom","getZoom","newZoom","getConstrainedZoom","newResolution","getResolutionForZoom","getAnimating","cancelAnimations","marker","nodeMarker","markerRegex","boundAttributeSuffix","Template","nodesToRemove","walker","createTreeWalker","content","lastPartIndex","nextNode","hasAttributes","endsWith","stringForPart","lastAttributeNameRegex","attributeLookupName","attributeValue","statics","currentNode","lastIndex","createMarker","suffix","isTemplatePartActive","createComment","POINTEROVER","POINTEROUT","POINTERENTER","POINTERLEAVE","POINTERCANCEL","deflateCoordinate","deflateCoordinates","deflateCoordinatesArray","coordinatess","deflateMultiCoordinatesArray","coordinatesss","opt_endss","SimpleGeometry","getFirstCoordinate","getLastCoordinate","getSimplifiedGeometry","simplifiedGeometryRevision","simplifiedGeometryMaxMinSquaredTolerance","getStrideForLayout","nesting","XYZ","XYZM","getLayoutForStride","opt_sy","transformGeom2D","simpleGeometry","opt_dest","webpackPolyfill","deprecate","Observable","revision_","ol_key","un","unByKey","CLASS_HIDDEN","CLASS_SELECTABLE","CLASS_UNSELECTABLE","CLASS_CONTROL","CLASS_COLLAPSED","fontRegEx","fontRegExMatchIndex","getFontParameters","variant","pow","inAndOut","ua","FIREFOX","MAC","DEVICE_PIXEL_RATIO","devicePixelRatio","WORKER_OFFSCREEN_CANVAS","WorkerGlobalScope","self","IMAGE_DECODE","decode","PASSIVE_EVENT_LISTENERS","EMPTY","isCEPolyfill","customElements","polyfillWrapFlushCallback","reparentNodes","removeNodes","inflateCoordinates","opt_coordinates","inflateCoordinatesArray","opt_coordinatess","inflateMultiCoordinatesArray","opt_coordinatesss","transform2D","Target","opt_target","eventTarget_","pendingRemovals_","dispatching_","listeners_","listenersForType","propagate","dispatching","pendingRemovals","pr","disposeInternal","getListeners","hasListener","opt_type","mapPrecomposeKey_","mapRenderKey_","sourceChangeKey_","SOURCE","handleSourcePropertyChange_","setSource","getLayersArray","getLayerStatesArray","opt_states","states","getLayerState","getSourceState","getState","UNDEFINED","handleSourceChange_","layerRenderer","PRECOMPOSE","arrayLayerState","hasRenderer","inView","visible","minResolution","maxResolution","minZoom","maxZoom","code_","units_","worldExtent_","axisOrientation_","global_","canWrapX_","getPointResolutionFunc_","defaultTileGrid_","metersPerUnit_","getWorldExtent","getAxisOrientation","isGlobal","setGlobal","getDefaultTileGrid","setDefaultTileGrid","tileGrid","setExtent","setWorldExtent","setGetPointResolution","douglasPeucker","simplifiedOffset","markers","maxSquaredDistance","squaredDistance_1","douglasPeuckerArray","snap","quantize","quantizeArray","quantizeMultiArray","simplifiedEndss","hasArea","ratio","opt_size","toSize","opt_maxEntries","rbush_","items_","items","bbox","search","forEach_","rbush","opt_tileCoord","getKeyZXY","getKey","tileCoord","fromKey","withinExtentAndZ","getMinZoom","getMaxZoom","tileRange","getFullTileRange","POSTRENDER","MOVESTART","MOVEEND","assignClosest","offset1","offset2","maxSquaredDelta","squaredDelta","arrayMaxSquaredDelta","multiArrayMaxSquaredDelta","assignClosestPoint","maxDelta","isRing","opt_tmpPoint","tmpPoint","assignClosestArrayPoint","assignClosestMultiArrayPoint","baseGetTag","isObjectLike","policy","trustedTypes","createPolicy","createHTML","commentMarker","TemplateResult","isCommentBinding","commentOpen","attributeMatch","getHTML","SVGTemplateResult","getTemplateElement","svgElement","templateCache","templateCaches","stringsArray","WeakMap","Map","ERROR_THRESHOLD","ENABLE_RASTER_REPROJECTION","tmpTileCoord","TileGrid","zoomFactor","resolutions_","resolutions","origins","zoomFactor_","origins_","tileSizes_","tileSizes","tileSize_","tileSize","fullTileRanges_","tmpSize_","sizes","TileRange","restrictedTileRange","getTileRangeForExtentAndZ","calculateTileRanges_","forEachTileCoord","forEachTileCoordParentTileRange","opt_tileRange","tileCoordExtent","getTileCoordExtent","getResolution","getResolutions","getTileCoordChildTileRange","getTileRangeExtent","getTileSize","getTileCoordForXYAndZ_","getTileCoordCenter","getTileCoordForCoordAndResolution","getTileCoordForXYAndResolution_","reverseIntersectionPolicy","getZForResolution","adjustX","adjustY","xFromOrigin","yFromOrigin","tileCoordX","tileCoordY","getTileCoordForCoordAndZ","getTileCoordResolution","opt_direction","fullTileRanges","getForProjection","createForProjection","extentFromProjection","createForExtent","opt_maxZoom","opt_tileSize","opt_corner","Corner","resolutionsFromExtent","createXYZ","xyzOptions","gridOptions","opt_maxResolution","half","PRERENDER","POSTCOMPOSE","RENDERCOMPLETE","linearRingContainsExtent","linearRingContainsXY","wn","linearRingsContainsXY","linearRingssContainsXY","LinearRing","intersectsLineString","coordinatesExtent","point1","point2","intersectsLineStringArray","intersectsLinearRingArray","intersectsLinearRing","intersectsLinearRingMultiArray","MapBrowserEvent","opt_dragging","opt_frameState","pixel_","coordinate_","dragging","getEventPixel","getCoordinateFromPixel","getRawTag","objectToString","symToStringTag","toStringTag","freeGlobal","freeSelf","root","reIsUint","nativeCreate","getNative","eq","other","isKeyable","__data__","appendInto","directives","isDirective","noChange","nothing","TemplateInstance","__parts","importNode","nodeIndex","handleTextExpression","insertAfterNode","handleAttributeExpressions","adoptNode","upgrade","asColorLike","regexp","except","ch","buildGroupRE","re","nonCapture","group","expression","TicksData","ColorRangeData","LimitData","TooltipData","classNames","Slider","horDir","verDir","transition","rangeBar","transitionOnMaterialTooltip","scaleTransform","customAriaText","initialTooltip","l10n","incrementTitle","decrementTitle","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","initCultureInfo","initCultureFunc","formChecker","formElement","isForm","formResetValue","internationalization","tooltip","ticks","formatString","formatInfo","formatValue","numberOfDecimals","makeRoundNumber","elementVal","decimalPart","precision","decimals","fractionalToInteger","noOfDecimals","tens","initRender","setZindex","setCSSClass","setElementWidth","sliderContainer","oldCSSClass","cssClass","setEnabled","enabled","tooltipElement","showOn","getTheme","sliderTrack","hiddenInput","tabIndex","getThemeInitialization","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","class","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","renderScale","renderTooltip","readonly","isMaterial","isBootstrap","isBootstrap4","isMaterialTooltip","limitBarFirst","limitBarSecond","firstElementClassName","firstHandle","secondHandle","setAriaAttributes","customValues","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setBarColor","tooltipValue","formatContent","setTooltipContent","tooltipObj","observedArgs","addTooltipClass","setAriaAttrValue","setPreviousVal","ariaContent","handle1","handleVal1","handle2","handleVal2","oldCss","newCss","getTooltipTransformProperties","previousTooltipClass","tooltipPlacement","tooltipBeforeOpen","setTooltipTransform","tooltipCollision","tooltipOffsetValue","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","clientHeight","clientWidth","openMaterialTooltip","refreshTooltip","tooltipContentElement","cursor","innerText","closeMaterialTooltip","tooltipTarget","checkTooltipPosition","tooltipClass","collidedPosition","tooltipCollidedPosition","showTipPointer","effect","opensOn","beforeOpen","beforeCollision","beforeClose","tooltipBeforeClose","enableHtmlSanitizer","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","title","buttonFocusOut","repeatButton","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","liElementPosition","orien","ul","role","isAndroid","smallStep","showSmallTicks","largeStep","li","steps","customStep","islargeTick","tickWidth","largestep","startValue","createTick","updateTicksValues","formatTicksValue","decimalPoints","ticksAlignment","liElement","childElementCount","blazortTicksValue","span","tickText","tickElement","triggerEvent","lastElementChild","ticksWrapper","tickElements","scaleAlignment","spanElement","renderingTicks","tickValuePosition","otherChild","firstTickPostion","otherTicksPosition","interopAdaptor","invokeMethodAsync","ariaValueText","isTickFormatted","valuenow","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","minValue","maxValue","limitBar","preHandlePos1","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","removeProperty","updateRangeValue","changeEventArgs","previousValue","isInteracted","rtl","preHandlePos2","values_1","tempStartEnd","reposition","startHandleFixed","endHandleFixed","xyToPosition","top_1","stepValueCalculation","percentStep","remain","addition","positionToValue","handlepos","handleVal","focusedElement","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","xPostion","yPostion","rangeBarDragged","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","keyDown","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","keyUp","hover","formResetHandler","blur","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","setReadOnly","trackPosition","trackClassName","colorRange","startingPosition","endPosition","trackContainer","backgroundColor","border","getTextNode","childnode","createCheckBox","enableRipple","wrapper","rippleSpan","frameSpan","checked","labelSpan","rippleMouseHandler","Disposable","disposed","dispose","disable","none","createSnapToN","theta","opt_isMoving","createSnapToZero","opt_tolerance","twiceArea","linearRingss","tmpTransform","Geometry","extentRevision_","simplifyTransformedInternal","getClosestPoint","opt_closestPoint","simplify","inCoordinates","outCoordinates","pixelExtent","projectedExtent","DEFAULT_MAX_ZOOM","DEFAULT_TILE_SIZE","baseFor","castFunction","keysIn","iteratee","isLength","baseGet","path","baseIsNative","ErrorCtor","ImageWrapper","imageLoadFunction","imageLoadFunction_","listenImage","loadHandler","listening_1","listenerKeys","tile","projection_","attributions_","adaptAttributions","attributionsCollapsible_","attributionsCollapsible","state_","wrapX_","getAttributions","getAttributionsCollapsible","getProjection","getContextOptions","setAttributions","attributionLike","IMAGE_SMOOTHING_DISABLED","msImageSmoothingEnabled","dirtyDate","_index2","_interopRequireDefault","elementRect","popupRect","parentDocument","fixedParent","calculateRelativeBasedPosition","fixedElement","anchorPos","tempAnchor","calculatePosition","currentElement","positionX","positionY","targetValues","posX","posY","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","getBodyScrollTop","getBodyScrollLeft","Query","subQuery","isChild","distincts","queries","fKey","fromTable","lookups","expands","sortedColumns","groupedColumns","lazyLoad","setKey","field","using","dataManager","executeQuery","executeLocal","cloned","subQuerySelector","isCountRequired","tableName","addParams","distinct","fields","expand","tables","where","fieldName","operator","ignoreCase","ignoreAccent","predicate","Predicate","searchKey","fieldNames","comparer","fnOperators","sortBy","isFromGroup","sortByForeignKey","sorts","order","fnSort","filterQueries","sortByDesc","page","pageIndex","pageSize","take","nos","hierarchy","selectorFn","foreignKey","requiresCount","aggregate","q","filterQueryLists","singles","filtered","isComplex","processOperator","predicates","and","combinePredicates","combine","or","fromJson","json","fromJSONData","pred","validate","record","isAnd","toJson","preds","consts","GroupGuid","DataUtil","startsWith","fnAscending","fnDescending","localeCompare","extractFields","jsonArray","newData","aggregates","level","groupDs","isLazyLoad","jsonData","indx","childLevels","grouped","groupedArray","records","_loop_2","this_2","getVal","tempObj","_loop_3","aggs","buildHierarchy","lookup","pKey","grp","fKeyData","getFieldList","copyObj","ds","middle","ignoreDiacritics","diacritics","current","callAdaptorFunction","adaptor","fnName","param1","param2","getAddParams","adp","dm","reqParams","isPlainObject","isCors","getGuid","rand","Uint8Array","isNull","getItemFromComparer","castRequired","requiresCompleteRecord","serverTimezoneOffset","timeZoneHandling","sum","average","truecount","falsecount","operatorSymbols","odBiOperator","odUniOperator","odv4UniOperator","equal","notequal","lessthan","greaterthan","lessthanorequal","greaterthanorequal","notnull","isnull","startswith","endswith","processSymbols","parseJson","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","keys_2","ms","offSet","dateParse","toTimeZone","isUTC","utcFormat","hrs","mins","addSelfOffset","isGuid","jsonReplacer","arrayReplacer","keys_3","jsonDateReplacer","toUTC","utc","unix","toLocalTime","datefn","differenceString","localtimefn","norm","getSeconds","HScroll","browser","browserCheck","ieCheck","uniqueId","touchModule","scroll","touchHandler","swipe","swipeHandler","scrollEle","scrollHandler","createOverlay","createNavIcon","setScrollState","scrollStep","scrollDiv","innerEle_1","ele_1","scrollItems","nav","overlay","navEles","rightOverlayEle","CLS_OVERLAY","clsRight","rightEle","navItem","CLS_NAVRIGHTARROW","leftEle","eventBinding","clsLeft","navEle","navLeftItem","CLS_NAVLEFTARROW","onKeyPress","keyTimer","keyTimeout","eleScrolling","onKeyUp","tapHold","tabHoldHandler","repeatScroll","clickEventHandler","trgt","scrollDis","isContinuous","rootEle","frameScrollRequest","swipeEle","scrollUpdating","scrollVal","scrollValue","arrowDisabling","addDisable","removeDisable","arrowIcon","navLeftEle","navRightEle","leftOverlay","rightOverlay","disEle","VScroll","scrollEventHandler","createOverlayElement","wheelEventHandler","scrollCnt","scrollBar","navs","overlays","downOverlayEle","clsDown","downEle","CLS_NAVDOWNARROW","upEle","clsUp","navElement","navUpItem","CLS_NAVUPARROW","ev","swipeElement","addDisableCls","removeDisableCls","navUpEle","navDownEle","upOverlay","downOverlay","addScrolling","scrollType","containerOffset","contentOffset","maxHeight","destroyScroll","scrollObj","skipEle","menu","FOCUSED","HEADER","SELECTED","ITEM","HIDE","POPUP","FieldSettings","MenuItem","MenuAnimationSettings","MenuBase","navIdx","isTapHold","tempItem","isMenu","ejInst","clonedElement","refEle","nextElementSibling","ejInstance","nodeValue","renderItems","menuTemplateId","getWrapper","hamburgerMode","createHeaderContainer","createJsonFromElement","removeChildElement","createItems","setBlankIconStyle","enableScrolling","targetElems","menuHeaderClickHandler","isIos","cmenuHandler","targetElement","delegateMoverHandler","moverHandler","delegateMouseDownHandler","mouseDownHandler","delegateClickHandler","clickHandler","wireKeyboardEvent","rippleFn","downarrow","uparrow","enter","leftarrow","rightarrow","escape","home","keyBoardHandler","closeMenu","actionName","actionNeeded","removeLIStateByClass","upDownKeyHandler","rightEnterKeyHandler","leftEscKeyHandler","cul","getUlByNavIdx","defaultIdx","fliIdx","fli","getLIByClass","getIdx","cli","isValidLI","navIdxLen","popup","keyType","openMenu","isCMenu","canOpen","ulIndex","isIterated","isMenuVisible","ul_1","item_1","items_1","sli","beforeCloseArgs","popups","getPopups","isClose","liElem_1","getLI","parentItem","getMenuItemModel","isFocused","observedCloseArgs","popupEle","closeArgs","popupObj","trgtliId","closedLi","trgtLi","popupId","isOpen","minHeight","unWireKeyboardEvent","hide","toggleAnimation","updateReactTemplate","trgtpopUp","submenus","afterCloseMenu","showItemOnClick","getIndex","isMenusClosed","sli_1","cliIdx","item_2","removeStateWrapper","isReact","portals","getFields","separator","iconCss","lItem","elemId","uList","getField","ICONS","hdata","hli","popupWrapper","isNestedOrVertical","generatePopup","calculateIndentSize","triggerBeforeOpen","itemFromBlazorTemplate","liStyle","liIndent","textIndent","blankIconElem","menuIconElem","menuIconElemStyle","blankIconIndent","actionOnScroll","relateTo","collision","X","Y","targetType","triggerOpen","spanElem","tempTitle","spanTitle","spanIcon","openHamburgerMenu","closeHamburgerMenu","observedHamburgerCloseArgs","callFit","collide","menuType","observedOpenArgs","checkScrollOffset","refreshPosition","offWidth","animationOptions","animationSettings","show","setPosition","eventArgs_1","blankIconList","iconLi","icon","cssProp","iconCssProps","iconSize","fontSize","offsetRight","offsetEle","toggleVisiblity","newTop","xCollision","itemsObj_1","showIcon","hasField","listBaseOptions","itemNavigable","itemCreating","htmlAttributes","tabindex","itemCreated","templateID","createList","liTrgt","hdrWrapper","isDifferentElem","isClosed","cliWrapper","isInstLI","cliWrapperId","setLISelected","showSubMenu","culIdx","cIdx","isHeader","classname","getItemIndex","isUniqueId","newItem","getItems","setItems","newItems","skipHdr","updateItemsByNavIdx","updateItem","unWireEvents","ul_2","ul_3","getChangedItemIndex","insertAfter","removeItem","popStr","uls","targetSelctor","keyboardModule","isMenuOpen","pUlHeight","pElement","nIndex","isCallBack","enableItems","enable","skipItem","disabled","showItems","showHideItems","hideItems","ishide","removeItems","iitems","insertItems","isAfter","menuitem","removeAttributes","itemId","parentId","ContextMenu","ROOT","COLLAPSIBLE","EXPANDABLE","LISTITEM","LISTTEXT","PARENTITEM","HOVER","PROCESS","ICON","TEXTWRAP","SIBLING","DROPNEXT","FULLROW","CHECK","CHECKBOXWRAP","treeAriaAttr","treeRole","itemRole","listRole","itemText","wrapperRole","FieldsSettings","ActionSettings","NodeAnimationSettings","TreeView","isRefreshed","preventExpand","checkedElement","disableNode","validArr","expandChildren","isFieldChange","changeDataSource","isBlazorExpandedNodes","mouseDownStatus","TreeView_1","checkActionNodes","parentNodeCheck","dragStartAction","isAnimate","f2","moveDown","moveLeft","moveRight","moveUp","ctrlDown","ctrlUp","ctrlEnter","ctrlHome","ctrlEnd","ctrlA","shiftDown","shiftUp","shiftEnter","shiftHome","shiftEnd","csDown","csUp","csEnter","csHome","csEnd","space","listBaseOption","expandCollapse","expandIconClass","ariaAttributes","expandIconPosition","beforeNodeCreate","fullRowNavigable","updateListProp","aniObj","treeList","isLoaded","isInitalExpand","setTouchClass","selectedNodes","checkedNodes","expandedNodes","initialRender","blazorInitialRender","setDataBinding","setDisabledMode","setExpandOnType","setRipple","wireEditingEvents","allowEditing","setDragAndDrop","allowDragAndDrop","setCssClass","setEnableRtl","setFullRow","fullRowSelect","nodeTemplateFn","templateComplier","nodeTemplate","iconModel","rippleIconFn","isEnabled","setMultiSelect","firstUl","dataSource","isOffline","offline","treeData","isNumberTypeId","setRootData","finalize","getQuery","rootData","columns","col","addSorting","sortOrder","parentID","getDataType","groupedData","getGroupedData","rootItems","getChildNodes","adaptorName","sortedData","getSortedData","ulElement","rootNodes","loadOnDemand","renderChildNodes","finalizeNode","updateTemplateForBlazor","parentCheckData","updateCheckedStateFromDS","autoCheck","showCheckBox","updateParentCheckState","resultData","isChecked","resultId","hasChildren","id_1","childData","childId","checkState","getCheckedNodeDetails","checkIndeterminateState","checkedData","checkedId","fieldId","childItems","updateChildCheckState","checkNodes","parentEle","changeState","preElement","childCheckedElement","indeterminate","nodeId","nodeCheck","checkedParent","checkedChild","subChildItems","checkboxEle","touchClass","checkValue","addCheck","frame","frameMouseHandler","createFullRow","allowMultiSelection","addActionClass","selected","expanded","textEle","dataId","renderNodeTemplate","nodeData","actionValue","groupBy","cusQuery","getDataSource","grpItem","itemObj","iNodes","sNodes","selectNode","cNodes","disableExpandAttr","eNodes","updateList","updateCheckedProp","ensureIndeterminate","ensureParentCheckState","ensureChildCheckState","indeterminateNodes","checkBoxEle","parentUL","currentParent","childElement","checkBoxes","parentCheck","childCheck","checkedState","currentLoadData","isNodeChecked","doCheckBoxAction","doCheck","updateFieldChecked","liEle","setValidCheckedNode","dynamicCheckState","updateField","checkBox","validateCheckNode","checkbox","currLi","getNodeData","updateIndeterminate","subChild","updateChildIndeterminate","indeterminateData","getTreeData","subId","childElementCheck","innerChild","isPrevent","isAdd","nodeCheckAction","getCheckEvent","ariaState","removeCheck","ensureStateChange","updateServerProperties","firstNode","updateIdAttr","hasPid","doExpandAction","eUids","expandGivenNodes","eNode","expandAction","afterFinalized","proxy","expandCallback","eUid","doSelectionAction","setCheckedNodes","updateInstance","sUids","sNode","selectGivenNodes","preventContextMenu","rippleIcons","removeHover","setFocusElement","checkWrapper","checkElement","triggerClickEvent","collapseNode","toggleSelect","nodeCheckedEvent","isCheck","expandNode","hideSpinner","start_1","end_1","proxy_1","liEle_1","setHeight","activeElement_1","HTMLElement","animateHeight","expandedNode","addExpand","expandArgs","getExpandEvent","colArgs","nodeCollapseAction","collapse","collapsedNode","removeExpand","toRemove","currentHeight","parentLi","expandChild","eicon","showSpinner","parents","mapper_2","getChildFields","loadChild","setSelectionForChildNodes","ensureCheckNode","disableTreeNodes","renderSubChild","getNodeObject","doDisableAction","nodeLevel","dataLevel","getChildMapper","isRoot","getChildGroup","objlen","cIcons","curLi","multiSelect","isActive","unselectNode","getSelectEvent","nodeSelectAction","removeSelectAll","startIndex","liList","endIndex","currNode","addSelect","nodeUnselectAction","removeSelect","focusedNode","getFocusedNode","selectedLI","selectedLI_1","expandOnType","expandOn","expandHandler","expandCollapseAction","nodeExpandAction","liEles","icon_1","keyActionHandler","inpEle","oldText","checkNode","openNode","shiftKeySelect","navigateNode","navigateRootNode","createTextbox","navigateToFocus","isUp","focusNode","getScrollParent","parentPos","isVisibleInViewport","txtWrap","isTowards","getNextNode","getPrevNode","checkWrap","nodeCheckingAction","allCheckNode","parentIndex","getChildItems","childStateChange","childIsCheck","newCheck","validateCheck","childId_1","toBeOpened","focusNextNode","setFocus","isBackwards","rootNode","getRootNode","getEndNode","selectedItem","fNode","prevNode","preNode","focusIn","focusOut","onMouseOver","currentLi","setHover","onMouseLeave","hoveredNode","fromDS","pNode","pid","nodeFields","textContent","tempArr","destroyTemplate","reRenderNodes","oldClass","newClass","editingHandler","oldInpEle","updateOldText","innerEle","getEditEvent","outerHTML","innerHtml","inputObj","createInput","inputEle","setSelectionRange","wireInputEvents","editData","editFields","inputFocusOut","newText","txtEle","crudOperation","appendNewText","isInput","updateText","getChildNodeObject","toBind","initializeDrag","destroyDrag","virtualEle","dragObj","dragRoot","dragWrap","dragLi","isSameNode","cloneEle","DRAGITEM","nLen","cNode","listItem","getDragEvent","draggedNode","dragCancelAction","targetTouches","dragAction","removeVirtualEle","dropTarget","dropRoot","isHelperElement","preventTargetExpand","dragParent","draggedParentNode","dropAction","dropObj","over","dropWrap","dropLi","virEle","renderVirtualEle","dropIndicator","isBlazorDrop","dragInstance","appendNode","dropAsChildNode","dropAsSiblingNode","dropUl","dragParentUl","dragParentLi","moveData","updateElement","updateAriaLevel","dropParentUl","expandParent","childLi","dropParentLi","removedData","updateChildField","refId","getDataPos","currPid","removeChildNodes","addChildData","dropIcon","generateIcon","generateUL","dragIcon","updateChildAriaLevel","sibEle","dragNode","dropData","draggedNodeData","newParent","dragLiParent","targetParent","indexValue","iconClass","dropTar","clonedNode","droppedNode","droppedNodeData","dropIndex","dropLevel","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeData","updateSelectedNodes","updateExpandedNodes","newId","currId","doGivenAction","toExpand","addGivenNodes","isRemote","dropEle","updateMapper","createListItemFromJson","refNode","navigateUrl","updated","childObj","validNodes","validID","checkValidId","doEnableAction","strNodes","filterNestedChild","updatePersistProp","removeField","sleNodes","slelen","enodes","nodelen","cnodes","getMapperProp","clientUpdateInitial","proxy_2","touchEditObj","isDoubleTapped","wireClickEvent","proxy_3","touchClickObj","wireExpandOnEvent","proxy_4","touchExpandObj","secondTap","firstTap","uncheckAll","setIndeterminate","checkAll","setChildCheckState","isRefreshChild","childValue","updateChildPosition","currID","dynamicState","operation","prevent","crud","matchedArr","changes","addedRecords","deletedRecords","changedRecords","nodesID","deleteSuccess","dmFailure","editSucess","addSuccess","updatePreviousText","collapseAll","onLoaded","addNodes","beginEdit","disableNodes","enableNodes","ensureVisible","expandAll","getAllCheckedNodes","getDisabledNodes","getNode","moveNodes","sourceNodes","refreshNode","updatedChildValue","newNodeData","parentData","refreshData","newliEle","newTextEle","newIcon","fullEle","updateNode","linearRingIsClockwise","edge","linearRingsAreOriented","isClockwise","linearRingssAreOriented","orientLinearRings","orientLinearRingsArray","LayerRenderer","boundHandleImageChange_","handleImageChange_","layer_","loadedTileCallback","tiles","createLoadedTileFinder","forEachLoadedTile","getDataAtPixel","loadImage","CanvasLayerRenderer","renderedResolution","tempTransform","layerClassName","getClassName","HTMLCanvasElement","transformOrigin","halfWidth","halfHeight","topLeft","topRight","bottomRight","bottomLeft","coordinateToPixelTransform","inverted","dispatchRenderEvent_","renderPixel","renderCoordinate","pixelToCoordinateTransform","newCanvas","AssertionError","OPACITY","VISIBLE","Z_INDEX","MAX_RESOLUTION","MIN_RESOLUTION","MAX_ZOOM","MIN_ZOOM","BaseLayer","className_","opt_managed","managed","sourceState","getMaxResolution","getMinResolution","setMaxResolution","setMinResolution","setMaxZoom","setMinZoom","setVisible","zindex","getInteriorPointOfArray","flatCenters","flatCentersOffset","intersections","rr","pointX","maxSegmentLength","getInteriorPointsOfMultiArray","getDistance","c1","c2","opt_radius","lat1","lat2","deltaLatBy2","deltaLonBy2","bearing","lon1","dByR","lat","asin","RenderEvent","opt_inversePixelTransform","opt_context","IconImageCache","cache_","cacheSize_","maxCacheSize_","canExpireCache","expire","maxCacheSize","shared","MapEvent","tag","isKey","stringToPath","isSymbol","baseSet","ArrayUtil","transparentColor","_set","fromArray","toRgb","toRgba","toHex","includeAlpha","fromRgb","colorFromRgb","fromHex","colorFromHex","bits","mask","colorFromArray","colorFromString","ImageBase","ImageStyle","displacement_","lineStringLength","_maxEntries","_minEntries","leaf","_all","toBBox","_build","_splitRoot","_insert","_condense","compareMinX","compareMinY","fromJSON","_chooseSubtree","_split","_adjustParentBBoxes","_chooseSplitAxis","_chooseSplitIndex","M","_allDistMargin","containsTileRange","brokenDiagonalRendering_","drawTestTriangle","u1","v1","u2","v2","verifyBrokenDiagonalRendering","calculateSourceResolution","targetProj","targetCenter","targetResolution","sourceCenter","sourceResolution","targetMetersPerUnit","sourceMetersPerUnit","compensationFactor","calculateSourceExtentResolution","targetExtent","triangulation","opt_renderEdges","opt_contextOptions","pixelRound","sourceDataExtent","canvasWidthInUnits","canvasHeightInUnits","stitchContext","stitchScale","xPos","yPos","srcWidth","srcHeight","targetTopLeft","getTriangles","triangle","u0","v0","sourceNumericalShiftX","sourceNumericalShiftY","augmentedMatrix","affineCoefs","isBrokenDiagonalRendering","ud","vd","Triangulation","maxSourceExtent","errorThreshold","opt_destinationResolution","sourceProj_","targetProj_","transformInvCache","transformInv","transformInv_","maxSourceExtent_","errorThresholdSquared_","triangles_","wrapsXInSource_","canWrapXInSource_","sourceWorldWidth_","targetWorldWidth_","destinationTopLeft","destinationTopRight","destinationBottomRight","destinationBottomLeft","sourceTopLeft","sourceTopRight","sourceBottomRight","sourceBottomLeft","maxSubdivision","addQuad_","leftBound_1","newTriangle","addTriangle_","aSrc","bSrc","cSrc","dSrc","sourceQuadExtent","sourceCoverageX","sourceWorldWidth","wrapsX","needsSubdivision","targetQuadExtent","isNotFinite","centerSrc","bc","bcSrc","da","daSrc","ab","abSrc","cd","cdSrc","calculateSourceExtent","targetContainer","fit","viewPortElement","elemData","containerWidth","getTargetContainerWidth","getViewPortWidth","containerLeft","ContainerLeft","containerRight","ContainerRight","overLeft","overRight","containerHeight","getTargetContainerHeight","getViewPortHeight","containerTop","ContainerTop","containerBottom","ContainerBottom","overTop","overBottom","isCollide","elemOffset","yAxis","topCollideCheck","xAxis","leftCollideCheck","topSide","rightSide","leftSide","bottomSide","flip","tEdge","TL","TR","BL","BR","eEdge","oldVisibility","updateElementData","leftFlip","deepCheck","collideSide","topFlip","setPopup","eStatus","getTargetContainerLeft","getTargetContainerTop","windowWidth","Input","CLASSNAMES","floatType","bindInitialEvent","checkInputValue","floatLabelType","getParentNode","inputElement","inputValue","_focusFn","_blurFn","wireFloatingEvents","createFloatingInput","inputObject","internalCreateElement","floatLinelement","floatLabelElement","makeElement","createInputContainer","customTag","placeholder","encodePlaceHolder","inputWrap","updateLabelState","checkFloatLabelType","updateIconState","wireClearBtnEvents","readOnly","validateLabel","tagClass","spanEle","setPlaceholder","setReadonly","isReadonly","isRtl","isEnable","inputContainer","disabledAttrs","considerWrapper","addAttributes","setClearButton","isClear","initial","clearButton","insertAdjacentElement","createClearButton","_internalRipple","isRipple","argsButton","buttons","_onMouseDownRipple","_onMouseUpRipple","createIconEle","prependSpan","innerWrapper","appendSpan","validateInputType","containerElement","showClearButton","setPropertyValue","removeFloating","addFloating","iconEle","isPrependIcon","floatLine","floatText","addIcon","icons","internalCreate","result_2","Tile","interimTile","hifi","transition_","transitionStarts_","release","getInterimTile","TileState","refreshInterimChain","getTileCoord","getAlpha","time","inTransition","endTransition","ImageTile","tileLoadFunction","tileLoadFunction_","naturalWidth","naturalHeight","ReprojTile","sourceTileGrid","targetTileGrid","wrappedTileCoord","getTileFunction","opt_errorThreshold","renderEdges_","contextOptions_","gutter_","sourceTileGrid_","targetTileGrid_","wrappedTileCoord_","sourceTiles_","sourcesListenerKeys_","sourceZ_","maxTargetExtent","limitedTargetExtent","sourceProjExtent","errorThresholdInPixels","triangulation_","sourceRange","srcX","srcY","reproject_","leftToLoad_1","sourceListenKey_1","unlistenSources_","LRUCache","opt_highWaterMark","highWaterMark","count_","entries_","oldest_","newest_","getCount","containsKey","entry","value_","key_","newer","older","peekLast","peekLastKey","peekFirstKey","TileCache","expireCache","usedTiles","pruneExceptNewestZ","TileSource","opaque_","opaque","tilePixelRatio_","tilePixelRatio","tileCache","tmpSize","tileOptions","zDirection","getTileCacheForProjection","tileCoordKey","covered","getGutterForProjection","getOpaque","getTile","getTileGrid","getTileGridForProjection","getTilePixelRatio","getTilePixelSize","getTileCoordForTileUrlFunction","updateCacheSize","tileCount","useTile","TileSourceEvent","createFromTemplate","zRegEx","xRegEx","yRegEx","dashYRegEx","createFromTemplates","templates","tileUrlFunctions","createFromTileUrlFunctions","UrlTile","generateTileUrlFunction_","tileUrlFunction","urls","setUrls","tileLoadingKeys_","getTileLoadFunction","getTileUrlFunction","getPrototypeOf","getUrls","handleTileChange","tileState","TileEventType","setTileLoadFunction","setTileUrlFunction","startCharCode","stopCharCode","stop_1","expandUrl","defaultTileLoadFunction","imageTile","TileImage","tileClass","tileCacheForProjection","tileGridForProjection","reprojectionErrorThreshold_","reprojectionErrorThreshold","imageSmoothing","renderReprojectionEdges_","usedTileCache","getGutter","thisProj","projKey","createTile_","urlTileCoord","tileUrl","newTile","getTileInternal","setRenderReprojectionEdges","setTileGridForProjection","tilegrid","proj","createExtent","onlyCenter","smooth","opt_centerShift","viewWidth","viewHeight","shiftX","shiftY","getViewportClampedResolution","viewportSize","showFullExtent","xResolution","yResolution","getSmoothClampedResolution","createMinMaxResolution","opt_smooth","opt_maxExtent","opt_showFullExtent","cappedMaxRes","View","hints_","animations_","updateAnimationKey_","viewportSize_","targetCenter_","targetResolution_","targetRotation_","cancelAnchor_","applyOptions_","resolutionConstraintInfo","createResolutionConstraint","maxResolution_","minResolution_","minZoom_","centerConstraint","createCenterConstraint","resolutionConstraint","constraint","rotationConstraint","createRotationConstraint","constraints_","setCenterInternal","setResolution","setZoom","options_","getUpdatedOptions_","newOptions","isDef","resolveConstraints","animationCount","animationCallback","series","complete","sourceRotation","targetRotation","isNoopAnimation","setHint","updateAnimations_","getInteracting","more","seriesComplete","elapsed","getViewportSize_","constrainedResolution","calculateCenterZoom","applyTargetState_","constrainedRotation","calculateCenterRotate","currentResolution","opt_rotation","setViewportSize","ViewProperty","getConstraints","getConstrainResolution","constrainResolution","getHints","opt_hints","calculateExtent","calculateExtentInternal","getZoomForResolution","setConstrainResolution","getResolutionForExtent","getResolutionForExtentInternal","getResolutionForValueFunction","opt_power","power","getConstrainedResolution","getValueForResolutionFunction","logPower","getViewportSizeMinusPadding_","reducedSize","calculateCenterOn","nearest","baseLevel","geometryOrExtent","fitInternal","minRotX","minRotY","maxRotX","maxRotY","rotX","rotY","centerRotX","centerRotY","centerOn","centerOnInternal","calculateCenterShift","centerShift","shiftedCenter","adjustCenter","deltaCoordinates","setCenter","adjustCenterInternal","adjustResolution","adjustResolutionInternal","isMoving","adjustZoom","adjustRotation","adjustRotationInternal","newRotation","hint","opt_doNotCancelAnims","opt_forceMoving","newCenter","opt_resolutionDirection","beginInteraction","endInteraction","endInteractionInternal","opt_targetResolution","targetZoom","targetRes","smoothExtentConstraint","constrainOnlyCenter","smoothResolutionConstraint","projExtent","capped","createSnapToResolutions","defaultMaxResolution","defaultMinResolution","defaultMaxZoom","opt_minResolution","minZoomLevel","cappedZoomLevel","zoomLevel","createSnapToPower","enableRotation","constrainRotation","api","locals","createBaseFor","fromRight","keysFunc","iterable","identity","arrayLikeKeys","baseKeysIn","baseTimes","isArguments","isBuffer","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","baseIsArguments","objectProto","propertyIsEnumerable","nativeObjectToString","isOwn","unmasked","stubFalse","freeExports","freeModule","Buffer","baseIsTypedArray","baseUnary","nodeUtil","nodeIsTypedArray","typedArrayTags","freeProcess","types","binding","isPrototype","nativeKeysIn","isProto","Ctor","castPath","toKey","reIsDeepProp","reIsPlainProp","memoizeCapped","rePropName","reEscapeChar","string","number","quote","subString","memoize","MapCache","resolver","memoized","Cache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","entries","Hash","ListCache","hashClear","hashDelete","hashGet","hashHas","hashSet","isMasked","toSource","reIsHostCtor","funcProto","funcToString","reIsNative","coreJsData","maskSrcKey","IE_PROTO","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","assocIndexOf","getMapData","baseToString","arrayMap","symbolProto","symbolToString","customizer","nested","baseAssignValue","tracer","arrayUtil","logError","reportRejections","errors","activeTimeout","unhandledWait","trackUnhandledRejections","timestamp","logRejected","reportBefore","usage","evented","emitAsync","handleXML","lastParser","dp","createDocument","loadXML","handleNativeResponse","register","previousValues","unsafeHTML","ATTRIBUTION","OSM","dirtyDatesArray","datesArray","currentDate","cookie","expires","setTime","toUTCString","updatedCookie","propValue","isSupported","cookieEnabled","PositionData","Popup","setContent","wireScrollEvents","unwireScrollEvents","resolveCollision","checkCollision","orientationOnChange","getRelateToElement","scrollRefresh","relateToElement","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","scrollParents","isElementVisible","checkGetBoundingClientRect","windowView","scrollY","scrollX","elementView","checkFixedParent","parentDisplay","getAnchorPosition","anchorEle","eleRect","anchorRect","callFlip","param","viewPortRect","horz","vert","relativeElement","zIndexElement","getZindexPartial","showAnimation","hideAnimation","parentStyle","overflowRegex","parentZindex","childrenZindex","isEqualNode","siblingsZindex","finalValue","currentZindexValue","expireIconCache","MapRenderer","dispatchRenderEvent","calculateMatrices2D","checkWrapped","thisArg","layerFilter","thisArg2","translatedCoordinate","offsets","layerStates","numLayers","callback_1","forEachLayerAtPixel","hasFeatureAtCoordinate","scheduleExpireIconCache","postRenderFunctions","Composite","CompositeMapRenderer","fontChangeListenerKey_","redrawText","element_","getViewport","children_","renderedVisible_","declutterLayers","previousElement","LayerGroup","layers","layersListenerKeys_","listenerKeys_","handleLayersChanged_","setLayers","handleLayerChange_","getLayers","handleLayersAdd_","handleLayersRemove_","layersArray","collectionEvent","ownLayerState","MapBrowserEventHandler","moveTolerance","clickTimeoutId_","emulateClicks_","dragging_","dragListenerKeys_","moveTolerance_","down_","activePointers_","trackedTouches_","pointerdownListenerKey_","handlePointerDown_","originalPointerMoveEvent_","relayedListenerKey_","relayEvent_","boundHandleTouchMove_","handleTouchMove_","emulateClick_","MapBrowserEventType","updateActivePointers_","handlePointerUp_","isMouseActionButton_","getOwnerDocument","handlePointerMove_","isMoving_","PriorityQueue","priorityFunction","keyFunction","priorityFunction_","keyFunction_","elements_","priorities_","queuedElements_","dequeue","priorities","siftUp_","elementKey","enqueue","siftDown_","getLeftChildIndex_","getRightChildIndex_","getParentIndex_","heapify_","isKeyQueued","isQueued","lIndex","rIndex","smallerChildIndex","reprioritize","TileQueue","tilePriorityFunction","tileChangeCallback","boundHandleTileChange_","tileChangeCallback_","tilesLoading_","tilesLoadingKeys_","added","getTilesLoading","tileKey","loadMoreTiles","maxTotalLoading","maxNewLoads","newLoads","PluggableMap","optionsInternal","keyboardEventTarget","controls","interactions","layerGroup","MapProperty","createOptionsInternal","boundHandleBrowserEvent_","handleBrowserEvent","maxTilesLoading_","maxTilesLoading","postRenderTimeoutHandle_","animationDelayKey_","animationDelay_","renderFrame_","coordinateToPixelTransform_","pixelToCoordinateTransform_","frameIndex_","frameState_","previousExtent_","viewPropertyListenerKey_","viewChangeListenerKey_","layerGroupPropertyListenerKeys_","viewport_","overlayContainer_","overlayContainerStopEvent_","mapBrowserEventHandler_","keyboardEventTarget_","keyHandlerKeys_","overlays_","overlayIdIndex_","handleResize_","postRenderFunctions_","tileQueue_","getTilePriority","handleTileChange_","handleLayerGroupChanged_","handleViewChanged_","handleSizeChanged_","handleTargetChanged_","control","interaction","addOverlayInternal_","addControl","getControls","addInteraction","getInteractions","addLayer","getLayerGroup","addOverlay","getOverlays","setTarget","forEachFeatureAtPixel","getCoordinateFromPixelInternal","getFeaturesAtPixel","hasFeatureAtPixel","getEventCoordinate","getEventCoordinateInternal","viewportPosition","eventPosition","getView","getOverlayById","getLoading","getPixelFromCoordinate","viewCoordinate","getPixelFromCoordinateInternal","getOverlayContainer","getOverlayContainerStopEvent","tileSourceKey","tileCenter","tileResolution","wantedTiles","browserEvent","handleMapBrowserEvent","interactionsArray","handlePostRender","tileQueue","hints","lowOnFrameBudget","updateSize","handleViewPropertyChanged_","updateViewportSize_","renderSync","removeControl","removeInteraction","removeLayer","removeOverlay","previousFrameState","MapEventType","setLayerGroup","setView","computedStyle","Control","target_","mapEvent","Attribution","ulElement_","collapsed_","collapsed","userCollapsed_","overrideCollapsible_","collapsible","collapsible_","tipLabel","expandClassName","collapseLabel","collapseClassName","collapseLabel_","label_","activeLabel","handleClick_","cssClasses","renderedAttributions_","collectSourceAttributions_","visibleAttributions","attributionGetter","setCollapsible","updateElement_","handleToggle_","getCollapsible","setCollapsed","getCollapsed","Rotate","compassClassName","callResetNorth_","resetNorth","duration_","autoHide_","autoHide","resetNorth_","Zoom","zoomInClassName","zoomOutClassName","zoomInLabel","zoomOutLabel","zoomInTipLabel","zoomOutTipLabel","inElement","outElement","zoomByDelta_","DoubleClickZoom","delta_","DragPan","kinetic_","kinetic","lastCentroid","lastPointersCount_","panning_","condition_","onFocusOnly","noKinetic_","centerpx","Pointer","DragRotate","lastAngle_","RenderBox","startPixel_","endPixel_","render_","startPixel","endPixel","setPixels","createOrUpdateGeometry","DragBoxEventType","DragBoxEvent","DragBox","box_","minArea_","minArea","onBoxEnd","boxEndCondition_","boxEndCondition","defaultBoxEndCondition","completeBox","DragZoom","out_","mapExtent","boxPixelExtent","factor","KeyboardPan","defaultCondition_","pixelDelta_","pixelDelta","keyEvent","KeyCode","mapUnitsDelta","KeyboardZoom","Kinetic","decay","minVelocity","decay_","minVelocity_","delay_","initialVelocity_","firstIndex","Mode","MouseWheelZoom","totalDelta_","lastDelta_","timeout_","useAnchor_","useAnchor","constrainResolution_","lastAnchor_","startTime_","timeoutId_","mode_","trackpadEventGap_","trackpadTimeoutId_","deltaPerZoom_","endInteraction_","wheelEvent","deltaMode","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_LINE","timeLeft","handleWheelZoom_","setMouseAnchor","PinchRotate","pointerOptions","rotating_","rotationDelta_","threshold_","threshold","rotationDelta","touch0","touch1","PinchZoom","lastDistance_","lastScaleDelta_","scaleDelta","zoomOptions","rotateOptions","attribution","attributionOptions","altShiftDragRotate","doubleClickZoom","zoomDelta","zoomDuration","dragPan","pinchRotate","pinchZoom","keyboard","mouseWheelZoom","shiftDragZoom","removeNodesFromTemplate","nextActiveIndexInTemplateParts","removeCount","nodesToRemoveInTemplate","currentRemovingNode","countNodes","getTemplateCacheKey","scopeName","compatibleShadyCSSVersion","ShadyCSS","prepareTemplateDom","shadyTemplateFactory","cacheKey","TEMPLATE_TYPES","shadyRenderSet","Set","prepareTemplateStyles","renderedDOM","templateElement","condensedStyle","removeStylesFromLitTemplates","insertCount","walkerIndex","insertNodeIntoTemplate","nativeShadow","removes","JSCompiler_renameProperty","_obj","defaultConverter","notEqual","old","defaultPropertyDeclaration","converter","reflect","hasChanged","UpdatingElement","_classProperties","_attributeNameForProperty","_attributeToPropertyMap","superProperties","_ensureClassProperties","noAccessor","getPropertyDescriptor","requestUpdateInternal","superCtor","propKeys","getOwnPropertySymbols","createProperty","fromAttribute","toAttribute","_updateState","_updatePromise","_enableUpdatingResolver","_changedProperties","_saveInstanceProperties","_v","_instanceProperties","enableUpdating","_attributeToProperty","attrValue","_propertyValueToAttribute","getPropertyOptions","_propertyValueFromAttribute","shouldRequestUpdate","_valueHasChanged","_reflectingProperties","_hasRequestedUpdate","_enqueueUpdate","updateComplete","performUpdate","_applyInstanceProperties","shouldUpdate","_markUpdated","firstUpdated","_getUpdateComplete","_propertyToAttribute","customElement","classOrDescriptor","clazz","define","legacyCustomElement","kind","standardCustomElement","standardProperty","initializer","protoOrDescriptor","proto","legacyProperty","internalProperty","renderRoot","legacyQuery","standardQuery","queryAsync","queryAll","eventOptions","legacyEventOptions","standardEventOptions","ElementProto","legacyMatches","queryAssignedNodes","slotName","flatten","slotSelector","slot","assignedNodes","ELEMENT_NODE","supportsAdoptingStyleSheets","Document","CSSStyleSheet","constructionToken","CSSResult","safeToken","_styleSheet","replaceSync","unsafeCSS","reduce","acc","textFromCSSResult","renderNotImplemented","userStyles","getStyles","addStyles","reduceRight","_styles","cssRules","rule","_getUniqueStyles","createRenderRoot","ShadowRoot","adoptStyles","attachShadow","adoptedStyleSheets","_needsShimAdoptedStyleSheets","ScopingShim","prepareAdoptedCssText","connectedCallback","hasUpdated","styleElement","templateResult","hasRendered","needsScoping","host","firstScopeRender","renderContainer","delete","BaseTile","BaseTileLayer","preload","useInterimTilesOnError","setPreload","setUseInterimTilesOnError","getPreload","TileProperty","getUseInterimTilesOnError","CanvasTileLayerRenderer","tileLayer","extentChanged","renderedPixelRatio","renderedProjection","renderedRevision","renderedTiles","newTiles_","tmpTileRange_","isDrawableTile","viewResolution","viewCenter","tileSource","sourceRevision","canvasExtent","tilesToDrawByZ","findLoadedTiles","tmpTileRange","childTileRange","canvasScale","clips","clipZs","currentClip","currentZ","currentTilePixelSize","currentScale","dx_1","dy_1","originTileCoord","originTileExtent","tileGutter","tilesToDraw","floatX","nextX","floatY","nextY","drawTileImage","updateUsedTiles","manageTilePyramid","scheduleExpireCache","getTileImage","tileAlpha","alphaChanged","postRenderFunction","opt_tileCallback","TileLayer","ReprojImage","getImageFunction","sourceImage","sourcePixelRatio","targetExtent_","sourceImage_","sourcePixelRatio_","sourceListenerKey_","unlistenSource_","ImageSourceEventType","ImageSourceEvent","defaultImageLoadFunction","ImageSource","reprojectedImage_","reprojectedRevision_","findNearestResolution","getImageInternal","handleImageChange","ImageArcGISRest","hidpi_","hidpi","params_","ratio_","getParams","imageResolution","getRequestUrl_","getImageLoadFunction","srid","modifiedUrl","uri","keyParams","qs","appendParams","setImageLoadFunction","updateParams","BaseImage","BaseImageLayer","CanvasImageLayerRenderer","imageLayer","imageSource","renderedExtent","imageExtent","imagePixelRatio","size_1","dw","dh","previousAlpha","ImageLayer","Adaptor","requestType","pvt","processResponse","JsonAdaptor","processQuery","countFlg","keyCount","agg","lazyLoadData","lazyLoadGroup","getAggregate","onDemandGroupInfo","onPage","formGroupResult","onWhere","aggQuery","batchRequest","deletedRecordsLen","onAggregates","onSearch","onSortBy","fnCompare","onGroup","onRange","onTake","onSkip","onSelect","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","groups","searches","getFiltersFrom","getRequestQuery","pvtData","convertToQueryString","request1","selects","handleTimeZone","requests","isExpand","formRemoteGroupedData","getAggregateResult","childLevel","getGroupedRecords","hasRecords","childGroupedRecords","original","batchUrl","crudUrl","removeUrl","deleted","table","insertUrl","keyColumn","updateUrl","predicats","aggregateData","isServerGrouping","groupQuery","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","contentId","batchContent","changeSetContent","batchChangeSetContentType","updateType","onPredicate","requiresCast","guid","onComplexPredicate","onEachWhere","onEachSearch","onEachSort","onCount","settings","overrideMimeType","rootUrl","dataUrls","resourceTableName","dataCopy","emptyAndBatch","processBatchResponse","versionCheck","requiresFormat","keys_4","localTimeReplacer","convertObj","localTime","compareAndRemove","initialGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","generateBodyContent","org","jsonObj","exVal","changeGuid","ODataV4Adaptor","isDate","onExpand","exArr","ex","onDistinct","distinctFields","dataUrl","WebApiAdaptor","Count","Items","WebMethodAdaptor","RemoteSaveAdaptor","updateKey","AjaxAdaptor","getData","addRecord","updateRecord","deleteRecord","batchUpdate","CacheAdaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","forDel","currentTime","requestTime","generateKey","currentFilter","newQuery","cachedItems","crossDomain","DataManager","timeTillExpiration","cachingPageSize","enableCaching","jsonp","defaultQuery","isDataAvailable","setDefaultQuery","deffered","isAjaxAdaptor","makeRequest","getDeferedArgs","nextTick","extendRequest","fnSuccess","fnFail","processData","isSelector","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","subUrl","childReq","subData","ajaxReqOption","virtualRecords","ajax_1","pResult","cResult","doAjaxRequest","deff_1","ajax_2","successFunc","ajaxDeffered","failureFunc","ajaxFunc","ajax_3","Tooltip","isBlazorTooltip","contentTargetValue","contentEvent","contentAnimation","formatPosition","isServerRender","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","tooltipEle","tipClass","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","renderPopup","elePos","mouseTrail","getTooltipPosition","openPopupHandler","closePopupHandler","offsetPos","calculateTooltipOffset","collisionFlipFit","needTemplateReposition","findTarget","tooltipEventArgs","tooltipEleWidth","tooltipEleHeight","arrowEle","tipWidth","tipHeight","tipAdjust","tipHeightAdjust","tipWidthAdjust","updateTipPosition","selEle","removeList","adjustArrow","leftValue","topValue","tipPosExclude","tooltipWidth","tooltipHeight","arrowInnerELe","tipPointerPosition","POINTER_ADJUST","renderContent","tooltipContent","enableHtmlParse","templateFunction","isBlazorTemplate","renderCloseIcon","isSticky","tipClose","onStickyClose","addDescribedBy","describedby","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","closeDelay","targetList_1","ctrlId","target_1","restoreElement","showTooltip","showTimer","hideTimer","beforeRenderArgs","beforeRenderCallback","isBlazorTooltipRendered","isHidden","TOOLTIP_WRAP","beforeRenderBlazor","afterRenderBlazor","contentUpdated","ctrlObj","maxWidth","beforeOpenCallback","openAnimation_1","openDelay","onMouseMove","wireMouseEvents","viewContainerRef","horizontal","vertical","affectedPos","checkCollideTarget","newpos","eleOffset","arrowleft","windowCollision","isTooltipOpen","tooltipHide","blazorHide","popupHide","closeAnimation","unwireMouseEvents","tooltipHover","tooltipMouseOut","onMouseOut","enteredElement","checkForTooltipElement","tooltipElementMouseOut","eventPageX","eventPageY","touches","colpos","touchEnd","triggerList_1","getTriggerList","wireFocusEvents","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","ListBase","hasChild","iconWrapper","anchorWrap","navigable","getFieldValues","dataItem","fieldData","dataField","defaultMappedFields","urlAttributes","imageAttributes","imageUrl","defaultAriaAttributes","groupItemRole","defaultListBaseOptions","listClass","itemClass","processSubChild","groupTemplate","headerTemplate","createListFromArray","isSingleLevel","componentInstance","createListItemFromArray","curOpt","getModuleClass","generateId","generateSingleLevelLI","generateLI","checkboxElement","anchorElement","typeofData","curItem","imageElemnt","iconElement","createListFromJson","elementArray","typeof","elementAttributes","getAllAttributes","subDS","subLi","innerElements","grpLI","elementID","anchorTag","isFullNavigation","anchorWrapper","uID","removeBlazorID","compiledString","groupTemplateID","innerDiv","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","groupDataSource","curFields","newtext","_id","curEle","jsonAr","childs","hasChildNodes","attributes_1","renderContentTemplate","liCollection","currentID","renderGroupTemplate","headerItems","category","headerItems_1","headerData","globalTimeOut","spinTemplate","spinCSSClass","createSpinner","spinnerContainer","spinnerInnerContainer","wrap","inner_wrap","create_spinner_container","theme","defaultSize","calculateRadius","setTheme","labelEle","replaceContent","innerContainer","random_generator","timeOut","create_material_element","mat_calculate_attributes","createMaterialSpinner","create_fabric_element","fb_calculate_attributes","createFabricSpinner","svgBoot","bootCircle","CLS_SPINCIRCLE","defaultRadius","create_bootstrap_element","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","createHighContrastSpinner","createBootstrap4Spinner","charAt","innerCon","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","svgMaterial","matCirclePath","animateMaterial","spinnerInfo","globalInfo","previousId","strokeSize","getStrokeSize","mat_animation","getDashOffset","updatePath","createCircle","easeAnimation","drawArc","timecount","innerConainer","trgClass","defineCircle","endArc","defineArc","radians","showHideSpinner","isHide","spinnerWrap","inner","svgEle","globalVariables","timeOutVar","startMatAnimate","increment","formSeries","boot_animate","animateBootstrap"],"mappings":"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,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,OACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,OACP,IAAO,IACP,IAAO,IACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,IACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,MACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,OACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,OACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,MACP,IAAO,IACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,OACP,IAAO,OACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,OACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,MACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,KACP,IAAO,OACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,MACP,IAAO,OACP,IAAO,OACP,IAAO,MACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,QC3UX,SAAW7C,GAEP,IAAI8C,EAAiB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvJ,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MA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CAAC,WACZ,UACA,cACA,aACA,YACA,SACA,UACA,SACA,UACA,eACA,iBACA,UACA,WACA,eACA,iBACA,gBACA,SACA,YACA,mBACA,WACA,UACA,gBACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,UACA,UACA,UACA,eACA,cACA,cACA,UACA,YACA,YACA,aACA,UACA,SACA,eACA,mBACA,cACA,YACA,cACA,cACA,aACA,cACA,YACA,eACA,YACA,SACA,WACA,aACA,aACA,UACA,SACA,YACA,aACA,aACA,eACA,qBACA,SACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,YACA,eACA,SACA,WACA,iBACA,YACA,eACA,eACA,eACA,UACA,oBAEA,GAAoC,WACpC,SAASC,KA2ET,OAzEAA,EAAmBC,eAAiB,WAChC,MAAO,CACHC,UAAW,CACPC,KAAMP,GACN52C,WAAY62C,MAKxBG,EAAmBI,SAAW,SAAUvmD,GACpC,IAAIiF,EAAOxD,KAAK2kD,iBAEhB,OADa3kD,KAAK+kD,eAAevhD,EAAMjF,IAG3CmmD,EAAmBK,eAAiB,SAAUvhD,EAAMjF,GAChDyB,KAAKukD,YAAc/gD,EAAKohD,UAAUl3C,WAClC1N,KAAKskD,WAAa9gD,EAAKohD,UAAUC,KACjC7kD,KAAKglD,YAAcn+C,SAAS23B,cAAc,OAC1Cx+B,KAAKglD,YAAYrrB,UAAYp7B,EAC7ByB,KAAKilD,gBACLjlD,KAAKklD,iBACLllD,KAAKmlD,iBACL,IAAIC,EAAeplD,KAAKglD,YAAYrrB,UAEpC,OADA35B,KAAKqlD,gBACED,GAEXV,EAAmBW,cAAgB,WAG/B,IADA,IAAI/2C,EAAQtO,KAAKglD,YAAY77C,SACpBmN,EAAI,EAAGA,EAAIhI,EAAM7T,OAAQ6b,IAE9B,IADA,IAAIkuC,EAAYl2C,EAAMgI,GAAG5I,WAChB7R,EAAI,EAAGA,EAAI2oD,EAAU/pD,OAAQoB,IAClCmE,KAAKglD,YAAY77C,SAASmN,GAAG9H,gBAAgBg2C,EAAU3oD,GAAGypD,YAItEZ,EAAmBO,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AU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IA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","file":"15.f70f6feb6b3bba494f76.js","sourcesContent":["define([\"./_base/kernel\", \"./has\", \"require\", \"./has!host-browser?./domReady\", \"./_base/lang\"], function(dojo, has, require, domReady, lang){\n\t// module:\n\t//\t\tdojo/ready\n\t// note:\n\t//\t\tThis module should be unnecessary in dojo 2.0\n\n\tvar\n\t\t// truthy if DOMContentLoaded or better (e.g., window.onload fired) has been achieved\n\t\tisDomReady = 0,\n\n\t\t// The queue of functions waiting to execute as soon as dojo.ready conditions satisfied\n\t\tloadQ = [],\n\n\t\t// prevent recursion in onLoad\n\t\tonLoadRecursiveGuard = 0,\n\n\t\thandleDomReady = function(){\n\t\t\tisDomReady = 1;\n\t\t\tdojo._postLoad = dojo.config.afterOnLoad = true;\n\t\t\tonEvent();\n\t\t},\n\n\t\tonEvent = function(){\n\t\t\t// Called when some state changes:\n\t\t\t//\t\t- dom ready\n\t\t\t//\t\t- dojo/domReady has finished processing everything in its queue\n\t\t\t//\t\t- task added to loadQ\n\t\t\t//\t\t- require() has finished loading all currently requested modules\n\t\t\t//\n\t\t\t// Run the functions queued with dojo.ready if appropriate.\n\n\n\t\t\t//guard against recursions into this function\n\t\t\tif(onLoadRecursiveGuard){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonLoadRecursiveGuard = 1;\n\n\t\t\t// Run tasks in queue if require() is finished loading modules, the dom is ready, and there are no\n\t\t\t// pending tasks registered via domReady().\n\t\t\t// The last step is necessary so that a user defined dojo.ready() callback is delayed until after the\n\t\t\t// domReady() calls inside of dojo.\t Failure can be seen on dijit/tests/robot/Dialog_ally.html on IE8\n\t\t\t// because the dijit/focus.js domReady() callback doesn't execute until after the test starts running.\n\t\t\twhile(isDomReady && (!domReady || domReady._Q.length == 0) && (require.idle ? require.idle() : true) && loadQ.length){\n\t\t\t\tvar f = loadQ.shift();\n\t\t\t\ttry{\n\t\t\t\t\tf();\n\t\t\t\t}catch(e){\n\t\t\t\t\t// force the dojo.js on(\"error\") handler do display the message\n\t\t\t\t\te.info = e.message;\n\t\t\t\t\tif(require.signal){\n\t\t\t\t\t\trequire.signal(\"error\", e);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tonLoadRecursiveGuard = 0;\n\t\t};\n\n\t// Check if we should run the next queue operation whenever require() finishes loading modules or domReady\n\t// finishes processing it's queue.\n\trequire.on && require.on(\"idle\", onEvent);\n\tif(domReady){\n\t\tdomReady._onQEmpty = onEvent;\n\t}\n\n\tvar ready = dojo.ready = dojo.addOnLoad = function(priority, context, callback){\n\t\t// summary:\n\t\t//\t\tAdd a function to execute on DOM content loaded and all requested modules have arrived and been evaluated.\n\t\t//\t\tIn most cases, the `domReady` plug-in should suffice and this method should not be needed.\n\t\t//\n\t\t//\t\tWhen called in a non-browser environment, just checks that all requested modules have arrived and been\n\t\t//\t\tevaluated.\n\t\t// priority: Integer?\n\t\t//\t\tThe order in which to exec this callback relative to other callbacks, defaults to 1000\n\t\t// context: Object?|Function\n\t\t//\t\tThe context in which to run execute callback, or a callback if not using context\n\t\t// callback: Function?\n\t\t//\t\tThe function to execute.\n\t\t//\n\t\t// example:\n\t\t//\tSimple DOM and Modules ready syntax\n\t\t//\t|\trequire([\"dojo/ready\"], function(ready){\n\t\t//\t|\t\tready(function(){ alert(\"Dom ready!\"); });\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\tUsing a priority\n\t\t//\t|\trequire([\"dojo/ready\"], function(ready){\n\t\t//\t|\t\tready(2, function(){ alert(\"low priority ready!\"); })\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\tUsing context\n\t\t//\t|\trequire([\"dojo/ready\"], function(ready){\n\t\t//\t|\t\tready(foo, function(){\n\t\t//\t|\t\t\t// in here, this == foo\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\tUsing dojo/hitch style args:\n\t\t//\t|\trequire([\"dojo/ready\"], function(ready){\n\t\t//\t|\t\tvar foo = { dojoReady: function(){ console.warn(this, \"dojo dom and modules ready.\"); } };\n\t\t//\t|\t\tready(foo, \"dojoReady\");\n\t\t//\t|\t});\n\n\t\tvar hitchArgs = lang._toArray(arguments);\n\t\tif(typeof priority != \"number\"){\n\t\t\tcallback = context;\n\t\t\tcontext = priority;\n\t\t\tpriority = 1000;\n\t\t}else{\n\t\t\thitchArgs.shift();\n\t\t}\n\t\tcallback = callback ?\n\t\t\tlang.hitch.apply(dojo, hitchArgs) :\n\t\t\tfunction(){\n\t\t\t\tcontext();\n\t\t\t};\n\t\tcallback.priority = priority;\n\t\tfor(var i = 0; i < loadQ.length && priority >= loadQ[i].priority; i++){}\n\t\tloadQ.splice(i, 0, callback);\n\t\tonEvent();\n\t};\n\n\thas.add(\"dojo-config-addOnLoad\", 1);\n\tif(has(\"dojo-config-addOnLoad\")){\n\t\tvar dca = dojo.config.addOnLoad;\n\t\tif(dca){\n\t\t\tready[(lang.isArray(dca) ? \"apply\" : \"call\")](dojo, dca);\n\t\t}\n\t}\n\n\tif(has(\"dojo-sync-loader\") && dojo.config.parseOnLoad && !dojo.isAsync){\n\t\tready(99, function(){\n\t\t\tif(!dojo.parser){\n\t\t\t\tdojo.deprecated(\"Add explicit require(['dojo/parser']);\", \"\", \"2.0\");\n\t\t\t\trequire([\"dojo/parser\"]);\n\t\t\t}\n\t\t});\n\t}\n\n\tif(domReady){\n\t\tdomReady(handleDomReady);\n\t}else{\n\t\thandleDomReady();\n\t}\n\n\treturn ready;\n});\n","define([\"./kernel\", \"../has\", \"../sniff\"], function(dojo, has){\n\t// module:\n\t//\t\tdojo/_base/lang\n\n\thas.add(\"bug-for-in-skips-shadowed\", function(){\n\t\t// if true, the for-in iterator skips object properties that exist in Object's prototype (IE 6 - ?)\n\t\tfor(var i in {toString: 1}){\n\t\t\treturn 0;\n\t\t}\n\t\treturn 1;\n\t});\n\n\t// Helper methods\n\tvar _extraNames =\n\t\t\thas(\"bug-for-in-skips-shadowed\") ?\n\t\t\t\t\"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor\".split(\".\") : [],\n\n\t\t_extraLen = _extraNames.length,\n\n\t\tgetProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){\n\t\t\tif(!context){\n\t\t\t\tif(parts[0] && dojo.scopeMap[parts[0]]) {\n\t\t\t\t\t// Voodoo code from the old days where \"dojo\" or \"dijit\" maps to some special object\n\t\t\t\t\t// rather than just window.dojo\n\t\t\t\t\tcontext = dojo.scopeMap[parts.shift()][1];\n\t\t\t\t}else{\n\t\t\t\t\tcontext = dojo.global;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttry{\n\t\t\t\tfor(var i = 0; i < parts.length; i++){\n\t\t\t\t\tvar p = parts[i];\n\t\t\t\t\tif(!(p in context)){\n\t\t\t\t\t\tif(create){\n\t\t\t\t\t\t\tcontext[p] = {};\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\treturn;\t\t// return undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontext = context[p];\n\t\t\t\t}\n\t\t\t\treturn context; // mixed\n\t\t\t}catch(e){\n\t\t\t\t// \"p in context\" throws an exception when context is a number, boolean, etc. rather than an object,\n\t\t\t\t// so in that corner case just return undefined (by having no return statement)\n\t\t\t}\n\t\t},\n\n\t\topts = Object.prototype.toString,\n\n\t\tefficient = function(obj, offset, startWith){\n\t\t\treturn (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0));\n\t\t},\n\n\t\t_pattern = /\\{([^\\}]+)\\}/g;\n\n\t// Module export\n\tvar lang = {\n\t\t// summary:\n\t\t//\t\tThis module defines Javascript language extensions.\n\n\t\t// _extraNames: String[]\n\t\t//\t\tLists property names that must be explicitly processed during for-in iteration\n\t\t//\t\tin environments that have has(\"bug-for-in-skips-shadowed\") true.\n\t\t_extraNames:_extraNames,\n\n\t\t_mixin: function(dest, source, copyFunc){\n\t\t\t// summary:\n\t\t\t//\t\tCopies/adds all properties of source to dest; returns dest.\n\t\t\t// dest: Object\n\t\t\t//\t\tThe object to which to copy/add all properties contained in source.\n\t\t\t// source: Object\n\t\t\t//\t\tThe object from which to draw all properties to copy into dest.\n\t\t\t// copyFunc: Function?\n\t\t\t//\t\tThe process used to copy/add a property in source; defaults to the Javascript assignment operator.\n\t\t\t// returns:\n\t\t\t//\t\tdest, as modified\n\t\t\t// description:\n\t\t\t//\t\tAll properties, including functions (sometimes termed \"methods\"), excluding any non-standard extensions\n\t\t\t//\t\tfound in Object.prototype, are copied/added to dest. Copying/adding each particular property is\n\t\t\t//\t\tdelegated to copyFunc (if any); copyFunc defaults to the Javascript assignment operator if not provided.\n\t\t\t//\t\tNotice that by default, _mixin executes a so-called \"shallow copy\" and aggregate types are copied/added by reference.\n\t\t\tvar name, s, i, empty = {};\n\t\t\tfor(name in source){\n\t\t\t\t// the (!(name in empty) || empty[name] !== s) condition avoids copying properties in \"source\"\n\t\t\t\t// inherited from Object.prototype.\t For example, if dest has a custom toString() method,\n\t\t\t\t// don't overwrite it with the toString() method that source inherited from Object.prototype\n\t\t\t\ts = source[name];\n\t\t\t\tif(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){\n\t\t\t\t\tdest[name] = copyFunc ? copyFunc(s) : s;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(has(\"bug-for-in-skips-shadowed\")){\n\t\t\t\tif(source){\n\t\t\t\t\tfor(i = 0; i < _extraLen; ++i){\n\t\t\t\t\t\tname = _extraNames[i];\n\t\t\t\t\t\ts = source[name];\n\t\t\t\t\t\tif(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){\n\t\t\t\t\t\t\tdest[name] = copyFunc ? copyFunc(s) : s;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn dest; // Object\n\t\t},\n\n\t\tmixin: function(dest, sources){\n\t\t\t// summary:\n\t\t\t//\t\tCopies/adds all properties of one or more sources to dest; returns dest.\n\t\t\t// dest: Object\n\t\t\t//\t\tThe object to which to copy/add all properties contained in source. If dest is falsy, then\n\t\t\t//\t\ta new object is manufactured before copying/adding properties begins.\n\t\t\t// sources: Object...\n\t\t\t//\t\tOne of more objects from which to draw all properties to copy into dest. sources are processed\n\t\t\t//\t\tleft-to-right and if more than one of these objects contain the same property name, the right-most\n\t\t\t//\t\tvalue \"wins\".\n\t\t\t// returns: Object\n\t\t\t//\t\tdest, as modified\n\t\t\t// description:\n\t\t\t//\t\tAll properties, including functions (sometimes termed \"methods\"), excluding any non-standard extensions\n\t\t\t//\t\tfound in Object.prototype, are copied/added from sources to dest. sources are processed left to right.\n\t\t\t//\t\tThe Javascript assignment operator is used to copy/add each property; therefore, by default, mixin\n\t\t\t//\t\texecutes a so-called \"shallow copy\" and aggregate types are copied/added by reference.\n\t\t\t// example:\n\t\t\t//\t\tmake a shallow copy of an object\n\t\t\t//\t|\tvar copy = lang.mixin({}, source);\n\t\t\t// example:\n\t\t\t//\t\tmany class constructors often take an object which specifies\n\t\t\t//\t\tvalues to be configured on the object. In this case, it is\n\t\t\t//\t\toften simplest to call `lang.mixin` on the `this` object:\n\t\t\t//\t|\tdeclare(\"acme.Base\", null, {\n\t\t\t//\t|\t\tconstructor: function(properties){\n\t\t\t//\t|\t\t\t// property configuration:\n\t\t\t//\t|\t\t\tlang.mixin(this, properties);\n\t\t\t//\t|\n\t\t\t//\t|\t\t\tconsole.log(this.quip);\n\t\t\t//\t|\t\t\t//\t...\n\t\t\t//\t|\t\t},\n\t\t\t//\t|\t\tquip: \"I wasn't born yesterday, you know - I've seen movies.\",\n\t\t\t//\t|\t\t// ...\n\t\t\t//\t|\t});\n\t\t\t//\t|\n\t\t\t//\t|\t// create an instance of the class and configure it\n\t\t\t//\t|\tvar b = new acme.Base({quip: \"That's what it does!\" });\n\t\t\t// example:\n\t\t\t//\t\tcopy in properties from multiple objects\n\t\t\t//\t|\tvar flattened = lang.mixin(\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tname: \"Frylock\",\n\t\t\t//\t|\t\t\tbraces: true\n\t\t\t//\t|\t\t},\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tname: \"Carl Brutanananadilewski\"\n\t\t\t//\t|\t\t}\n\t\t\t//\t|\t);\n\t\t\t//\t|\n\t\t\t//\t|\t// will print \"Carl Brutanananadilewski\"\n\t\t\t//\t|\tconsole.log(flattened.name);\n\t\t\t//\t|\t// will print \"true\"\n\t\t\t//\t|\tconsole.log(flattened.braces);\n\n\t\t\tif(!dest){ dest = {}; }\n\t\t\tfor(var i = 1, l = arguments.length; i < l; i++){\n\t\t\t\tlang._mixin(dest, arguments[i]);\n\t\t\t}\n\t\t\treturn dest; // Object\n\t\t},\n\n\t\tsetObject: function(name, value, context){\n\t\t\t// summary:\n\t\t\t//\t\tSet a property from a dot-separated string, such as \"A.B.C\"\n\t\t\t// description:\n\t\t\t//\t\tUseful for longer api chains where you have to test each object in\n\t\t\t//\t\tthe chain, or when you have an object reference in string format.\n\t\t\t//\t\tObjects are created as needed along `path`. Returns the passed\n\t\t\t//\t\tvalue if setting is successful or `undefined` if not.\n\t\t\t// name: String\n\t\t\t//\t\tPath to a property, in the form \"A.B.C\".\n\t\t\t// value: anything\n\t\t\t//\t\tvalue or object to place at location given by name\n\t\t\t// context: Object?\n\t\t\t//\t\tOptional. Object to use as root of path. Defaults to\n\t\t\t//\t\t`dojo.global`.\n\t\t\t// example:\n\t\t\t//\t\tset the value of `foo.bar.baz`, regardless of whether\n\t\t\t//\t\tintermediate objects already exist:\n\t\t\t//\t| lang.setObject(\"foo.bar.baz\", value);\n\t\t\t// example:\n\t\t\t//\t\twithout `lang.setObject`, we often see code like this:\n\t\t\t//\t| // ensure that intermediate objects are available\n\t\t\t//\t| if(!obj[\"parent\"]){ obj.parent = {}; }\n\t\t\t//\t| if(!obj.parent[\"child\"]){ obj.parent.child = {}; }\n\t\t\t//\t| // now we can safely set the property\n\t\t\t//\t| obj.parent.child.prop = \"some value\";\n\t\t\t//\t\twhereas with `lang.setObject`, we can shorten that to:\n\t\t\t//\t| lang.setObject(\"parent.child.prop\", \"some value\", obj);\n\n\t\t\tvar parts = name.split(\".\"), p = parts.pop(), obj = getProp(parts, true, context);\n\t\t\treturn obj && p ? (obj[p] = value) : undefined; // Object\n\t\t},\n\n\t\tgetObject: function(name, create, context){\n\t\t\t// summary:\n\t\t\t//\t\tGet a property from a dot-separated string, such as \"A.B.C\"\n\t\t\t// description:\n\t\t\t//\t\tUseful for longer api chains where you have to test each object in\n\t\t\t//\t\tthe chain, or when you have an object reference in string format.\n\t\t\t// name: String\n\t\t\t//\t\tPath to an property, in the form \"A.B.C\".\n\t\t\t// create: Boolean?\n\t\t\t//\t\tOptional. Defaults to `false`. If `true`, Objects will be\n\t\t\t//\t\tcreated at any point along the 'path' that is undefined.\n\t\t\t// context: Object?\n\t\t\t//\t\tOptional. Object to use as root of path. Defaults to\n\t\t\t//\t\t'dojo.global'. Null may be passed.\n\t\t\treturn !name ? context : getProp(name.split(\".\"), create, context); // Object\n\t\t},\n\n\t\texists: function(name, obj){\n\t\t\t// summary:\n\t\t\t//\t\tdetermine if an object supports a given method\n\t\t\t// description:\n\t\t\t//\t\tuseful for longer api chains where you have to test each object in\n\t\t\t//\t\tthe chain. Useful for object and method detection.\n\t\t\t// name: String\n\t\t\t//\t\tPath to an object, in the form \"A.B.C\".\n\t\t\t// obj: Object?\n\t\t\t//\t\tObject to use as root of path. Defaults to\n\t\t\t//\t\t'dojo.global'. Null may be passed.\n\t\t\t// example:\n\t\t\t//\t| // define an object\n\t\t\t//\t| var foo = {\n\t\t\t//\t|\t\tbar: { }\n\t\t\t//\t| };\n\t\t\t//\t|\n\t\t\t//\t| // search the global scope\n\t\t\t//\t| lang.exists(\"foo.bar\"); // true\n\t\t\t//\t| lang.exists(\"foo.bar.baz\"); // false\n\t\t\t//\t|\n\t\t\t//\t| // search from a particular scope\n\t\t\t//\t| lang.exists(\"bar\", foo); // true\n\t\t\t//\t| lang.exists(\"bar.baz\", foo); // false\n\t\t\treturn lang.getObject(name, false, obj) !== undefined; // Boolean\n\t\t},\n\n\t\t// Crockford (ish) functions\n\n\t\tisString: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturn true if it is a String\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn (typeof it == \"string\" || it instanceof String); // Boolean\n\t\t},\n\n\t\tisArray: Array.isArray || function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturn true if it is an Array.\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn opts.call(it) == \"[object Array]\"; // Boolean\n\t\t},\n\n\t\tisFunction: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturn true if it is a Function\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn opts.call(it) === \"[object Function]\";\n\t\t},\n\n\t\tisObject: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturns true if it is a JavaScript object (or an Array, a Function\n\t\t\t//\t\tor null)\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn it !== undefined &&\n\t\t\t\t(it === null || typeof it == \"object\" || lang.isArray(it) || lang.isFunction(it)); // Boolean\n\t\t},\n\n\t\tisArrayLike: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tsimilar to isArray() but more permissive\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\t// returns:\n\t\t\t//\t\tIf it walks like a duck and quacks like a duck, return `true`\n\t\t\t// description:\n\t\t\t//\t\tDoesn't strongly test for \"arrayness\". Instead, settles for \"isn't\n\t\t\t//\t\ta string or number and has a length property\". Arguments objects\n\t\t\t//\t\tand DOM collections will return true when passed to\n\t\t\t//\t\tisArrayLike(), but will return false when passed to\n\t\t\t//\t\tisArray().\n\t\t\treturn !!it && // Boolean\n\t\t\t\t// keep out built-in constructors (Number, String, ...) which have length\n\t\t\t\t// properties\n\t\t\t\t!lang.isString(it) && !lang.isFunction(it) &&\n\t\t\t\t!(it.tagName && it.tagName.toLowerCase() == 'form') &&\n\t\t\t\t(lang.isArray(it) || isFinite(it.length));\n\t\t},\n\n\t\tisAlien: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturns true if it is a built-in function or some other kind of\n\t\t\t//\t\toddball that *should* report as a function but doesn't\n\t\t\treturn it && !lang.isFunction(it) && /\\{\\s*\\[native code\\]\\s*\\}/.test(String(it)); // Boolean\n\t\t},\n\n\t\textend: function(ctor, props){\n\t\t\t// summary:\n\t\t\t//\t\tAdds all properties and methods of props to constructor's\n\t\t\t//\t\tprototype, making them available to all instances created with\n\t\t\t//\t\tconstructor.\n\t\t\t// ctor: Object\n\t\t\t//\t\tTarget constructor to extend.\n\t\t\t// props: Object\n\t\t\t//\t\tOne or more objects to mix into ctor.prototype\n\t\t\tfor(var i=1, l=arguments.length; i<l; i++){\n\t\t\t\tlang._mixin(ctor.prototype, arguments[i]);\n\t\t\t}\n\t\t\treturn ctor; // Object\n\t\t},\n\n\t\t_hitchArgs: function(scope, method){\n\t\t\tvar pre = lang._toArray(arguments, 2);\n\t\t\tvar named = lang.isString(method);\n\t\t\treturn function(){\n\t\t\t\t// arrayify arguments\n\t\t\t\tvar args = lang._toArray(arguments);\n\t\t\t\t// locate our method\n\t\t\t\tvar f = named ? (scope||dojo.global)[method] : method;\n\t\t\t\t// invoke with collected args\n\t\t\t\treturn f && f.apply(scope || this, pre.concat(args)); // mixed\n\t\t\t}; // Function\n\t\t},\n\n\t\thitch: function(scope, method){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a function that will only ever execute in the given scope.\n\t\t\t//\t\tThis allows for easy use of object member functions\n\t\t\t//\t\tin callbacks and other places in which the \"this\" keyword may\n\t\t\t//\t\totherwise not reference the expected scope.\n\t\t\t//\t\tAny number of default positional arguments may be passed as parameters\n\t\t\t//\t\tbeyond \"method\".\n\t\t\t//\t\tEach of these values will be used to \"placehold\" (similar to curry)\n\t\t\t//\t\tfor the hitched function.\n\t\t\t// scope: Object\n\t\t\t//\t\tThe scope to use when method executes. If method is a string,\n\t\t\t//\t\tscope is also the object containing method.\n\t\t\t// method: Function|String...\n\t\t\t//\t\tA function to be hitched to scope, or the name of the method in\n\t\t\t//\t\tscope to be hitched.\n\t\t\t// example:\n\t\t\t//\t|\tlang.hitch(foo, \"bar\")();\n\t\t\t//\t\truns foo.bar() in the scope of foo\n\t\t\t// example:\n\t\t\t//\t|\tlang.hitch(foo, myFunction);\n\t\t\t//\t\treturns a function that runs myFunction in the scope of foo\n\t\t\t// example:\n\t\t\t//\t\tExpansion on the default positional arguments passed along from\n\t\t\t//\t\thitch. Passed args are mixed first, additional args after.\n\t\t\t//\t|\tvar foo = { bar: function(a, b, c){ console.log(a, b, c); } };\n\t\t\t//\t|\tvar fn = lang.hitch(foo, \"bar\", 1, 2);\n\t\t\t//\t|\tfn(3); // logs \"1, 2, 3\"\n\t\t\t// example:\n\t\t\t//\t|\tvar foo = { bar: 2 };\n\t\t\t//\t|\tlang.hitch(foo, function(){ this.bar = 10; })();\n\t\t\t//\t\texecute an anonymous function in scope of foo\n\t\t\tif(arguments.length > 2){\n\t\t\t\treturn lang._hitchArgs.apply(dojo, arguments); // Function\n\t\t\t}\n\t\t\tif(!method){\n\t\t\t\tmethod = scope;\n\t\t\t\tscope = null;\n\t\t\t}\n\t\t\tif(lang.isString(method)){\n\t\t\t\tscope = scope || dojo.global;\n\t\t\t\tif(!scope[method]){ throw(['lang.hitch: scope[\"', method, '\"] is null (scope=\"', scope, '\")'].join('')); }\n\t\t\t\treturn function(){ return scope[method].apply(scope, arguments || []); }; // Function\n\t\t\t}\n\t\t\treturn !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function\n\t\t},\n\n\t\tdelegate: (function(){\n\t\t\t// boodman/crockford delegation w/ cornford optimization\n\t\t\tfunction TMP(){}\n\t\t\treturn function(obj, props){\n\t\t\t\tTMP.prototype = obj;\n\t\t\t\tvar tmp = new TMP();\n\t\t\t\tTMP.prototype = null;\n\t\t\t\tif(props){\n\t\t\t\t\tlang._mixin(tmp, props);\n\t\t\t\t}\n\t\t\t\treturn tmp; // Object\n\t\t\t};\n\t\t})(),\n\t\t/*=====\n\t\tdelegate: function(obj, props){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a new object which \"looks\" to obj for properties which it\n\t\t\t//\t\tdoes not have a value for. Optionally takes a bag of properties to\n\t\t\t//\t\tseed the returned object with initially.\n\t\t\t// description:\n\t\t\t//\t\tThis is a small implementation of the Boodman/Crockford delegation\n\t\t\t//\t\tpattern in JavaScript. An intermediate object constructor mediates\n\t\t\t//\t\tthe prototype chain for the returned object, using it to delegate\n\t\t\t//\t\tdown to obj for property lookup when object-local lookup fails.\n\t\t\t//\t\tThis can be thought of similarly to ES4's \"wrap\", save that it does\n\t\t\t//\t\tnot act on types but rather on pure objects.\n\t\t\t// obj: Object\n\t\t\t//\t\tThe object to delegate to for properties not found directly on the\n\t\t\t//\t\treturn object or in props.\n\t\t\t// props: Object...\n\t\t\t//\t\tan object containing properties to assign to the returned object\n\t\t\t// returns:\n\t\t\t//\t\tan Object of anonymous type\n\t\t\t// example:\n\t\t\t//\t|\tvar foo = { bar: \"baz\" };\n\t\t\t//\t|\tvar thinger = lang.delegate(foo, { thud: \"xyzzy\"});\n\t\t\t//\t|\tthinger.bar == \"baz\"; // delegated to foo\n\t\t\t//\t|\tfoo.thud == undefined; // by definition\n\t\t\t//\t|\tthinger.thud == \"xyzzy\"; // mixed in from props\n\t\t\t//\t|\tfoo.bar = \"thonk\";\n\t\t\t//\t|\tthinger.bar == \"thonk\"; // still delegated to foo's bar\n\t\t},\n\t\t=====*/\n\n\t\t_toArray: has(\"ie\") ?\n\t\t\t(function(){\n\t\t\t\tfunction slow(obj, offset, startWith){\n\t\t\t\t\tvar arr = startWith||[];\n\t\t\t\t\tfor(var x = offset || 0; x < obj.length; x++){\n\t\t\t\t\t\tarr.push(obj[x]);\n\t\t\t\t\t}\n\t\t\t\t\treturn arr;\n\t\t\t\t}\n\t\t\t\treturn function(obj){\n\t\t\t\t\treturn ((obj.item) ? slow : efficient).apply(this, arguments);\n\t\t\t\t};\n\t\t\t})() : efficient,\n\t\t/*=====\n\t\t _toArray: function(obj, offset, startWith){\n\t\t\t // summary:\n\t\t\t //\t\tConverts an array-like object (i.e. arguments, DOMCollection) to an\n\t\t\t //\t\tarray. Returns a new Array with the elements of obj.\n\t\t\t // obj: Object\n\t\t\t //\t\tthe object to \"arrayify\". We expect the object to have, at a\n\t\t\t //\t\tminimum, a length property which corresponds to integer-indexed\n\t\t\t //\t\tproperties.\n\t\t\t // offset: Number?\n\t\t\t //\t\tthe location in obj to start iterating from. Defaults to 0.\n\t\t\t //\t\tOptional.\n\t\t\t // startWith: Array?\n\t\t\t //\t\tAn array to pack with the properties of obj. If provided,\n\t\t\t //\t\tproperties in obj are appended at the end of startWith and\n\t\t\t //\t\tstartWith is the returned array.\n\t\t },\n\t\t =====*/\n\n\t\tpartial: function(/*Function|String*/ method /*, ...*/){\n\t\t\t// summary:\n\t\t\t//\t\tsimilar to hitch() except that the scope object is left to be\n\t\t\t//\t\twhatever the execution context eventually becomes.\n\t\t\t// description:\n\t\t\t//\t\tCalling lang.partial is the functional equivalent of calling:\n\t\t\t//\t\t|\tlang.hitch(null, funcName, ...);\n\t\t\t// method:\n\t\t\t//\t\tThe function to \"wrap\"\n\t\t\tvar arr = [ null ];\n\t\t\treturn lang.hitch.apply(dojo, arr.concat(lang._toArray(arguments))); // Function\n\t\t},\n\n\t\tclone: function(/*anything*/ src){\n\t\t\t// summary:\n\t\t\t//\t\tClones objects (including DOM nodes) and all children.\n\t\t\t//\t\tWarning: do not clone cyclic structures.\n\t\t\t// src:\n\t\t\t//\t\tThe object to clone\n\t\t\tif(!src || typeof src != \"object\" || lang.isFunction(src)){\n\t\t\t\t// null, undefined, any non-object, or function\n\t\t\t\treturn src;\t// anything\n\t\t\t}\n\t\t\tif(src.nodeType && \"cloneNode\" in src){\n\t\t\t\t// DOM Node\n\t\t\t\treturn src.cloneNode(true); // Node\n\t\t\t}\n\t\t\tif(src instanceof Date){\n\t\t\t\t// Date\n\t\t\t\treturn new Date(src.getTime());\t// Date\n\t\t\t}\n\t\t\tif(src instanceof RegExp){\n\t\t\t\t// RegExp\n\t\t\t\treturn new RegExp(src); // RegExp\n\t\t\t}\n\t\t\tvar r, i, l;\n\t\t\tif(lang.isArray(src)){\n\t\t\t\t// array\n\t\t\t\tr = [];\n\t\t\t\tfor(i = 0, l = src.length; i < l; ++i){\n\t\t\t\t\tif(i in src){\n\t\t\t\t\t\tr[i] = lang.clone(src[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// we don't clone functions for performance reasons\n\t\t\t\t//\t\t}else if(d.isFunction(src)){\n\t\t\t\t//\t\t\t// function\n\t\t\t\t//\t\t\tr = function(){ return src.apply(this, arguments); };\n\t\t\t}else{\n\t\t\t\t// generic objects\n\t\t\t\tr = src.constructor ? new src.constructor() : {};\n\t\t\t}\n\t\t\treturn lang._mixin(r, src, lang.clone);\n\t\t},\n\n\n\t\ttrim: String.prototype.trim ?\n\t\t\tfunction(str){ return str.trim(); } :\n\t\t\tfunction(str){ return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); },\n\t\t/*=====\n\t\t trim: function(str){\n\t\t\t // summary:\n\t\t\t //\t\tTrims whitespace from both sides of the string\n\t\t\t // str: String\n\t\t\t //\t\tString to be trimmed\n\t\t\t // returns: String\n\t\t\t //\t\tReturns the trimmed string\n\t\t\t // description:\n\t\t\t //\t\tThis version of trim() was selected for inclusion into the base due\n\t\t\t //\t\tto its compact size and relatively good performance\n\t\t\t //\t\t(see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript)\n\t\t\t //\t\tUses String.prototype.trim instead, if available.\n\t\t\t //\t\tThe fastest but longest version of this function is located at\n\t\t\t //\t\tlang.string.trim()\n\t\t },\n\t\t =====*/\n\n\t\treplace: function(tmpl, map, pattern){\n\t\t\t// summary:\n\t\t\t//\t\tPerforms parameterized substitutions on a string. Throws an\n\t\t\t//\t\texception if any parameter is unmatched.\n\t\t\t// tmpl: String\n\t\t\t//\t\tString to be used as a template.\n\t\t\t// map: Object|Function\n\t\t\t//\t\tIf an object, it is used as a dictionary to look up substitutions.\n\t\t\t//\t\tIf a function, it is called for every substitution with following parameters:\n\t\t\t//\t\ta whole match, a name, an offset, and the whole template\n\t\t\t//\t\tstring (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace\n\t\t\t//\t\tfor more details).\n\t\t\t// pattern: RegEx?\n\t\t\t//\t\tOptional regular expression objects that overrides the default pattern.\n\t\t\t//\t\tMust be global and match one item. The default is: /\\{([^\\}]+)\\}/g,\n\t\t\t//\t\twhich matches patterns like that: \"{xxx}\", where \"xxx\" is any sequence\n\t\t\t//\t\tof characters, which doesn't include \"}\".\n\t\t\t// returns: String\n\t\t\t//\t\tReturns the substituted string.\n\t\t\t// example:\n\t\t\t//\t|\t// uses a dictionary for substitutions:\n\t\t\t//\t|\tlang.replace(\"Hello, {name.first} {name.last} AKA {nick}!\",\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tnick: \"Bob\",\n\t\t\t//\t|\t\t\tname: {\n\t\t\t//\t|\t\t\t\tfirst:\t\"Robert\",\n\t\t\t//\t|\t\t\t\tmiddle: \"X\",\n\t\t\t//\t|\t\t\t\tlast:\t\t\"Cringely\"\n\t\t\t//\t|\t\t\t}\n\t\t\t//\t|\t\t});\n\t\t\t//\t|\t// returns: Hello, Robert Cringely AKA Bob!\n\t\t\t// example:\n\t\t\t//\t|\t// uses an array for substitutions:\n\t\t\t//\t|\tlang.replace(\"Hello, {0} {2}!\",\n\t\t\t//\t|\t\t[\"Robert\", \"X\", \"Cringely\"]);\n\t\t\t//\t|\t// returns: Hello, Robert Cringely!\n\t\t\t// example:\n\t\t\t//\t|\t// uses a function for substitutions:\n\t\t\t//\t|\tfunction sum(a){\n\t\t\t//\t|\t\tvar t = 0;\n\t\t\t//\t|\t\tarrayforEach(a, function(x){ t += x; });\n\t\t\t//\t|\t\treturn t;\n\t\t\t//\t|\t}\n\t\t\t//\t|\tlang.replace(\n\t\t\t//\t|\t\t\"{count} payments averaging {avg} USD per payment.\",\n\t\t\t//\t|\t\tlang.hitch(\n\t\t\t//\t|\t\t\t{ payments: [11, 16, 12] },\n\t\t\t//\t|\t\t\tfunction(_, key){\n\t\t\t//\t|\t\t\t\tswitch(key){\n\t\t\t//\t|\t\t\t\t\tcase \"count\": return this.payments.length;\n\t\t\t//\t|\t\t\t\t\tcase \"min\":\t\treturn Math.min.apply(Math, this.payments);\n\t\t\t//\t|\t\t\t\t\tcase \"max\":\t\treturn Math.max.apply(Math, this.payments);\n\t\t\t//\t|\t\t\t\t\tcase \"sum\":\t\treturn sum(this.payments);\n\t\t\t//\t|\t\t\t\t\tcase \"avg\":\t\treturn sum(this.payments) / this.payments.length;\n\t\t\t//\t|\t\t\t\t}\n\t\t\t//\t|\t\t\t}\n\t\t\t//\t|\t\t)\n\t\t\t//\t|\t);\n\t\t\t//\t|\t// prints: 3 payments averaging 13 USD per payment.\n\t\t\t// example:\n\t\t\t//\t|\t// uses an alternative PHP-like pattern for substitutions:\n\t\t\t//\t|\tlang.replace(\"Hello, ${0} ${2}!\",\n\t\t\t//\t|\t\t[\"Robert\", \"X\", \"Cringely\"], /\\$\\{([^\\}]+)\\}/g);\n\t\t\t//\t|\t// returns: Hello, Robert Cringely!\n\n\t\t\treturn tmpl.replace(pattern || _pattern, lang.isFunction(map) ?\n\t\t\t\tmap : function(_, k){ return lang.getObject(k, false, map); });\n\t\t}\n\t};\n\n\thas(\"extend-dojo\") && lang.mixin(dojo, lang);\n\n\treturn lang;\n});\n","define([\"./kernel\", \"../has\", \"./lang\"], function(dojo, has, lang){\n\t// module:\n\t//\t\tdojo/_base/array\n\n\t// our old simple function builder stuff\n\tvar cache = {}, u;\n\n\tfunction buildFn(fn){\n\t\treturn cache[fn] = new Function(\"item\", \"index\", \"array\", fn); // Function\n\t}\n\t// magic snippet: if(typeof fn == \"string\") fn = cache[fn] || buildFn(fn);\n\n\t// every & some\n\n\tfunction everyOrSome(some){\n\t\tvar every = !some;\n\t\treturn function(a, fn, o){\n\t\t\tvar i = 0, l = a && a.length || 0, result;\n\t\t\tif(l && typeof a == \"string\") a = a.split(\"\");\n\t\t\tif(typeof fn == \"string\") fn = cache[fn] || buildFn(fn);\n\t\t\tif(o){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tresult = !fn.call(o, a[i], i, a);\n\t\t\t\t\tif(some ^ result){\n\t\t\t\t\t\treturn !result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tresult = !fn(a[i], i, a);\n\t\t\t\t\tif(some ^ result){\n\t\t\t\t\t\treturn !result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn every; // Boolean\n\t\t};\n\t}\n\n\t// indexOf, lastIndexOf\n\n\tfunction index(up){\n\t\tvar delta = 1, lOver = 0, uOver = 0;\n\t\tif(!up){\n\t\t\tdelta = lOver = uOver = -1;\n\t\t}\n\t\treturn function(a, x, from, last){\n\t\t\tif(last && delta > 0){\n\t\t\t\t// TODO: why do we use a non-standard signature? why do we need \"last\"?\n\t\t\t\treturn array.lastIndexOf(a, x, from);\n\t\t\t}\n\t\t\tvar l = a && a.length || 0, end = up ? l + uOver : lOver, i;\n\t\t\tif(from === u){\n\t\t\t\ti = up ? lOver : l + uOver;\n\t\t\t}else{\n\t\t\t\tif(from < 0){\n\t\t\t\t\ti = l + from;\n\t\t\t\t\tif(i < 0){\n\t\t\t\t\t\ti = lOver;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\ti = from >= l ? l + uOver : from;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(l && typeof a == \"string\") a = a.split(\"\");\n\t\t\tfor(; i != end; i += delta){\n\t\t\t\tif(a[i] == x){\n\t\t\t\t\treturn i; // Number\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1; // Number\n\t\t};\n\t}\n\n\tvar array = {\n\t\t// summary:\n\t\t//\t\tThe Javascript v1.6 array extensions.\n\n\t\tevery: everyOrSome(false),\n\t\t/*=====\n\t\t every: function(arr, callback, thisObject){\n\t\t\t // summary:\n\t\t\t //\t\tDetermines whether or not every item in arr satisfies the\n\t\t\t //\t\tcondition implemented by callback.\n\t\t\t // arr: Array|String\n\t\t\t //\t\tthe array to iterate on. If a string, operates on individual characters.\n\t\t\t // callback: Function|String\n\t\t\t //\t\ta function is invoked with three arguments: item, index,\n\t\t\t //\t\tand array and returns true if the condition is met.\n\t\t\t // thisObject: Object?\n\t\t\t //\t\tmay be used to scope the call to callback\n\t\t\t // returns: Boolean\n\t\t\t // description:\n\t\t\t //\t\tThis function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when\n\t\t\t //\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t //\t\tthe callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array.\n\t\t\t //\t\tFor more details, see:\n\t\t\t //\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/every\n\t\t\t // example:\n\t\t\t //\t|\t// returns false\n\t\t\t //\t|\tarray.every([1, 2, 3, 4], function(item){ return item>1; });\n\t\t\t // example:\n\t\t\t //\t|\t// returns true\n\t\t\t //\t|\tarray.every([1, 2, 3, 4], function(item){ return item>0; });\n\t\t },\n\t\t =====*/\n\n\t\tsome: everyOrSome(true),\n\t\t/*=====\n\t\tsome: function(arr, callback, thisObject){\n\t\t\t// summary:\n\t\t\t//\t\tDetermines whether or not any item in arr satisfies the\n\t\t\t//\t\tcondition implemented by callback.\n\t\t\t// arr: Array|String\n\t\t\t//\t\tthe array to iterate over. If a string, operates on individual characters.\n\t\t\t// callback: Function|String\n\t\t\t//\t\ta function is invoked with three arguments: item, index,\n\t\t\t//\t\tand array and returns true if the condition is met.\n\t\t\t// thisObject: Object?\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// returns: Boolean\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some\n\t\t\t// example:\n\t\t\t//\t| // is true\n\t\t\t//\t| array.some([1, 2, 3, 4], function(item){ return item>1; });\n\t\t\t// example:\n\t\t\t//\t| // is false\n\t\t\t//\t| array.some([1, 2, 3, 4], function(item){ return item<1; });\n\t\t},\n\t\t=====*/\n\n\t\tindexOf: index(true),\n\t\t/*=====\n\t\tindexOf: function(arr, value, fromIndex, findLast){\n\t\t\t// summary:\n\t\t\t//\t\tlocates the first index of the provided value in the\n\t\t\t//\t\tpassed array. If the value is not found, -1 is returned.\n\t\t\t// description:\n\t\t\t//\t\tThis method corresponds to the JavaScript 1.6 Array.indexOf method, with two differences:\n\t\t\t//\n\t\t\t//\t\t1. when run over sparse arrays, the Dojo function invokes the callback for every index\n\t\t\t//\t\t whereas JavaScript 1.6's indexOf skips the holes in the sparse array.\n\t\t\t//\t\t2. uses equality (==) rather than strict equality (===)\n\t\t\t//\n\t\t\t//\t\tFor details on this method, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf\n\t\t\t// arr: Array\n\t\t\t// value: Object\n\t\t\t// fromIndex: Integer?\n\t\t\t// findLast: Boolean?\n\t\t\t//\t\tMakes indexOf() work like lastIndexOf(). Used internally; not meant for external usage.\n\t\t\t// returns: Number\n\t\t},\n\t\t=====*/\n\n\t\tlastIndexOf: index(false),\n\t\t/*=====\n\t\tlastIndexOf: function(arr, value, fromIndex){\n\t\t\t// summary:\n\t\t\t//\t\tlocates the last index of the provided value in the passed\n\t\t\t//\t\tarray. If the value is not found, -1 is returned.\n\t\t\t// description:\n\t\t \t//\t\tThis method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with two differences:\n\t\t \t//\n\t\t \t//\t\t1. when run over sparse arrays, the Dojo function invokes the callback for every index\n\t\t \t//\t\t whereas JavaScript 1.6's lasIndexOf skips the holes in the sparse array.\n\t\t \t//\t\t2. uses equality (==) rather than strict equality (===)\n\t\t \t//\n\t\t \t//\t\tFor details on this method, see:\n\t\t \t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf\n\t\t\t// arr: Array,\n\t\t\t// value: Object,\n\t\t\t// fromIndex: Integer?\n\t\t\t// returns: Number\n\t\t},\n\t\t=====*/\n\n\t\tforEach: function(arr, callback, thisObject){\n\t\t\t// summary:\n\t\t\t//\t\tfor every item in arr, callback is invoked. Return values are ignored.\n\t\t\t//\t\tIf you want to break out of the loop, consider using array.every() or array.some().\n\t\t\t//\t\tforEach does not allow breaking out of the loop over the items in arr.\n\t\t\t// arr:\n\t\t\t//\t\tthe array to iterate over. If a string, operates on individual characters.\n\t\t\t// callback:\n\t\t\t//\t\ta function is invoked with three arguments: item, index, and array\n\t\t\t// thisObject:\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach\n\t\t\t// example:\n\t\t\t//\t| // log out all members of the array:\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tfunction(item){\n\t\t\t//\t|\t\t\tconsole.log(item);\n\t\t\t//\t|\t\t}\n\t\t\t//\t| );\n\t\t\t// example:\n\t\t\t//\t| // log out the members and their indexes\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tfunction(item, idx, arr){\n\t\t\t//\t|\t\t\tconsole.log(item, \"at index:\", idx);\n\t\t\t//\t|\t\t}\n\t\t\t//\t| );\n\t\t\t// example:\n\t\t\t//\t| // use a scoped object member as the callback\n\t\t\t//\t|\n\t\t\t//\t| var obj = {\n\t\t\t//\t|\t\tprefix: \"logged via obj.callback:\",\n\t\t\t//\t|\t\tcallback: function(item){\n\t\t\t//\t|\t\t\tconsole.log(this.prefix, item);\n\t\t\t//\t|\t\t}\n\t\t\t//\t| };\n\t\t\t//\t|\n\t\t\t//\t| // specifying the scope function executes the callback in that scope\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tobj.callback,\n\t\t\t//\t|\t\tobj\n\t\t\t//\t| );\n\t\t\t//\t|\n\t\t\t//\t| // alternately, we can accomplish the same thing with lang.hitch()\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tlang.hitch(obj, \"callback\")\n\t\t\t//\t| );\n\t\t\t// arr: Array|String\n\t\t\t// callback: Function|String\n\t\t\t// thisObject: Object?\n\n\t\t\tvar i = 0, l = arr && arr.length || 0;\n\t\t\tif(l && typeof arr == \"string\") arr = arr.split(\"\");\n\t\t\tif(typeof callback == \"string\") callback = cache[callback] || buildFn(callback);\n\t\t\tif(thisObject){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tcallback.call(thisObject, arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tcallback(arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tmap: function(arr, callback, thisObject, Ctr){\n\t\t\t// summary:\n\t\t\t//\t\tapplies callback to each element of arr and returns\n\t\t\t//\t\tan Array with the results\n\t\t\t// arr: Array|String\n\t\t\t//\t\tthe array to iterate on. If a string, operates on\n\t\t\t//\t\tindividual characters.\n\t\t\t// callback: Function|String\n\t\t\t//\t\ta function is invoked with three arguments, (item, index,\n\t\t\t//\t\tarray),\t and returns a value\n\t\t\t// thisObject: Object?\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// returns: Array\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map\n\t\t\t// example:\n\t\t\t//\t| // returns [2, 3, 4, 5]\n\t\t\t//\t| array.map([1, 2, 3, 4], function(item){ return item+1 });\n\n\t\t\t// TODO: why do we have a non-standard signature here? do we need \"Ctr\"?\n\t\t\tvar i = 0, l = arr && arr.length || 0, out = new (Ctr || Array)(l);\n\t\t\tif(l && typeof arr == \"string\") arr = arr.split(\"\");\n\t\t\tif(typeof callback == \"string\") callback = cache[callback] || buildFn(callback);\n\t\t\tif(thisObject){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tout[i] = callback.call(thisObject, arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tout[i] = callback(arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out; // Array\n\t\t},\n\n\t\tfilter: function(arr, callback, thisObject){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a new Array with those items from arr that match the\n\t\t\t//\t\tcondition implemented by callback.\n\t\t\t// arr: Array\n\t\t\t//\t\tthe array to iterate over.\n\t\t\t// callback: Function|String\n\t\t\t//\t\ta function that is invoked with three arguments (item,\n\t\t\t//\t\tindex, array). The return of this function is expected to\n\t\t\t//\t\tbe a boolean which determines whether the passed-in item\n\t\t\t//\t\twill be included in the returned array.\n\t\t\t// thisObject: Object?\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// returns: Array\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter\n\t\t\t// example:\n\t\t\t//\t| // returns [2, 3, 4]\n\t\t\t//\t| array.filter([1, 2, 3, 4], function(item){ return item>1; });\n\n\t\t\t// TODO: do we need \"Ctr\" here like in map()?\n\t\t\tvar i = 0, l = arr && arr.length || 0, out = [], value;\n\t\t\tif(l && typeof arr == \"string\") arr = arr.split(\"\");\n\t\t\tif(typeof callback == \"string\") callback = cache[callback] || buildFn(callback);\n\t\t\tif(thisObject){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tvalue = arr[i];\n\t\t\t\t\tif(callback.call(thisObject, value, i, arr)){\n\t\t\t\t\t\tout.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tvalue = arr[i];\n\t\t\t\t\tif(callback(value, i, arr)){\n\t\t\t\t\t\tout.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out; // Array\n\t\t},\n\n\t\tclearCache: function(){\n\t\t\tcache = {};\n\t\t}\n\t};\n\n\n\thas(\"extend-dojo\") && lang.mixin(dojo, array);\n\n\treturn array;\n});\n","define([\"../global\", \"../has\", \"./config\", \"require\", \"module\"], function(global, has, config, require, module){\n\t// module:\n\t//\t\tdojo/_base/kernel\n\n\t// This module is the foundational module of the dojo boot sequence; it defines the dojo object.\n\n\tvar\n\t\t// loop variables for this module\n\t\ti, p,\n\n\t\t// create dojo, dijit, and dojox\n\t\t// FIXME: in 2.0 remove dijit, dojox being created by dojo\n\t\tdijit = {},\n\t\tdojox = {},\n\t\tdojo = {\n\t\t\t// summary:\n\t\t\t//\t\tThis module is the foundational module of the dojo boot sequence; it defines the dojo object.\n\n\t\t\t// notice dojo takes ownership of the value of the config module\n\t\t\tconfig:config,\n\t\t\tglobal:global,\n\t\t\tdijit:dijit,\n\t\t\tdojox:dojox\n\t\t};\n\n\n\t// Configure the scope map. For a 100% AMD application, the scope map is not needed other than to provide\n\t// a _scopeName property for the dojo, dijit, and dojox root object so those packages can create\n\t// unique names in the global space.\n\t//\n\t// Built, legacy modules use the scope map to allow those modules to be expressed as if dojo, dijit, and dojox,\n\t// where global when in fact they are either global under different names or not global at all. In v1.6-, the\n\t// config variable \"scopeMap\" was used to map names as used within a module to global names. This has been\n\t// subsumed by the AMD map configuration variable which can relocate packages to different names. For backcompat,\n\t// only the \"*\" mapping is supported. See http://livedocs.dojotoolkit.org/developer/design/loader#legacy-cross-domain-mode for details.\n\t//\n\t// The following computations contort the packageMap for this dojo instance into a scopeMap.\n\tvar scopeMap =\n\t\t\t// a map from a name used in a legacy module to the (global variable name, object addressed by that name)\n\t\t\t// always map dojo, dijit, and dojox\n\t\t\t{\n\t\t\t\tdojo:[\"dojo\", dojo],\n\t\t\t\tdijit:[\"dijit\", dijit],\n\t\t\t\tdojox:[\"dojox\", dojox]\n\t\t\t},\n\n\t\tpackageMap =\n\t\t\t// the package map for this dojo instance; note, a foreign loader or no pacakgeMap results in the above default config\n\t\t\t(require.map && require.map[module.id.match(/[^\\/]+/)[0]]),\n\n\t\titem;\n\n\n\t// process all mapped top-level names for this instance of dojo\n\tfor(p in packageMap){\n\t\tif(scopeMap[p]){\n\t\t\t// mapped dojo, dijit, or dojox\n\t\t\tscopeMap[p][0] = packageMap[p];\n\t\t}else{\n\t\t\t// some other top-level name\n\t\t\tscopeMap[p] = [packageMap[p], {}];\n\t\t}\n\t}\n\n\t// publish those names to _scopeName and, optionally, the global namespace\n\tfor(p in scopeMap){\n\t\titem = scopeMap[p];\n\t\titem[1]._scopeName = item[0];\n\t\tif(!config.noGlobals){\n\t\t\tglobal[item[0]] = item[1];\n\t\t}\n\t}\n\tdojo.scopeMap = scopeMap;\n\n\t/*===== dojo.__docParserConfigureScopeMap(scopeMap); =====*/\n\n\t// FIXME: dojo.baseUrl and dojo.config.baseUrl should be deprecated\n\tdojo.baseUrl = dojo.config.baseUrl = require.baseUrl;\n\tdojo.isAsync = !has(\"dojo-loader\") || require.async;\n\tdojo.locale = config.locale;\n\n\tvar rev = \"$Rev:$\".match(/[0-9a-f]{7,}/);\n\tdojo.version = {\n\t\t// summary:\n\t\t//\t\tVersion number of the Dojo Toolkit\n\t\t// description:\n\t\t//\t\tHash about the version, including\n\t\t//\n\t\t//\t\t- major: Integer: Major version. If total version is \"1.2.0beta1\", will be 1\n\t\t//\t\t- minor: Integer: Minor version. If total version is \"1.2.0beta1\", will be 2\n\t\t//\t\t- patch: Integer: Patch version. If total version is \"1.2.0beta1\", will be 0\n\t\t//\t\t- flag: String: Descriptor flag. If total version is \"1.2.0beta1\", will be \"beta1\"\n\t\t//\t\t- revision: Number: The Git rev from which dojo was pulled\n\n\t\tmajor: 1, minor: 16, patch: 4, flag: \"\",\n\t\trevision: rev ? rev[0] : NaN,\n\t\ttoString: function(){\n\t\t\tvar v = dojo.version;\n\t\t\treturn v.major + \".\" + v.minor + \".\" + v.patch + v.flag + \" (\" + v.revision + \")\";\t// String\n\t\t}\n\t};\n\n\t// If has(\"extend-dojo\") is truthy, then as a dojo module is defined it should push it's definitions\n\t// into the dojo object, and conversely. In 2.0, it will likely be unusual to augment another object\n\t// as a result of defining a module. This has feature gives a way to force 2.0 behavior as the code\n\t// is migrated. Absent specific advice otherwise, set extend-dojo to truthy.\n\thas.add(\"extend-dojo\", 1);\n\n\tif(!has(\"csp-restrictions\")){\n\t\t(Function(\"d\", \"d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}\"))(dojo);\n\t}\n\t/*=====\n\tdojo.eval = function(scriptText){\n\t\t// summary:\n\t\t//\t\tA legacy method created for use exclusively by internal Dojo methods. Do not use this method\n\t\t//\t\tdirectly unless you understand its possibly-different implications on the platforms your are targeting.\n\t\t// description:\n\t\t//\t\tMakes an attempt to evaluate scriptText in the global scope. The function works correctly for browsers\n\t\t//\t\tthat support indirect eval.\n\t\t//\n\t\t//\t\tAs usual, IE does not. On IE, the only way to implement global eval is to\n\t\t//\t\tuse execScript. Unfortunately, execScript does not return a value and breaks some current usages of dojo.eval.\n\t\t//\t\tThis implementation uses the technique of executing eval in the scope of a function that is a single scope\n\t\t//\t\tframe below the global scope; thereby coming close to the global scope. Note carefully that\n\t\t//\n\t\t//\t\tdojo.eval(\"var pi = 3.14;\");\n\t\t//\n\t\t//\t\twill define global pi in non-IE environments, but define pi only in a temporary local scope for IE. If you want\n\t\t//\t\tto define a global variable using dojo.eval, write something like\n\t\t//\n\t\t//\t\tdojo.eval(\"window.pi = 3.14;\")\n\t\t// scriptText:\n\t\t//\t\tThe text to evaluation.\n\t\t// returns:\n\t\t//\t\tThe result of the evaluation. Often `undefined`\n\t};\n\t=====*/\n\n\n\tif(has(\"host-rhino\")){\n\t\tdojo.exit = function(exitcode){\n\t\t\tquit(exitcode);\n\t\t};\n\t}else{\n\t\tdojo.exit = function(){\n\t\t};\n\t}\n\n\tif(!has(\"host-webworker\")){\n\t\t// console is immutable in FF30+, https://bugs.dojotoolkit.org/ticket/18100\n\t\thas.add(\"dojo-guarantee-console\",\n\t\t\t// ensure that console.log, console.warn, etc. are defined\n\t\t\t1\n\t\t);\n\t}\n\n\tif(has(\"dojo-guarantee-console\")){\n\t\t// IE 9 bug: https://bugs.dojotoolkit.org/ticket/18197\n\t\thas.add(\"console-as-object\", function () {\n\t\t\treturn Function.prototype.bind && console && typeof console.log === \"object\";\n\t\t});\n\n\t\ttypeof console != \"undefined\" || (console = {}); // intentional assignment\n\t\t//\tBe careful to leave 'log' always at the end\n\t\tvar cn = [\n\t\t\t\"assert\", \"count\", \"debug\", \"dir\", \"dirxml\", \"error\", \"group\",\n\t\t\t\"groupEnd\", \"info\", \"profile\", \"profileEnd\", \"time\", \"timeEnd\",\n\t\t\t\"trace\", \"warn\", \"log\"\n\t\t];\n\t\tvar tn;\n\t\ti = 0;\n\t\twhile((tn = cn[i++])){\n\t\t\tif(!console[tn]){\n\t\t\t\t(function(){\n\t\t\t\t\tvar tcn = tn + \"\";\n\t\t\t\t\tconsole[tcn] = ('log' in console) ? function(){\n\t\t\t\t\t\tvar a = Array.prototype.slice.call(arguments);\n\t\t\t\t\t\ta.unshift(tcn + \":\");\n\t\t\t\t\t\tconsole[\"log\"](a.join(\" \"));\n\t\t\t\t\t} : function(){};\n\t\t\t\t\tconsole[tcn]._fake = true;\n\t\t\t\t})();\n\t\t\t}else if(has(\"console-as-object\")){\n\t\t\t\tconsole[tn] = Function.prototype.bind.call(console[tn], console);\n\t\t\t}\n\t\t}\n\t}\n\n\thas.add(\"dojo-debug-messages\",\n\t\t// include dojo.deprecated/dojo.experimental implementations\n\t\t!!config.isDebug\n\t);\n\tdojo.deprecated = dojo.experimental = function(){};\n\tif(has(\"dojo-debug-messages\")){\n\t\tdojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){\n\t\t\t// summary:\n\t\t\t//\t\tLog a debug message to indicate that a behavior has been\n\t\t\t//\t\tdeprecated.\n\t\t\t// behaviour: String\n\t\t\t//\t\tThe API or behavior being deprecated. Usually in the form\n\t\t\t//\t\tof \"myApp.someFunction()\".\n\t\t\t// extra: String?\n\t\t\t//\t\tText to append to the message. Often provides advice on a\n\t\t\t//\t\tnew function or facility to achieve the same goal during\n\t\t\t//\t\tthe deprecation period.\n\t\t\t// removal: String?\n\t\t\t//\t\tText to indicate when in the future the behavior will be\n\t\t\t//\t\tremoved. Usually a version number.\n\t\t\t// example:\n\t\t\t//\t| dojo.deprecated(\"myApp.getTemp()\", \"use myApp.getLocaleTemp() instead\", \"1.0\");\n\n\t\t\tvar message = \"DEPRECATED: \" + behaviour;\n\t\t\tif(extra){ message += \" \" + extra; }\n\t\t\tif(removal){ message += \" -- will be removed in version: \" + removal; }\n\t\t\tconsole.warn(message);\n\t\t};\n\n\t\tdojo.experimental = function(/* String */ moduleName, /* String? */ extra){\n\t\t\t// summary:\n\t\t\t//\t\tMarks code as experimental.\n\t\t\t// description:\n\t\t\t//\t\tThis can be used to mark a function, file, or module as\n\t\t\t//\t\texperimental.\t Experimental code is not ready to be used, and the\n\t\t\t//\t\tAPIs are subject to change without notice.\tExperimental code may be\n\t\t\t//\t\tcompleted deleted without going through the normal deprecation\n\t\t\t//\t\tprocess.\n\t\t\t// moduleName: String\n\t\t\t//\t\tThe name of a module, or the name of a module file or a specific\n\t\t\t//\t\tfunction\n\t\t\t// extra: String?\n\t\t\t//\t\tsome additional message for the user\n\t\t\t// example:\n\t\t\t//\t| dojo.experimental(\"dojo.data.Result\");\n\t\t\t// example:\n\t\t\t//\t| dojo.experimental(\"dojo.weather.toKelvin()\", \"PENDING approval from NOAA\");\n\n\t\t\tvar message = \"EXPERIMENTAL: \" + moduleName + \" -- APIs subject to change without notice.\";\n\t\t\tif(extra){ message += \" \" + extra; }\n\t\t\tconsole.warn(message);\n\t\t};\n\t}\n\n\thas.add(\"dojo-modulePaths\",\n\t\t// consume dojo.modulePaths processing\n\t\t1\n\t);\n\tif(has(\"dojo-modulePaths\")){\n\t\t// notice that modulePaths won't be applied to any require's before the dojo/_base/kernel factory is run;\n\t\t// this is the v1.6- behavior.\n\t\tif(config.modulePaths){\n\t\t\tdojo.deprecated(\"dojo.modulePaths\", \"use paths configuration\");\n\t\t\tvar paths = {};\n\t\t\tfor(p in config.modulePaths){\n\t\t\t\tpaths[p.replace(/\\./g, \"/\")] = config.modulePaths[p];\n\t\t\t}\n\t\t\trequire({paths:paths});\n\t\t}\n\t}\n\n\thas.add(\"dojo-moduleUrl\",\n\t\t// include dojo.moduleUrl\n\t\t1\n\t);\n\tif(has(\"dojo-moduleUrl\")){\n\t\tdojo.moduleUrl = function(/*String*/module, /*String?*/url){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a URL relative to a module.\n\t\t\t// example:\n\t\t\t//\t|\tvar pngPath = dojo.moduleUrl(\"acme\",\"images/small.png\");\n\t\t\t//\t|\tconsole.dir(pngPath); // list the object properties\n\t\t\t//\t|\t// create an image and set it's source to pngPath's value:\n\t\t\t//\t|\tvar img = document.createElement(\"img\");\n\t\t\t//\t|\timg.src = pngPath;\n\t\t\t//\t|\t// add our image to the document\n\t\t\t//\t|\tdojo.body().appendChild(img);\n\t\t\t// example:\n\t\t\t//\t\tyou may de-reference as far as you like down the package\n\t\t\t//\t\thierarchy. This is sometimes handy to avoid lengthy relative\n\t\t\t//\t\turls or for building portable sub-packages. In this example,\n\t\t\t//\t\tthe `acme.widget` and `acme.util` directories may be located\n\t\t\t//\t\tunder different roots (see `dojo.registerModulePath`) but the\n\t\t\t//\t\tthe modules which reference them can be unaware of their\n\t\t\t//\t\trelative locations on the filesystem:\n\t\t\t//\t|\t// somewhere in a configuration block\n\t\t\t//\t|\tdojo.registerModulePath(\"acme.widget\", \"../../acme/widget\");\n\t\t\t//\t|\tdojo.registerModulePath(\"acme.util\", \"../../util\");\n\t\t\t//\t|\n\t\t\t//\t|\t// ...\n\t\t\t//\t|\n\t\t\t//\t|\t// code in a module using acme resources\n\t\t\t//\t|\tvar tmpltPath = dojo.moduleUrl(\"acme.widget\",\"templates/template.html\");\n\t\t\t//\t|\tvar dataPath = dojo.moduleUrl(\"acme.util\",\"resources/data.json\");\n\n\t\t\tdojo.deprecated(\"dojo.moduleUrl()\", \"use require.toUrl\", \"2.0\");\n\n\t\t\t// require.toUrl requires a filetype; therefore, just append the suffix \"/*.*\" to guarantee a filetype, then\n\t\t\t// remove the suffix from the result. This way clients can request a url w/out a filetype. This should be\n\t\t\t// rare, but it maintains backcompat for the v1.x line (note: dojo.moduleUrl will be removed in v2.0).\n\t\t\t// Notice * is an illegal filename so it won't conflict with any real path map that may exist the paths config.\n\t\t\tvar result = null;\n\t\t\tif(module){\n\t\t\t\tresult = require.toUrl(module.replace(/\\./g, \"/\") + (url ? (\"/\" + url) : \"\") + \"/*.*\").replace(/\\/\\*\\.\\*/, \"\") + (url ? \"\" : \"/\");\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tdojo._hasResource = {}; // for backward compatibility with layers built with 1.6 tooling\n\n\treturn dojo;\n});\n","define([\"./has!dom-addeventlistener?:./aspect\", \"./_base/kernel\", \"./sniff\"], function(aspect, dojo, has){\n\n\t\"use strict\";\n\tif(has(\"dom\")){ // check to make sure we are in a browser, this module should work anywhere\n\t\tvar major = window.ScriptEngineMajorVersion;\n\t\thas.add(\"jscript\", major && (major() + ScriptEngineMinorVersion() / 10));\n\t\thas.add(\"event-orientationchange\", has(\"touch\") && !has(\"android\")); // TODO: how do we detect this?\n\t\thas.add(\"event-stopimmediatepropagation\", window.Event && !!window.Event.prototype && !!window.Event.prototype.stopImmediatePropagation);\n\t\thas.add(\"event-focusin\", function(global, doc, element){\n\t\t\treturn 'onfocusin' in element;\n\t\t});\n\n\t\tif(has(\"touch\")){\n\t\t\thas.add(\"touch-can-modify-event-delegate\", function(){\n\t\t\t\t// This feature test checks whether deleting a property of an event delegate works\n\t\t\t\t// for a touch-enabled device. If it works, event delegation can be used as fallback\n\t\t\t\t// for browsers such as Safari in older iOS where deleting properties of the original\n\t\t\t\t// event does not work.\n\t\t\t\tvar EventDelegate = function(){};\n\t\t\t\tEventDelegate.prototype =\n\t\t\t\t\tdocument.createEvent(\"MouseEvents\"); // original event\n\t\t\t\t// Attempt to modify a property of an event delegate and check if\n\t\t\t\t// it succeeds. Depending on browsers and on whether dojo/on's\n\t\t\t\t// strict mode is stripped in a Dojo build, there are 3 known behaviors:\n\t\t\t\t// it may either succeed, or raise an error, or fail to set the property\n\t\t\t\t// without raising an error.\n\t\t\t\ttry{\n\t\t\t\t\tvar eventDelegate = new EventDelegate;\n\t\t\t\t\teventDelegate.target = null;\n\t\t\t\t\treturn eventDelegate.target === null;\n\t\t\t\t}catch(e){\n\t\t\t\t\treturn false; // cannot use event delegation\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\tvar on = function(target, type, listener, dontFix){\n\t\t// summary:\n\t\t//\t\tA function that provides core event listening functionality. With this function\n\t\t//\t\tyou can provide a target, event type, and listener to be notified of\n\t\t//\t\tfuture matching events that are fired.\n\t\t// target: Element|Object\n\t\t//\t\tThis is the target object or DOM element that to receive events from\n\t\t// type: String|Function\n\t\t//\t\tThis is the name of the event to listen for or an extension event type.\n\t\t// listener: Function\n\t\t//\t\tThis is the function that should be called when the event fires.\n\t\t// returns: Object\n\t\t//\t\tAn object with a remove() method that can be used to stop listening for this\n\t\t//\t\tevent.\n\t\t// description:\n\t\t//\t\tTo listen for \"click\" events on a button node, we can do:\n\t\t//\t\t|\tdefine([\"dojo/on\"], function(on){\n\t\t//\t\t|\t\ton(button, \"click\", clickHandler);\n\t\t//\t\t|\t\t...\n\t\t//\t\tEvented JavaScript objects can also have their own events.\n\t\t//\t\t|\tvar obj = new Evented;\n\t\t//\t\t|\ton(obj, \"foo\", fooHandler);\n\t\t//\t\tAnd then we could publish a \"foo\" event:\n\t\t//\t\t|\ton.emit(obj, \"foo\", {key: \"value\"});\n\t\t//\t\tWe can use extension events as well. For example, you could listen for a tap gesture:\n\t\t//\t\t|\tdefine([\"dojo/on\", \"dojo/gesture/tap\", function(on, tap){\n\t\t//\t\t|\t\ton(button, tap, tapHandler);\n\t\t//\t\t|\t\t...\n\t\t//\t\twhich would trigger fooHandler. Note that for a simple object this is equivalent to calling:\n\t\t//\t\t|\tobj.onfoo({key:\"value\"});\n\t\t//\t\tIf you use on.emit on a DOM node, it will use native event dispatching when possible.\n\n\t\tif(typeof target.on == \"function\" && typeof type != \"function\" && !target.nodeType){\n\t\t\t// delegate to the target's on() method, so it can handle it's own listening if it wants (unless it\n\t\t\t// is DOM node and we may be dealing with jQuery or Prototype's incompatible addition to the\n\t\t\t// Element prototype\n\t\t\treturn target.on(type, listener);\n\t\t}\n\t\t// delegate to main listener code\n\t\treturn on.parse(target, type, listener, addListener, dontFix, this);\n\t};\n\ton.pausable = function(target, type, listener, dontFix){\n\t\t// summary:\n\t\t//\t\tThis function acts the same as on(), but with pausable functionality. The\n\t\t//\t\treturned signal object has pause() and resume() functions. Calling the\n\t\t//\t\tpause() method will cause the listener to not be called for future events. Calling the\n\t\t//\t\tresume() method will cause the listener to again be called for future events.\n\t\tvar paused;\n\t\tvar signal = on(target, type, function(){\n\t\t\tif(!paused){\n\t\t\t\treturn listener.apply(this, arguments);\n\t\t\t}\n\t\t}, dontFix);\n\t\tsignal.pause = function(){\n\t\t\tpaused = true;\n\t\t};\n\t\tsignal.resume = function(){\n\t\t\tpaused = false;\n\t\t};\n\t\treturn signal;\n\t};\n\ton.once = function(target, type, listener, dontFix){\n\t\t// summary:\n\t\t//\t\tThis function acts the same as on(), but will only call the listener once. The\n\t\t//\t\tlistener will be called for the first\n\t\t//\t\tevent that takes place and then listener will automatically be removed.\n\t\tvar signal = on(target, type, function(){\n\t\t\t// remove this listener\n\t\t\tsignal.remove();\n\t\t\t// proceed to call the listener\n\t\t\treturn listener.apply(this, arguments);\n\t\t});\n\t\treturn signal;\n\t};\n\ton.parse = function(target, type, listener, addListener, dontFix, matchesTarget){\n\t\tvar events;\n\t\tif(type.call){\n\t\t\t// event handler function\n\t\t\t// on(node, touch.press, touchListener);\n\t\t\treturn type.call(matchesTarget, target, listener);\n\t\t}\n\n\t\tif(type instanceof Array){\n\t\t\t// allow an array of event names (or event handler functions)\n\t\t\tevents = type;\n\t\t}else if(type.indexOf(\",\") > -1){\n\t\t\t// we allow comma delimited event names, so you can register for multiple events at once\n\t\t\tevents = type.split(/\\s*,\\s*/);\n\t\t}\n\t\tif(events){\n\t\t\tvar handles = [];\n\t\t\tvar i = 0;\n\t\t\tvar eventName;\n\t\t\twhile(eventName = events[i++]){ // intentional assignment\n\t\t\t\thandles.push(on.parse(target, eventName, listener, addListener, dontFix, matchesTarget));\n\t\t\t}\n\t\t\thandles.remove = function(){\n\t\t\t\tfor(var i = 0; i < handles.length; i++){\n\t\t\t\t\thandles[i].remove();\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn handles;\n\t\t}\n\t\treturn addListener(target, type, listener, dontFix, matchesTarget);\n\t};\n\tvar touchEvents = /^touch/;\n\tfunction addListener(target, type, listener, dontFix, matchesTarget){\n\t\t// event delegation:\n\t\tvar selector = type.match(/(.*):(.*)/);\n\t\t// if we have a selector:event, the last one is interpreted as an event, and we use event delegation\n\t\tif(selector){\n\t\t\ttype = selector[2];\n\t\t\tselector = selector[1];\n\t\t\t// create the extension event for selectors and directly call it\n\t\t\treturn on.selector(selector, type).call(matchesTarget, target, listener);\n\t\t}\n\t\t// test to see if it a touch event right now, so we don't have to do it every time it fires\n\t\tif(has(\"touch\")){\n\t\t\tif(touchEvents.test(type)){\n\t\t\t\t// touch event, fix it\n\t\t\t\tlistener = fixTouchListener(listener);\n\t\t\t}\n\t\t\tif(!has(\"event-orientationchange\") && (type == \"orientationchange\")){\n\t\t\t\t//\"orientationchange\" not supported <= Android 2.1,\n\t\t\t\t//but works through \"resize\" on window\n\t\t\t\ttype = \"resize\";\n\t\t\t\ttarget = window;\n\t\t\t\tlistener = fixTouchListener(listener);\n\t\t\t}\n\t\t}\n\t\tif(addStopImmediate){\n\t\t\t// add stopImmediatePropagation if it doesn't exist\n\t\t\tlistener = addStopImmediate(listener);\n\t\t}\n\t\t// normal path, the target is |this|\n\t\tif(target.addEventListener){\n\t\t\t// the target has addEventListener, which should be used if available (might or might not be a node, non-nodes can implement this method as well)\n\t\t\t// check for capture conversions\n\t\t\tvar capture = type in captures,\n\t\t\t\tadjustedType = capture ? captures[type] : type;\n\t\t\ttarget.addEventListener(adjustedType, listener, capture);\n\t\t\t// create and return the signal\n\t\t\treturn {\n\t\t\t\tremove: function(){\n\t\t\t\t\ttarget.removeEventListener(adjustedType, listener, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\ttype = \"on\" + type;\n\t\tif(fixAttach && target.attachEvent){\n\t\t\treturn fixAttach(target, type, listener);\n\t\t}\n\t\tthrow new Error(\"Target must be an event emitter\");\n\t}\n\ton.matches = function(node, selector, context, children, matchesTarget) {\n\t\t// summary:\n\t\t//\t\tCheck if a node match the current selector within the constraint of a context\n\t\t// node: DOMNode\n\t\t//\t\tThe node that originate the event\n\t\t// selector: String\n\t\t//\t\tThe selector to check against\n\t\t// context: DOMNode\n\t\t//\t\tThe context to search in.\n\t\t// children: Boolean\n\t\t//\t\tIndicates if children elements of the selector should be allowed. This defaults to\n\t\t//\t\ttrue\n\t\t// matchesTarget: Object|dojo/query?\n\t\t//\t\tAn object with a property \"matches\" as a function. Default is dojo/query.\n\t\t//\t\tMatching DOMNodes will be done against this function\n\t\t//\t\tThe function must return a Boolean.\n\t\t//\t\tIt will have 3 arguments: \"node\", \"selector\" and \"context\"\n\t\t//\t\tTrue is expected if \"node\" is matching the current \"selector\" in the passed \"context\"\n\t\t// returns: DOMNode?\n\t\t//\t\tThe matching node, if any. Else you get false\n\n\t\t// see if we have a valid matchesTarget or default to dojo/query\n\t\tmatchesTarget = matchesTarget && (typeof matchesTarget.matches == \"function\") ? matchesTarget : dojo.query;\n\t\tchildren = children !== false;\n\t\t// there is a selector, so make sure it matches\n\t\tif(node.nodeType != 1){\n\t\t\t// text node will fail in native match selector\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\twhile(!matchesTarget.matches(node, selector, context)){\n\t\t\tif(node == context || children === false || !(node = node.parentNode) || node.nodeType != 1){ // intentional assignment\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t};\n\ton.selector = function(selector, eventType, children){\n\t\t// summary:\n\t\t//\t\tCreates a new extension event with event delegation. This is based on\n\t\t//\t\tthe provided event type (can be extension event) that\n\t\t//\t\tonly calls the listener when the CSS selector matches the target of the event.\n\t\t//\n\t\t//\t\tThe application must require() an appropriate level of dojo/query to handle the selector.\n\t\t// selector:\n\t\t//\t\tThe CSS selector to use for filter events and determine the |this| of the event listener.\n\t\t// eventType:\n\t\t//\t\tThe event to listen for\n\t\t// children:\n\t\t//\t\tIndicates if children elements of the selector should be allowed. This defaults to\n\t\t//\t\ttrue\n\t\t// example:\n\t\t// |\trequire([\"dojo/on\", \"dojo/mouse\", \"dojo/query!css2\"], function(on, mouse){\n\t\t// |\t\ton(node, on.selector(\".my-class\", mouse.enter), handlerForMyHover);\n\t\treturn function(target, listener){\n\t\t\t// if the selector is function, use it to select the node, otherwise use the matches method\n\t\t\tvar matchesTarget = typeof selector == \"function\" ? {matches: selector} : this,\n\t\t\t\tbubble = eventType.bubble;\n\t\t\tfunction select(eventTarget){\n\t\t\t\treturn on.matches(eventTarget, selector, target, children, matchesTarget);\n\t\t\t}\n\t\t\tif(bubble){\n\t\t\t\t// the event type doesn't naturally bubble, but has a bubbling form, use that, and give it the selector so it can perform the select itself\n\t\t\t\treturn on(target, bubble(select), listener);\n\t\t\t}\n\t\t\t// standard event delegation\n\t\t\treturn on(target, eventType, function(event){\n\t\t\t\t// call select to see if we match\n\t\t\t\tvar eventTarget = select(event.target);\n\t\t\t\t// if it matches we call the listener\n\t\t\t\tif (eventTarget) {\n\t\t\t\t\t// We save the matching target into the event, so it can be accessed even when hitching (see #18355)\n\t\t\t\t\tevent.selectorTarget = eventTarget;\n\t\t\t\t\treturn listener.call(eventTarget, event);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t};\n\n\tfunction syntheticPreventDefault(){\n\t\tthis.cancelable = false;\n\t\tthis.defaultPrevented = true;\n\t}\n\tfunction syntheticStopPropagation(){\n\t\tthis.bubbles = false;\n\t}\n\tvar slice = [].slice,\n\t\tsyntheticDispatch = on.emit = function(target, type, event){\n\t\t// summary:\n\t\t//\t\tFires an event on the target object.\n\t\t// target:\n\t\t//\t\tThe target object to fire the event on. This can be a DOM element or a plain\n\t\t//\t\tJS object. If the target is a DOM element, native event emitting mechanisms\n\t\t//\t\tare used when possible.\n\t\t// type:\n\t\t//\t\tThe event type name. You can emulate standard native events like \"click\" and\n\t\t//\t\t\"mouseover\" or create custom events like \"open\" or \"finish\".\n\t\t// event:\n\t\t//\t\tAn object that provides the properties for the event. See https://developer.mozilla.org/en/DOM/event.initEvent\n\t\t//\t\tfor some of the properties. These properties are copied to the event object.\n\t\t//\t\tOf particular importance are the cancelable and bubbles properties. The\n\t\t//\t\tcancelable property indicates whether or not the event has a default action\n\t\t//\t\tthat can be cancelled. The event is cancelled by calling preventDefault() on\n\t\t//\t\tthe event object. The bubbles property indicates whether or not the\n\t\t//\t\tevent will bubble up the DOM tree. If bubbles is true, the event will be called\n\t\t//\t\ton the target and then each parent successively until the top of the tree\n\t\t//\t\tis reached or stopPropagation() is called. Both bubbles and cancelable\n\t\t//\t\tdefault to false.\n\t\t// returns:\n\t\t//\t\tIf the event is cancelable and the event is not cancelled,\n\t\t//\t\temit will return true. If the event is cancelable and the event is cancelled,\n\t\t//\t\temit will return false.\n\t\t// details:\n\t\t//\t\tNote that this is designed to emit events for listeners registered through\n\t\t//\t\tdojo/on. It should actually work with any event listener except those\n\t\t//\t\tadded through IE's attachEvent (IE8 and below's non-W3C event emitting\n\t\t//\t\tdoesn't support custom event types). It should work with all events registered\n\t\t//\t\tthrough dojo/on. Also note that the emit method does do any default\n\t\t//\t\taction, it only returns a value to indicate if the default action should take\n\t\t//\t\tplace. For example, emitting a keypress event would not cause a character\n\t\t//\t\tto appear in a textbox.\n\t\t// example:\n\t\t//\t\tTo fire our own click event\n\t\t//\t|\trequire([\"dojo/on\", \"dojo/dom\"\n\t\t//\t|\t], function(on, dom){\n\t\t//\t|\t\ton.emit(dom.byId(\"button\"), \"click\", {\n\t\t//\t|\t\t\tcancelable: true,\n\t\t//\t|\t\t\tbubbles: true,\n\t\t//\t|\t\t\tscreenX: 33,\n\t\t//\t|\t\t\tscreenY: 44\n\t\t//\t|\t\t});\n\t\t//\t\tWe can also fire our own custom events:\n\t\t//\t|\t\ton.emit(dom.byId(\"slider\"), \"slide\", {\n\t\t//\t|\t\t\tcancelable: true,\n\t\t//\t|\t\t\tbubbles: true,\n\t\t//\t|\t\t\tdirection: \"left-to-right\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\tvar args = slice.call(arguments, 2);\n\t\tvar method = \"on\" + type;\n\t\tif(\"parentNode\" in target){\n\t\t\t// node (or node-like), create event controller methods\n\t\t\tvar newEvent = args[0] = {};\n\t\t\tfor(var i in event){\n\t\t\t\tnewEvent[i] = event[i];\n\t\t\t}\n\t\t\tnewEvent.preventDefault = syntheticPreventDefault;\n\t\t\tnewEvent.stopPropagation = syntheticStopPropagation;\n\t\t\tnewEvent.target = target;\n\t\t\tnewEvent.type = type;\n\t\t\tevent = newEvent;\n\t\t}\n\t\tdo{\n\t\t\t// call any node which has a handler (note that ideally we would try/catch to simulate normal event propagation but that causes too much pain for debugging)\n\t\t\ttarget[method] && target[method].apply(target, args);\n\t\t\t// and then continue up the parent node chain if it is still bubbling (if started as bubbles and stopPropagation hasn't been called)\n\t\t}while(event && event.bubbles && (target = target.parentNode));\n\t\treturn event && event.cancelable && event; // if it is still true (was cancelable and was cancelled), return the event to indicate default action should happen\n\t};\n\tvar captures = has(\"event-focusin\") ? {} : {focusin: \"focus\", focusout: \"blur\"};\n\tif(!has(\"event-stopimmediatepropagation\")){\n\t\tvar stopImmediatePropagation =function(){\n\t\t\tthis.immediatelyStopped = true;\n\t\t\tthis.modified = true; // mark it as modified so the event will be cached in IE\n\t\t};\n\t\tvar addStopImmediate = function(listener){\n\t\t\treturn function(event){\n\t\t\t\tif(!event.immediatelyStopped){// check to make sure it hasn't been stopped immediately\n\t\t\t\t\tevent.stopImmediatePropagation = stopImmediatePropagation;\n\t\t\t\t\treturn listener.apply(this, arguments);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t}\n\tif(has(\"dom-addeventlistener\")){\n\t\t// emitter that works with native event handling\n\t\ton.emit = function(target, type, event){\n\t\t\tif(target.dispatchEvent && document.createEvent){\n\t\t\t\t// use the native event emitting mechanism if it is available on the target object\n\t\t\t\t// create a generic event\n\t\t\t\t// we could create branch into the different types of event constructors, but\n\t\t\t\t// that would be a lot of extra code, with little benefit that I can see, seems\n\t\t\t\t// best to use the generic constructor and copy properties over, making it\n\t\t\t\t// easy to have events look like the ones created with specific initializers\n\t\t\t\tvar ownerDocument = target.ownerDocument || document;\n\t\t\t\tvar nativeEvent = ownerDocument.createEvent(\"HTMLEvents\");\n\t\t\t\tnativeEvent.initEvent(type, !!event.bubbles, !!event.cancelable);\n\t\t\t\t// and copy all our properties over\n\t\t\t\tfor(var i in event){\n\t\t\t\t\tif(!(i in nativeEvent)){\n\t\t\t\t\t\tnativeEvent[i] = event[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn target.dispatchEvent(nativeEvent) && nativeEvent;\n\t\t\t}\n\t\t\treturn syntheticDispatch.apply(on, arguments); // emit for a non-node\n\t\t};\n\t}else{\n\t\t// no addEventListener, basically old IE event normalization\n\t\ton._fixEvent = function(evt, sender){\n\t\t\t// summary:\n\t\t\t//\t\tnormalizes properties on the event object including event\n\t\t\t//\t\tbubbling methods, keystroke normalization, and x/y positions\n\t\t\t// evt:\n\t\t\t//\t\tnative event object\n\t\t\t// sender:\n\t\t\t//\t\tnode to treat as \"currentTarget\"\n\t\t\tif(!evt){\n\t\t\t\tvar w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window;\n\t\t\t\tevt = w.event;\n\t\t\t}\n\t\t\tif(!evt){return evt;}\n\t\t\ttry{\n\t\t\t\tif(lastEvent && evt.type == lastEvent.type && evt.srcElement == lastEvent.target){\n\t\t\t\t\t// should be same event, reuse event object (so it can be augmented);\n\t\t\t\t\t// accessing evt.srcElement rather than evt.target since evt.target not set on IE until fixup below\n\t\t\t\t\tevt = lastEvent;\n\t\t\t\t}\n\t\t\t}catch(e){\n\t\t\t\t// will occur on IE on lastEvent.type reference if lastEvent points to a previous event that already\n\t\t\t\t// finished bubbling, but the setTimeout() to clear lastEvent hasn't fired yet\n\t\t\t}\n\t\t\tif(!evt.target){ // check to see if it has been fixed yet\n\t\t\t\tevt.target = evt.srcElement;\n\t\t\t\tevt.currentTarget = (sender || evt.srcElement);\n\t\t\t\tif(evt.type == \"mouseover\"){\n\t\t\t\t\tevt.relatedTarget = evt.fromElement;\n\t\t\t\t}\n\t\t\t\tif(evt.type == \"mouseout\"){\n\t\t\t\t\tevt.relatedTarget = evt.toElement;\n\t\t\t\t}\n\t\t\t\tif(!evt.stopPropagation){\n\t\t\t\t\tevt.stopPropagation = stopPropagation;\n\t\t\t\t\tevt.preventDefault = preventDefault;\n\t\t\t\t}\n\t\t\t\tswitch(evt.type){\n\t\t\t\t\tcase \"keypress\":\n\t\t\t\t\t\tvar c = (\"charCode\" in evt ? evt.charCode : evt.keyCode);\n\t\t\t\t\t\tif (c==10){\n\t\t\t\t\t\t\t// CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla\n\t\t\t\t\t\t\tc=0;\n\t\t\t\t\t\t\tevt.keyCode = 13;\n\t\t\t\t\t\t}else if(c==13||c==27){\n\t\t\t\t\t\t\tc=0; // Mozilla considers ENTER and ESC non-printable\n\t\t\t\t\t\t}else if(c==3){\n\t\t\t\t\t\t\tc=99; // Mozilla maps CTRL-BREAK to CTRL-c\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Mozilla sets keyCode to 0 when there is a charCode\n\t\t\t\t\t\t// but that stops the event on IE.\n\t\t\t\t\t\tevt.charCode = c;\n\t\t\t\t\t\t_setKeyChar(evt);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn evt;\n\t\t};\n\t\tvar lastEvent, IESignal = function(handle){\n\t\t\tthis.handle = handle;\n\t\t};\n\t\tIESignal.prototype.remove = function(){\n\t\t\tdelete _dojoIEListeners_[this.handle];\n\t\t};\n\t\tvar fixListener = function(listener){\n\t\t\t// this is a minimal function for closing on the previous listener with as few as variables as possible\n\t\t\treturn function(evt){\n\t\t\t\tevt = on._fixEvent(evt, this);\n\t\t\t\tvar result = listener.call(this, evt);\n\t\t\t\tif(evt.modified){\n\t\t\t\t\t// cache the last event and reuse it if we can\n\t\t\t\t\tif(!lastEvent){\n\t\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\t\tlastEvent = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tlastEvent = evt;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t};\n\t\t};\n\t\tvar fixAttach = function(target, type, listener){\n\t\t\tlistener = fixListener(listener);\n\t\t\tif(((target.ownerDocument ? target.ownerDocument.parentWindow : target.parentWindow || target.window || window) != top ||\n\t\t\t\t\t\thas(\"jscript\") < 5.8) &&\n\t\t\t\t\t!has(\"config-_allow_leaks\")){\n\t\t\t\t// IE will leak memory on certain handlers in frames (IE8 and earlier) and in unattached DOM nodes for JScript 5.7 and below.\n\t\t\t\t// Here we use global redirection to solve the memory leaks\n\t\t\t\tif(typeof _dojoIEListeners_ == \"undefined\"){\n\t\t\t\t\t_dojoIEListeners_ = [];\n\t\t\t\t}\n\t\t\t\tvar emitter = target[type];\n\t\t\t\tif(!emitter || !emitter.listeners){\n\t\t\t\t\tvar oldListener = emitter;\n\t\t\t\t\temitter = Function('event', 'var callee = arguments.callee; for(var i = 0; i<callee.listeners.length; i++){var listener = _dojoIEListeners_[callee.listeners[i]]; if(listener){listener.call(this,event);}}');\n\t\t\t\t\temitter.listeners = [];\n\t\t\t\t\ttarget[type] = emitter;\n\t\t\t\t\temitter.global = this;\n\t\t\t\t\tif(oldListener){\n\t\t\t\t\t\temitter.listeners.push(_dojoIEListeners_.push(oldListener) - 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar handle;\n\t\t\t\temitter.listeners.push(handle = (emitter.global._dojoIEListeners_.push(listener) - 1));\n\t\t\t\treturn new IESignal(handle);\n\t\t\t}\n\t\t\treturn aspect.after(target, type, listener, true);\n\t\t};\n\n\t\tvar _setKeyChar = function(evt){\n\t\t\tevt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : '';\n\t\t\tevt.charOrCode = evt.keyChar || evt.keyCode;\t// TODO: remove for 2.0\n\t\t};\n\t\t// Called in Event scope\n\t\tvar stopPropagation = function(){\n\t\t\tthis.cancelBubble = true;\n\t\t};\n\t\tvar preventDefault = on._preventDefault = function(){\n\t\t\t// Setting keyCode to 0 is the only way to prevent certain keypresses (namely\n\t\t\t// ctrl-combinations that correspond to menu accelerator keys).\n\t\t\t// Otoh, it prevents upstream listeners from getting this information\n\t\t\t// Try to split the difference here by clobbering keyCode only for ctrl\n\t\t\t// combinations. If you still need to access the key upstream, bubbledKeyCode is\n\t\t\t// provided as a workaround.\n\t\t\tthis.bubbledKeyCode = this.keyCode;\n\t\t\tif(this.ctrlKey){\n\t\t\t\ttry{\n\t\t\t\t\t// squelch errors when keyCode is read-only\n\t\t\t\t\t// (e.g. if keyCode is ctrl or shift)\n\t\t\t\t\tthis.keyCode = 0;\n\t\t\t\t}catch(e){\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.defaultPrevented = true;\n\t\t\tthis.returnValue = false;\n\t\t\tthis.modified = true; // mark it as modified (for defaultPrevented flag) so the event will be cached in IE\n\t\t};\n\t}\n\tif(has(\"touch\")){\n\t\tvar EventDelegate = function(){};\n\t\tvar windowOrientation = window.orientation;\n\t\tvar fixTouchListener = function(listener){\n\t\t\treturn function(originalEvent){\n\t\t\t\t//Event normalization(for ontouchxxx and resize):\n\t\t\t\t//1.incorrect e.pageX|pageY in iOS\n\t\t\t\t//2.there are no \"e.rotation\", \"e.scale\" and \"onorientationchange\" in Android\n\t\t\t\t//3.More TBD e.g. force | screenX | screenX | clientX | clientY | radiusX | radiusY\n\n\t\t\t\t// see if it has already been corrected\n\t\t\t\tvar event = originalEvent.corrected;\n\t\t\t\tif(!event){\n\t\t\t\t\tvar type = originalEvent.type;\n\t\t\t\t\ttry{\n\t\t\t\t\t\tdelete originalEvent.type; // on some JS engines (android), deleting properties makes them mutable\n\t\t\t\t\t}catch(e){}\n\t\t\t\t\tif(originalEvent.type){\n\t\t\t\t\t\t// Deleting the property of the original event did not work (this is the case of\n\t\t\t\t\t\t// browsers such as older Safari iOS), hence fallback:\n\t\t\t\t\t\tif(has(\"touch-can-modify-event-delegate\")){\n\t\t\t\t\t\t\t// If deleting properties of delegated event works, use event delegation:\n\t\t\t\t\t\t\tEventDelegate.prototype = originalEvent;\n\t\t\t\t\t\t\tevent = new EventDelegate;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t// Otherwise last fallback: other browsers, such as mobile Firefox, do not like\n\t\t\t\t\t\t\t// delegated properties, so we have to copy\n\t\t\t\t\t\t\tevent = {};\n\t\t\t\t\t\t\tfor(var name in originalEvent){\n\t\t\t\t\t\t\t\tevent[name] = originalEvent[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// have to delegate methods to make them work\n\t\t\t\t\t\tevent.preventDefault = function(){\n\t\t\t\t\t\t\toriginalEvent.preventDefault();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tevent.stopPropagation = function(){\n\t\t\t\t\t\t\toriginalEvent.stopPropagation();\n\t\t\t\t\t\t};\n\t\t\t\t\t}else{\n\t\t\t\t\t\t// deletion worked, use property as is\n\t\t\t\t\t\tevent = originalEvent;\n\t\t\t\t\t\tevent.type = type;\n\t\t\t\t\t}\n\t\t\t\t\toriginalEvent.corrected = event;\n\t\t\t\t\tif(type == 'resize'){\n\t\t\t\t\t\tif(windowOrientation == window.orientation){\n\t\t\t\t\t\t\treturn null;//double tap causes an unexpected 'resize' in Android\n\t\t\t\t\t\t}\n\t\t\t\t\t\twindowOrientation = window.orientation;\n\t\t\t\t\t\tevent.type = \"orientationchange\";\n\t\t\t\t\t\treturn listener.call(this, event);\n\t\t\t\t\t}\n\t\t\t\t\t// We use the original event and augment, rather than doing an expensive mixin operation\n\t\t\t\t\tif(!(\"rotation\" in event)){ // test to see if it has rotation\n\t\t\t\t\t\tevent.rotation = 0;\n\t\t\t\t\t\tevent.scale = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (window.TouchEvent && originalEvent instanceof TouchEvent) {\n\t\t\t\t\t\t// use event.changedTouches[0].pageX|pageY|screenX|screenY|clientX|clientY|target\n\t\t\t\t\t\tvar firstChangeTouch = event.changedTouches[0];\n\t\t\t\t\t\tfor(var i in firstChangeTouch){ // use for-in, we don't need to have dependency on dojo/_base/lang here\n\t\t\t\t\t\t\tdelete event[i]; // delete it first to make it mutable\n\t\t\t\t\t\t\tevent[i] = firstChangeTouch[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn listener.call(this, event);\n\t\t\t};\n\t\t};\n\t}\n\treturn on;\n});\n","define([\"./sniff\", \"./_base/window\", \"./_base/kernel\"],\n\t\tfunction(has, win, kernel){\n\t// module:\n\t//\t\tdojo/dom\n\n\t// FIXME: need to add unit tests for all the semi-public methods\n\n\tif(has(\"ie\") <= 7){\n\t\ttry{\n\t\t\tdocument.execCommand(\"BackgroundImageCache\", false, true);\n\t\t}catch(e){\n\t\t\t// sane browsers don't have cache \"issues\"\n\t\t}\n\t}\n\n\t// =============================\n\t// DOM Functions\n\t// =============================\n\n\t// the result object\n\tvar dom = {\n\t\t// summary:\n\t\t//\t\tThis module defines the core dojo DOM API.\n\t};\n\n\tif(has(\"ie\")){\n\t\tdom.byId = function(id, doc){\n\t\t\tif(typeof id != \"string\"){\n\t\t\t\treturn id || null;\n\t\t\t}\n\t\t\tvar _d = doc || win.doc, te = id && _d.getElementById(id);\n\t\t\t// attributes.id.value is better than just id in case the\n\t\t\t// user has a name=id inside a form\n\t\t\tif(te && (te.attributes.id.value == id || te.id == id)){\n\t\t\t\treturn te;\n\t\t\t}else{\n\t\t\t\tvar eles = _d.all[id];\n\t\t\t\tif(!eles || eles.nodeName){\n\t\t\t\t\teles = [eles];\n\t\t\t\t}\n\t\t\t\t// if more than 1, choose first with the correct id\n\t\t\t\tvar i = 0;\n\t\t\t\twhile((te = eles[i++])){\n\t\t\t\t\tif((te.attributes && te.attributes.id && te.attributes.id.value == id) || te.id == id){\n\t\t\t\t\t\treturn te;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t}else{\n\t\tdom.byId = function(id, doc){\n\t\t\t// inline'd type check.\n\t\t\t// be sure to return null per documentation, to match IE branch.\n\t\t\treturn ((typeof id == \"string\") ? (doc || win.doc).getElementById(id) : id) || null; // DOMNode\n\t\t};\n\t}\n\t/*=====\n\t dom.byId = function(id, doc){\n\t\t// summary:\n\t\t//\t\tReturns DOM node with matching `id` attribute or falsy value (ex: null or undefined)\n\t\t//\t\tif not found. If `id` is a DomNode, this function is a no-op.\n\t\t//\n\t\t// id: String|DOMNode\n\t\t//\t\tA string to match an HTML id attribute or a reference to a DOM Node\n\t\t//\n\t\t// doc: Document?\n\t\t//\t\tDocument to work in. Defaults to the current value of\n\t\t//\t\tdojo/_base/window.doc. Can be used to retrieve\n\t\t//\t\tnode references from other documents.\n\t\t//\n\t\t// example:\n\t\t//\t\tLook up a node by ID:\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tvar n = dom.byId(\"foo\");\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tCheck if a node exists, and use it.\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tvar n = dom.byId(\"bar\");\n\t\t//\t|\t\tif(n){ doStuff() ... }\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tAllow string or DomNode references to be passed to a custom function:\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tvar foo = function(nodeOrId){\n\t\t//\t|\t\t\tnodeOrId = dom.byId(nodeOrId);\n\t\t//\t|\t\t\t// ... more stuff\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t };\n\t =====*/\n\n\t// Test for DOMNode.contains() method, available everywhere except FF8-\n\t// and IE8-, where it's available in general, but not on document itself,\n\t// and also problems when either ancestor or node are text nodes.\n\n\tvar doc = kernel.global[\"document\"] || null;\n\thas.add(\"dom-contains\", !!(doc && doc.contains));\n\tdom.isDescendant = has(\"dom-contains\") ?\n\t\t// FF9+, IE9+, webkit, opera, iOS, Android, Edge, etc.\n\t\tfunction(/*DOMNode|String*/ node, /*DOMNode|String*/ ancestor){\n\t\t\treturn !!( (ancestor = dom.byId(ancestor)) && ancestor.contains(dom.byId(node)) );\n\t\t} :\n\t\tfunction(/*DOMNode|String*/ node, /*DOMNode|String*/ ancestor){\n\t\t\t// summary:\n\t\t\t//\t\tReturns true if node is a descendant of ancestor\n\t\t\t// node: DOMNode|String\n\t\t\t//\t\tstring id or node reference to test\n\t\t\t// ancestor: DOMNode|String\n\t\t\t//\t\tstring id or node reference of potential parent to test against\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tTest is node id=\"bar\" is a descendant of node id=\"foo\"\n\t\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t\t//\t|\t\tif(dom.isDescendant(\"bar\", \"foo\")){ ... }\n\t\t\t//\t|\t});\n\n\t\t\ttry{\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tancestor = dom.byId(ancestor);\n\t\t\t\twhile(node){\n\t\t\t\t\tif(node == ancestor){\n\t\t\t\t\t\treturn true; // Boolean\n\t\t\t\t\t}\n\t\t\t\t\tnode = node.parentNode;\n\t\t\t\t}\n\t\t\t}catch(e){ /* squelch, return false */ }\n\t\t\treturn false; // Boolean\n\t\t};\n\n\t// TODO: do we need setSelectable in the base?\n\n\t// Add feature test for user-select CSS property\n\t// (currently known to work in all but IE < 10 and Opera)\n\t// TODO: The user-select CSS property as of May 2014 is no longer part of\n\t// any CSS specification. In IE, -ms-user-select does not do the same thing\n\t// as the unselectable attribute on elements; namely, dijit Editor buttons\n\t// do not properly prevent the content of the editable content frame from\n\t// unblurring. As a result, the -ms- prefixed version is omitted here.\n\thas.add(\"css-user-select\", function(global, doc, element){\n\t\t// Avoid exception when dom.js is loaded in non-browser environments\n\t\tif(!element){ return false; }\n\n\t\tvar style = element.style;\n\t\tvar prefixes = [\"Khtml\", \"O\", \"Moz\", \"Webkit\"],\n\t\t\ti = prefixes.length,\n\t\t\tname = \"userSelect\",\n\t\t\tprefix;\n\n\t\t// Iterate prefixes from most to least likely\n\t\tdo{\n\t\t\tif(typeof style[name] !== \"undefined\"){\n\t\t\t\t// Supported; return property name\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}while(i-- && (name = prefixes[i] + \"UserSelect\"));\n\n\t\t// Not supported if we didn't return before now\n\t\treturn false;\n\t});\n\n\t/*=====\n\tdom.setSelectable = function(node, selectable){\n\t\t// summary:\n\t\t//\t\tEnable or disable selection on a node\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to node\n\t\t// selectable: Boolean\n\t\t//\t\tstate to put the node in. false indicates unselectable, true\n\t\t//\t\tallows selection.\n\t\t// example:\n\t\t//\t\tMake the node id=\"bar\" unselectable\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tdom.setSelectable(\"bar\");\n\t\t//\t|\t});\n\t\t// example:\n\t\t//\t\tMake the node id=\"bar\" selectable\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tdom.setSelectable(\"bar\", true);\n\t\t//\t|\t});\n\t};\n\t=====*/\n\n\tvar cssUserSelect = has(\"css-user-select\");\n\tdom.setSelectable = cssUserSelect ? function(node, selectable){\n\t\t// css-user-select returns a (possibly vendor-prefixed) CSS property name\n\t\tdom.byId(node).style[cssUserSelect] = selectable ? \"\" : \"none\";\n\t} : function(node, selectable){\n\t\tnode = dom.byId(node);\n\n\t\t// (IE < 10 / Opera) Fall back to setting/removing the\n\t\t// unselectable attribute on the element and all its children\n\t\tvar nodes = node.getElementsByTagName(\"*\"),\n\t\t\ti = nodes.length;\n\n\t\tif(selectable){\n\t\t\tnode.removeAttribute(\"unselectable\");\n\t\t\twhile(i--){\n\t\t\t\tnodes[i].removeAttribute(\"unselectable\");\n\t\t\t}\n\t\t}else{\n\t\t\tnode.setAttribute(\"unselectable\", \"on\");\n\t\t\twhile(i--){\n\t\t\t\tnodes[i].setAttribute(\"unselectable\", \"on\");\n\t\t\t}\n\t\t}\n\t};\n\n\treturn dom;\n});\n","var instances = 'ej2_instances';\nvar uid = 0;\nvar isBlazorPlatform = false;\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\nexport function disableBlazorMode() {\n isBlazorPlatform = false;\n}\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\nexport function getValue(nameSpace, obj) {\n /* tslint:disable no-any */\n var value = obj;\n var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @return {void}\n * @private\n */\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} params - String value to the get the inner object\n * @return {void}\n * @private\n */\nexport function deleteObject(obj, key) {\n delete obj[key];\n}\n/**\n * Check weather the given argument is only object.\n * @param {any} obj - Object which is need to check.\n * @return {boolean}\n * @private\n */\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @return {any}\n * @private\n */\nexport function getEnumValue(enumObject, enumValue) {\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @return {void}\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[deepmerge]) && (temrObj[deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {\n extend(temrObj[key], temrObj[key], tempProp[key], true);\n }\n else {\n temrObj[key] = tempProp[key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @return {Object}\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied && typeof copied === 'object' ? copied : {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n var isArrayChanged = Array.isArray(copy) && Array.isArray(src) && (copy.length !== src.length);\n var blazorEventExtend = isBlazor() ? (!(src instanceof Event) && !isArrayChanged) : true;\n if (deep && blazorEventExtend && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n if (Array.isArray(clone) && clone.hasOwnProperty('isComplexArray')) {\n extend(clone, {}, copy, deep);\n }\n else {\n result[key] = extend(clone, {}, copy, deep);\n }\n }\n else {\n /* istanbul ignore next */\n clone = isBlazor() ? src && Object.keys(copy).length : src ? src : [];\n result[key] = extend([], clone, copy, deep);\n }\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @return {Function}\n * @private\n */\nexport function debounce(eventFunction, delay) {\n var out;\n // tslint:disable-next-line\n return function () {\n var _this = this;\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n// Added since lint ignored after added '//tslint:disable-next-line' \n/* tslint:disable:no-any */\n/**\n * To convert the object to string for query url\n * @param {Object} data\n * @returns string\n * @private\n */\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('base, link, style'));\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[i].outerHTML;\n }\n printWindow.document.write('<!DOCTYPE html> <html><head>' + reference + '</head><body>' + div.innerHTML +\n '<script> (function() { window.ready = true; })(); </script>' + '</body></html>');\n printWindow.document.close();\n printWindow.focus();\n // tslint:disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n * @param {number|string} value\n * @return {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result.match(/auto|%|px|vh|vm|vmax|vmin|em/)) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\nexport function enableBlazorMode() {\n isBlazorPlatform = true;\n}\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\nexport function isBlazor() {\n return isBlazorPlatform;\n}\n/**\n * Function to convert xPath to DOM element in blazor platform\n * @return {HTMLElement} result\n * @param {HTMLElement | object} element\n * @private\n */\nexport function getElement(element) {\n var xPath = 'xPath';\n if (!(element instanceof Node) && isBlazor() && !isNullOrUndefined(element[xPath])) {\n return document.evaluate(element[xPath], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\n }\n return element;\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\nexport function getInstance(element, component) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\nexport function addInstance(element, instance) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n elem[instances].push(instance);\n }\n else {\n elem[instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n * @return {any}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function uniqueID() {\n // tslint:disable-next-line:no-any\n if ((typeof window) === 'undefined') {\n return;\n }\n // tslint:disable-next-line:no-any\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[i];\n }\n return ret;\n}\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue, isBlazor } from '../util';\nvar latnRegex = /^[0-9]*$/;\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object}\n */\n ParserBase.getMainObject = function (obj, cName) {\n var value = isBlazor() ? cName : 'main.' + cName;\n return getValue(value, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object}\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object}\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n /* tslint:disable no-any */\n if (!res.hasOwnProperty(prop[key])) {\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp}\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n }).join('|');\n return new RegExp(regexStr, 'g');\n };\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n * @param {string} val\n * @returns {string}\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[i] + '|';\n }\n else {\n ret += val[i];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string}\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n * @param {Object} obj\n * @returns {NumericObject}\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols, blazorMode) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem) || blazorMode) {\n var digits = blazorMode ? getValue('obj.mapperDigits', cur) : getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n ret.numberParseRegex = new RegExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue(blazorMode ? 'numberSymbols' : 'symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n * @param {Object} curObj\n * @param {Object} numberSystem\n * @param {boolean} isNumber\n * @returns {NumberMapper}\n */\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n/**\n * @private\n */\nvar blazorCurrencyData = {\n 'DJF': 'Fdj',\n 'ERN': 'Nfk',\n 'ETB': 'Br',\n 'NAD': '$',\n 'ZAR': 'R',\n 'XAF': 'FCFA',\n 'GHS': 'GH₵',\n 'XDR': 'XDR',\n 'AED': 'د.Ø¥.â€',\n 'BHD': 'د.ب.â€',\n 'DZD': 'د.ج.â€',\n 'EGP': 'ج.Ù….â€',\n 'ILS': '₪',\n 'IQD': 'د.ع.â€',\n 'JOD': 'د.ا.â€',\n 'KMF': 'CF',\n 'KWD': 'د.Ùƒ.â€',\n 'LBP': 'Ù„.Ù„.â€',\n 'LYD': 'د.Ù„.â€',\n 'MAD': 'د.Ù….â€',\n 'MRU': 'Ø£.Ù….',\n 'OMR': 'ر.ع.â€',\n 'QAR': 'ر.Ù‚.â€',\n 'SAR': 'ر.س.â€',\n 'SDG': 'ج.س.',\n 'SOS': 'S',\n 'SSP': '£',\n 'SYP': 'Ù„.س.â€',\n 'TND': 'د.ت.â€',\n 'YER': 'ر.ÙŠ.â€',\n 'CLP': '$',\n 'INR': '₹',\n 'TZS': 'TSh',\n 'EUR': '€',\n 'AZN': '₼',\n 'RUB': '₽',\n 'BYN': 'Br',\n 'ZMW': 'K',\n 'BGN': 'лв.',\n 'NGN': '₦',\n 'XOF': 'CFA',\n 'BDT': '৳',\n 'CNY': 'Â¥',\n 'BAM': 'КМ',\n 'UGX': 'USh',\n 'USD': '$',\n 'CZK': 'KÄ',\n 'GBP': '£',\n 'DKK': 'kr.',\n 'KES': 'Ksh',\n 'CHF': 'CHF',\n 'MVR': 'Þƒ.',\n 'BTN': 'Nu.',\n 'XCD': 'EC$',\n 'AUD': '$',\n 'BBD': '$',\n 'BIF': 'FBu',\n 'BMD': '$',\n 'BSD': '$',\n 'BWP': 'P',\n 'BZD': '$',\n 'CAD': '$',\n 'NZD': '$',\n 'FJD': '$',\n 'FKP': '£',\n 'GIP': '£',\n 'GMD': 'D',\n 'GYD': '$',\n 'HKD': '$',\n 'IDR': 'Rp',\n 'JMD': '$',\n 'KYD': '$',\n 'LRD': '$',\n 'MGA': 'Ar',\n 'MOP': 'MOP$',\n 'MUR': 'Rs',\n 'MWK': 'MK',\n 'MYR': 'RM',\n 'PGK': 'K',\n 'PHP': '₱',\n 'PKR': 'Rs',\n 'RWF': 'RF',\n 'SBD': '$',\n 'SCR': 'SR',\n 'SEK': 'kr',\n 'SGD': '$',\n 'SHP': '£',\n 'SLL': 'Le',\n 'ANG': 'NAf.',\n 'SZL': 'E',\n 'TOP': 'T$',\n 'TTD': '$',\n 'VUV': 'VT',\n 'WST': 'WS$',\n 'ARS': '$',\n 'BOB': 'Bs',\n 'BRL': 'R$',\n 'COP': '$',\n 'CRC': 'â‚¡',\n 'CUP': '$',\n 'DOP': '$',\n 'GTQ': 'Q',\n 'HNL': 'L',\n 'MXN': '$',\n 'NIO': 'C$',\n 'PAB': 'B/.',\n 'PEN': 'S/',\n 'PYG': '₲',\n 'UYU': '$',\n 'VES': 'Bs.S',\n 'IRR': 'ريال',\n 'GNF': 'FG',\n 'CDF': 'FC',\n 'HTG': 'G',\n 'XPF': 'FCFP',\n 'HRK': 'kn',\n 'HUF': 'Ft',\n 'AMD': 'Ö',\n 'ISK': 'kr',\n 'JPY': 'Â¥',\n 'GEL': '₾',\n 'CVE': '​',\n 'KZT': '₸',\n 'KHR': '៛',\n 'KPW': 'â‚©',\n 'KRW': 'â‚©',\n 'KGS': 'Ñом',\n 'AOA': 'Kz',\n 'LAK': 'â‚',\n 'MZN': 'MTn',\n 'MKD': 'ден',\n 'MNT': 'â‚®',\n 'BND': '$',\n 'MMK': 'K',\n 'NOK': 'kr',\n 'NPR': 'रà¥',\n 'AWG': 'Afl.',\n 'SRD': '$',\n 'PLN': 'zÅ‚',\n 'AFN': 'Ø‹',\n 'STN': 'Db',\n 'MDL': 'L',\n 'RON': 'lei',\n 'UAH': 'â‚´',\n 'LKR': 'රු.',\n 'ALL': 'Lekë',\n 'RSD': 'дин.',\n 'TJS': 'Ñмн',\n 'THB': '฿',\n 'TMT': 'm.',\n 'TRY': '₺',\n 'UZS': 'Ñўм',\n 'VND': 'â‚«',\n 'TWD': 'NT$'\n};\nexport function getBlazorCurrencySymbol(currencyCode) {\n return getValue(currencyCode || '', blazorCurrencyData);\n}\n","/***\n * Hijri parser\n */\nexport var HijriParser;\n(function (HijriParser) {\n /* tslint:disable */\n var dateCorrection = [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990, 29019, 29049, 29078, 29108, 29137, 29167,\n 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522, 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759,\n 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053, 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348,\n 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585, 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939,\n 30968, 30998, 31027, 31057, 31086, 31116, 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530,\n 31559, 31589, 31618, 31648, 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120,\n 32150, 32180, 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711,\n 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243, 33272, 33302,\n 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775, 33804, 33834, 33863, 33893,\n 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306, 34336, 34365, 34395, 34424, 34454, 34483,\n 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837, 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074,\n 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370, 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665,\n 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901, 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254,\n 36284, 36314, 36343, 36373, 36403, 36433, 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845,\n 36875, 36904, 36934, 36963, 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436,\n 37465, 37495, 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027,\n 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558, 38587, 38617,\n 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089, 39118, 39148, 39178, 39208,\n 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621, 39650, 39680, 39709, 39739, 39768, 39798,\n 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153, 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389,\n 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685, 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980,\n 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216, 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570,\n 41599, 41629, 41658, 41688, 41718, 41748, 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161,\n 42190, 42220, 42249, 42279, 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751,\n 42780, 42810, 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342,\n 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873, 43903, 43932,\n 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405, 44434, 44464, 44493, 44523,\n 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936, 44966, 44996, 45025, 45055, 45084, 45114,\n 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468, 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704,\n 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999, 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295,\n 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531, 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885,\n 46915, 46944, 46974, 47003, 47033, 47063, 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476,\n 47506, 47535, 47565, 47594, 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066,\n 48096, 48125, 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,\n 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189, 49218, 49248,\n 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720, 49749, 49779, 49809, 49838,\n 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252, 50281, 50311, 50340, 50370, 50400, 50429,\n 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784, 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019,\n 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315, 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611,\n 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846, 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200,\n 52230, 52260, 52290, 52319, 52349, 52379, 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792,\n 52822, 52851, 52881, 52910, 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383,\n 53412, 53441, 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973,\n 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505, 54535, 54564,\n 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036, 55066, 55095, 55125, 55154,\n 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567, 55597, 55627, 55657, 55686, 55716, 55745,\n 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100, 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335,\n 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631, 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926,\n 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162, 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517,\n 57546, 57576, 57605, 57634, 57664, 57694, 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107,\n 58137, 58167, 58196, 58226, 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698,\n 58727, 58757, 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288,\n 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820, 59850, 59879,\n 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352, 60381, 60411, 60440, 60469,\n 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883, 60912, 60942, 60972, 61002, 61031, 61061,\n 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415, 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651,\n 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947, 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242,\n 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478, 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832,\n 62862, 62891, 62921, 62950, 62980, 63009, 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423,\n 63453, 63482, 63512, 63541, 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014,\n 64043, 64073, 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603,\n 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136, 65166, 65195,\n 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667, 65697, 65726, 65755, 65785,\n 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199, 66228, 66258, 66287, 66317, 66346, 66376,\n 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730, 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967,\n 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262, 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557,\n 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793, 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148,\n 68177, 68207, 68236, 68266, 68295, 68325, 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738,\n 68768, 68797, 68827, 68857, 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330,\n 69359, 69388, 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919,\n 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451, 70481, 70510,\n 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983, 71013, 71042, 71071, 71101,\n 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514, 71543, 71573, 71602, 71632, 71662, 71691,\n 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046, 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282,\n 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577, 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872,\n 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109, 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464,\n 73493, 73523, 73552, 73581, 73611, 73640, 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053,\n 74083, 74113, 74142, 74172, 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645,\n 74675, 74704, 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235,\n 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766, 75796, 75826,\n 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299, 76328, 76358, 76387, 76416,\n 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830, 76859, 76889, 76918, 76948, 76977, 77007,\n 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361, 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598,\n 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893, 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188,\n 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425, 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779,\n 78808, 78838, 78867, 78897, 78926, 78956, 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369,\n 79399, 79428, 79458, 79487, 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960,\n 79990];\n /* tslint:enable */\n function getHijriDate(gDate) {\n var day = gDate.getDate();\n var month = gDate.getMonth();\n var year = gDate.getFullYear();\n var tMonth = month + 1;\n var tYear = year;\n if (tMonth < 3) {\n tYear -= 1;\n tMonth += 12;\n }\n var yPrefix = Math.floor(tYear / 100.);\n var julilanOffset = yPrefix - Math.floor(yPrefix / 4.) - 2;\n var julianNumber = Math.floor(365.25 * (tYear + 4716)) + Math.floor(30.6001 * (tMonth + 1)) + day - julilanOffset - 1524;\n yPrefix = Math.floor((julianNumber - 1867216.25) / 36524.25);\n julilanOffset = yPrefix - Math.floor(yPrefix / 4.) + 1;\n var b = julianNumber + julilanOffset + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var tempMonth = Math.floor((b - d) / 30.6001);\n day = (b - d) - Math.floor(30.6001 * tempMonth);\n month = Math.floor((b - d) / 20.6001);\n if (month > 13) {\n c += 1;\n month -= 12;\n }\n month -= 1;\n year = c - 4716;\n var modifiedJulianDate = julianNumber - 2400000;\n // date calculation for year after 2077\n var iyear = 10631. / 30.;\n var z = julianNumber - 1948084;\n var cyc = Math.floor(z / 10631.);\n z = z - 10631 * cyc;\n var j = Math.floor((z - 0.1335) / iyear);\n var iy = 30 * cyc + j;\n z = z - Math.floor(j * iyear + 0.1335);\n var im = Math.floor((z + 28.5001) / 29.5);\n /* istanbul ignore next */\n if (im === 13) {\n im = 12;\n }\n var tempDay = z - Math.floor(29.5001 * im - 29);\n var i = 0;\n for (; i < dateCorrection.length; i++) {\n if (dateCorrection[i] > modifiedJulianDate) {\n break;\n }\n }\n var iln = i + 16260;\n var ii = Math.floor((iln - 1) / 12);\n var hYear = ii + 1;\n var hmonth = iln - 12 * ii;\n var hDate = modifiedJulianDate - dateCorrection[i - 1] + 1;\n if ((hDate + '').length > 2) {\n hDate = tempDay;\n hmonth = im;\n hYear = iy;\n }\n return { year: hYear, month: hmonth, date: hDate };\n }\n HijriParser.getHijriDate = getHijriDate;\n function toGregorian(year, month, day) {\n var iy = year;\n var im = month;\n var id = day;\n var ii = iy - 1;\n var iln = (ii * 12) + 1 + (im - 1);\n var i = iln - 16260;\n var mcjdn = id + dateCorrection[i - 1] - 1;\n var julianDate = mcjdn + 2400000;\n var z = Math.floor(julianDate + 0.5);\n var a = Math.floor((z - 1867216.25) / 36524.25);\n a = z + 1 + a - Math.floor(a / 4);\n var b = a + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var e = Math.floor((b - d) / 30.6001);\n var gDay = b - d - Math.floor(e * 30.6001);\n var gMonth = e - (e > 13.5 ? 13 : 1);\n var gYear = c - (gMonth > 2.5 ? 4716 : 4715);\n /* istanbul ignore next */\n if (gYear <= 0) {\n gMonth--;\n } // No year zero\n return new Date(gYear + '/' + (gMonth) + '/' + gDay);\n }\n HijriParser.toGregorian = toGregorian;\n})(HijriParser || (HijriParser = {}));\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue, isBlazor } from '../util';\nimport { HijriParser } from '../hijri-parser';\nimport { isNullOrUndefined, extend } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|K|cccc|ccc|WW|W|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n m: 'getMinutes',\n h: 'getHours',\n H: 'getHours',\n s: 'getSeconds',\n d: 'getDate',\n f: 'getMilliseconds'\n};\nexport var datePartMatcher = {\n 'M': 'month',\n 'd': 'day',\n 'E': 'weekday',\n 'c': 'weekday',\n 'y': 'year',\n 'm': 'minute',\n 'h': 'hour',\n 'H': 'hour',\n 's': 'second',\n 'L': 'month',\n 'a': 'designator',\n 'z': 'timeZone',\n 'Z': 'timeZone',\n 'G': 'era',\n 'f': 'milliseconds'\n};\nvar timeSeparator = 'timeSeparator';\n/* tslint:disable no-any */\n/**\n * Date Format is a framework provides support for date formatting.\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which date will format.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numObject = getValue('parserObject.numbers', dependable);\n var dateObject = dependable.dateObject;\n var formatOptions = { isIslamic: base.islamicRegex.test(option.calendar) };\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n formatOptions.dateSeperator = isBlazor() ? getValue('dateSeperator', dateObject) : base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n if (isBlazor()) {\n resPattern = resPattern.replace(/tt/, 'a');\n }\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = isBlazor() ?\n extend({}, numObject) : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n var str = patternMatch_1[_i];\n var len = str.length;\n var char = str[0];\n if (char === 'K') {\n char = 'h';\n }\n /* tslint:disable no-any */\n var charKey = datePartMatcher[char];\n switch (char) {\n case 'E':\n case 'c':\n if (isBlazor()) {\n formatOptions.weekday = getValue('days.' + base.monthIndex[len], dateObject);\n }\n else {\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n break;\n case 'M':\n case 'L':\n if (isBlazor()) {\n formatOptions.month = getValue('months.' + base.monthIndex[len], dateObject);\n }\n else {\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n }\n break;\n case 'a':\n formatOptions.designator = isBlazor() ?\n getValue('dayPeriods', dateObject) : getValue('dayPeriods.format.wide', dateObject);\n break;\n case 'G':\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = isBlazor() ? getValue('eras', dateObject) : getValue('eras.' + eText, dependable.dateObject);\n break;\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n * @param {Date} value\n * @param {FormatOptions} options\n */\n // tslint:disable-next-line:max-func-body-length\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n var dObject = this.getCurrentDateValue(value, options.isIslamic);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var curvalstr = '';\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = dObject.month;\n if (length_1 > 2) {\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n ret += options.weekday[weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n case 'f':\n isNumber = true;\n if (char === 'd') {\n curval = dObject.date;\n }\n else if (char === 'f') {\n isNumber = false;\n processNumber = true;\n curvalstr = value[timeSetter[char]]().toString();\n curvalstr = curvalstr.substring(0, length_1);\n var curlength = curvalstr.length;\n if (length_1 !== curlength) {\n if (length_1 > 3) {\n continue;\n }\n for (var i = 0; i < length_1 - curlength; i++) {\n curvalstr = '0' + curvalstr.toString();\n }\n }\n curstr += curvalstr;\n }\n else {\n curval = value[timeSetter[char]]();\n }\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += dObject.year;\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a':\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n ret += options.designator[desig];\n break;\n case 'G':\n var dec = value.getFullYear() < 0 ? 0 : 1;\n var retu = options.era[dec];\n if (isNullOrUndefined(retu)) {\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/\\'/g, '');\n break;\n case 'z':\n var timezone = value.getTimezoneOffset();\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n ret += options.numMapper.numberSymbols[timeSeparator];\n /* tslint:enable no-any */\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n case 'W':\n isNumber = true;\n curval = base.getWeekOfYear(value);\n break;\n default:\n ret += match;\n }\n if (isNumber) {\n processNumber = true;\n curstr = this.checkTwodigitNumber(curval, length_1);\n }\n if (processNumber) {\n ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n }\n }\n return ret;\n };\n DateFormat.getCurrentDateValue = function (value, isIslamic) {\n if (isIslamic) {\n return HijriParser.getHijriDate(value);\n }\n return { year: value.getFullYear(), month: value.getMonth() + 1, date: value.getDate() };\n };\n /**\n * Returns two digit numbers for given value and length\n */\n DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n * @param {number} tVal\n * @param {string} pattern\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\n","import { isUndefined, throwError, isNullOrUndefined, extend, isBlazor, getValue } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits',\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} object- Specifies the global cldr data collection.\n * @return Function.\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, '', true);\n var numObject = dependable.numericObject;\n dOptions.numberMapper = isBlazor() ? extend({}, numObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = isBlazor() ? getValue('currencySymbol', numObject) : base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode, option.altSymbol);\n /* tslint:disable no-any */\n dOptions.percentSymbol = isBlazor() ? getValue('numberSymbols.percentSign', numObject) :\n dOptions.numberMapper.numberSymbols[percentSign];\n dOptions.minusSymbol = isBlazor() ? getValue('numberSymbols.minusSign', numObject) :\n dOptions.numberMapper.numberSymbols[minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n if (!isBlazor()) {\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n }\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency && !isBlazor()) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n if (!isBlazor()) {\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n }\n else {\n cOptions.nData = extend({}, {}, getValue(fOptions.type + 'nData', numObject));\n cOptions.pData = extend({}, {}, getValue(fOptions.type + 'pData', numObject));\n if (fOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([cOptions.pData, cOptions.nData], dOptions.currencySymbol, option.currency);\n }\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n * @param {string} pattern\n * @returns {GroupDetails}\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n * @param {number} val1\n * @param {number} val2\n * @param {boolean} checkbothExist\n * @param {boolean} isFraction\n * @returns {boolean}\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n * @param {number} val\n * @param {string} text\n * @param {boolean} isFraction\n * @returns {void}\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n * @param {number} value\n * @param {base.GenericFormatOptions} fOptions\n * @param {CommonOptions} dOptions\n * @returns {string}\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n * @param {string} val\n * @param {number} level1\n * @param {string} sep\n * @param {string} decimalSymbol\n * @param {number} level2\n * @returns {string}\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n * @param {string} value\n * @param {number} min\n * @returns {string}\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined, isBlazor } from '../util';\nimport { datePartMatcher } from './date-formatter';\nimport { HijriParser } from '../hijri-parser';\nvar number = 'numbers';\nvar defNoSystem = 'defaultNumberingSystem';\nvar noSystem = 'numberingSystem';\nvar standalone = 'stand-alone';\nvar curWeekDay = 'curWeekDay';\nvar latnRegex = /^[0-9]*$/;\nvar abbreviateRegex = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|ccc/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth',\n milliseconds: 'setMilliseconds'\n};\nvar month = 'months';\n/* tslint:disable no-any */\n/**\n * Date Parser.\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which string date will be parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n // tslint:disable-next-line:max-func-body-length\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n // tslint:disable-next-line\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), false, isBlazor());\n var parseOptions = {};\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n parseOptions = { isIslamic: base.islamicRegex.test(option.calendar), pattern: resPattern, evalposition: {}, culture: culture };\n var patternMatch = resPattern.match(base.dateParseRegex) || [];\n var length_1 = patternMatch.length;\n var gmtCorrection = 0;\n var zCorrectTemp = 0;\n var isgmtTraversed = false;\n var nRegx = numOptions.numericRegex;\n // tslint:disable-next-line\n var numMapper = isBlazor() ? dependable.parserObject.numbers :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[i];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n // tslint:disable-next-line\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // tslint:disable\n var weekData = void 0;\n if (isBlazor()) {\n weekData = getValue('days.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n weekData = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n var weekObject = parser.reverseObject(weekData);\n // tslint:enable\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n case 'f':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n var monthData = void 0;\n if (isBlazor()) {\n /* tslint:disable no-any */\n monthData = getValue('months.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n /* tslint:disable no-any */\n monthData = dependable.dateObject[month][standalone][base.monthIndex[len]];\n }\n // tslint:disable-next-line\n parseOptions[charKey] = parser.reverseObject(monthData);\n /* tslint:disable no-any */\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else if (char === 'f') {\n if (len > 3) {\n continue;\n }\n isNumber = true;\n regexString += '(' + nRegx + nRegx + '?' + nRegx + '?' + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'W':\n var opt = len === 1 ? '?' : '';\n regexString += '(' + nRegx + opt + nRegx + ')';\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n var periodValur = isBlazor() ?\n getValue('dayPeriods', dependable.dateObject) :\n getValue('dayPeriods.format.wide', dependable.dateObject);\n parseOptions[charKey] = parser.reverseObject(periodValur);\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[charKey] = parser.reverseObject(isBlazor() ?\n getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n var iString = str.replace(/\\'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n parseOptions.parserRegex = new RegExp('^' + regexString + '$', 'i');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n if (parseOptions.isIslamic) {\n var dobj = {};\n var tYear = parsedDateParts.year;\n var tDate = parsedDateParts.day;\n var tMonth = parsedDateParts.month;\n var ystrig = tYear ? (tYear + '') : '';\n var is2DigitYear = (ystrig.length === 2);\n if (!tYear || !tMonth || !tDate || is2DigitYear) {\n dobj = HijriParser.getHijriDate(new Date());\n }\n if (is2DigitYear) {\n tYear = parseInt((dobj.year + '').slice(0, 2) + ystrig, 10);\n }\n // tslint:disable-next-line\n var dateObject = HijriParser.toGregorian(tYear || dobj.year, tMonth || dobj.month, tDate || dobj.date);\n parsedDateParts.year = dateObject.getFullYear();\n parsedDateParts.month = dateObject.getMonth() + 1;\n parsedDateParts.day = dateObject.getDate();\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /* tslint:disable */\n /**\n * Returns date object for provided date options\n * @param {DateParts} options\n * @param {Date} value\n * @returns {Date}\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'milliseconds', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n var tValue = options[key];\n if (isUndefined(tValue) && key === \"day\") {\n res.setDate(1);\n }\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n res[timeSetter[key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n res[timeSetter[key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n * @param {string} value\n * @param {ParseOptions} parseOptions\n * @param {NumericOptions} num\n * @returns {DateParts}\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n var nRegx = num.numericRegex;\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n retOptions[prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[prop] = val;\n }\n }\n else {\n matchString = ((prop === 'month') && (!parseOptions.isIslamic) && (parseOptions.culture === 'en' || parseOptions.culture === 'en-GB' || parseOptions.culture === 'en-US'))\n ? matchString[0].toUpperCase() + matchString.substring(1).toLowerCase() : matchString;\n retOptions[prop] = parseOptions[prop][matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n * @param {string} value\n * @param {NumericOptions} option\n * @returns {number}\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n * @param {string} hourFormat\n * @param {base.TimeZoneOptions} tZone\n * @param {string} nRegex\n * @returns {string}\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var result;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n * @param {boolean} flag\n * @param {string} val1\n * @param {string} val2\n * @param {NumericOptions} num\n * @returns {number}\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n/* tslint:enable */\n","import { extend, isNullOrUndefined, isBlazor, getValue } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar formatRegex = /(^[ncpa]{1})([0-1]?[0-9]|20)?$/i;\nvar parseRegex = /^([^0-9]*)(([0-9,]*[0-9]+)(\\.[0-9]+)?)([Ee][+-]?[0-9]+)?([^0-9]*)$/;\nvar groupRegex = /,/g;\nvar latnDecimalRegex = /^[0-9]*(\\.[0-9]+)?$/;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} - Specific the format in which number will parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numOptions;\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n if (!parseOptions.fractionDigits) {\n if (option.maximumFractionDigits) {\n parseOptions.maximumFractionDigits = option.maximumFractionDigits;\n }\n }\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n var numbers = getValue('numbers', dependable.parserObject);\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // tslint:disable-next-line:no-any\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern;\n if (!isBlazor()) {\n symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n if (symbolpattern) {\n symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n var split = symbolpattern.split(';');\n parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n parseOptions.pData = base.getFormatData(split[0], true, '');\n }\n }\n else {\n parseOptions.nData = extend({}, {}, getValue(parseOptions.type + 'nData', numbers));\n parseOptions.pData = extend({}, {}, getValue(parseOptions.type + 'pData', numbers));\n if (parseOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([parseOptions.pData, parseOptions.nData], getValue('currencySymbol', numbers), option.currency);\n }\n }\n return function (value) {\n return _this.getParsedNumber(value, parseOptions, numOptions);\n };\n };\n /**\n * Returns parsed number for the provided formatting options\n * @param {string} value\n * @param {NumericParts} options\n * @param {NumericOptions} numOptions\n * @returns {number}\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (options.maximumFractionDigits) {\n ret = this.convertMaxFracDigits(tempValue, options, ret, isNegative);\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n NumberParser.convertMaxFracDigits = function (value, options, ret, isNegative) {\n var decimalSplitValue = value.split('.');\n if (decimalSplitValue[1] && decimalSplitValue[1].length > options.maximumFractionDigits) {\n ret = +(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.maximumFractionDigits));\n }\n return ret;\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","import { isNullOrUndefined, getValue, extend, isBlazor } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n ;\n /**\n * To attach handler for given property in current context.\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n this.boundedEvents[property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n * @param {string} eventName - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n if (curObject[i].id === id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n }\n else if (handler === curObject[i].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} args - Additional parameters to pass while calling the handler.\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it was failure to call.\n * @return {void}\n */\n Observer.prototype.notify = function (property, argument, successHandler, errorHandler) {\n if (this.notExist(property)) {\n if (successHandler) {\n successHandler.call(this, argument);\n }\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var blazor = 'Blazor';\n var curObject = getValue(property, this.boundedEvents).slice(0);\n if (window[blazor]) {\n return this.blazorCallback(curObject, argument, successHandler, errorHandler, 0);\n }\n else {\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n if (successHandler) {\n successHandler.call(this, argument);\n }\n }\n };\n Observer.prototype.blazorCallback = function (objs, argument, successHandler, errorHandler, index) {\n var _this = this;\n var isTrigger = index === objs.length - 1;\n if (index < objs.length) {\n var obj_1 = objs[index];\n var promise = obj_1.handler.call(obj_1.context, argument);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n return promise;\n }\n promise.then(function (data) {\n data = typeof data === 'string' && _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data;\n extend(argument, argument, data, true);\n if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return _this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }).catch(function (data) {\n if (errorHandler) {\n errorHandler.call(obj_1.context, typeof data === 'string' &&\n _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data);\n }\n });\n }\n else if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }\n };\n // tslint:disable-next-line:no-any\n Observer.prototype.dateReviver = function (key, value) {\n var dPattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\n if (isBlazor && typeof value === 'string' && value.match(dPattern) !== null) {\n return (new Date(value));\n }\n return (value);\n };\n Observer.prototype.isJson = function (value) {\n try {\n JSON.parse(value);\n }\n catch (e) {\n return false;\n }\n return true;\n };\n /**\n * To destroy handlers in the event\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n */\n Observer.prototype.notExist = function (prop) {\n return this.boundedEvents.hasOwnProperty(prop) === false || this.boundedEvents[prop].length <= 0;\n };\n /**\n * Returns if the handler is present.\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue, isBlazor } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberParser = function (options) {\n if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date}\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number}\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option, isExcel) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData, isExcel);\n };\n /**\n * Returns the First Day of the Week\n * @returns {number}\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n /* tslint:disable no-any */\n var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = isBlazor() ? getValue('numberSymbols', numObject) : getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the numeric CLDR number base object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} currency - Specifies the currency for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumberDependable(locale, currency) {\n var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n return IntlBase.getCurrencySymbol(numObject.numericObject, currency);\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend, isBlazor } from '../util';\nimport { ParserBase as parser, getBlazorCurrencySymbol } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\nimport { isUndefined } from '../util';\nexport var blazorCultureFormats = {\n 'en-US': {\n 'd': 'M/d/y',\n 'D': 'EEEE, MMMM d, y',\n 'f': 'EEEE, MMMM d, y h:mm a',\n 'F': 'EEEE, MMMM d, y h:mm:s a',\n 'g': 'M/d/y h:mm a',\n 'G': 'M/d/yyyy h:mm:ss tt',\n 'm': 'MMMM d',\n 'M': 'MMMM d',\n 'r': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 'R': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 's': 'yyyy\\'-\\'MM\\'-\\'dd\\'T\\'HH\\':\\'mm\\':\\'ss',\n 't': 'h:mm tt',\n 'T': 'h:m:s tt',\n 'u': 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n 'U': 'dddd, MMMM d, yyyy h:mm:ss tt',\n 'y': 'MMMM yyyy',\n 'Y': 'MMMM yyyy'\n }\n};\n/**\n * Date base common constants and function for date parser and formatter.\n */\nexport var IntlBase;\n(function (IntlBase) {\n // tslint:disable-next-line:max-line-length\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n IntlBase.dateConverterMapper = /dddd|ddd/ig;\n var defaultFirstDay = 'sun';\n IntlBase.islamicRegex = /^islamic/;\n var firstDayMapper = {\n 'sun': 0,\n 'mon': 1,\n 'tue': 2,\n 'wed': 3,\n 'thu': 4,\n 'fri': 5,\n 'sat': 6\n };\n IntlBase.formatRegex = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.currencyFormatRegex = /(^[ca]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n \"1-alt-variant\": \"Common Era\"\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': \"{1} 'at' {0}\",\n 'long': \"{1} 'at' {0}\",\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y',\n },\n }\n },\n \"islamic\": {\n \"months\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"1\": \"Muh.\",\n \"2\": \"Saf.\",\n \"3\": \"Rab. I\",\n \"4\": \"Rab. II\",\n \"5\": \"Jum. I\",\n \"6\": \"Jum. II\",\n \"7\": \"Raj.\",\n \"8\": \"Sha.\",\n \"9\": \"Ram.\",\n \"10\": \"Shaw.\",\n \"11\": \"DhuÊ»l-Q.\",\n \"12\": \"DhuÊ»l-H.\"\n },\n \"narrow\": {\n \"1\": \"1\",\n \"2\": \"2\",\n \"3\": \"3\",\n \"4\": \"4\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"8\": \"8\",\n \"9\": \"9\",\n \"10\": \"10\",\n \"11\": \"11\",\n \"12\": \"12\"\n },\n \"wide\": {\n \"1\": \"Muharram\",\n \"2\": \"Safar\",\n \"3\": \"RabiÊ» I\",\n \"4\": \"RabiÊ» II\",\n \"5\": \"Jumada I\",\n \"6\": \"Jumada II\",\n \"7\": \"Rajab\",\n \"8\": \"ShaÊ»ban\",\n \"9\": \"Ramadan\",\n \"10\": \"Shawwal\",\n \"11\": \"DhuÊ»l-QiÊ»dah\",\n \"12\": \"DhuÊ»l-Hijjah\"\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n \"eras\": {\n \"eraNames\": {\n \"0\": \"AH\"\n },\n \"eraAbbr\": {\n \"0\": \"AH\"\n },\n \"eraNarrow\": {\n \"0\": \"AH\"\n }\n },\n \"dateFormats\": {\n \"full\": \"EEEE, MMMM d, y G\",\n \"long\": \"MMMM d, y G\",\n \"medium\": \"MMM d, y G\",\n \"short\": \"M/d/y GGGGG\"\n },\n \"timeFormats\": {\n \"full\": \"h:mm:ss a zzzz\",\n \"long\": \"h:mm:ss a z\",\n \"medium\": \"h:mm:ss a\",\n \"short\": \"h:mm a\"\n },\n \"dateTimeFormats\": {\n \"full\": \"{1} 'at' {0}\",\n \"long\": \"{1} 'at' {0}\",\n \"medium\": \"{1}, {0}\",\n \"short\": \"{1}, {0}\",\n \"availableFormats\": {\n \"d\": \"d\",\n \"E\": \"ccc\",\n \"Ed\": \"d E\",\n \"Ehm\": \"E h:mm a\",\n \"EHm\": \"E HH:mm\",\n \"Ehms\": \"E h:mm:ss a\",\n \"EHms\": \"E HH:mm:ss\",\n \"Gy\": \"y G\",\n \"GyMMM\": \"MMM y G\",\n \"GyMMMd\": \"MMM d, y G\",\n \"GyMMMEd\": \"E, MMM d, y G\",\n \"h\": \"h a\",\n \"H\": \"HH\",\n \"hm\": \"h:mm a\",\n \"Hm\": \"HH:mm\",\n \"hms\": \"h:mm:ss a\",\n \"Hms\": \"HH:mm:ss\",\n \"M\": \"L\",\n \"Md\": \"M/d\",\n \"MEd\": \"E, M/d\",\n \"MMM\": \"LLL\",\n \"MMMd\": \"MMM d\",\n \"MMMEd\": \"E, MMM d\",\n \"MMMMd\": \"MMMM d\",\n \"ms\": \"mm:ss\",\n \"y\": \"y G\",\n \"yyyy\": \"y G\",\n \"yyyyM\": \"M/y GGGGG\",\n \"yyyyMd\": \"M/d/y GGGGG\",\n \"yyyyMEd\": \"E, M/d/y GGGGG\",\n \"yyyyMMM\": \"MMM y G\",\n \"yyyyMMMd\": \"MMM d, y G\",\n \"yyyyMMMEd\": \"E, MMM d, y G\",\n \"yyyyMMMM\": \"MMMM y G\",\n \"yyyyQQQ\": \"QQQ y G\",\n \"yyyyQQQQ\": \"QQQQ y G\"\n }\n }\n }\n },\n 'timeZoneNames': {\n \"hourFormat\": \"+HH:mm;-HH:mm\",\n \"gmtFormat\": \"GMT{0}\",\n \"gmtZeroFormat\": \"GMT\",\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n },\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###',\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n IntlBase.blazorDefaultObject = {\n \"numbers\": {\n \"mapper\": {\n \"0\": \"0\",\n \"1\": \"1\",\n \"2\": \"2\",\n \"3\": \"3\",\n \"4\": \"4\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"8\": \"8\",\n \"9\": \"9\"\n },\n \"mapperDigits\": \"0123456789\",\n \"numberSymbols\": {\n \"decimal\": \".\",\n \"group\": \",\",\n \"plusSign\": \"+\",\n \"minusSign\": \"-\",\n \"percentSign\": \"%\",\n \"nan\": \"NaN\",\n \"timeSeparator\": \":\",\n \"infinity\": \"∞\"\n },\n \"timeSeparator\": \":\",\n \"currencySymbol\": \"$\",\n \"currencypData\": {\n \"nlead\": \"$\",\n \"nend\": \"\",\n \"groupSeparator\": \",\",\n \"groupData\": {\n \"primary\": 3\n },\n \"maximumFraction\": 2,\n \"minimumFraction\": 2\n },\n \"percentpData\": {\n \"nlead\": \"\",\n \"nend\": \"%\",\n \"groupSeparator\": \",\",\n \"groupData\": {\n \"primary\": 3\n },\n \"maximumFraction\": 2,\n \"minimumFraction\": 2\n },\n \"percentnData\": {\n \"nlead\": \"-\",\n \"nend\": \"%\",\n \"groupSeparator\": \",\",\n \"groupData\": {\n \"primary\": 3\n },\n \"maximumFraction\": 2,\n \"minimumFraction\": 2\n },\n \"currencynData\": {\n \"nlead\": \"($\",\n \"nend\": \")\",\n \"groupSeparator\": \",\",\n \"groupData\": {\n \"primary\": 3\n },\n \"maximumFraction\": 2,\n \"minimumFraction\": 2\n },\n \"decimalnData\": {\n \"nlead\": \"-\",\n \"nend\": \"\",\n \"groupData\": {\n \"primary\": 3\n },\n \"maximumFraction\": 2,\n \"minimumFraction\": 2\n },\n \"decimalpData\": {\n \"nlead\": \"\",\n \"nend\": \"\",\n \"groupData\": {\n \"primary\": 3\n },\n \"maximumFraction\": 2,\n \"minimumFraction\": 2\n }\n },\n \"dates\": {\n \"dayPeriods\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n },\n \"dateSeperator\": \"/\",\n \"days\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n },\n \"months\": {\n \"abbreviated\": {\n \"1\": \"Jan\",\n \"2\": \"Feb\",\n \"3\": \"Mar\",\n \"4\": \"Apr\",\n \"5\": \"May\",\n \"6\": \"Jun\",\n \"7\": \"Jul\",\n \"8\": \"Aug\",\n \"9\": \"Sep\",\n \"10\": \"Oct\",\n \"11\": \"Nov\",\n \"12\": \"Dec\"\n },\n \"wide\": {\n \"1\": \"January\",\n \"2\": \"February\",\n \"3\": \"March\",\n \"4\": \"April\",\n \"5\": \"May\",\n \"6\": \"June\",\n \"7\": \"July\",\n \"8\": \"August\",\n \"9\": \"September\",\n \"10\": \"October\",\n \"11\": \"November\",\n \"12\": \"December\"\n }\n },\n \"eras\": {\n \"1\": \"AD\"\n }\n }\n };\n /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n * @private\n * @param {string} skeleton\n * @param {Object} dateObject\n * @param {string} type\n * @returns {string}\n */\n function getResultantPattern(skeleton, dateObject, type, isIslamic, blazorCulture) {\n var resPattern;\n var iType = type || 'date';\n if (blazorCulture) {\n resPattern = compareBlazorDateFormats({ skeleton: skeleton }, blazorCulture).format ||\n compareBlazorDateFormats({ skeleton: 'd' }, 'en-US').format;\n }\n else {\n if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n if (iType === 'dateTime') {\n var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n }\n }\n else {\n resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n }\n if (isUndefined(resPattern) && skeleton === 'yMd') {\n resPattern = 'M/d/y';\n }\n }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n * @private\n * @param {Object} cldr\n * @param {string} culture\n * @param {boolean} isNumber\n * @returns {Dependables}\n */\n function getDependables(cldr, culture, mode, isNumber) {\n var ret = {};\n var calendartype = mode || 'gregorian';\n ret.parserObject = parser.getMainObject(cldr, culture) || (isBlazor() ? IntlBase.blazorDefaultObject : IntlBase.defaultObject);\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n var dateString = isBlazor() ? 'dates' : ('dates.calendars.' + calendartype);\n ret.dateObject = getValue(dateString, ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n * @private\n * @param {string} type\n * @param {string} numSystem\n * @param {Object} obj\n * @param {boolean} isAccount\n * @returns {string}\n */\n function getSymbolPattern(type, numSystem, obj, isAccount) {\n return getValue(type + 'Formats-numberSystem-' +\n numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n numSystem + '.standard', obj) : '');\n }\n IntlBase.getSymbolPattern = getSymbolPattern;\n function ConvertDateToWeekFormat(format) {\n var convertMapper = format.match(IntlBase.dateConverterMapper);\n if (convertMapper && isBlazor()) {\n var tempString = convertMapper[0].length === 3 ? 'EEE' : 'EEEE';\n return format.replace(IntlBase.dateConverterMapper, tempString);\n }\n return format;\n }\n IntlBase.ConvertDateToWeekFormat = ConvertDateToWeekFormat;\n function compareBlazorDateFormats(formatOptions, culture) {\n var format = formatOptions.format || formatOptions.skeleton;\n var curFormatMapper = getValue((culture || 'en-US') + '.' + format, blazorCultureFormats);\n if (!curFormatMapper) {\n curFormatMapper = getValue('en-US.' + format, blazorCultureFormats);\n }\n if (curFormatMapper) {\n curFormatMapper = ConvertDateToWeekFormat(curFormatMapper);\n formatOptions.format = curFormatMapper.replace(/tt/, 'a');\n }\n return formatOptions;\n }\n IntlBase.compareBlazorDateFormats = compareBlazorDateFormats;\n /**\n * Returns proper numeric skeleton\n * @private\n * @param {string} skeleton\n * @returns {NumericSkeleton}\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n /* tslint:disable no-any */\n ret.type = IntlBase.patternMatcher[pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n * @private\n * @param {string} pattern\n * @param {boolean} needFraction\n * @param {string} cSymbol\n * @param {boolean} fractionOnly\n * @returns {NegativeData}\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n * @private\n * @param {string} val\n * @param {string} sym\n * @returns {string}\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n return val.replace(IntlBase.defaultCurrency, sym);\n }\n return '';\n }\n /**\n * Returns currency symbol based on currency code\n * @private\n * @param {Object} numericObject\n * @param {string} currencyCode\n * @returns {string}\n */\n function getCurrencySymbol(numericObject, currencyCode, altSymbol) {\n var symbol = altSymbol ? ('.' + altSymbol) : '.symbol';\n var getCurrency = getValue('currencies.' + currencyCode + symbol, numericObject) ||\n getValue('currencies.' + currencyCode + '.symbol-alt-narrow', numericObject) || '$';\n return getCurrency;\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Dependables} obj\n * @returns {GenericFormatOptions}\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Object} numObject\n * @returns {NegativeData}\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n return cOptions;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n cOptions.useGrouping = integerPart.indexOf(',') !== -1;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n cOptions.groupSeparator = dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/\\'/g, '');\n cOptions.nend = cOptions.nend.replace(/\\'/g, '');\n }\n return cOptions;\n }\n /**\n * Returns formatting options for currency or percent type\n * @private\n * @param {string[]} parts\n * @param {string} actual\n * @param {string} symbol\n * @returns {NegativeData}\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[i];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n * @private\n * @param {Object} dateObj\n * @returns {string}\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[dâ€Mâ€]([^dâ€M])[dâ€Mâ€]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n * @private\n * @param {string} culture\n * @param {DateFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture, options.calendar);\n if (isBlazor()) {\n options = compareBlazorDateFormats(options, culture);\n }\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n // tslint:disable-next-line:no-any\n function processSymbol(actual, option) {\n if (actual.indexOf(',') !== -1) {\n // tslint:disable-next-line:no-any\n var split = actual.split(',');\n actual = (split[0] + getValue('numberMapper.numberSymbols.group', option) +\n split[1].replace('.', getValue('numberMapper.numberSymbols.decimal', option)));\n }\n else {\n actual = actual.replace('.', getValue('numberMapper.numberSymbols.decimal', option));\n }\n return actual;\n }\n /**\n * Returns Native Number pattern\n * @private\n * @param {string} culture\n * @param {NumberFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualNumberFormat(culture, options, cldr, isExcel) {\n var dependable = getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numrericObject = dependable.numericObject;\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n var type = IntlBase.formatRegex.test(options.format) ? getProperNumericSkeleton(options.format || 'N') : {};\n var dOptions = {};\n if (curMatch) {\n dOptions.numberMapper = isBlazor() ?\n extend({}, dependable.numericObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = isBlazor() ? getValue('currencySymbol', dependable.numericObject) :\n getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode, options.altSymbol);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = isBlazor() ? true : (split.length > 1);\n curObj.nData = isBlazor() ? getValue(type.type + 'nData', numrericObject) :\n getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = isBlazor() ? getValue(type.type + 'pData', numrericObject) :\n getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency' || (parseOptions.type && isBlazor())) {\n if (isBlazor() && parseOptions.type !== 'currency') {\n curObj.pData = getValue(parseOptions.type + 'pData', numrericObject);\n curObj.nData = getValue(parseOptions.type + 'nData', numrericObject);\n }\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern || isBlazor()) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent' && !isBlazor()) {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/\\'/g, '\"');\n }\n if (Object.keys(dOptions).length > 0) {\n actualPattern = !isExcel ? processSymbol(actualPattern, dOptions) : actualPattern;\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n function getWeekData(culture, cldr) {\n var firstDay = defaultFirstDay;\n var mapper = getValue('supplemental.weekData.firstDay', cldr);\n var iCulture = culture;\n if ((/en-/).test(iCulture)) {\n iCulture = iCulture.slice(3);\n }\n iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n if (mapper) {\n firstDay = mapper[iCulture] || defaultFirstDay;\n }\n return firstDayMapper[firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n /**\n * @private\n * @param pData\n * @param aCurrency\n * @param rCurrency\n */\n function replaceBlazorCurrency(pData, aCurrency, rCurrency) {\n var iCurrency = getBlazorCurrencySymbol(rCurrency);\n if (aCurrency !== iCurrency) {\n for (var _i = 0, pData_1 = pData; _i < pData_1.length; _i++) {\n var data = pData_1[_i];\n data.nend = data.nend.replace(aCurrency, iCurrency);\n data.nlead = data.nlead.replace(aCurrency, iCurrency);\n }\n }\n }\n IntlBase.replaceBlazorCurrency = replaceBlazorCurrency;\n /**\n * @private\n */\n function getWeekOfYear(date) {\n var newYear = new Date(date.getFullYear(), 0, 1);\n var day = newYear.getDay();\n var weeknum;\n day = (day >= 0 ? day : day + 7);\n var daynum = Math.floor((date.getTime() - newYear.getTime() -\n (date.getTimezoneOffset() - newYear.getTimezoneOffset()) * 60000) / 86400000) + 1;\n if (day < 4) {\n weeknum = Math.floor((daynum + day - 1) / 7) + 1;\n if (weeknum > 52) {\n var nYear = new Date(this.getFullYear() + 1, 0, 1);\n var nday = nYear.getDay();\n nday = nday >= 0 ? nday : nday + 7;\n weeknum = nday < 4 ? 1 : 53;\n }\n }\n else {\n weeknum = Math.floor((daynum + day - 1) / 7);\n }\n return weeknum;\n }\n IntlBase.getWeekOfYear = getWeekOfYear;\n})(IntlBase || (IntlBase = {}));\n","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n * var ajax = new Ajax(\"index.html\", \"GET\", true);\n * ajax.send().then(\n * function (value) {\n * console.log(value);\n * },\n * function (reason) {\n * console.log(reason);\n * });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n /**\n * Constructor for Ajax class\n * @param {string|Object} options?\n * @param {string} type?\n * @param {boolean} async?\n * @returns defaultType\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n * Send the request to server.\n * @param {any} data - To send the user data\n * @return {Promise}\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false,\n httpRequest: null\n };\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n if (!isNullOrUndefined(_this.onLoad)) {\n _this.httpRequest.onload = _this.onLoad;\n }\n if (!isNullOrUndefined(_this.onProgress)) {\n _this.httpRequest.onprogress = _this.onProgress;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onAbort)) {\n _this.httpRequest.onabort = _this.onAbort;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onError)) {\n _this.httpRequest.onerror = _this.onError;\n }\n //** Upload Events **/\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onUploadProgress)) {\n _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n }\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n eventArgs.httpRequest = _this.httpRequest;\n _this.beforeSend(eventArgs);\n }\n if (!eventArgs.cancel) {\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n }\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n //success range should be 200 to 299\n if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n if (this.emitError) {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n else {\n resolve();\n }\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n * @param {string} key Key to search in the response header\n * @returns {string}\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ \\/]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ \\/]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ \\/]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ \\/]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ \\/]([\\w.]+)/i,\n SAFARI: /(safari)[ \\/]([\\w.]+)/i,\n WEBKIT: /(webkit)[ \\/]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n * @param {string} event - type of event triggered.\n * @returns {Boolean}\n */\n Browser.getEvent = function (event) {\n // tslint:disable-next-line:no-any\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer && !Browser.isWindows ? events[event].isPointer :\n (Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '')\n : events[event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * To get the value based on provided key and regX\n * @param {string} key\n * @param {RegExp} regX\n * @returns {Object}\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = window.browserDetails;\n if ('undefined' === typeof browserDetails[key]) {\n return browserDetails[key] = regX.test(Browser.userAgent);\n }\n return browserDetails[key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties \n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n * @returns BrowserInfo\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return (window.browserDetails.isTouch =\n ('ontouchstart' in window.navigator) ||\n (window &&\n window.navigator &&\n (window.navigator.maxTouchPoints > 0)) || ('ontouchstart' in window));\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { debounce, extend } from './util';\nimport { Browser } from './browser';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * @private\n * ```html\n * <div id=\"Eventdiv\"> </div>\n * <script>\n * let node: HTMLElement = document.querySelector(\"#Eventdiv\");\n * EventHandler.addEventListener(node, \"click\", function(){\n * // click handler function code\n * });\n * EventHandler.addEventListener(node, \"onmouseover\", function(){\n * // mouseover handler function code\n * });\n * EventHandler.removeEventListener(node, \"click\", function(){\n * // click handler function code\n * });\n * eventObj.clearEvents();\n * </script>\n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n }\n else {\n return [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} debounce - Specifies at what interval given event listener should be triggered.\n * @return {Function}\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[i],\n listener: listener,\n debounce: debounceListener\n });\n if (Browser.isIE) {\n element.addEventListener(event[i], debounceListener);\n }\n else {\n element.addEventListener(event[i], debounceListener, { passive: false });\n }\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[j] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[j], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n * @param {any} element - Specifies the target html element to clear the events\n * @return {void}\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n eventData = EventHandler.addOrGetEventData(element);\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[i].name, copyData[i].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n var fn = null;\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(\\/if|\\/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar WORDIF = new RegExp('[\\\\w\"\\'@#$.\\\\s+]+', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\nvar ARR_OBJ = /^\\..*/gm;\nvar SINGLE_SLASH = /\\\\/gi;\nvar DOUBLE_SLASH = /\\\\\\\\/gi;\nvar WORDFUNC = new RegExp('[\\\\w\"\\'@#$.\\\\s+]+', 'g');\nvar WINDOWFUNC = /\\window\\./gm;\n/**\n * The function to set regular expression for template expression string.\n * @param {RegExp} value - Value expression.\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper? - Helper functions as an object.\n * @private\n */\nexport function compile(template, helper) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper);\n var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\";\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n// function used to evaluate the function expression\nfunction evalExp(str, nameSpace, helper) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n var isClass = str.match(/class=\"([^\\\"]+|)\\s{2}/g);\n var singleSpace = '';\n if (isClass) {\n isClass.forEach(function (value) {\n singleSpace = value.replace(/\\s\\s+/g, ' ');\n str = str.replace(value, singleSpace);\n });\n }\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var SPECIAL_CHAR = /\\@|\\#|\\$/gm;\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORDIF, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, true);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + 'var ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n var ftArray = matches[1].split(',');\n if (matches[1].length !== 0 && !(/data/).test(ftArray[0]) && !(/window./).test(ftArray[0])) {\n matches[1] = (fNameSpace === 'global' ? nameSpace + '.' + matches[1] : matches[1]);\n }\n var splRegexp = /\\@|\\$|\\#/gm;\n var arrObj = /\\]\\./gm;\n if (WINDOWFUNC.test(cnt) && arrObj.test(cnt) || splRegexp.test(cnt)) {\n var splArrRegexp = /\\@|\\$|\\#|\\]\\./gm;\n if (splArrRegexp.test(cnt)) {\n // tslint:disable-next-line\n cnt = '\"+ ' + (fNameSpace === 'global' ? '' : fNameSpace) + cnt.replace(matches[1], rlStr.replace(WORDFUNC, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys);\n })) + '+ \"';\n }\n }\n else {\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(/,( |)data.|,/gi, ',' + nameSpace + '.').replace(/,( |)data.window/gi, ',window'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys)) +\n '+\"';\n }\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n // handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition \n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else if (SPECIAL_CHAR.test(cnt)) {\n // template string with double slash with special character\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n }\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // template string with double slash\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // evaluate normal expression\n cnt = '\"+' + addNameSpace(cnt.replace(/\\,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '+\"';\n }\n }\n return cnt;\n });\n}\nfunction addNameSpace(str, addNS, nameSpace, ignoreList, emptyStrCheck) {\n /* istanbul ignore next */\n if (emptyStrCheck && str === '') {\n return str;\n }\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '.' + str : str);\n}\nfunction NameSpaceArrObj(str, addNS, nameSpace, ignoreList) {\n var arrObjReg = /^\\..*/gm;\n return ((addNS && !(NOT_NUMBER.test(str)) &&\n ignoreList.indexOf(str.split('.')[0]) === -1 && !(arrObjReg.test(str))) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\nfunction NameSpaceForspecialChar(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '[\"' + str : str);\n}\n// tslint:disable-next-line\nfunction SlashReplace(tempStr) {\n // tslint:disable-next-line\n var double = \"\\\\\\\\\";\n if (tempStr.match(DOUBLE_SLASH)) {\n tempStr = tempStr;\n }\n else {\n tempStr = tempStr.replace(SINGLE_SLASH, double);\n }\n return tempStr;\n}\nfunction HandleSpecialCharArrObj(str, nameSpaceNew, keys, emptyStrCheck) {\n str = str.trim();\n var windowFunc = /\\window\\./gm;\n if (!windowFunc.test(str)) {\n var quotes = /'|\"/gm;\n var splRegexp = /\\@|\\$|\\#/gm;\n if (splRegexp.test(str)) {\n str = NameSpaceForspecialChar(str, (keys.indexOf(str) === -1), nameSpaceNew, keys) + '\"]';\n }\n if (ARR_OBJ.test(str)) {\n return NameSpaceArrObj(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys);\n }\n else {\n return addNameSpace(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys, emptyStrCheck);\n }\n }\n else {\n return str;\n }\n}\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nimport { isNullOrUndefined, isBlazor } from './util';\nvar HAS_ROW = /^[\\n\\r.]+\\<tr|^\\<tr/;\nvar HAS_SVG = /^[\\n\\r.]+\\<svg|^\\<path|^\\<g/;\nexport var blazorTemplates = {};\nexport function getRandomId() {\n return '-' + Math.random().toString(36).substr(2, 5);\n}\n/**\n * Compile the template string into template function.\n * @param {string} templateString - The template string which is going to convert.\n * @param {Object} helper? - Helper functions as an object.\n * @private\n */\n//tslint:disable-next-line\nexport function compile(templateString, helper) {\n var compiler = engineObj.compile(templateString, helper);\n //tslint:disable-next-line\n return function (data, component, propName, templateId, isStringTemplate, index, element) {\n var result = compiler(data, component, propName, element);\n var blazor = 'Blazor';\n var blazorTemplateId = 'BlazorTemplateId';\n if (isBlazor() && !isStringTemplate) {\n var randomId = getRandomId();\n var blazorId = templateId + randomId;\n if (!blazorTemplates[templateId]) {\n blazorTemplates[templateId] = [];\n }\n if (!isNullOrUndefined(index)) {\n var keys = Object.keys(blazorTemplates[templateId][index]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key !== blazorTemplateId && data[key]) {\n blazorTemplates[templateId][index][key] = data[key];\n }\n if (key === blazorTemplateId) {\n blazorId = blazorTemplates[templateId][index][key];\n }\n }\n }\n else {\n data[blazorTemplateId] = blazorId;\n blazorTemplates[templateId].push(data);\n }\n // tslint:disable-next-line:no-any\n return propName === 'rowTemplate' ? [createElement('tr', { id: blazorId, className: 'e-blazor-template' })] :\n // tslint:disable-next-line:no-any\n [createElement('div', { id: blazorId, className: 'e-blazor-template' })];\n }\n if (typeof result === 'string') {\n if (HAS_SVG.test(result)) {\n var ele = createElement('svg', { innerHTML: result });\n return ele.childNodes;\n }\n else {\n var ele = createElement((HAS_ROW.test(result) ? 'table' : 'div'), { innerHTML: result });\n return ele.childNodes;\n }\n }\n else {\n return result;\n }\n };\n}\nexport function updateBlazorTemplate(templateId, templateName, comp, isEmpty, callBack) {\n var blazor = 'Blazor';\n if (isBlazor()) {\n var ejsIntrop = 'sfBlazor';\n window[ejsIntrop].updateTemplate(templateName, blazorTemplates[templateId], templateId, comp, callBack);\n if (isEmpty !== false) {\n blazorTemplates[templateId] = [];\n }\n }\n}\nexport function resetBlazorTemplate(templateId, templateName, index) {\n var templateDiv = document.getElementById(templateId);\n if (templateDiv) {\n // tslint:disable-next-line:no-any\n var innerTemplates = templateDiv.getElementsByClassName('blazor-inner-template');\n for (var i = 0; i < innerTemplates.length; i++) {\n var tempId = ' ';\n if (!isNullOrUndefined(index)) {\n tempId = innerTemplates[index].getAttribute('data-templateId');\n }\n else {\n tempId = innerTemplates[i].getAttribute('data-templateId');\n }\n var tempElement = document.getElementById(tempId);\n if (tempElement) {\n var length_1 = tempElement.childNodes.length;\n for (var j = 0; j < length_1; j++) {\n if (!isNullOrUndefined(index)) {\n innerTemplates[index].appendChild(tempElement.childNodes[0]);\n i = innerTemplates.length;\n }\n else {\n innerTemplates[i].appendChild(tempElement.childNodes[0]);\n }\n }\n }\n }\n }\n}\n/**\n * Set your custom template engine for template rendering.\n * @param {ITemplateEngine} classObj - Class object for custom template.\n * @private\n */\nexport function setTemplateEngine(classObj) {\n engineObj.compile = classObj.compile;\n}\n/**\n * Get current template engine for template rendering\n * @param {ITemplateEngine} classObj - Class object for custom template.\n * @private\n */\nexport function getTemplateEngine() {\n return engineObj.compile;\n}\n//Default Engine Class\nvar Engine = /** @class */ (function () {\n function Engine() {\n }\n Engine.prototype.compile = function (templateString, helper) {\n if (helper === void 0) { helper = {}; }\n return render(templateString, helper);\n };\n return Engine;\n}());\nvar engineObj = { compile: new Engine().compile };\n","import { isObject, getValue, extend, isNullOrUndefined } from './util';\nimport { getRandomId } from './template-engine';\nvar simpleRegex = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/;\nvar multipleSplitRegex = /(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))/g;\nvar idClassSelector = /^(\\.|#)/;\nvar selectMapper = {\n '.': 'className',\n '#': 'id'\n};\nvar classRegexString = '(?=.*?\\\\b{value}\\\\b)';\nvar assigner = { className: 'attributes.className', id: 'attributes.id', tagName: 'tagName' };\nvar emptyElements = ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'embed', 'command', 'keygen', 'source', 'track', 'wbr'];\nvar blockElements = ['a', 'address', 'article', 'applet', 'aside', 'audio', 'blockquote',\n 'button', 'canvas', 'center', 'dd', 'del', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure',\n 'footer', 'form', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'iframe', 'ins',\n 'isindex', 'li', 'map', 'menu', 'noframes', 'noscript', 'object', 'ol', 'output', 'p', 'pre', 'section',\n 'script', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'ul', 'video'];\nvar inlineElement = ['abbr', 'acronym', 'applet', 'b', 'basefont', 'bdo', 'big', 'br', 'button',\n 'cite', 'code', 'del', 'dfn', 'em', 'font', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'label', 'map',\n 'object', 'q', 's', 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'textarea',\n 'tt', 'u', 'var'];\nvar selfClosingElements = ['colgroup', 'dd', 'dt', 'li', 'options', 'p', 'td', 'tfoot', 'th',\n 'thead', 'tr'];\nvar fillAttrs = ['checked', 'compact', 'declare', 'defer', 'disabled', 'ismap', 'multiple',\n 'nohref', 'noresize', 'noshade', 'nowrap', 'readonly', 'selected'];\nvar cspElement = ['Script', 'style'];\nvar nameMapper = { 'tabindex': 'tabIndex' };\nvar startRegex = /^<([-A-Za-z0-9_]+)((?:\\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/;\nvar endRegex = /^<\\/([-A-Za-z0-9_]+)[^>]*>/;\nvar attributeRegex = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|([^>\\s]+)))?/g;\n/**\n * Namespace for VirtualDOM\n * @private\n */\nexport var VirtualDOM;\n(function (VirtualDOM) {\n //tslint:disable:no-any\n function createElement(tagName, properties) {\n var children = [];\n var extended = extend({}, {}, properties, true);\n if (!isNullOrUndefined(properties)) {\n var keys = Object.keys(properties);\n if (keys.length) {\n if (extended.innerHTML) {\n children = ConvertHTMLToJSon(extended.innerHTML);\n delete extended.innerHTML;\n }\n if (extended.attrs) {\n extend(extended, extended.attrs);\n delete extended.attrs;\n }\n if (extended.styles) {\n var valArr = extended.styles.split(';');\n var vObj = {};\n for (var i = 0, length_1 = valArr.length; i < length_1; i++) {\n var cVal = valArr[i];\n var styleSplit = cVal.split(':');\n vObj[styleSplit[0]] = styleSplit[1];\n }\n delete extended.styles;\n extended.style = vObj;\n }\n }\n }\n return {\n tagName: tagName,\n attributes: extended || {},\n children: children\n };\n }\n VirtualDOM.createElement = createElement;\n function assignParent(childrens, parent) {\n if (parent && childrens) {\n childrens.forEach(function (child) {\n if (isObject(child)) {\n if (child.parent) {\n detach(child);\n }\n child.parent = parent;\n }\n return child;\n });\n }\n }\n VirtualDOM.assignParent = assignParent;\n function append(fromElements, toElement) {\n assignParent(fromElements, toElement);\n if (toElement.children) {\n toElement.children = toElement.children.concat(fromElements);\n }\n else {\n toElement.children = [].concat(fromElements);\n }\n }\n VirtualDOM.append = append;\n function prepend(child, toElement) {\n assignParent(child, toElement);\n if (!toElement.children || !toElement.children.length) {\n toElement.children = [];\n toElement.children.concat(child);\n }\n else {\n for (var i = child.length - 1; i >= 0; i--) {\n toElement.children.unshift(child[i]);\n }\n }\n }\n VirtualDOM.prepend = prepend;\n function detach(element) {\n var parent = element.parent;\n if (parent) {\n var index = parent.children.indexOf(element);\n if (index !== -1) {\n parent.children.splice(index);\n }\n }\n return parent;\n }\n VirtualDOM.detach = detach;\n //tslint:disable-next-line\n function vDomSelector(_a) {\n var ele = _a.ele, selector = _a.selector, selectAll = _a.selectAll, immediateParent = _a.immediateParent;\n var iSelector = selector.split(' ');\n var curColl = ele;\n for (var i = 0, length_2 = iSelector.length; i < length_2; i++) {\n var isDescendant = false;\n var parent_2 = curColl;\n var curSelector = iSelector[i];\n var simpleSelector = false;\n var mapper = [];\n if (simpleRegex.test(curSelector)) {\n simpleSelector = true;\n processSelector(curSelector, mapper);\n }\n else if (curSelector.indexOf('>') === -1) {\n var splitSelector = curSelector.match(multipleSplitRegex);\n for (var _i = 0, splitSelector_1 = splitSelector; _i < splitSelector_1.length; _i++) {\n var curMap = splitSelector_1[_i];\n processSelector(curMap, mapper);\n }\n }\n else if (curSelector.indexOf('>') !== -1) {\n isDescendant = true;\n var dSelector = curSelector.split('>');\n //tslint:disable-next-line\n var dParent = ele;\n var descendent = void 0;\n var flag = 0;\n for (var _b = 0, dSelector_1 = dSelector; _b < dSelector_1.length; _b++) {\n var sel = dSelector_1[_b];\n if (!dParent) {\n break;\n }\n if (dParent.length) {\n var descendentChild = [];\n for (var _c = 0, dParent_1 = dParent; _c < dParent_1.length; _c++) {\n var child = dParent_1[_c];\n descendentChild = descendentChild.concat(vDomSelector({\n ele: child, selector: sel,\n selectAll: selectAll, immediateParent: !!flag\n }));\n }\n descendent = descendentChild;\n }\n else {\n descendent = vDomSelector({ ele: dParent, selector: sel, selectAll: selectAll, immediateParent: !!flag });\n }\n flag++;\n dParent = descendent;\n }\n if (descendent) {\n curColl = descendent;\n }\n }\n if (!isDescendant) {\n if (parent_2.length) {\n var iCurSelector = [];\n for (var _d = 0, parent_1 = parent_2; _d < parent_1.length; _d++) {\n var curParent = parent_1[_d];\n iCurSelector = iCurSelector.concat(accessElement(curParent, mapper, selectAll, immediateParent));\n }\n curColl = iCurSelector;\n }\n else {\n curColl = accessElement(parent_2, mapper, selectAll, immediateParent);\n }\n }\n }\n if (selectAll) {\n return curColl;\n }\n else {\n return curColl[0] || null;\n }\n }\n VirtualDOM.vDomSelector = vDomSelector;\n function processSelector(selector, mapper) {\n var match = selector.match(idClassSelector);\n var obj = {};\n if (match) {\n var curMapper = selectMapper[match[0]];\n if (curMapper === 'className') {\n var curObj = mapper.filter(function (obj) { return obj.hasOwnProperty('className'); })[0];\n var canPush = false;\n if (!curObj) {\n canPush = true;\n curObj = {};\n }\n var existValue = curObj[curMapper] || '';\n curObj[curMapper] = existValue + classRegexString.replace('{value}', selector.replace('.', ''));\n if (canPush) {\n mapper.push(curObj);\n }\n }\n else {\n obj[curMapper] = selector.replace(match[0], '');\n mapper.push(obj);\n }\n }\n else {\n mapper.push({ tagName: selector });\n }\n }\n //tslint:disable-next-line\n function accessElement(ele, mapper, selectAll, immediateParent) {\n if (ele.children) {\n //tslint:disable-next-line\n var temp_1 = ele.children.filter(function (child) {\n if (typeof (child) !== 'string') {\n var matched = true;\n for (var _i = 0, mapper_1 = mapper; _i < mapper_1.length; _i++) {\n var map = mapper_1[_i];\n var key = Object.keys(map)[0];\n var expected = map[key];\n var actualValue = getValue(assigner[key], child);\n if (key === 'className') {\n if (!(new RegExp('^' + expected + '.*$').test(actualValue))) {\n matched = false;\n break;\n }\n }\n else if (actualValue !== expected) {\n matched = false;\n break;\n }\n }\n return matched;\n }\n else {\n return false;\n }\n });\n if (!immediateParent && (!temp_1.length || selectAll)) {\n ele.children.forEach(function (child) {\n if (isObject(child)) {\n temp_1 = temp_1.concat(accessElement(child, mapper, selectAll));\n }\n });\n }\n return temp_1;\n }\n else {\n return [];\n }\n }\n VirtualDOM.accessElement = accessElement;\n function ConvertHTMLToJSon(htmlString) {\n var results = [];\n var isText;\n var tagArray = [];\n var backup = htmlString;\n var nodeArray = [];\n while (htmlString) {\n isText = true;\n var lastVal = getLastValue(tagArray);\n if (!lastVal || !contains(cspElement, lastVal)) {\n if (htmlString.indexOf('</') === 0) {\n var match = htmlString.match(endRegex);\n if (match) {\n htmlString = htmlString.substring(match[0].length);\n //tslint:disable-next-line\n match[0].replace(endRegex, iterateEndTag);\n }\n isText = false;\n }\n else if (htmlString.indexOf('<') === 0) {\n var match = htmlString.match(startRegex);\n if (match) {\n htmlString = htmlString.substring(match[0].length);\n //tslint:disable-next-line\n match[0].replace(startRegex, iterateStartTag);\n }\n isText = false;\n }\n if (isText) {\n var tagIndex = htmlString.indexOf('<');\n var text = tagIndex < 0 ? htmlString : htmlString.substring(0, tagIndex);\n htmlString = tagIndex < 0 ? '' : htmlString.substring(tagIndex);\n iterateText(text);\n }\n }\n else {\n //tslint:disable-next-line\n htmlString = htmlString.replace(new RegExp('([\\\\s\\\\S]*?)<\\/' + getLastValue(nodeArray) + '[^>]*>'), function (all, text) {\n text = text.replace(/<!--([\\s\\S]*?)-->|<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1$2');\n iterateText(text);\n return '';\n });\n iterateEndTag('', getLastValue(tagArray));\n }\n backup = htmlString;\n }\n function iterateStartTag(start, tagName, rest) {\n tagName = tagName.toLowerCase();\n if (contains(blockElements, tagName)) {\n while (getLastValue(tagArray) && contains(inlineElement, getLastValue(tagArray))) {\n iterateEndTag('', getLastValue(tagArray));\n }\n }\n if (contains(selfClosingElements, tagName) && getLastValue(tagArray)) {\n iterateEndTag('', tagName);\n }\n var isSelfTag = contains(emptyElements, tagName);\n if (!isSelfTag) {\n tagArray.push(tagName);\n }\n var attrs = {};\n //tslint:disable-next-line\n rest.replace(attributeRegex, function (match, name) {\n var names = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n names[_i - 2] = arguments[_i];\n }\n //tslint:disable-next-line\n var val = names[2] ? names[2] :\n names[3] ? names[3] :\n names[4] ? names[4] :\n contains(fillAttrs, name) ? name : '';\n if (name === 'style') {\n var valArr = val.split(';');\n var vObj = {};\n for (var i = 0, length_3 = valArr.length; i < length_3; i++) {\n var cVal = valArr[i];\n var styleSplit = cVal.split(':');\n vObj[styleSplit[0]] = styleSplit[1];\n }\n val = vObj;\n }\n name = nameMapper[name] || name;\n attrs[name] = val;\n //tslint:disable-next-line\n });\n attrs['data-id'] = getRandomId();\n var tagObject = {\n tagName: tagName,\n attributes: attrs\n };\n if (isSelfTag) {\n var parent_3 = (nodeArray[0] || results);\n if (parent_3.children === undefined) {\n parent_3.children = [];\n }\n tagObject.parent = parent_3;\n parent_3.children.push(tagObject);\n }\n else {\n nodeArray.unshift(tagObject);\n }\n }\n function iterateEndTag(start, tagName) {\n var pos;\n if (!tagName) {\n pos = 0;\n }\n else {\n for (pos = tagArray.length - 1; pos >= 0; pos--) {\n if (tagArray[pos] === tagName) {\n break;\n }\n }\n }\n if (pos >= 0) {\n for (var j = nodeArray.length - 1; j >= pos; j--) {\n //tslint:disable-next-line\n var node = nodeArray.shift();\n if (nodeArray.length === 0) {\n results.push(node);\n }\n else {\n var parent_4 = nodeArray[0];\n if (parent_4.children === undefined) {\n parent_4.children = [];\n }\n node.parent = parent_4;\n parent_4.children.push(node);\n }\n }\n tagArray.length = pos;\n }\n }\n function iterateText(text) {\n if (nodeArray.length === 0) {\n results.push(text);\n }\n else {\n var parent_5 = nodeArray[0];\n if (parent_5.children === undefined) {\n parent_5.children = [];\n }\n parent_5.children.push(text);\n }\n }\n return results;\n }\n VirtualDOM.ConvertHTMLToJSon = ConvertHTMLToJSon;\n //tslint:disable-next-line \n function getLastValue(arr) {\n return arr[arr.length - 1];\n }\n function contains(arr, key) {\n return arr.indexOf(key) !== -1;\n }\n //tslint:disable-next-line\n function cloneNode(ele, deep) {\n if (isObject(ele)) {\n if (deep) {\n return extend({}, {}, ele, true);\n }\n else {\n return { tagName: ele.tagName, attributes: ele.attributes };\n }\n }\n else {\n return ele.cloneNode(deep);\n }\n }\n VirtualDOM.cloneNode = cloneNode;\n function setStyleAttribute(element, attrs) {\n if (element.attributes.style) {\n (element.attributes).style = extend({}, attrs);\n }\n else {\n element.attributes.style = extend(element.attributes.style, attrs);\n }\n }\n VirtualDOM.setStyleAttribute = setStyleAttribute;\n //tslint:enable:no-any\n})(VirtualDOM || (VirtualDOM = {}));\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined, getValue, setValue, isObject, extend } from './util';\nimport { VirtualDOM } from './virtual-dom';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n * @param tagName - Name of the tag, id and class names.\n * @param properties - Object to set properties in the element.\n * @param properties.id - To set the id to the created element.\n * @param properties.className - To add classes to the element.\n * @param properties.innerHTML - To set the innerHTML to element.\n * @param properties.styles - To set the some custom styles to element.\n * @param properties.attrs - To set the attributes to element.\n * @private\n */\nexport function createElement(tagName, properties) {\n //tslint:disable-next-line\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n if (ele && classList) {\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (isObject(ele)) {\n var curClass = getValue('attributes.className', ele);\n if (isNullOrUndefined(curClass)) {\n setValue('attributes.className', className, ele);\n }\n else if (!new RegExp('\\\\b' + className + '\\\\b', 'i').test(curClass)) {\n setValue('attributes.className', curClass + ' ' + className, ele);\n }\n }\n else {\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n if (ele && classList) {\n var flag = isObject(ele);\n var canRemove = flag ? getValue('attributes.className', ele) : ele.className !== '';\n if (canRemove) {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n if (flag) {\n var classes_1 = getValue('attributes.className', ele);\n var classArr = classes_1.split(' ');\n var index = classArr.indexOf(className);\n if (index !== -1) {\n classArr.splice(index, 1);\n }\n setValue('attributes.className', classArr.join(' '), ele);\n }\n else {\n ele.classList.remove(className);\n }\n }\n }\n }\n }\n return elements;\n}\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n * @param {Element|Node} element - An element the need to check visibility\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function prepend(fromElements, toElement, isEval) {\n //tslint:disable:no-any\n if (isObject(toElement)) {\n VirtualDOM.prepend(fromElements, toElement);\n }\n else {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n if (isEval) {\n executeScript(toElement);\n }\n }\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function append(fromElements, toElement, isEval) {\n if (isObject(toElement)) {\n VirtualDOM.append(fromElements, toElement);\n }\n else {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.appendChild(docFrag);\n if (isEval) {\n executeScript(toElement);\n }\n }\n return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n * @param ele - An element is going to evaluate the script\n */\nfunction executeScript(ele) {\n var eleArray = ele.querySelectorAll('script');\n eleArray.forEach(function (element) {\n var script = document.createElement('script');\n script.text = element.innerHTML;\n document.head.appendChild(script);\n detach(script);\n });\n}\n/**\n * The function used to remove the element from the\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\nexport function detach(element) {\n if (isObject(element)) {\n return VirtualDOM.detach(element);\n }\n else {\n var parentNode = element.parentNode;\n if (parentNode) {\n return parentNode.removeChild(element);\n }\n }\n}\n//tslint: enable:no-any\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\nexport function remove(element) {\n if (isObject(element)) {\n VirtualDOM.detach(element);\n }\n else {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n }\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n if (ele) {\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (isObject(ele)) {\n var iKey = key;\n if (key === 'tabindex') {\n iKey = 'tabIndex';\n }\n ele.attributes[iKey] = attributes[key];\n }\n else {\n ele.setAttribute(key, attributes[key]);\n }\n }\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\n//tslint:disable-next-line\nexport function select(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n if (isObject(context) && needsVDOM) {\n //tslint:disable-next-line\n return VirtualDOM.vDomSelector({ ele: context, selector: selector, selectAll: false });\n }\n else {\n selector = querySelectId(selector);\n return context.querySelector(selector);\n }\n}\n/**\n * The function selects an array of element from the given context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function selectAll(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n if (isObject(context) && !needsVDOM) {\n //tslint:disable-next-line\n return VirtualDOM.vDomSelector({ ele: context, selector: selector, selectAll: true });\n }\n else {\n selector = querySelectId(selector);\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n }\n}\nfunction querySelectId(selector) {\n var charRegex = /(!|\"|\\$|%|&|'|\\(|\\)|\\*|\\/|:|;|<|=|\\?|@|\\]|\\^|`|{|}|\\||\\+|~)/g;\n if (selector.match(/#[0-9]/g) || selector.match(charRegex)) {\n var idList = selector.split(',');\n for (var i = 0; i < idList.length; i++) {\n var list = idList[i].split(' ');\n for (var j = 0; j < list.length; j++) {\n if (list[j].indexOf('#') > -1) {\n if (!list[j].match(/\\[.*\\]/)) {\n var splitId = list[j].split('#');\n if (splitId[1].match(/^\\d/) || splitId[1].match(charRegex)) {\n var setId = list[j].split('.');\n setId[0] = setId[0].replace(/#/, '[id=\\'') + '\\']';\n list[j] = setId.join('.');\n }\n }\n }\n }\n idList[i] = list.join(' ');\n }\n return idList.join(',');\n }\n return selector;\n}\n/**\n * Returns single closest parent element based on class selector.\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param {Element|Node} element - An element that need to get siblings.\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal;\n var isObj = isObject(element);\n if (isObj) {\n attrVal = getValue('attributes.' + property, element);\n }\n else {\n attrVal = element.getAttribute(property);\n }\n if (isNullOrUndefined(attrVal) && value) {\n if (!isObj) {\n element.setAttribute(property, value.toString());\n }\n else {\n element.attributes[property] = value;\n }\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n if (isObject(element)) {\n // tslint:disable-next-line:no-any\n VirtualDOM.setStyleAttribute(element, attrs);\n }\n else {\n Object.keys(attrs).forEach(function (key) {\n // tslint:disable-next-line:no-any\n element.style[key] = attrs[key];\n });\n }\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @return {void}\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\nexport function matches(element, selector) {\n //tslint:disable-next-line\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\nexport function includeInnerHTML(ele, innerHTML) {\n if (isObject(ele)) {\n if (innerHTML === '') {\n ele.children = [];\n }\n else {\n var res = VirtualDOM.ConvertHTMLToJSon(innerHTML);\n if (res.length) {\n VirtualDOM.assignParent(res, ele);\n ele.children = res;\n }\n }\n }\n else {\n ele.innerHTML = innerHTML;\n }\n}\n//tslint:disable-next-line\nexport function containsClass(ele, className) {\n if (isObject(ele)) {\n // tslint:disable-next-line:no-any\n return new RegExp('\\\\b' + className + '\\\\b', 'i').test(ele.attributes.className);\n }\n else {\n return ele.classList.contains(className);\n }\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {Element | VirtualObject}\n * @private\n */\n//tslint:disable:no-any\nexport function cloneNode(element, deep) {\n if (isObject(element)) {\n if (deep) {\n return extend({}, {}, element, true);\n }\n else {\n return { tagName: element.tagName, attributes: element.attributes };\n }\n }\n else {\n return element.cloneNode(deep);\n }\n}\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, isBlazor, getValue, extend } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp('\\]');\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n */\n function Base(options, element) {\n this.isRendered = false;\n this.isComplexArraySetter = false;\n this.isServerRendered = false;\n this.allowServerDataBinding = true;\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.bulkChanges = {};\n this.refreshing = false;\n this.ignoreCollectionWatch = false;\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange? - Specifies to true when we set properties.\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n else if (isBlazor() && this.isRendered) {\n this.serverDataBind(prop);\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n ;\n /**\n * Calls for child element data bind\n * @param {Object} obj\n * @param {Object} parent\n * @returns {void}\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[key] instanceof Array) {\n for (var _a = 0, _b = parent[key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n ;\n /* tslint:disable:no-any */\n Base.prototype.serverDataBind = function (newChanges) {\n if (!isBlazor()) {\n return;\n }\n newChanges = newChanges ? newChanges : {};\n extend(this.bulkChanges, {}, newChanges, true);\n var sfBlazor = 'sfBlazor';\n if (this.allowServerDataBinding && window[sfBlazor].updateModel) {\n window[sfBlazor].updateModel(this);\n this.bulkChanges = {};\n }\n };\n /* tslint:enable:no-any */\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (isBlazor()) {\n // tslint:disable-next-line:no-any\n var newChanges = {};\n newChanges[key] = newValue;\n this.serverDataBind(newChanges);\n }\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n ;\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} listener - Specifies the call to run when the event occurs.\n * @return {void}\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it failured to call.\n * @return {void}\n */\n Base.prototype.trigger = function (eventName, eventProp, successHandler, errorHandler) {\n var _this = this;\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n var data = this.modelObserver.notify(eventName, eventProp, successHandler, errorHandler);\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n var blazor = 'Blazor';\n if (window[blazor]) {\n var promise = handler.call(this, eventProp);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n data = promise;\n }\n else {\n promise.then(function (data) {\n if (successHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ?\n JSON.parse(data) : data;\n successHandler.call(_this, data);\n }\n }).catch(function (data) {\n if (errorHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ? JSON.parse(data) : data;\n errorHandler.call(_this, data);\n }\n });\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n else {\n handler.call(this, eventProp);\n if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n this.isProtectedOnChange = prevDetection;\n return data;\n }\n };\n /**\n * To maintain instance in base class\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-lib', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n */\n Base.prototype.destroy = function () {\n var _this = this;\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-lib']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n * @param elem Specifies the HTMLElement or element id string.\n * @param comp Specifies the component module name or Component.\n */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < ele.ej2_instances.length; i++) {\n instance = ele.ej2_instances[i];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n // tslint:disable-next-line:no-any\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n/**\n * Function to remove the child instances.\n * @return {void}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function removeChildInstance(element) {\n // tslint:disable-next-line:no-any\n var childEle = [].slice.call(element.getElementsByClassName('e-control'));\n for (var i = 0; i < childEle.length; i++) {\n var compName = childEle[i].classList[1].split('e-')[1];\n // tslint:disable-next-line:no-any\n var compInstance = getComponent(childEle[i], compName);\n if (!isUndefined(compInstance)) {\n compInstance.destroy();\n }\n }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue ? defaultValue.length : 0;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[i], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[i], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[i], false]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[curKey] = defaultValue;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[curKey] !== newValue) {\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n var _this = this;\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[curKey] = defCollection;\n }\n var ignore = ((this.controlParent !== undefined && this.controlParent.ignoreCollectionWatch)\n || this.ignoreCollectionWatch);\n if (!this.properties[curKey].hasOwnProperty('push') && !ignore) {\n ['push', 'pop'].forEach(function (extendFunc) {\n var descriptor = {\n value: complexArrayDefinedCallback(extendFunc, curKey, type, _this.properties[curKey]).bind(_this),\n configurable: true\n };\n Object.defineProperty(_this.properties[curKey], extendFunc, descriptor);\n });\n }\n if (!this.properties[curKey].hasOwnProperty('isComplexArray')) {\n Object.defineProperty(this.properties[curKey], 'isComplexArray', { value: true });\n }\n return this.properties[curKey];\n };\n}\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n this.isComplexArraySetter = true;\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.isComplexArraySetter = false;\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\nfunction complexArrayDefinedCallback(dFunc, curKey, type, prop) {\n /* tslint:disable no-function-expression */\n return function () {\n var newValue = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newValue[_i] = arguments[_i];\n }\n var keyString = this.propName ? this.getParentKey() + '.' + curKey + '-' : curKey + '-';\n switch (dFunc) {\n case 'push':\n for (var i = 0; i < newValue.length; i++) {\n Array.prototype[dFunc].apply(prop, [newValue[i]]);\n var model_1 = getArrayModel(keyString + (prop.length - 1), newValue[i], !this.controlParent, dFunc);\n this.serverDataBind(model_1, newValue[i], false, dFunc);\n }\n break;\n case 'pop':\n Array.prototype[dFunc].apply(prop);\n var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);\n break;\n }\n return prop;\n };\n /* tslint:enable no-function-expression */\n}\nfunction getArrayModel(keyString, value, isControlParent, arrayFunction) {\n var modelObject = keyString;\n if (isControlParent) {\n modelObject = {};\n modelObject[keyString] = value;\n if (value && typeof value === 'object') {\n var action = 'ejsAction';\n modelObject[keyString][action] = arrayFunction;\n }\n }\n return modelObject;\n}\n/**\n * Method used to create property. General syntax below.\n * @param {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n * @param {T} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex<Type>({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n * @param {Function} defaultType - Specifies the default value of property.\n * @param {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n * @param {T[]} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n * @param {T[]} defaultType - Specifies the default type of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n * @param {Function} defaultValue? - Specifies the default value of property.\n * @param {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n /* tslint:disable no-any */\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @return {void}\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n };\n /**\n * Triggers animation\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var startTime = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element \n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame \n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n * @param {AnimationModel} options\n * @returns {AnimationModel}\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n */\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n * @private\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n * @private\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n var Animation_1;\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n * <div id='ripple'></div>\n * <script>\n * rippleEffect(document.getElementById('ripple'));\n * </script>\n * ```\n * @private\n * @param HTMLElement element - Target element\n * @param RippleOptions rippleOptions - Ripple options .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return Function;\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n ;\n /**\n * Inject required modules in component library\n * @return {void}\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[i];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n * @return {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n * @param {ModuleDeclaration[]} moduleList\n * @returns {void}\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n * @param {string} name\n * @returns {string}\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n * @param {string} modName\n * @returns {boolean}\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID, isBlazor } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nimport { createElement, addClass, removeClass, select } from './dom';\nimport { VirtualDOM } from './virtual-dom';\nimport { getRandomId } from './template-engine';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\nexport var versionBasedStatePersistence = false;\n/**\n * To enable or disable version based statePersistence functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable versionBasedStatePersistence option.\n * @returns {void}\n */\n/* istanbul ignore next */\nexport function enableVersionBasedPersistence(status) {\n versionBasedStatePersistence = status;\n}\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n /**\n * string template option for Blazor template rendering\n * @private\n */\n _this.isStringTemplate = false;\n _this.needsID = false;\n _this.isReactHybrid = false;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n ;\n /**\n * Destroys the sub modules while destroying the widget\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n removeClass([this.element], ['e-control']);\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n /* istanbul ignore next */\n Component.prototype.accessMount = function () {\n if (this.mount && !this.isReactHybrid) {\n this.mount();\n }\n };\n /**\n * Returns the route element of the component\n */\n /* istanbul ignore next */\n Component.prototype.getRootElement = function () {\n if (this.isReactHybrid) {\n return this.actualElement;\n }\n else {\n return this.element;\n }\n };\n /**\n * Returns the persistence data for component\n */\n /* istanbul ignore next */\n //tslint:disable:no-any\n Component.prototype.getLocalData = function () {\n var eleId = this.getModuleName() + this.element.id;\n if (versionBasedStatePersistence) {\n return window.localStorage.getItem(eleId + this.ej2StatePersistenceVersion);\n }\n else {\n return window.localStorage.getItem(eleId);\n }\n };\n /**\n * Appends the control within the given HTML element\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = select(selector, document);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-control', moduleClass]);\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n this.render();\n if (!this.mount) {\n this.trigger('created');\n }\n else {\n this.accessMount();\n }\n }\n };\n /**\n * It is used to process the post rendering functionalities to a component.\n */\n Component.prototype.renderComplete = function (wrapperElement) {\n if (isBlazor()) {\n var sfBlazor = 'sfBlazor';\n // tslint:disable-next-line:no-any\n window[sfBlazor].renderComplete(this.element, wrapperElement);\n }\n this.isRendered = true;\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n ;\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @return {void}\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @return {void}\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @return {void}\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n ;\n /**\n * Dynamically injects the required modules to the component.\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {\n this.prototype.injectedModules.push(moduleList[i]);\n }\n }\n };\n /**\n * This is a instance method to create an element.\n * @private\n */\n /* istanbul ignore next */\n //tslint:disable:no-any\n Component.prototype.createElement = function (tagName, prop, isVDOM) {\n if (isVDOM && this.isReactHybrid) {\n if (prop) {\n prop = {};\n }\n prop['data-id'] = getRandomId();\n return VirtualDOM.createElement(tagName, prop);\n }\n else {\n return createElement(tagName, prop);\n }\n };\n /**\n *\n * @param handler - handler to be triggered after state Updated.\n * @param argument - Arguments to be passed to caller.\n * @private\n */\n /* istanbul ignore next */\n //tslint:disable:no-any\n Component.prototype.triggerStateChange = function (handler, argument) {\n if (this.isReactHybrid) {\n //tslint:disable:no-any\n this.setState();\n this.currentContext = { calls: handler, args: argument };\n }\n };\n // tslint: enable: no-any\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.detectFunction = function (args) {\n var prop = Object.keys(args);\n if (prop.length) {\n this[prop[0]] = args[prop[0]];\n }\n };\n Component.prototype.mergePersistData = function () {\n var data;\n if (versionBasedStatePersistence) {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion);\n }\n else {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n }\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n if (versionBasedStatePersistence) {\n window.localStorage.setItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion, this.getPersistData());\n }\n else {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n }\n };\n //tslint:disable-next-line\n Component.prototype.renderReactTemplates = function () {\n //No Code\n };\n //tslint:disable-next-line\n Component.prototype.clearTemplate = function (templateName, index) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // tslint:disable-next-line:no-any\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n return new RegExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection \n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","import { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.isComplexArraySetter = false;\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.isParentArray = isArray;\n this.setProperties(defaultValue, true);\n }\n /**\n * Updates the property changes\n * @param {boolean} val\n * @param {string} propName\n * @returns {void}\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n * @param {Object} prop\n * @param {boolean} muteOnChange\n * {void}\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n * @param {string} key\n * @param {Object} newValue\n * @param {Object} oldValue\n * @returns {void}\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue, restrictServerDataBind) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n if (!restrictServerDataBind) {\n this.serverDataBind(key, newValue, true);\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n ChildProperty.prototype.serverDataBind = function (key, value, isSaveChanges, action) {\n if (isBlazor() && !this.parentObj.isComplexArraySetter) {\n // tslint:disable-next-line:no-any\n var parent_1;\n var newChanges = {};\n var parentKey = isSaveChanges ? this.getParentKey(true) + '.' + key : key;\n /* istanbul ignore else */\n if (parentKey.indexOf('.') !== -1) {\n var complexKeys = parentKey.split('.');\n parent_1 = newChanges;\n for (var i = 0; i < complexKeys.length; i++) {\n var isFinal = i === complexKeys.length - 1;\n parent_1[complexKeys[i]] = isFinal ? value : {};\n parent_1 = isFinal ? parent_1 : parent_1[complexKeys[i]];\n }\n }\n else {\n newChanges[parentKey] = {};\n parent_1 = newChanges[parentKey];\n newChanges[parentKey][key] = value;\n }\n /* istanbul ignore next */\n if (this.isParentArray) {\n var actionProperty = 'ejsAction';\n parent_1[actionProperty] = action ? action : 'none';\n }\n this.controlParent.serverDataBind(newChanges);\n }\n };\n ChildProperty.prototype.getParentKey = function (isSaveChanges) {\n // tslint:disable-next-line:no-any\n var index = '';\n var propName = this.propName;\n /* istanbul ignore next */\n if (this.isParentArray) {\n index = this.parentObj[this.propName].indexOf(this);\n var valueLength = this.parentObj[this.propName].length;\n valueLength = isSaveChanges ? valueLength : (valueLength > 0 ? valueLength - 1 : 0);\n index = index !== -1 ? '-' + index : '-' + valueLength;\n propName = propName + index;\n }\n if (this.controlParent !== this.parentObj) {\n propName = this.parentObj.getParentKey() + '.' + this.propName + index;\n }\n return propName;\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent, isBlazor } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\nvar isDraggedObject = { isDragged: false };\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n __extends(Position, _super);\n function Position() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Position.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Position.prototype, \"top\", void 0);\n return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n * <div id='drag'>Draggable</div>\n * <script>\n * var ele = document.getElementById('drag');\n * var drag:Draggable = new Draggable(ele,{\n * clone:false,\n * drag: function(e) {\n * //drag handler code.\n * },\n * handle:'.class'\n * });\n * </script>\n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.dragLimit = Draggable_1.getDefaultPosition();\n _this.borderWidth = Draggable_1.getDefaultPosition();\n _this.padding = Draggable_1.getDefaultPosition();\n _this.diffX = 0;\n _this.prevLeft = 0;\n _this.prevTop = 0;\n _this.dragProcessStarted = false;\n /* tslint:disable no-any */\n _this.tapHoldTimer = 0;\n _this.externalInitialize = false;\n _this.diffY = 0;\n _this.parentScrollX = 0;\n _this.parentScrollY = 0;\n _this.droppables = {};\n _this.bind();\n return _this;\n }\n Draggable_1 = Draggable;\n Draggable.prototype.bind = function () {\n this.toggleEvents();\n if (Browser.isIE) {\n addClass([this.element], 'e-block-touch');\n }\n this.droppables[this.scope] = {};\n };\n Draggable.getDefaultPosition = function () {\n return extend({}, defaultPosition);\n };\n Draggable.prototype.toggleEvents = function (isUnWire) {\n var ele;\n if (!isUndefined(this.handle)) {\n ele = select(this.handle, this.element);\n }\n var handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;\n if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.touchStartEvent, handler);\n }\n else {\n EventHandler.add(ele || this.element, Browser.touchStartEvent, handler, this);\n }\n };\n /* istanbul ignore next */\n Draggable.prototype.mobileInitialize = function (evt) {\n var _this = this;\n var target = evt.currentTarget;\n this.tapHoldTimer = setTimeout(function () {\n _this.externalInitialize = true;\n _this.removeTapholdTimer();\n _this.initialize(evt, target);\n }, this.tapHoldThreshold);\n EventHandler.add(document, Browser.touchMoveEvent, this.removeTapholdTimer, this);\n EventHandler.add(document, Browser.touchEndEvent, this.removeTapholdTimer, this);\n };\n /* istanbul ignore next */\n Draggable.prototype.removeTapholdTimer = function () {\n clearTimeout(this.tapHoldTimer);\n EventHandler.remove(document, Browser.touchMoveEvent, this.removeTapholdTimer);\n EventHandler.remove(document, Browser.touchEndEvent, this.removeTapholdTimer);\n };\n /* istanbul ignore next */\n Draggable.prototype.getScrollableParent = function (element, axis) {\n var scroll = { 'vertical': 'scrollHeight', 'horizontal': 'scrollWidth' };\n var client = { 'vertical': 'clientHeight', 'horizontal': 'clientWidth' };\n if (isNullOrUndefined(element)) {\n return null;\n }\n if (element[scroll[axis]] > element[client[axis]]) {\n if (axis === 'vertical' ? element.scrollTop > 0 : element.scrollLeft > 0) {\n if (axis === 'vertical') {\n this.parentScrollY = this.parentScrollY +\n (this.parentScrollY === 0 ? element.scrollTop : element.scrollTop - this.parentScrollY);\n this.tempScrollHeight = element.scrollHeight;\n }\n else {\n this.parentScrollX = this.parentScrollX +\n (this.parentScrollX === 0 ? element.scrollLeft : element.scrollLeft - this.parentScrollX);\n this.tempScrollWidth = element.scrollWidth;\n }\n if (!isNullOrUndefined(element)) {\n return this.getScrollableParent(element.parentNode, axis);\n }\n else {\n return element;\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n };\n Draggable.prototype.getScrollableValues = function () {\n this.parentScrollX = 0;\n this.parentScrollY = 0;\n var isModalDialog = this.element.classList.contains('e-dialog') && this.element.classList.contains('e-dlg-modal');\n var verticalScrollParent = this.getScrollableParent(this.element.parentNode, 'vertical');\n var horizontalScrollParent = this.getScrollableParent(this.element.parentNode, 'horizontal');\n };\n Draggable.prototype.initialize = function (evt, curTarget) {\n this.currentStateTarget = evt.target;\n if (this.isDragStarted()) {\n return;\n }\n else {\n this.isDragStarted(true);\n this.externalInitialize = false;\n }\n this.target = (evt.currentTarget || curTarget);\n this.dragProcessStarted = false;\n if (this.abort) {\n /* tslint:disable no-any */\n var abortSelectors = this.abort;\n if (typeof abortSelectors === 'string') {\n abortSelectors = [abortSelectors];\n }\n for (var i = 0; i < abortSelectors.length; i++) {\n if (!isNullOrUndefined(closest(evt.target, abortSelectors[i]))) {\n /* istanbul ignore next */\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n return;\n }\n }\n }\n if (this.preventDefault && !isUndefined(evt.changedTouches) && evt.type !== 'touchstart') {\n evt.preventDefault();\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.getScrollableValues();\n if (evt.clientX === evt.pageX) {\n this.parentScrollX = 0;\n }\n if (evt.clientY === evt.pageY) {\n this.parentScrollY = 0;\n }\n this.relativeXPosition = intCoord.pageX - (pos.left + this.parentScrollX);\n this.relativeYPosition = intCoord.pageY - (pos.top + this.parentScrollY);\n }\n if (this.externalInitialize) {\n this.intDragStart(evt);\n }\n else {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDestroy, this);\n }\n this.toggleEvents(true);\n if (evt.type !== 'touchstart' && this.isPreventSelect) {\n document.body.classList.add('e-prevent-select');\n }\n this.externalInitialize = false;\n EventHandler.trigger(document.documentElement, Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n this.removeTapholdTimer();\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n if (isChangeTouch) {\n evt.preventDefault();\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10),\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n /* istanbul ignore next */\n if (this.isReplaceDragEle) {\n element = this.currentStateCheck(evt.target, element);\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt, this.isDragScroll);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if ((distance >= this.distance || this.externalInitialize)) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n var args = {\n event: evt,\n element: element,\n target: curTarget,\n bindEvents: isBlazor() ? this.bindDragEvents.bind(this) : null,\n dragElement: dragTargetElement\n };\n this.trigger('dragStart', args);\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n this.getScrollableValues();\n // when drag element has margin-top\n var styles = getComputedStyle(element);\n var marginTop = parseFloat(styles.marginTop);\n /* istanbul ignore next */\n if (this.clone && marginTop !== 0) {\n pos.top += marginTop;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n this.dragElePosition = { top: pos.top, left: pos.left };\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n if (!isBlazor()) {\n this.bindDragEvents(dragTargetElement);\n }\n }\n };\n Draggable.prototype.bindDragEvents = function (dragTargetElement) {\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n };\n Draggable.prototype.elementInViewport = function (el) {\n this.top = el.offsetTop;\n this.left = el.offsetLeft;\n this.width = el.offsetWidth;\n this.height = el.offsetHeight;\n while (el.offsetParent) {\n el = el.offsetParent;\n this.top += el.offsetTop;\n this.left += el.offsetLeft;\n }\n return (this.top >= window.pageYOffset &&\n this.left >= window.pageXOffset &&\n (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n // tslint:disable-next-line:max-func-body-length\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt, this.isDragScroll);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n /* tslint:disable no-any */\n var flag = true;\n if (this.hoverObject) {\n if (this.hoverObject.instance !== eleObj.instance) {\n this.triggerOutFunction(evt, eleObj);\n }\n else {\n flag = false;\n }\n }\n if (flag) {\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n }\n else if (this.hoverObject) {\n this.triggerOutFunction(evt, eleObj);\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n var styles = getComputedStyle(helperElement);\n var marginTop = parseFloat(styles.marginTop);\n if (this.dragArea) {\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft && dLeft > 0) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right + window.pageXOffset < dLeft + helperWidth && dLeft > 0) {\n left = dLeft - (dLeft - this.dragLimit.right) + window.pageXOffset - helperWidth;\n }\n else {\n left = dLeft < 0 ? this.dragLimit.left : dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top > dTop && dTop > 0) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom + window.pageYOffset < dTop + helperHeight && dTop > 0) {\n top = dTop - (dTop - this.dragLimit.bottom) + window.pageYOffset - helperHeight;\n }\n else {\n top = dTop < 0 ? this.dragLimit.top : dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n if (this.dragProcessStarted) {\n if (isNullOrUndefined(top)) {\n top = this.prevTop;\n }\n if (isNullOrUndefined(left)) {\n left = this.prevLeft;\n }\n }\n var draEleTop;\n var draEleLeft;\n if (this.dragArea) {\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - iTop);\n draEleLeft = (left - iLeft) < 0 ? this.dragElePosition.left : (left - iLeft);\n // when drag-element has margin-top\n /* istanbul ignore next */\n if (marginTop > 0) {\n if (this.clone) {\n draEleTop += this.element.offsetTop;\n if (dTop < 0) {\n if ((this.element.offsetTop + dTop) >= 0) {\n draEleTop = this.element.offsetTop + dTop;\n }\n else {\n draEleTop -= this.element.offsetTop;\n }\n }\n draEleTop = (this.dragLimit.bottom < draEleTop) ? this.dragLimit.bottom : draEleTop;\n }\n if ((top - iTop) < 0) {\n if (dTop + marginTop + (helperElement.offsetHeight - iTop) >= 0) {\n var tempDraEleTop = this.dragLimit.top + dTop - iTop;\n if ((tempDraEleTop + marginTop + iTop) < 0) {\n draEleTop -= marginTop + iTop;\n }\n else {\n draEleTop = tempDraEleTop;\n }\n }\n else {\n draEleTop -= marginTop + iTop;\n }\n }\n }\n }\n else {\n draEleTop = top - iTop;\n draEleLeft = left - iLeft;\n }\n var dragValue = this.getProcessedPositionValue({ top: draEleTop + 'px', left: draEleLeft + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll) {\n this.helperElement.scrollIntoView();\n }\n this.dragProcessStarted = true;\n this.prevLeft = left;\n this.prevTop = top;\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n Draggable.prototype.triggerOutFunction = function (evt, eleObj) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n };\n Draggable.prototype.getDragPosition = function (dragValue) {\n var temp = extend({}, dragValue);\n if (this.axis) {\n if (this.axis === 'x') {\n delete temp.top;\n }\n else if (this.axis === 'y') {\n delete temp.left;\n }\n }\n return temp;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n this.dragProcessStarted = false;\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var type = ['touchend', 'pointerup', 'mouseup'];\n if (type.indexOf(evt.type) !== -1) {\n if (this.dragStop) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n }\n this.intDestroy(evt);\n }\n else {\n this.element.setAttribute('aria-grabbed', 'false');\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.dragStopCalled = true;\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intDrop(evt, eleObj.target);\n }\n this.setGlobalDroppables(true);\n document.body.classList.remove('e-prevent-select');\n };\n /**\n * @private\n */\n Draggable.prototype.intDestroy = function (evt) {\n this.dragProcessStarted = false;\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n this.element.setAttribute('aria-grabbed', 'false');\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDrag);\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n };\n // triggers when property changed\n Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Draggable.prototype.getModuleName = function () {\n return 'draggable';\n };\n Draggable.prototype.isDragStarted = function (change) {\n if (change) {\n isDraggedObject.isDragged = !isDraggedObject.isDragged;\n }\n return isDraggedObject.isDragged;\n };\n Draggable.prototype.setDragArea = function () {\n var eleWidthBound;\n var eleHeightBound;\n var top = 0;\n var left = 0;\n var ele;\n var type = typeof this.dragArea;\n if (type === 'string') {\n ele = select(this.dragArea);\n }\n else {\n ele = this.dragArea;\n }\n if (ele) {\n var elementArea = ele.getBoundingClientRect();\n eleWidthBound = ele.scrollWidth ? ele.scrollWidth : elementArea.right - elementArea.left;\n eleHeightBound = ele.scrollHeight ? ele.scrollHeight : elementArea.bottom - elementArea.top;\n var keys = ['Top', 'Left', 'Bottom', 'Right'];\n var styles = getComputedStyle(ele);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n top = elementArea.top;\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = ele.offsetTop + this.borderWidth.top + this.padding.top;\n this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n }\n };\n Draggable.prototype.getProperTargetElement = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var ele;\n var prevStyle = this.helperElement.style.pointerEvents || '';\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1) {\n this.helperElement.style.pointerEvents = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.pointerEvents = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n /* istanbul ignore next */\n Draggable.prototype.currentStateCheck = function (ele, oldEle) {\n var elem;\n if (!isNullOrUndefined(this.currentStateTarget) && this.currentStateTarget !== ele) {\n elem = this.currentStateTarget;\n }\n else {\n elem = !isNullOrUndefined(oldEle) ? oldEle : ele;\n }\n return elem;\n };\n Draggable.prototype.getMousePosition = function (evt, isdragscroll) {\n /* tslint:disable no-any */\n var dragEle = evt.srcElement !== undefined ? evt.srcElement : evt.target;\n var intCoord = this.getCoordinates(evt);\n var pageX;\n var pageY;\n var isOffsetParent = isNullOrUndefined(dragEle.offsetParent);\n /* istanbul ignore next */\n if (isdragscroll) {\n pageX = this.clone ? intCoord.pageX :\n (intCoord.pageX + (isOffsetParent ? 0 : dragEle.offsetParent.scrollLeft)) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY :\n (intCoord.pageY + (isOffsetParent ? 0 : dragEle.offsetParent.scrollTop)) - this.relativeYPosition;\n }\n else {\n pageX = this.clone ? intCoord.pageX : (intCoord.pageX + window.pageXOffset) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY : (intCoord.pageY + window.pageYOffset) - this.relativeYPosition;\n }\n if (!this.clone) {\n this.getScrollableValues();\n pageY -= this.tempScrollHeight ? this.parentScrollY : 0;\n pageX -= this.tempScrollWidth ? this.parentScrollY : 0;\n }\n return {\n left: pageX - (this.margin.left + this.cursorAt.left),\n top: pageY - (this.margin.top + this.cursorAt.top)\n };\n };\n Draggable.prototype.getCoordinates = function (evt) {\n if (evt.type.indexOf('touch') > -1) {\n return evt.changedTouches[0];\n }\n return evt;\n };\n Draggable.prototype.getHelperElement = function (evt) {\n var element;\n if (this.clone) {\n if (this.helper) {\n element = this.helper({ sender: evt, element: this.target });\n }\n else {\n element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n document.body.appendChild(element);\n }\n }\n else {\n element = this.element;\n }\n return element;\n };\n Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n this.droppables[this.scope] = reset ? null : {\n draggable: drag,\n helper: helper,\n draggedElement: this.element\n };\n };\n Draggable.prototype.checkTargetElement = function (evt) {\n var target = this.getProperTargetElement(evt);\n var dropIns = this.getDropInstance(target);\n if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n if (parent_1) {\n dropIns = this.getDropInstance(parent_1);\n }\n }\n return { target: target, instance: dropIns };\n };\n Draggable.prototype.getDropInstance = function (ele) {\n var name = 'getModuleName';\n var drop;\n var eleInst = ele && ele.ej2_instances;\n if (eleInst) {\n for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n var inst = eleInst_1[_i];\n if (inst[name]() === 'droppable') {\n drop = inst;\n break;\n }\n }\n }\n return drop;\n };\n Draggable.prototype.destroy = function () {\n this.toggleEvents(true);\n _super.prototype.destroy.call(this);\n };\n var Draggable_1;\n __decorate([\n Complex({}, Position)\n ], Draggable.prototype, \"cursorAt\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"clone\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"dragArea\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isDragScroll\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isReplaceDragEle\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"isPreventSelect\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStop\", void 0);\n __decorate([\n Property(1)\n ], Draggable.prototype, \"distance\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"handle\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"abort\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"helper\", void 0);\n __decorate([\n Property('default')\n ], Draggable.prototype, \"scope\", void 0);\n __decorate([\n Property('')\n ], Draggable.prototype, \"dragTarget\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"axis\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"queryPositionInfo\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTailMode\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"preventDefault\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableAutoScroll\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTapHold\", void 0);\n __decorate([\n Property(750)\n ], Draggable.prototype, \"tapHoldThreshold\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n}(Base));\nexport { Draggable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n * <div id='drop'>Droppable</div>\n * <script>\n * let ele:HTMLElement = document.getElementById('drop');\n * var drag:Droppable = new Droppable(ele,{\n * accept:'.drop',\n * drop: function(e) {\n * //drop handler code.\n * }\n * });\n * </script>\n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n * <div id='testEle'> </div>;\n * <script>\n * let node: HTMLElement = document.querySelector('#testEle');\n * let kbInstance = new KeyboardEvents({\n * element: node,\n * keyConfigs:{ selectAll : 'ctrl+a' },\n * keyAction: function (e:KeyboardEvent, action:string) {\n * // handler function code\n * }\n * });\n * </script>\n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { extend, isNullOrUndefined } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n * 'fr-BE': {\n * 'button': {\n * 'check': 'vérifié'\n * }\n * }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n * check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n /**\n * Constructor\n */\n function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n * @param {string} locale\n * @returns {void}\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n * @param {string} propertyName - specifies the property for which localize text to be returned.\n * @return string\n */\n L10n.prototype.getConstant = function (prop) {\n // Removed conditional operator because this method does not return correct value when passing 0 as value in localization\n if (!isNullOrUndefined(this.currentLocale[prop])) {\n return this.currentLocale[prop];\n }\n else {\n return this.localeStrings[prop] || '';\n }\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n * @param {Object} curObject\n * @param {string} locale\n * @returns {Object}\n */\n L10n.prototype.intGetControlConstant = function (curObject, locale) {\n if ((curObject)[locale]) {\n return (curObject)[locale][this.controlName];\n }\n return null;\n };\n L10n.locale = {};\n return L10n;\n}());\nexport { L10n };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n __extends(SwipeSettings, _super);\n function SwipeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(50)\n ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n * let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n * element: node,\n * tap: function (e) {\n * // tap handler function code\n * }\n * tapHold: function (e) {\n * // tap hold handler function code\n * }\n * scroll: function (e) {\n * // scroll handler function code\n * }\n * swipe: function (e) {\n * // swipe handler function code\n * }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n __extends(Touch, _super);\n /* End-Properties */\n function Touch(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.touchAction = true;\n _this.tapCount = 0;\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = _this.updateChangeTouches(evt);\n if (evt.changedTouches !== undefined) {\n _this.touchAction = false;\n }\n _this.isTouchMoved = false;\n _this.movedDirection = '';\n _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n _this.startEventData = point;\n _this.hScrollLocked = _this.vScrollLocked = false;\n _this.tStampStart = Date.now();\n _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n }\n };\n _this.moveEvent = function (evt) {\n var point = _this.updateChangeTouches(evt);\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = _this.updateChangeTouches(evt);\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n // tslint:disable-next-line:no-any\n var isFirefox = (/Mozilla|Firefox/).test(Browser.userAgent);\n if (isFirefox && point.clientX === 0 && point.clientY === 0 && evt.type === 'mouseup') {\n _this.isTouchMoved = false;\n }\n _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var eSwipeArgs = void 0;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed \n /**\n * @private\n * @param newProp\n * @param oldProp\n */\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n * @return {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n * @returns {string}\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean}\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = this.updateChangeTouches(evt);\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = this.updateChangeTouches(evt);\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n // tslint:disable-next-line:no-any\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n Touch.prototype.updateChangeTouches = function (evt) {\n // tslint:disable-next-line:max-line-length\n var point = evt.changedTouches && evt.changedTouches.length !== 0 ? evt.changedTouches[0] : evt;\n return point;\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\n","/**\n * SanitizeHtmlHelper for sanitize the value.\n */\nimport { detach } from './dom';\nvar removeTags = [\n 'script',\n 'style',\n 'iframe[src]',\n 'link[href*=\"javascript:\"]',\n 'object[type=\"text/x-scriptlet\"]',\n 'object[data^=\"data:text/html;base64\"]',\n 'img[src^=\"data:text/html;base64\"]',\n '[src^=\"javascript:\"]',\n '[dynsrc^=\"javascript:\"]',\n '[lowsrc^=\"javascript:\"]',\n '[type^=\"application/x-shockwave-flash\"]'\n];\nvar removeAttrs = [\n { attribute: 'href', selector: '[href*=\"javascript:\"]' },\n { attribute: 'background', selector: '[background^=\"javascript:\"]' },\n { attribute: 'style', selector: '[style*=\"javascript:\"]' },\n { attribute: 'style', selector: '[style*=\"expression(\"]' },\n { attribute: 'href', selector: 'a[href^=\"data:text/html;base64\"]' }\n];\nvar jsEvents = ['onchange',\n 'onclick',\n 'onmouseover',\n 'onmouseout',\n 'onkeydown',\n 'onload',\n 'onerror',\n 'onblur',\n 'onfocus',\n 'onbeforeload',\n 'onbeforeunload',\n 'onkeyup',\n 'onsubmit',\n 'onafterprint',\n 'onbeforeonload',\n 'onbeforeprint',\n 'onblur',\n 'oncanplay',\n 'oncanplaythrough',\n 'onchange',\n 'onclick',\n 'oncontextmenu',\n 'ondblclick',\n 'ondrag',\n 'ondragend',\n 'ondragenter',\n 'ondragleave',\n 'ondragover',\n 'ondragstart',\n 'ondrop',\n 'ondurationchange',\n 'onemptied',\n 'onended',\n 'onerror',\n 'onerror',\n 'onfocus',\n 'onformchange',\n 'onforminput',\n 'onhaschange',\n 'oninput',\n 'oninvalid',\n 'onkeydown',\n 'onkeypress',\n 'onkeyup',\n 'onload',\n 'onloadeddata',\n 'onloadedmetadata',\n 'onloadstart',\n 'onmessage',\n 'onmousedown',\n 'onmousemove',\n 'onmouseout',\n 'onmouseover',\n 'onmouseup',\n 'onmousewheel',\n 'onoffline',\n 'onoine',\n 'ononline',\n 'onpagehide',\n 'onpageshow',\n 'onpause',\n 'onplay',\n 'onplaying',\n 'onpopstate',\n 'onprogress',\n 'onratechange',\n 'onreadystatechange',\n 'onredo',\n 'onresize',\n 'onscroll',\n 'onseeked',\n 'onseeking',\n 'onselect',\n 'onstalled',\n 'onstorage',\n 'onsubmit',\n 'onsuspend',\n 'ontimeupdate',\n 'onundo',\n 'onunload',\n 'onvolumechange',\n 'onwaiting',\n 'onmouseenter',\n 'onmouseleave',\n 'onmousewheel',\n 'onstart',\n 'onpropertychange'\n];\nvar SanitizeHtmlHelper = /** @class */ (function () {\n function SanitizeHtmlHelper() {\n }\n SanitizeHtmlHelper.beforeSanitize = function () {\n return {\n selectors: {\n tags: removeTags,\n attributes: removeAttrs\n }\n };\n };\n ;\n SanitizeHtmlHelper.sanitize = function (value) {\n var item = this.beforeSanitize();\n var output = this.serializeValue(item, value);\n return output;\n };\n SanitizeHtmlHelper.serializeValue = function (item, value) {\n this.removeAttrs = item.selectors.attributes;\n this.removeTags = item.selectors.tags;\n this.wrapElement = document.createElement('div');\n this.wrapElement.innerHTML = value;\n this.removeXssTags();\n this.removeJsEvents();\n this.removeXssAttrs();\n var tempEleValue = this.wrapElement.innerHTML;\n this.removeElement();\n return tempEleValue;\n };\n SanitizeHtmlHelper.removeElement = function () {\n // Removes an element's attibute to avoid html tag validation\n var nodes = this.wrapElement.children;\n for (var j = 0; j < nodes.length; j++) {\n var attribute = nodes[j].attributes;\n for (var i = 0; i < attribute.length; i++) {\n this.wrapElement.children[j].removeAttribute(attribute[i].localName);\n }\n }\n };\n SanitizeHtmlHelper.removeXssTags = function () {\n var elements = this.wrapElement.querySelectorAll(this.removeTags.join(','));\n if (elements.length > 0) {\n elements.forEach(function (element) {\n detach(element);\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeJsEvents = function () {\n var elements = this.wrapElement.querySelectorAll('[' + jsEvents.join('],[') + ']');\n if (elements.length > 0) {\n elements.forEach(function (element) {\n jsEvents.forEach(function (attr) {\n if (element.hasAttribute(attr)) {\n element.removeAttribute(attr);\n }\n });\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeXssAttrs = function () {\n var _this = this;\n this.removeAttrs.forEach(function (item, index) {\n var elements = _this.wrapElement.querySelectorAll(item.selector);\n if (elements.length > 0) {\n elements.forEach(function (element) {\n element.removeAttribute(item.attribute);\n });\n }\n });\n };\n return SanitizeHtmlHelper;\n}());\nexport { SanitizeHtmlHelper };\n","define([\"./global\", \"require\", \"module\"], function(global, require, module){\n\t// module:\n\t//\t\tdojo/has\n\t// summary:\n\t//\t\tDefines the has.js API and several feature tests used by dojo.\n\t// description:\n\t//\t\tThis module defines the has API as described by the project has.js with the following additional features:\n\t//\n\t//\t\t- the has test cache is exposed at has.cache.\n\t//\t\t- the method has.add includes a forth parameter that controls whether or not existing tests are replaced\n\t//\t\t- the loader's has cache may be optionally copied into this module's has cahce.\n\t//\n\t//\t\tThis module adopted from https://github.com/phiggins42/has.js; thanks has.js team!\n\n\t// try to pull the has implementation from the loader; both the dojo loader and bdLoad provide one\n\t// if using a foreign loader, then the has cache may be initialized via the config object for this module\n\t// WARNING: if a foreign loader defines require.has to be something other than the has.js API, then this implementation fail\n\tvar has = require.has || function(){};\n\tif(!has(\"dojo-has-api\")){\n\t\tvar\n\t\t\tisBrowser =\n\t\t\t\t// the most fundamental decision: are we in the browser?\n\t\t\t\ttypeof window != \"undefined\" &&\n\t\t\t\ttypeof location != \"undefined\" &&\n\t\t\t\ttypeof document != \"undefined\" &&\n\t\t\t\twindow.location == location && window.document == document,\n\n\t\t\t// has API variables\n\t\t\tdoc = isBrowser && document,\n\t\t\telement = doc && doc.createElement(\"DiV\"),\n\t\t\tcache = (module.config && module.config()) || {};\n\n\t\thas = function(name){\n\t\t\t// summary:\n\t\t\t//\t\tReturn the current value of the named feature.\n\t\t\t//\n\t\t\t// name: String|Integer\n\t\t\t//\t\tThe name (if a string) or identifier (if an integer) of the feature to test.\n\t\t\t//\n\t\t\t// description:\n\t\t\t//\t\tReturns the value of the feature named by name. The feature must have been\n\t\t\t//\t\tpreviously added to the cache by has.add.\n\n\t\t\treturn typeof cache[name] == \"function\" ? (cache[name] = cache[name](global, doc, element)) : cache[name]; // Boolean\n\t\t};\n\n\t\thas.cache = cache;\n\n\t\thas.add = function(name, test, now, force){\n\t\t\t// summary:\n\t\t\t//\t \tRegister a new feature test for some named feature.\n\t\t\t// name: String|Integer\n\t\t\t//\t \tThe name (if a string) or identifier (if an integer) of the feature to test.\n\t\t\t// test: Function\n\t\t\t//\t\t A test function to register. If a function, queued for testing until actually\n\t\t\t//\t\t needed. The test function should return a boolean indicating\n\t\t\t//\t \tthe presence of a feature or bug.\n\t\t\t// now: Boolean?\n\t\t\t//\t\t Optional. Omit if `test` is not a function. Provides a way to immediately\n\t\t\t//\t\t run the test and cache the result.\n\t\t\t// force: Boolean?\n\t\t\t//\t \tOptional. If the test already exists and force is truthy, then the existing\n\t\t\t//\t \ttest will be replaced; otherwise, add does not replace an existing test (that\n\t\t\t//\t \tis, by default, the first test advice wins).\n\t\t\t// example:\n\t\t\t//\t\tA redundant test, testFn with immediate execution:\n\t\t\t//\t|\thas.add(\"javascript\", function(){ return true; }, true);\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAgain with the redundantness. You can do this in your tests, but we should\n\t\t\t//\t\tnot be doing this in any internal has.js tests\n\t\t\t//\t|\thas.add(\"javascript\", true);\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tThree things are passed to the testFunction. `global`, `document`, and a generic element\n\t\t\t//\t\tfrom which to work your test should the need arise.\n\t\t\t//\t|\thas.add(\"bug-byid\", function(g, d, el){\n\t\t\t//\t|\t\t// g\t== global, typically window, yadda yadda\n\t\t\t//\t|\t\t// d\t== document object\n\t\t\t//\t|\t\t// el == the generic element. a `has` element.\n\t\t\t//\t|\t\treturn false; // fake test, byid-when-form-has-name-matching-an-id is slightly longer\n\t\t\t//\t|\t});\n\n\t\t\t(typeof cache[name]==\"undefined\" || force) && (cache[name]= test);\n\t\t\treturn now && has(name);\n\t\t};\n\n\t\t// since we're operating under a loader that doesn't provide a has API, we must explicitly initialize\n\t\t// has as it would have otherwise been initialized by the dojo loader; use has.add to the builder\n\t\t// can optimize these away iff desired\n\t\thas.add(\"host-browser\", isBrowser);\n\t\thas.add(\"host-node\", (typeof process == \"object\" && process.versions && process.versions.node && process.versions.v8));\n\t\thas.add(\"host-rhino\", (typeof load == \"function\" && (typeof Packages == \"function\" || typeof Packages == \"object\")));\n\t\thas.add(\"dom\", isBrowser);\n\t\thas.add(\"dojo-dom-ready-api\", 1);\n\t\thas.add(\"dojo-sniff\", 1);\n\t}\n\n\tif(has(\"host-browser\")){\n\t\t// Common application level tests\n\t\thas.add(\"dom-addeventlistener\", !!document.addEventListener);\n\n\t\t// Do the device and browser have touch capability?\n\t\thas.add(\"touch\", \"ontouchstart\" in document\n\t\t\t|| (\"onpointerdown\" in document && navigator.maxTouchPoints > 0)\n\t\t\t|| window.navigator.msMaxTouchPoints);\n\n\t\t// Touch events support\n\t\thas.add(\"touch-events\", \"ontouchstart\" in document);\n\n\t\t// Test if pointer events are supported and enabled, with either standard names (\"pointerdown\" etc.) or\n\t\t// IE specific names (\"MSPointerDown\" etc.). Tests are designed to work on embedded C# WebBrowser Controls\n\t\t// in addition to IE, Edge, and future versions of Firefox and Chrome.\n\t\t// Note that on IE11, has(\"pointer-events\") and has(\"MSPointer\") are both true.\n\t\thas.add(\"pointer-events\", \"pointerEnabled\" in window.navigator ?\n\t\t\t\twindow.navigator.pointerEnabled : \"PointerEvent\" in window);\n\t\thas.add(\"MSPointer\", window.navigator.msPointerEnabled);\n\t\t// The \"pointermove\"\" event is only continuously emitted in a touch environment if\n\t\t// the target node's \"touch-action\"\" CSS property is set to \"none\"\n\t\t// https://www.w3.org/TR/pointerevents/#the-touch-action-css-property\n\t\thas.add(\"touch-action\", has(\"touch\") && has(\"pointer-events\"));\n\n\t\t// I don't know if any of these tests are really correct, just a rough guess\n\t\thas.add(\"device-width\", screen.availWidth || innerWidth);\n\n\t\t// Tests for DOMNode.attributes[] behavior:\n\t\t//\t - dom-attributes-explicit - attributes[] only lists explicitly user specified attributes\n\t\t//\t - dom-attributes-specified-flag (IE8) - need to check attr.specified flag to skip attributes user didn't specify\n\t\t//\t - Otherwise, in IE6-7. attributes[] will list hundreds of values, so need to do outerHTML to get attrs instead.\n\t\tvar form = document.createElement(\"form\");\n\t\thas.add(\"dom-attributes-explicit\", form.attributes.length == 0); // W3C\n\t\thas.add(\"dom-attributes-specified-flag\", form.attributes.length > 0 && form.attributes.length < 40);\t// IE8\n\t}\n\n\thas.clearElement = function(element){\n\t\t// summary:\n\t\t//\t Deletes the contents of the element passed to test functions.\n\t\telement.innerHTML= \"\";\n\t\treturn element;\n\t};\n\n\thas.normalize = function(id, toAbsMid){\n\t\t// summary:\n\t\t//\t Resolves id into a module id based on possibly-nested tenary expression that branches on has feature test value(s).\n\t\t//\n\t\t// toAbsMid: Function\n\t\t//\t Resolves a relative module id into an absolute module id\n\t\tvar\n\t\t\ttokens = id.match(/[\\?:]|[^:\\?]*/g), i = 0,\n\t\t\tget = function(skip){\n\t\t\t\tvar term = tokens[i++];\n\t\t\t\tif(term == \":\"){\n\t\t\t\t\t// empty string module name, resolves to 0\n\t\t\t\t\treturn 0;\n\t\t\t\t}else{\n\t\t\t\t\t// postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n\t\t\t\t\tif(tokens[i++] == \"?\"){\n\t\t\t\t\t\tif(!skip && has(term)){\n\t\t\t\t\t\t\t// matched the feature, get the first value from the options\n\t\t\t\t\t\t\treturn get();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t// did not match, get the second value, passing over the first\n\t\t\t\t\t\t\tget(true);\n\t\t\t\t\t\t\treturn get(skip);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// a module\n\t\t\t\t\treturn term || 0;\n\t\t\t\t}\n\t\t\t};\n\t\tid = get();\n\t\treturn id && toAbsMid(id);\n\t};\n\n\thas.load = function(id, parentRequire, loaded){\n\t\t// summary:\n\t\t//\t\tConditional loading of AMD modules based on a has feature test value.\n\t\t// id: String\n\t\t//\t\tGives the resolved module id to load.\n\t\t// parentRequire: Function\n\t\t//\t\tThe loader require function with respect to the module that contained the plugin resource in it's\n\t\t//\t\tdependency list.\n\t\t// loaded: Function\n\t\t//\t Callback to loader that consumes result of plugin demand.\n\n\t\tif(id){\n\t\t\tparentRequire([id], loaded);\n\t\t}else{\n\t\t\tloaded();\n\t\t}\n\t};\n\n\treturn has;\n});\n","define([\"./has\"], function(has){\n\t// module:\n\t//\t\tdojo/sniff\n\n\t/*=====\n\treturn function(){\n\t\t// summary:\n\t\t//\t\tThis module sets has() flags based on the current browser.\n\t\t//\t\tIt returns the has() function.\n\t};\n\t=====*/\n\n\tif(has(\"host-browser\")){\n\t\tvar n = navigator,\n\t\t\tdua = n.userAgent,\n\t\t\tdav = n.appVersion,\n\t\t\ttv = parseFloat(dav);\n\t\thas.add(\"air\", dua.indexOf(\"AdobeAIR\") >= 0);\n\t\thas.add(\"wp\", parseFloat(dua.split(\"Windows Phone\")[1]) || undefined);\n\t\thas.add(\"msapp\", parseFloat(dua.split(\"MSAppHost/\")[1]) || undefined);\n\t\thas.add(\"khtml\", dav.indexOf(\"Konqueror\") >= 0 ? tv : undefined);\n\t\thas.add(\"edge\", parseFloat(dua.split(\"Edge/\")[1]) || undefined);\n\t\thas.add(\"opr\", parseFloat(dua.split(\"OPR/\")[1]) || undefined);\n\t\t// NOTE: https://dev.opera.com/blog/opera-user-agent-strings-opera-15-and-beyond/\n\t\thas.add(\"webkit\", !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18540\n\t\t\t&& !has(\"edge\") && parseFloat(dua.split(\"WebKit/\")[1]) || undefined);\n\t\thas.add(\"chrome\", !has(\"edge\") && !has(\"opr\")\n\t\t\t\t&& parseFloat(dua.split(\"Chrome/\")[1]) || undefined);\n\t\thas.add(\"android\", !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18528\n\t\t\t\t&& parseFloat(dua.split(\"Android \")[1]) || undefined);\n\t\thas.add(\"safari\", dav.indexOf(\"Safari\") >= 0\n\t\t\t\t&& !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18540\n\t\t\t\t&& !has(\"chrome\") && !has(\"android\") && !has(\"edge\") && !has(\"opr\") ?\n\t\t\tparseFloat(dav.split(\"Version/\")[1]) : undefined);\n\t\thas.add(\"mac\", dav.indexOf(\"Macintosh\") >= 0);\n\t\thas.add(\"quirks\", document.compatMode == \"BackCompat\");\n\t\tif(!has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18528\n\t\t\t\t&& dua.match(/(iPhone|iPod|iPad)/)){\n\t\t\tvar p = RegExp.$1.replace(/P/, \"p\");\n\t\t\tvar v = dua.match(/OS ([\\d_]+)/) ? RegExp.$1 : \"1\";\n\t\t\tvar os = parseFloat(v.replace(/_/, \".\").replace(/_/g, \"\"));\n\t\t\thas.add(p, os);\t\t// \"iphone\", \"ipad\" or \"ipod\"\n\t\t\thas.add(\"ios\", os);\n\t\t}\n\t\thas.add(\"bb\", (dua.indexOf(\"BlackBerry\") >= 0 || dua.indexOf(\"BB10\") >= 0) && parseFloat(dua.split(\"Version/\")[1]) || undefined);\n\t\thas.add(\"trident\", parseFloat(dav.split(\"Trident/\")[1]) || undefined);\n\n\t\thas.add(\"svg\", typeof SVGAngle !== \"undefined\");\n\n\t\tif(!has(\"webkit\")){\n\t\t\t// Opera\n\t\t\tif(dua.indexOf(\"Opera\") >= 0){\n\t\t\t\t// see http://dev.opera.com/articles/view/opera-ua-string-changes and http://www.useragentstring.com/pages/Opera/\n\t\t\t\t// 9.8 has both styles; <9.8, 9.9 only old style\n\t\t\t\thas.add(\"opera\", tv >= 9.8 ? parseFloat(dua.split(\"Version/\")[1]) || tv : tv);\n\t\t\t}\n\n\t\t\t// Mozilla and firefox\n\t\t\tif(dua.indexOf(\"Gecko\") >= 0 && !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1\n\t\t\t\t\t&& !has(\"khtml\") && !has(\"trident\") && !has(\"edge\")){\n\t\t\t\thas.add(\"mozilla\", tv);\n\t\t\t}\n\t\t\tif(has(\"mozilla\")){\n\t\t\t\t//We really need to get away from this. Consider a sane isGecko approach for the future.\n\t\t\t\thas.add(\"ff\", parseFloat(dua.split(\"Firefox/\")[1] || dua.split(\"Minefield/\")[1]) || undefined);\n\t\t\t}\n\n\t\t\t// IE\n\t\t\tif(document.all && !has(\"opera\")){\n\t\t\t\tvar isIE = parseFloat(dav.split(\"MSIE \")[1]) || undefined;\n\n\t\t\t\t//In cases where the page has an HTTP header or META tag with\n\t\t\t\t//X-UA-Compatible, then it is in emulation mode.\n\t\t\t\t//Make sure isIE reflects the desired version.\n\t\t\t\t//document.documentMode of 5 means quirks mode.\n\t\t\t\t//Only switch the value if documentMode's major version\n\t\t\t\t//is different from isIE's major version.\n\t\t\t\tvar mode = document.documentMode;\n\t\t\t\tif(mode && mode != 5 && Math.floor(isIE) != mode){\n\t\t\t\t\tisIE = mode;\n\t\t\t\t}\n\n\t\t\t\thas.add(\"ie\", isIE);\n\t\t\t}\n\n\t\t\t// Wii\n\t\t\thas.add(\"wii\", typeof opera != \"undefined\" && opera.wiiremote);\n\t\t}\n\t}\n\n\treturn has;\n});\n","define([\"./sniff\", \"./dom\", \"./_base/window\"], function(has, dom, win){\n\t// module:\n\t//\t\tdojo/dom-style\n\n\t// =============================\n\t// Style Functions\n\t// =============================\n\n\t// getComputedStyle drives most of the style code.\n\t// Wherever possible, reuse the returned object.\n\t//\n\t// API functions below that need to access computed styles accept an\n\t// optional computedStyle parameter.\n\t// If this parameter is omitted, the functions will call getComputedStyle themselves.\n\t// This way, calling code can access computedStyle once, and then pass the reference to\n\t// multiple API functions.\n\n\t// Although we normally eschew argument validation at this\n\t// level, here we test argument 'node' for (duck)type,\n\t// by testing nodeType, ecause 'document' is the 'parentNode' of 'body'\n\t// it is frequently sent to this function even\n\t// though it is not Element.\n\tvar getComputedStyle, style = {\n\t\t// summary:\n\t\t//\t\tThis module defines the core dojo DOM style API.\n\t};\n\tif(has(\"webkit\")){\n\t\tgetComputedStyle = function(/*DomNode*/ node){\n\t\t\tvar s;\n\t\t\tif(node.nodeType == 1){\n\t\t\t\tvar dv = node.ownerDocument.defaultView;\n\t\t\t\ts = dv.getComputedStyle(node, null);\n\t\t\t\tif(!s && node.style){\n\t\t\t\t\tnode.style.display = \"\";\n\t\t\t\t\ts = dv.getComputedStyle(node, null);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn s || {};\n\t\t};\n\t}else if(has(\"ie\") && (has(\"ie\") < 9 || has(\"quirks\"))){\n\t\tgetComputedStyle = function(node){\n\t\t\t// IE (as of 7) doesn't expose Element like sane browsers\n\t\t\t// currentStyle can be null on IE8!\n\t\t\treturn node.nodeType == 1 /* ELEMENT_NODE*/ && node.currentStyle ? node.currentStyle : {};\n\t\t};\n\t}else{\n\t\tgetComputedStyle = function(node){\n\t\t\tif(node.nodeType === 1 /* ELEMENT_NODE*/){\n\t\t\t\tvar dv = node.ownerDocument.defaultView,\n\t\t\t\t\tw = dv.opener ? dv : win.global.window;\n\t\t\t\treturn w.getComputedStyle(node, null);\n\t\t\t}\n\t\t\treturn {};\n\t\t};\n\t}\n\tstyle.getComputedStyle = getComputedStyle;\n\t/*=====\n\tstyle.getComputedStyle = function(node){\n\t\t// summary:\n\t\t//\t\tReturns a \"computed style\" object.\n\t\t//\n\t\t// description:\n\t\t//\t\tGets a \"computed style\" object which can be used to gather\n\t\t//\t\tinformation about the current state of the rendered node.\n\t\t//\n\t\t//\t\tNote that this may behave differently on different browsers.\n\t\t//\t\tValues may have different formats and value encodings across\n\t\t//\t\tbrowsers.\n\t\t//\n\t\t//\t\tNote also that this method is expensive. Wherever possible,\n\t\t//\t\treuse the returned object.\n\t\t//\n\t\t//\t\tUse the dojo/dom-style.get() method for more consistent (pixelized)\n\t\t//\t\treturn values.\n\t\t//\n\t\t// node: DOMNode\n\t\t//\t\tA reference to a DOM node. Does NOT support taking an\n\t\t//\t\tID string for speed reasons.\n\t\t// example:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.getComputedStyle(dom.byId('foo')).borderWidth;\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tReusing the returned object, avoiding multiple lookups:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tvar cs = domStyle.getComputedStyle(dom.byId(\"someNode\"));\n\t\t//\t|\t\tvar w = cs.width, h = cs.height;\n\t\t//\t|\t});\n\t\treturn; // CSS2Properties\n\t};\n\t=====*/\n\n\tvar toPixel;\n\tif(!has(\"ie\")){\n\t\ttoPixel = function(element, value){\n\t\t\t// style values can be floats, client code may want\n\t\t\t// to round for integer pixels.\n\t\t\treturn parseFloat(value) || 0;\n\t\t};\n\t}else{\n\t\ttoPixel = function(element, avalue){\n\t\t\tif(!avalue){ return 0; }\n\t\t\t// on IE7, medium is usually 4 pixels\n\t\t\tif(avalue == \"medium\"){ return 4; }\n\t\t\t// style values can be floats, client code may\n\t\t\t// want to round this value for integer pixels.\n\t\t\tif(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); }\n\t\t\tvar s = element.style, rs = element.runtimeStyle, cs = element.currentStyle,\n\t\t\t\tsLeft = s.left, rsLeft = rs.left;\n\t\t\trs.left = cs.left;\n\t\t\ttry{\n\t\t\t\t// 'avalue' may be incompatible with style.left, which can cause IE to throw\n\t\t\t\t// this has been observed for border widths using \"thin\", \"medium\", \"thick\" constants\n\t\t\t\t// those particular constants could be trapped by a lookup\n\t\t\t\t// but perhaps there are more\n\t\t\t\ts.left = avalue;\n\t\t\t\tavalue = s.pixelLeft;\n\t\t\t}catch(e){\n\t\t\t\tavalue = 0;\n\t\t\t}\n\t\t\ts.left = sLeft;\n\t\t\trs.left = rsLeft;\n\t\t\treturn avalue;\n\t\t};\n\t}\n\tstyle.toPixelValue = toPixel;\n\t/*=====\n\tstyle.toPixelValue = function(node, value){\n\t\t// summary:\n\t\t//\t\tconverts style value to pixels on IE or return a numeric value.\n\t\t// node: DOMNode\n\t\t// value: String\n\t\t// returns: Number\n\t};\n\t=====*/\n\n\t// FIXME: there opacity quirks on FF that we haven't ported over. Hrm.\n\n\tvar astr = \"DXImageTransform.Microsoft.Alpha\";\n\tvar af = function(n, f){\n\t\ttry{\n\t\t\treturn n.filters.item(astr);\n\t\t}catch(e){\n\t\t\treturn f ? {} : null;\n\t\t}\n\t};\n\n\tvar _getOpacity =\n\t\thas(\"ie\") < 9 || (has(\"ie\") < 10 && has(\"quirks\")) ? function(node){\n\t\t\ttry{\n\t\t\t\treturn af(node).Opacity / 100; // Number\n\t\t\t}catch(e){\n\t\t\t\treturn 1; // Number\n\t\t\t}\n\t\t} :\n\t\tfunction(node){\n\t\t\treturn getComputedStyle(node).opacity;\n\t\t};\n\n\tvar _setOpacity =\n\t\thas(\"ie\") < 9 || (has(\"ie\") < 10 && has(\"quirks\")) ? function(/*DomNode*/ node, /*Number*/ opacity){\n\t\t\tif(opacity === \"\"){ opacity = 1; }\n\t\t\tvar ov = opacity * 100, fullyOpaque = opacity === 1;\n\n\t\t\t// on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661),\n\t\t\t// but still update the opacity value so we can get a correct reading if it is read later:\n\t\t\t// af(node, 1).Enabled = !fullyOpaque;\n\n\t\t\tif(fullyOpaque){\n\t\t\t\tnode.style.zoom = \"\";\n\t\t\t\tif(af(node)){\n\t\t\t\t\tnode.style.filter = node.style.filter.replace(\n\t\t\t\t\t\tnew RegExp(\"\\\\s*progid:\" + astr + \"\\\\([^\\\\)]+?\\\\)\", \"i\"), \"\");\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tnode.style.zoom = 1;\n\t\t\t\tif(af(node)){\n\t\t\t\t\taf(node, 1).Opacity = ov;\n\t\t\t\t}else{\n\t\t\t\t\tnode.style.filter += \" progid:\" + astr + \"(Opacity=\" + ov + \")\";\n\t\t\t\t}\n\t\t\t\taf(node, 1).Enabled = true;\n\t\t\t}\n\n\t\t\tif(node.tagName.toLowerCase() == \"tr\"){\n\t\t\t\tfor(var td = node.firstChild; td; td = td.nextSibling){\n\t\t\t\t\tif(td.tagName.toLowerCase() == \"td\"){\n\t\t\t\t\t\t_setOpacity(td, opacity);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn opacity;\n\t\t} :\n\t\tfunction(node, opacity){\n\t\t\treturn node.style.opacity = opacity;\n\t\t};\n\n\tvar _pixelNamesCache = {\n\t\tleft: true, top: true\n\t};\n\tvar _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border\n\tfunction _toStyleValue(node, type, value){\n\t\t//TODO: should we really be doing string case conversion here? Should we cache it? Need to profile!\n\t\ttype = type.toLowerCase();\n\n\t\t// Adjustments for IE and Edge\n\t\tif(value == \"auto\"){\n\t\t\tif(type == \"height\"){ return node.offsetHeight; }\n\t\t\tif(type == \"width\"){ return node.offsetWidth; }\n\t\t}\n\t\tif(type == \"fontweight\"){\n\t\t\tswitch(value){\n\t\t\t\tcase 700: return \"bold\";\n\t\t\t\tcase 400:\n\t\t\t\tdefault: return \"normal\";\n\t\t\t}\n\t\t}\n\n\t\tif(!(type in _pixelNamesCache)){\n\t\t\t_pixelNamesCache[type] = _pixelRegExp.test(type);\n\t\t}\n\t\treturn _pixelNamesCache[type] ? toPixel(node, value) : value;\n\t}\n\n\tvar _floatAliases = {cssFloat: 1, styleFloat: 1, \"float\": 1};\n\n\t// public API\n\n\tstyle.get = function getStyle(/*DOMNode|String*/ node, /*String?*/ name){\n\t\t// summary:\n\t\t//\t\tAccesses styles on a node.\n\t\t// description:\n\t\t//\t\tGetting the style value uses the computed style for the node, so the value\n\t\t//\t\twill be a calculated value, not just the immediate node.style value.\n\t\t//\t\tAlso when getting values, use specific style names,\n\t\t//\t\tlike \"borderBottomWidth\" instead of \"border\" since compound values like\n\t\t//\t\t\"border\" are not necessarily reflected as expected.\n\t\t//\t\tIf you want to get node dimensions, use `dojo/dom-geometry.getMarginBox()`,\n\t\t//\t\t`dojo/dom-geometry.getContentBox()` or `dojo/dom-geometry.getPosition()`.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to node to get style for\n\t\t// name: String?\n\t\t//\t\tthe style property to get\n\t\t// example:\n\t\t//\t\tPassing only an ID or node returns the computed style object of\n\t\t//\t\tthe node:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.get(\"thinger\");\n\t\t//\t|\t});\n\t\t// example:\n\t\t//\t\tPassing a node and a style property returns the current\n\t\t//\t\tnormalized, computed value for that property:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.get(\"thinger\", \"opacity\"); // 1 by default\n\t\t//\t|\t});\n\n\t\tvar n = dom.byId(node), l = arguments.length, op = (name == \"opacity\");\n\t\tif(l == 2 && op){\n\t\t\treturn _getOpacity(n);\n\t\t}\n\t\tname = _floatAliases[name] ? \"cssFloat\" in n.style ? \"cssFloat\" : \"styleFloat\" : name;\n\t\tvar s = style.getComputedStyle(n);\n\t\treturn (l == 1) ? s : _toStyleValue(n, name, s[name] || n.style[name]); /* CSS2Properties||String||Number */\n\t};\n\n\tstyle.set = function setStyle(/*DOMNode|String*/ node, /*String|Object*/ name, /*String?*/ value){\n\t\t// summary:\n\t\t//\t\tSets styles on a node.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to node to set style for\n\t\t// name: String|Object\n\t\t//\t\tthe style property to set in DOM-accessor format\n\t\t//\t\t(\"borderWidth\", not \"border-width\") or an object with key/value\n\t\t//\t\tpairs suitable for setting each property.\n\t\t// value: String?\n\t\t//\t\tIf passed, sets value on the node for style, handling\n\t\t//\t\tcross-browser concerns. When setting a pixel value,\n\t\t//\t\tbe sure to include \"px\" in the value. For instance, top: \"200px\".\n\t\t//\t\tOtherwise, in some cases, some browsers will not apply the style.\n\t\t//\n\t\t// example:\n\t\t//\t\tPassing a node, a style property, and a value changes the\n\t\t//\t\tcurrent display of the node and returns the new computed value\n\t\t//\t|\trequire([\"dojo/dom-style\"], function(domStyle){\n\t\t//\t|\t\tdomStyle.set(\"thinger\", \"opacity\", 0.5); // == 0.5\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tPassing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node:\n\t\t//\t|\trequire([\"dojo/dom-style\"], function(domStyle){\n\t\t//\t|\t\tdomStyle.set(\"thinger\", {\n\t\t//\t|\t\t\t\"opacity\": 0.5,\n\t\t//\t|\t\t\t\"border\": \"3px solid black\",\n\t\t//\t|\t\t\t\"height\": \"300px\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tWhen the CSS style property is hyphenated, the JavaScript property is camelCased.\n\t\t//\t\tfont-size becomes fontSize, and so on.\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.set(\"thinger\",{\n\t\t//\t|\t\t\tfontSize:\"14pt\",\n\t\t//\t|\t\t\tletterSpacing:\"1.2em\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tdojo/NodeList implements .style() using the same syntax, omitting the \"node\" parameter, calling\n\t\t//\t\tdojo/dom-style.get() on every element of the list. See: `dojo/query` and `dojo/NodeList`\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/query\", \"dojo/NodeList-dom\"],\n\t\t//\t|\tfunction(domStyle, query){\n\t\t//\t|\t\tquery(\".someClassName\").style(\"visibility\",\"hidden\");\n\t\t//\t|\t\t// or\n\t\t//\t|\t\tquery(\"#baz > div\").style({\n\t\t//\t|\t\t\topacity:0.75,\n\t\t//\t|\t\t\tfontSize:\"13pt\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\n\t\tvar n = dom.byId(node), l = arguments.length, op = (name == \"opacity\");\n\t\tname = _floatAliases[name] ? \"cssFloat\" in n.style ? \"cssFloat\" : \"styleFloat\" : name;\n\t\tif(l == 3){\n\t\t\treturn op ? _setOpacity(n, value) : n.style[name] = value; // Number\n\t\t}\n\t\tfor(var x in name){\n\t\t\tstyle.set(node, x, name[x]);\n\t\t}\n\t\treturn style.getComputedStyle(n);\n\t};\n\n\treturn style;\n});\n","define([\"./kernel\", \"./lang\", \"../sniff\"], function(dojo, lang, has){\n// module:\n//\t\tdojo/_base/window\n\nvar ret = {\n\t// summary:\n\t//\t\tAPI to save/set/restore the global/document scope.\n\n\tglobal: dojo.global,\n\t/*=====\n\t global: {\n\t\t // summary:\n\t\t //\t\tAlias for the current window. 'global' can be modified\n\t\t //\t\tfor temporary context shifting. See also withGlobal().\n\t\t // description:\n\t\t //\t\tUse this rather than referring to 'window' to ensure your code runs\n\t\t //\t\tcorrectly in managed contexts.\n\t },\n\t =====*/\n\n\tdoc: dojo.global[\"document\"] || null,\n\t/*=====\n\tdoc: {\n\t\t// summary:\n\t\t//\t\tAlias for the current document. 'doc' can be modified\n\t\t//\t\tfor temporary context shifting. See also withDoc().\n\t\t// description:\n\t\t//\t\tUse this rather than referring to 'window.document' to ensure your code runs\n\t\t//\t\tcorrectly in managed contexts.\n\t\t// example:\n\t\t//\t|\tn.appendChild(dojo.doc.createElement('div'));\n\t},\n\t=====*/\n\n\tbody: function(/*Document?*/ doc){\n\t\t// summary:\n\t\t//\t\tReturn the body element of the specified document or of dojo/_base/window::doc.\n\t\t// example:\n\t\t//\t|\twin.body().appendChild(dojo.doc.createElement('div'));\n\n\t\t// Note: document.body is not defined for a strict xhtml document\n\t\t// Would like to memoize this, but dojo.doc can change vi dojo.withDoc().\n\t\tdoc = doc || dojo.doc;\n\t\treturn doc.body || doc.getElementsByTagName(\"body\")[0]; // Node\n\t},\n\n\tsetContext: function(/*Object*/ globalObject, /*DocumentElement*/ globalDocument){\n\t\t// summary:\n\t\t//\t\tchanges the behavior of many core Dojo functions that deal with\n\t\t//\t\tnamespace and DOM lookup, changing them to work in a new global\n\t\t//\t\tcontext (e.g., an iframe). The varibles dojo.global and dojo.doc\n\t\t//\t\tare modified as a result of calling this function and the result of\n\t\t//\t\t`dojo.body()` likewise differs.\n\t\tdojo.global = ret.global = globalObject;\n\t\tdojo.doc = ret.doc = globalDocument;\n\t},\n\n\twithGlobal: function(\t/*Object*/ globalObject,\n\t\t\t\t\t\t\t/*Function*/ callback,\n\t\t\t\t\t\t\t/*Object?*/ thisObject,\n\t\t\t\t\t\t\t/*Array?*/ cbArguments){\n\t\t// summary:\n\t\t//\t\tInvoke callback with globalObject as dojo.global and\n\t\t//\t\tglobalObject.document as dojo.doc.\n\t\t// description:\n\t\t//\t\tInvoke callback with globalObject as dojo.global and\n\t\t//\t\tglobalObject.document as dojo.doc. If provided, globalObject\n\t\t//\t\twill be executed in the context of object thisObject\n\t\t//\t\tWhen callback() returns or throws an error, the dojo.global\n\t\t//\t\tand dojo.doc will be restored to its previous state.\n\n\t\tvar oldGlob = dojo.global;\n\t\ttry{\n\t\t\tdojo.global = ret.global = globalObject;\n\t\t\treturn ret.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments);\n\t\t}finally{\n\t\t\tdojo.global = ret.global = oldGlob;\n\t\t}\n\t},\n\n\twithDoc: function(\t/*DocumentElement*/ documentObject,\n\t\t\t\t\t\t/*Function*/ callback,\n\t\t\t\t\t\t/*Object?*/ thisObject,\n\t\t\t\t\t\t/*Array?*/ cbArguments){\n\t\t// summary:\n\t\t//\t\tInvoke callback with documentObject as dojo/_base/window::doc.\n\t\t// description:\n\t\t//\t\tInvoke callback with documentObject as dojo/_base/window::doc. If provided,\n\t\t//\t\tcallback will be executed in the context of object thisObject\n\t\t//\t\tWhen callback() returns or throws an error, the dojo/_base/window::doc will\n\t\t//\t\tbe restored to its previous state.\n\n\t\tvar oldDoc = ret.doc,\n\t\t\toldQ = has(\"quirks\"),\n\t\t\toldIE = has(\"ie\"), isIE, mode, pwin;\n\n\t\ttry{\n\t\t\tdojo.doc = ret.doc = documentObject;\n\t\t\t// update dojo.isQuirks and the value of the has feature \"quirks\".\n\t\t\t// remove setting dojo.isQuirks and dojo.isIE for 2.0\n\t\t\tdojo.isQuirks = has.add(\"quirks\", dojo.doc.compatMode == \"BackCompat\", true, true); // no need to check for QuirksMode which was Opera 7 only\n\n\t\t\tif(has(\"ie\")){\n\t\t\t\tif((pwin = documentObject.parentWindow) && pwin.navigator){\n\t\t\t\t\t// re-run IE detection logic and update dojo.isIE / has(\"ie\")\n\t\t\t\t\t// (the only time parentWindow/navigator wouldn't exist is if we were not\n\t\t\t\t\t// passed an actual legitimate document object)\n\t\t\t\t\tisIE = parseFloat(pwin.navigator.appVersion.split(\"MSIE \")[1]) || undefined;\n\t\t\t\t\tmode = documentObject.documentMode;\n\t\t\t\t\tif(mode && mode != 5 && Math.floor(isIE) != mode){\n\t\t\t\t\t\tisIE = mode;\n\t\t\t\t\t}\n\t\t\t\t\tdojo.isIE = has.add(\"ie\", isIE, true, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(thisObject && typeof callback == \"string\"){\n\t\t\t\tcallback = thisObject[callback];\n\t\t\t}\n\n\t\t\treturn callback.apply(thisObject, cbArguments || []);\n\t\t}finally{\n\t\t\tdojo.doc = ret.doc = oldDoc;\n\t\t\tdojo.isQuirks = has.add(\"quirks\", oldQ, true, true);\n\t\t\tdojo.isIE = has.add(\"ie\", oldIE, true, true);\n\t\t}\n\t}\n};\n\nhas(\"extend-dojo\") && lang.mixin(dojo, ret);\n\nreturn ret;\n\n});\n","define([\"./_base/lang\", \"./_base/array\", \"./dom\"], function(lang, array, dom){\n\t// module:\n\t//\t\tdojo/dom-class\n\n\tvar className = \"className\";\n\n\t/* Part I of classList-based implementation is preserved here for posterity\n\tvar classList = \"classList\";\n\thas.add(\"dom-classList\", function(){\n\t\treturn classList in document.createElement(\"p\");\n\t});\n\t*/\n\n\t// =============================\n\t// (CSS) Class Functions\n\t// =============================\n\n\tvar cls, // exports object\n\t\tspaces = /\\s+/, a1 = [\"\"];\n\n\tfunction str2array(s){\n\t\tif(typeof s == \"string\" || s instanceof String){\n\t\t\tif(s && !spaces.test(s)){\n\t\t\t\ta1[0] = s;\n\t\t\t\treturn a1;\n\t\t\t}\n\t\t\tvar a = s.split(spaces);\n\t\t\tif(a.length && !a[0]){\n\t\t\t\ta.shift();\n\t\t\t}\n\t\t\tif(a.length && !a[a.length - 1]){\n\t\t\t\ta.pop();\n\t\t\t}\n\t\t\treturn a;\n\t\t}\n\t\t// assumed to be an array\n\t\tif(!s){\n\t\t\treturn [];\n\t\t}\n\t\treturn array.filter(s, function(x){ return x; });\n\t}\n\n\t/* Part II of classList-based implementation is preserved here for posterity\n\tif(has(\"dom-classList\")){\n\t\t// new classList version\n\t\tcls = {\n\t\t\tcontains: function containsClass(node, classStr){\n\t\t\t\tvar clslst = classStr && dom.byId(node)[classList];\n\t\t\t\treturn clslst && clslst.contains(classStr); // Boolean\n\t\t\t},\n\n\t\t\tadd: function addClass(node, classStr){\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tclassStr = str2array(classStr);\n\t\t\t\tfor(var i = 0, len = classStr.length; i < len; ++i){\n\t\t\t\t\tnode[classList].add(classStr[i]);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tremove: function removeClass(node, classStr){\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tif(classStr === undefined){\n\t\t\t\t\tnode[className] = \"\";\n\t\t\t\t}else{\n\t\t\t\t\tclassStr = str2array(classStr);\n\t\t\t\t\tfor(var i = 0, len = classStr.length; i < len; ++i){\n\t\t\t\t\t\tnode[classList].remove(classStr[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\treplace: function replaceClass(node, addClassStr, removeClassStr){\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tif(removeClassStr === undefined){\n\t\t\t\t\tnode[className] = \"\";\n\t\t\t\t}else{\n\t\t\t\t\tremoveClassStr = str2array(removeClassStr);\n\t\t\t\t\tfor(var i = 0, len = removeClassStr.length; i < len; ++i){\n\t\t\t\t\t\tnode[classList].remove(removeClassStr[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\taddClassStr = str2array(addClassStr);\n\t\t\t\tfor(i = 0, len = addClassStr.length; i < len; ++i){\n\t\t\t\t\tnode[classList].add(addClassStr[i]);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttoggle: function toggleClass(node, classStr, condition){\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tif(condition === undefined){\n\t\t\t\t\tclassStr = str2array(classStr);\n\t\t\t\t\tfor(var i = 0, len = classStr.length; i < len; ++i){\n\t\t\t\t\t\tnode[classList].toggle(classStr[i]);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tcls[condition ? \"add\" : \"remove\"](node, classStr);\n\t\t\t\t}\n\t\t\t\treturn condition; // Boolean\n\t\t\t}\n\t\t}\n\t}\n\t*/\n\n\t// regular DOM version\n\tvar fakeNode = {}; // for effective replacement\n\tcls = {\n\t\t// summary:\n\t\t//\t\tThis module defines the core dojo DOM class API.\n\n\t\tcontains: function containsClass(/*DomNode|String*/ node, /*String*/ classStr){\n\t\t\t// summary:\n\t\t\t//\t\tReturns whether or not the specified classes are a portion of the\n\t\t\t//\t\tclass list currently applied to the node.\n\t\t\t// node: String|DOMNode\n\t\t\t//\t\tString ID or DomNode reference to check the class for.\n\t\t\t// classStr: String\n\t\t\t//\t\tA string class name to look for.\n\t\t\t// example:\n\t\t\t//\t\tDo something if a node with id=\"someNode\" has class=\"aSillyClassName\" present\n\t\t\t//\t|\tif(domClass.contains(\"someNode\",\"aSillyClassName\")){ ... }\n\n\t\t\treturn ((\" \" + dom.byId(node)[className] + \" \").indexOf(\" \" + classStr + \" \") >= 0); // Boolean\n\t\t},\n\n\t\tadd: function addClass(/*DomNode|String*/ node, /*String|Array*/ classStr){\n\t\t\t// summary:\n\t\t\t//\t\tAdds the specified classes to the end of the class list on the\n\t\t\t//\t\tpassed node. Will not re-apply duplicate classes.\n\t\t\t//\n\t\t\t// node: String|DOMNode\n\t\t\t//\t\tString ID or DomNode reference to add a class string too\n\t\t\t//\n\t\t\t// classStr: String|Array\n\t\t\t//\t\tA String class name to add, or several space-separated class names,\n\t\t\t//\t\tor an array of class names.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAdd a class to some node:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.add(\"someNode\", \"anewClass\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAdd two classes at once:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.add(\"someNode\", \"firstClass secondClass\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAdd two classes at once (using array):\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.add(\"someNode\", [\"firstClass\", \"secondClass\"]);\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAvailable in `dojo/NodeList` for multiple additions\n\t\t\t//\t|\trequire([\"dojo/query\"], function(query){\n\t\t\t//\t|\t\tquery(\"ul > li\").addClass(\"firstLevel\");\n\t\t\t//\t|\t});\n\n\t\t\tnode = dom.byId(node);\n\t\t\tclassStr = str2array(classStr);\n\t\t\tvar cls = node[className], oldLen;\n\t\t\tcls = cls ? \" \" + cls + \" \" : \" \";\n\t\t\toldLen = cls.length;\n\t\t\tfor(var i = 0, len = classStr.length, c; i < len; ++i){\n\t\t\t\tc = classStr[i];\n\t\t\t\tif(c && cls.indexOf(\" \" + c + \" \") < 0){\n\t\t\t\t\tcls += c + \" \";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(oldLen < cls.length){\n\t\t\t\tnode[className] = cls.substr(1, cls.length - 2);\n\t\t\t}\n\t\t},\n\n\t\tremove: function removeClass(/*DomNode|String*/ node, /*String|Array?*/ classStr){\n\t\t\t// summary:\n\t\t\t//\t\tRemoves the specified classes from node. No `contains()`\n\t\t\t//\t\tcheck is required.\n\t\t\t//\n\t\t\t// node: String|DOMNode\n\t\t\t//\t\tString ID or DomNode reference to remove the class from.\n\t\t\t//\n\t\t\t// classStr: String|Array\n\t\t\t//\t\tAn optional String class name to remove, or several space-separated\n\t\t\t//\t\tclass names, or an array of class names. If omitted, all class names\n\t\t\t//\t\twill be deleted.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tRemove a class from some node:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.remove(\"someNode\", \"firstClass\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tRemove two classes from some node:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.remove(\"someNode\", \"firstClass secondClass\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tRemove two classes from some node (using array):\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.remove(\"someNode\", [\"firstClass\", \"secondClass\"]);\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tRemove all classes from some node:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.remove(\"someNode\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAvailable in `dojo/NodeList` for multiple removal\n\t\t\t//\t|\trequire([\"dojo/query\"], function(query){\n\t\t\t//\t|\t\tquery(\"ul > li\").removeClass(\"foo\");\n\t\t\t//\t|\t});\n\n\t\t\tnode = dom.byId(node);\n\t\t\tvar cls;\n\t\t\tif(classStr !== undefined){\n\t\t\t\tclassStr = str2array(classStr);\n\t\t\t\tcls = \" \" + node[className] + \" \";\n\t\t\t\tfor(var i = 0, len = classStr.length; i < len; ++i){\n\t\t\t\t\tcls = cls.replace(\" \" + classStr[i] + \" \", \" \");\n\t\t\t\t}\n\t\t\t\tcls = lang.trim(cls);\n\t\t\t}else{\n\t\t\t\tcls = \"\";\n\t\t\t}\n\t\t\tif(node[className] != cls){ node[className] = cls; }\n\t\t},\n\n\t\treplace: function replaceClass(/*DomNode|String*/ node, /*String|Array*/ addClassStr, /*String|Array?*/ removeClassStr){\n\t\t\t// summary:\n\t\t\t//\t\tReplaces one or more classes on a node if not present.\n\t\t\t//\t\tOperates more quickly than calling domClass.remove and domClass.add\n\t\t\t//\n\t\t\t// node: String|DOMNode\n\t\t\t//\t\tString ID or DomNode reference to remove the class from.\n\t\t\t//\n\t\t\t// addClassStr: String|Array\n\t\t\t//\t\tA String class name to add, or several space-separated class names,\n\t\t\t//\t\tor an array of class names.\n\t\t\t//\n\t\t\t// removeClassStr: String|Array?\n\t\t\t//\t\tA String class name to remove, or several space-separated class names,\n\t\t\t//\t\tor an array of class names.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.replace(\"someNode\", \"add1 add2\", \"remove1 remove2\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\tReplace all classes with addMe\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.replace(\"someNode\", \"addMe\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\tAvailable in `dojo/NodeList` for multiple toggles\n\t\t\t//\t|\trequire([\"dojo/query\"], function(query){\n\t\t\t//\t|\t\tquery(\".findMe\").replaceClass(\"addMe\", \"removeMe\");\n\t\t\t//\t|\t});\n\n\t\t\tnode = dom.byId(node);\n\t\t\tfakeNode[className] = node[className];\n\t\t\tcls.remove(fakeNode, removeClassStr);\n\t\t\tcls.add(fakeNode, addClassStr);\n\t\t\tif(node[className] !== fakeNode[className]){\n\t\t\t\tnode[className] = fakeNode[className];\n\t\t\t}\n\t\t},\n\n\t\ttoggle: function toggleClass(/*DomNode|String*/ node, /*String|Array*/ classStr, /*Boolean?*/ condition){\n\t\t\t// summary:\n\t\t\t//\t\tAdds a class to node if not present, or removes if present.\n\t\t\t//\t\tPass a boolean condition if you want to explicitly add or remove.\n\t\t\t//\t\tReturns the condition that was specified directly or indirectly.\n\t\t\t//\n\t\t\t// node: String|DOMNode\n\t\t\t//\t\tString ID or DomNode reference to toggle a class string\n\t\t\t//\n\t\t\t// classStr: String|Array\n\t\t\t//\t\tA String class name to toggle, or several space-separated class names,\n\t\t\t//\t\tor an array of class names.\n\t\t\t//\n\t\t\t// condition:\n\t\t\t//\t\tIf passed, true means to add the class, false means to remove.\n\t\t\t//\t\tOtherwise domClass.contains(node, classStr) is used to detect the class presence.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.toggle(\"someNode\", \"hovered\");\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tForcefully add a class\n\t\t\t//\t|\trequire([\"dojo/dom-class\"], function(domClass){\n\t\t\t//\t|\t\tdomClass.toggle(\"someNode\", \"hovered\", true);\n\t\t\t//\t|\t});\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAvailable in `dojo/NodeList` for multiple toggles\n\t\t\t//\t|\trequire([\"dojo/query\"], function(query){\n\t\t\t//\t|\t\tquery(\".toggleMe\").toggleClass(\"toggleMe\");\n\t\t\t//\t|\t});\n\n\t\t\tnode = dom.byId(node);\n\t\t\tif(condition === undefined){\n\t\t\t\tclassStr = str2array(classStr);\n\t\t\t\tfor(var i = 0, len = classStr.length, c; i < len; ++i){\n\t\t\t\t\tc = classStr[i];\n\t\t\t\t\tcls[cls.contains(node, c) ? \"remove\" : \"add\"](node, c);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tcls[condition ? \"add\" : \"remove\"](node, classStr);\n\t\t\t}\n\t\t\treturn condition; // Boolean\n\t\t}\n\t};\n\n\treturn cls;\n});\n","define([\"../global\", \"../has\", \"require\"], function(global, has, require){\n\t// module:\n\t//\t\tdojo/_base/config\n\n/*=====\nreturn {\n\t// summary:\n\t//\t\tThis module defines the user configuration during bootstrap.\n\t// description:\n\t//\t\tBy defining user configuration as a module value, an entire configuration can be specified in a build,\n\t//\t\tthereby eliminating the need for sniffing and or explicitly setting in the global variable dojoConfig.\n\t//\t\tAlso, when multiple instances of dojo exist in a single application, each will necessarily be located\n\t//\t\tat an unique absolute module identifier as given by the package configuration. Implementing configuration\n\t//\t\tas a module allows for specifying unique, per-instance configurations.\n\t// example:\n\t//\t\tCreate a second instance of dojo with a different, instance-unique configuration (assume the loader and\n\t//\t\tdojo.js are already loaded).\n\t//\t\t|\t// specify a configuration that creates a new instance of dojo at the absolute module identifier \"myDojo\"\n\t//\t\t|\trequire({\n\t//\t\t|\t\tpackages:[{\n\t//\t\t|\t\t\tname:\"myDojo\",\n\t//\t\t|\t\t\tlocation:\".\", //assume baseUrl points to dojo.js\n\t//\t\t|\t\t}]\n\t//\t\t|\t});\n\t//\t\t|\n\t//\t\t|\t// specify a configuration for the myDojo instance\n\t//\t\t|\tdefine(\"myDojo/config\", {\n\t//\t\t|\t\t// normal configuration variables go here, e.g.,\n\t//\t\t|\t\tlocale:\"fr-ca\"\n\t//\t\t|\t});\n\t//\t\t|\n\t//\t\t|\t// load and use the new instance of dojo\n\t//\t\t|\trequire([\"myDojo\"], function(dojo){\n\t//\t\t|\t\t// dojo is the new instance of dojo\n\t//\t\t|\t\t// use as required\n\t//\t\t|\t});\n\n\t// isDebug: Boolean\n\t//\t\tDefaults to `false`. If set to `true`, ensures that Dojo provides\n\t//\t\textended debugging feedback to the console.\n\tisDebug: false,\n\n\t// locale: String\n\t//\t\tThe locale to assume for loading localized resources in this page,\n\t//\t\tspecified according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).\n\t//\t\tMust be specified entirely in lowercase, e.g. `en-us` and `zh-cn`.\n\t//\t\tSee the documentation for `dojo.i18n` and `dojo.requireLocalization`\n\t//\t\tfor details on loading localized resources. If no locale is specified,\n\t//\t\tDojo assumes the locale of the user agent, according to `navigator.userLanguage`\n\t//\t\tor `navigator.language` properties.\n\tlocale: undefined,\n\n\t// extraLocale: Array\n\t//\t\tNo default value. Specifies additional locales whose\n\t//\t\tresources should also be loaded alongside the default locale when\n\t//\t\tcalls to `dojo.requireLocalization()` are processed.\n\textraLocale: undefined,\n\n\t// baseUrl: String\n\t//\t\tThe directory in which `dojo.js` is located. Under normal\n\t//\t\tconditions, Dojo auto-detects the correct location from which it\n\t//\t\twas loaded. You may need to manually configure `baseUrl` in cases\n\t//\t\twhere you have renamed `dojo.js` or in which `<base>` tags confuse\n\t//\t\tsome browsers (e.g. IE 6). The variable `dojo.baseUrl` is assigned\n\t//\t\teither the value of `djConfig.baseUrl` if one is provided or the\n\t//\t\tauto-detected root if not. Other modules are located relative to\n\t//\t\tthis path. The path should end in a slash.\n\tbaseUrl: undefined,\n\n\t// modulePaths: [deprecated] Object\n\t//\t\tA map of module names to paths relative to `dojo.baseUrl`. The\n\t//\t\tkey/value pairs correspond directly to the arguments which\n\t//\t\t`dojo.registerModulePath` accepts. Specifying\n\t//\t\t`djConfig.modulePaths = { \"foo\": \"../../bar\" }` is the equivalent\n\t//\t\tof calling `dojo.registerModulePath(\"foo\", \"../../bar\");`. Multiple\n\t//\t\tmodules may be configured via `djConfig.modulePaths`.\n\tmodulePaths: {},\n\n\t// addOnLoad: Function|Array\n\t//\t\tAdds a callback via dojo/ready. Useful when Dojo is added after\n\t//\t\tthe page loads and djConfig.afterOnLoad is true. Supports the same\n\t//\t\targuments as dojo/ready. When using a function reference, use\n\t//\t\t`djConfig.addOnLoad = function(){};`. For object with function name use\n\t//\t\t`djConfig.addOnLoad = [myObject, \"functionName\"];` and for object with\n\t//\t\tfunction reference use\n\t//\t\t`djConfig.addOnLoad = [myObject, function(){}];`\n\taddOnLoad: null,\n\n\t// parseOnLoad: Boolean\n\t//\t\tRun the parser after the page is loaded\n\tparseOnLoad: false,\n\n\t// require: String[]\n\t//\t\tAn array of module names to be loaded immediately after dojo.js has been included\n\t//\t\tin a page.\n\trequire: [],\n\n\t// defaultDuration: Number\n\t//\t\tDefault duration, in milliseconds, for wipe and fade animations within dijits.\n\t//\t\tAssigned to dijit.defaultDuration.\n\tdefaultDuration: 200,\n\n\t// dojoBlankHtmlUrl: String\n\t//\t\tUsed by some modules to configure an empty iframe. Used by dojo/io/iframe and\n\t//\t\tdojo/back, and dijit/popup support in IE where an iframe is needed to make sure native\n\t//\t\tcontrols do not bleed through the popups. Normally this configuration variable\n\t//\t\tdoes not need to be set, except when using cross-domain/CDN Dojo builds.\n\t//\t\tSave dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl`\n\t//\t\tto the path on your domain your copy of blank.html.\n\tdojoBlankHtmlUrl: undefined,\n\n\t// ioPublish: Boolean?\n\t//\t\tSet this to true to enable publishing of topics for the different phases of\n\t//\t\tIO operations. Publishing is done via dojo/topic.publish(). See dojo/main.__IoPublish for a list\n\t//\t\tof topics that are published.\n\tioPublish: false,\n\n\t// transparentColor: Array\n\t//\t\tArray containing the r, g, b components used as transparent color in dojo.Color;\n\t//\t\tif undefined, [255,255,255] (white) will be used.\n\ttransparentColor: undefined,\n\t\n\t// deps: Function|Array\n\t//\t\tDefines dependencies to be used before the loader has been loaded.\n\t//\t\tWhen provided, they cause the loader to execute require(deps, callback) \n\t//\t\tonce it has finished loading. Should be used with callback.\n\tdeps: undefined,\n\t\n\t// callback: Function|Array\n\t//\t\tDefines a callback to be used when dependencies are defined before \n\t//\t\tthe loader has been loaded. When provided, they cause the loader to \n\t//\t\texecute require(deps, callback) once it has finished loading. \n\t//\t\tShould be used with deps.\n\tcallback: undefined,\n\t\n\t// deferredInstrumentation: Boolean\n\t//\t\tWhether deferred instrumentation should be loaded or included\n\t//\t\tin builds.\n\tdeferredInstrumentation: true,\n\n\t// useDeferredInstrumentation: Boolean|String\n\t//\t\tWhether the deferred instrumentation should be used.\n\t//\n\t//\t\t* `\"report-rejections\"`: report each rejection as it occurs.\n\t//\t\t* `true` or `1` or `\"report-unhandled-rejections\"`: wait 1 second\n\t//\t\t\tin an attempt to detect unhandled rejections.\n\tuseDeferredInstrumentation: \"report-unhandled-rejections\"\n};\n=====*/\n\n\tvar result = {};\n\tif(has(\"dojo-config-api\")){\n\t\t// must be the dojo loader; take a shallow copy of require.rawConfig\n\t\tvar src = require.rawConfig, p;\n\t\tfor(p in src){\n\t\t\tresult[p] = src[p];\n\t\t}\n\t}else{\n\t\tvar adviseHas = function(featureSet, prefix, booting){\n\t\t\tfor(p in featureSet){\n\t\t\t\tp!=\"has\" && has.add(prefix + p, featureSet[p], 0, booting);\n\t\t\t}\n\t\t};\n\t\tresult = has(\"dojo-loader\") ?\n\t\t\t// must be a built version of the dojo loader; all config stuffed in require.rawConfig\n\t\t\trequire.rawConfig :\n\t\t\t// a foreign loader\n\t\t\tglobal.dojoConfig || global.djConfig || {};\n\t\tadviseHas(result, \"config\", 1);\n\t\tadviseHas(result.has, \"\", 1);\n\t}\n\n\tif(!result.locale && typeof navigator != \"undefined\"){\n\t\t// Default locale for browsers (ensure it's read from user-settings not download locale).\n\t\tvar language = (navigator.languages && navigator.languages.length) ? navigator.languages[0] :\n\t\t\t(navigator.language || navigator.userLanguage);\n\t\tif(language){\n\t\t\tresult.locale = language.toLowerCase();\n\t\t}\n\t}\n\n\treturn result;\n});\n\n","define([], function(){\n\n\t// module:\n\t//\t\tdojo/aspect\n\n\t\"use strict\";\n\tvar undefined;\n\tfunction advise(dispatcher, type, advice, receiveArguments){\n\t\tvar previous = dispatcher[type];\n\t\tvar around = type == \"around\";\n\t\tvar signal;\n\t\tif(around){\n\t\t\tvar advised = advice(function(){\n\t\t\t\treturn previous.advice(this, arguments);\n\t\t\t});\n\t\t\tsignal = {\n\t\t\t\tremove: function(){\n\t\t\t\t\tif(advised){\n\t\t\t\t\t\tadvised = dispatcher = advice = null;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadvice: function(target, args){\n\t\t\t\t\treturn advised ?\n\t\t\t\t\t\tadvised.apply(target, args) : // called the advised function\n\t\t\t\t\t\tprevious.advice(target, args); // cancelled, skip to next one\n\t\t\t\t}\n\t\t\t};\n\t\t}else{\n\t\t\t// create the remove handler\n\t\t\tsignal = {\n\t\t\t\tremove: function(){\n\t\t\t\t\tif(signal.advice){\n\t\t\t\t\t\tvar previous = signal.previous;\n\t\t\t\t\t\tvar next = signal.next;\n\t\t\t\t\t\tif(!next && !previous){\n\t\t\t\t\t\t\tdelete dispatcher[type];\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(previous){\n\t\t\t\t\t\t\t\tprevious.next = next;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tdispatcher[type] = next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(next){\n\t\t\t\t\t\t\t\tnext.previous = previous;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// remove the advice to signal that this signal has been removed\n\t\t\t\t\t\tdispatcher = advice = signal.advice = null;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tid: dispatcher.nextId++,\n\t\t\t\tadvice: advice,\n\t\t\t\treceiveArguments: receiveArguments\n\t\t\t};\n\t\t}\n\t\tif(previous && !around){\n\t\t\tif(type == \"after\"){\n\t\t\t\t// add the listener to the end of the list\n\t\t\t\t// note that we had to change this loop a little bit to workaround a bizarre IE10 JIT bug\n\t\t\t\twhile(previous.next && (previous = previous.next)){}\n\t\t\t\tprevious.next = signal;\n\t\t\t\tsignal.previous = previous;\n\t\t\t}else if(type == \"before\"){\n\t\t\t\t// add to beginning\n\t\t\t\tdispatcher[type] = signal;\n\t\t\t\tsignal.next = previous;\n\t\t\t\tprevious.previous = signal;\n\t\t\t}\n\t\t}else{\n\t\t\t// around or first one just replaces\n\t\t\tdispatcher[type] = signal;\n\t\t}\n\t\treturn signal;\n\t}\n\tfunction aspect(type){\n\t\treturn function(target, methodName, advice, receiveArguments){\n\t\t\tvar existing = target[methodName], dispatcher;\n\t\t\tif(!existing || existing.target != target){\n\t\t\t\t// no dispatcher in place\n\t\t\t\ttarget[methodName] = dispatcher = function(){\n\t\t\t\t\tvar executionId = dispatcher.nextId;\n\t\t\t\t\t// before advice\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\tvar before = dispatcher.before;\n\t\t\t\t\twhile(before){\n\t\t\t\t\t\tif(before.advice){\n\t\t\t\t\t\t\targs = before.advice.apply(this, args) || args;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbefore = before.next;\n\t\t\t\t\t}\n\t\t\t\t\t// around advice\n\t\t\t\t\tif(dispatcher.around){\n\t\t\t\t\t\tvar results = dispatcher.around.advice(this, args);\n\t\t\t\t\t}\n\t\t\t\t\t// after advice\n\t\t\t\t\tvar after = dispatcher.after;\n\t\t\t\t\twhile(after && after.id < executionId){\n\t\t\t\t\t\tif(after.advice){\n\t\t\t\t\t\t\tif(after.receiveArguments){\n\t\t\t\t\t\t\t\tvar newResults = after.advice.apply(this, args);\n\t\t\t\t\t\t\t\t// change the return value only if a new value was returned\n\t\t\t\t\t\t\t\tresults = newResults === undefined ? results : newResults;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tresults = after.advice.call(this, results, args);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tafter = after.next;\n\t\t\t\t\t}\n\t\t\t\t\treturn results;\n\t\t\t\t};\n\t\t\t\tif(existing){\n\t\t\t\t\tdispatcher.around = {advice: function(target, args){\n\t\t\t\t\t\treturn existing.apply(target, args);\n\t\t\t\t\t}};\n\t\t\t\t}\n\t\t\t\tdispatcher.target = target;\n\t\t\t\tdispatcher.nextId = dispatcher.nextId || 0;\n\t\t\t}\n\t\t\tvar results = advise((dispatcher || existing), type, advice, receiveArguments);\n\t\t\tadvice = null;\n\t\t\treturn results;\n\t\t};\n\t}\n\n\t// TODOC: after/before/around return object\n\n\tvar after = aspect(\"after\");\n\t/*=====\n\tafter = function(target, methodName, advice, receiveArguments){\n\t\t// summary:\n\t\t//\t\tThe \"after\" export of the aspect module is a function that can be used to attach\n\t\t//\t\t\"after\" advice to a method. This function will be executed after the original method\n\t\t//\t\tis executed. By default the function will be called with a single argument, the return\n\t\t//\t\tvalue of the original method, or the the return value of the last executed advice (if a previous one exists).\n\t\t//\t\tThe fourth (optional) argument can be set to true to so the function receives the original\n\t\t//\t\targuments (from when the original method was called) rather than the return value.\n\t\t//\t\tIf there are multiple \"after\" advisors, they are executed in the order they were registered.\n\t\t// target: Object\n\t\t//\t\tThis is the target object\n\t\t// methodName: String\n\t\t//\t\tThis is the name of the method to attach to.\n\t\t// advice: Function\n\t\t//\t\tThis is function to be called after the original method\n\t\t// receiveArguments: Boolean?\n\t\t//\t\tIf this is set to true, the advice function receives the original arguments (from when the original mehtod\n\t\t//\t\twas called) rather than the return value of the original/previous method.\n\t\t// returns:\n\t\t//\t\tA signal object that can be used to cancel the advice. If remove() is called on this signal object, it will\n\t\t//\t\tstop the advice function from being executed.\n\t};\n\t=====*/\n\n\tvar before = aspect(\"before\");\n\t/*=====\n\tbefore = function(target, methodName, advice){\n\t\t// summary:\n\t\t//\t\tThe \"before\" export of the aspect module is a function that can be used to attach\n\t\t//\t\t\"before\" advice to a method. This function will be executed before the original method\n\t\t//\t\tis executed. This function will be called with the arguments used to call the method.\n\t\t//\t\tThis function may optionally return an array as the new arguments to use to call\n\t\t//\t\tthe original method (or the previous, next-to-execute before advice, if one exists).\n\t\t//\t\tIf the before method doesn't return anything (returns undefined) the original arguments\n\t\t//\t\twill be preserved.\n\t\t//\t\tIf there are multiple \"before\" advisors, they are executed in the reverse order they were registered.\n\t\t// target: Object\n\t\t//\t\tThis is the target object\n\t\t// methodName: String\n\t\t//\t\tThis is the name of the method to attach to.\n\t\t// advice: Function\n\t\t//\t\tThis is function to be called before the original method\n\t};\n\t=====*/\n\n\tvar around = aspect(\"around\");\n\t/*=====\n\t around = function(target, methodName, advice){\n\t\t// summary:\n\t\t//\t\tThe \"around\" export of the aspect module is a function that can be used to attach\n\t\t//\t\t\"around\" advice to a method. The advisor function is immediately executed when\n\t\t//\t\tthe around() is called, is passed a single argument that is a function that can be\n\t\t//\t\tcalled to continue execution of the original method (or the next around advisor).\n\t\t//\t\tThe advisor function should return a function, and this function will be called whenever\n\t\t//\t\tthe method is called. It will be called with the arguments used to call the method.\n\t\t//\t\tWhatever this function returns will be returned as the result of the method call (unless after advise changes it).\n\t\t// example:\n\t\t//\t\tIf there are multiple \"around\" advisors, the most recent one is executed first,\n\t\t//\t\twhich can then delegate to the next one and so on. For example:\n\t\t//\t\t|\taround(obj, \"foo\", function(originalFoo){\n\t\t//\t\t|\t\treturn function(){\n\t\t//\t\t|\t\t\tvar start = new Date().getTime();\n\t\t//\t\t|\t\t\tvar results = originalFoo.apply(this, arguments); // call the original\n\t\t//\t\t|\t\t\tvar end = new Date().getTime();\n\t\t//\t\t|\t\t\tconsole.log(\"foo execution took \" + (end - start) + \" ms\");\n\t\t//\t\t|\t\t\treturn results;\n\t\t//\t\t|\t\t};\n\t\t//\t\t|\t});\n\t\t// target: Object\n\t\t//\t\tThis is the target object\n\t\t// methodName: String\n\t\t//\t\tThis is the name of the method to attach to.\n\t\t// advice: Function\n\t\t//\t\tThis is function to be called around the original method\n\t};\n\t=====*/\n\n\treturn {\n\t\t// summary:\n\t\t//\t\tprovides aspect oriented programming functionality, allowing for\n\t\t//\t\tone to add before, around, or after advice on existing methods.\n\t\t// example:\n\t\t//\t|\tdefine([\"dojo/aspect\"], function(aspect){\n\t\t//\t|\t\tvar signal = aspect.after(targetObject, \"methodName\", function(someArgument){\n\t\t//\t|\t\t\tthis will be called when targetObject.methodName() is called, after the original function is called\n\t\t//\t|\t\t});\n\t\t//\n\t\t// example:\n\t\t//\tThe returned signal object can be used to cancel the advice.\n\t\t//\t|\tsignal.remove(); // this will stop the advice from being executed anymore\n\t\t//\t|\taspect.before(targetObject, \"methodName\", function(someArgument){\n\t\t//\t|\t\t// this will be called when targetObject.methodName() is called, before the original function is called\n\t\t//\t|\t });\n\n\t\tbefore: before,\n\t\taround: around,\n\t\tafter: after\n\t};\n});\n","/**\n * @module ol/extent\n */\nimport Corner from './extent/Corner.js';\nimport Relationship from './extent/Relationship.js';\nimport { assert } from './asserts.js';\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array<number>} Extent\n * @api\n */\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n var extent = createEmpty();\n for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n/**\n * @param {Array<number>} xs Xs.\n * @param {Array<number>} ys Ys.\n * @param {Extent=} opt_extent Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, opt_extent) {\n var minX = Math.min.apply(null, xs);\n var minY = Math.min.apply(null, ys);\n var maxX = Math.max.apply(null, xs);\n var maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n}\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0] - value;\n opt_extent[1] = extent[1] - value;\n opt_extent[2] = extent[2] + value;\n opt_extent[3] = extent[3] + value;\n return opt_extent;\n }\n else {\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n }\n}\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0];\n opt_extent[1] = extent[1];\n opt_extent[2] = extent[2];\n opt_extent[3] = extent[3];\n return opt_extent;\n }\n else {\n return extent.slice();\n }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n var dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n }\n else if (extent[2] < x) {\n dx = x - extent[2];\n }\n else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n }\n else if (extent[3] < y) {\n dy = y - extent[3];\n }\n else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]);\n}\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n var minX = extent[0];\n var minY = extent[1];\n var maxX = extent[2];\n var maxY = extent[3];\n var x = coordinate[0];\n var y = coordinate[1];\n var relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n }\n else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n }\n else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent=} opt_extent Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = minX;\n opt_extent[1] = minY;\n opt_extent[2] = maxX;\n opt_extent[3] = maxY;\n return opt_extent;\n }\n else {\n return [minX, minY, maxX, maxY];\n }\n}\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(opt_extent) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, opt_extent);\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, opt_extent) {\n var x = coordinate[0];\n var y = coordinate[1];\n return createOrUpdate(x, y, x, y, opt_extent);\n}\n/**\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, opt_extent) {\n var extent = createOrUpdateEmpty(opt_extent);\n return extendCoordinates(extent, coordinates);\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(flatCoordinates, offset, end, stride, opt_extent) {\n var extent = createOrUpdateEmpty(opt_extent);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n/**\n * @param {Array<Array<import(\"./coordinate.js\").Coordinate>>} rings Rings.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, opt_extent) {\n var extent = createOrUpdateEmpty(opt_extent);\n return extendRings(extent, rings);\n}\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]);\n}\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance);\n}\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(extent, flatCoordinates, offset, end, stride) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array<Array<import(\"./coordinate.js\").Coordinate>>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (var i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n var val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n var area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./extent/Corner.js\").default} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n var coordinate;\n if (corner === Corner.BOTTOM_LEFT) {\n coordinate = getBottomLeft(extent);\n }\n else if (corner === Corner.BOTTOM_RIGHT) {\n coordinate = getBottomRight(extent);\n }\n else if (corner === Corner.TOP_LEFT) {\n coordinate = getTopLeft(extent);\n }\n else if (corner === Corner.TOP_RIGHT) {\n coordinate = getTopRight(extent);\n }\n else {\n assert(false, 13); // Invalid corner\n }\n return coordinate;\n}\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n var minX = Math.min(extent1[0], extent2[0]);\n var minY = Math.min(extent1[1], extent2[1]);\n var maxX = Math.max(extent1[2], extent2[2]);\n var maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent=} opt_extent Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, opt_extent) {\n var dx = (resolution * size[0]) / 2;\n var dy = (resolution * size[1]) / 2;\n var cosRotation = Math.cos(rotation);\n var sinRotation = Math.sin(rotation);\n var xCos = dx * cosRotation;\n var xSin = dx * sinRotation;\n var yCos = dy * cosRotation;\n var ySin = dy * sinRotation;\n var x = center[0];\n var y = center[1];\n var x0 = x - xCos + ySin;\n var x1 = x - xCos - ySin;\n var x2 = x + xCos - ySin;\n var x3 = x + xCos + ySin;\n var y0 = y - xSin - yCos;\n var y1 = y - xSin + yCos;\n var y2 = y + xSin + yCos;\n var y3 = y + xSin - yCos;\n return createOrUpdate(Math.min(x0, x1, x2, x3), Math.min(y0, y1, y2, y3), Math.max(x0, x1, x2, x3), Math.max(y0, y1, y2, y3), opt_extent);\n}\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n var intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent=} opt_extent Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, opt_extent) {\n var intersection = opt_extent ? opt_extent : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n }\n else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n }\n else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n }\n else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n }\n else {\n intersection[3] = extent2[3];\n }\n }\n else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]);\n}\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Extent=} opt_extent Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0];\n opt_extent[1] = extent[1];\n opt_extent[2] = extent[2];\n opt_extent[3] = extent[3];\n return opt_extent;\n }\n else {\n return extent;\n }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n var deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n var deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n var intersects = false;\n var startRel = coordinateRelationship(extent, start);\n var endRel = coordinateRelationship(extent, end);\n if (startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING) {\n intersects = true;\n }\n else {\n var minX = extent[0];\n var minY = extent[1];\n var maxX = extent[2];\n var maxY = extent[3];\n var startX = start[0];\n var startY = start[1];\n var endX = end[0];\n var endY = end[1];\n var slope = (endY - startY) / (endX - startX);\n var x = void 0, y = void 0;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (!intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (!intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (!intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent=} opt_extent Destination extent.\n * @param {number=} opt_stops Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, opt_extent, opt_stops) {\n var coordinates = [];\n if (opt_stops > 1) {\n var width = extent[2] - extent[0];\n var height = extent[3] - extent[1];\n for (var i = 0; i < opt_stops; ++i) {\n coordinates.push(extent[0] + (width * i) / opt_stops, extent[1], extent[2], extent[1] + (height * i) / opt_stops, extent[2] - (width * i) / opt_stops, extent[3], extent[0], extent[3] - (height * i) / opt_stops);\n }\n }\n else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n var xs = [];\n var ys = [];\n for (var i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, opt_extent);\n}\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n var projectionExtent = projection.getExtent();\n var center = getCenter(extent);\n if (projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])) {\n var worldWidth = getWidth(projectionExtent);\n var worldsAway = Math.floor((center[0] - projectionExtent[0]) / worldWidth);\n var offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n//# sourceMappingURL=extent.js.map","define(['./global', './has'], function(global, has){\n\tvar doc = document,\n\t\treadyStates = { 'loaded': 1, 'complete': 1 },\n\t\tfixReadyState = typeof doc.readyState != \"string\",\n\t\tready = !!readyStates[doc.readyState],\n\t\treadyQ = [],\n\t\trecursiveGuard;\n\n\tfunction domReady(callback){\n\t\t// summary:\n\t\t//\t\tPlugin to delay require()/define() callback from firing until the DOM has finished loading.\n\t\treadyQ.push(callback);\n\t\tif(ready){ processQ(); }\n\t}\n\tdomReady.load = function(id, req, load){\n\t\tdomReady(load);\n\t};\n\n\t// Export queue so that ready() can check if it's empty or not.\n\tdomReady._Q = readyQ;\n\tdomReady._onQEmpty = function(){\n\t\t// summary:\n\t\t//\t\tPrivate method overridden by dojo/ready, to notify when everything in the\n\t\t//\t\tdomReady queue has been processed. Do not use directly.\n\t\t//\t\tWill be removed in 2.0, along with domReady._Q.\n\t};\n\n\t// For FF <= 3.5\n\tif(fixReadyState){ doc.readyState = \"loading\"; }\n\n\tfunction processQ(){\n\t\t// Calls all functions in the queue in order, unless processQ() is already running, in which case just return\n\n\t\tif(recursiveGuard){ return; }\n\t\trecursiveGuard = true;\n\n\t\twhile(readyQ.length){\n\t\t\ttry{\n\t\t\t\t(readyQ.shift())(doc);\n\t\t\t}catch(err){\n\t\t\t\tconsole.error(err, \"in domReady callback\", err.stack);\n\t\t\t}\n\t\t}\n\n\t\trecursiveGuard = false;\n\n\t\t// Notification for dojo/ready. Remove for 2.0.\n\t\t// Note that this could add more tasks to the ready queue.\n\t\tdomReady._onQEmpty();\n\t}\n\n\tif(!ready){\n\t\tvar tests = [],\n\t\t\tdetectReady = function(evt){\n\t\t\t\tevt = evt || global.event;\n\t\t\t\tif(ready || (evt.type == \"readystatechange\" && !readyStates[doc.readyState])){ return; }\n\n\t\t\t\t// For FF <= 3.5\n\t\t\t\tif(fixReadyState){ doc.readyState = \"complete\"; }\n\n\t\t\t\tready = 1;\n\t\t\t\tprocessQ();\n\t\t\t},\n\t\t\ton = function(node, event){\n\t\t\t\tnode.addEventListener(event, detectReady, false);\n\t\t\t\treadyQ.push(function(){ node.removeEventListener(event, detectReady, false); });\n\t\t\t};\n\n\t\tif(!has(\"dom-addeventlistener\")){\n\t\t\ton = function(node, event){\n\t\t\t\tevent = \"on\" + event;\n\t\t\t\tnode.attachEvent(event, detectReady);\n\t\t\t\treadyQ.push(function(){ node.detachEvent(event, detectReady); });\n\t\t\t};\n\n\t\t\tvar div = doc.createElement(\"div\");\n\t\t\ttry{\n\t\t\t\tif(div.doScroll && global.frameElement === null){\n\t\t\t\t\t// the doScroll test is only useful if we're in the top-most frame\n\t\t\t\t\ttests.push(function(){\n\t\t\t\t\t\t// Derived with permission from Diego Perini's IEContentLoaded\n\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\tdiv.doScroll(\"left\");\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}catch(e){}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}catch(e){}\n\t\t}\n\n\t\ton(doc, \"DOMContentLoaded\");\n\t\ton(global, \"load\");\n\n\t\tif(\"onreadystatechange\" in doc){\n\t\t\ton(doc, \"readystatechange\");\n\t\t}else if(!fixReadyState){\n\t\t\t// if the ready state property exists and there's\n\t\t\t// no readystatechange event, poll for the state\n\t\t\t// to change\n\t\t\ttests.push(function(){\n\t\t\t\treturn readyStates[doc.readyState];\n\t\t\t});\n\t\t}\n\n\t\tif(tests.length){\n\t\t\tvar poller = function(){\n\t\t\t\tif(ready){ return; }\n\t\t\t\tvar i = tests.length;\n\t\t\t\twhile(i--){\n\t\t\t\t\tif(tests[i]()){\n\t\t\t\t\t\tdetectReady(\"poller\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetTimeout(poller, 30);\n\t\t\t};\n\t\t\tpoller();\n\t\t}\n\t}\n\n\treturn domReady;\n});\n","/**\n * @module ol/style/Style\n */\nimport CircleStyle from './Circle.js';\nimport Fill from './Fill.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport Stroke from './Stroke.js';\nimport { assert } from '../asserts.js';\n/**\n * A function that takes an {@link module:ol/Feature} and a `{number}`\n * representing the view's resolution. The function should return a\n * {@link module:ol/style/Style} or an array of them. This way e.g. a\n * vector layer can be styled. If the function returns `undefined`, the\n * feature will not be rendered.\n *\n * @typedef {function(import(\"../Feature.js\").FeatureLike, number):(Style|Array<Style>|void)} StyleFunction\n */\n/**\n * A {@link Style}, an array of {@link Style}, or a {@link StyleFunction}.\n * @typedef {Style|Array<Style>|StyleFunction} StyleLike\n */\n/**\n * A function that takes an {@link module:ol/Feature} as argument and returns an\n * {@link module:ol/geom/Geometry} that will be rendered and styled for the feature.\n *\n * @typedef {function(import(\"../Feature.js\").FeatureLike):\n * (import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default|undefined)} GeometryFunction\n */\n/**\n * Custom renderer function. Takes two arguments:\n *\n * 1. The pixel coordinates of the geometry in GeoJSON notation.\n * 2. The {@link module:ol/render~State} of the layer renderer.\n *\n * @typedef {function((import(\"../coordinate.js\").Coordinate|Array<import(\"../coordinate.js\").Coordinate>|Array<Array<import(\"../coordinate.js\").Coordinate>>),import(\"../render.js\").State): void}\n * RenderFunction\n */\n/**\n * @typedef {Object} Options\n * @property {string|import(\"../geom/Geometry.js\").default|GeometryFunction} [geometry] Feature property or geometry\n * or function returning a geometry to render for this style.\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {import(\"./Image.js\").default} [image] Image style.\n * @property {RenderFunction} [renderer] Custom renderer. When configured, `fill`, `stroke` and `image` will be\n * ignored, and the provided function will be called with each render frame for each geometry.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {import(\"./Text.js\").default} [text] Text style.\n * @property {number} [zIndex] Z index.\n */\n/**\n * @classdesc\n * Container for vector feature rendering styles. Any changes made to the style\n * or its children through `set*()` methods will not take effect until the\n * feature or layer that uses the style is re-rendered.\n *\n * ## Feature styles\n *\n * If no style is defined, the following default style is used:\n * ```js\n * import {Fill, Stroke, Circle, Style} from 'ol/style';\n *\n * var fill = new Fill({\n * color: 'rgba(255,255,255,0.4)'\n * });\n * var stroke = new Stroke({\n * color: '#3399CC',\n * width: 1.25\n * });\n * var styles = [\n * new Style({\n * image: new Circle({\n * fill: fill,\n * stroke: stroke,\n * radius: 5\n * }),\n * fill: fill,\n * stroke: stroke\n * })\n * ];\n * ```\n *\n * A separate editing style has the following defaults:\n * ```js\n * import {Fill, Stroke, Circle, Style} from 'ol/style';\n * import GeometryType from 'ol/geom/GeometryType';\n *\n * var white = [255, 255, 255, 1];\n * var blue = [0, 153, 255, 1];\n * var width = 3;\n * styles[GeometryType.POLYGON] = [\n * new Style({\n * fill: new Fill({\n * color: [255, 255, 255, 0.5]\n * })\n * })\n * ];\n * styles[GeometryType.MULTI_POLYGON] =\n * styles[GeometryType.POLYGON];\n * styles[GeometryType.LINE_STRING] = [\n * new Style({\n * stroke: new Stroke({\n * color: white,\n * width: width + 2\n * })\n * }),\n * new Style({\n * stroke: new Stroke({\n * color: blue,\n * width: width\n * })\n * })\n * ];\n * styles[GeometryType.MULTI_LINE_STRING] =\n * styles[GeometryType.LINE_STRING];\n * styles[GeometryType.POINT] = [\n * new Style({\n * image: new Circle({\n * radius: width * 2,\n * fill: new Fill({\n * color: blue\n * }),\n * stroke: new Stroke({\n * color: white,\n * width: width / 2\n * })\n * }),\n * zIndex: Infinity\n * })\n * ];\n * styles[GeometryType.MULTI_POINT] =\n * styles[GeometryType.POINT];\n * styles[GeometryType.GEOMETRY_COLLECTION] =\n * styles[GeometryType.POLYGON].concat(\n * styles[GeometryType.LINE_STRING],\n * styles[GeometryType.POINT]\n * );\n * ```\n *\n * @api\n */\nvar Style = /** @class */ (function () {\n /**\n * @param {Options=} opt_options Style options.\n */\n function Style(opt_options) {\n var options = opt_options || {};\n /**\n * @private\n * @type {string|import(\"../geom/Geometry.js\").default|GeometryFunction}\n */\n this.geometry_ = null;\n /**\n * @private\n * @type {!GeometryFunction}\n */\n this.geometryFunction_ = defaultGeometryFunction;\n if (options.geometry !== undefined) {\n this.setGeometry(options.geometry);\n }\n /**\n * @private\n * @type {import(\"./Fill.js\").default}\n */\n this.fill_ = options.fill !== undefined ? options.fill : null;\n /**\n * @private\n * @type {import(\"./Image.js\").default}\n */\n this.image_ = options.image !== undefined ? options.image : null;\n /**\n * @private\n * @type {RenderFunction|null}\n */\n this.renderer_ = options.renderer !== undefined ? options.renderer : null;\n /**\n * @private\n * @type {import(\"./Stroke.js\").default}\n */\n this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n /**\n * @private\n * @type {import(\"./Text.js\").default}\n */\n this.text_ = options.text !== undefined ? options.text : null;\n /**\n * @private\n * @type {number|undefined}\n */\n this.zIndex_ = options.zIndex;\n }\n /**\n * Clones the style.\n * @return {Style} The cloned style.\n * @api\n */\n Style.prototype.clone = function () {\n var geometry = this.getGeometry();\n if (geometry && typeof geometry === 'object') {\n geometry = /** @type {import(\"../geom/Geometry.js\").default} */ (geometry).clone();\n }\n return new Style({\n geometry: geometry,\n fill: this.getFill() ? this.getFill().clone() : undefined,\n image: this.getImage() ? this.getImage().clone() : undefined,\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n text: this.getText() ? this.getText().clone() : undefined,\n zIndex: this.getZIndex(),\n });\n };\n /**\n * Get the custom renderer function that was configured with\n * {@link #setRenderer} or the `renderer` constructor option.\n * @return {RenderFunction|null} Custom renderer function.\n * @api\n */\n Style.prototype.getRenderer = function () {\n return this.renderer_;\n };\n /**\n * Sets a custom renderer function for this style. When set, `fill`, `stroke`\n * and `image` options of the style will be ignored.\n * @param {RenderFunction|null} renderer Custom renderer function.\n * @api\n */\n Style.prototype.setRenderer = function (renderer) {\n this.renderer_ = renderer;\n };\n /**\n * Get the geometry to be rendered.\n * @return {string|import(\"../geom/Geometry.js\").default|GeometryFunction}\n * Feature property or geometry or function that returns the geometry that will\n * be rendered with this style.\n * @api\n */\n Style.prototype.getGeometry = function () {\n return this.geometry_;\n };\n /**\n * Get the function used to generate a geometry for rendering.\n * @return {!GeometryFunction} Function that is called with a feature\n * and returns the geometry to render instead of the feature's geometry.\n * @api\n */\n Style.prototype.getGeometryFunction = function () {\n return this.geometryFunction_;\n };\n /**\n * Get the fill style.\n * @return {import(\"./Fill.js\").default} Fill style.\n * @api\n */\n Style.prototype.getFill = function () {\n return this.fill_;\n };\n /**\n * Set the fill style.\n * @param {import(\"./Fill.js\").default} fill Fill style.\n * @api\n */\n Style.prototype.setFill = function (fill) {\n this.fill_ = fill;\n };\n /**\n * Get the image style.\n * @return {import(\"./Image.js\").default} Image style.\n * @api\n */\n Style.prototype.getImage = function () {\n return this.image_;\n };\n /**\n * Set the image style.\n * @param {import(\"./Image.js\").default} image Image style.\n * @api\n */\n Style.prototype.setImage = function (image) {\n this.image_ = image;\n };\n /**\n * Get the stroke style.\n * @return {import(\"./Stroke.js\").default} Stroke style.\n * @api\n */\n Style.prototype.getStroke = function () {\n return this.stroke_;\n };\n /**\n * Set the stroke style.\n * @param {import(\"./Stroke.js\").default} stroke Stroke style.\n * @api\n */\n Style.prototype.setStroke = function (stroke) {\n this.stroke_ = stroke;\n };\n /**\n * Get the text style.\n * @return {import(\"./Text.js\").default} Text style.\n * @api\n */\n Style.prototype.getText = function () {\n return this.text_;\n };\n /**\n * Set the text style.\n * @param {import(\"./Text.js\").default} text Text style.\n * @api\n */\n Style.prototype.setText = function (text) {\n this.text_ = text;\n };\n /**\n * Get the z-index for the style.\n * @return {number|undefined} ZIndex.\n * @api\n */\n Style.prototype.getZIndex = function () {\n return this.zIndex_;\n };\n /**\n * Set a geometry that is rendered instead of the feature's geometry.\n *\n * @param {string|import(\"../geom/Geometry.js\").default|GeometryFunction} geometry\n * Feature property or geometry or function returning a geometry to render\n * for this style.\n * @api\n */\n Style.prototype.setGeometry = function (geometry) {\n if (typeof geometry === 'function') {\n this.geometryFunction_ = geometry;\n }\n else if (typeof geometry === 'string') {\n this.geometryFunction_ = function (feature) {\n return /** @type {import(\"../geom/Geometry.js\").default} */ (feature.get(geometry));\n };\n }\n else if (!geometry) {\n this.geometryFunction_ = defaultGeometryFunction;\n }\n else if (geometry !== undefined) {\n this.geometryFunction_ = function () {\n return /** @type {import(\"../geom/Geometry.js\").default} */ (geometry);\n };\n }\n this.geometry_ = geometry;\n };\n /**\n * Set the z-index.\n *\n * @param {number|undefined} zIndex ZIndex.\n * @api\n */\n Style.prototype.setZIndex = function (zIndex) {\n this.zIndex_ = zIndex;\n };\n return Style;\n}());\n/**\n * Convert the provided object into a style function. Functions passed through\n * unchanged. Arrays of Style or single style objects wrapped in a\n * new style function.\n * @param {StyleFunction|Array<Style>|Style} obj\n * A style function, a single style, or an array of styles.\n * @return {StyleFunction} A style function.\n */\nexport function toFunction(obj) {\n var styleFunction;\n if (typeof obj === 'function') {\n styleFunction = obj;\n }\n else {\n /**\n * @type {Array<Style>}\n */\n var styles_1;\n if (Array.isArray(obj)) {\n styles_1 = obj;\n }\n else {\n assert(typeof ( /** @type {?} */(obj).getZIndex) === 'function', 41); // Expected an `Style` or an array of `Style`\n var style = /** @type {Style} */ (obj);\n styles_1 = [style];\n }\n styleFunction = function () {\n return styles_1;\n };\n }\n return styleFunction;\n}\n/**\n * @type {Array<Style>}\n */\nvar defaultStyles = null;\n/**\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {number} resolution Resolution.\n * @return {Array<Style>} Style.\n */\nexport function createDefaultStyle(feature, resolution) {\n // We don't use an immediately-invoked function\n // and a closure so we don't get an error at script evaluation time in\n // browsers that do not support Canvas. (import(\"./Circle.js\").CircleStyle does\n // canvas.getContext('2d') at construction time, which will cause an.error\n // in such browsers.)\n if (!defaultStyles) {\n var fill = new Fill({\n color: 'rgba(255,255,255,0.4)',\n });\n var stroke = new Stroke({\n color: '#3399CC',\n width: 1.25,\n });\n defaultStyles = [\n new Style({\n image: new CircleStyle({\n fill: fill,\n stroke: stroke,\n radius: 5,\n }),\n fill: fill,\n stroke: stroke,\n }),\n ];\n }\n return defaultStyles;\n}\n/**\n * Default styles for editing features.\n * @return {Object<import(\"../geom/GeometryType.js\").default, Array<Style>>} Styles\n */\nexport function createEditingStyle() {\n /** @type {Object<import(\"../geom/GeometryType.js\").default, Array<Style>>} */\n var styles = {};\n var white = [255, 255, 255, 1];\n var blue = [0, 153, 255, 1];\n var width = 3;\n styles[GeometryType.POLYGON] = [\n new Style({\n fill: new Fill({\n color: [255, 255, 255, 0.5],\n }),\n }),\n ];\n styles[GeometryType.MULTI_POLYGON] = styles[GeometryType.POLYGON];\n styles[GeometryType.LINE_STRING] = [\n new Style({\n stroke: new Stroke({\n color: white,\n width: width + 2,\n }),\n }),\n new Style({\n stroke: new Stroke({\n color: blue,\n width: width,\n }),\n }),\n ];\n styles[GeometryType.MULTI_LINE_STRING] = styles[GeometryType.LINE_STRING];\n styles[GeometryType.CIRCLE] = styles[GeometryType.POLYGON].concat(styles[GeometryType.LINE_STRING]);\n styles[GeometryType.POINT] = [\n new Style({\n image: new CircleStyle({\n radius: width * 2,\n fill: new Fill({\n color: blue,\n }),\n stroke: new Stroke({\n color: white,\n width: width / 2,\n }),\n }),\n zIndex: Infinity,\n }),\n ];\n styles[GeometryType.MULTI_POINT] = styles[GeometryType.POINT];\n styles[GeometryType.GEOMETRY_COLLECTION] = styles[GeometryType.POLYGON].concat(styles[GeometryType.LINE_STRING], styles[GeometryType.POINT]);\n return styles;\n}\n/**\n * Function that is called with a feature and returns its default geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature to get the geometry for.\n * @return {import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default|undefined} Geometry to render.\n */\nfunction defaultGeometryFunction(feature) {\n return feature.getGeometry();\n}\nexport default Style;\n//# sourceMappingURL=Style.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\nimport Units from './Units.js';\nimport { cosh } from '../math.js';\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport var RADIUS = 6378137;\n/**\n * @const\n * @type {number}\n */\nexport var HALF_SIZE = Math.PI * RADIUS;\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport var EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport var WORLD_EXTENT = [-180, -85, 180, 85];\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport var MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nvar EPSG3857Projection = /** @class */ (function (_super) {\n __extends(EPSG3857Projection, _super);\n /**\n * @param {string} code Code.\n */\n function EPSG3857Projection(code) {\n return _super.call(this, {\n code: code,\n units: Units.METERS,\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function (resolution, point) {\n return resolution / cosh(point[1] / RADIUS);\n },\n }) || this;\n }\n return EPSG3857Projection;\n}(Projection));\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array<import(\"./Projection.js\").default>}\n */\nexport var PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array<number>} input Input array of coordinate values.\n * @param {Array<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension (default is `2`).\n * @return {Array<number>} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, opt_output, opt_dimension) {\n var length = input.length;\n var dimension = opt_dimension > 1 ? opt_dimension : 2;\n var output = opt_output;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n }\n else {\n output = new Array(length);\n }\n }\n for (var i = 0; i < length; i += dimension) {\n output[i] = (HALF_SIZE * input[i]) / 180;\n var y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n if (y > MAX_SAFE_Y) {\n y = MAX_SAFE_Y;\n }\n else if (y < -MAX_SAFE_Y) {\n y = -MAX_SAFE_Y;\n }\n output[i + 1] = y;\n }\n return output;\n}\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array<number>} input Input array of coordinate values.\n * @param {Array<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension (default is `2`).\n * @return {Array<number>} Output array of coordinate values.\n */\nexport function toEPSG4326(input, opt_output, opt_dimension) {\n var length = input.length;\n var dimension = opt_dimension > 1 ? opt_dimension : 2;\n var output = opt_output;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n }\n else {\n output = new Array(length);\n }\n }\n for (var i = 0; i < length; i += dimension) {\n output[i] = (180 * input[i]) / HALF_SIZE;\n output[i + 1] =\n (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n }\n return output;\n}\n//# sourceMappingURL=epsg3857.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\nimport Units from './Units.js';\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport var RADIUS = 6378137;\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport var EXTENT = [-180, -90, 180, 90];\n/**\n * @const\n * @type {number}\n */\nexport var METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nvar EPSG4326Projection = /** @class */ (function (_super) {\n __extends(EPSG4326Projection, _super);\n /**\n * @param {string} code Code.\n * @param {string=} opt_axisOrientation Axis orientation.\n */\n function EPSG4326Projection(code, opt_axisOrientation) {\n return _super.call(this, {\n code: code,\n units: Units.DEGREES,\n extent: EXTENT,\n axisOrientation: opt_axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT,\n }) || this;\n }\n return EPSG4326Projection;\n}(Projection));\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array<import(\"./Projection.js\").default>}\n */\nexport var PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n];\n//# sourceMappingURL=epsg4326.js.map","/**\n * @module ol/proj/projections\n */\n/**\n * @type {Object<string, import(\"./Projection.js\").default>}\n */\nvar cache = {};\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default} The projection (if cached).\n */\nexport function get(code) {\n return (cache[code] ||\n cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n null);\n}\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n//# sourceMappingURL=projections.js.map","/**\n * @module ol/proj\n */\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj~addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection} object for the new projection and add it with\n * {@link module:ol/proj~addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj~addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection} with\n * {@link module:ol/proj~addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport Projection from './proj/Projection.js';\nimport Units, { METERS_PER_UNIT } from './proj/Units.js';\nimport { PROJECTIONS as EPSG3857_PROJECTIONS, fromEPSG4326, toEPSG4326, } from './proj/epsg3857.js';\nimport { PROJECTIONS as EPSG4326_PROJECTIONS } from './proj/epsg4326.js';\nimport { add as addProj, clear as clearProj, get as getProj, } from './proj/projections.js';\nimport { add as addTransformFunc, clear as clearTransformFuncs, get as getTransformFunc, } from './proj/transforms.js';\nimport { applyTransform, getWidth } from './extent.js';\nimport { clamp, modulo } from './math.js';\nimport { getDistance } from './sphere.js';\nimport { getWorldsAway } from './coordinate.js';\n/**\n * A projection as {@link module:ol/proj/Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @typedef {function(Array<number>, Array<number>=, number=): Array<number>} TransformFunction\n * @api\n */\nexport { METERS_PER_UNIT };\nexport { Projection };\n/**\n * @param {Array<number>} input Input coordinate array.\n * @param {Array<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension.\n * @return {Array<number>} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, opt_output, opt_dimension) {\n var output;\n if (opt_output !== undefined) {\n for (var i = 0, ii = input.length; i < ii; ++i) {\n opt_output[i] = input[i];\n }\n output = opt_output;\n }\n else {\n output = input.slice();\n }\n return output;\n}\n/**\n * @param {Array<number>} input Input coordinate array.\n * @param {Array<number>=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension.\n * @return {Array<number>} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, opt_output, opt_dimension) {\n if (opt_output !== undefined && input !== opt_output) {\n for (var i = 0, ii = input.length; i < ii; ++i) {\n opt_output[i] = input[i];\n }\n input = opt_output;\n }\n return input;\n}\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n addProj(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n/**\n * @param {Array<Projection>} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {Projection} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n return typeof projectionLike === 'string'\n ? getProj(/** @type {string} */ (projectionLike))\n : /** @type {Projection} */ (projectionLike) || null;\n}\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the 'point' pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").default=} opt_units Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, opt_units) {\n projection = get(projection);\n var pointResolution;\n var getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n if (opt_units && opt_units !== projection.getUnits()) {\n var metersPerUnit = projection.getMetersPerUnit();\n if (metersPerUnit) {\n pointResolution =\n (pointResolution * metersPerUnit) / METERS_PER_UNIT[opt_units];\n }\n }\n }\n else {\n var units = projection.getUnits();\n if ((units == Units.DEGREES && !opt_units) || opt_units == Units.DEGREES) {\n pointResolution = resolution;\n }\n else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n var toEPSG4326_1 = getTransformFromProjections(projection, get('EPSG:4326'));\n if (toEPSG4326_1 === identityTransform && units !== Units.DEGREES) {\n // no transform is available\n pointResolution = resolution * projection.getMetersPerUnit();\n }\n else {\n var vertices = [\n point[0] - resolution / 2,\n point[1],\n point[0] + resolution / 2,\n point[1],\n point[0],\n point[1] - resolution / 2,\n point[0],\n point[1] + resolution / 2,\n ];\n vertices = toEPSG4326_1(vertices, vertices, 2);\n var width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n var height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n }\n var metersPerUnit = opt_units\n ? METERS_PER_UNIT[opt_units]\n : projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array<Projection>} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function (source) {\n projections.forEach(function (destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array<Projection>} projections1 Projections with equal\n * meaning.\n * @param {Array<Projection>} projections2 Projections with equal\n * meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(projections1, projections2, forwardTransform, inverseTransform) {\n projections1.forEach(function (projection1) {\n projections2.forEach(function (projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n clearProj();\n clearTransformFuncs();\n}\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n }\n else if (typeof projection === 'string') {\n return get(projection);\n }\n else {\n return /** @type {Projection} */ (projection);\n }\n}\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n * transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array<number>} input Input.\n * @param {Array<number>=} opt_output Output.\n * @param {number=} opt_dimension Dimension.\n * @return {Array<number>} Output.\n */\n function (input, opt_output, opt_dimension) {\n var length = input.length;\n var dimension = opt_dimension !== undefined ? opt_dimension : 2;\n var output = opt_output !== undefined ? opt_output : new Array(length);\n for (var i = 0; i < length; i += dimension) {\n var point = coordTransform([input[i], input[i + 1]]);\n output[i] = point[0];\n output[i + 1] = point[1];\n for (var j = dimension - 1; j >= 2; --j) {\n output[i + j] = input[i + j];\n }\n }\n return output;\n });\n}\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n var sourceProj = get(source);\n var destProj = get(destination);\n addTransformFunc(sourceProj, destProj, createTransformFromCoordinateTransform(forward));\n addTransformFunc(destProj, sourceProj, createTransformFromCoordinateTransform(inverse));\n}\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike=} opt_projection Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, opt_projection) {\n return transform(coordinate, 'EPSG:4326', opt_projection !== undefined ? opt_projection : 'EPSG:3857');\n}\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike=} opt_projection Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, opt_projection) {\n var lonLat = transform(coordinate, opt_projection !== undefined ? opt_projection : 'EPSG:3857', 'EPSG:4326');\n var lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n var equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n }\n else {\n var transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n }\n}\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} sourceProjection Source Projection object.\n * @param {Projection} destinationProjection Destination Projection\n * object.\n * @return {TransformFunction} Transform function.\n */\nexport function getTransformFromProjections(sourceProjection, destinationProjection) {\n var sourceCode = sourceProjection.getCode();\n var destinationCode = destinationProjection.getCode();\n var transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (!transformFunc) {\n transformFunc = identityTransform;\n }\n return transformFunc;\n}\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n var sourceProjection = get(source);\n var destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original).\n *\n * See {@link module:ol/proj~transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n var transformFunc = getTransform(source, destination);\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number=} opt_stops Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, opt_stops) {\n var transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc, undefined, opt_stops);\n}\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(point, sourceProjection, destinationProjection) {\n var transformFunc = getTransformFromProjections(sourceProjection, destinationProjection);\n return transformFunc(point);\n}\n/**\n * @type {?Projection}\n */\nvar userProjection = null;\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * Note that this method is not yet a part of the stable API. Support for user\n * projections is not yet complete and should be considered experimental.\n * @param {ProjectionLike} projection The user projection.\n */\nexport function setUserProjection(projection) {\n userProjection = get(projection);\n}\n/**\n * Clear the user projection if set. Note that this method is not yet a part of\n * the stable API. Support for user projections is not yet complete and should\n * be considered experimental.\n */\nexport function clearUserProjection() {\n userProjection = null;\n}\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * Note that this method is not yet a part of the stable API. Support for user\n * projections is not yet complete and should be considered experimental.\n * @returns {?Projection} The user projection (or null if not set).\n */\nexport function getUserProjection() {\n return userProjection;\n}\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods. Note that this\n * method is not yet a part of the stable API. Support for user projections is\n * not yet complete and should be considered experimental.\n */\nexport function useGeographic() {\n setUserProjection('EPSG:4326');\n}\n/**\n * Return a coordinate transformed into the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array<number>} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @returns {Array<number>} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, sourceProjection, userProjection);\n}\n/**\n * Return a coordinate transformed from the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array<number>} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @returns {Array<number>} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, userProjection, destProjection);\n}\n/**\n * Return an extent transformed into the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @returns {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, sourceProjection, userProjection);\n}\n/**\n * Return an extent transformed from the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @returns {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, userProjection, destProjection);\n}\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destiation).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destiation).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n return function (coord) {\n var sourceX = coord[0];\n var sourceY = coord[1];\n var transformed, worldsAway;\n if (sourceProj.canWrapX()) {\n var sourceExtent = sourceProj.getExtent();\n var sourceExtentWidth = getWidth(sourceExtent);\n worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n if (worldsAway) {\n // Move x to the real world\n sourceX = sourceX - worldsAway * sourceExtentWidth;\n }\n sourceX = clamp(sourceX, sourceExtent[0], sourceExtent[2]);\n sourceY = clamp(sourceY, sourceExtent[1], sourceExtent[3]);\n transformed = transform([sourceX, sourceY]);\n }\n else {\n transformed = transform(coord);\n }\n if (worldsAway && destProj.canWrapX()) {\n // Move transformed coordinate back to the offset world\n transformed[0] += worldsAway * getWidth(destProj.getExtent());\n }\n return transformed;\n };\n}\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(EPSG4326_PROJECTIONS, EPSG3857_PROJECTIONS, fromEPSG4326, toEPSG4326);\n}\naddCommon();\n//# sourceMappingURL=proj.js.map","/**\n * @module ol/geom/GeometryType\n */\n/**\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, `'Circle'`.\n * @enum {string}\n */\nexport default {\n POINT: 'Point',\n LINE_STRING: 'LineString',\n LINEAR_RING: 'LinearRing',\n POLYGON: 'Polygon',\n MULTI_POINT: 'MultiPoint',\n MULTI_LINE_STRING: 'MultiLineString',\n MULTI_POLYGON: 'MultiPolygon',\n GEOMETRY_COLLECTION: 'GeometryCollection',\n CIRCLE: 'Circle',\n};\n//# sourceMappingURL=GeometryType.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = requiredArgs;\n\nfunction requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}\n\nmodule.exports = exports.default;","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Feature\n */\nimport BaseObject, { getChangeEventType } from './Object.js';\nimport EventType from './events/EventType.js';\nimport { assert } from './asserts.js';\nimport { listen, unlistenByKey } from './events.js';\n/**\n * @typedef {typeof Feature|typeof import(\"./render/Feature.js\").default} FeatureClass\n */\n/**\n * @typedef {Feature|import(\"./render/Feature.js\").default} FeatureLike\n */\n/**\n * @classdesc\n * A vector object for geographic features with a geometry and other\n * attribute properties, similar to the features in vector file formats like\n * GeoJSON.\n *\n * Features can be styled individually with `setStyle`; otherwise they use the\n * style of their vector layer.\n *\n * Note that attribute properties are set as {@link module:ol/Object} properties on\n * the feature object, so they are observable, and have get/set accessors.\n *\n * Typically, a feature has a single geometry property. You can set the\n * geometry using the `setGeometry` method and get it with `getGeometry`.\n * It is possible to store more than one geometry on a feature using attribute\n * properties. By default, the geometry used for rendering is identified by\n * the property name `geometry`. If you want to use another geometry property\n * for rendering, use the `setGeometryName` method to change the attribute\n * property associated with the geometry for the feature. For example:\n *\n * ```js\n *\n * import Feature from 'ol/Feature';\n * import Polygon from 'ol/geom/Polygon';\n * import Point from 'ol/geom/Point';\n *\n * var feature = new Feature({\n * geometry: new Polygon(polyCoords),\n * labelPoint: new Point(labelCoords),\n * name: 'My Polygon'\n * });\n *\n * // get the polygon geometry\n * var poly = feature.getGeometry();\n *\n * // Render the feature as a point using the coordinates from labelPoint\n * feature.setGeometryName('labelPoint');\n *\n * // get the point geometry\n * var point = feature.getGeometry();\n * ```\n *\n * @api\n * @template {import(\"./geom/Geometry.js\").default} Geometry\n */\nvar Feature = /** @class */ (function (_super) {\n __extends(Feature, _super);\n /**\n * @param {Geometry|Object<string, *>=} opt_geometryOrProperties\n * You may pass a Geometry object directly, or an object literal containing\n * properties. If you pass an object literal, you may include a Geometry\n * associated with a `geometry` key.\n */\n function Feature(opt_geometryOrProperties) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {number|string|undefined}\n */\n _this.id_ = undefined;\n /**\n * @type {string}\n * @private\n */\n _this.geometryName_ = 'geometry';\n /**\n * User provided style.\n * @private\n * @type {import(\"./style/Style.js\").StyleLike}\n */\n _this.style_ = null;\n /**\n * @private\n * @type {import(\"./style/Style.js\").StyleFunction|undefined}\n */\n _this.styleFunction_ = undefined;\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n _this.geometryChangeKey_ = null;\n _this.addEventListener(getChangeEventType(_this.geometryName_), _this.handleGeometryChanged_);\n if (opt_geometryOrProperties) {\n if (typeof (\n /** @type {?} */ (opt_geometryOrProperties).getSimplifiedGeometry) === 'function') {\n var geometry = /** @type {Geometry} */ (opt_geometryOrProperties);\n _this.setGeometry(geometry);\n }\n else {\n /** @type {Object<string, *>} */\n var properties = opt_geometryOrProperties;\n _this.setProperties(properties);\n }\n }\n return _this;\n }\n /**\n * Clone this feature. If the original feature has a geometry it\n * is also cloned. The feature id is not set in the clone.\n * @return {Feature} The clone.\n * @api\n */\n Feature.prototype.clone = function () {\n var clone = new Feature(this.hasProperties() ? this.getProperties() : null);\n clone.setGeometryName(this.getGeometryName());\n var geometry = this.getGeometry();\n if (geometry) {\n clone.setGeometry(geometry.clone());\n }\n var style = this.getStyle();\n if (style) {\n clone.setStyle(style);\n }\n return clone;\n };\n /**\n * Get the feature's default geometry. A feature may have any number of named\n * geometries. The \"default\" geometry (the one that is rendered by default) is\n * set when calling {@link module:ol/Feature~Feature#setGeometry}.\n * @return {Geometry|undefined} The default geometry for the feature.\n * @api\n * @observable\n */\n Feature.prototype.getGeometry = function () {\n return /** @type {Geometry|undefined} */ (this.get(this.geometryName_));\n };\n /**\n * Get the feature identifier. This is a stable identifier for the feature and\n * is either set when reading data from a remote source or set explicitly by\n * calling {@link module:ol/Feature~Feature#setId}.\n * @return {number|string|undefined} Id.\n * @api\n */\n Feature.prototype.getId = function () {\n return this.id_;\n };\n /**\n * Get the name of the feature's default geometry. By default, the default\n * geometry is named `geometry`.\n * @return {string} Get the property name associated with the default geometry\n * for this feature.\n * @api\n */\n Feature.prototype.getGeometryName = function () {\n return this.geometryName_;\n };\n /**\n * Get the feature's style. Will return what was provided to the\n * {@link module:ol/Feature~Feature#setStyle} method.\n * @return {import(\"./style/Style.js\").StyleLike|undefined} The feature style.\n * @api\n */\n Feature.prototype.getStyle = function () {\n return this.style_;\n };\n /**\n * Get the feature's style function.\n * @return {import(\"./style/Style.js\").StyleFunction|undefined} Return a function\n * representing the current style of this feature.\n * @api\n */\n Feature.prototype.getStyleFunction = function () {\n return this.styleFunction_;\n };\n /**\n * @private\n */\n Feature.prototype.handleGeometryChange_ = function () {\n this.changed();\n };\n /**\n * @private\n */\n Feature.prototype.handleGeometryChanged_ = function () {\n if (this.geometryChangeKey_) {\n unlistenByKey(this.geometryChangeKey_);\n this.geometryChangeKey_ = null;\n }\n var geometry = this.getGeometry();\n if (geometry) {\n this.geometryChangeKey_ = listen(geometry, EventType.CHANGE, this.handleGeometryChange_, this);\n }\n this.changed();\n };\n /**\n * Set the default geometry for the feature. This will update the property\n * with the name returned by {@link module:ol/Feature~Feature#getGeometryName}.\n * @param {Geometry|undefined} geometry The new geometry.\n * @api\n * @observable\n */\n Feature.prototype.setGeometry = function (geometry) {\n this.set(this.geometryName_, geometry);\n };\n /**\n * Set the style for the feature to override the layer style. This can be a\n * single style object, an array of styles, or a function that takes a\n * resolution and returns an array of styles. To unset the feature style, call\n * `setStyle()` without arguments or a falsey value.\n * @param {import(\"./style/Style.js\").StyleLike=} opt_style Style for this feature.\n * @api\n * @fires module:ol/events/Event~BaseEvent#event:change\n */\n Feature.prototype.setStyle = function (opt_style) {\n this.style_ = opt_style;\n this.styleFunction_ = !opt_style\n ? undefined\n : createStyleFunction(opt_style);\n this.changed();\n };\n /**\n * Set the feature id. The feature id is considered stable and may be used when\n * requesting features or comparing identifiers returned from a remote source.\n * The feature id can be used with the\n * {@link module:ol/source/Vector~VectorSource#getFeatureById} method.\n * @param {number|string|undefined} id The feature id.\n * @api\n * @fires module:ol/events/Event~BaseEvent#event:change\n */\n Feature.prototype.setId = function (id) {\n this.id_ = id;\n this.changed();\n };\n /**\n * Set the property name to be used when getting the feature's default geometry.\n * When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with\n * this name will be returned.\n * @param {string} name The property name of the default geometry.\n * @api\n */\n Feature.prototype.setGeometryName = function (name) {\n this.removeEventListener(getChangeEventType(this.geometryName_), this.handleGeometryChanged_);\n this.geometryName_ = name;\n this.addEventListener(getChangeEventType(this.geometryName_), this.handleGeometryChanged_);\n this.handleGeometryChanged_();\n };\n return Feature;\n}(BaseObject));\n/**\n * Convert the provided object into a feature style function. Functions passed\n * through unchanged. Arrays of Style or single style objects wrapped\n * in a new feature style function.\n * @param {!import(\"./style/Style.js\").StyleFunction|!Array<import(\"./style/Style.js\").default>|!import(\"./style/Style.js\").default} obj\n * A feature style function, a single style, or an array of styles.\n * @return {import(\"./style/Style.js\").StyleFunction} A style function.\n */\nexport function createStyleFunction(obj) {\n if (typeof obj === 'function') {\n return obj;\n }\n else {\n /**\n * @type {Array<import(\"./style/Style.js\").default>}\n */\n var styles_1;\n if (Array.isArray(obj)) {\n styles_1 = obj;\n }\n else {\n assert(typeof ( /** @type {?} */(obj).getZIndex) === 'function', 41); // Expected an `import(\"./style/Style.js\").Style` or an array of `import(\"./style/Style.js\").Style`\n var style = /** @type {import(\"./style/Style.js\").default} */ (obj);\n styles_1 = [style];\n }\n return function () {\n return styles_1;\n };\n }\n}\nexport default Feature;\n//# sourceMappingURL=Feature.js.map","define([\n\t\"./has\",\n\t\"./_base/lang\",\n\t\"./errors/CancelError\",\n\t\"./promise/Promise\",\n\t\"./has!config-deferredInstrumentation?./promise/instrumentation\"\n], function(has, lang, CancelError, Promise, instrumentation){\n\t\"use strict\";\n\n\t// module:\n\t//\t\tdojo/Deferred\n\n\tvar PROGRESS = 0,\n\t\t\tRESOLVED = 1,\n\t\t\tREJECTED = 2;\n\tvar FULFILLED_ERROR_MESSAGE = \"This deferred has already been fulfilled.\";\n\n\tvar freezeObject = Object.freeze || function(){};\n\n\tvar signalWaiting = function(waiting, type, result, rejection, deferred){\n\t\tif(has(\"config-deferredInstrumentation\")){\n\t\t\tif(type === REJECTED && Deferred.instrumentRejected && waiting.length === 0){\n\t\t\t\tDeferred.instrumentRejected(result, false, rejection, deferred);\n\t\t\t}\n\t\t}\n\n\t\tfor(var i = 0; i < waiting.length; i++){\n\t\t\tsignalListener(waiting[i], type, result, rejection);\n\t\t}\n\t};\n\n\tvar signalListener = function(listener, type, result, rejection){\n\t\tvar func = listener[type];\n\t\tvar deferred = listener.deferred;\n\t\tif(func){\n\t\t\ttry{\n\t\t\t\tvar newResult = func(result);\n\t\t\t\tif(type === PROGRESS){\n\t\t\t\t\tif(typeof newResult !== \"undefined\"){\n\t\t\t\t\t\tsignalDeferred(deferred, type, newResult);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(newResult && typeof newResult.then === \"function\"){\n\t\t\t\t\t\tlistener.cancel = newResult.cancel;\n\t\t\t\t\t\tnewResult.then(\n\t\t\t\t\t\t\t\t// Only make resolvers if they're actually going to be used\n\t\t\t\t\t\t\t\tmakeDeferredSignaler(deferred, RESOLVED),\n\t\t\t\t\t\t\t\tmakeDeferredSignaler(deferred, REJECTED),\n\t\t\t\t\t\t\t\tmakeDeferredSignaler(deferred, PROGRESS));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsignalDeferred(deferred, RESOLVED, newResult);\n\t\t\t\t}\n\t\t\t}catch(error){\n\t\t\t\tsignalDeferred(deferred, REJECTED, error);\n\t\t\t}\n\t\t}else{\n\t\t\tsignalDeferred(deferred, type, result);\n\t\t}\n\n\t\tif(has(\"config-deferredInstrumentation\")){\n\t\t\tif(type === REJECTED && Deferred.instrumentRejected){\n\t\t\t\tDeferred.instrumentRejected(result, !!func, rejection, deferred.promise);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar makeDeferredSignaler = function(deferred, type){\n\t\treturn function(value){\n\t\t\tsignalDeferred(deferred, type, value);\n\t\t};\n\t};\n\n\tvar signalDeferred = function(deferred, type, result){\n\t\tif(!deferred.isCanceled()){\n\t\t\tswitch(type){\n\t\t\t\tcase PROGRESS:\n\t\t\t\t\tdeferred.progress(result);\n\t\t\t\t\tbreak;\n\t\t\t\tcase RESOLVED:\n\t\t\t\t\tdeferred.resolve(result);\n\t\t\t\t\tbreak;\n\t\t\t\tcase REJECTED:\n\t\t\t\t\tdeferred.reject(result);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar Deferred = function(canceler){\n\t\t// summary:\n\t\t//\t\tCreates a new deferred. This API is preferred over\n\t\t//\t\t`dojo/_base/Deferred`.\n\t\t// description:\n\t\t//\t\tCreates a new deferred, as an abstraction over (primarily)\n\t\t//\t\tasynchronous operations. The deferred is the private interface\n\t\t//\t\tthat should not be returned to calling code. That's what the\n\t\t//\t\t`promise` is for. See `dojo/promise/Promise`.\n\t\t// canceler: Function?\n\t\t//\t\tWill be invoked if the deferred is canceled. The canceler\n\t\t//\t\treceives the reason the deferred was canceled as its argument.\n\t\t//\t\tThe deferred is rejected with its return value, or a new\n\t\t//\t\t`dojo/errors/CancelError` instance.\n\n\t\t// promise: dojo/promise/Promise\n\t\t//\t\tThe public promise object that clients can add callbacks to. \n\t\tvar promise = this.promise = new Promise();\n\n\t\tvar deferred = this;\n\t\tvar fulfilled, result, rejection;\n\t\tvar canceled = false;\n\t\tvar waiting = [];\n\n\t\tif(has(\"config-deferredInstrumentation\") && Error.captureStackTrace){\n\t\t\tError.captureStackTrace(deferred, Deferred);\n\t\t\tError.captureStackTrace(promise, Deferred);\n\t\t}\n\n\t\tthis.isResolved = promise.isResolved = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been resolved.\n\t\t\t// returns: Boolean\n\n\t\t\treturn fulfilled === RESOLVED;\n\t\t};\n\n\t\tthis.isRejected = promise.isRejected = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been rejected.\n\t\t\t// returns: Boolean\n\n\t\t\treturn fulfilled === REJECTED;\n\t\t};\n\n\t\tthis.isFulfilled = promise.isFulfilled = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been resolved or rejected.\n\t\t\t// returns: Boolean\n\n\t\t\treturn !!fulfilled;\n\t\t};\n\n\t\tthis.isCanceled = promise.isCanceled = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been canceled.\n\t\t\t// returns: Boolean\n\n\t\t\treturn canceled;\n\t\t};\n\n\t\tthis.progress = function(update, strict){\n\t\t\t// summary:\n\t\t\t//\t\tEmit a progress update on the deferred.\n\t\t\t// description:\n\t\t\t//\t\tEmit a progress update on the deferred. Progress updates\n\t\t\t//\t\tcan be used to communicate updates about the asynchronous\n\t\t\t//\t\toperation before it has finished.\n\t\t\t// update: any\n\t\t\t//\t\tThe progress update. Passed to progbacks.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently no progress can be emitted.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns the original promise for the deferred.\n\n\t\t\tif(!fulfilled){\n\t\t\t\tsignalWaiting(waiting, PROGRESS, update, null, deferred);\n\t\t\t\treturn promise;\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}else{\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t};\n\n\t\tthis.resolve = function(value, strict){\n\t\t\t// summary:\n\t\t\t//\t\tResolve the deferred.\n\t\t\t// description:\n\t\t\t//\t\tResolve the deferred, putting it in a success state.\n\t\t\t// value: any\n\t\t\t//\t\tThe result of the deferred. Passed to callbacks.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be resolved.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns the original promise for the deferred.\n\n\t\t\tif(!fulfilled){\n\t\t\t\t// Set fulfilled, store value. After signaling waiting listeners unset\n\t\t\t\t// waiting.\n\t\t\t\tsignalWaiting(waiting, fulfilled = RESOLVED, result = value, null, deferred);\n\t\t\t\twaiting = null;\n\t\t\t\treturn promise;\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}else{\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t};\n\n\t\tvar reject = this.reject = function(error, strict){\n\t\t\t// summary:\n\t\t\t//\t\tReject the deferred.\n\t\t\t// description:\n\t\t\t//\t\tReject the deferred, putting it in an error state.\n\t\t\t// error: any\n\t\t\t//\t\tThe error result of the deferred. Passed to errbacks.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be rejected.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns the original promise for the deferred.\n\n\t\t\tif(!fulfilled){\n\t\t\t\tif(has(\"config-deferredInstrumentation\") && Error.captureStackTrace){\n\t\t\t\t\tError.captureStackTrace(rejection = {}, reject);\n\t\t\t\t}\n\t\t\t\tsignalWaiting(waiting, fulfilled = REJECTED, result = error, rejection, deferred);\n\t\t\t\twaiting = null;\n\t\t\t\treturn promise;\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}else{\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t};\n\n\t\tthis.then = promise.then = function(callback, errback, progback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd new callbacks to the deferred.\n\t\t\t// description:\n\t\t\t//\t\tAdd new callbacks to the deferred. Callbacks can be added\n\t\t\t//\t\tbefore or after the deferred is fulfilled.\n\t\t\t// callback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is resolved.\n\t\t\t//\t\tReceives the resolution value.\n\t\t\t// errback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is rejected.\n\t\t\t//\t\tReceives the rejection error.\n\t\t\t// progback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise emits a progress\n\t\t\t//\t\tupdate. Receives the progress update.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the callback(s).\n\t\t\t//\t\tThis can be used for chaining many asynchronous operations.\n\n\t\t\tvar listener = [progback, callback, errback];\n\t\t\t// Ensure we cancel the promise we're waiting for, or if callback/errback\n\t\t\t// have returned a promise, cancel that one.\n\t\t\tlistener.cancel = promise.cancel;\n\t\t\tlistener.deferred = new Deferred(function(reason){\n\t\t\t\t// Check whether cancel is really available, returned promises are not\n\t\t\t\t// required to expose `cancel`\n\t\t\t\treturn listener.cancel && listener.cancel(reason);\n\t\t\t});\n\t\t\tif(fulfilled && !waiting){\n\t\t\t\tsignalListener(listener, fulfilled, result, rejection);\n\t\t\t}else{\n\t\t\t\twaiting.push(listener);\n\t\t\t}\n\t\t\treturn listener.deferred.promise;\n\t\t};\n\n\t\tthis.cancel = promise.cancel = function(reason, strict){\n\t\t\t// summary:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t// description:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t//\t\tThe deferred's (optional) canceler is invoked and the\n\t\t\t//\t\tdeferred will be left in a rejected state. Can affect other\n\t\t\t//\t\tpromises that originate with the same deferred.\n\t\t\t// reason: any\n\t\t\t//\t\tA message that may be sent to the deferred's canceler,\n\t\t\t//\t\texplaining why it's being canceled.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be canceled.\n\t\t\t// returns: any\n\t\t\t//\t\tReturns the rejection reason if the deferred was canceled\n\t\t\t//\t\tnormally.\n\n\t\t\tif(!fulfilled){\n\t\t\t\t// Cancel can be called even after the deferred is fulfilled\n\t\t\t\tif(canceler){\n\t\t\t\t\tvar returnedReason = canceler(reason);\n\t\t\t\t\treason = typeof returnedReason === \"undefined\" ? reason : returnedReason;\n\t\t\t\t}\n\t\t\t\tcanceled = true;\n\t\t\t\tif(!fulfilled){\n\t\t\t\t\t// Allow canceler to provide its own reason, but fall back to a CancelError\n\t\t\t\t\tif(typeof reason === \"undefined\"){\n\t\t\t\t\t\treason = new CancelError();\n\t\t\t\t\t}\n\t\t\t\t\treject(reason);\n\t\t\t\t\treturn reason;\n\t\t\t\t}else if(fulfilled === REJECTED && result === reason){\n\t\t\t\t\treturn reason;\n\t\t\t\t}\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}\n\t\t};\n\n\t\tfreezeObject(promise);\n\t};\n\n\tDeferred.prototype.toString = function(){\n\t\t// returns: String\n\t\t//\t\tReturns `[object Deferred]`.\n\n\t\treturn \"[object Deferred]\";\n\t};\n\n\tif(instrumentation){\n\t\tinstrumentation(Deferred);\n\t}\n\n\treturn Deferred;\n});\n","define([\"./aspect\", \"./on\"], function(aspect, on){\n\t// module:\n\t//\t\tdojo/Evented\n\n \t\"use strict\";\n \tvar after = aspect.after;\n\tfunction Evented(){\n\t\t// summary:\n\t\t//\t\tA class that can be used as a mixin or base class,\n\t\t//\t\tto add on() and emit() methods to a class\n\t\t//\t\tfor listening for events and emitting events:\n\t\t// example:\n\t\t//\t\t|\tdefine([\"dojo/Evented\", \"dojo/_base/declare\", \"dojo/Stateful\"\n\t\t//\t\t|\t], function(Evented, declare, Stateful){\n\t\t//\t\t|\t\tvar EventedStateful = declare([Evented, Stateful], {...});\n\t\t//\t\t|\t\tvar instance = new EventedStateful();\n\t\t//\t\t|\t\tinstance.on(\"open\", function(event){\n\t\t//\t\t|\t\t... do something with event\n\t\t//\t\t|\t });\n\t\t//\t\t|\n\t\t//\t\t|\tinstance.emit(\"open\", {name:\"some event\", ...});\n\t}\n\tEvented.prototype = {\n\t\ton: function(type, listener){\n\t\t\treturn on.parse(this, type, listener, function(target, type){\n\t\t\t\treturn after(target, 'on' + type, listener, true);\n\t\t\t});\n\t\t},\n\t\temit: function(type, event){\n\t\t\tvar args = [this];\n\t\t\targs.push.apply(args, arguments);\n\t\t\treturn on.emit.apply(on, args);\n\t\t}\n\t};\n\treturn Evented;\n});\n","/**\n * @module ol/style/Circle\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport RegularShape from './RegularShape.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} radius Circle radius.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {Array<number>} [displacement=[0,0]] displacement\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. A two dimensional scale will produce an ellipse.\n * Unless two dimensional scaling is required a better result may be obtained with an appropriate setting for `radius`.\n * @property {number} [rotation=0] Rotation in radians\n * (positive rotation clockwise, meaningful only when used in conjunction with a two dimensional scale).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view\n * (meaningful only when used in conjunction with a two dimensional scale).\n */\n/**\n * @classdesc\n * Set circle style for vector features.\n * @api\n */\nvar CircleStyle = /** @class */ (function (_super) {\n __extends(CircleStyle, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function CircleStyle(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n points: Infinity,\n fill: options.fill,\n radius: options.radius,\n stroke: options.stroke,\n scale: options.scale !== undefined ? options.scale : 1,\n rotation: options.rotation !== undefined ? options.rotation : 0,\n rotateWithView: options.rotateWithView !== undefined ? options.rotateWithView : false,\n displacement: options.displacement !== undefined ? options.displacement : [0, 0],\n }) || this;\n return _this;\n }\n /**\n * Clones the style.\n * @return {CircleStyle} The cloned style.\n * @api\n */\n CircleStyle.prototype.clone = function () {\n var scale = this.getScale();\n var style = new CircleStyle({\n fill: this.getFill() ? this.getFill().clone() : undefined,\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n radius: this.getRadius(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n displacement: this.getDisplacement().slice(),\n });\n style.setOpacity(this.getOpacity());\n return style;\n };\n /**\n * Set the circle radius.\n *\n * @param {number} radius Circle radius.\n * @api\n */\n CircleStyle.prototype.setRadius = function (radius) {\n this.radius_ = radius;\n this.render();\n };\n return CircleStyle;\n}(RegularShape));\nexport default CircleStyle;\n//# sourceMappingURL=Circle.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/BaseVector\n */\nimport Layer from './Layer.js';\nimport RBush from 'rbush';\nimport { assign } from '../obj.js';\nimport { createDefaultStyle, toFunction as toStyleFunction, } from '../style/Style.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"../render.js\").OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the viewport extent used by the\n * renderer when getting features from the vector source for the rendering or hit-detection.\n * Recommended value: the size of the largest symbol, line width or label.\n * @property {import(\"../source/Vector.js\").default} [source] Source.\n * @property {import(\"../PluggableMap.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link module:ol/Map#addLayer}.\n * @property {boolean} [declutter=false] Declutter images and text. Decluttering is applied to all\n * image and text styles of all Vector and VectorTile layers that have set this to `true`. The priority\n * is defined by the z-index of the layer, the `zIndex` of the style and the render order of features.\n * Higher z-index means higher priority. Within the same z-index, a feature rendered before another has\n * higher priority.\n * @property {import(\"../style/Style.js\").StyleLike|null} [style] Layer style. When set to `null`, only\n * features that have their own style will be rendered. See {@link module:ol/style} for default style\n * which will be used if this is not set.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will\n * be recreated during animations. This means that no vectors will be shown clipped, but the\n * setting will have a performance impact for large amounts of vector data. When set to `false`,\n * batches will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will\n * be recreated during interactions. See also `updateWhileAnimating`.\n */\n/**\n * @enum {string}\n * @private\n */\nvar Property = {\n RENDER_ORDER: 'renderOrder',\n};\n/**\n * @classdesc\n * Vector data that is rendered client-side.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Vector.js\").default|import(\"../source/VectorTile.js\").default} VectorSourceType\n * @extends {Layer<VectorSourceType>}\n * @api\n */\nvar BaseVectorLayer = /** @class */ (function (_super) {\n __extends(BaseVectorLayer, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function BaseVectorLayer(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n var baseOptions = assign({}, options);\n delete baseOptions.style;\n delete baseOptions.renderBuffer;\n delete baseOptions.updateWhileAnimating;\n delete baseOptions.updateWhileInteracting;\n _this = _super.call(this, baseOptions) || this;\n /**\n * @private\n * @type {boolean}\n */\n _this.declutter_ =\n options.declutter !== undefined ? options.declutter : false;\n /**\n * @type {number}\n * @private\n */\n _this.renderBuffer_ =\n options.renderBuffer !== undefined ? options.renderBuffer : 100;\n /**\n * User provided style.\n * @type {import(\"../style/Style.js\").StyleLike}\n * @private\n */\n _this.style_ = null;\n /**\n * Style function for use within the library.\n * @type {import(\"../style/Style.js\").StyleFunction|undefined}\n * @private\n */\n _this.styleFunction_ = undefined;\n _this.setStyle(options.style);\n /**\n * @type {boolean}\n * @private\n */\n _this.updateWhileAnimating_ =\n options.updateWhileAnimating !== undefined\n ? options.updateWhileAnimating\n : false;\n /**\n * @type {boolean}\n * @private\n */\n _this.updateWhileInteracting_ =\n options.updateWhileInteracting !== undefined\n ? options.updateWhileInteracting\n : false;\n return _this;\n }\n /**\n * @return {boolean} Declutter.\n */\n BaseVectorLayer.prototype.getDeclutter = function () {\n return this.declutter_;\n };\n /**\n * Get the topmost feature that intersects the given pixel on the viewport. Returns a promise\n * that resolves with an array of features. The array will either contain the topmost feature\n * when a hit was detected, or it will be empty.\n *\n * The hit detection algorithm used for this method is optimized for performance, but is less\n * accurate than the one used in {@link import(\"../PluggableMap.js\").default#getFeaturesAtPixel}: Text\n * is not considered, and icons are only represented by their bounding box instead of the exact\n * image.\n *\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @return {Promise<Array<import(\"../Feature\").default>>} Promise that resolves with an array of features.\n * @api\n */\n BaseVectorLayer.prototype.getFeatures = function (pixel) {\n return _super.prototype.getFeatures.call(this, pixel);\n };\n /**\n * @return {number|undefined} Render buffer.\n */\n BaseVectorLayer.prototype.getRenderBuffer = function () {\n return this.renderBuffer_;\n };\n /**\n * @return {function(import(\"../Feature.js\").default, import(\"../Feature.js\").default): number|null|undefined} Render\n * order.\n */\n BaseVectorLayer.prototype.getRenderOrder = function () {\n return /** @type {import(\"../render.js\").OrderFunction|null|undefined} */ (this.get(Property.RENDER_ORDER));\n };\n /**\n * Get the style for features. This returns whatever was passed to the `style`\n * option at construction or to the `setStyle` method.\n * @return {import(\"../style/Style.js\").StyleLike|null|undefined} Layer style.\n * @api\n */\n BaseVectorLayer.prototype.getStyle = function () {\n return this.style_;\n };\n /**\n * Get the style function.\n * @return {import(\"../style/Style.js\").StyleFunction|undefined} Layer style function.\n * @api\n */\n BaseVectorLayer.prototype.getStyleFunction = function () {\n return this.styleFunction_;\n };\n /**\n * @return {boolean} Whether the rendered layer should be updated while\n * animating.\n */\n BaseVectorLayer.prototype.getUpdateWhileAnimating = function () {\n return this.updateWhileAnimating_;\n };\n /**\n * @return {boolean} Whether the rendered layer should be updated while\n * interacting.\n */\n BaseVectorLayer.prototype.getUpdateWhileInteracting = function () {\n return this.updateWhileInteracting_;\n };\n /**\n * Render declutter items for this layer\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n BaseVectorLayer.prototype.renderDeclutter = function (frameState) {\n if (!frameState.declutterTree) {\n frameState.declutterTree = new RBush(9);\n }\n /** @type {*} */ (this.getRenderer()).renderDeclutter(frameState);\n };\n /**\n * @param {import(\"../render.js\").OrderFunction|null|undefined} renderOrder\n * Render order.\n */\n BaseVectorLayer.prototype.setRenderOrder = function (renderOrder) {\n this.set(Property.RENDER_ORDER, renderOrder);\n };\n /**\n * Set the style for features. This can be a single style object, an array\n * of styles, or a function that takes a feature and resolution and returns\n * an array of styles. If set to `null`, the layer has no style (a `null` style),\n * so only features that have their own styles will be rendered in the layer. Call\n * `setStyle()` without arguments to reset to the default style. See\n * {@link module:ol/style} for information on the default style.\n * @param {(import(\"../style/Style.js\").StyleLike|null)=} opt_style Layer style.\n * @api\n */\n BaseVectorLayer.prototype.setStyle = function (opt_style) {\n this.style_ = opt_style !== undefined ? opt_style : createDefaultStyle;\n this.styleFunction_ =\n opt_style === null ? undefined : toStyleFunction(this.style_);\n this.changed();\n };\n return BaseVectorLayer;\n}(Layer));\nexport default BaseVectorLayer;\n//# sourceMappingURL=BaseVector.js.map","/**\n * @module ol/render/canvas/Instruction\n */\n/**\n * @enum {number}\n */\nvar Instruction = {\n BEGIN_GEOMETRY: 0,\n BEGIN_PATH: 1,\n CIRCLE: 2,\n CLOSE_PATH: 3,\n CUSTOM: 4,\n DRAW_CHARS: 5,\n DRAW_IMAGE: 6,\n END_GEOMETRY: 7,\n FILL: 8,\n MOVE_TO_LINE_TO: 9,\n SET_FILL_STYLE: 10,\n SET_STROKE_STYLE: 11,\n STROKE: 12,\n};\n/**\n * @type {Array<Instruction>}\n */\nexport var fillInstruction = [Instruction.FILL];\n/**\n * @type {Array<Instruction>}\n */\nexport var strokeInstruction = [Instruction.STROKE];\n/**\n * @type {Array<Instruction>}\n */\nexport var beginPathInstruction = [Instruction.BEGIN_PATH];\n/**\n * @type {Array<Instruction>}\n */\nexport var closePathInstruction = [Instruction.CLOSE_PATH];\nexport default Instruction;\n//# sourceMappingURL=Instruction.js.map","/**\n * @module ol/render/VectorContext\n */\n/**\n * @classdesc\n * Context for drawing geometries. A vector context is available on render\n * events and does not need to be constructed directly.\n * @api\n */\nvar VectorContext = /** @class */ (function () {\n function VectorContext() {\n }\n /**\n * Render a geometry with a custom renderer.\n *\n * @param {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {Function} renderer Renderer.\n */\n VectorContext.prototype.drawCustom = function (geometry, feature, renderer) { };\n /**\n * Render a geometry.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry The geometry to render.\n */\n VectorContext.prototype.drawGeometry = function (geometry) { };\n /**\n * Set the rendering style.\n *\n * @param {import(\"../style/Style.js\").default} style The rendering style.\n */\n VectorContext.prototype.setStyle = function (style) { };\n /**\n * @param {import(\"../geom/Circle.js\").default} circleGeometry Circle geometry.\n * @param {import(\"../Feature.js\").default} feature Feature.\n */\n VectorContext.prototype.drawCircle = function (circleGeometry, feature) { };\n /**\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n */\n VectorContext.prototype.drawFeature = function (feature, style) { };\n /**\n * @param {import(\"../geom/GeometryCollection.js\").default} geometryCollectionGeometry Geometry collection.\n * @param {import(\"../Feature.js\").default} feature Feature.\n */\n VectorContext.prototype.drawGeometryCollection = function (geometryCollectionGeometry, feature) { };\n /**\n * @param {import(\"../geom/LineString.js\").default|import(\"./Feature.js\").default} lineStringGeometry Line string geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawLineString = function (lineStringGeometry, feature) { };\n /**\n * @param {import(\"../geom/MultiLineString.js\").default|import(\"./Feature.js\").default} multiLineStringGeometry MultiLineString geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawMultiLineString = function (multiLineStringGeometry, feature) { };\n /**\n * @param {import(\"../geom/MultiPoint.js\").default|import(\"./Feature.js\").default} multiPointGeometry MultiPoint geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawMultiPoint = function (multiPointGeometry, feature) { };\n /**\n * @param {import(\"../geom/MultiPolygon.js\").default} multiPolygonGeometry MultiPolygon geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawMultiPolygon = function (multiPolygonGeometry, feature) { };\n /**\n * @param {import(\"../geom/Point.js\").default|import(\"./Feature.js\").default} pointGeometry Point geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawPoint = function (pointGeometry, feature) { };\n /**\n * @param {import(\"../geom/Polygon.js\").default|import(\"./Feature.js\").default} polygonGeometry Polygon geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawPolygon = function (polygonGeometry, feature) { };\n /**\n * @param {import(\"../geom/SimpleGeometry.js\").default|import(\"./Feature.js\").default} geometry Geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawText = function (geometry, feature) { };\n /**\n * @param {import(\"../style/Fill.js\").default} fillStyle Fill style.\n * @param {import(\"../style/Stroke.js\").default} strokeStyle Stroke style.\n */\n VectorContext.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) { };\n /**\n * @param {import(\"../style/Image.js\").default} imageStyle Image style.\n * @param {import(\"../render/canvas.js\").DeclutterImageWithText=} opt_declutterImageWithText Shared data for combined decluttering with a text style.\n */\n VectorContext.prototype.setImageStyle = function (imageStyle, opt_declutterImageWithText) { };\n /**\n * @param {import(\"../style/Text.js\").default} textStyle Text style.\n * @param {import(\"../render/canvas.js\").DeclutterImageWithText=} opt_declutterImageWithText Shared data for combined decluttering with an image style.\n */\n VectorContext.prototype.setTextStyle = function (textStyle, opt_declutterImageWithText) { };\n return VectorContext;\n}());\nexport default VectorContext;\n//# sourceMappingURL=VectorContext.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/render/canvas/Builder\n */\nimport CanvasInstruction from './Instruction.js';\nimport GeometryType from '../../geom/GeometryType.js';\nimport Relationship from '../../extent/Relationship.js';\nimport VectorContext from '../VectorContext.js';\nimport { asColorLike } from '../../colorlike.js';\nimport { buffer, clone, containsCoordinate, coordinateRelationship, } from '../../extent.js';\nimport { defaultFillStyle, defaultLineCap, defaultLineDash, defaultLineDashOffset, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, } from '../canvas.js';\nimport { equals, reverseSubArray } from '../../array.js';\nimport { inflateCoordinates, inflateCoordinatesArray, inflateMultiCoordinatesArray, } from '../../geom/flat/inflate.js';\nvar CanvasBuilder = /** @class */ (function (_super) {\n __extends(CanvasBuilder, _super);\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function CanvasBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n var _this = _super.call(this) || this;\n /**\n * @protected\n * @type {number}\n */\n _this.tolerance = tolerance;\n /**\n * @protected\n * @const\n * @type {import(\"../../extent.js\").Extent}\n */\n _this.maxExtent = maxExtent;\n /**\n * @protected\n * @type {number}\n */\n _this.pixelRatio = pixelRatio;\n /**\n * @protected\n * @type {number}\n */\n _this.maxLineWidth = 0;\n /**\n * @protected\n * @const\n * @type {number}\n */\n _this.resolution = resolution;\n /**\n * @private\n * @type {Array<*>}\n */\n _this.beginGeometryInstruction1_ = null;\n /**\n * @private\n * @type {Array<*>}\n */\n _this.beginGeometryInstruction2_ = null;\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n _this.bufferedMaxExtent_ = null;\n /**\n * @protected\n * @type {Array<*>}\n */\n _this.instructions = [];\n /**\n * @protected\n * @type {Array<number>}\n */\n _this.coordinates = [];\n /**\n * @private\n * @type {import(\"../../coordinate.js\").Coordinate}\n */\n _this.tmpCoordinate_ = [];\n /**\n * @protected\n * @type {Array<*>}\n */\n _this.hitDetectionInstructions = [];\n /**\n * @protected\n * @type {import(\"../canvas.js\").FillStrokeState}\n */\n _this.state = /** @type {import(\"../canvas.js\").FillStrokeState} */ ({});\n return _this;\n }\n /**\n * @protected\n * @param {Array<number>} dashArray Dash array.\n * @return {Array<number>} Dash array with pixel ratio applied\n */\n CanvasBuilder.prototype.applyPixelRatio = function (dashArray) {\n var pixelRatio = this.pixelRatio;\n return pixelRatio == 1\n ? dashArray\n : dashArray.map(function (dash) {\n return dash * pixelRatio;\n });\n };\n /**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} stride Stride.\n * @protected\n * @return {number} My end\n */\n CanvasBuilder.prototype.appendFlatPointCoordinates = function (flatCoordinates, stride) {\n var extent = this.getBufferedMaxExtent();\n var tmpCoord = this.tmpCoordinate_;\n var coordinates = this.coordinates;\n var myEnd = coordinates.length;\n for (var i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n tmpCoord[0] = flatCoordinates[i];\n tmpCoord[1] = flatCoordinates[i + 1];\n if (containsCoordinate(extent, tmpCoord)) {\n coordinates[myEnd++] = tmpCoord[0];\n coordinates[myEnd++] = tmpCoord[1];\n }\n }\n return myEnd;\n };\n /**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {boolean} closed Last input coordinate equals first.\n * @param {boolean} skipFirst Skip first coordinate.\n * @protected\n * @return {number} My end.\n */\n CanvasBuilder.prototype.appendFlatLineCoordinates = function (flatCoordinates, offset, end, stride, closed, skipFirst) {\n var coordinates = this.coordinates;\n var myEnd = coordinates.length;\n var extent = this.getBufferedMaxExtent();\n if (skipFirst) {\n offset += stride;\n }\n var lastXCoord = flatCoordinates[offset];\n var lastYCoord = flatCoordinates[offset + 1];\n var nextCoord = this.tmpCoordinate_;\n var skipped = true;\n var i, lastRel, nextRel;\n for (i = offset + stride; i < end; i += stride) {\n nextCoord[0] = flatCoordinates[i];\n nextCoord[1] = flatCoordinates[i + 1];\n nextRel = coordinateRelationship(extent, nextCoord);\n if (nextRel !== lastRel) {\n if (skipped) {\n coordinates[myEnd++] = lastXCoord;\n coordinates[myEnd++] = lastYCoord;\n skipped = false;\n }\n coordinates[myEnd++] = nextCoord[0];\n coordinates[myEnd++] = nextCoord[1];\n }\n else if (nextRel === Relationship.INTERSECTING) {\n coordinates[myEnd++] = nextCoord[0];\n coordinates[myEnd++] = nextCoord[1];\n skipped = false;\n }\n else {\n skipped = true;\n }\n lastXCoord = nextCoord[0];\n lastYCoord = nextCoord[1];\n lastRel = nextRel;\n }\n // Last coordinate equals first or only one point to append:\n if ((closed && skipped) || i === offset + stride) {\n coordinates[myEnd++] = lastXCoord;\n coordinates[myEnd++] = lastYCoord;\n }\n return myEnd;\n };\n /**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {Array<number>} builderEnds Builder ends.\n * @return {number} Offset.\n */\n CanvasBuilder.prototype.drawCustomCoordinates_ = function (flatCoordinates, offset, ends, stride, builderEnds) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n var builderEnd = this.appendFlatLineCoordinates(flatCoordinates, offset, end, stride, false, false);\n builderEnds.push(builderEnd);\n offset = end;\n }\n return offset;\n };\n /**\n * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n * @param {Function} renderer Renderer.\n */\n CanvasBuilder.prototype.drawCustom = function (geometry, feature, renderer) {\n this.beginGeometry(geometry, feature);\n var type = geometry.getType();\n var stride = geometry.getStride();\n var builderBegin = this.coordinates.length;\n var flatCoordinates, builderEnd, builderEnds, builderEndss;\n var offset;\n if (type == GeometryType.MULTI_POLYGON) {\n flatCoordinates = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getOrientedFlatCoordinates();\n builderEndss = [];\n var endss = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getEndss();\n offset = 0;\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var myEnds = [];\n offset = this.drawCustomCoordinates_(flatCoordinates, offset, endss[i], stride, myEnds);\n builderEndss.push(myEnds);\n }\n this.instructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEndss,\n geometry,\n renderer,\n inflateMultiCoordinatesArray,\n ]);\n }\n else if (type == GeometryType.POLYGON ||\n type == GeometryType.MULTI_LINE_STRING) {\n builderEnds = [];\n flatCoordinates =\n type == GeometryType.POLYGON\n ? /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry).getOrientedFlatCoordinates()\n : geometry.getFlatCoordinates();\n offset = this.drawCustomCoordinates_(flatCoordinates, 0, \n /** @type {import(\"../../geom/Polygon.js\").default|import(\"../../geom/MultiLineString.js\").default} */ (geometry).getEnds(), stride, builderEnds);\n this.instructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnds,\n geometry,\n renderer,\n inflateCoordinatesArray,\n ]);\n }\n else if (type == GeometryType.LINE_STRING ||\n type == GeometryType.CIRCLE) {\n flatCoordinates = geometry.getFlatCoordinates();\n builderEnd = this.appendFlatLineCoordinates(flatCoordinates, 0, flatCoordinates.length, stride, false, false);\n this.instructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnd,\n geometry,\n renderer,\n inflateCoordinates,\n ]);\n }\n else if (type == GeometryType.MULTI_POINT) {\n flatCoordinates = geometry.getFlatCoordinates();\n builderEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n if (builderEnd > builderBegin) {\n this.instructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnd,\n geometry,\n renderer,\n inflateCoordinates,\n ]);\n }\n }\n else if (type == GeometryType.POINT) {\n flatCoordinates = geometry.getFlatCoordinates();\n this.coordinates.push(flatCoordinates[0], flatCoordinates[1]);\n builderEnd = this.coordinates.length;\n this.instructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnd,\n geometry,\n renderer,\n ]);\n }\n this.endGeometry(feature);\n };\n /**\n * @protected\n * @param {import(\"../../geom/Geometry\").default|import(\"../Feature.js\").default} geometry The geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasBuilder.prototype.beginGeometry = function (geometry, feature) {\n this.beginGeometryInstruction1_ = [\n CanvasInstruction.BEGIN_GEOMETRY,\n feature,\n 0,\n geometry,\n ];\n this.instructions.push(this.beginGeometryInstruction1_);\n this.beginGeometryInstruction2_ = [\n CanvasInstruction.BEGIN_GEOMETRY,\n feature,\n 0,\n geometry,\n ];\n this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);\n };\n /**\n * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n */\n CanvasBuilder.prototype.finish = function () {\n return {\n instructions: this.instructions,\n hitDetectionInstructions: this.hitDetectionInstructions,\n coordinates: this.coordinates,\n };\n };\n /**\n * Reverse the hit detection instructions.\n */\n CanvasBuilder.prototype.reverseHitDetectionInstructions = function () {\n var hitDetectionInstructions = this.hitDetectionInstructions;\n // step 1 - reverse array\n hitDetectionInstructions.reverse();\n // step 2 - reverse instructions within geometry blocks\n var i;\n var n = hitDetectionInstructions.length;\n var instruction;\n var type;\n var begin = -1;\n for (i = 0; i < n; ++i) {\n instruction = hitDetectionInstructions[i];\n type = /** @type {import(\"./Instruction.js\").default} */ (instruction[0]);\n if (type == CanvasInstruction.END_GEOMETRY) {\n begin = i;\n }\n else if (type == CanvasInstruction.BEGIN_GEOMETRY) {\n instruction[2] = i;\n reverseSubArray(this.hitDetectionInstructions, begin, i);\n begin = -1;\n }\n }\n };\n /**\n * @param {import(\"../../style/Fill.js\").default} fillStyle Fill style.\n * @param {import(\"../../style/Stroke.js\").default} strokeStyle Stroke style.\n */\n CanvasBuilder.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) {\n var state = this.state;\n if (fillStyle) {\n var fillStyleColor = fillStyle.getColor();\n state.fillStyle = asColorLike(fillStyleColor ? fillStyleColor : defaultFillStyle);\n }\n else {\n state.fillStyle = undefined;\n }\n if (strokeStyle) {\n var strokeStyleColor = strokeStyle.getColor();\n state.strokeStyle = asColorLike(strokeStyleColor ? strokeStyleColor : defaultStrokeStyle);\n var strokeStyleLineCap = strokeStyle.getLineCap();\n state.lineCap =\n strokeStyleLineCap !== undefined ? strokeStyleLineCap : defaultLineCap;\n var strokeStyleLineDash = strokeStyle.getLineDash();\n state.lineDash = strokeStyleLineDash\n ? strokeStyleLineDash.slice()\n : defaultLineDash;\n var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n state.lineDashOffset = strokeStyleLineDashOffset\n ? strokeStyleLineDashOffset\n : defaultLineDashOffset;\n var strokeStyleLineJoin = strokeStyle.getLineJoin();\n state.lineJoin =\n strokeStyleLineJoin !== undefined\n ? strokeStyleLineJoin\n : defaultLineJoin;\n var strokeStyleWidth = strokeStyle.getWidth();\n state.lineWidth =\n strokeStyleWidth !== undefined ? strokeStyleWidth : defaultLineWidth;\n var strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n state.miterLimit =\n strokeStyleMiterLimit !== undefined\n ? strokeStyleMiterLimit\n : defaultMiterLimit;\n if (state.lineWidth > this.maxLineWidth) {\n this.maxLineWidth = state.lineWidth;\n // invalidate the buffered max extent cache\n this.bufferedMaxExtent_ = null;\n }\n }\n else {\n state.strokeStyle = undefined;\n state.lineCap = undefined;\n state.lineDash = null;\n state.lineDashOffset = undefined;\n state.lineJoin = undefined;\n state.lineWidth = undefined;\n state.miterLimit = undefined;\n }\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n * @return {Array<*>} Fill instruction.\n */\n CanvasBuilder.prototype.createFill = function (state) {\n var fillStyle = state.fillStyle;\n /** @type {Array<*>} */\n var fillInstruction = [CanvasInstruction.SET_FILL_STYLE, fillStyle];\n if (typeof fillStyle !== 'string') {\n // Fill is a pattern or gradient - align it!\n fillInstruction.push(true);\n }\n return fillInstruction;\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n */\n CanvasBuilder.prototype.applyStroke = function (state) {\n this.instructions.push(this.createStroke(state));\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n * @return {Array<*>} Stroke instruction.\n */\n CanvasBuilder.prototype.createStroke = function (state) {\n return [\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth * this.pixelRatio,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n this.applyPixelRatio(state.lineDash),\n state.lineDashOffset * this.pixelRatio,\n ];\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n * @param {function(this:CanvasBuilder, import(\"../canvas.js\").FillStrokeState):Array<*>} createFill Create fill.\n */\n CanvasBuilder.prototype.updateFillStyle = function (state, createFill) {\n var fillStyle = state.fillStyle;\n if (typeof fillStyle !== 'string' || state.currentFillStyle != fillStyle) {\n if (fillStyle !== undefined) {\n this.instructions.push(createFill.call(this, state));\n }\n state.currentFillStyle = fillStyle;\n }\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n * @param {function(this:CanvasBuilder, import(\"../canvas.js\").FillStrokeState): void} applyStroke Apply stroke.\n */\n CanvasBuilder.prototype.updateStrokeStyle = function (state, applyStroke) {\n var strokeStyle = state.strokeStyle;\n var lineCap = state.lineCap;\n var lineDash = state.lineDash;\n var lineDashOffset = state.lineDashOffset;\n var lineJoin = state.lineJoin;\n var lineWidth = state.lineWidth;\n var miterLimit = state.miterLimit;\n if (state.currentStrokeStyle != strokeStyle ||\n state.currentLineCap != lineCap ||\n (lineDash != state.currentLineDash &&\n !equals(state.currentLineDash, lineDash)) ||\n state.currentLineDashOffset != lineDashOffset ||\n state.currentLineJoin != lineJoin ||\n state.currentLineWidth != lineWidth ||\n state.currentMiterLimit != miterLimit) {\n if (strokeStyle !== undefined) {\n applyStroke.call(this, state);\n }\n state.currentStrokeStyle = strokeStyle;\n state.currentLineCap = lineCap;\n state.currentLineDash = lineDash;\n state.currentLineDashOffset = lineDashOffset;\n state.currentLineJoin = lineJoin;\n state.currentLineWidth = lineWidth;\n state.currentMiterLimit = miterLimit;\n }\n };\n /**\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasBuilder.prototype.endGeometry = function (feature) {\n this.beginGeometryInstruction1_[2] = this.instructions.length;\n this.beginGeometryInstruction1_ = null;\n this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length;\n this.beginGeometryInstruction2_ = null;\n var endGeometryInstruction = [CanvasInstruction.END_GEOMETRY, feature];\n this.instructions.push(endGeometryInstruction);\n this.hitDetectionInstructions.push(endGeometryInstruction);\n };\n /**\n * Get the buffered rendering extent. Rendering will be clipped to the extent\n * provided to the constructor. To account for symbolizers that may intersect\n * this extent, we calculate a buffered extent (e.g. based on stroke width).\n * @return {import(\"../../extent.js\").Extent} The buffered rendering extent.\n * @protected\n */\n CanvasBuilder.prototype.getBufferedMaxExtent = function () {\n if (!this.bufferedMaxExtent_) {\n this.bufferedMaxExtent_ = clone(this.maxExtent);\n if (this.maxLineWidth > 0) {\n var width = (this.resolution * (this.maxLineWidth + 1)) / 2;\n buffer(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);\n }\n }\n return this.bufferedMaxExtent_;\n };\n return CanvasBuilder;\n}(VectorContext));\nexport default CanvasBuilder;\n//# sourceMappingURL=Builder.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/render/canvas/ImageBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction from './Instruction.js';\nvar CanvasImageBuilder = /** @class */ (function (_super) {\n __extends(CanvasImageBuilder, _super);\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function CanvasImageBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n var _this = _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}\n */\n _this.hitDetectionImage_ = null;\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}\n */\n _this.image_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.imagePixelRatio_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.anchorX_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.anchorY_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.height_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.opacity_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.originX_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.originY_ = undefined;\n /**\n * @private\n * @type {boolean|undefined}\n */\n _this.rotateWithView_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.rotation_ = undefined;\n /**\n * @private\n * @type {import(\"../../size.js\").Size|undefined}\n */\n _this.scale_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.width_ = undefined;\n /**\n * Data shared with a text builder for combined decluttering.\n * @private\n * @type {import(\"../canvas.js\").DeclutterImageWithText}\n */\n _this.declutterImageWithText_ = undefined;\n return _this;\n }\n /**\n * @param {import(\"../../geom/Point.js\").default|import(\"../Feature.js\").default} pointGeometry Point geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasImageBuilder.prototype.drawPoint = function (pointGeometry, feature) {\n if (!this.image_) {\n return;\n }\n this.beginGeometry(pointGeometry, feature);\n var flatCoordinates = pointGeometry.getFlatCoordinates();\n var stride = pointGeometry.getStride();\n var myBegin = this.coordinates.length;\n var myEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n this.instructions.push([\n CanvasInstruction.DRAW_IMAGE,\n myBegin,\n myEnd,\n this.image_,\n // Remaining arguments to DRAW_IMAGE are in alphabetical order\n this.anchorX_ * this.imagePixelRatio_,\n this.anchorY_ * this.imagePixelRatio_,\n Math.ceil(this.height_ * this.imagePixelRatio_),\n this.opacity_,\n this.originX_,\n this.originY_,\n this.rotateWithView_,\n this.rotation_,\n [\n (this.scale_[0] * this.pixelRatio) / this.imagePixelRatio_,\n (this.scale_[1] * this.pixelRatio) / this.imagePixelRatio_,\n ],\n Math.ceil(this.width_ * this.imagePixelRatio_),\n this.declutterImageWithText_,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.DRAW_IMAGE,\n myBegin,\n myEnd,\n this.hitDetectionImage_,\n // Remaining arguments to DRAW_IMAGE are in alphabetical order\n this.anchorX_,\n this.anchorY_,\n this.height_,\n this.opacity_,\n this.originX_,\n this.originY_,\n this.rotateWithView_,\n this.rotation_,\n this.scale_,\n this.width_,\n this.declutterImageWithText_,\n ]);\n this.endGeometry(feature);\n };\n /**\n * @param {import(\"../../geom/MultiPoint.js\").default|import(\"../Feature.js\").default} multiPointGeometry MultiPoint geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasImageBuilder.prototype.drawMultiPoint = function (multiPointGeometry, feature) {\n if (!this.image_) {\n return;\n }\n this.beginGeometry(multiPointGeometry, feature);\n var flatCoordinates = multiPointGeometry.getFlatCoordinates();\n var stride = multiPointGeometry.getStride();\n var myBegin = this.coordinates.length;\n var myEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n this.instructions.push([\n CanvasInstruction.DRAW_IMAGE,\n myBegin,\n myEnd,\n this.image_,\n // Remaining arguments to DRAW_IMAGE are in alphabetical order\n this.anchorX_ * this.imagePixelRatio_,\n this.anchorY_ * this.imagePixelRatio_,\n Math.ceil(this.height_ * this.imagePixelRatio_),\n this.opacity_,\n this.originX_,\n this.originY_,\n this.rotateWithView_,\n this.rotation_,\n [\n (this.scale_[0] * this.pixelRatio) / this.imagePixelRatio_,\n (this.scale_[1] * this.pixelRatio) / this.imagePixelRatio_,\n ],\n Math.ceil(this.width_ * this.imagePixelRatio_),\n this.declutterImageWithText_,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.DRAW_IMAGE,\n myBegin,\n myEnd,\n this.hitDetectionImage_,\n // Remaining arguments to DRAW_IMAGE are in alphabetical order\n this.anchorX_,\n this.anchorY_,\n this.height_,\n this.opacity_,\n this.originX_,\n this.originY_,\n this.rotateWithView_,\n this.rotation_,\n this.scale_,\n this.width_,\n this.declutterImageWithText_,\n ]);\n this.endGeometry(feature);\n };\n /**\n * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n */\n CanvasImageBuilder.prototype.finish = function () {\n this.reverseHitDetectionInstructions();\n // FIXME this doesn't really protect us against further calls to draw*Geometry\n this.anchorX_ = undefined;\n this.anchorY_ = undefined;\n this.hitDetectionImage_ = null;\n this.image_ = null;\n this.imagePixelRatio_ = undefined;\n this.height_ = undefined;\n this.scale_ = undefined;\n this.opacity_ = undefined;\n this.originX_ = undefined;\n this.originY_ = undefined;\n this.rotateWithView_ = undefined;\n this.rotation_ = undefined;\n this.width_ = undefined;\n return _super.prototype.finish.call(this);\n };\n /**\n * @param {import(\"../../style/Image.js\").default} imageStyle Image style.\n * @param {Object=} opt_sharedData Shared data.\n */\n CanvasImageBuilder.prototype.setImageStyle = function (imageStyle, opt_sharedData) {\n var anchor = imageStyle.getAnchor();\n var size = imageStyle.getSize();\n var hitDetectionImage = imageStyle.getHitDetectionImage();\n var image = imageStyle.getImage(this.pixelRatio);\n var origin = imageStyle.getOrigin();\n this.imagePixelRatio_ = imageStyle.getPixelRatio(this.pixelRatio);\n this.anchorX_ = anchor[0];\n this.anchorY_ = anchor[1];\n this.hitDetectionImage_ = hitDetectionImage;\n this.image_ = image;\n this.height_ = size[1];\n this.opacity_ = imageStyle.getOpacity();\n this.originX_ = origin[0];\n this.originY_ = origin[1];\n this.rotateWithView_ = imageStyle.getRotateWithView();\n this.rotation_ = imageStyle.getRotation();\n this.scale_ = imageStyle.getScaleArray();\n this.width_ = size[0];\n this.declutterImageWithText_ = opt_sharedData;\n };\n return CanvasImageBuilder;\n}(CanvasBuilder));\nexport default CanvasImageBuilder;\n//# sourceMappingURL=ImageBuilder.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/render/canvas/LineStringBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction, { beginPathInstruction, strokeInstruction, } from './Instruction.js';\nvar CanvasLineStringBuilder = /** @class */ (function (_super) {\n __extends(CanvasLineStringBuilder, _super);\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function CanvasLineStringBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n return _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n }\n /**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n * @return {number} end.\n */\n CanvasLineStringBuilder.prototype.drawFlatCoordinates_ = function (flatCoordinates, offset, end, stride) {\n var myBegin = this.coordinates.length;\n var myEnd = this.appendFlatLineCoordinates(flatCoordinates, offset, end, stride, false, false);\n var moveToLineToInstruction = [\n CanvasInstruction.MOVE_TO_LINE_TO,\n myBegin,\n myEnd,\n ];\n this.instructions.push(moveToLineToInstruction);\n this.hitDetectionInstructions.push(moveToLineToInstruction);\n return end;\n };\n /**\n * @param {import(\"../../geom/LineString.js\").default|import(\"../Feature.js\").default} lineStringGeometry Line string geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasLineStringBuilder.prototype.drawLineString = function (lineStringGeometry, feature) {\n var state = this.state;\n var strokeStyle = state.strokeStyle;\n var lineWidth = state.lineWidth;\n if (strokeStyle === undefined || lineWidth === undefined) {\n return;\n }\n this.updateStrokeStyle(state, this.applyStroke);\n this.beginGeometry(lineStringGeometry, feature);\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n state.lineDash,\n state.lineDashOffset,\n ], beginPathInstruction);\n var flatCoordinates = lineStringGeometry.getFlatCoordinates();\n var stride = lineStringGeometry.getStride();\n this.drawFlatCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);\n this.hitDetectionInstructions.push(strokeInstruction);\n this.endGeometry(feature);\n };\n /**\n * @param {import(\"../../geom/MultiLineString.js\").default|import(\"../Feature.js\").default} multiLineStringGeometry MultiLineString geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasLineStringBuilder.prototype.drawMultiLineString = function (multiLineStringGeometry, feature) {\n var state = this.state;\n var strokeStyle = state.strokeStyle;\n var lineWidth = state.lineWidth;\n if (strokeStyle === undefined || lineWidth === undefined) {\n return;\n }\n this.updateStrokeStyle(state, this.applyStroke);\n this.beginGeometry(multiLineStringGeometry, feature);\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n state.lineDash,\n state.lineDashOffset,\n ], beginPathInstruction);\n var ends = multiLineStringGeometry.getEnds();\n var flatCoordinates = multiLineStringGeometry.getFlatCoordinates();\n var stride = multiLineStringGeometry.getStride();\n var offset = 0;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n offset = this.drawFlatCoordinates_(flatCoordinates, offset, \n /** @type {number} */ (ends[i]), stride);\n }\n this.hitDetectionInstructions.push(strokeInstruction);\n this.endGeometry(feature);\n };\n /**\n * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n */\n CanvasLineStringBuilder.prototype.finish = function () {\n var state = this.state;\n if (state.lastStroke != undefined &&\n state.lastStroke != this.coordinates.length) {\n this.instructions.push(strokeInstruction);\n }\n this.reverseHitDetectionInstructions();\n this.state = null;\n return _super.prototype.finish.call(this);\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n */\n CanvasLineStringBuilder.prototype.applyStroke = function (state) {\n if (state.lastStroke != undefined &&\n state.lastStroke != this.coordinates.length) {\n this.instructions.push(strokeInstruction);\n state.lastStroke = this.coordinates.length;\n }\n state.lastStroke = 0;\n _super.prototype.applyStroke.call(this, state);\n this.instructions.push(beginPathInstruction);\n };\n return CanvasLineStringBuilder;\n}(CanvasBuilder));\nexport default CanvasLineStringBuilder;\n//# sourceMappingURL=LineStringBuilder.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/render/canvas/PolygonBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction, { beginPathInstruction, closePathInstruction, fillInstruction, strokeInstruction, } from './Instruction.js';\nimport { defaultFillStyle } from '../canvas.js';\nimport { snap } from '../../geom/flat/simplify.js';\nvar CanvasPolygonBuilder = /** @class */ (function (_super) {\n __extends(CanvasPolygonBuilder, _super);\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function CanvasPolygonBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n return _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n }\n /**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @private\n * @return {number} End.\n */\n CanvasPolygonBuilder.prototype.drawFlatCoordinatess_ = function (flatCoordinates, offset, ends, stride) {\n var state = this.state;\n var fill = state.fillStyle !== undefined;\n var stroke = state.strokeStyle !== undefined;\n var numEnds = ends.length;\n this.instructions.push(beginPathInstruction);\n this.hitDetectionInstructions.push(beginPathInstruction);\n for (var i = 0; i < numEnds; ++i) {\n var end = ends[i];\n var myBegin = this.coordinates.length;\n var myEnd = this.appendFlatLineCoordinates(flatCoordinates, offset, end, stride, true, !stroke);\n var moveToLineToInstruction = [\n CanvasInstruction.MOVE_TO_LINE_TO,\n myBegin,\n myEnd,\n ];\n this.instructions.push(moveToLineToInstruction);\n this.hitDetectionInstructions.push(moveToLineToInstruction);\n if (stroke) {\n // Performance optimization: only call closePath() when we have a stroke.\n // Otherwise the ring is closed already (see appendFlatLineCoordinates above).\n this.instructions.push(closePathInstruction);\n this.hitDetectionInstructions.push(closePathInstruction);\n }\n offset = end;\n }\n if (fill) {\n this.instructions.push(fillInstruction);\n this.hitDetectionInstructions.push(fillInstruction);\n }\n if (stroke) {\n this.instructions.push(strokeInstruction);\n this.hitDetectionInstructions.push(strokeInstruction);\n }\n return offset;\n };\n /**\n * @param {import(\"../../geom/Circle.js\").default} circleGeometry Circle geometry.\n * @param {import(\"../../Feature.js\").default} feature Feature.\n */\n CanvasPolygonBuilder.prototype.drawCircle = function (circleGeometry, feature) {\n var state = this.state;\n var fillStyle = state.fillStyle;\n var strokeStyle = state.strokeStyle;\n if (fillStyle === undefined && strokeStyle === undefined) {\n return;\n }\n this.setFillStrokeStyles_();\n this.beginGeometry(circleGeometry, feature);\n if (state.fillStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_FILL_STYLE,\n defaultFillStyle,\n ]);\n }\n if (state.strokeStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n state.lineDash,\n state.lineDashOffset,\n ]);\n }\n var flatCoordinates = circleGeometry.getFlatCoordinates();\n var stride = circleGeometry.getStride();\n var myBegin = this.coordinates.length;\n this.appendFlatLineCoordinates(flatCoordinates, 0, flatCoordinates.length, stride, false, false);\n var circleInstruction = [CanvasInstruction.CIRCLE, myBegin];\n this.instructions.push(beginPathInstruction, circleInstruction);\n this.hitDetectionInstructions.push(beginPathInstruction, circleInstruction);\n if (state.fillStyle !== undefined) {\n this.instructions.push(fillInstruction);\n this.hitDetectionInstructions.push(fillInstruction);\n }\n if (state.strokeStyle !== undefined) {\n this.instructions.push(strokeInstruction);\n this.hitDetectionInstructions.push(strokeInstruction);\n }\n this.endGeometry(feature);\n };\n /**\n * @param {import(\"../../geom/Polygon.js\").default|import(\"../Feature.js\").default} polygonGeometry Polygon geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasPolygonBuilder.prototype.drawPolygon = function (polygonGeometry, feature) {\n var state = this.state;\n var fillStyle = state.fillStyle;\n var strokeStyle = state.strokeStyle;\n if (fillStyle === undefined && strokeStyle === undefined) {\n return;\n }\n this.setFillStrokeStyles_();\n this.beginGeometry(polygonGeometry, feature);\n if (state.fillStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_FILL_STYLE,\n defaultFillStyle,\n ]);\n }\n if (state.strokeStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n state.lineDash,\n state.lineDashOffset,\n ]);\n }\n var ends = polygonGeometry.getEnds();\n var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates();\n var stride = polygonGeometry.getStride();\n this.drawFlatCoordinatess_(flatCoordinates, 0, \n /** @type {Array<number>} */ (ends), stride);\n this.endGeometry(feature);\n };\n /**\n * @param {import(\"../../geom/MultiPolygon.js\").default} multiPolygonGeometry MultiPolygon geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasPolygonBuilder.prototype.drawMultiPolygon = function (multiPolygonGeometry, feature) {\n var state = this.state;\n var fillStyle = state.fillStyle;\n var strokeStyle = state.strokeStyle;\n if (fillStyle === undefined && strokeStyle === undefined) {\n return;\n }\n this.setFillStrokeStyles_();\n this.beginGeometry(multiPolygonGeometry, feature);\n if (state.fillStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_FILL_STYLE,\n defaultFillStyle,\n ]);\n }\n if (state.strokeStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n state.lineDash,\n state.lineDashOffset,\n ]);\n }\n var endss = multiPolygonGeometry.getEndss();\n var flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates();\n var stride = multiPolygonGeometry.getStride();\n var offset = 0;\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n offset = this.drawFlatCoordinatess_(flatCoordinates, offset, endss[i], stride);\n }\n this.endGeometry(feature);\n };\n /**\n * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n */\n CanvasPolygonBuilder.prototype.finish = function () {\n this.reverseHitDetectionInstructions();\n this.state = null;\n // We want to preserve topology when drawing polygons. Polygons are\n // simplified using quantization and point elimination. However, we might\n // have received a mix of quantized and non-quantized geometries, so ensure\n // that all are quantized by quantizing all coordinates in the batch.\n var tolerance = this.tolerance;\n if (tolerance !== 0) {\n var coordinates = this.coordinates;\n for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n coordinates[i] = snap(coordinates[i], tolerance);\n }\n }\n return _super.prototype.finish.call(this);\n };\n /**\n * @private\n */\n CanvasPolygonBuilder.prototype.setFillStrokeStyles_ = function () {\n var state = this.state;\n var fillStyle = state.fillStyle;\n if (fillStyle !== undefined) {\n this.updateFillStyle(state, this.createFill);\n }\n if (state.strokeStyle !== undefined) {\n this.updateStrokeStyle(state, this.applyStroke);\n }\n };\n return CanvasPolygonBuilder;\n}(CanvasBuilder));\nexport default CanvasPolygonBuilder;\n//# sourceMappingURL=PolygonBuilder.js.map","/**\n * @module ol/geom/flat/straightchunk\n */\n/**\n * @param {number} maxAngle Maximum acceptable angle delta between segments.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Array<number>} Start and end of the first suitable chunk of the\n * given `flatCoordinates`.\n */\nexport function matchingChunk(maxAngle, flatCoordinates, offset, end, stride) {\n var chunkStart = offset;\n var chunkEnd = offset;\n var chunkM = 0;\n var m = 0;\n var start = offset;\n var acos, i, m12, m23, x1, y1, x12, y12, x23, y23;\n for (i = offset; i < end; i += stride) {\n var x2 = flatCoordinates[i];\n var y2 = flatCoordinates[i + 1];\n if (x1 !== undefined) {\n x23 = x2 - x1;\n y23 = y2 - y1;\n m23 = Math.sqrt(x23 * x23 + y23 * y23);\n if (x12 !== undefined) {\n m += m12;\n acos = Math.acos((x12 * x23 + y12 * y23) / (m12 * m23));\n if (acos > maxAngle) {\n if (m > chunkM) {\n chunkM = m;\n chunkStart = start;\n chunkEnd = i;\n }\n m = 0;\n start = i - stride;\n }\n }\n m12 = m23;\n x12 = x23;\n y12 = y23;\n }\n x1 = x2;\n y1 = y2;\n }\n m += m23;\n return m > chunkM ? [start, i] : [chunkStart, chunkEnd];\n}\n//# sourceMappingURL=straightchunk.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/render/canvas/TextBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction from './Instruction.js';\nimport GeometryType from '../../geom/GeometryType.js';\nimport TextPlacement from '../../style/TextPlacement.js';\nimport { asColorLike } from '../../colorlike.js';\nimport { defaultFillStyle, defaultFont, defaultLineCap, defaultLineDash, defaultLineDashOffset, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultPadding, defaultStrokeStyle, defaultTextAlign, defaultTextBaseline, registerFont, } from '../canvas.js';\nimport { getUid } from '../../util.js';\nimport { intersects } from '../../extent.js';\nimport { matchingChunk } from '../../geom/flat/straightchunk.js';\n/**\n * @const\n * @enum {number}\n */\nexport var TEXT_ALIGN = {\n 'left': 0,\n 'end': 0,\n 'center': 0.5,\n 'right': 1,\n 'start': 1,\n 'top': 0,\n 'middle': 0.5,\n 'hanging': 0.2,\n 'alphabetic': 0.8,\n 'ideographic': 0.8,\n 'bottom': 1,\n};\nvar CanvasTextBuilder = /** @class */ (function (_super) {\n __extends(CanvasTextBuilder, _super);\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function CanvasTextBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n var _this = _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n /**\n * @private\n * @type {Array<HTMLCanvasElement>}\n */\n _this.labels_ = null;\n /**\n * @private\n * @type {string}\n */\n _this.text_ = '';\n /**\n * @private\n * @type {number}\n */\n _this.textOffsetX_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.textOffsetY_ = 0;\n /**\n * @private\n * @type {boolean|undefined}\n */\n _this.textRotateWithView_ = undefined;\n /**\n * @private\n * @type {number}\n */\n _this.textRotation_ = 0;\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n _this.textFillState_ = null;\n /**\n * @type {!Object<string, import(\"../canvas.js\").FillState>}\n */\n _this.fillStates = {};\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n _this.textStrokeState_ = null;\n /**\n * @type {!Object<string, import(\"../canvas.js\").StrokeState>}\n */\n _this.strokeStates = {};\n /**\n * @private\n * @type {import(\"../canvas.js\").TextState}\n */\n _this.textState_ = /** @type {import(\"../canvas.js\").TextState} */ ({});\n /**\n * @type {!Object<string, import(\"../canvas.js\").TextState>}\n */\n _this.textStates = {};\n /**\n * @private\n * @type {string}\n */\n _this.textKey_ = '';\n /**\n * @private\n * @type {string}\n */\n _this.fillKey_ = '';\n /**\n * @private\n * @type {string}\n */\n _this.strokeKey_ = '';\n /**\n * Data shared with an image builder for combined decluttering.\n * @private\n * @type {import(\"../canvas.js\").DeclutterImageWithText}\n */\n _this.declutterImageWithText_ = undefined;\n return _this;\n }\n /**\n * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n */\n CanvasTextBuilder.prototype.finish = function () {\n var instructions = _super.prototype.finish.call(this);\n instructions.textStates = this.textStates;\n instructions.fillStates = this.fillStates;\n instructions.strokeStates = this.strokeStates;\n return instructions;\n };\n /**\n * @param {import(\"../../geom/SimpleGeometry.js\").default|import(\"../Feature.js\").default} geometry Geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasTextBuilder.prototype.drawText = function (geometry, feature) {\n var fillState = this.textFillState_;\n var strokeState = this.textStrokeState_;\n var textState = this.textState_;\n if (this.text_ === '' || !textState || (!fillState && !strokeState)) {\n return;\n }\n var coordinates = this.coordinates;\n var begin = coordinates.length;\n var geometryType = geometry.getType();\n var flatCoordinates = null;\n var stride = geometry.getStride();\n if (textState.placement === TextPlacement.LINE &&\n (geometryType == GeometryType.LINE_STRING ||\n geometryType == GeometryType.MULTI_LINE_STRING ||\n geometryType == GeometryType.POLYGON ||\n geometryType == GeometryType.MULTI_POLYGON)) {\n if (!intersects(this.getBufferedMaxExtent(), geometry.getExtent())) {\n return;\n }\n var ends = void 0;\n flatCoordinates = geometry.getFlatCoordinates();\n if (geometryType == GeometryType.LINE_STRING) {\n ends = [flatCoordinates.length];\n }\n else if (geometryType == GeometryType.MULTI_LINE_STRING) {\n ends = /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry).getEnds();\n }\n else if (geometryType == GeometryType.POLYGON) {\n ends = /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry)\n .getEnds()\n .slice(0, 1);\n }\n else if (geometryType == GeometryType.MULTI_POLYGON) {\n var endss = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getEndss();\n ends = [];\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n ends.push(endss[i][0]);\n }\n }\n this.beginGeometry(geometry, feature);\n var textAlign = textState.textAlign;\n var flatOffset = 0;\n var flatEnd = void 0;\n for (var o = 0, oo = ends.length; o < oo; ++o) {\n if (textAlign == undefined) {\n var range = matchingChunk(textState.maxAngle, flatCoordinates, flatOffset, ends[o], stride);\n flatOffset = range[0];\n flatEnd = range[1];\n }\n else {\n flatEnd = ends[o];\n }\n for (var i = flatOffset; i < flatEnd; i += stride) {\n coordinates.push(flatCoordinates[i], flatCoordinates[i + 1]);\n }\n var end = coordinates.length;\n flatOffset = ends[o];\n this.drawChars_(begin, end);\n begin = end;\n }\n this.endGeometry(feature);\n }\n else {\n var geometryWidths = textState.overflow ? null : [];\n switch (geometryType) {\n case GeometryType.POINT:\n case GeometryType.MULTI_POINT:\n flatCoordinates = /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry).getFlatCoordinates();\n break;\n case GeometryType.LINE_STRING:\n flatCoordinates = /** @type {import(\"../../geom/LineString.js\").default} */ (geometry).getFlatMidpoint();\n break;\n case GeometryType.CIRCLE:\n flatCoordinates = /** @type {import(\"../../geom/Circle.js\").default} */ (geometry).getCenter();\n break;\n case GeometryType.MULTI_LINE_STRING:\n flatCoordinates = /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry).getFlatMidpoints();\n stride = 2;\n break;\n case GeometryType.POLYGON:\n flatCoordinates = /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry).getFlatInteriorPoint();\n if (!textState.overflow) {\n geometryWidths.push(flatCoordinates[2] / this.resolution);\n }\n stride = 3;\n break;\n case GeometryType.MULTI_POLYGON:\n var interiorPoints = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getFlatInteriorPoints();\n flatCoordinates = [];\n for (var i = 0, ii = interiorPoints.length; i < ii; i += 3) {\n if (!textState.overflow) {\n geometryWidths.push(interiorPoints[i + 2] / this.resolution);\n }\n flatCoordinates.push(interiorPoints[i], interiorPoints[i + 1]);\n }\n if (flatCoordinates.length === 0) {\n return;\n }\n stride = 2;\n break;\n default:\n }\n var end = this.appendFlatPointCoordinates(flatCoordinates, stride);\n if (end === begin) {\n return;\n }\n this.saveTextStates_();\n if (textState.backgroundFill || textState.backgroundStroke) {\n this.setFillStrokeStyle(textState.backgroundFill, textState.backgroundStroke);\n if (textState.backgroundFill) {\n this.updateFillStyle(this.state, this.createFill);\n this.hitDetectionInstructions.push(this.createFill(this.state));\n }\n if (textState.backgroundStroke) {\n this.updateStrokeStyle(this.state, this.applyStroke);\n this.hitDetectionInstructions.push(this.createStroke(this.state));\n }\n }\n this.beginGeometry(geometry, feature);\n // adjust padding for negative scale\n var padding = textState.padding;\n if (padding != defaultPadding &&\n (textState.scale[0] < 0 || textState.scale[1] < 0)) {\n var p0 = textState.padding[0];\n var p1 = textState.padding[1];\n var p2 = textState.padding[2];\n var p3 = textState.padding[3];\n if (textState.scale[0] < 0) {\n p1 = -p1;\n p3 = -p3;\n }\n if (textState.scale[1] < 0) {\n p0 = -p0;\n p2 = -p2;\n }\n padding = [p0, p1, p2, p3];\n }\n // The image is unknown at this stage so we pass null; it will be computed at render time.\n // For clarity, we pass NaN for offsetX, offsetY, width and height, which will be computed at\n // render time.\n var pixelRatio_1 = this.pixelRatio;\n this.instructions.push([\n CanvasInstruction.DRAW_IMAGE,\n begin,\n end,\n null,\n NaN,\n NaN,\n NaN,\n 1,\n 0,\n 0,\n this.textRotateWithView_,\n this.textRotation_,\n [1, 1],\n NaN,\n this.declutterImageWithText_,\n padding == defaultPadding\n ? defaultPadding\n : padding.map(function (p) {\n return p * pixelRatio_1;\n }),\n !!textState.backgroundFill,\n !!textState.backgroundStroke,\n this.text_,\n this.textKey_,\n this.strokeKey_,\n this.fillKey_,\n this.textOffsetX_,\n this.textOffsetY_,\n geometryWidths,\n ]);\n var scale = 1 / pixelRatio_1;\n this.hitDetectionInstructions.push([\n CanvasInstruction.DRAW_IMAGE,\n begin,\n end,\n null,\n NaN,\n NaN,\n NaN,\n 1,\n 0,\n 0,\n this.textRotateWithView_,\n this.textRotation_,\n [scale, scale],\n NaN,\n this.declutterImageWithText_,\n padding,\n !!textState.backgroundFill,\n !!textState.backgroundStroke,\n this.text_,\n this.textKey_,\n this.strokeKey_,\n this.fillKey_,\n this.textOffsetX_,\n this.textOffsetY_,\n geometryWidths,\n ]);\n this.endGeometry(feature);\n }\n };\n /**\n * @private\n */\n CanvasTextBuilder.prototype.saveTextStates_ = function () {\n var strokeState = this.textStrokeState_;\n var textState = this.textState_;\n var fillState = this.textFillState_;\n var strokeKey = this.strokeKey_;\n if (strokeState) {\n if (!(strokeKey in this.strokeStates)) {\n this.strokeStates[strokeKey] = {\n strokeStyle: strokeState.strokeStyle,\n lineCap: strokeState.lineCap,\n lineDashOffset: strokeState.lineDashOffset,\n lineWidth: strokeState.lineWidth,\n lineJoin: strokeState.lineJoin,\n miterLimit: strokeState.miterLimit,\n lineDash: strokeState.lineDash,\n };\n }\n }\n var textKey = this.textKey_;\n if (!(textKey in this.textStates)) {\n this.textStates[textKey] = {\n font: textState.font,\n textAlign: textState.textAlign || defaultTextAlign,\n textBaseline: textState.textBaseline || defaultTextBaseline,\n scale: textState.scale,\n };\n }\n var fillKey = this.fillKey_;\n if (fillState) {\n if (!(fillKey in this.fillStates)) {\n this.fillStates[fillKey] = {\n fillStyle: fillState.fillStyle,\n };\n }\n }\n };\n /**\n * @private\n * @param {number} begin Begin.\n * @param {number} end End.\n */\n CanvasTextBuilder.prototype.drawChars_ = function (begin, end) {\n var strokeState = this.textStrokeState_;\n var textState = this.textState_;\n var strokeKey = this.strokeKey_;\n var textKey = this.textKey_;\n var fillKey = this.fillKey_;\n this.saveTextStates_();\n var pixelRatio = this.pixelRatio;\n var baseline = TEXT_ALIGN[textState.textBaseline];\n var offsetY = this.textOffsetY_ * pixelRatio;\n var text = this.text_;\n var strokeWidth = strokeState\n ? (strokeState.lineWidth * Math.abs(textState.scale[0])) / 2\n : 0;\n this.instructions.push([\n CanvasInstruction.DRAW_CHARS,\n begin,\n end,\n baseline,\n textState.overflow,\n fillKey,\n textState.maxAngle,\n pixelRatio,\n offsetY,\n strokeKey,\n strokeWidth * pixelRatio,\n text,\n textKey,\n 1,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.DRAW_CHARS,\n begin,\n end,\n baseline,\n textState.overflow,\n fillKey,\n textState.maxAngle,\n 1,\n offsetY,\n strokeKey,\n strokeWidth,\n text,\n textKey,\n 1 / pixelRatio,\n ]);\n };\n /**\n * @param {import(\"../../style/Text.js\").default} textStyle Text style.\n * @param {Object=} opt_sharedData Shared data.\n */\n CanvasTextBuilder.prototype.setTextStyle = function (textStyle, opt_sharedData) {\n var textState, fillState, strokeState;\n if (!textStyle) {\n this.text_ = '';\n }\n else {\n var textFillStyle = textStyle.getFill();\n if (!textFillStyle) {\n fillState = null;\n this.textFillState_ = fillState;\n }\n else {\n fillState = this.textFillState_;\n if (!fillState) {\n fillState = /** @type {import(\"../canvas.js\").FillState} */ ({});\n this.textFillState_ = fillState;\n }\n fillState.fillStyle = asColorLike(textFillStyle.getColor() || defaultFillStyle);\n }\n var textStrokeStyle = textStyle.getStroke();\n if (!textStrokeStyle) {\n strokeState = null;\n this.textStrokeState_ = strokeState;\n }\n else {\n strokeState = this.textStrokeState_;\n if (!strokeState) {\n strokeState = /** @type {import(\"../canvas.js\").StrokeState} */ ({});\n this.textStrokeState_ = strokeState;\n }\n var lineDash = textStrokeStyle.getLineDash();\n var lineDashOffset = textStrokeStyle.getLineDashOffset();\n var lineWidth = textStrokeStyle.getWidth();\n var miterLimit = textStrokeStyle.getMiterLimit();\n strokeState.lineCap = textStrokeStyle.getLineCap() || defaultLineCap;\n strokeState.lineDash = lineDash ? lineDash.slice() : defaultLineDash;\n strokeState.lineDashOffset =\n lineDashOffset === undefined ? defaultLineDashOffset : lineDashOffset;\n strokeState.lineJoin = textStrokeStyle.getLineJoin() || defaultLineJoin;\n strokeState.lineWidth =\n lineWidth === undefined ? defaultLineWidth : lineWidth;\n strokeState.miterLimit =\n miterLimit === undefined ? defaultMiterLimit : miterLimit;\n strokeState.strokeStyle = asColorLike(textStrokeStyle.getColor() || defaultStrokeStyle);\n }\n textState = this.textState_;\n var font = textStyle.getFont() || defaultFont;\n registerFont(font);\n var textScale = textStyle.getScaleArray();\n textState.overflow = textStyle.getOverflow();\n textState.font = font;\n textState.maxAngle = textStyle.getMaxAngle();\n textState.placement = textStyle.getPlacement();\n textState.textAlign = textStyle.getTextAlign();\n textState.textBaseline =\n textStyle.getTextBaseline() || defaultTextBaseline;\n textState.backgroundFill = textStyle.getBackgroundFill();\n textState.backgroundStroke = textStyle.getBackgroundStroke();\n textState.padding = textStyle.getPadding() || defaultPadding;\n textState.scale = textScale === undefined ? [1, 1] : textScale;\n var textOffsetX = textStyle.getOffsetX();\n var textOffsetY = textStyle.getOffsetY();\n var textRotateWithView = textStyle.getRotateWithView();\n var textRotation = textStyle.getRotation();\n this.text_ = textStyle.getText() || '';\n this.textOffsetX_ = textOffsetX === undefined ? 0 : textOffsetX;\n this.textOffsetY_ = textOffsetY === undefined ? 0 : textOffsetY;\n this.textRotateWithView_ =\n textRotateWithView === undefined ? false : textRotateWithView;\n this.textRotation_ = textRotation === undefined ? 0 : textRotation;\n this.strokeKey_ = strokeState\n ? (typeof strokeState.strokeStyle == 'string'\n ? strokeState.strokeStyle\n : getUid(strokeState.strokeStyle)) +\n strokeState.lineCap +\n strokeState.lineDashOffset +\n '|' +\n strokeState.lineWidth +\n strokeState.lineJoin +\n strokeState.miterLimit +\n '[' +\n strokeState.lineDash.join() +\n ']'\n : '';\n this.textKey_ =\n textState.font +\n textState.scale +\n (textState.textAlign || '?') +\n (textState.textBaseline || '?');\n this.fillKey_ = fillState\n ? typeof fillState.fillStyle == 'string'\n ? fillState.fillStyle\n : '|' + getUid(fillState.fillStyle)\n : '';\n }\n this.declutterImageWithText_ = opt_sharedData;\n };\n return CanvasTextBuilder;\n}(CanvasBuilder));\nexport default CanvasTextBuilder;\n//# sourceMappingURL=TextBuilder.js.map","/**\n * @module ol/render/canvas/BuilderGroup\n */\nimport Builder from './Builder.js';\nimport ImageBuilder from './ImageBuilder.js';\nimport LineStringBuilder from './LineStringBuilder.js';\nimport PolygonBuilder from './PolygonBuilder.js';\nimport TextBuilder from './TextBuilder.js';\n/**\n * @type {Object<import(\"./BuilderType\").default, typeof Builder>}\n */\nvar BATCH_CONSTRUCTORS = {\n 'Circle': PolygonBuilder,\n 'Default': Builder,\n 'Image': ImageBuilder,\n 'LineString': LineStringBuilder,\n 'Polygon': PolygonBuilder,\n 'Text': TextBuilder,\n};\nvar BuilderGroup = /** @class */ (function () {\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Max extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function BuilderGroup(tolerance, maxExtent, resolution, pixelRatio) {\n /**\n * @private\n * @type {number}\n */\n this.tolerance_ = tolerance;\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n this.maxExtent_ = maxExtent;\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n /**\n * @private\n * @type {number}\n */\n this.resolution_ = resolution;\n /**\n * @private\n * @type {!Object<string, !Object<import(\"./BuilderType\").default, Builder>>}\n */\n this.buildersByZIndex_ = {};\n }\n /**\n * @return {!Object<string, !Object<import(\"./BuilderType\").default, import(\"./Builder.js\").SerializableInstructions>>} The serializable instructions\n */\n BuilderGroup.prototype.finish = function () {\n var builderInstructions = {};\n for (var zKey in this.buildersByZIndex_) {\n builderInstructions[zKey] = builderInstructions[zKey] || {};\n var builders = this.buildersByZIndex_[zKey];\n for (var builderKey in builders) {\n var builderInstruction = builders[builderKey].finish();\n builderInstructions[zKey][builderKey] = builderInstruction;\n }\n }\n return builderInstructions;\n };\n /**\n * @param {number|undefined} zIndex Z index.\n * @param {import(\"./BuilderType.js\").default} builderType Replay type.\n * @return {import(\"../VectorContext.js\").default} Replay.\n */\n BuilderGroup.prototype.getBuilder = function (zIndex, builderType) {\n var zIndexKey = zIndex !== undefined ? zIndex.toString() : '0';\n var replays = this.buildersByZIndex_[zIndexKey];\n if (replays === undefined) {\n replays = {};\n this.buildersByZIndex_[zIndexKey] = replays;\n }\n var replay = replays[builderType];\n if (replay === undefined) {\n var Constructor = BATCH_CONSTRUCTORS[builderType];\n replay = new Constructor(this.tolerance_, this.maxExtent_, this.resolution_, this.pixelRatio_);\n replays[builderType] = replay;\n }\n return replay;\n };\n return BuilderGroup;\n}());\nexport default BuilderGroup;\n//# sourceMappingURL=BuilderGroup.js.map","/**\n * @module ol/render/canvas/BuilderType\n */\n/**\n * @enum {string}\n */\nexport default {\n CIRCLE: 'Circle',\n DEFAULT: 'Default',\n IMAGE: 'Image',\n LINE_STRING: 'LineString',\n POLYGON: 'Polygon',\n TEXT: 'Text',\n};\n//# sourceMappingURL=BuilderType.js.map","/**\n * @module ol/geom/flat/textpath\n */\nimport { lerp } from '../../math.js';\nimport { rotate } from './transform.js';\n/**\n * @param {Array<number>} flatCoordinates Path to put text on.\n * @param {number} offset Start offset of the `flatCoordinates`.\n * @param {number} end End offset of the `flatCoordinates`.\n * @param {number} stride Stride.\n * @param {string} text Text to place on the path.\n * @param {number} startM m along the path where the text starts.\n * @param {number} maxAngle Max angle between adjacent chars in radians.\n * @param {number} scale The product of the text scale and the device pixel ratio.\n * @param {function(string, string, Object<string, number>):number} measureAndCacheTextWidth Measure and cache text width.\n * @param {string} font The font.\n * @param {Object<string, number>} cache A cache of measured widths.\n * @param {number} rotation Rotation to apply to the flatCoordinates to determine whether text needs to be reversed.\n * @return {Array<Array<*>>} The result array (or null if `maxAngle` was\n * exceeded). Entries of the array are x, y, anchorX, angle, chunk.\n */\nexport function drawTextOnPath(flatCoordinates, offset, end, stride, text, startM, maxAngle, scale, measureAndCacheTextWidth, font, cache, rotation) {\n var x2 = flatCoordinates[offset];\n var y2 = flatCoordinates[offset + 1];\n var x1 = 0;\n var y1 = 0;\n var segmentLength = 0;\n var segmentM = 0;\n function advance() {\n x1 = x2;\n y1 = y2;\n offset += stride;\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n segmentM += segmentLength;\n segmentLength = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n do {\n advance();\n } while (offset < end - stride && segmentM + segmentLength < startM);\n var interpolate = (startM - segmentM) / segmentLength;\n var beginX = lerp(x1, x2, interpolate);\n var beginY = lerp(y1, y2, interpolate);\n var startOffset = offset - stride;\n var startLength = segmentM;\n var endM = startM + scale * measureAndCacheTextWidth(font, text, cache);\n while (offset < end - stride && segmentM + segmentLength < endM) {\n advance();\n }\n interpolate = (endM - segmentM) / segmentLength;\n var endX = lerp(x1, x2, interpolate);\n var endY = lerp(y1, y2, interpolate);\n // Keep text upright\n var reverse;\n if (rotation) {\n var flat = [beginX, beginY, endX, endY];\n rotate(flat, 0, 4, 2, rotation, flat, flat);\n reverse = flat[0] > flat[2];\n }\n else {\n reverse = beginX > endX;\n }\n var PI = Math.PI;\n var result = [];\n var singleSegment = startOffset + stride === offset;\n offset = startOffset;\n segmentLength = 0;\n segmentM = startLength;\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n // All on the same segment\n if (singleSegment) {\n advance();\n var previousAngle_1 = Math.atan2(y2 - y1, x2 - x1);\n if (reverse) {\n previousAngle_1 += previousAngle_1 > 0 ? -PI : PI;\n }\n var x = (endX + beginX) / 2;\n var y = (endY + beginY) / 2;\n result[0] = [x, y, (endM - startM) / 2, previousAngle_1, text];\n return result;\n }\n var previousAngle;\n for (var i = 0, ii = text.length; i < ii;) {\n advance();\n var angle = Math.atan2(y2 - y1, x2 - x1);\n if (reverse) {\n angle += angle > 0 ? -PI : PI;\n }\n if (previousAngle !== undefined) {\n var delta = angle - previousAngle;\n delta += delta > PI ? -2 * PI : delta < -PI ? 2 * PI : 0;\n if (Math.abs(delta) > maxAngle) {\n return null;\n }\n }\n previousAngle = angle;\n var iStart = i;\n var charLength = 0;\n for (; i < ii; ++i) {\n var index = reverse ? ii - i - 1 : i;\n var len = scale * measureAndCacheTextWidth(font, text[index], cache);\n if (offset + stride < end &&\n segmentM + segmentLength < startM + charLength + len / 2) {\n break;\n }\n charLength += len;\n }\n if (i === iStart) {\n continue;\n }\n var chars = reverse\n ? text.substring(ii - iStart, ii - i)\n : text.substring(iStart, i);\n interpolate = (startM + charLength / 2 - segmentM) / segmentLength;\n var x = lerp(x1, x2, interpolate);\n var y = lerp(y1, y2, interpolate);\n result.push([x, y, charLength / 2, angle, chars]);\n startM += charLength;\n }\n return result;\n}\n//# sourceMappingURL=textpath.js.map","/**\n * @module ol/render/canvas/Executor\n */\nimport CanvasInstruction from './Instruction.js';\nimport { TEXT_ALIGN } from './TextBuilder.js';\nimport { WORKER_OFFSCREEN_CANVAS } from '../../has.js';\nimport { apply as applyTransform, compose as composeTransform, create as createTransform, setFromArray as transformSetFromArray, } from '../../transform.js';\nimport { createEmpty, createOrUpdate, intersects } from '../../extent.js';\nimport { defaultPadding, defaultTextBaseline, drawImageOrLabel, } from '../canvas.js';\nimport { defaultTextAlign, measureAndCacheTextWidth, measureTextHeight, measureTextWidths, } from '../canvas.js';\nimport { drawTextOnPath } from '../../geom/flat/textpath.js';\nimport { equals } from '../../array.js';\nimport { lineStringLength } from '../../geom/flat/length.js';\nimport { transform2D } from '../../geom/flat/transform.js';\n/**\n * @typedef {Object} BBox\n * @property {number} minX\n * @property {number} minY\n * @property {number} maxX\n * @property {number} maxY\n * @property {*} value\n */\n/**\n * @typedef {Object} ImageOrLabelDimensions\n * @property {number} drawImageX\n * @property {number} drawImageY\n * @property {number} drawImageW\n * @property {number} drawImageH\n * @property {number} originX\n * @property {number} originY\n * @property {Array<number>} scale\n * @property {BBox} declutterBox\n * @property {import(\"../../transform.js\").Transform} canvasTransform\n */\n/**\n * @typedef {{0: CanvasRenderingContext2D, 1: number, 2: import(\"../canvas.js\").Label|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement, 3: ImageOrLabelDimensions, 4: number, 5: Array<*>, 6: Array<*>}} ReplayImageOrLabelArgs\n */\n/**\n * @template T\n * @typedef {function(import(\"../../Feature.js\").FeatureLike, import(\"../../geom/SimpleGeometry.js\").default): T} FeatureCallback\n */\n/**\n * @type {import(\"../../extent.js\").Extent}\n */\nvar tmpExtent = createEmpty();\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p1 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p2 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p3 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p4 = [];\n/**\n * @param {ReplayImageOrLabelArgs} replayImageOrLabelArgs Arguments to replayImageOrLabel\n * @return {BBox} Declutter bbox.\n */\nfunction getDeclutterBox(replayImageOrLabelArgs) {\n return replayImageOrLabelArgs[3].declutterBox;\n}\nvar rtlRegEx = new RegExp(\n/* eslint-disable prettier/prettier */\n'[' +\n String.fromCharCode(0x00591) + '-' + String.fromCharCode(0x008ff) +\n String.fromCharCode(0x0fb1d) + '-' + String.fromCharCode(0x0fdff) +\n String.fromCharCode(0x0fe70) + '-' + String.fromCharCode(0x0fefc) +\n String.fromCharCode(0x10800) + '-' + String.fromCharCode(0x10fff) +\n String.fromCharCode(0x1e800) + '-' + String.fromCharCode(0x1efff) +\n ']'\n/* eslint-enable prettier/prettier */\n);\n/**\n * @param {string} text Text.\n * @param {string} align Alignment.\n * @return {number} Text alignment.\n */\nfunction horizontalTextAlign(text, align) {\n if ((align === 'start' || align === 'end') && !rtlRegEx.test(text)) {\n align = align === 'start' ? 'left' : 'right';\n }\n return TEXT_ALIGN[align];\n}\nvar Executor = /** @class */ (function () {\n /**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {boolean} overlaps The replay can have overlapping geometries.\n * @param {import(\"../canvas.js\").SerializableInstructions} instructions The serializable instructions\n * @param {import(\"../../size.js\").Size} renderBuffer Render buffer (width/height) in pixels.\n */\n function Executor(resolution, pixelRatio, overlaps, instructions, renderBuffer) {\n /**\n * @protected\n * @type {boolean}\n */\n this.overlaps = overlaps;\n /**\n * @protected\n * @type {number}\n */\n this.pixelRatio = pixelRatio;\n /**\n * @protected\n * @const\n * @type {number}\n */\n this.resolution = resolution;\n /**\n * @private\n * @type {boolean}\n */\n this.alignFill_;\n /**\n * @protected\n * @type {Array<*>}\n */\n this.instructions = instructions.instructions;\n /**\n * @protected\n * @type {Array<number>}\n */\n this.coordinates = instructions.coordinates;\n /**\n * @private\n * @type {!Object<number,import(\"../../coordinate.js\").Coordinate|Array<import(\"../../coordinate.js\").Coordinate>|Array<Array<import(\"../../coordinate.js\").Coordinate>>>}\n */\n this.coordinateCache_ = {};\n /**\n * @private\n * @type {import(\"../../size.js\").Size}\n */\n this.renderBuffer_ = renderBuffer;\n /**\n * @private\n * @type {!import(\"../../transform.js\").Transform}\n */\n this.renderedTransform_ = createTransform();\n /**\n * @protected\n * @type {Array<*>}\n */\n this.hitDetectionInstructions = instructions.hitDetectionInstructions;\n /**\n * @private\n * @type {Array<number>}\n */\n this.pixelCoordinates_ = null;\n /**\n * @private\n * @type {number}\n */\n this.viewRotation_ = 0;\n /**\n * @type {!Object<string, import(\"../canvas.js\").FillState>}\n */\n this.fillStates = instructions.fillStates || {};\n /**\n * @type {!Object<string, import(\"../canvas.js\").StrokeState>}\n */\n this.strokeStates = instructions.strokeStates || {};\n /**\n * @type {!Object<string, import(\"../canvas.js\").TextState>}\n */\n this.textStates = instructions.textStates || {};\n /**\n * @private\n * @type {Object<string, Object<string, number>>}\n */\n this.widths_ = {};\n /**\n * @private\n * @type {Object<string, import(\"../canvas.js\").Label>}\n */\n this.labels_ = {};\n }\n /**\n * @param {string} text Text.\n * @param {string} textKey Text style key.\n * @param {string} fillKey Fill style key.\n * @param {string} strokeKey Stroke style key.\n * @return {import(\"../canvas.js\").Label} Label.\n */\n Executor.prototype.createLabel = function (text, textKey, fillKey, strokeKey) {\n var key = text + textKey + fillKey + strokeKey;\n if (this.labels_[key]) {\n return this.labels_[key];\n }\n var strokeState = strokeKey ? this.strokeStates[strokeKey] : null;\n var fillState = fillKey ? this.fillStates[fillKey] : null;\n var textState = this.textStates[textKey];\n var pixelRatio = this.pixelRatio;\n var scale = [\n textState.scale[0] * pixelRatio,\n textState.scale[1] * pixelRatio,\n ];\n var align = horizontalTextAlign(text, textState.textAlign || defaultTextAlign);\n var strokeWidth = strokeKey && strokeState.lineWidth ? strokeState.lineWidth : 0;\n var lines = text.split('\\n');\n var numLines = lines.length;\n var widths = [];\n var width = measureTextWidths(textState.font, lines, widths);\n var lineHeight = measureTextHeight(textState.font);\n var height = lineHeight * numLines;\n var renderWidth = width + strokeWidth;\n var contextInstructions = [];\n // make canvas 2 pixels wider to account for italic text width measurement errors\n var w = (renderWidth + 2) * scale[0];\n var h = (height + strokeWidth) * scale[1];\n /** @type {import(\"../canvas.js\").Label} */\n var label = {\n width: w < 0 ? Math.floor(w) : Math.ceil(w),\n height: h < 0 ? Math.floor(h) : Math.ceil(h),\n contextInstructions: contextInstructions,\n };\n if (scale[0] != 1 || scale[1] != 1) {\n contextInstructions.push('scale', scale);\n }\n contextInstructions.push('font', textState.font);\n if (strokeKey) {\n contextInstructions.push('strokeStyle', strokeState.strokeStyle);\n contextInstructions.push('lineWidth', strokeWidth);\n contextInstructions.push('lineCap', strokeState.lineCap);\n contextInstructions.push('lineJoin', strokeState.lineJoin);\n contextInstructions.push('miterLimit', strokeState.miterLimit);\n // eslint-disable-next-line\n var Context = WORKER_OFFSCREEN_CANVAS ? OffscreenCanvasRenderingContext2D : CanvasRenderingContext2D;\n if (Context.prototype.setLineDash) {\n contextInstructions.push('setLineDash', [strokeState.lineDash]);\n contextInstructions.push('lineDashOffset', strokeState.lineDashOffset);\n }\n }\n if (fillKey) {\n contextInstructions.push('fillStyle', fillState.fillStyle);\n }\n contextInstructions.push('textBaseline', 'middle');\n contextInstructions.push('textAlign', 'center');\n var leftRight = 0.5 - align;\n var x = align * renderWidth + leftRight * strokeWidth;\n var i;\n if (strokeKey) {\n for (i = 0; i < numLines; ++i) {\n contextInstructions.push('strokeText', [\n lines[i],\n x + leftRight * widths[i],\n 0.5 * (strokeWidth + lineHeight) + i * lineHeight,\n ]);\n }\n }\n if (fillKey) {\n for (i = 0; i < numLines; ++i) {\n contextInstructions.push('fillText', [\n lines[i],\n x + leftRight * widths[i],\n 0.5 * (strokeWidth + lineHeight) + i * lineHeight,\n ]);\n }\n }\n this.labels_[key] = label;\n return label;\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../coordinate.js\").Coordinate} p1 1st point of the background box.\n * @param {import(\"../../coordinate.js\").Coordinate} p2 2nd point of the background box.\n * @param {import(\"../../coordinate.js\").Coordinate} p3 3rd point of the background box.\n * @param {import(\"../../coordinate.js\").Coordinate} p4 4th point of the background box.\n * @param {Array<*>} fillInstruction Fill instruction.\n * @param {Array<*>} strokeInstruction Stroke instruction.\n */\n Executor.prototype.replayTextBackground_ = function (context, p1, p2, p3, p4, fillInstruction, strokeInstruction) {\n context.beginPath();\n context.moveTo.apply(context, p1);\n context.lineTo.apply(context, p2);\n context.lineTo.apply(context, p3);\n context.lineTo.apply(context, p4);\n context.lineTo.apply(context, p1);\n if (fillInstruction) {\n this.alignFill_ = /** @type {boolean} */ (fillInstruction[2]);\n this.fill_(context);\n }\n if (strokeInstruction) {\n this.setStrokeStyle_(context, \n /** @type {Array<*>} */ (strokeInstruction));\n context.stroke();\n }\n };\n /**\n * @private\n * @param {number} sheetWidth Width of the sprite sheet.\n * @param {number} sheetHeight Height of the sprite sheet.\n * @param {number} centerX X.\n * @param {number} centerY Y.\n * @param {number} width Width.\n * @param {number} height Height.\n * @param {number} anchorX Anchor X.\n * @param {number} anchorY Anchor Y.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} rotation Rotation.\n * @param {import(\"../../size.js\").Size} scale Scale.\n * @param {boolean} snapToPixel Snap to pixel.\n * @param {Array<number>} padding Padding.\n * @param {boolean} fillStroke Background fill or stroke.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n * @return {ImageOrLabelDimensions} Dimensions for positioning and decluttering the image or label.\n */\n Executor.prototype.calculateImageOrLabelDimensions_ = function (sheetWidth, sheetHeight, centerX, centerY, width, height, anchorX, anchorY, originX, originY, rotation, scale, snapToPixel, padding, fillStroke, feature) {\n anchorX *= scale[0];\n anchorY *= scale[1];\n var x = centerX - anchorX;\n var y = centerY - anchorY;\n var w = width + originX > sheetWidth ? sheetWidth - originX : width;\n var h = height + originY > sheetHeight ? sheetHeight - originY : height;\n var boxW = padding[3] + w * scale[0] + padding[1];\n var boxH = padding[0] + h * scale[1] + padding[2];\n var boxX = x - padding[3];\n var boxY = y - padding[0];\n if (fillStroke || rotation !== 0) {\n p1[0] = boxX;\n p4[0] = boxX;\n p1[1] = boxY;\n p2[1] = boxY;\n p2[0] = boxX + boxW;\n p3[0] = p2[0];\n p3[1] = boxY + boxH;\n p4[1] = p3[1];\n }\n var transform;\n if (rotation !== 0) {\n transform = composeTransform(createTransform(), centerX, centerY, 1, 1, rotation, -centerX, -centerY);\n applyTransform(transform, p1);\n applyTransform(transform, p2);\n applyTransform(transform, p3);\n applyTransform(transform, p4);\n createOrUpdate(Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1]), tmpExtent);\n }\n else {\n createOrUpdate(Math.min(boxX, boxX + boxW), Math.min(boxY, boxY + boxH), Math.max(boxX, boxX + boxW), Math.max(boxY, boxY + boxH), tmpExtent);\n }\n if (snapToPixel) {\n x = Math.round(x);\n y = Math.round(y);\n }\n return {\n drawImageX: x,\n drawImageY: y,\n drawImageW: w,\n drawImageH: h,\n originX: originX,\n originY: originY,\n declutterBox: {\n minX: tmpExtent[0],\n minY: tmpExtent[1],\n maxX: tmpExtent[2],\n maxY: tmpExtent[3],\n value: feature,\n },\n canvasTransform: transform,\n scale: scale,\n };\n };\n /**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} contextScale Scale of the context.\n * @param {import(\"../canvas.js\").Label|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} imageOrLabel Image.\n * @param {ImageOrLabelDimensions} dimensions Dimensions.\n * @param {number} opacity Opacity.\n * @param {Array<*>} fillInstruction Fill instruction.\n * @param {Array<*>} strokeInstruction Stroke instruction.\n * @return {boolean} The image or label was rendered.\n */\n Executor.prototype.replayImageOrLabel_ = function (context, contextScale, imageOrLabel, dimensions, opacity, fillInstruction, strokeInstruction) {\n var fillStroke = !!(fillInstruction || strokeInstruction);\n var box = dimensions.declutterBox;\n var canvas = context.canvas;\n var strokePadding = strokeInstruction\n ? (strokeInstruction[2] * dimensions.scale[0]) / 2\n : 0;\n var intersects = box.minX - strokePadding <= canvas.width / contextScale &&\n box.maxX + strokePadding >= 0 &&\n box.minY - strokePadding <= canvas.height / contextScale &&\n box.maxY + strokePadding >= 0;\n if (intersects) {\n if (fillStroke) {\n this.replayTextBackground_(context, p1, p2, p3, p4, \n /** @type {Array<*>} */ (fillInstruction), \n /** @type {Array<*>} */ (strokeInstruction));\n }\n drawImageOrLabel(context, dimensions.canvasTransform, opacity, imageOrLabel, dimensions.originX, dimensions.originY, dimensions.drawImageW, dimensions.drawImageH, dimensions.drawImageX, dimensions.drawImageY, dimensions.scale);\n }\n return true;\n };\n /**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n */\n Executor.prototype.fill_ = function (context) {\n if (this.alignFill_) {\n var origin_1 = applyTransform(this.renderedTransform_, [0, 0]);\n var repeatSize = 512 * this.pixelRatio;\n context.save();\n context.translate(origin_1[0] % repeatSize, origin_1[1] % repeatSize);\n context.rotate(this.viewRotation_);\n }\n context.fill();\n if (this.alignFill_) {\n context.restore();\n }\n };\n /**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n * @param {Array<*>} instruction Instruction.\n */\n Executor.prototype.setStrokeStyle_ = function (context, instruction) {\n context['strokeStyle'] = /** @type {import(\"../../colorlike.js\").ColorLike} */ (instruction[1]);\n context.lineWidth = /** @type {number} */ (instruction[2]);\n context.lineCap = /** @type {CanvasLineCap} */ (instruction[3]);\n context.lineJoin = /** @type {CanvasLineJoin} */ (instruction[4]);\n context.miterLimit = /** @type {number} */ (instruction[5]);\n if (context.setLineDash) {\n context.lineDashOffset = /** @type {number} */ (instruction[7]);\n context.setLineDash(/** @type {Array<number>} */ (instruction[6]));\n }\n };\n /**\n * @private\n * @param {string} text The text to draw.\n * @param {string} textKey The key of the text state.\n * @param {string} strokeKey The key for the stroke state.\n * @param {string} fillKey The key for the fill state.\n * @return {{label: import(\"../canvas.js\").Label, anchorX: number, anchorY: number}} The text image and its anchor.\n */\n Executor.prototype.drawLabelWithPointPlacement_ = function (text, textKey, strokeKey, fillKey) {\n var textState = this.textStates[textKey];\n var label = this.createLabel(text, textKey, fillKey, strokeKey);\n var strokeState = this.strokeStates[strokeKey];\n var pixelRatio = this.pixelRatio;\n var align = horizontalTextAlign(text, textState.textAlign || defaultTextAlign);\n var baseline = TEXT_ALIGN[textState.textBaseline || defaultTextBaseline];\n var strokeWidth = strokeState && strokeState.lineWidth ? strokeState.lineWidth : 0;\n // Remove the 2 pixels we added in createLabel() for the anchor\n var width = label.width / pixelRatio - 2 * textState.scale[0];\n var anchorX = align * width + 2 * (0.5 - align) * strokeWidth;\n var anchorY = (baseline * label.height) / pixelRatio +\n 2 * (0.5 - baseline) * strokeWidth;\n return {\n label: label,\n anchorX: anchorX,\n anchorY: anchorY,\n };\n };\n /**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} contextScale Scale of the context.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array<*>} instructions Instructions array.\n * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.\n * @param {FeatureCallback<T>=} opt_featureCallback Feature callback.\n * @param {import(\"../../extent.js\").Extent=} opt_hitExtent Only check\n * features that intersect this extent.\n * @param {import(\"rbush\").default=} opt_declutterTree Declutter tree.\n * @return {T|undefined} Callback result.\n * @template T\n */\n Executor.prototype.execute_ = function (context, contextScale, transform, instructions, snapToPixel, opt_featureCallback, opt_hitExtent, opt_declutterTree) {\n /** @type {Array<number>} */\n var pixelCoordinates;\n if (this.pixelCoordinates_ && equals(transform, this.renderedTransform_)) {\n pixelCoordinates = this.pixelCoordinates_;\n }\n else {\n if (!this.pixelCoordinates_) {\n this.pixelCoordinates_ = [];\n }\n pixelCoordinates = transform2D(this.coordinates, 0, this.coordinates.length, 2, transform, this.pixelCoordinates_);\n transformSetFromArray(this.renderedTransform_, transform);\n }\n var i = 0; // instruction index\n var ii = instructions.length; // end of instructions\n var d = 0; // data index\n var dd; // end of per-instruction data\n var anchorX, anchorY, prevX, prevY, roundX, roundY, image, text, textKey, strokeKey, fillKey;\n var pendingFill = 0;\n var pendingStroke = 0;\n var lastFillInstruction = null;\n var lastStrokeInstruction = null;\n var coordinateCache = this.coordinateCache_;\n var viewRotation = this.viewRotation_;\n var viewRotationFromTransform = Math.round(Math.atan2(-transform[1], transform[0]) * 1e12) / 1e12;\n var state = /** @type {import(\"../../render.js\").State} */ ({\n context: context,\n pixelRatio: this.pixelRatio,\n resolution: this.resolution,\n rotation: viewRotation,\n });\n // When the batch size gets too big, performance decreases. 200 is a good\n // balance between batch size and number of fill/stroke instructions.\n var batchSize = this.instructions != instructions || this.overlaps ? 0 : 200;\n var /** @type {import(\"../../Feature.js\").FeatureLike} */ feature;\n var x, y, currentGeometry;\n while (i < ii) {\n var instruction = instructions[i];\n var type = /** @type {import(\"./Instruction.js\").default} */ (instruction[0]);\n switch (type) {\n case CanvasInstruction.BEGIN_GEOMETRY:\n feature = /** @type {import(\"../../Feature.js\").FeatureLike} */ (instruction[1]);\n currentGeometry = instruction[3];\n if (!feature.getGeometry()) {\n i = /** @type {number} */ (instruction[2]);\n }\n else if (opt_hitExtent !== undefined &&\n !intersects(opt_hitExtent, currentGeometry.getExtent())) {\n i = /** @type {number} */ (instruction[2]) + 1;\n }\n else {\n ++i;\n }\n break;\n case CanvasInstruction.BEGIN_PATH:\n if (pendingFill > batchSize) {\n this.fill_(context);\n pendingFill = 0;\n }\n if (pendingStroke > batchSize) {\n context.stroke();\n pendingStroke = 0;\n }\n if (!pendingFill && !pendingStroke) {\n context.beginPath();\n prevX = NaN;\n prevY = NaN;\n }\n ++i;\n break;\n case CanvasInstruction.CIRCLE:\n d = /** @type {number} */ (instruction[1]);\n var x1 = pixelCoordinates[d];\n var y1 = pixelCoordinates[d + 1];\n var x2 = pixelCoordinates[d + 2];\n var y2 = pixelCoordinates[d + 3];\n var dx = x2 - x1;\n var dy = y2 - y1;\n var r = Math.sqrt(dx * dx + dy * dy);\n context.moveTo(x1 + r, y1);\n context.arc(x1, y1, r, 0, 2 * Math.PI, true);\n ++i;\n break;\n case CanvasInstruction.CLOSE_PATH:\n context.closePath();\n ++i;\n break;\n case CanvasInstruction.CUSTOM:\n d = /** @type {number} */ (instruction[1]);\n dd = instruction[2];\n var geometry = /** @type {import(\"../../geom/SimpleGeometry.js\").default} */ (instruction[3]);\n var renderer = instruction[4];\n var fn = instruction.length == 6 ? instruction[5] : undefined;\n state.geometry = geometry;\n state.feature = feature;\n if (!(i in coordinateCache)) {\n coordinateCache[i] = [];\n }\n var coords = coordinateCache[i];\n if (fn) {\n fn(pixelCoordinates, d, dd, 2, coords);\n }\n else {\n coords[0] = pixelCoordinates[d];\n coords[1] = pixelCoordinates[d + 1];\n coords.length = 2;\n }\n renderer(coords, state);\n ++i;\n break;\n case CanvasInstruction.DRAW_IMAGE:\n d = /** @type {number} */ (instruction[1]);\n dd = /** @type {number} */ (instruction[2]);\n image = /** @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} */ (instruction[3]);\n // Remaining arguments in DRAW_IMAGE are in alphabetical order\n anchorX = /** @type {number} */ (instruction[4]);\n anchorY = /** @type {number} */ (instruction[5]);\n var height = /** @type {number} */ (instruction[6]);\n var opacity = /** @type {number} */ (instruction[7]);\n var originX = /** @type {number} */ (instruction[8]);\n var originY = /** @type {number} */ (instruction[9]);\n var rotateWithView = /** @type {boolean} */ (instruction[10]);\n var rotation = /** @type {number} */ (instruction[11]);\n var scale = /** @type {import(\"../../size.js\").Size} */ (instruction[12]);\n var width = /** @type {number} */ (instruction[13]);\n var declutterImageWithText = /** @type {import(\"../canvas.js\").DeclutterImageWithText} */ (instruction[14]);\n if (!image && instruction.length >= 19) {\n // create label images\n text = /** @type {string} */ (instruction[18]);\n textKey = /** @type {string} */ (instruction[19]);\n strokeKey = /** @type {string} */ (instruction[20]);\n fillKey = /** @type {string} */ (instruction[21]);\n var labelWithAnchor = this.drawLabelWithPointPlacement_(text, textKey, strokeKey, fillKey);\n image = labelWithAnchor.label;\n instruction[3] = image;\n var textOffsetX = /** @type {number} */ (instruction[22]);\n anchorX = (labelWithAnchor.anchorX - textOffsetX) * this.pixelRatio;\n instruction[4] = anchorX;\n var textOffsetY = /** @type {number} */ (instruction[23]);\n anchorY = (labelWithAnchor.anchorY - textOffsetY) * this.pixelRatio;\n instruction[5] = anchorY;\n height = image.height;\n instruction[6] = height;\n width = image.width;\n instruction[13] = width;\n }\n var geometryWidths = void 0;\n if (instruction.length > 24) {\n geometryWidths = /** @type {number} */ (instruction[24]);\n }\n var padding = void 0, backgroundFill = void 0, backgroundStroke = void 0;\n if (instruction.length > 16) {\n padding = /** @type {Array<number>} */ (instruction[15]);\n backgroundFill = /** @type {boolean} */ (instruction[16]);\n backgroundStroke = /** @type {boolean} */ (instruction[17]);\n }\n else {\n padding = defaultPadding;\n backgroundFill = false;\n backgroundStroke = false;\n }\n if (rotateWithView && viewRotationFromTransform) {\n // Canvas is expected to be rotated to reverse view rotation.\n rotation += viewRotation;\n }\n else if (!rotateWithView && !viewRotationFromTransform) {\n // Canvas is not rotated, images need to be rotated back to be north-up.\n rotation -= viewRotation;\n }\n var widthIndex = 0;\n for (; d < dd; d += 2) {\n if (geometryWidths &&\n geometryWidths[widthIndex++] < width / this.pixelRatio) {\n continue;\n }\n var dimensions = this.calculateImageOrLabelDimensions_(image.width, image.height, pixelCoordinates[d], pixelCoordinates[d + 1], width, height, anchorX, anchorY, originX, originY, rotation, scale, snapToPixel, padding, backgroundFill || backgroundStroke, feature);\n /** @type {ReplayImageOrLabelArgs} */\n var args = [\n context,\n contextScale,\n image,\n dimensions,\n opacity,\n backgroundFill\n ? /** @type {Array<*>} */ (lastFillInstruction)\n : null,\n backgroundStroke\n ? /** @type {Array<*>} */ (lastStrokeInstruction)\n : null,\n ];\n var imageArgs = void 0;\n var imageDeclutterBox = void 0;\n if (opt_declutterTree && declutterImageWithText) {\n if (!declutterImageWithText[d]) {\n // We now have the image for an image+text combination.\n declutterImageWithText[d] = args;\n // Don't render anything for now, wait for the text.\n continue;\n }\n imageArgs = declutterImageWithText[d];\n delete declutterImageWithText[d];\n imageDeclutterBox = getDeclutterBox(imageArgs);\n if (opt_declutterTree.collides(imageDeclutterBox)) {\n continue;\n }\n }\n if (opt_declutterTree &&\n opt_declutterTree.collides(dimensions.declutterBox)) {\n continue;\n }\n if (imageArgs) {\n // We now have image and text for an image+text combination.\n if (opt_declutterTree) {\n opt_declutterTree.insert(imageDeclutterBox);\n }\n // Render the image before we render the text.\n this.replayImageOrLabel_.apply(this, imageArgs);\n }\n if (opt_declutterTree) {\n opt_declutterTree.insert(dimensions.declutterBox);\n }\n this.replayImageOrLabel_.apply(this, args);\n }\n ++i;\n break;\n case CanvasInstruction.DRAW_CHARS:\n var begin = /** @type {number} */ (instruction[1]);\n var end = /** @type {number} */ (instruction[2]);\n var baseline = /** @type {number} */ (instruction[3]);\n var overflow = /** @type {number} */ (instruction[4]);\n fillKey = /** @type {string} */ (instruction[5]);\n var maxAngle = /** @type {number} */ (instruction[6]);\n var measurePixelRatio = /** @type {number} */ (instruction[7]);\n var offsetY = /** @type {number} */ (instruction[8]);\n strokeKey = /** @type {string} */ (instruction[9]);\n var strokeWidth = /** @type {number} */ (instruction[10]);\n text = /** @type {string} */ (instruction[11]);\n textKey = /** @type {string} */ (instruction[12]);\n var pixelRatioScale = [\n /** @type {number} */ (instruction[13]),\n /** @type {number} */ (instruction[13]),\n ];\n var textState = this.textStates[textKey];\n var font = textState.font;\n var textScale = [\n textState.scale[0] * measurePixelRatio,\n textState.scale[1] * measurePixelRatio,\n ];\n var cachedWidths = void 0;\n if (font in this.widths_) {\n cachedWidths = this.widths_[font];\n }\n else {\n cachedWidths = {};\n this.widths_[font] = cachedWidths;\n }\n var pathLength = lineStringLength(pixelCoordinates, begin, end, 2);\n var textLength = Math.abs(textScale[0]) *\n measureAndCacheTextWidth(font, text, cachedWidths);\n if (overflow || textLength <= pathLength) {\n var textAlign = this.textStates[textKey].textAlign;\n var startM = (pathLength - textLength) * TEXT_ALIGN[textAlign];\n var parts = drawTextOnPath(pixelCoordinates, begin, end, 2, text, startM, maxAngle, Math.abs(textScale[0]), measureAndCacheTextWidth, font, cachedWidths, viewRotationFromTransform ? 0 : this.viewRotation_);\n drawChars: if (parts) {\n /** @type {Array<ReplayImageOrLabelArgs>} */\n var replayImageOrLabelArgs = [];\n var c = void 0, cc = void 0, chars = void 0, label = void 0, part = void 0;\n if (strokeKey) {\n for (c = 0, cc = parts.length; c < cc; ++c) {\n part = parts[c]; // x, y, anchorX, rotation, chunk\n chars = /** @type {string} */ (part[4]);\n label = this.createLabel(chars, textKey, '', strokeKey);\n anchorX =\n /** @type {number} */ (part[2]) +\n (textScale[0] < 0 ? -strokeWidth : strokeWidth);\n anchorY =\n baseline * label.height +\n ((0.5 - baseline) * 2 * strokeWidth * textScale[1]) /\n textScale[0] -\n offsetY;\n var dimensions = this.calculateImageOrLabelDimensions_(label.width, label.height, part[0], part[1], label.width, label.height, anchorX, anchorY, 0, 0, part[3], pixelRatioScale, false, defaultPadding, false, feature);\n if (opt_declutterTree &&\n opt_declutterTree.collides(dimensions.declutterBox)) {\n break drawChars;\n }\n replayImageOrLabelArgs.push([\n context,\n contextScale,\n label,\n dimensions,\n 1,\n null,\n null,\n ]);\n }\n }\n if (fillKey) {\n for (c = 0, cc = parts.length; c < cc; ++c) {\n part = parts[c]; // x, y, anchorX, rotation, chunk\n chars = /** @type {string} */ (part[4]);\n label = this.createLabel(chars, textKey, fillKey, '');\n anchorX = /** @type {number} */ (part[2]);\n anchorY = baseline * label.height - offsetY;\n var dimensions = this.calculateImageOrLabelDimensions_(label.width, label.height, part[0], part[1], label.width, label.height, anchorX, anchorY, 0, 0, part[3], pixelRatioScale, false, defaultPadding, false, feature);\n if (opt_declutterTree &&\n opt_declutterTree.collides(dimensions.declutterBox)) {\n break drawChars;\n }\n replayImageOrLabelArgs.push([\n context,\n contextScale,\n label,\n dimensions,\n 1,\n null,\n null,\n ]);\n }\n }\n if (opt_declutterTree) {\n opt_declutterTree.load(replayImageOrLabelArgs.map(getDeclutterBox));\n }\n for (var i_1 = 0, ii_1 = replayImageOrLabelArgs.length; i_1 < ii_1; ++i_1) {\n this.replayImageOrLabel_.apply(this, replayImageOrLabelArgs[i_1]);\n }\n }\n }\n ++i;\n break;\n case CanvasInstruction.END_GEOMETRY:\n if (opt_featureCallback !== undefined) {\n feature = /** @type {import(\"../../Feature.js\").FeatureLike} */ (instruction[1]);\n var result = opt_featureCallback(feature, currentGeometry);\n if (result) {\n return result;\n }\n }\n ++i;\n break;\n case CanvasInstruction.FILL:\n if (batchSize) {\n pendingFill++;\n }\n else {\n this.fill_(context);\n }\n ++i;\n break;\n case CanvasInstruction.MOVE_TO_LINE_TO:\n d = /** @type {number} */ (instruction[1]);\n dd = /** @type {number} */ (instruction[2]);\n x = pixelCoordinates[d];\n y = pixelCoordinates[d + 1];\n roundX = (x + 0.5) | 0;\n roundY = (y + 0.5) | 0;\n if (roundX !== prevX || roundY !== prevY) {\n context.moveTo(x, y);\n prevX = roundX;\n prevY = roundY;\n }\n for (d += 2; d < dd; d += 2) {\n x = pixelCoordinates[d];\n y = pixelCoordinates[d + 1];\n roundX = (x + 0.5) | 0;\n roundY = (y + 0.5) | 0;\n if (d == dd - 2 || roundX !== prevX || roundY !== prevY) {\n context.lineTo(x, y);\n prevX = roundX;\n prevY = roundY;\n }\n }\n ++i;\n break;\n case CanvasInstruction.SET_FILL_STYLE:\n lastFillInstruction = instruction;\n this.alignFill_ = instruction[2];\n if (pendingFill) {\n this.fill_(context);\n pendingFill = 0;\n if (pendingStroke) {\n context.stroke();\n pendingStroke = 0;\n }\n }\n context.fillStyle = /** @type {import(\"../../colorlike.js\").ColorLike} */ (instruction[1]);\n ++i;\n break;\n case CanvasInstruction.SET_STROKE_STYLE:\n lastStrokeInstruction = instruction;\n if (pendingStroke) {\n context.stroke();\n pendingStroke = 0;\n }\n this.setStrokeStyle_(context, /** @type {Array<*>} */ (instruction));\n ++i;\n break;\n case CanvasInstruction.STROKE:\n if (batchSize) {\n pendingStroke++;\n }\n else {\n context.stroke();\n }\n ++i;\n break;\n default:\n ++i; // consume the instruction anyway, to avoid an infinite loop\n break;\n }\n }\n if (pendingFill) {\n this.fill_(context);\n }\n if (pendingStroke) {\n context.stroke();\n }\n return undefined;\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} contextScale Scale of the context.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.\n * @param {import(\"rbush\").default=} opt_declutterTree Declutter tree.\n */\n Executor.prototype.execute = function (context, contextScale, transform, viewRotation, snapToPixel, opt_declutterTree) {\n this.viewRotation_ = viewRotation;\n this.execute_(context, contextScale, transform, this.instructions, snapToPixel, undefined, undefined, opt_declutterTree);\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {FeatureCallback<T>=} opt_featureCallback Feature callback.\n * @param {import(\"../../extent.js\").Extent=} opt_hitExtent Only check\n * features that intersect this extent.\n * @return {T|undefined} Callback result.\n * @template T\n */\n Executor.prototype.executeHitDetection = function (context, transform, viewRotation, opt_featureCallback, opt_hitExtent) {\n this.viewRotation_ = viewRotation;\n return this.execute_(context, 1, transform, this.hitDetectionInstructions, true, opt_featureCallback, opt_hitExtent);\n };\n return Executor;\n}());\nexport default Executor;\n//# sourceMappingURL=Executor.js.map","/**\n * @module ol/render/canvas/ExecutorGroup\n */\nimport BuilderType from './BuilderType.js';\nimport Executor from './Executor.js';\nimport { buffer, createEmpty, extendCoordinate } from '../../extent.js';\nimport { compose as composeTransform, create as createTransform, } from '../../transform.js';\nimport { createCanvasContext2D } from '../../dom.js';\nimport { isEmpty } from '../../obj.js';\nimport { numberSafeCompareFunction } from '../../array.js';\nimport { transform2D } from '../../geom/flat/transform.js';\n/**\n * @const\n * @type {Array<import(\"./BuilderType.js\").default>}\n */\nvar ORDER = [\n BuilderType.POLYGON,\n BuilderType.CIRCLE,\n BuilderType.LINE_STRING,\n BuilderType.IMAGE,\n BuilderType.TEXT,\n BuilderType.DEFAULT,\n];\nvar ExecutorGroup = /** @class */ (function () {\n /**\n * @param {import(\"../../extent.js\").Extent} maxExtent Max extent for clipping. When a\n * `maxExtent` was set on the Buillder for this executor group, the same `maxExtent`\n * should be set here, unless the target context does not exceet that extent (which\n * can be the case when rendering to tiles).\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {boolean} overlaps The executor group can have overlapping geometries.\n * @param {!Object<string, !Object<import(\"./BuilderType.js\").default, import(\"../canvas.js\").SerializableInstructions>>} allInstructions\n * The serializable instructions.\n * @param {number=} opt_renderBuffer Optional rendering buffer.\n */\n function ExecutorGroup(maxExtent, resolution, pixelRatio, overlaps, allInstructions, opt_renderBuffer) {\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n this.maxExtent_ = maxExtent;\n /**\n * @private\n * @type {boolean}\n */\n this.overlaps_ = overlaps;\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n /**\n * @private\n * @type {number}\n */\n this.resolution_ = resolution;\n /**\n * @private\n * @type {number|undefined}\n */\n this.renderBuffer_ = opt_renderBuffer;\n /**\n * @private\n * @type {!Object<string, !Object<import(\"./BuilderType.js\").default, import(\"./Executor\").default>>}\n */\n this.executorsByZIndex_ = {};\n /**\n * @private\n * @type {CanvasRenderingContext2D}\n */\n this.hitDetectionContext_ = null;\n /**\n * @private\n * @type {import(\"../../transform.js\").Transform}\n */\n this.hitDetectionTransform_ = createTransform();\n this.createExecutors_(allInstructions);\n }\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n */\n ExecutorGroup.prototype.clip = function (context, transform) {\n var flatClipCoords = this.getClipCoords(transform);\n context.beginPath();\n context.moveTo(flatClipCoords[0], flatClipCoords[1]);\n context.lineTo(flatClipCoords[2], flatClipCoords[3]);\n context.lineTo(flatClipCoords[4], flatClipCoords[5]);\n context.lineTo(flatClipCoords[6], flatClipCoords[7]);\n context.clip();\n };\n /**\n * Create executors and populate them using the provided instructions.\n * @private\n * @param {!Object<string, !Object<import(\"./BuilderType.js\").default, import(\"../canvas.js\").SerializableInstructions>>} allInstructions The serializable instructions\n */\n ExecutorGroup.prototype.createExecutors_ = function (allInstructions) {\n for (var zIndex in allInstructions) {\n var executors = this.executorsByZIndex_[zIndex];\n if (executors === undefined) {\n executors = {};\n this.executorsByZIndex_[zIndex] = executors;\n }\n var instructionByZindex = allInstructions[zIndex];\n var renderBuffer = [this.renderBuffer_ || 0, this.renderBuffer_ || 0];\n for (var builderType in instructionByZindex) {\n var instructions = instructionByZindex[builderType];\n executors[builderType] = new Executor(this.resolution_, this.pixelRatio_, this.overlaps_, instructions, renderBuffer);\n }\n }\n };\n /**\n * @param {Array<import(\"./BuilderType.js\").default>} executors Executors.\n * @return {boolean} Has executors of the provided types.\n */\n ExecutorGroup.prototype.hasExecutors = function (executors) {\n for (var zIndex in this.executorsByZIndex_) {\n var candidates = this.executorsByZIndex_[zIndex];\n for (var i = 0, ii = executors.length; i < ii; ++i) {\n if (executors[i] in candidates) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../../Feature.js\").FeatureLike, import(\"../../geom/SimpleGeometry.js\").default, number): T} callback Feature callback.\n * @param {Array<import(\"../../Feature.js\").FeatureLike>} declutteredFeatures Decluttered features.\n * @return {T|undefined} Callback result.\n * @template T\n */\n ExecutorGroup.prototype.forEachFeatureAtCoordinate = function (coordinate, resolution, rotation, hitTolerance, callback, declutteredFeatures) {\n hitTolerance = Math.round(hitTolerance);\n var contextSize = hitTolerance * 2 + 1;\n var transform = composeTransform(this.hitDetectionTransform_, hitTolerance + 0.5, hitTolerance + 0.5, 1 / resolution, -1 / resolution, -rotation, -coordinate[0], -coordinate[1]);\n var newContext = !this.hitDetectionContext_;\n if (newContext) {\n this.hitDetectionContext_ = createCanvasContext2D(contextSize, contextSize);\n }\n var context = this.hitDetectionContext_;\n if (context.canvas.width !== contextSize ||\n context.canvas.height !== contextSize) {\n context.canvas.width = contextSize;\n context.canvas.height = contextSize;\n }\n else if (!newContext) {\n context.clearRect(0, 0, contextSize, contextSize);\n }\n /**\n * @type {import(\"../../extent.js\").Extent}\n */\n var hitExtent;\n if (this.renderBuffer_ !== undefined) {\n hitExtent = createEmpty();\n extendCoordinate(hitExtent, coordinate);\n buffer(hitExtent, resolution * (this.renderBuffer_ + hitTolerance), hitExtent);\n }\n var indexes = getPixelIndexArray(hitTolerance);\n var builderType;\n /**\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function featureCallback(feature, geometry) {\n var imageData = context.getImageData(0, 0, contextSize, contextSize)\n .data;\n for (var i_1 = 0, ii = indexes.length; i_1 < ii; i_1++) {\n if (imageData[indexes[i_1]] > 0) {\n if (!declutteredFeatures ||\n (builderType !== BuilderType.IMAGE &&\n builderType !== BuilderType.TEXT) ||\n declutteredFeatures.indexOf(feature) !== -1) {\n var idx = (indexes[i_1] - 3) / 4;\n var x = hitTolerance - (idx % contextSize);\n var y = hitTolerance - ((idx / contextSize) | 0);\n var result_1 = callback(feature, geometry, x * x + y * y);\n if (result_1) {\n return result_1;\n }\n }\n context.clearRect(0, 0, contextSize, contextSize);\n break;\n }\n }\n return undefined;\n }\n /** @type {Array<number>} */\n var zs = Object.keys(this.executorsByZIndex_).map(Number);\n zs.sort(numberSafeCompareFunction);\n var i, j, executors, executor, result;\n for (i = zs.length - 1; i >= 0; --i) {\n var zIndexKey = zs[i].toString();\n executors = this.executorsByZIndex_[zIndexKey];\n for (j = ORDER.length - 1; j >= 0; --j) {\n builderType = ORDER[j];\n executor = executors[builderType];\n if (executor !== undefined) {\n result = executor.executeHitDetection(context, transform, rotation, featureCallback, hitExtent);\n if (result) {\n return result;\n }\n }\n }\n }\n return undefined;\n };\n /**\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @return {Array<number>} Clip coordinates.\n */\n ExecutorGroup.prototype.getClipCoords = function (transform) {\n var maxExtent = this.maxExtent_;\n if (!maxExtent) {\n return null;\n }\n var minX = maxExtent[0];\n var minY = maxExtent[1];\n var maxX = maxExtent[2];\n var maxY = maxExtent[3];\n var flatClipCoords = [minX, minY, minX, maxY, maxX, maxY, maxX, minY];\n transform2D(flatClipCoords, 0, 8, 2, transform, flatClipCoords);\n return flatClipCoords;\n };\n /**\n * @return {boolean} Is empty.\n */\n ExecutorGroup.prototype.isEmpty = function () {\n return isEmpty(this.executorsByZIndex_);\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} contextScale Scale of the context.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {boolean} snapToPixel Snap point symbols and test to integer pixel.\n * @param {Array<import(\"./BuilderType.js\").default>=} opt_builderTypes Ordered replay types to replay.\n * Default is {@link module:ol/render/replay~ORDER}\n * @param {import(\"rbush\").default=} opt_declutterTree Declutter tree.\n */\n ExecutorGroup.prototype.execute = function (context, contextScale, transform, viewRotation, snapToPixel, opt_builderTypes, opt_declutterTree) {\n /** @type {Array<number>} */\n var zs = Object.keys(this.executorsByZIndex_).map(Number);\n zs.sort(numberSafeCompareFunction);\n // setup clipping so that the parts of over-simplified geometries are not\n // visible outside the current extent when panning\n if (this.maxExtent_) {\n context.save();\n this.clip(context, transform);\n }\n var builderTypes = opt_builderTypes ? opt_builderTypes : ORDER;\n var i, ii, j, jj, replays, replay;\n if (opt_declutterTree) {\n zs.reverse();\n }\n for (i = 0, ii = zs.length; i < ii; ++i) {\n var zIndexKey = zs[i].toString();\n replays = this.executorsByZIndex_[zIndexKey];\n for (j = 0, jj = builderTypes.length; j < jj; ++j) {\n var builderType = builderTypes[j];\n replay = replays[builderType];\n if (replay !== undefined) {\n replay.execute(context, contextScale, transform, viewRotation, snapToPixel, opt_declutterTree);\n }\n }\n }\n if (this.maxExtent_) {\n context.restore();\n }\n };\n return ExecutorGroup;\n}());\n/**\n * This cache is used to store arrays of indexes for calculated pixel circles\n * to increase performance.\n * It is a static property to allow each Replaygroup to access it.\n * @type {Object<number, Array<number>>}\n */\nvar circlePixelIndexArrayCache = {};\n/**\n * This methods creates an array with indexes of all pixels within a circle,\n * ordered by how close they are to the center.\n * A cache is used to increase performance.\n * @param {number} radius Radius.\n * @returns {Array<number>} An array with indexes within a circle.\n */\nexport function getPixelIndexArray(radius) {\n if (circlePixelIndexArrayCache[radius] !== undefined) {\n return circlePixelIndexArrayCache[radius];\n }\n var size = radius * 2 + 1;\n var maxDistanceSq = radius * radius;\n var distances = new Array(maxDistanceSq + 1);\n for (var i = 0; i <= radius; ++i) {\n for (var j = 0; j <= radius; ++j) {\n var distanceSq = i * i + j * j;\n if (distanceSq > maxDistanceSq) {\n break;\n }\n var distance = distances[distanceSq];\n if (!distance) {\n distance = [];\n distances[distanceSq] = distance;\n }\n distance.push(((radius + i) * size + (radius + j)) * 4 + 3);\n if (i > 0) {\n distance.push(((radius - i) * size + (radius + j)) * 4 + 3);\n }\n if (j > 0) {\n distance.push(((radius + i) * size + (radius - j)) * 4 + 3);\n if (i > 0) {\n distance.push(((radius - i) * size + (radius - j)) * 4 + 3);\n }\n }\n }\n }\n var pixelIndex = [];\n for (var i = 0, ii = distances.length; i < ii; ++i) {\n if (distances[i]) {\n pixelIndex.push.apply(pixelIndex, distances[i]);\n }\n }\n circlePixelIndexArrayCache[radius] = pixelIndex;\n return pixelIndex;\n}\nexport default ExecutorGroup;\n//# sourceMappingURL=ExecutorGroup.js.map","/**\n * @module ol/render/canvas/Immediate\n */\n// FIXME test, especially polygons with holes and multipolygons\n// FIXME need to handle large thick features (where pixel size matters)\n// FIXME add offset and end to ol/geom/flat/transform~transform2D?\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport GeometryType from '../../geom/GeometryType.js';\nimport VectorContext from '../VectorContext.js';\nimport { asColorLike } from '../../colorlike.js';\nimport { compose as composeTransform, create as createTransform, } from '../../transform.js';\nimport { defaultFillStyle, defaultFont, defaultLineCap, defaultLineDash, defaultLineDashOffset, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, defaultTextAlign, defaultTextBaseline, } from '../canvas.js';\nimport { equals } from '../../array.js';\nimport { intersects } from '../../extent.js';\nimport { transform2D } from '../../geom/flat/transform.js';\nimport { transformGeom2D } from '../../geom/SimpleGeometry.js';\n/**\n * @classdesc\n * A concrete subclass of {@link module:ol/render/VectorContext} that implements\n * direct rendering of features and geometries to an HTML5 Canvas context.\n * Instances of this class are created internally by the library and\n * provided to application code as vectorContext member of the\n * {@link module:ol/render/Event~RenderEvent} object associated with postcompose, precompose and\n * render events emitted by layers and maps.\n */\nvar CanvasImmediateRenderer = /** @class */ (function (_super) {\n __extends(CanvasImmediateRenderer, _super);\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {number=} opt_squaredTolerance Optional squared tolerance for simplification.\n * @param {import(\"../../proj.js\").TransformFunction=} opt_userTransform Transform from user to view projection.\n */\n function CanvasImmediateRenderer(context, pixelRatio, extent, transform, viewRotation, opt_squaredTolerance, opt_userTransform) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {CanvasRenderingContext2D}\n */\n _this.context_ = context;\n /**\n * @private\n * @type {number}\n */\n _this.pixelRatio_ = pixelRatio;\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n _this.extent_ = extent;\n /**\n * @private\n * @type {import(\"../../transform.js\").Transform}\n */\n _this.transform_ = transform;\n /**\n * @private\n * @type {number}\n */\n _this.viewRotation_ = viewRotation;\n /**\n * @private\n * @type {number}\n */\n _this.squaredTolerance_ = opt_squaredTolerance;\n /**\n * @private\n * @type {import(\"../../proj.js\").TransformFunction}\n */\n _this.userTransform_ = opt_userTransform;\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n _this.contextFillState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n _this.contextStrokeState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").TextState}\n */\n _this.contextTextState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n _this.fillState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n _this.strokeState_ = null;\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}\n */\n _this.image_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.imageAnchorX_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.imageAnchorY_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.imageHeight_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.imageOpacity_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.imageOriginX_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.imageOriginY_ = 0;\n /**\n * @private\n * @type {boolean}\n */\n _this.imageRotateWithView_ = false;\n /**\n * @private\n * @type {number}\n */\n _this.imageRotation_ = 0;\n /**\n * @private\n * @type {import(\"../../size.js\").Size}\n */\n _this.imageScale_ = [0, 0];\n /**\n * @private\n * @type {number}\n */\n _this.imageWidth_ = 0;\n /**\n * @private\n * @type {string}\n */\n _this.text_ = '';\n /**\n * @private\n * @type {number}\n */\n _this.textOffsetX_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.textOffsetY_ = 0;\n /**\n * @private\n * @type {boolean}\n */\n _this.textRotateWithView_ = false;\n /**\n * @private\n * @type {number}\n */\n _this.textRotation_ = 0;\n /**\n * @private\n * @type {import(\"../../size.js\").Size}\n */\n _this.textScale_ = [0, 0];\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n _this.textFillState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n _this.textStrokeState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").TextState}\n */\n _this.textState_ = null;\n /**\n * @private\n * @type {Array<number>}\n */\n _this.pixelCoordinates_ = [];\n /**\n * @private\n * @type {import(\"../../transform.js\").Transform}\n */\n _this.tmpLocalTransform_ = createTransform();\n return _this;\n }\n /**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n */\n CanvasImmediateRenderer.prototype.drawImages_ = function (flatCoordinates, offset, end, stride) {\n if (!this.image_) {\n return;\n }\n var pixelCoordinates = transform2D(flatCoordinates, offset, end, 2, this.transform_, this.pixelCoordinates_);\n var context = this.context_;\n var localTransform = this.tmpLocalTransform_;\n var alpha = context.globalAlpha;\n if (this.imageOpacity_ != 1) {\n context.globalAlpha = alpha * this.imageOpacity_;\n }\n var rotation = this.imageRotation_;\n if (this.imageRotateWithView_) {\n rotation += this.viewRotation_;\n }\n for (var i = 0, ii = pixelCoordinates.length; i < ii; i += 2) {\n var x = pixelCoordinates[i] - this.imageAnchorX_;\n var y = pixelCoordinates[i + 1] - this.imageAnchorY_;\n if (rotation !== 0 ||\n this.imageScale_[0] != 1 ||\n this.imageScale_[1] != 1) {\n var centerX = x + this.imageAnchorX_;\n var centerY = y + this.imageAnchorY_;\n composeTransform(localTransform, centerX, centerY, 1, 1, rotation, -centerX, -centerY);\n context.setTransform.apply(context, localTransform);\n context.translate(centerX, centerY);\n context.scale(this.imageScale_[0], this.imageScale_[1]);\n context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_, this.imageWidth_, this.imageHeight_, -this.imageAnchorX_, -this.imageAnchorY_, this.imageWidth_, this.imageHeight_);\n context.setTransform(1, 0, 0, 1, 0, 0);\n }\n else {\n context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_, this.imageWidth_, this.imageHeight_, x, y, this.imageWidth_, this.imageHeight_);\n }\n }\n if (this.imageOpacity_ != 1) {\n context.globalAlpha = alpha;\n }\n };\n /**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n */\n CanvasImmediateRenderer.prototype.drawText_ = function (flatCoordinates, offset, end, stride) {\n if (!this.textState_ || this.text_ === '') {\n return;\n }\n if (this.textFillState_) {\n this.setContextFillState_(this.textFillState_);\n }\n if (this.textStrokeState_) {\n this.setContextStrokeState_(this.textStrokeState_);\n }\n this.setContextTextState_(this.textState_);\n var pixelCoordinates = transform2D(flatCoordinates, offset, end, stride, this.transform_, this.pixelCoordinates_);\n var context = this.context_;\n var rotation = this.textRotation_;\n if (this.textRotateWithView_) {\n rotation += this.viewRotation_;\n }\n for (; offset < end; offset += stride) {\n var x = pixelCoordinates[offset] + this.textOffsetX_;\n var y = pixelCoordinates[offset + 1] + this.textOffsetY_;\n if (rotation !== 0 ||\n this.textScale_[0] != 1 ||\n this.textScale_[1] != 1) {\n var localTransform = composeTransform(this.tmpLocalTransform_, x, y, 1, 1, rotation, -x, -y);\n context.setTransform.apply(context, localTransform);\n context.translate(x, y);\n context.scale(this.textScale_[0], this.textScale_[1]);\n if (this.textStrokeState_) {\n context.strokeText(this.text_, 0, 0);\n }\n if (this.textFillState_) {\n context.fillText(this.text_, 0, 0);\n }\n context.setTransform(1, 0, 0, 1, 0, 0);\n }\n else {\n if (this.textStrokeState_) {\n context.strokeText(this.text_, x, y);\n }\n if (this.textFillState_) {\n context.fillText(this.text_, x, y);\n }\n }\n }\n };\n /**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {boolean} close Close.\n * @private\n * @return {number} end End.\n */\n CanvasImmediateRenderer.prototype.moveToLineTo_ = function (flatCoordinates, offset, end, stride, close) {\n var context = this.context_;\n var pixelCoordinates = transform2D(flatCoordinates, offset, end, stride, this.transform_, this.pixelCoordinates_);\n context.moveTo(pixelCoordinates[0], pixelCoordinates[1]);\n var length = pixelCoordinates.length;\n if (close) {\n length -= 2;\n }\n for (var i = 2; i < length; i += 2) {\n context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1]);\n }\n if (close) {\n context.closePath();\n }\n return end;\n };\n /**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @private\n * @return {number} End.\n */\n CanvasImmediateRenderer.prototype.drawRings_ = function (flatCoordinates, offset, ends, stride) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n offset = this.moveToLineTo_(flatCoordinates, offset, ends[i], stride, true);\n }\n return offset;\n };\n /**\n * Render a circle geometry into the canvas. Rendering is immediate and uses\n * the current fill and stroke styles.\n *\n * @param {import(\"../../geom/Circle.js\").default} geometry Circle geometry.\n * @api\n */\n CanvasImmediateRenderer.prototype.drawCircle = function (geometry) {\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.fillState_ || this.strokeState_) {\n if (this.fillState_) {\n this.setContextFillState_(this.fillState_);\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n }\n var pixelCoordinates = transformGeom2D(geometry, this.transform_, this.pixelCoordinates_);\n var dx = pixelCoordinates[2] - pixelCoordinates[0];\n var dy = pixelCoordinates[3] - pixelCoordinates[1];\n var radius = Math.sqrt(dx * dx + dy * dy);\n var context = this.context_;\n context.beginPath();\n context.arc(pixelCoordinates[0], pixelCoordinates[1], radius, 0, 2 * Math.PI);\n if (this.fillState_) {\n context.fill();\n }\n if (this.strokeState_) {\n context.stroke();\n }\n }\n if (this.text_ !== '') {\n this.drawText_(geometry.getCenter(), 0, 2, 2);\n }\n };\n /**\n * Set the rendering style. Note that since this is an immediate rendering API,\n * any `zIndex` on the provided style will be ignored.\n *\n * @param {import(\"../../style/Style.js\").default} style The rendering style.\n * @api\n */\n CanvasImmediateRenderer.prototype.setStyle = function (style) {\n this.setFillStrokeStyle(style.getFill(), style.getStroke());\n this.setImageStyle(style.getImage());\n this.setTextStyle(style.getText());\n };\n /**\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n */\n CanvasImmediateRenderer.prototype.setTransform = function (transform) {\n this.transform_ = transform;\n };\n /**\n * Render a geometry into the canvas. Call\n * {@link module:ol/render/canvas/Immediate#setStyle} first to set the rendering style.\n *\n * @param {import(\"../../geom/Geometry.js\").default|import(\"../Feature.js\").default} geometry The geometry to render.\n * @api\n */\n CanvasImmediateRenderer.prototype.drawGeometry = function (geometry) {\n var type = geometry.getType();\n switch (type) {\n case GeometryType.POINT:\n this.drawPoint(\n /** @type {import(\"../../geom/Point.js\").default} */ (geometry));\n break;\n case GeometryType.LINE_STRING:\n this.drawLineString(\n /** @type {import(\"../../geom/LineString.js\").default} */ (geometry));\n break;\n case GeometryType.POLYGON:\n this.drawPolygon(\n /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry));\n break;\n case GeometryType.MULTI_POINT:\n this.drawMultiPoint(\n /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry));\n break;\n case GeometryType.MULTI_LINE_STRING:\n this.drawMultiLineString(\n /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry));\n break;\n case GeometryType.MULTI_POLYGON:\n this.drawMultiPolygon(\n /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry));\n break;\n case GeometryType.GEOMETRY_COLLECTION:\n this.drawGeometryCollection(\n /** @type {import(\"../../geom/GeometryCollection.js\").default} */ (geometry));\n break;\n case GeometryType.CIRCLE:\n this.drawCircle(\n /** @type {import(\"../../geom/Circle.js\").default} */ (geometry));\n break;\n default:\n }\n };\n /**\n * Render a feature into the canvas. Note that any `zIndex` on the provided\n * style will be ignored - features are rendered immediately in the order that\n * this method is called. If you need `zIndex` support, you should be using an\n * {@link module:ol/layer/Vector~VectorLayer} instead.\n *\n * @param {import(\"../../Feature.js\").default} feature Feature.\n * @param {import(\"../../style/Style.js\").default} style Style.\n * @api\n */\n CanvasImmediateRenderer.prototype.drawFeature = function (feature, style) {\n var geometry = style.getGeometryFunction()(feature);\n if (!geometry || !intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n this.setStyle(style);\n this.drawGeometry(geometry);\n };\n /**\n * Render a GeometryCollection to the canvas. Rendering is immediate and\n * uses the current styles appropriate for each geometry in the collection.\n *\n * @param {import(\"../../geom/GeometryCollection.js\").default} geometry Geometry collection.\n */\n CanvasImmediateRenderer.prototype.drawGeometryCollection = function (geometry) {\n var geometries = geometry.getGeometriesArray();\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n this.drawGeometry(geometries[i]);\n }\n };\n /**\n * Render a Point geometry into the canvas. Rendering is immediate and uses\n * the current style.\n *\n * @param {import(\"../../geom/Point.js\").default|import(\"../Feature.js\").default} geometry Point geometry.\n */\n CanvasImmediateRenderer.prototype.drawPoint = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/Point.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n var flatCoordinates = geometry.getFlatCoordinates();\n var stride = geometry.getStride();\n if (this.image_) {\n this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n if (this.text_ !== '') {\n this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n };\n /**\n * Render a MultiPoint geometry into the canvas. Rendering is immediate and\n * uses the current style.\n *\n * @param {import(\"../../geom/MultiPoint.js\").default|import(\"../Feature.js\").default} geometry MultiPoint geometry.\n */\n CanvasImmediateRenderer.prototype.drawMultiPoint = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n var flatCoordinates = geometry.getFlatCoordinates();\n var stride = geometry.getStride();\n if (this.image_) {\n this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n if (this.text_ !== '') {\n this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n };\n /**\n * Render a LineString into the canvas. Rendering is immediate and uses\n * the current style.\n *\n * @param {import(\"../../geom/LineString.js\").default|import(\"../Feature.js\").default} geometry LineString geometry.\n */\n CanvasImmediateRenderer.prototype.drawLineString = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/LineString.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n var context = this.context_;\n var flatCoordinates = geometry.getFlatCoordinates();\n context.beginPath();\n this.moveToLineTo_(flatCoordinates, 0, flatCoordinates.length, geometry.getStride(), false);\n context.stroke();\n }\n if (this.text_ !== '') {\n var flatMidpoint = geometry.getFlatMidpoint();\n this.drawText_(flatMidpoint, 0, 2, 2);\n }\n };\n /**\n * Render a MultiLineString geometry into the canvas. Rendering is immediate\n * and uses the current style.\n *\n * @param {import(\"../../geom/MultiLineString.js\").default|import(\"../Feature.js\").default} geometry MultiLineString geometry.\n */\n CanvasImmediateRenderer.prototype.drawMultiLineString = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n var geometryExtent = geometry.getExtent();\n if (!intersects(this.extent_, geometryExtent)) {\n return;\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n var context = this.context_;\n var flatCoordinates = geometry.getFlatCoordinates();\n var offset = 0;\n var ends = /** @type {Array<number>} */ (geometry.getEnds());\n var stride = geometry.getStride();\n context.beginPath();\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n offset = this.moveToLineTo_(flatCoordinates, offset, ends[i], stride, false);\n }\n context.stroke();\n }\n if (this.text_ !== '') {\n var flatMidpoints = geometry.getFlatMidpoints();\n this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2);\n }\n };\n /**\n * Render a Polygon geometry into the canvas. Rendering is immediate and uses\n * the current style.\n *\n * @param {import(\"../../geom/Polygon.js\").default|import(\"../Feature.js\").default} geometry Polygon geometry.\n */\n CanvasImmediateRenderer.prototype.drawPolygon = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.strokeState_ || this.fillState_) {\n if (this.fillState_) {\n this.setContextFillState_(this.fillState_);\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n }\n var context = this.context_;\n context.beginPath();\n this.drawRings_(geometry.getOrientedFlatCoordinates(), 0, \n /** @type {Array<number>} */ (geometry.getEnds()), geometry.getStride());\n if (this.fillState_) {\n context.fill();\n }\n if (this.strokeState_) {\n context.stroke();\n }\n }\n if (this.text_ !== '') {\n var flatInteriorPoint = geometry.getFlatInteriorPoint();\n this.drawText_(flatInteriorPoint, 0, 2, 2);\n }\n };\n /**\n * Render MultiPolygon geometry into the canvas. Rendering is immediate and\n * uses the current style.\n * @param {import(\"../../geom/MultiPolygon.js\").default} geometry MultiPolygon geometry.\n */\n CanvasImmediateRenderer.prototype.drawMultiPolygon = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.strokeState_ || this.fillState_) {\n if (this.fillState_) {\n this.setContextFillState_(this.fillState_);\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n }\n var context = this.context_;\n var flatCoordinates = geometry.getOrientedFlatCoordinates();\n var offset = 0;\n var endss = geometry.getEndss();\n var stride = geometry.getStride();\n context.beginPath();\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n offset = this.drawRings_(flatCoordinates, offset, ends, stride);\n }\n if (this.fillState_) {\n context.fill();\n }\n if (this.strokeState_) {\n context.stroke();\n }\n }\n if (this.text_ !== '') {\n var flatInteriorPoints = geometry.getFlatInteriorPoints();\n this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2);\n }\n };\n /**\n * @param {import(\"../canvas.js\").FillState} fillState Fill state.\n * @private\n */\n CanvasImmediateRenderer.prototype.setContextFillState_ = function (fillState) {\n var context = this.context_;\n var contextFillState = this.contextFillState_;\n if (!contextFillState) {\n context.fillStyle = fillState.fillStyle;\n this.contextFillState_ = {\n fillStyle: fillState.fillStyle,\n };\n }\n else {\n if (contextFillState.fillStyle != fillState.fillStyle) {\n contextFillState.fillStyle = fillState.fillStyle;\n context.fillStyle = fillState.fillStyle;\n }\n }\n };\n /**\n * @param {import(\"../canvas.js\").StrokeState} strokeState Stroke state.\n * @private\n */\n CanvasImmediateRenderer.prototype.setContextStrokeState_ = function (strokeState) {\n var context = this.context_;\n var contextStrokeState = this.contextStrokeState_;\n if (!contextStrokeState) {\n context.lineCap = strokeState.lineCap;\n if (context.setLineDash) {\n context.setLineDash(strokeState.lineDash);\n context.lineDashOffset = strokeState.lineDashOffset;\n }\n context.lineJoin = strokeState.lineJoin;\n context.lineWidth = strokeState.lineWidth;\n context.miterLimit = strokeState.miterLimit;\n context.strokeStyle = strokeState.strokeStyle;\n this.contextStrokeState_ = {\n lineCap: strokeState.lineCap,\n lineDash: strokeState.lineDash,\n lineDashOffset: strokeState.lineDashOffset,\n lineJoin: strokeState.lineJoin,\n lineWidth: strokeState.lineWidth,\n miterLimit: strokeState.miterLimit,\n strokeStyle: strokeState.strokeStyle,\n };\n }\n else {\n if (contextStrokeState.lineCap != strokeState.lineCap) {\n contextStrokeState.lineCap = strokeState.lineCap;\n context.lineCap = strokeState.lineCap;\n }\n if (context.setLineDash) {\n if (!equals(contextStrokeState.lineDash, strokeState.lineDash)) {\n context.setLineDash((contextStrokeState.lineDash = strokeState.lineDash));\n }\n if (contextStrokeState.lineDashOffset != strokeState.lineDashOffset) {\n contextStrokeState.lineDashOffset = strokeState.lineDashOffset;\n context.lineDashOffset = strokeState.lineDashOffset;\n }\n }\n if (contextStrokeState.lineJoin != strokeState.lineJoin) {\n contextStrokeState.lineJoin = strokeState.lineJoin;\n context.lineJoin = strokeState.lineJoin;\n }\n if (contextStrokeState.lineWidth != strokeState.lineWidth) {\n contextStrokeState.lineWidth = strokeState.lineWidth;\n context.lineWidth = strokeState.lineWidth;\n }\n if (contextStrokeState.miterLimit != strokeState.miterLimit) {\n contextStrokeState.miterLimit = strokeState.miterLimit;\n context.miterLimit = strokeState.miterLimit;\n }\n if (contextStrokeState.strokeStyle != strokeState.strokeStyle) {\n contextStrokeState.strokeStyle = strokeState.strokeStyle;\n context.strokeStyle = strokeState.strokeStyle;\n }\n }\n };\n /**\n * @param {import(\"../canvas.js\").TextState} textState Text state.\n * @private\n */\n CanvasImmediateRenderer.prototype.setContextTextState_ = function (textState) {\n var context = this.context_;\n var contextTextState = this.contextTextState_;\n var textAlign = textState.textAlign\n ? textState.textAlign\n : defaultTextAlign;\n if (!contextTextState) {\n context.font = textState.font;\n context.textAlign = /** @type {CanvasTextAlign} */ (textAlign);\n context.textBaseline = /** @type {CanvasTextBaseline} */ (textState.textBaseline);\n this.contextTextState_ = {\n font: textState.font,\n textAlign: textAlign,\n textBaseline: textState.textBaseline,\n };\n }\n else {\n if (contextTextState.font != textState.font) {\n contextTextState.font = textState.font;\n context.font = textState.font;\n }\n if (contextTextState.textAlign != textAlign) {\n contextTextState.textAlign = /** @type {CanvasTextAlign} */ (textAlign);\n context.textAlign = /** @type {CanvasTextAlign} */ (textAlign);\n }\n if (contextTextState.textBaseline != textState.textBaseline) {\n contextTextState.textBaseline = /** @type {CanvasTextBaseline} */ (textState.textBaseline);\n context.textBaseline = /** @type {CanvasTextBaseline} */ (textState.textBaseline);\n }\n }\n };\n /**\n * Set the fill and stroke style for subsequent draw operations. To clear\n * either fill or stroke styles, pass null for the appropriate parameter.\n *\n * @param {import(\"../../style/Fill.js\").default} fillStyle Fill style.\n * @param {import(\"../../style/Stroke.js\").default} strokeStyle Stroke style.\n */\n CanvasImmediateRenderer.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) {\n if (!fillStyle) {\n this.fillState_ = null;\n }\n else {\n var fillStyleColor = fillStyle.getColor();\n this.fillState_ = {\n fillStyle: asColorLike(fillStyleColor ? fillStyleColor : defaultFillStyle),\n };\n }\n if (!strokeStyle) {\n this.strokeState_ = null;\n }\n else {\n var strokeStyleColor = strokeStyle.getColor();\n var strokeStyleLineCap = strokeStyle.getLineCap();\n var strokeStyleLineDash = strokeStyle.getLineDash();\n var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n var strokeStyleLineJoin = strokeStyle.getLineJoin();\n var strokeStyleWidth = strokeStyle.getWidth();\n var strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n this.strokeState_ = {\n lineCap: strokeStyleLineCap !== undefined\n ? strokeStyleLineCap\n : defaultLineCap,\n lineDash: strokeStyleLineDash ? strokeStyleLineDash : defaultLineDash,\n lineDashOffset: strokeStyleLineDashOffset\n ? strokeStyleLineDashOffset\n : defaultLineDashOffset,\n lineJoin: strokeStyleLineJoin !== undefined\n ? strokeStyleLineJoin\n : defaultLineJoin,\n lineWidth: this.pixelRatio_ *\n (strokeStyleWidth !== undefined\n ? strokeStyleWidth\n : defaultLineWidth),\n miterLimit: strokeStyleMiterLimit !== undefined\n ? strokeStyleMiterLimit\n : defaultMiterLimit,\n strokeStyle: asColorLike(strokeStyleColor ? strokeStyleColor : defaultStrokeStyle),\n };\n }\n };\n /**\n * Set the image style for subsequent draw operations. Pass null to remove\n * the image style.\n *\n * @param {import(\"../../style/Image.js\").default} imageStyle Image style.\n */\n CanvasImmediateRenderer.prototype.setImageStyle = function (imageStyle) {\n if (!imageStyle) {\n this.image_ = null;\n }\n else {\n var imageSize = imageStyle.getSize();\n if (!imageSize) {\n this.image_ = null;\n }\n else {\n var imageAnchor = imageStyle.getAnchor();\n // FIXME pixel ratio\n var imageImage = imageStyle.getImage(1);\n var imageOrigin = imageStyle.getOrigin();\n var imageScale = imageStyle.getScaleArray();\n this.imageAnchorX_ = imageAnchor[0];\n this.imageAnchorY_ = imageAnchor[1];\n this.imageHeight_ = imageSize[1];\n this.image_ = imageImage;\n this.imageOpacity_ = imageStyle.getOpacity();\n this.imageOriginX_ = imageOrigin[0];\n this.imageOriginY_ = imageOrigin[1];\n this.imageRotateWithView_ = imageStyle.getRotateWithView();\n this.imageRotation_ = imageStyle.getRotation();\n this.imageScale_ = [\n this.pixelRatio_ * imageScale[0],\n this.pixelRatio_ * imageScale[1],\n ];\n this.imageWidth_ = imageSize[0];\n }\n }\n };\n /**\n * Set the text style for subsequent draw operations. Pass null to\n * remove the text style.\n *\n * @param {import(\"../../style/Text.js\").default} textStyle Text style.\n */\n CanvasImmediateRenderer.prototype.setTextStyle = function (textStyle) {\n if (!textStyle) {\n this.text_ = '';\n }\n else {\n var textFillStyle = textStyle.getFill();\n if (!textFillStyle) {\n this.textFillState_ = null;\n }\n else {\n var textFillStyleColor = textFillStyle.getColor();\n this.textFillState_ = {\n fillStyle: asColorLike(textFillStyleColor ? textFillStyleColor : defaultFillStyle),\n };\n }\n var textStrokeStyle = textStyle.getStroke();\n if (!textStrokeStyle) {\n this.textStrokeState_ = null;\n }\n else {\n var textStrokeStyleColor = textStrokeStyle.getColor();\n var textStrokeStyleLineCap = textStrokeStyle.getLineCap();\n var textStrokeStyleLineDash = textStrokeStyle.getLineDash();\n var textStrokeStyleLineDashOffset = textStrokeStyle.getLineDashOffset();\n var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();\n var textStrokeStyleWidth = textStrokeStyle.getWidth();\n var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();\n this.textStrokeState_ = {\n lineCap: textStrokeStyleLineCap !== undefined\n ? textStrokeStyleLineCap\n : defaultLineCap,\n lineDash: textStrokeStyleLineDash\n ? textStrokeStyleLineDash\n : defaultLineDash,\n lineDashOffset: textStrokeStyleLineDashOffset\n ? textStrokeStyleLineDashOffset\n : defaultLineDashOffset,\n lineJoin: textStrokeStyleLineJoin !== undefined\n ? textStrokeStyleLineJoin\n : defaultLineJoin,\n lineWidth: textStrokeStyleWidth !== undefined\n ? textStrokeStyleWidth\n : defaultLineWidth,\n miterLimit: textStrokeStyleMiterLimit !== undefined\n ? textStrokeStyleMiterLimit\n : defaultMiterLimit,\n strokeStyle: asColorLike(textStrokeStyleColor ? textStrokeStyleColor : defaultStrokeStyle),\n };\n }\n var textFont = textStyle.getFont();\n var textOffsetX = textStyle.getOffsetX();\n var textOffsetY = textStyle.getOffsetY();\n var textRotateWithView = textStyle.getRotateWithView();\n var textRotation = textStyle.getRotation();\n var textScale = textStyle.getScaleArray();\n var textText = textStyle.getText();\n var textTextAlign = textStyle.getTextAlign();\n var textTextBaseline = textStyle.getTextBaseline();\n this.textState_ = {\n font: textFont !== undefined ? textFont : defaultFont,\n textAlign: textTextAlign !== undefined ? textTextAlign : defaultTextAlign,\n textBaseline: textTextBaseline !== undefined\n ? textTextBaseline\n : defaultTextBaseline,\n };\n this.text_ = textText !== undefined ? textText : '';\n this.textOffsetX_ =\n textOffsetX !== undefined ? this.pixelRatio_ * textOffsetX : 0;\n this.textOffsetY_ =\n textOffsetY !== undefined ? this.pixelRatio_ * textOffsetY : 0;\n this.textRotateWithView_ =\n textRotateWithView !== undefined ? textRotateWithView : false;\n this.textRotation_ = textRotation !== undefined ? textRotation : 0;\n this.textScale_ = [\n this.pixelRatio_ * textScale[0],\n this.pixelRatio_ * textScale[1],\n ];\n }\n };\n return CanvasImmediateRenderer;\n}(VectorContext));\nexport default CanvasImmediateRenderer;\n//# sourceMappingURL=Immediate.js.map","/**\n * @module ol/renderer/vector\n */\nimport BuilderType from '../render/canvas/BuilderType.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport ImageState from '../ImageState.js';\nimport { getUid } from '../util.js';\n/**\n * Feature callback. The callback will be called with three arguments. The first\n * argument is one {@link module:ol/Feature feature} or {@link module:ol/render/Feature render feature}\n * at the pixel, the second is the {@link module:ol/layer/Layer layer} of the feature and will be null for\n * unmanaged layers. The third is the {@link module:ol/geom/SimpleGeometry} of the feature. For features\n * with a GeometryCollection geometry, it will be the first detected geometry from the collection.\n * @template T\n * @typedef {function(import(\"../Feature.js\").FeatureLike, import(\"../layer/Layer.js\").default, import(\"../geom/SimpleGeometry.js\").default): T} FeatureCallback\n */\n/**\n * Tolerance for geometry simplification in device pixels.\n * @type {number}\n */\nvar SIMPLIFY_TOLERANCE = 0.5;\n/**\n * @const\n * @type {Object<import(\"../geom/GeometryType.js\").default,\n * function(import(\"../render/canvas/BuilderGroup.js\").default, import(\"../geom/Geometry.js\").default,\n * import(\"../style/Style.js\").default, Object): void>}\n */\nvar GEOMETRY_RENDERERS = {\n 'Point': renderPointGeometry,\n 'LineString': renderLineStringGeometry,\n 'Polygon': renderPolygonGeometry,\n 'MultiPoint': renderMultiPointGeometry,\n 'MultiLineString': renderMultiLineStringGeometry,\n 'MultiPolygon': renderMultiPolygonGeometry,\n 'GeometryCollection': renderGeometryCollectionGeometry,\n 'Circle': renderCircleGeometry,\n};\n/**\n * @param {import(\"../Feature.js\").FeatureLike} feature1 Feature 1.\n * @param {import(\"../Feature.js\").FeatureLike} feature2 Feature 2.\n * @return {number} Order.\n */\nexport function defaultOrder(feature1, feature2) {\n return parseInt(getUid(feature1), 10) - parseInt(getUid(feature2), 10);\n}\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Squared pixel tolerance.\n */\nexport function getSquaredTolerance(resolution, pixelRatio) {\n var tolerance = getTolerance(resolution, pixelRatio);\n return tolerance * tolerance;\n}\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel tolerance.\n */\nexport function getTolerance(resolution, pixelRatio) {\n return (SIMPLIFY_TOLERANCE * resolution) / pixelRatio;\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Builder group.\n * @param {import(\"../geom/Circle.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderCircleGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var fillStyle = style.getFill();\n var strokeStyle = style.getStroke();\n if (fillStyle || strokeStyle) {\n var circleReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.CIRCLE);\n circleReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n circleReplay.drawCircle(geometry, feature);\n }\n var textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Transform from user to view projection.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n * @return {boolean} `true` if style is loading.\n */\nexport function renderFeature(replayGroup, feature, style, squaredTolerance, listener, opt_transform, opt_declutterBuilderGroup) {\n var loading = false;\n var imageStyle = style.getImage();\n if (imageStyle) {\n var imageState = imageStyle.getImageState();\n if (imageState == ImageState.LOADED || imageState == ImageState.ERROR) {\n imageStyle.unlistenImageChange(listener);\n }\n else {\n if (imageState == ImageState.IDLE) {\n imageStyle.load();\n }\n imageState = imageStyle.getImageState();\n imageStyle.listenImageChange(listener);\n loading = true;\n }\n }\n renderFeatureInternal(replayGroup, feature, style, squaredTolerance, opt_transform, opt_declutterBuilderGroup);\n return loading;\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderFeatureInternal(replayGroup, feature, style, squaredTolerance, opt_transform, opt_declutterBuilderGroup) {\n var geometry = style.getGeometryFunction()(feature);\n if (!geometry) {\n return;\n }\n var simplifiedGeometry = geometry.simplifyTransformed(squaredTolerance, opt_transform);\n var renderer = style.getRenderer();\n if (renderer) {\n renderGeometry(replayGroup, simplifiedGeometry, style, feature);\n }\n else {\n var geometryRenderer = GEOMETRY_RENDERERS[simplifiedGeometry.getType()];\n geometryRenderer(replayGroup, simplifiedGeometry, style, feature, opt_declutterBuilderGroup);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\nfunction renderGeometry(replayGroup, geometry, style, feature) {\n if (geometry.getType() == GeometryType.GEOMETRY_COLLECTION) {\n var geometries = /** @type {import(\"../geom/GeometryCollection.js\").default} */ (geometry).getGeometries();\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n renderGeometry(replayGroup, geometries[i], style, feature);\n }\n return;\n }\n var replay = replayGroup.getBuilder(style.getZIndex(), BuilderType.DEFAULT);\n replay.drawCustom(\n /** @type {import(\"../geom/SimpleGeometry.js\").default} */ (geometry), feature, style.getRenderer());\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../geom/GeometryCollection.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderGeometryCollectionGeometry(replayGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var geometries = geometry.getGeometriesArray();\n var i, ii;\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n var geometryRenderer = GEOMETRY_RENDERERS[geometries[i].getType()];\n geometryRenderer(replayGroup, geometries[i], style, feature, opt_declutterBuilderGroup);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/LineString.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderLineStringGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var strokeStyle = style.getStroke();\n if (strokeStyle) {\n var lineStringReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.LINE_STRING);\n lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n lineStringReplay.drawLineString(geometry, feature);\n }\n var textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiLineString.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderMultiLineStringGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var strokeStyle = style.getStroke();\n if (strokeStyle) {\n var lineStringReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.LINE_STRING);\n lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n lineStringReplay.drawMultiLineString(geometry, feature);\n }\n var textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiPolygon.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderMultiPolygonGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var fillStyle = style.getFill();\n var strokeStyle = style.getStroke();\n if (strokeStyle || fillStyle) {\n var polygonReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.POLYGON);\n polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n polygonReplay.drawMultiPolygon(geometry, feature);\n }\n var textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/Point.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderPointGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var imageStyle = style.getImage();\n var textStyle = style.getText();\n /** @type {import(\"../render/canvas.js\").DeclutterImageWithText} */\n var declutterImageWithText;\n if (opt_declutterBuilderGroup) {\n builderGroup = opt_declutterBuilderGroup;\n declutterImageWithText =\n imageStyle && textStyle && textStyle.getText() ? {} : undefined;\n }\n if (imageStyle) {\n if (imageStyle.getImageState() != ImageState.LOADED) {\n return;\n }\n var imageReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.IMAGE);\n imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n imageReplay.drawPoint(geometry, feature);\n }\n if (textStyle && textStyle.getText()) {\n var textReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle, declutterImageWithText);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiPoint.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderMultiPointGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var imageStyle = style.getImage();\n var textStyle = style.getText();\n /** @type {import(\"../render/canvas.js\").DeclutterImageWithText} */\n var declutterImageWithText;\n if (opt_declutterBuilderGroup) {\n builderGroup = opt_declutterBuilderGroup;\n declutterImageWithText =\n imageStyle && textStyle && textStyle.getText() ? {} : undefined;\n }\n if (imageStyle) {\n if (imageStyle.getImageState() != ImageState.LOADED) {\n return;\n }\n var imageReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.IMAGE);\n imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n imageReplay.drawMultiPoint(geometry, feature);\n }\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle, declutterImageWithText);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/Polygon.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n */\nfunction renderPolygonGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var fillStyle = style.getFill();\n var strokeStyle = style.getStroke();\n if (fillStyle || strokeStyle) {\n var polygonReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.POLYGON);\n polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n polygonReplay.drawPolygon(geometry, feature);\n }\n var textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n//# sourceMappingURL=vector.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/canvas/VectorLayer\n */\nimport CanvasBuilderGroup from '../../render/canvas/BuilderGroup.js';\nimport CanvasLayerRenderer from './Layer.js';\nimport ExecutorGroup from '../../render/canvas/ExecutorGroup.js';\nimport ViewHint from '../../ViewHint.js';\nimport { apply, makeInverse, makeScale, toString as transformToString, } from '../../transform.js';\nimport { buffer, containsExtent, createEmpty, getWidth, intersects as intersectsExtent, wrapX as wrapExtentX, } from '../../extent.js';\nimport { createHitDetectionImageData, hitDetect, } from '../../render/canvas/hitdetect.js';\nimport { defaultOrder as defaultRenderOrder, getTolerance as getRenderTolerance, getSquaredTolerance as getSquaredRenderTolerance, renderFeature, } from '../vector.js';\nimport { fromUserExtent, getTransformFromProjections, getUserProjection, toUserExtent, } from '../../proj.js';\nimport { getUid } from '../../util.js';\nimport { wrapX as wrapCoordinateX } from '../../coordinate.js';\n/**\n * @classdesc\n * Canvas renderer for vector layers.\n * @api\n */\nvar CanvasVectorLayerRenderer = /** @class */ (function (_super) {\n __extends(CanvasVectorLayerRenderer, _super);\n /**\n * @param {import(\"../../layer/Vector.js\").default} vectorLayer Vector layer.\n */\n function CanvasVectorLayerRenderer(vectorLayer) {\n var _this = _super.call(this, vectorLayer) || this;\n /** @private */\n _this.boundHandleStyleImageChange_ = _this.handleStyleImageChange_.bind(_this);\n /**\n * @type {boolean}\n */\n _this.animatingOrInteracting_;\n /**\n * @private\n * @type {boolean}\n */\n _this.dirty_ = false;\n /**\n * @type {ImageData}\n */\n _this.hitDetectionImageData_ = null;\n /**\n * @type {Array<import(\"../../Feature.js\").default>}\n */\n _this.renderedFeatures_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.renderedRevision_ = -1;\n /**\n * @private\n * @type {number}\n */\n _this.renderedResolution_ = NaN;\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n _this.renderedExtent_ = createEmpty();\n /**\n * @private\n * @type {number}\n */\n _this.renderedRotation_;\n /**\n * @private\n * @type {import(\"../../coordinate\").Coordinate}\n */\n _this.renderedCenter_ = null;\n /**\n * @private\n * @type {import(\"../../proj/Projection\").default}\n */\n _this.renderedProjection_ = null;\n /**\n * @private\n * @type {function(import(\"../../Feature.js\").default, import(\"../../Feature.js\").default): number|null}\n */\n _this.renderedRenderOrder_ = null;\n /**\n * @private\n * @type {import(\"../../render/canvas/ExecutorGroup\").default}\n */\n _this.replayGroup_ = null;\n /**\n * A new replay group had to be created by `prepareFrame()`\n * @type {boolean}\n */\n _this.replayGroupChanged = true;\n /**\n * @type {import(\"../../render/canvas/ExecutorGroup\").default}\n */\n _this.declutterExecutorGroup = null;\n /**\n * Clipping to be performed by `renderFrame()`\n * @type {boolean}\n */\n _this.clipping = true;\n return _this;\n }\n /**\n * Get a rendering container from an existing target, if compatible.\n * @param {HTMLElement} target Potential render target.\n * @param {string} transform CSS Transform.\n * @param {number} opacity Opacity.\n */\n CanvasVectorLayerRenderer.prototype.useContainer = function (target, transform, opacity) {\n if (opacity < 1) {\n target = null;\n }\n _super.prototype.useContainer.call(this, target, transform, opacity);\n };\n /**\n * @param {ExecutorGroup} executorGroup Executor group.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {import(\"rbush\").default=} opt_declutterTree Declutter tree.\n */\n CanvasVectorLayerRenderer.prototype.renderWorlds = function (executorGroup, frameState, opt_declutterTree) {\n var extent = frameState.extent;\n var viewState = frameState.viewState;\n var center = viewState.center;\n var resolution = viewState.resolution;\n var projection = viewState.projection;\n var rotation = viewState.rotation;\n var projectionExtent = projection.getExtent();\n var vectorSource = this.getLayer().getSource();\n var pixelRatio = frameState.pixelRatio;\n var viewHints = frameState.viewHints;\n var snapToPixel = !(viewHints[ViewHint.ANIMATING] || viewHints[ViewHint.INTERACTING]);\n var context = this.context;\n var width = Math.round(frameState.size[0] * pixelRatio);\n var height = Math.round(frameState.size[1] * pixelRatio);\n var multiWorld = vectorSource.getWrapX() && projection.canWrapX();\n var worldWidth = multiWorld ? getWidth(projectionExtent) : null;\n var endWorld = multiWorld\n ? Math.ceil((extent[2] - projectionExtent[2]) / worldWidth) + 1\n : 1;\n var world = multiWorld\n ? Math.floor((extent[0] - projectionExtent[0]) / worldWidth)\n : 0;\n do {\n var transform = this.getRenderTransform(center, resolution, rotation, pixelRatio, width, height, world * worldWidth);\n executorGroup.execute(context, 1, transform, rotation, snapToPixel, undefined, opt_declutterTree);\n } while (++world < endWorld);\n };\n /**\n * Render declutter items for this layer\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n */\n CanvasVectorLayerRenderer.prototype.renderDeclutter = function (frameState) {\n if (this.declutterExecutorGroup) {\n this.renderWorlds(this.declutterExecutorGroup, frameState, frameState.declutterTree);\n }\n };\n /**\n * Render the layer.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target that may be used to render content to.\n * @return {HTMLElement} The rendered element.\n */\n CanvasVectorLayerRenderer.prototype.renderFrame = function (frameState, target) {\n var pixelRatio = frameState.pixelRatio;\n var layerState = frameState.layerStatesArray[frameState.layerIndex];\n // set forward and inverse pixel transforms\n makeScale(this.pixelTransform, 1 / pixelRatio, 1 / pixelRatio);\n makeInverse(this.inversePixelTransform, this.pixelTransform);\n var canvasTransform = transformToString(this.pixelTransform);\n this.useContainer(target, canvasTransform, layerState.opacity);\n var context = this.context;\n var canvas = context.canvas;\n var replayGroup = this.replayGroup_;\n var declutterExecutorGroup = this.declutterExecutorGroup;\n if ((!replayGroup || replayGroup.isEmpty()) &&\n (!declutterExecutorGroup || declutterExecutorGroup.isEmpty())) {\n if (!this.containerReused && canvas.width > 0) {\n canvas.width = 0;\n }\n return this.container;\n }\n // resize and clear\n var width = Math.round(frameState.size[0] * pixelRatio);\n var height = Math.round(frameState.size[1] * pixelRatio);\n if (canvas.width != width || canvas.height != height) {\n canvas.width = width;\n canvas.height = height;\n if (canvas.style.transform !== canvasTransform) {\n canvas.style.transform = canvasTransform;\n }\n }\n else if (!this.containerReused) {\n context.clearRect(0, 0, width, height);\n }\n this.preRender(context, frameState);\n var viewState = frameState.viewState;\n var projection = viewState.projection;\n // clipped rendering if layer extent is set\n var clipped = false;\n if (layerState.extent && this.clipping) {\n var layerExtent = fromUserExtent(layerState.extent, projection);\n clipped =\n !containsExtent(layerExtent, frameState.extent) &&\n intersectsExtent(layerExtent, frameState.extent);\n if (clipped) {\n this.clipUnrotated(context, frameState, layerExtent);\n }\n }\n this.renderWorlds(replayGroup, frameState);\n if (clipped) {\n context.restore();\n }\n this.postRender(context, frameState);\n var opacity = layerState.opacity;\n var container = this.container;\n if (opacity !== parseFloat(container.style.opacity)) {\n container.style.opacity = opacity === 1 ? '' : String(opacity);\n }\n if (this.renderedRotation_ !== viewState.rotation) {\n this.renderedRotation_ = viewState.rotation;\n this.hitDetectionImageData_ = null;\n }\n return this.container;\n };\n /**\n * Asynchronous layer level hit detection.\n * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n * @return {Promise<Array<import(\"../../Feature\").default>>} Promise that resolves with an array of features.\n */\n CanvasVectorLayerRenderer.prototype.getFeatures = function (pixel) {\n return new Promise(\n /**\n * @param {function(Array<import(\"../../Feature\").default|import(\"../../render/Feature\").default>): void} resolve Resolver function.\n * @this {CanvasVectorLayerRenderer}\n */\n function (resolve) {\n if (!this.hitDetectionImageData_ && !this.animatingOrInteracting_) {\n var size = [this.context.canvas.width, this.context.canvas.height];\n apply(this.pixelTransform, size);\n var center = this.renderedCenter_;\n var resolution = this.renderedResolution_;\n var rotation = this.renderedRotation_;\n var projection = this.renderedProjection_;\n var extent = this.renderedExtent_;\n var layer = this.getLayer();\n var transforms = [];\n var width = size[0] / 2;\n var height = size[1] / 2;\n transforms.push(this.getRenderTransform(center, resolution, rotation, 0.5, width, height, 0).slice());\n var source = layer.getSource();\n var projectionExtent = projection.getExtent();\n if (source.getWrapX() &&\n projection.canWrapX() &&\n !containsExtent(projectionExtent, extent)) {\n var startX = extent[0];\n var worldWidth = getWidth(projectionExtent);\n var world = 0;\n var offsetX = void 0;\n while (startX < projectionExtent[0]) {\n --world;\n offsetX = worldWidth * world;\n transforms.push(this.getRenderTransform(center, resolution, rotation, 0.5, width, height, offsetX).slice());\n startX += worldWidth;\n }\n world = 0;\n startX = extent[2];\n while (startX > projectionExtent[2]) {\n ++world;\n offsetX = worldWidth * world;\n transforms.push(this.getRenderTransform(center, resolution, rotation, 0.5, width, height, offsetX).slice());\n startX -= worldWidth;\n }\n }\n this.hitDetectionImageData_ = createHitDetectionImageData(size, transforms, this.renderedFeatures_, layer.getStyleFunction(), extent, resolution, rotation);\n }\n resolve(hitDetect(pixel, this.renderedFeatures_, this.hitDetectionImageData_));\n }.bind(this));\n };\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {import(\"../vector.js\").FeatureCallback<T>} callback Feature callback.\n * @param {Array<import(\"../Map.js\").HitMatch<T>>} matches The hit detected matches with tolerance.\n * @return {T|undefined} Callback result.\n * @template T\n */\n CanvasVectorLayerRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, callback, matches) {\n var _this = this;\n if (!this.replayGroup_) {\n return undefined;\n }\n var resolution = frameState.viewState.resolution;\n var rotation = frameState.viewState.rotation;\n var layer = this.getLayer();\n /** @type {!Object<string, import(\"../Map.js\").HitMatch<T>|true>} */\n var features = {};\n /**\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @param {number} distanceSq The squared distance to the click position\n * @return {T|undefined} Callback result.\n */\n var featureCallback = function (feature, geometry, distanceSq) {\n var key = getUid(feature);\n var match = features[key];\n if (!match) {\n if (distanceSq === 0) {\n features[key] = true;\n return callback(feature, layer, geometry);\n }\n matches.push((features[key] = {\n feature: feature,\n layer: layer,\n geometry: geometry,\n distanceSq: distanceSq,\n callback: callback,\n }));\n }\n else if (match !== true && distanceSq < match.distanceSq) {\n if (distanceSq === 0) {\n features[key] = true;\n matches.splice(matches.lastIndexOf(match), 1);\n return callback(feature, layer, geometry);\n }\n match.geometry = geometry;\n match.distanceSq = distanceSq;\n }\n return undefined;\n };\n var result;\n var executorGroups = [this.replayGroup_];\n if (this.declutterExecutorGroup) {\n executorGroups.push(this.declutterExecutorGroup);\n }\n executorGroups.some(function (executorGroup) {\n return (result = executorGroup.forEachFeatureAtCoordinate(coordinate, resolution, rotation, hitTolerance, featureCallback, executorGroup === _this.declutterExecutorGroup\n ? frameState.declutterTree.all().map(function (item) { return item.value; })\n : null));\n });\n return result;\n };\n /**\n * Perform action necessary to get the layer rendered after new fonts have loaded\n */\n CanvasVectorLayerRenderer.prototype.handleFontsChanged = function () {\n var layer = this.getLayer();\n if (layer.getVisible() && this.replayGroup_) {\n layer.changed();\n }\n };\n /**\n * Handle changes in image style state.\n * @param {import(\"../../events/Event.js\").default} event Image style change event.\n * @private\n */\n CanvasVectorLayerRenderer.prototype.handleStyleImageChange_ = function (event) {\n this.renderIfReadyAndVisible();\n };\n /**\n * Determine whether render should be called.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n */\n CanvasVectorLayerRenderer.prototype.prepareFrame = function (frameState) {\n var vectorLayer = this.getLayer();\n var vectorSource = vectorLayer.getSource();\n if (!vectorSource) {\n return false;\n }\n var animating = frameState.viewHints[ViewHint.ANIMATING];\n var interacting = frameState.viewHints[ViewHint.INTERACTING];\n var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();\n var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();\n if ((!this.dirty_ && !updateWhileAnimating && animating) ||\n (!updateWhileInteracting && interacting)) {\n this.animatingOrInteracting_ = true;\n return true;\n }\n this.animatingOrInteracting_ = false;\n var frameStateExtent = frameState.extent;\n var viewState = frameState.viewState;\n var projection = viewState.projection;\n var resolution = viewState.resolution;\n var pixelRatio = frameState.pixelRatio;\n var vectorLayerRevision = vectorLayer.getRevision();\n var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();\n var vectorLayerRenderOrder = vectorLayer.getRenderOrder();\n if (vectorLayerRenderOrder === undefined) {\n vectorLayerRenderOrder = defaultRenderOrder;\n }\n var center = viewState.center.slice();\n var extent = buffer(frameStateExtent, vectorLayerRenderBuffer * resolution);\n var loadExtents = [extent.slice()];\n var projectionExtent = projection.getExtent();\n if (vectorSource.getWrapX() &&\n projection.canWrapX() &&\n !containsExtent(projectionExtent, frameState.extent)) {\n // For the replay group, we need an extent that intersects the real world\n // (-180° to +180°). To support geometries in a coordinate range from -540°\n // to +540°, we add at least 1 world width on each side of the projection\n // extent. If the viewport is wider than the world, we need to add half of\n // the viewport width to make sure we cover the whole viewport.\n var worldWidth = getWidth(projectionExtent);\n var gutter = Math.max(getWidth(extent) / 2, worldWidth);\n extent[0] = projectionExtent[0] - gutter;\n extent[2] = projectionExtent[2] + gutter;\n wrapCoordinateX(center, projection);\n var loadExtent = wrapExtentX(loadExtents[0], projection);\n // If the extent crosses the date line, we load data for both edges of the worlds\n if (loadExtent[0] < projectionExtent[0] &&\n loadExtent[2] < projectionExtent[2]) {\n loadExtents.push([\n loadExtent[0] + worldWidth,\n loadExtent[1],\n loadExtent[2] + worldWidth,\n loadExtent[3],\n ]);\n }\n else if (loadExtent[0] > projectionExtent[0] &&\n loadExtent[2] > projectionExtent[2]) {\n loadExtents.push([\n loadExtent[0] - worldWidth,\n loadExtent[1],\n loadExtent[2] - worldWidth,\n loadExtent[3],\n ]);\n }\n }\n if (!this.dirty_ &&\n this.renderedResolution_ == resolution &&\n this.renderedRevision_ == vectorLayerRevision &&\n this.renderedRenderOrder_ == vectorLayerRenderOrder &&\n containsExtent(this.renderedExtent_, extent)) {\n this.replayGroupChanged = false;\n return true;\n }\n this.replayGroup_ = null;\n this.dirty_ = false;\n var replayGroup = new CanvasBuilderGroup(getRenderTolerance(resolution, pixelRatio), extent, resolution, pixelRatio);\n var declutterBuilderGroup;\n if (this.getLayer().getDeclutter()) {\n declutterBuilderGroup = new CanvasBuilderGroup(getRenderTolerance(resolution, pixelRatio), extent, resolution, pixelRatio);\n }\n var userProjection = getUserProjection();\n var userTransform;\n if (userProjection) {\n for (var i = 0, ii = loadExtents.length; i < ii; ++i) {\n vectorSource.loadFeatures(toUserExtent(loadExtents[i], projection), resolution, userProjection);\n }\n userTransform = getTransformFromProjections(userProjection, projection);\n }\n else {\n for (var i = 0, ii = loadExtents.length; i < ii; ++i) {\n vectorSource.loadFeatures(loadExtents[i], resolution, projection);\n }\n }\n var squaredTolerance = getSquaredRenderTolerance(resolution, pixelRatio);\n var render = \n /**\n * @param {import(\"../../Feature.js\").default} feature Feature.\n * @this {CanvasVectorLayerRenderer}\n */\n function (feature) {\n var styles;\n var styleFunction = feature.getStyleFunction() || vectorLayer.getStyleFunction();\n if (styleFunction) {\n styles = styleFunction(feature, resolution);\n }\n if (styles) {\n var dirty = this.renderFeature(feature, squaredTolerance, styles, replayGroup, userTransform, declutterBuilderGroup);\n this.dirty_ = this.dirty_ || dirty;\n }\n }.bind(this);\n var userExtent = toUserExtent(extent, projection);\n /** @type {Array<import(\"../../Feature.js\").default>} */\n var features = vectorSource.getFeaturesInExtent(userExtent);\n if (vectorLayerRenderOrder) {\n features.sort(vectorLayerRenderOrder);\n }\n for (var i = 0, ii = features.length; i < ii; ++i) {\n render(features[i]);\n }\n this.renderedFeatures_ = features;\n var replayGroupInstructions = replayGroup.finish();\n var executorGroup = new ExecutorGroup(extent, resolution, pixelRatio, vectorSource.getOverlaps(), replayGroupInstructions, vectorLayer.getRenderBuffer());\n if (declutterBuilderGroup) {\n this.declutterExecutorGroup = new ExecutorGroup(extent, resolution, pixelRatio, vectorSource.getOverlaps(), declutterBuilderGroup.finish(), vectorLayer.getRenderBuffer());\n }\n this.renderedResolution_ = resolution;\n this.renderedRevision_ = vectorLayerRevision;\n this.renderedRenderOrder_ = vectorLayerRenderOrder;\n this.renderedExtent_ = extent;\n this.renderedCenter_ = center;\n this.renderedProjection_ = projection;\n this.replayGroup_ = executorGroup;\n this.hitDetectionImageData_ = null;\n this.replayGroupChanged = true;\n return true;\n };\n /**\n * @param {import(\"../../Feature.js\").default} feature Feature.\n * @param {number} squaredTolerance Squared render tolerance.\n * @param {import(\"../../style/Style.js\").default|Array<import(\"../../style/Style.js\").default>} styles The style or array of styles.\n * @param {import(\"../../render/canvas/BuilderGroup.js\").default} builderGroup Builder group.\n * @param {import(\"../../proj.js\").TransformFunction=} opt_transform Transform from user to view projection.\n * @param {import(\"../../render/canvas/BuilderGroup.js\").default=} opt_declutterBuilderGroup Builder for decluttering.\n * @return {boolean} `true` if an image is loading.\n */\n CanvasVectorLayerRenderer.prototype.renderFeature = function (feature, squaredTolerance, styles, builderGroup, opt_transform, opt_declutterBuilderGroup) {\n if (!styles) {\n return false;\n }\n var loading = false;\n if (Array.isArray(styles)) {\n for (var i = 0, ii = styles.length; i < ii; ++i) {\n loading =\n renderFeature(builderGroup, feature, styles[i], squaredTolerance, this.boundHandleStyleImageChange_, opt_transform, opt_declutterBuilderGroup) || loading;\n }\n }\n else {\n loading = renderFeature(builderGroup, feature, styles, squaredTolerance, this.boundHandleStyleImageChange_, opt_transform, opt_declutterBuilderGroup);\n }\n return loading;\n };\n return CanvasVectorLayerRenderer;\n}(CanvasLayerRenderer));\nexport default CanvasVectorLayerRenderer;\n//# sourceMappingURL=VectorLayer.js.map","/**\n * @module ol/render/canvas/hitdetect\n */\nimport CanvasImmediateRenderer from './Immediate.js';\nimport GeometryType from '../../geom/GeometryType.js';\nimport IconAnchorUnits from '../../style/IconAnchorUnits.js';\nimport { Icon } from '../../style.js';\nimport { createCanvasContext2D } from '../../dom.js';\nimport { intersects } from '../../extent.js';\nimport { numberSafeCompareFunction } from '../../array.js';\n/**\n * @param {import(\"../../size.js\").Size} size Canvas size in css pixels.\n * @param {Array<import(\"../../transform.js\").Transform>} transforms Transforms\n * for rendering features to all worlds of the viewport, from coordinates to css\n * pixels.\n * @param {Array<import(\"../../Feature.js\").FeatureLike>} features\n * Features to consider for hit detection.\n * @param {import(\"../../style/Style.js\").StyleFunction|undefined} styleFunction\n * Layer style function.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {ImageData} Hit detection image data.\n */\nexport function createHitDetectionImageData(size, transforms, features, styleFunction, extent, resolution, rotation) {\n var width = size[0] / 2;\n var height = size[1] / 2;\n var context = createCanvasContext2D(width, height);\n context.imageSmoothingEnabled = false;\n var canvas = context.canvas;\n var renderer = new CanvasImmediateRenderer(context, 0.5, extent, null, rotation);\n var featureCount = features.length;\n // Stretch hit detection index to use the whole available color range\n var indexFactor = Math.floor((256 * 256 * 256 - 1) / featureCount);\n var featuresByZIndex = {};\n for (var i = 1; i <= featureCount; ++i) {\n var feature = features[i - 1];\n var featureStyleFunction = feature.getStyleFunction() || styleFunction;\n if (!styleFunction) {\n continue;\n }\n var styles = featureStyleFunction(feature, resolution);\n if (!styles) {\n continue;\n }\n if (!Array.isArray(styles)) {\n styles = [styles];\n }\n var index = i * indexFactor;\n var color = '#' + ('000000' + index.toString(16)).slice(-6);\n for (var j = 0, jj = styles.length; j < jj; ++j) {\n var originalStyle = styles[j];\n var style = originalStyle.clone();\n var fill = style.getFill();\n if (fill) {\n fill.setColor(color);\n }\n var stroke = style.getStroke();\n if (stroke) {\n stroke.setColor(color);\n }\n style.setText(undefined);\n var image = originalStyle.getImage();\n if (image) {\n var imgSize = image.getImageSize();\n if (!imgSize) {\n continue;\n }\n var canvas_1 = document.createElement('canvas');\n canvas_1.width = imgSize[0];\n canvas_1.height = imgSize[1];\n var imgContext = canvas_1.getContext('2d', { alpha: false });\n imgContext.fillStyle = color;\n var img = imgContext.canvas;\n imgContext.fillRect(0, 0, img.width, img.height);\n var width_1 = imgSize ? imgSize[0] : img.width;\n var height_1 = imgSize ? imgSize[1] : img.height;\n var iconContext = createCanvasContext2D(width_1, height_1);\n iconContext.drawImage(img, 0, 0);\n style.setImage(new Icon({\n img: img,\n imgSize: imgSize,\n anchor: image.getAnchor(),\n anchorXUnits: IconAnchorUnits.PIXELS,\n anchorYUnits: IconAnchorUnits.PIXELS,\n offset: image.getOrigin(),\n size: image.getSize(),\n opacity: image.getOpacity(),\n scale: image.getScale(),\n rotation: image.getRotation(),\n rotateWithView: image.getRotateWithView(),\n }));\n }\n var zIndex = Number(style.getZIndex());\n var byGeometryType = featuresByZIndex[zIndex];\n if (!byGeometryType) {\n byGeometryType = {};\n featuresByZIndex[zIndex] = byGeometryType;\n byGeometryType[GeometryType.POLYGON] = [];\n byGeometryType[GeometryType.CIRCLE] = [];\n byGeometryType[GeometryType.LINE_STRING] = [];\n byGeometryType[GeometryType.POINT] = [];\n }\n var geometry = style.getGeometryFunction()(feature);\n if (geometry && intersects(extent, geometry.getExtent())) {\n byGeometryType[geometry.getType().replace('Multi', '')].push(geometry, style);\n }\n }\n }\n var zIndexKeys = Object.keys(featuresByZIndex)\n .map(Number)\n .sort(numberSafeCompareFunction);\n for (var i = 0, ii = zIndexKeys.length; i < ii; ++i) {\n var byGeometryType = featuresByZIndex[zIndexKeys[i]];\n for (var type in byGeometryType) {\n var geomAndStyle = byGeometryType[type];\n for (var j = 0, jj = geomAndStyle.length; j < jj; j += 2) {\n renderer.setStyle(geomAndStyle[j + 1]);\n for (var k = 0, kk = transforms.length; k < kk; ++k) {\n renderer.setTransform(transforms[k]);\n renderer.drawGeometry(geomAndStyle[j]);\n }\n }\n }\n }\n return context.getImageData(0, 0, canvas.width, canvas.height);\n}\n/**\n * @param {import(\"../../pixel\").Pixel} pixel Pixel coordinate on the hit\n * detection canvas in css pixels.\n * @param {Array<import(\"../../Feature\").FeatureLike>} features Features. Has to\n * match the `features` array that was passed to `createHitDetectionImageData()`.\n * @param {ImageData} imageData Hit detection image data generated by\n * `createHitDetectionImageData()`.\n * @return {Array<import(\"../../Feature\").FeatureLike>} features Features.\n */\nexport function hitDetect(pixel, features, imageData) {\n var resultFeatures = [];\n if (imageData) {\n var index = (Math.round(pixel[0] / 2) + Math.round(pixel[1] / 2) * imageData.width) *\n 4;\n var r = imageData.data[index];\n var g = imageData.data[index + 1];\n var b = imageData.data[index + 2];\n var i = b + 256 * (g + 256 * r);\n var indexFactor = Math.floor((256 * 256 * 256 - 1) / features.length);\n if (i && i % indexFactor === 0) {\n resultFeatures.push(features[i / indexFactor - 1]);\n }\n }\n return resultFeatures;\n}\n//# sourceMappingURL=hitdetect.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/Vector\n */\nimport BaseVectorLayer from './BaseVector.js';\nimport CanvasVectorLayerRenderer from '../renderer/canvas/VectorLayer.js';\n/**\n * @classdesc\n * Vector data that is rendered client-side.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @extends {BaseVectorLayer<import(\"../source/Vector.js\").default>}\n * @api\n */\nvar VectorLayer = /** @class */ (function (_super) {\n __extends(VectorLayer, _super);\n /**\n * @param {import(\"./BaseVector.js\").Options=} opt_options Options.\n */\n function VectorLayer(opt_options) {\n return _super.call(this, opt_options) || this;\n }\n /**\n * Create a renderer for this layer.\n * @return {import(\"../renderer/Layer.js\").default} A layer renderer.\n */\n VectorLayer.prototype.createRenderer = function () {\n return new CanvasVectorLayerRenderer(this);\n };\n return VectorLayer;\n}(BaseVectorLayer));\nexport default VectorLayer;\n//# sourceMappingURL=Vector.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/geom/Polygon\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport GeometryType from './GeometryType.js';\nimport LinearRing from './LinearRing.js';\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { arrayMaxSquaredDelta, assignClosestArrayPoint } from './flat/closest.js';\nimport { closestSquaredDistanceXY, getCenter } from '../extent.js';\nimport { deflateCoordinatesArray } from './flat/deflate.js';\nimport { extend } from '../array.js';\nimport { getInteriorPointOfArray } from './flat/interiorpoint.js';\nimport { inflateCoordinatesArray } from './flat/inflate.js';\nimport { intersectsLinearRingArray } from './flat/intersectsextent.js';\nimport { linearRingsAreOriented, orientLinearRings } from './flat/orient.js';\nimport { linearRings as linearRingsArea } from './flat/area.js';\nimport { linearRingsContainsXY } from './flat/contains.js';\nimport { modulo } from '../math.js';\nimport { quantizeArray } from './flat/simplify.js';\nimport { offset as sphereOffset } from '../sphere.js';\n/**\n * @classdesc\n * Polygon geometry.\n *\n * @api\n */\nvar Polygon = /** @class */ (function (_super) {\n __extends(Polygon, _super);\n /**\n * @param {!Array<Array<import(\"../coordinate.js\").Coordinate>>|!Array<number>} coordinates\n * Array of linear rings that define the polygon. The first linear ring of the\n * array defines the outer-boundary or surface of the polygon. Each subsequent\n * linear ring defines a hole in the surface of the polygon. A linear ring is\n * an array of vertices' coordinates where the first coordinate and the last are\n * equivalent. (For internal use, flat coordinates in combination with\n * `opt_layout` and `opt_ends` are also accepted.)\n * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n * @param {Array<number>=} opt_ends Ends (for internal use with flat coordinates).\n */\n function Polygon(coordinates, opt_layout, opt_ends) {\n var _this = _super.call(this) || this;\n /**\n * @type {Array<number>}\n * @private\n */\n _this.ends_ = [];\n /**\n * @private\n * @type {number}\n */\n _this.flatInteriorPointRevision_ = -1;\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n _this.flatInteriorPoint_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.maxDelta_ = -1;\n /**\n * @private\n * @type {number}\n */\n _this.maxDeltaRevision_ = -1;\n /**\n * @private\n * @type {number}\n */\n _this.orientedRevision_ = -1;\n /**\n * @private\n * @type {Array<number>}\n */\n _this.orientedFlatCoordinates_ = null;\n if (opt_layout !== undefined && opt_ends) {\n _this.setFlatCoordinates(opt_layout, \n /** @type {Array<number>} */ (coordinates));\n _this.ends_ = opt_ends;\n }\n else {\n _this.setCoordinates(\n /** @type {Array<Array<import(\"../coordinate.js\").Coordinate>>} */ (coordinates), opt_layout);\n }\n return _this;\n }\n /**\n * Append the passed linear ring to this polygon.\n * @param {LinearRing} linearRing Linear ring.\n * @api\n */\n Polygon.prototype.appendLinearRing = function (linearRing) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = linearRing.getFlatCoordinates().slice();\n }\n else {\n extend(this.flatCoordinates, linearRing.getFlatCoordinates());\n }\n this.ends_.push(this.flatCoordinates.length);\n this.changed();\n };\n /**\n * Make a complete copy of the geometry.\n * @return {!Polygon} Clone.\n * @api\n */\n Polygon.prototype.clone = function () {\n var polygon = new Polygon(this.flatCoordinates.slice(), this.layout, this.ends_.slice());\n polygon.applyProperties(this);\n return polygon;\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n Polygon.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(arrayMaxSquaredDelta(this.flatCoordinates, 0, this.ends_, this.stride, 0));\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestArrayPoint(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n Polygon.prototype.containsXY = function (x, y) {\n return linearRingsContainsXY(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y);\n };\n /**\n * Return the area of the polygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n Polygon.prototype.getArea = function () {\n return linearRingsArea(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride);\n };\n /**\n * Get the coordinate array for this geometry. This array has the structure\n * of a GeoJSON coordinate array for polygons.\n *\n * @param {boolean=} opt_right Orient coordinates according to the right-hand\n * rule (counter-clockwise for exterior and clockwise for interior rings).\n * If `false`, coordinates will be oriented according to the left-hand rule\n * (clockwise for exterior and counter-clockwise for interior rings).\n * By default, coordinate orientation will depend on how the geometry was\n * constructed.\n * @return {Array<Array<import(\"../coordinate.js\").Coordinate>>} Coordinates.\n * @api\n */\n Polygon.prototype.getCoordinates = function (opt_right) {\n var flatCoordinates;\n if (opt_right !== undefined) {\n flatCoordinates = this.getOrientedFlatCoordinates().slice();\n orientLinearRings(flatCoordinates, 0, this.ends_, this.stride, opt_right);\n }\n else {\n flatCoordinates = this.flatCoordinates;\n }\n return inflateCoordinatesArray(flatCoordinates, 0, this.ends_, this.stride);\n };\n /**\n * @return {Array<number>} Ends.\n */\n Polygon.prototype.getEnds = function () {\n return this.ends_;\n };\n /**\n * @return {Array<number>} Interior point.\n */\n Polygon.prototype.getFlatInteriorPoint = function () {\n if (this.flatInteriorPointRevision_ != this.getRevision()) {\n var flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoint_ = getInteriorPointOfArray(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, flatCenter, 0);\n this.flatInteriorPointRevision_ = this.getRevision();\n }\n return this.flatInteriorPoint_;\n };\n /**\n * Return an interior point of the polygon.\n * @return {Point} Interior point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n * @api\n */\n Polygon.prototype.getInteriorPoint = function () {\n return new Point(this.getFlatInteriorPoint(), GeometryLayout.XYM);\n };\n /**\n * Return the number of rings of the polygon, this includes the exterior\n * ring and any interior rings.\n *\n * @return {number} Number of rings.\n * @api\n */\n Polygon.prototype.getLinearRingCount = function () {\n return this.ends_.length;\n };\n /**\n * Return the Nth linear ring of the polygon geometry. Return `null` if the\n * given index is out of range.\n * The exterior linear ring is available at index `0` and the interior rings\n * at index `1` and beyond.\n *\n * @param {number} index Index.\n * @return {LinearRing} Linear ring.\n * @api\n */\n Polygon.prototype.getLinearRing = function (index) {\n if (index < 0 || this.ends_.length <= index) {\n return null;\n }\n return new LinearRing(this.flatCoordinates.slice(index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]), this.layout);\n };\n /**\n * Return the linear rings of the polygon.\n * @return {Array<LinearRing>} Linear rings.\n * @api\n */\n Polygon.prototype.getLinearRings = function () {\n var layout = this.layout;\n var flatCoordinates = this.flatCoordinates;\n var ends = this.ends_;\n var linearRings = [];\n var offset = 0;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n var linearRing = new LinearRing(flatCoordinates.slice(offset, end), layout);\n linearRings.push(linearRing);\n offset = end;\n }\n return linearRings;\n };\n /**\n * @return {Array<number>} Oriented flat coordinates.\n */\n Polygon.prototype.getOrientedFlatCoordinates = function () {\n if (this.orientedRevision_ != this.getRevision()) {\n var flatCoordinates = this.flatCoordinates;\n if (linearRingsAreOriented(flatCoordinates, 0, this.ends_, this.stride)) {\n this.orientedFlatCoordinates_ = flatCoordinates;\n }\n else {\n this.orientedFlatCoordinates_ = flatCoordinates.slice();\n this.orientedFlatCoordinates_.length = orientLinearRings(this.orientedFlatCoordinates_, 0, this.ends_, this.stride);\n }\n this.orientedRevision_ = this.getRevision();\n }\n return this.orientedFlatCoordinates_;\n };\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Polygon} Simplified Polygon.\n * @protected\n */\n Polygon.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n var simplifiedFlatCoordinates = [];\n var simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(this.flatCoordinates, 0, this.ends_, this.stride, Math.sqrt(squaredTolerance), simplifiedFlatCoordinates, 0, simplifiedEnds);\n return new Polygon(simplifiedFlatCoordinates, GeometryLayout.XY, simplifiedEnds);\n };\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n Polygon.prototype.getType = function () {\n return GeometryType.POLYGON;\n };\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n Polygon.prototype.intersectsExtent = function (extent) {\n return intersectsLinearRingArray(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, extent);\n };\n /**\n * Set the coordinates of the polygon.\n * @param {!Array<Array<import(\"../coordinate.js\").Coordinate>>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n * @api\n */\n Polygon.prototype.setCoordinates = function (coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 2);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n var ends = deflateCoordinatesArray(this.flatCoordinates, 0, coordinates, this.stride, this.ends_);\n this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n this.changed();\n };\n return Polygon;\n}(SimpleGeometry));\nexport default Polygon;\n/**\n * Create an approximation of a circle on the surface of a sphere.\n * @param {import(\"../coordinate.js\").Coordinate} center Center (`[lon, lat]` in degrees).\n * @param {number} radius The great-circle distance from the center to\n * the polygon vertices.\n * @param {number=} opt_n Optional number of vertices for the resulting\n * polygon. Default is `32`.\n * @param {number=} opt_sphereRadius Optional radius for the sphere (defaults to\n * the Earth's mean radius using the WGS84 ellipsoid).\n * @return {Polygon} The \"circular\" polygon.\n * @api\n */\nexport function circular(center, radius, opt_n, opt_sphereRadius) {\n var n = opt_n ? opt_n : 32;\n /** @type {Array<number>} */\n var flatCoordinates = [];\n for (var i = 0; i < n; ++i) {\n extend(flatCoordinates, sphereOffset(center, radius, (2 * Math.PI * i) / n, opt_sphereRadius));\n }\n flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);\n return new Polygon(flatCoordinates, GeometryLayout.XY, [\n flatCoordinates.length,\n ]);\n}\n/**\n * Create a polygon from an extent. The layout used is `XY`.\n * @param {import(\"../extent.js\").Extent} extent The extent.\n * @return {Polygon} The polygon.\n * @api\n */\nexport function fromExtent(extent) {\n var minX = extent[0];\n var minY = extent[1];\n var maxX = extent[2];\n var maxY = extent[3];\n var flatCoordinates = [\n minX,\n minY,\n minX,\n maxY,\n maxX,\n maxY,\n maxX,\n minY,\n minX,\n minY,\n ];\n return new Polygon(flatCoordinates, GeometryLayout.XY, [\n flatCoordinates.length,\n ]);\n}\n/**\n * Create a regular polygon from a circle.\n * @param {import(\"./Circle.js\").default} circle Circle geometry.\n * @param {number=} opt_sides Number of sides of the polygon. Default is 32.\n * @param {number=} opt_angle Start angle for the first vertex of the polygon in\n * counter-clockwise radians. 0 means East. Default is 0.\n * @return {Polygon} Polygon geometry.\n * @api\n */\nexport function fromCircle(circle, opt_sides, opt_angle) {\n var sides = opt_sides ? opt_sides : 32;\n var stride = circle.getStride();\n var layout = circle.getLayout();\n var center = circle.getCenter();\n var arrayLength = stride * (sides + 1);\n var flatCoordinates = new Array(arrayLength);\n for (var i = 0; i < arrayLength; i += stride) {\n flatCoordinates[i] = 0;\n flatCoordinates[i + 1] = 0;\n for (var j = 2; j < stride; j++) {\n flatCoordinates[i + j] = center[j];\n }\n }\n var ends = [flatCoordinates.length];\n var polygon = new Polygon(flatCoordinates, layout, ends);\n makeRegular(polygon, center, circle.getRadius(), opt_angle);\n return polygon;\n}\n/**\n * Modify the coordinates of a polygon to make it a regular polygon.\n * @param {Polygon} polygon Polygon geometry.\n * @param {import(\"../coordinate.js\").Coordinate} center Center of the regular polygon.\n * @param {number} radius Radius of the regular polygon.\n * @param {number=} opt_angle Start angle for the first vertex of the polygon in\n * counter-clockwise radians. 0 means East. Default is 0.\n */\nexport function makeRegular(polygon, center, radius, opt_angle) {\n var flatCoordinates = polygon.getFlatCoordinates();\n var stride = polygon.getStride();\n var sides = flatCoordinates.length / stride - 1;\n var startAngle = opt_angle ? opt_angle : 0;\n for (var i = 0; i <= sides; ++i) {\n var offset = i * stride;\n var angle = startAngle + (modulo(i, sides) * 2 * Math.PI) / sides;\n flatCoordinates[offset] = center[0] + radius * Math.cos(angle);\n flatCoordinates[offset + 1] = center[1] + radius * Math.sin(angle);\n }\n polygon.changed();\n}\n//# sourceMappingURL=Polygon.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/geom/Point\n */\nimport GeometryType from './GeometryType.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { containsXY, createOrUpdateFromCoordinate } from '../extent.js';\nimport { deflateCoordinate } from './flat/deflate.js';\nimport { squaredDistance as squaredDx } from '../math.js';\n/**\n * @classdesc\n * Point geometry.\n *\n * @api\n */\nvar Point = /** @class */ (function (_super) {\n __extends(Point, _super);\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n */\n function Point(coordinates, opt_layout) {\n var _this = _super.call(this) || this;\n _this.setCoordinates(coordinates, opt_layout);\n return _this;\n }\n /**\n * Make a complete copy of the geometry.\n * @return {!Point} Clone.\n * @api\n */\n Point.prototype.clone = function () {\n var point = new Point(this.flatCoordinates.slice(), this.layout);\n point.applyProperties(this);\n return point;\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n Point.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n var flatCoordinates = this.flatCoordinates;\n var squaredDistance = squaredDx(x, y, flatCoordinates[0], flatCoordinates[1]);\n if (squaredDistance < minSquaredDistance) {\n var stride = this.stride;\n for (var i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n }\n else {\n return minSquaredDistance;\n }\n };\n /**\n * Return the coordinate of the point.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinates.\n * @api\n */\n Point.prototype.getCoordinates = function () {\n return !this.flatCoordinates ? [] : this.flatCoordinates.slice();\n };\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n Point.prototype.computeExtent = function (extent) {\n return createOrUpdateFromCoordinate(this.flatCoordinates, extent);\n };\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n Point.prototype.getType = function () {\n return GeometryType.POINT;\n };\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n Point.prototype.intersectsExtent = function (extent) {\n return containsXY(extent, this.flatCoordinates[0], this.flatCoordinates[1]);\n };\n /**\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n * @api\n */\n Point.prototype.setCoordinates = function (coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 0);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinate(this.flatCoordinates, 0, coordinates, this.stride);\n this.changed();\n };\n return Point;\n}(SimpleGeometry));\nexport default Point;\n//# sourceMappingURL=Point.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = toDate;\n\nvar _index = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nfunction toDate(argument) {\n (0, _index.default)(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}\n\nmodule.exports = exports.default;","/**\n * @module ol/featureloader\n */\nimport FormatType from './format/FormatType.js';\nimport { VOID } from './functions.js';\n/**\n *\n * @type {boolean}\n * @private\n */\nvar withCredentials = false;\n/**\n * {@link module:ol/source/Vector} sources use a function of this type to\n * load features.\n *\n * This function takes an {@link module:ol/extent~Extent} representing the area to be loaded,\n * a `{number}` representing the resolution (map units per pixel), an\n * {@link module:ol/proj/Projection} for the projection and success and failure callbacks as\n * arguments. `this` within the function is bound to the\n * {@link module:ol/source/Vector} it's called from.\n *\n * The function is responsible for loading the features and adding them to the\n * source.\n * @typedef {function(this:(import(\"./source/Vector\").default|import(\"./VectorTile.js\").default),\n * import(\"./extent.js\").Extent,\n * number,\n * import(\"./proj/Projection.js\").default,\n * function(Array<import(\"./Feature.js\").default>): void=,\n * function(): void=): void} FeatureLoader\n * @api\n */\n/**\n * {@link module:ol/source/Vector} sources use a function of this type to\n * get the url to load features from.\n *\n * This function takes an {@link module:ol/extent~Extent} representing the area\n * to be loaded, a `{number}` representing the resolution (map units per pixel)\n * and an {@link module:ol/proj/Projection} for the projection as\n * arguments and returns a `{string}` representing the URL.\n * @typedef {function(import(\"./extent.js\").Extent, number, import(\"./proj/Projection.js\").default): string} FeatureUrlFunction\n * @api\n */\n/**\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array<import(\"./Feature.js\").default>, import(\"./proj/Projection.js\").default): void} success Success\n * Function called with the loaded features and optionally with the data projection.\n * @param {function(): void} failure Failure\n * Function called when loading failed.\n */\nexport function loadFeaturesXhr(url, format, extent, resolution, projection, success, failure) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', typeof url === 'function' ? url(extent, resolution, projection) : url, true);\n if (format.getType() == FormatType.ARRAY_BUFFER) {\n xhr.responseType = 'arraybuffer';\n }\n xhr.withCredentials = withCredentials;\n /**\n * @param {Event} event Event.\n * @private\n */\n xhr.onload = function (event) {\n // status will be 0 for file:// urls\n if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {\n var type = format.getType();\n /** @type {Document|Node|Object|string|undefined} */\n var source = void 0;\n if (type == FormatType.JSON || type == FormatType.TEXT) {\n source = xhr.responseText;\n }\n else if (type == FormatType.XML) {\n source = xhr.responseXML;\n if (!source) {\n source = new DOMParser().parseFromString(xhr.responseText, 'application/xml');\n }\n }\n else if (type == FormatType.ARRAY_BUFFER) {\n source = /** @type {ArrayBuffer} */ (xhr.response);\n }\n if (source) {\n success(\n /** @type {Array<import(\"./Feature.js\").default>} */\n (format.readFeatures(source, {\n extent: extent,\n featureProjection: projection,\n })), format.readProjection(source));\n }\n else {\n failure();\n }\n }\n else {\n failure();\n }\n };\n /**\n * @private\n */\n xhr.onerror = failure;\n xhr.send();\n}\n/**\n * Create an XHR feature loader for a `url` and `format`. The feature loader\n * loads features (with XHR), parses the features, and adds them to the\n * vector source.\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @return {FeatureLoader} The feature loader.\n * @api\n */\nexport function xhr(url, format) {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(): void=} success Success\n * Function called when loading succeeded.\n * @param {function(): void=} failure Failure\n * Function called when loading failed.\n * @this {import(\"./source/Vector\").default}\n */\n return function (extent, resolution, projection, success, failure) {\n var source = /** @type {import(\"./source/Vector\").default} */ (this);\n loadFeaturesXhr(url, format, extent, resolution, projection, \n /**\n * @param {Array<import(\"./Feature.js\").default>} features The loaded features.\n * @param {import(\"./proj/Projection.js\").default} dataProjection Data\n * projection.\n */\n function (features, dataProjection) {\n if (success !== undefined) {\n success(features);\n }\n source.addFeatures(features);\n }, \n /* FIXME handle error */ failure ? failure : VOID);\n };\n}\n/**\n * Setter for the withCredentials configuration for the XHR.\n *\n * @param {boolean} xhrWithCredentials The value of withCredentials to set.\n * Compare https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/\n * @api\n */\nexport function setWithCredentials(xhrWithCredentials) {\n withCredentials = xhrWithCredentials;\n}\n//# sourceMappingURL=featureloader.js.map","/**\n * @module ol/source/Vector\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RBush from '../structs/RBush.js';\nimport Source from './Source.js';\nimport SourceState from './State.js';\nimport VectorEventType from './VectorEventType.js';\nimport { TRUE, VOID } from '../functions.js';\nimport { all as allStrategy } from '../loadingstrategy.js';\nimport { assert } from '../asserts.js';\nimport { containsExtent, equals } from '../extent.js';\nimport { extend } from '../array.js';\nimport { getUid } from '../util.js';\nimport { getValues, isEmpty } from '../obj.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { xhr } from '../featureloader.js';\n/**\n * A function that takes an {@link module:ol/extent~Extent} and a resolution as arguments, and\n * returns an array of {@link module:ol/extent~Extent} with the extents to load. Usually this\n * is one of the standard {@link module:ol/loadingstrategy} strategies.\n *\n * @typedef {function(import(\"../extent.js\").Extent, number): Array<import(\"../extent.js\").Extent>} LoadingStrategy\n * @api\n */\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Vector} instances are instances of this\n * type.\n * @template {import(\"../geom/Geometry.js\").default} Geometry\n */\nvar VectorSourceEvent = /** @class */ (function (_super) {\n __extends(VectorSourceEvent, _super);\n /**\n * @param {string} type Type.\n * @param {import(\"../Feature.js\").default<Geometry>=} opt_feature Feature.\n * @param {Array<import(\"../Feature.js\").default<Geometry>>=} opt_features Features.\n */\n function VectorSourceEvent(type, opt_feature, opt_features) {\n var _this = _super.call(this, type) || this;\n /**\n * The added or removed feature for the `ADDFEATURE` and `REMOVEFEATURE` events, `undefined` otherwise.\n * @type {import(\"../Feature.js\").default<Geometry>|undefined}\n * @api\n */\n _this.feature = opt_feature;\n /**\n * The loaded features for the `FEATURESLOADED` event, `undefined` otherwise.\n * @type {Array<import(\"../Feature.js\").default<Geometry>>|undefined}\n * @api\n */\n _this.features = opt_features;\n return _this;\n }\n return VectorSourceEvent;\n}(Event));\nexport { VectorSourceEvent };\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {Array<import(\"../Feature.js\").default>|Collection<import(\"../Feature.js\").default>} [features]\n * Features. If provided as {@link module:ol/Collection}, the features in the source\n * and the collection will stay in sync.\n * @property {import(\"../format/Feature.js\").default} [format] The feature format used by the XHR\n * feature loader when `url` is set. Required if `url` is set, otherwise ignored.\n * @property {import(\"../featureloader.js\").FeatureLoader} [loader]\n * The loader function used to load features, from a remote source for example.\n * If this is not set and `url` is set, the source will create and use an XHR\n * feature loader.\n *\n * Example:\n *\n * ```js\n * import {Vector} from 'ol/source';\n * import {GeoJSON} from 'ol/format';\n * import {bbox} from 'ol/loadingstrategy';\n *\n * var vectorSource = new Vector({\n * format: new GeoJSON(),\n * loader: function(extent, resolution, projection) {\n * var proj = projection.getCode();\n * var url = 'https://ahocevar.com/geoserver/wfs?service=WFS&' +\n * 'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +\n * 'outputFormat=application/json&srsname=' + proj + '&' +\n * 'bbox=' + extent.join(',') + ',' + proj;\n * var xhr = new XMLHttpRequest();\n * xhr.open('GET', url);\n * var onError = function() {\n * vectorSource.removeLoadedExtent(extent);\n * }\n * xhr.onerror = onError;\n * xhr.onload = function() {\n * if (xhr.status == 200) {\n * vectorSource.addFeatures(\n * vectorSource.getFormat().readFeatures(xhr.responseText));\n * } else {\n * onError();\n * }\n * }\n * xhr.send();\n * },\n * strategy: bbox\n * });\n * ```\n * @property {boolean} [overlaps=true] This source may have overlapping geometries.\n * Setting this to `false` (e.g. for sources with polygons that represent administrative\n * boundaries or TopoJSON sources) allows the renderer to optimise fill and\n * stroke operations.\n * @property {LoadingStrategy} [strategy] The loading strategy to use.\n * By default an {@link module:ol/loadingstrategy~all}\n * strategy is used, a one-off strategy which loads all features at once.\n * @property {string|import(\"../featureloader.js\").FeatureUrlFunction} [url]\n * Setting this option instructs the source to load features using an XHR loader\n * (see {@link module:ol/featureloader~xhr}). Use a `string` and an\n * {@link module:ol/loadingstrategy~all} for a one-off download of all features from\n * the given URL. Use a {@link module:ol/featureloader~FeatureUrlFunction} to generate the url with\n * other loading strategies.\n * Requires `format` to be set as well.\n * When default XHR feature loader is provided, the features will\n * be transformed from the data projection to the view projection\n * during parsing. If your remote data source does not advertise its projection\n * properly, this transformation will be incorrect. For some formats, the\n * default projection (usually EPSG:4326) can be overridden by setting the\n * dataProjection constructor option on the format.\n * Note that if a source contains non-feature data, such as a GeoJSON geometry\n * or a KML NetworkLink, these will be ignored. Use a custom loader to load these.\n * @property {boolean} [useSpatialIndex=true]\n * By default, an RTree is used as spatial index. When features are removed and\n * added frequently, and the total number of features is low, setting this to\n * `false` may improve performance.\n *\n * Note that\n * {@link module:ol/source/Vector~VectorSource#getFeaturesInExtent},\n * {@link module:ol/source/Vector~VectorSource#getClosestFeatureToCoordinate} and\n * {@link module:ol/source/Vector~VectorSource#getExtent} cannot be used when `useSpatialIndex` is\n * set to `false`, and {@link module:ol/source/Vector~VectorSource#forEachFeatureInExtent} will loop\n * through all features.\n *\n * When set to `false`, the features will be maintained in an\n * {@link module:ol/Collection}, which can be retrieved through\n * {@link module:ol/source/Vector~VectorSource#getFeaturesCollection}.\n * @property {boolean} [wrapX=true] Wrap the world horizontally. For vector editing across the\n * -180° and 180° meridians to work properly, this should be set to `false`. The\n * resulting geometry coordinates will then exceed the world bounds.\n */\n/**\n * @classdesc\n * Provides a source of features for vector layers. Vector features provided\n * by this source are suitable for editing. See {@link module:ol/source/VectorTile~VectorTile} for\n * vector data that is optimized for rendering.\n *\n * @fires VectorSourceEvent\n * @api\n * @template {import(\"../geom/Geometry.js\").default} Geometry\n */\nvar VectorSource = /** @class */ (function (_super) {\n __extends(VectorSource, _super);\n /**\n * @param {Options=} opt_options Vector source options.\n */\n function VectorSource(opt_options) {\n var _this = this;\n var options = opt_options || {};\n _this = _super.call(this, {\n attributions: options.attributions,\n projection: undefined,\n state: SourceState.READY,\n wrapX: options.wrapX !== undefined ? options.wrapX : true,\n }) || this;\n /**\n * @private\n * @type {import(\"../featureloader.js\").FeatureLoader}\n */\n _this.loader_ = VOID;\n /**\n * @private\n * @type {import(\"../format/Feature.js\").default|undefined}\n */\n _this.format_ = options.format;\n /**\n * @private\n * @type {boolean}\n */\n _this.overlaps_ = options.overlaps === undefined ? true : options.overlaps;\n /**\n * @private\n * @type {string|import(\"../featureloader.js\").FeatureUrlFunction|undefined}\n */\n _this.url_ = options.url;\n if (options.loader !== undefined) {\n _this.loader_ = options.loader;\n }\n else if (_this.url_ !== undefined) {\n assert(_this.format_, 7); // `format` must be set when `url` is set\n // create a XHR feature loader for \"url\" and \"format\"\n _this.loader_ = xhr(_this.url_, \n /** @type {import(\"../format/Feature.js\").default} */ (_this.format_));\n }\n /**\n * @private\n * @type {LoadingStrategy}\n */\n _this.strategy_ =\n options.strategy !== undefined ? options.strategy : allStrategy;\n var useSpatialIndex = options.useSpatialIndex !== undefined ? options.useSpatialIndex : true;\n /**\n * @private\n * @type {RBush<import(\"../Feature.js\").default<Geometry>>}\n */\n _this.featuresRtree_ = useSpatialIndex ? new RBush() : null;\n /**\n * @private\n * @type {RBush<{extent: import(\"../extent.js\").Extent}>}\n */\n _this.loadedExtentsRtree_ = new RBush();\n /**\n * @private\n * @type {!Object<string, import(\"../Feature.js\").default<Geometry>>}\n */\n _this.nullGeometryFeatures_ = {};\n /**\n * A lookup of features by id (the return from feature.getId()).\n * @private\n * @type {!Object<string, import(\"../Feature.js\").default<Geometry>>}\n */\n _this.idIndex_ = {};\n /**\n * A lookup of features by uid (using getUid(feature)).\n * @private\n * @type {!Object<string, import(\"../Feature.js\").default<Geometry>>}\n */\n _this.uidIndex_ = {};\n /**\n * @private\n * @type {Object<string, Array<import(\"../events.js\").EventsKey>>}\n */\n _this.featureChangeKeys_ = {};\n /**\n * @private\n * @type {Collection<import(\"../Feature.js\").default<Geometry>>}\n */\n _this.featuresCollection_ = null;\n var collection, features;\n if (Array.isArray(options.features)) {\n features = options.features;\n }\n else if (options.features) {\n collection = options.features;\n features = collection.getArray();\n }\n if (!useSpatialIndex && collection === undefined) {\n collection = new Collection(features);\n }\n if (features !== undefined) {\n _this.addFeaturesInternal(features);\n }\n if (collection !== undefined) {\n _this.bindFeaturesCollection_(collection);\n }\n return _this;\n }\n /**\n * Add a single feature to the source. If you want to add a batch of features\n * at once, call {@link module:ol/source/Vector~VectorSource#addFeatures #addFeatures()}\n * instead. A feature will not be added to the source if feature with\n * the same id is already there. The reason for this behavior is to avoid\n * feature duplication when using bbox or tile loading strategies.\n * Note: this also applies if an {@link module:ol/Collection} is used for features,\n * meaning that if a feature with a duplicate id is added in the collection, it will\n * be removed from it right away.\n * @param {import(\"../Feature.js\").default<Geometry>} feature Feature to add.\n * @api\n */\n VectorSource.prototype.addFeature = function (feature) {\n this.addFeatureInternal(feature);\n this.changed();\n };\n /**\n * Add a feature without firing a `change` event.\n * @param {import(\"../Feature.js\").default<Geometry>} feature Feature.\n * @protected\n */\n VectorSource.prototype.addFeatureInternal = function (feature) {\n var featureKey = getUid(feature);\n if (!this.addToIndex_(featureKey, feature)) {\n if (this.featuresCollection_) {\n this.featuresCollection_.remove(feature);\n }\n return;\n }\n this.setupChangeEvents_(featureKey, feature);\n var geometry = feature.getGeometry();\n if (geometry) {\n var extent = geometry.getExtent();\n if (this.featuresRtree_) {\n this.featuresRtree_.insert(extent, feature);\n }\n }\n else {\n this.nullGeometryFeatures_[featureKey] = feature;\n }\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.ADDFEATURE, feature));\n };\n /**\n * @param {string} featureKey Unique identifier for the feature.\n * @param {import(\"../Feature.js\").default<Geometry>} feature The feature.\n * @private\n */\n VectorSource.prototype.setupChangeEvents_ = function (featureKey, feature) {\n this.featureChangeKeys_[featureKey] = [\n listen(feature, EventType.CHANGE, this.handleFeatureChange_, this),\n listen(feature, ObjectEventType.PROPERTYCHANGE, this.handleFeatureChange_, this),\n ];\n };\n /**\n * @param {string} featureKey Unique identifier for the feature.\n * @param {import(\"../Feature.js\").default<Geometry>} feature The feature.\n * @return {boolean} The feature is \"valid\", in the sense that it is also a\n * candidate for insertion into the Rtree.\n * @private\n */\n VectorSource.prototype.addToIndex_ = function (featureKey, feature) {\n var valid = true;\n var id = feature.getId();\n if (id !== undefined) {\n if (!(id.toString() in this.idIndex_)) {\n this.idIndex_[id.toString()] = feature;\n }\n else {\n valid = false;\n }\n }\n if (valid) {\n assert(!(featureKey in this.uidIndex_), 30); // The passed `feature` was already added to the source\n this.uidIndex_[featureKey] = feature;\n }\n return valid;\n };\n /**\n * Add a batch of features to the source.\n * @param {Array<import(\"../Feature.js\").default<Geometry>>} features Features to add.\n * @api\n */\n VectorSource.prototype.addFeatures = function (features) {\n this.addFeaturesInternal(features);\n this.changed();\n };\n /**\n * Add features without firing a `change` event.\n * @param {Array<import(\"../Feature.js\").default<Geometry>>} features Features.\n * @protected\n */\n VectorSource.prototype.addFeaturesInternal = function (features) {\n var extents = [];\n var newFeatures = [];\n var geometryFeatures = [];\n for (var i = 0, length_1 = features.length; i < length_1; i++) {\n var feature = features[i];\n var featureKey = getUid(feature);\n if (this.addToIndex_(featureKey, feature)) {\n newFeatures.push(feature);\n }\n }\n for (var i = 0, length_2 = newFeatures.length; i < length_2; i++) {\n var feature = newFeatures[i];\n var featureKey = getUid(feature);\n this.setupChangeEvents_(featureKey, feature);\n var geometry = feature.getGeometry();\n if (geometry) {\n var extent = geometry.getExtent();\n extents.push(extent);\n geometryFeatures.push(feature);\n }\n else {\n this.nullGeometryFeatures_[featureKey] = feature;\n }\n }\n if (this.featuresRtree_) {\n this.featuresRtree_.load(extents, geometryFeatures);\n }\n for (var i = 0, length_3 = newFeatures.length; i < length_3; i++) {\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.ADDFEATURE, newFeatures[i]));\n }\n };\n /**\n * @param {!Collection<import(\"../Feature.js\").default<Geometry>>} collection Collection.\n * @private\n */\n VectorSource.prototype.bindFeaturesCollection_ = function (collection) {\n var modifyingCollection = false;\n this.addEventListener(VectorEventType.ADDFEATURE, \n /**\n * @param {VectorSourceEvent<Geometry>} evt The vector source event\n */\n function (evt) {\n if (!modifyingCollection) {\n modifyingCollection = true;\n collection.push(evt.feature);\n modifyingCollection = false;\n }\n });\n this.addEventListener(VectorEventType.REMOVEFEATURE, \n /**\n * @param {VectorSourceEvent<Geometry>} evt The vector source event\n */\n function (evt) {\n if (!modifyingCollection) {\n modifyingCollection = true;\n collection.remove(evt.feature);\n modifyingCollection = false;\n }\n });\n collection.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"../Collection.js\").CollectionEvent} evt The collection event\n */\n function (evt) {\n if (!modifyingCollection) {\n modifyingCollection = true;\n this.addFeature(\n /** @type {import(\"../Feature.js\").default<Geometry>} */ (evt.element));\n modifyingCollection = false;\n }\n }.bind(this));\n collection.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"../Collection.js\").CollectionEvent} evt The collection event\n */\n function (evt) {\n if (!modifyingCollection) {\n modifyingCollection = true;\n this.removeFeature(\n /** @type {import(\"../Feature.js\").default<Geometry>} */ (evt.element));\n modifyingCollection = false;\n }\n }.bind(this));\n this.featuresCollection_ = collection;\n };\n /**\n * Remove all features from the source.\n * @param {boolean=} opt_fast Skip dispatching of {@link module:ol/source/Vector.VectorSourceEvent#removefeature} events.\n * @api\n */\n VectorSource.prototype.clear = function (opt_fast) {\n if (opt_fast) {\n for (var featureId in this.featureChangeKeys_) {\n var keys = this.featureChangeKeys_[featureId];\n keys.forEach(unlistenByKey);\n }\n if (!this.featuresCollection_) {\n this.featureChangeKeys_ = {};\n this.idIndex_ = {};\n this.uidIndex_ = {};\n }\n }\n else {\n if (this.featuresRtree_) {\n this.featuresRtree_.forEach(this.removeFeatureInternal.bind(this));\n for (var id in this.nullGeometryFeatures_) {\n this.removeFeatureInternal(this.nullGeometryFeatures_[id]);\n }\n }\n }\n if (this.featuresCollection_) {\n this.featuresCollection_.clear();\n }\n if (this.featuresRtree_) {\n this.featuresRtree_.clear();\n }\n this.nullGeometryFeatures_ = {};\n var clearEvent = new VectorSourceEvent(VectorEventType.CLEAR);\n this.dispatchEvent(clearEvent);\n this.changed();\n };\n /**\n * Iterate through all features on the source, calling the provided callback\n * with each one. If the callback returns any \"truthy\" value, iteration will\n * stop and the function will return the same value.\n * Note: this function only iterate through the feature that have a defined geometry.\n *\n * @param {function(import(\"../Feature.js\").default<Geometry>): T} callback Called with each feature\n * on the source. Return a truthy value to stop iteration.\n * @return {T|undefined} The return value from the last call to the callback.\n * @template T\n * @api\n */\n VectorSource.prototype.forEachFeature = function (callback) {\n if (this.featuresRtree_) {\n return this.featuresRtree_.forEach(callback);\n }\n else if (this.featuresCollection_) {\n this.featuresCollection_.forEach(callback);\n }\n };\n /**\n * Iterate through all features whose geometries contain the provided\n * coordinate, calling the callback with each feature. If the callback returns\n * a \"truthy\" value, iteration will stop and the function will return the same\n * value.\n *\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {function(import(\"../Feature.js\").default<Geometry>): T} callback Called with each feature\n * whose goemetry contains the provided coordinate.\n * @return {T|undefined} The return value from the last call to the callback.\n * @template T\n */\n VectorSource.prototype.forEachFeatureAtCoordinateDirect = function (coordinate, callback) {\n var extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]];\n return this.forEachFeatureInExtent(extent, function (feature) {\n var geometry = feature.getGeometry();\n if (geometry.intersectsCoordinate(coordinate)) {\n return callback(feature);\n }\n else {\n return undefined;\n }\n });\n };\n /**\n * Iterate through all features whose bounding box intersects the provided\n * extent (note that the feature's geometry may not intersect the extent),\n * calling the callback with each feature. If the callback returns a \"truthy\"\n * value, iteration will stop and the function will return the same value.\n *\n * If you are interested in features whose geometry intersects an extent, call\n * the {@link module:ol/source/Vector~VectorSource#forEachFeatureIntersectingExtent #forEachFeatureIntersectingExtent()} method instead.\n *\n * When `useSpatialIndex` is set to false, this method will loop through all\n * features, equivalent to {@link module:ol/source/Vector~VectorSource#forEachFeature #forEachFeature()}.\n *\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {function(import(\"../Feature.js\").default<Geometry>): T} callback Called with each feature\n * whose bounding box intersects the provided extent.\n * @return {T|undefined} The return value from the last call to the callback.\n * @template T\n * @api\n */\n VectorSource.prototype.forEachFeatureInExtent = function (extent, callback) {\n if (this.featuresRtree_) {\n return this.featuresRtree_.forEachInExtent(extent, callback);\n }\n else if (this.featuresCollection_) {\n this.featuresCollection_.forEach(callback);\n }\n };\n /**\n * Iterate through all features whose geometry intersects the provided extent,\n * calling the callback with each feature. If the callback returns a \"truthy\"\n * value, iteration will stop and the function will return the same value.\n *\n * If you only want to test for bounding box intersection, call the\n * {@link module:ol/source/Vector~VectorSource#forEachFeatureInExtent #forEachFeatureInExtent()} method instead.\n *\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {function(import(\"../Feature.js\").default<Geometry>): T} callback Called with each feature\n * whose geometry intersects the provided extent.\n * @return {T|undefined} The return value from the last call to the callback.\n * @template T\n * @api\n */\n VectorSource.prototype.forEachFeatureIntersectingExtent = function (extent, callback) {\n return this.forEachFeatureInExtent(extent, \n /**\n * @param {import(\"../Feature.js\").default<Geometry>} feature Feature.\n * @return {T|undefined} The return value from the last call to the callback.\n */\n function (feature) {\n var geometry = feature.getGeometry();\n if (geometry.intersectsExtent(extent)) {\n var result = callback(feature);\n if (result) {\n return result;\n }\n }\n });\n };\n /**\n * Get the features collection associated with this source. Will be `null`\n * unless the source was configured with `useSpatialIndex` set to `false`, or\n * with an {@link module:ol/Collection} as `features`.\n * @return {Collection<import(\"../Feature.js\").default<Geometry>>} The collection of features.\n * @api\n */\n VectorSource.prototype.getFeaturesCollection = function () {\n return this.featuresCollection_;\n };\n /**\n * Get all features on the source in random order.\n * @return {Array<import(\"../Feature.js\").default<Geometry>>} Features.\n * @api\n */\n VectorSource.prototype.getFeatures = function () {\n var features;\n if (this.featuresCollection_) {\n features = this.featuresCollection_.getArray();\n }\n else if (this.featuresRtree_) {\n features = this.featuresRtree_.getAll();\n if (!isEmpty(this.nullGeometryFeatures_)) {\n extend(features, getValues(this.nullGeometryFeatures_));\n }\n }\n return /** @type {Array<import(\"../Feature.js\").default<Geometry>>} */ (features);\n };\n /**\n * Get all features whose geometry intersects the provided coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {Array<import(\"../Feature.js\").default<Geometry>>} Features.\n * @api\n */\n VectorSource.prototype.getFeaturesAtCoordinate = function (coordinate) {\n var features = [];\n this.forEachFeatureAtCoordinateDirect(coordinate, function (feature) {\n features.push(feature);\n });\n return features;\n };\n /**\n * Get all features whose bounding box intersects the provided extent. Note that this returns an array of\n * all features intersecting the given extent in random order (so it may include\n * features whose geometries do not intersect the extent).\n *\n * When `useSpatialIndex` is set to false, this method will return all\n * features.\n *\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {Array<import(\"../Feature.js\").default<Geometry>>} Features.\n * @api\n */\n VectorSource.prototype.getFeaturesInExtent = function (extent) {\n if (this.featuresRtree_) {\n return this.featuresRtree_.getInExtent(extent);\n }\n else if (this.featuresCollection_) {\n return this.featuresCollection_.getArray();\n }\n else {\n return [];\n }\n };\n /**\n * Get the closest feature to the provided coordinate.\n *\n * This method is not available when the source is configured with\n * `useSpatialIndex` set to `false`.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {function(import(\"../Feature.js\").default<Geometry>):boolean=} opt_filter Feature filter function.\n * The filter function will receive one argument, the {@link module:ol/Feature feature}\n * and it should return a boolean value. By default, no filtering is made.\n * @return {import(\"../Feature.js\").default<Geometry>} Closest feature.\n * @api\n */\n VectorSource.prototype.getClosestFeatureToCoordinate = function (coordinate, opt_filter) {\n // Find the closest feature using branch and bound. We start searching an\n // infinite extent, and find the distance from the first feature found. This\n // becomes the closest feature. We then compute a smaller extent which any\n // closer feature must intersect. We continue searching with this smaller\n // extent, trying to find a closer feature. Every time we find a closer\n // feature, we update the extent being searched so that any even closer\n // feature must intersect it. We continue until we run out of features.\n var x = coordinate[0];\n var y = coordinate[1];\n var closestFeature = null;\n var closestPoint = [NaN, NaN];\n var minSquaredDistance = Infinity;\n var extent = [-Infinity, -Infinity, Infinity, Infinity];\n var filter = opt_filter ? opt_filter : TRUE;\n this.featuresRtree_.forEachInExtent(extent, \n /**\n * @param {import(\"../Feature.js\").default<Geometry>} feature Feature.\n */\n function (feature) {\n if (filter(feature)) {\n var geometry = feature.getGeometry();\n var previousMinSquaredDistance = minSquaredDistance;\n minSquaredDistance = geometry.closestPointXY(x, y, closestPoint, minSquaredDistance);\n if (minSquaredDistance < previousMinSquaredDistance) {\n closestFeature = feature;\n // This is sneaky. Reduce the extent that it is currently being\n // searched while the R-Tree traversal using this same extent object\n // is still in progress. This is safe because the new extent is\n // strictly contained by the old extent.\n var minDistance = Math.sqrt(minSquaredDistance);\n extent[0] = x - minDistance;\n extent[1] = y - minDistance;\n extent[2] = x + minDistance;\n extent[3] = y + minDistance;\n }\n }\n });\n return closestFeature;\n };\n /**\n * Get the extent of the features currently in the source.\n *\n * This method is not available when the source is configured with\n * `useSpatialIndex` set to `false`.\n * @param {import(\"../extent.js\").Extent=} opt_extent Destination extent. If provided, no new extent\n * will be created. Instead, that extent's coordinates will be overwritten.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n VectorSource.prototype.getExtent = function (opt_extent) {\n return this.featuresRtree_.getExtent(opt_extent);\n };\n /**\n * Get a feature by its identifier (the value returned by feature.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `source.getFeatureById(2)` will return a feature with id `'2'` or `2`.\n *\n * @param {string|number} id Feature identifier.\n * @return {import(\"../Feature.js\").default<Geometry>} The feature (or `null` if not found).\n * @api\n */\n VectorSource.prototype.getFeatureById = function (id) {\n var feature = this.idIndex_[id.toString()];\n return feature !== undefined ? feature : null;\n };\n /**\n * Get a feature by its internal unique identifier (using `getUid`).\n *\n * @param {string} uid Feature identifier.\n * @return {import(\"../Feature.js\").default<Geometry>} The feature (or `null` if not found).\n */\n VectorSource.prototype.getFeatureByUid = function (uid) {\n var feature = this.uidIndex_[uid];\n return feature !== undefined ? feature : null;\n };\n /**\n * Get the format associated with this source.\n *\n * @return {import(\"../format/Feature.js\").default|undefined} The feature format.\n * @api\n */\n VectorSource.prototype.getFormat = function () {\n return this.format_;\n };\n /**\n * @return {boolean} The source can have overlapping geometries.\n */\n VectorSource.prototype.getOverlaps = function () {\n return this.overlaps_;\n };\n /**\n * Get the url associated with this source.\n *\n * @return {string|import(\"../featureloader.js\").FeatureUrlFunction|undefined} The url.\n * @api\n */\n VectorSource.prototype.getUrl = function () {\n return this.url_;\n };\n /**\n * @param {Event} event Event.\n * @private\n */\n VectorSource.prototype.handleFeatureChange_ = function (event) {\n var feature = /** @type {import(\"../Feature.js\").default<Geometry>} */ (event.target);\n var featureKey = getUid(feature);\n var geometry = feature.getGeometry();\n if (!geometry) {\n if (!(featureKey in this.nullGeometryFeatures_)) {\n if (this.featuresRtree_) {\n this.featuresRtree_.remove(feature);\n }\n this.nullGeometryFeatures_[featureKey] = feature;\n }\n }\n else {\n var extent = geometry.getExtent();\n if (featureKey in this.nullGeometryFeatures_) {\n delete this.nullGeometryFeatures_[featureKey];\n if (this.featuresRtree_) {\n this.featuresRtree_.insert(extent, feature);\n }\n }\n else {\n if (this.featuresRtree_) {\n this.featuresRtree_.update(extent, feature);\n }\n }\n }\n var id = feature.getId();\n if (id !== undefined) {\n var sid = id.toString();\n if (this.idIndex_[sid] !== feature) {\n this.removeFromIdIndex_(feature);\n this.idIndex_[sid] = feature;\n }\n }\n else {\n this.removeFromIdIndex_(feature);\n this.uidIndex_[featureKey] = feature;\n }\n this.changed();\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.CHANGEFEATURE, feature));\n };\n /**\n * Returns true if the feature is contained within the source.\n * @param {import(\"../Feature.js\").default<Geometry>} feature Feature.\n * @return {boolean} Has feature.\n * @api\n */\n VectorSource.prototype.hasFeature = function (feature) {\n var id = feature.getId();\n if (id !== undefined) {\n return id in this.idIndex_;\n }\n else {\n return getUid(feature) in this.uidIndex_;\n }\n };\n /**\n * @return {boolean} Is empty.\n */\n VectorSource.prototype.isEmpty = function () {\n return this.featuresRtree_.isEmpty() && isEmpty(this.nullGeometryFeatures_);\n };\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n */\n VectorSource.prototype.loadFeatures = function (extent, resolution, projection) {\n var loadedExtentsRtree = this.loadedExtentsRtree_;\n var extentsToLoad = this.strategy_(extent, resolution);\n this.loading = false;\n var _loop_1 = function (i, ii) {\n var extentToLoad = extentsToLoad[i];\n var alreadyLoaded = loadedExtentsRtree.forEachInExtent(extentToLoad, \n /**\n * @param {{extent: import(\"../extent.js\").Extent}} object Object.\n * @return {boolean} Contains.\n */\n function (object) {\n return containsExtent(object.extent, extentToLoad);\n });\n if (!alreadyLoaded) {\n this_1.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADSTART));\n this_1.loader_.call(this_1, extentToLoad, resolution, projection, function (features) {\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADEND, undefined, features));\n }.bind(this_1), function () {\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADERROR));\n }.bind(this_1));\n loadedExtentsRtree.insert(extentToLoad, { extent: extentToLoad.slice() });\n this_1.loading = this_1.loader_ !== VOID;\n }\n };\n var this_1 = this;\n for (var i = 0, ii = extentsToLoad.length; i < ii; ++i) {\n _loop_1(i, ii);\n }\n };\n VectorSource.prototype.refresh = function () {\n this.clear(true);\n this.loadedExtentsRtree_.clear();\n _super.prototype.refresh.call(this);\n };\n /**\n * Remove an extent from the list of loaded extents.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n VectorSource.prototype.removeLoadedExtent = function (extent) {\n var loadedExtentsRtree = this.loadedExtentsRtree_;\n var obj;\n loadedExtentsRtree.forEachInExtent(extent, function (object) {\n if (equals(object.extent, extent)) {\n obj = object;\n return true;\n }\n });\n if (obj) {\n loadedExtentsRtree.remove(obj);\n }\n };\n /**\n * Remove a single feature from the source. If you want to remove all features\n * at once, use the {@link module:ol/source/Vector~VectorSource#clear #clear()} method\n * instead.\n * @param {import(\"../Feature.js\").default<Geometry>} feature Feature to remove.\n * @api\n */\n VectorSource.prototype.removeFeature = function (feature) {\n var featureKey = getUid(feature);\n if (featureKey in this.nullGeometryFeatures_) {\n delete this.nullGeometryFeatures_[featureKey];\n }\n else {\n if (this.featuresRtree_) {\n this.featuresRtree_.remove(feature);\n }\n }\n this.removeFeatureInternal(feature);\n this.changed();\n };\n /**\n * Remove feature without firing a `change` event.\n * @param {import(\"../Feature.js\").default<Geometry>} feature Feature.\n * @protected\n */\n VectorSource.prototype.removeFeatureInternal = function (feature) {\n var featureKey = getUid(feature);\n this.featureChangeKeys_[featureKey].forEach(unlistenByKey);\n delete this.featureChangeKeys_[featureKey];\n var id = feature.getId();\n if (id !== undefined) {\n delete this.idIndex_[id.toString()];\n }\n delete this.uidIndex_[featureKey];\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.REMOVEFEATURE, feature));\n };\n /**\n * Remove a feature from the id index. Called internally when the feature id\n * may have changed.\n * @param {import(\"../Feature.js\").default<Geometry>} feature The feature.\n * @return {boolean} Removed the feature from the index.\n * @private\n */\n VectorSource.prototype.removeFromIdIndex_ = function (feature) {\n var removed = false;\n for (var id in this.idIndex_) {\n if (this.idIndex_[id] === feature) {\n delete this.idIndex_[id];\n removed = true;\n break;\n }\n }\n return removed;\n };\n /**\n * Set the new loader of the source. The next render cycle will use the\n * new loader.\n * @param {import(\"../featureloader.js\").FeatureLoader} loader The loader to set.\n * @api\n */\n VectorSource.prototype.setLoader = function (loader) {\n this.loader_ = loader;\n };\n /**\n * Points the source to a new url. The next render cycle will use the new url.\n * @param {string|import(\"../featureloader.js\").FeatureUrlFunction} url Url.\n * @api\n */\n VectorSource.prototype.setUrl = function (url) {\n assert(this.format_, 7); // `format` must be set when `url` is set\n this.setLoader(xhr(url, this.format_));\n };\n return VectorSource;\n}(Source));\nexport default VectorSource;\n//# sourceMappingURL=Vector.js.map","/**\n * @module ol/util\n */\n/**\n * @return {?} Any return.\n */\nexport function abstract() {\n return /** @type {?} */ ((function () {\n throw new Error('Unimplemented abstract method.');\n })());\n}\n/**\n * Counter for getUid.\n * @type {number}\n * @private\n */\nvar uidCounter_ = 0;\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {string} The unique ID for the object.\n * @api\n */\nexport function getUid(obj) {\n return obj.ol_uid || (obj.ol_uid = String(++uidCounter_));\n}\n/**\n * OpenLayers version.\n * @type {string}\n */\nexport var VERSION = '6.5.0';\n//# sourceMappingURL=util.js.map","/**\n * @module ol/style/IconImage\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport EventTarget from '../events/Target.js';\nimport EventType from '../events/EventType.js';\nimport ImageState from '../ImageState.js';\nimport { asString } from '../color.js';\nimport { createCanvasContext2D } from '../dom.js';\nimport { shared as iconImageCache } from './IconImageCache.js';\nimport { listenImage } from '../Image.js';\n/**\n * @type {CanvasRenderingContext2D}\n */\nvar taintedTestContext = null;\nvar IconImage = /** @class */ (function (_super) {\n __extends(IconImage, _super);\n /**\n * @param {HTMLImageElement|HTMLCanvasElement} image Image.\n * @param {string|undefined} src Src.\n * @param {import(\"../size.js\").Size} size Size.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../ImageState.js\").default} imageState Image state.\n * @param {import(\"../color.js\").Color} color Color.\n */\n function IconImage(image, src, size, crossOrigin, imageState, color) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n _this.hitDetectionImage_ = null;\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n _this.image_ = !image ? new Image() : image;\n if (crossOrigin !== null) {\n /** @type {HTMLImageElement} */ (_this.image_).crossOrigin = crossOrigin;\n }\n /**\n * @private\n * @type {Object<number, HTMLCanvasElement>}\n */\n _this.canvas_ = {};\n /**\n * @private\n * @type {import(\"../color.js\").Color}\n */\n _this.color_ = color;\n /**\n * @private\n * @type {?function():void}\n */\n _this.unlisten_ = null;\n /**\n * @private\n * @type {import(\"../ImageState.js\").default}\n */\n _this.imageState_ = imageState;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n _this.size_ = size;\n /**\n * @private\n * @type {string|undefined}\n */\n _this.src_ = src;\n /**\n * @private\n */\n _this.tainted_;\n return _this;\n }\n /**\n * @private\n * @return {boolean} The image canvas is tainted.\n */\n IconImage.prototype.isTainted_ = function () {\n if (this.tainted_ === undefined && this.imageState_ === ImageState.LOADED) {\n if (!taintedTestContext) {\n taintedTestContext = createCanvasContext2D(1, 1);\n }\n taintedTestContext.drawImage(this.image_, 0, 0);\n try {\n taintedTestContext.getImageData(0, 0, 1, 1);\n this.tainted_ = false;\n }\n catch (e) {\n taintedTestContext = null;\n this.tainted_ = true;\n }\n }\n return this.tainted_ === true;\n };\n /**\n * @private\n */\n IconImage.prototype.dispatchChangeEvent_ = function () {\n this.dispatchEvent(EventType.CHANGE);\n };\n /**\n * @private\n */\n IconImage.prototype.handleImageError_ = function () {\n this.imageState_ = ImageState.ERROR;\n this.unlistenImage_();\n this.dispatchChangeEvent_();\n };\n /**\n * @private\n */\n IconImage.prototype.handleImageLoad_ = function () {\n this.imageState_ = ImageState.LOADED;\n if (this.size_) {\n this.image_.width = this.size_[0];\n this.image_.height = this.size_[1];\n }\n else {\n this.size_ = [this.image_.width, this.image_.height];\n }\n this.unlistenImage_();\n this.dispatchChangeEvent_();\n };\n /**\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLImageElement|HTMLCanvasElement} Image or Canvas element.\n */\n IconImage.prototype.getImage = function (pixelRatio) {\n this.replaceColor_(pixelRatio);\n return this.canvas_[pixelRatio] ? this.canvas_[pixelRatio] : this.image_;\n };\n /**\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Image or Canvas element.\n */\n IconImage.prototype.getPixelRatio = function (pixelRatio) {\n this.replaceColor_(pixelRatio);\n return this.canvas_[pixelRatio] ? pixelRatio : 1;\n };\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n IconImage.prototype.getImageState = function () {\n return this.imageState_;\n };\n /**\n * @return {HTMLImageElement|HTMLCanvasElement} Image element.\n */\n IconImage.prototype.getHitDetectionImage = function () {\n if (!this.hitDetectionImage_) {\n if (this.isTainted_()) {\n var width = this.size_[0];\n var height = this.size_[1];\n var context = createCanvasContext2D(width, height);\n context.fillRect(0, 0, width, height);\n this.hitDetectionImage_ = context.canvas;\n }\n else {\n this.hitDetectionImage_ = this.image_;\n }\n }\n return this.hitDetectionImage_;\n };\n /**\n * Get the size of the icon (in pixels).\n * @return {import(\"../size.js\").Size} Image size.\n */\n IconImage.prototype.getSize = function () {\n return this.size_;\n };\n /**\n * @return {string|undefined} Image src.\n */\n IconImage.prototype.getSrc = function () {\n return this.src_;\n };\n /**\n * Load not yet loaded URI.\n */\n IconImage.prototype.load = function () {\n if (this.imageState_ == ImageState.IDLE) {\n this.imageState_ = ImageState.LOADING;\n try {\n /** @type {HTMLImageElement} */ (this.image_).src = this.src_;\n }\n catch (e) {\n this.handleImageError_();\n }\n this.unlisten_ = listenImage(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this));\n }\n };\n /**\n * @param {number} pixelRatio Pixel ratio.\n * @private\n */\n IconImage.prototype.replaceColor_ = function (pixelRatio) {\n if (!this.color_ || this.canvas_[pixelRatio]) {\n return;\n }\n var canvas = document.createElement('canvas');\n this.canvas_[pixelRatio] = canvas;\n canvas.width = Math.ceil(this.image_.width * pixelRatio);\n canvas.height = Math.ceil(this.image_.height * pixelRatio);\n var ctx = canvas.getContext('2d');\n ctx.scale(pixelRatio, pixelRatio);\n ctx.drawImage(this.image_, 0, 0);\n ctx.globalCompositeOperation = 'multiply';\n // Internet Explorer 11 does not support the multiply operation.\n // If the canvas is tainted in Internet Explorer this still produces\n // a solid color image with the shape of the icon.\n if (ctx.globalCompositeOperation === 'multiply' || this.isTainted_()) {\n ctx.fillStyle = asString(this.color_);\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.globalCompositeOperation = 'destination-in';\n ctx.drawImage(this.image_, 0, 0);\n }\n else {\n var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n var data = imgData.data;\n var r = this.color_[0] / 255.0;\n var g = this.color_[1] / 255.0;\n var b = this.color_[2] / 255.0;\n var a = this.color_[3];\n for (var i = 0, ii = data.length; i < ii; i += 4) {\n data[i] *= r;\n data[i + 1] *= g;\n data[i + 2] *= b;\n data[i + 3] *= a;\n }\n ctx.putImageData(imgData, 0, 0);\n }\n };\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n IconImage.prototype.unlistenImage_ = function () {\n if (this.unlisten_) {\n this.unlisten_();\n this.unlisten_ = null;\n }\n };\n return IconImage;\n}(EventTarget));\n/**\n * @param {HTMLImageElement|HTMLCanvasElement} image Image.\n * @param {string} src Src.\n * @param {import(\"../size.js\").Size} size Size.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../ImageState.js\").default} imageState Image state.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {IconImage} Icon image.\n */\nexport function get(image, src, size, crossOrigin, imageState, color) {\n var iconImage = iconImageCache.get(src, crossOrigin, color);\n if (!iconImage) {\n iconImage = new IconImage(image, src, size, crossOrigin, imageState, color);\n iconImageCache.set(src, crossOrigin, color, iconImage);\n }\n return iconImage;\n}\nexport default IconImage;\n//# sourceMappingURL=IconImage.js.map","/**\n * @module ol/style/IconOrigin\n */\n/**\n * Icon origin. One of 'bottom-left', 'bottom-right', 'top-left', 'top-right'.\n * @enum {string}\n */\nexport default {\n /**\n * Origin is at bottom left\n * @api\n */\n BOTTOM_LEFT: 'bottom-left',\n /**\n * Origin is at bottom right\n * @api\n */\n BOTTOM_RIGHT: 'bottom-right',\n /**\n * Origin is at top left\n * @api\n */\n TOP_LEFT: 'top-left',\n /**\n * Origin is at top right\n * @api\n */\n TOP_RIGHT: 'top-right',\n};\n//# sourceMappingURL=IconOrigin.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/style/Icon\n */\nimport EventType from '../events/EventType.js';\nimport IconAnchorUnits from './IconAnchorUnits.js';\nimport IconOrigin from './IconOrigin.js';\nimport ImageState from '../ImageState.js';\nimport ImageStyle from './Image.js';\nimport { asArray } from '../color.js';\nimport { assert } from '../asserts.js';\nimport { get as getIconImage } from './IconImage.js';\nimport { getUid } from '../util.js';\n/**\n * @typedef {Object} Options\n * @property {Array<number>} [anchor=[0.5, 0.5]] Anchor. Default value is the icon center.\n * @property {import(\"./IconOrigin.js\").default} [anchorOrigin='top-left'] Origin of the anchor: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {import(\"./IconAnchorUnits.js\").default} [anchorXUnits='fraction'] Units in which the anchor x value is\n * specified. A value of `'fraction'` indicates the x value is a fraction of the icon. A value of `'pixels'` indicates\n * the x value in pixels.\n * @property {import(\"./IconAnchorUnits.js\").default} [anchorYUnits='fraction'] Units in which the anchor y value is\n * specified. A value of `'fraction'` indicates the y value is a fraction of the icon. A value of `'pixels'` indicates\n * the y value in pixels.\n * @property {import(\"../color.js\").Color|string} [color] Color to tint the icon. If not specified,\n * the icon will be left as is.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that you must provide a\n * `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {HTMLImageElement|HTMLCanvasElement} [img] Image object for the icon. If the `src` option is not provided then the\n * provided image must already be loaded. And in that case, it is required\n * to provide the size of the image, with the `imgSize` option.\n * @property {Array<number>} [offset=[0, 0]] Offset, which, together with the size and the offset origin, define the\n * sub-rectangle to use from the original icon image.\n * @property {Array<number>} [displacement=[0,0]] Displacement the icon\n * @property {import(\"./IconOrigin.js\").default} [offsetOrigin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {number} [opacity=1] Opacity of the icon.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale.\n * @property {boolean} [rotateWithView=false] Whether to rotate the icon with the view.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {import(\"../size.js\").Size} [size] Icon size in pixel. Can be used together with `offset` to define the\n * sub-rectangle to use from the origin (sprite) icon image.\n * @property {import(\"../size.js\").Size} [imgSize] Image size in pixels. Only required if `img` is set and `src` is not, and\n * for SVG images in Internet Explorer 11. The provided `imgSize` needs to match the actual size of the image.\n * @property {string} [src] Image source URI.\n */\n/**\n * @classdesc\n * Set icon style for vector features.\n * @api\n */\nvar Icon = /** @class */ (function (_super) {\n __extends(Icon, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function Icon(opt_options) {\n var _this = this;\n var options = opt_options || {};\n /**\n * @type {number}\n */\n var opacity = options.opacity !== undefined ? options.opacity : 1;\n /**\n * @type {number}\n */\n var rotation = options.rotation !== undefined ? options.rotation : 0;\n /**\n * @type {number|import(\"../size.js\").Size}\n */\n var scale = options.scale !== undefined ? options.scale : 1;\n /**\n * @type {boolean}\n */\n var rotateWithView = options.rotateWithView !== undefined ? options.rotateWithView : false;\n _this = _super.call(this, {\n opacity: opacity,\n rotation: rotation,\n scale: scale,\n displacement: options.displacement !== undefined ? options.displacement : [0, 0],\n rotateWithView: rotateWithView,\n }) || this;\n /**\n * @private\n * @type {Array<number>}\n */\n _this.anchor_ = options.anchor !== undefined ? options.anchor : [0.5, 0.5];\n /**\n * @private\n * @type {Array<number>}\n */\n _this.normalizedAnchor_ = null;\n /**\n * @private\n * @type {import(\"./IconOrigin.js\").default}\n */\n _this.anchorOrigin_ =\n options.anchorOrigin !== undefined\n ? options.anchorOrigin\n : IconOrigin.TOP_LEFT;\n /**\n * @private\n * @type {import(\"./IconAnchorUnits.js\").default}\n */\n _this.anchorXUnits_ =\n options.anchorXUnits !== undefined\n ? options.anchorXUnits\n : IconAnchorUnits.FRACTION;\n /**\n * @private\n * @type {import(\"./IconAnchorUnits.js\").default}\n */\n _this.anchorYUnits_ =\n options.anchorYUnits !== undefined\n ? options.anchorYUnits\n : IconAnchorUnits.FRACTION;\n /**\n * @private\n * @type {?string}\n */\n _this.crossOrigin_ =\n options.crossOrigin !== undefined ? options.crossOrigin : null;\n /**\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n var image = options.img !== undefined ? options.img : null;\n /**\n * @type {import(\"../size.js\").Size}\n */\n var imgSize = options.imgSize !== undefined ? options.imgSize : null;\n /**\n * @type {string|undefined}\n */\n var src = options.src;\n assert(!(src !== undefined && image), 4); // `image` and `src` cannot be provided at the same time\n assert(!image || (image && imgSize), 5); // `imgSize` must be set when `image` is provided\n if ((src === undefined || src.length === 0) && image) {\n src = /** @type {HTMLImageElement} */ (image).src || getUid(image);\n }\n assert(src !== undefined && src.length > 0, 6); // A defined and non-empty `src` or `image` must be provided\n /**\n * @type {import(\"../ImageState.js\").default}\n */\n var imageState = options.src !== undefined ? ImageState.IDLE : ImageState.LOADED;\n /**\n * @private\n * @type {import(\"../color.js\").Color}\n */\n _this.color_ = options.color !== undefined ? asArray(options.color) : null;\n /**\n * @private\n * @type {import(\"./IconImage.js\").default}\n */\n _this.iconImage_ = getIconImage(image, \n /** @type {string} */ (src), imgSize, _this.crossOrigin_, imageState, _this.color_);\n /**\n * @private\n * @type {Array<number>}\n */\n _this.offset_ = options.offset !== undefined ? options.offset : [0, 0];\n /**\n * @private\n * @type {import(\"./IconOrigin.js\").default}\n */\n _this.offsetOrigin_ =\n options.offsetOrigin !== undefined\n ? options.offsetOrigin\n : IconOrigin.TOP_LEFT;\n /**\n * @private\n * @type {Array<number>}\n */\n _this.origin_ = null;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n _this.size_ = options.size !== undefined ? options.size : null;\n return _this;\n }\n /**\n * Clones the style. The underlying Image/HTMLCanvasElement is not cloned.\n * @return {Icon} The cloned style.\n * @api\n */\n Icon.prototype.clone = function () {\n var scale = this.getScale();\n return new Icon({\n anchor: this.anchor_.slice(),\n anchorOrigin: this.anchorOrigin_,\n anchorXUnits: this.anchorXUnits_,\n anchorYUnits: this.anchorYUnits_,\n crossOrigin: this.crossOrigin_,\n color: this.color_ && this.color_.slice\n ? this.color_.slice()\n : this.color_ || undefined,\n src: this.getSrc(),\n offset: this.offset_.slice(),\n offsetOrigin: this.offsetOrigin_,\n size: this.size_ !== null ? this.size_.slice() : undefined,\n opacity: this.getOpacity(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n });\n };\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @return {Array<number>} Anchor.\n * @api\n */\n Icon.prototype.getAnchor = function () {\n if (this.normalizedAnchor_) {\n return this.normalizedAnchor_;\n }\n var anchor = this.anchor_;\n var size = this.getSize();\n if (this.anchorXUnits_ == IconAnchorUnits.FRACTION ||\n this.anchorYUnits_ == IconAnchorUnits.FRACTION) {\n if (!size) {\n return null;\n }\n anchor = this.anchor_.slice();\n if (this.anchorXUnits_ == IconAnchorUnits.FRACTION) {\n anchor[0] *= size[0];\n }\n if (this.anchorYUnits_ == IconAnchorUnits.FRACTION) {\n anchor[1] *= size[1];\n }\n }\n if (this.anchorOrigin_ != IconOrigin.TOP_LEFT) {\n if (!size) {\n return null;\n }\n if (anchor === this.anchor_) {\n anchor = this.anchor_.slice();\n }\n if (this.anchorOrigin_ == IconOrigin.TOP_RIGHT ||\n this.anchorOrigin_ == IconOrigin.BOTTOM_RIGHT) {\n anchor[0] = -anchor[0] + size[0];\n }\n if (this.anchorOrigin_ == IconOrigin.BOTTOM_LEFT ||\n this.anchorOrigin_ == IconOrigin.BOTTOM_RIGHT) {\n anchor[1] = -anchor[1] + size[1];\n }\n }\n this.normalizedAnchor_ = anchor;\n return this.normalizedAnchor_;\n };\n /**\n * Set the anchor point. The anchor determines the center point for the\n * symbolizer.\n *\n * @param {Array<number>} anchor Anchor.\n * @api\n */\n Icon.prototype.setAnchor = function (anchor) {\n this.anchor_ = anchor;\n this.normalizedAnchor_ = null;\n };\n /**\n * Get the icon color.\n * @return {import(\"../color.js\").Color} Color.\n * @api\n */\n Icon.prototype.getColor = function () {\n return this.color_;\n };\n /**\n * Get the image icon.\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLImageElement|HTMLCanvasElement} Image or Canvas element.\n * @api\n */\n Icon.prototype.getImage = function (pixelRatio) {\n return this.iconImage_.getImage(pixelRatio);\n };\n /**\n * Get the pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} The pixel ration of the image.\n * @api\n */\n Icon.prototype.getPixelRatio = function (pixelRatio) {\n return this.iconImage_.getPixelRatio(pixelRatio);\n };\n /**\n * @return {import(\"../size.js\").Size} Image size.\n */\n Icon.prototype.getImageSize = function () {\n return this.iconImage_.getSize();\n };\n /**\n * @return {import(\"../size.js\").Size} Size of the hit-detection image.\n */\n Icon.prototype.getHitDetectionImageSize = function () {\n return this.getImageSize();\n };\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n Icon.prototype.getImageState = function () {\n return this.iconImage_.getImageState();\n };\n /**\n * @return {HTMLImageElement|HTMLCanvasElement} Image element.\n */\n Icon.prototype.getHitDetectionImage = function () {\n return this.iconImage_.getHitDetectionImage();\n };\n /**\n * Get the origin of the symbolizer.\n * @return {Array<number>} Origin.\n * @api\n */\n Icon.prototype.getOrigin = function () {\n if (this.origin_) {\n return this.origin_;\n }\n var offset = this.offset_;\n var displacement = this.getDisplacement();\n if (this.offsetOrigin_ != IconOrigin.TOP_LEFT) {\n var size = this.getSize();\n var iconImageSize = this.iconImage_.getSize();\n if (!size || !iconImageSize) {\n return null;\n }\n offset = offset.slice();\n if (this.offsetOrigin_ == IconOrigin.TOP_RIGHT ||\n this.offsetOrigin_ == IconOrigin.BOTTOM_RIGHT) {\n offset[0] = iconImageSize[0] - size[0] - offset[0];\n }\n if (this.offsetOrigin_ == IconOrigin.BOTTOM_LEFT ||\n this.offsetOrigin_ == IconOrigin.BOTTOM_RIGHT) {\n offset[1] = iconImageSize[1] - size[1] - offset[1];\n }\n }\n offset[0] += displacement[0];\n offset[1] += displacement[1];\n this.origin_ = offset;\n return this.origin_;\n };\n /**\n * Get the image URL.\n * @return {string|undefined} Image src.\n * @api\n */\n Icon.prototype.getSrc = function () {\n return this.iconImage_.getSrc();\n };\n /**\n * Get the size of the icon (in pixels).\n * @return {import(\"../size.js\").Size} Image size.\n * @api\n */\n Icon.prototype.getSize = function () {\n return !this.size_ ? this.iconImage_.getSize() : this.size_;\n };\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n Icon.prototype.listenImageChange = function (listener) {\n this.iconImage_.addEventListener(EventType.CHANGE, listener);\n };\n /**\n * Load not yet loaded URI.\n * When rendering a feature with an icon style, the vector renderer will\n * automatically call this method. However, you might want to call this\n * method yourself for preloading or other purposes.\n * @api\n */\n Icon.prototype.load = function () {\n this.iconImage_.load();\n };\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n Icon.prototype.unlistenImageChange = function (listener) {\n this.iconImage_.removeEventListener(EventType.CHANGE, listener);\n };\n return Icon;\n}(ImageStyle));\nexport default Icon;\n//# sourceMappingURL=Icon.js.map","/**\n * @module ol/events/EventType\n */\n/**\n * @enum {string}\n * @const\n */\nexport default {\n /**\n * Generic change event. Triggered when the revision counter is increased.\n * @event module:ol/events/Event~BaseEvent#change\n * @api\n */\n CHANGE: 'change',\n /**\n * Generic error event. Triggered when an error occurs.\n * @event module:ol/events/Event~BaseEvent#error\n * @api\n */\n ERROR: 'error',\n BLUR: 'blur',\n CLEAR: 'clear',\n CONTEXTMENU: 'contextmenu',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n DRAGENTER: 'dragenter',\n DRAGOVER: 'dragover',\n DROP: 'drop',\n FOCUS: 'focus',\n KEYDOWN: 'keydown',\n KEYPRESS: 'keypress',\n LOAD: 'load',\n RESIZE: 'resize',\n TOUCHMOVE: 'touchmove',\n WHEEL: 'wheel',\n};\n//# sourceMappingURL=EventType.js.map","define([\n\t'../errors/RequestError',\n\t'./watch',\n\t'./handlers',\n\t'./util',\n\t'../has'/*=====,\n\t'../request',\n\t'../_base/declare' =====*/\n], function(RequestError, watch, handlers, util, has/*=====, request, declare =====*/){\n\thas.add('native-xhr', function(){\n\t\t// if true, the environment has a native XHR implementation\n\t\treturn typeof XMLHttpRequest !== 'undefined';\n\t});\n\thas.add('dojo-force-activex-xhr', function(){\n\t\treturn has('activex') && window.location.protocol === 'file:';\n\t});\n\n\thas.add('native-xhr2', function(){\n\t\tif(!has('native-xhr') || has('dojo-force-activex-xhr')){ return; }\n\t\tvar x = new XMLHttpRequest();\n\t\treturn typeof x['addEventListener'] !== 'undefined' &&\n\t\t\t(typeof opera === 'undefined' || typeof x['upload'] !== 'undefined');\n\t});\n\n\thas.add('native-formdata', function(){\n\t\t// if true, the environment has a native FormData implementation\n\t\treturn typeof FormData !== 'undefined';\n\t});\n\n\thas.add('native-blob', function(){\n\t\t// if true, the environment has a native Blob implementation\n\t\treturn typeof Blob !== 'undefined';\n\t});\n\n\thas.add('native-arraybuffer', function(){\n\t\t// if true, the environment has a native ArrayBuffer implementation\n\t\treturn typeof ArrayBuffer !== 'undefined';\n\t});\n\n\thas.add('native-response-type', function(){\n\t\treturn has('native-xhr') && typeof new XMLHttpRequest().responseType !== 'undefined';\n\t});\n\n\thas.add('native-xhr2-blob', function(){\n\t\tif(!has('native-response-type')){ return; }\n\t\tvar x = new XMLHttpRequest();\n\t\t// The URL used here does not have to be reachable as the XHR's `send` method is never called.\n\t\t// It does need to be parsable/resolvable in all cases, so it should be an absolute URL.\n\t\t// XMLHttpRequest within a Worker created from a Blob does not support relative URL paths.\n\t\tx.open('GET', 'https://dojotoolkit.org/', true);\n\t\tx.responseType = 'blob';\n\t\t// will not be set if unsupported\n\t\tvar responseType = x.responseType;\n\t\tx.abort();\n\t\treturn responseType === 'blob';\n\t});\n\n\t// Google Chrome doesn't support \"json\" response type\n\t// up to version 30, so it's intentionally not included here\n\tvar nativeResponseTypes = {\n\t\t'blob': has('native-xhr2-blob') ? 'blob' : 'arraybuffer',\n\t\t'document': 'document',\n\t\t'arraybuffer': 'arraybuffer'\n\t};\n\n\tfunction handleResponse(response, error){\n\t\tvar _xhr = response.xhr;\n\t\tresponse.status = response.xhr.status;\n\n\t\ttry {\n\t\t\t// Firefox throws an error when trying to access\n\t\t\t// xhr.responseText if response isn't text\n\t\t\tresponse.text = _xhr.responseText;\n\t\t} catch (e) {}\n\n\t\tif(response.options.handleAs === 'xml'){\n\t\t\tresponse.data = _xhr.responseXML;\n\t\t}\n\n\t\tvar handleError;\n\t\tif(error){\n\t\t\tthis.reject(error);\n\t\t}else{\n\t\t\ttry{\n\t\t\t\thandlers(response);\n\t\t\t}catch(e){\n\t\t\t\thandleError = e;\n\t\t\t}\n\t\t\tif(util.checkStatus(_xhr.status)){\n\t\t\t\tif(!handleError){\n\t\t\t\t\tthis.resolve(response);\n\t\t\t\t}else{\n\t\t\t\t\tthis.reject(handleError);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(!handleError){\n\t\t\t\t\terror = new RequestError('Unable to load ' + response.url + ' status: ' + _xhr.status, response);\n\t\t\t\t\tthis.reject(error);\n\t\t\t\t}else{\n\t\t\t\t\terror = new RequestError('Unable to load ' + response.url + ' status: ' + _xhr.status +\n\t\t\t\t\t\t' and an error in handleAs: transformation of response', response);\n\t\t\t\t\tthis.reject(error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar isValid, isReady, addListeners, cancel;\n\tif(has('native-xhr2')){\n\t\t// Any platform with XHR2 will only use the watch mechanism for timeout.\n\n\t\tisValid = function(response){\n\t\t\t// summary:\n\t\t\t//\t\tCheck to see if the request should be taken out of the watch queue\n\t\t\treturn !this.isFulfilled();\n\t\t};\n\t\tcancel = function(dfd, response){\n\t\t\t// summary:\n\t\t\t//\t\tCanceler for deferred\n\t\t\tresponse.xhr.abort();\n\t\t};\n\t\taddListeners = function(_xhr, dfd, response, uploadProgress){\n\t\t\t// summary:\n\t\t\t//\t\tAdds event listeners to the XMLHttpRequest object\n\t\t\tfunction onLoad(evt){\n\t\t\t\tdfd.handleResponse(response);\n\t\t\t}\n\t\t\tfunction onError(evt){\n\t\t\t\tvar _xhr = evt.target;\n\t\t\t\tvar error = new RequestError('Unable to load ' + response.url + ' status: ' + _xhr.status, response);\n\t\t\t\tdfd.handleResponse(response, error);\n\t\t\t}\n\n\t\t\tfunction onProgress(transferType, evt){\n\t\t\t\tresponse.transferType = transferType;\n\t\t\t\tif(evt.lengthComputable){\n\t\t\t\t\tresponse.loaded = evt.loaded;\n\t\t\t\t\tresponse.total = evt.total;\n\t\t\t\t\tdfd.progress(response);\n\t\t\t\t} else if(response.xhr.readyState === 3){\n\t\t\t\t\tresponse.loaded = ('loaded' in evt) ? evt.loaded : evt.position;\n\t\t\t\t\tdfd.progress(response);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onDownloadProgress(evt) {\n\t\t\t\treturn onProgress('download', evt);\n\t\t\t}\n\n\t\t\tfunction onUploadProgress(evt) {\n\t\t\t\treturn onProgress('upload', evt);\n\t\t\t}\n\n\t\t\t_xhr.addEventListener('load', onLoad, false);\n\t\t\t_xhr.addEventListener('error', onError, false);\n\t\t\t_xhr.addEventListener('progress', onDownloadProgress, false);\n\n\t\t\tif (uploadProgress && _xhr.upload) {\n\t\t\t\t_xhr.upload.addEventListener('progress', onUploadProgress, false);\n\t\t\t}\n\n\t\t\treturn function(){\n\t\t\t\t_xhr.removeEventListener('load', onLoad, false);\n\t\t\t\t_xhr.removeEventListener('error', onError, false);\n\t\t\t\t_xhr.removeEventListener('progress', onDownloadProgress, false);\n\t\t\t\t_xhr.upload.removeEventListener('progress', onUploadProgress, false);\n\t\t\t\t_xhr = null;\n\t\t\t};\n\t\t};\n\t}else{\n\t\tisValid = function(response){\n\t\t\treturn response.xhr.readyState; //boolean\n\t\t};\n\t\tisReady = function(response){\n\t\t\treturn 4 === response.xhr.readyState; //boolean\n\t\t};\n\t\tcancel = function(dfd, response){\n\t\t\t// summary:\n\t\t\t//\t\tcanceller function for util.deferred call.\n\t\t\tvar xhr = response.xhr;\n\t\t\tvar _at = typeof xhr.abort;\n\t\t\tif(_at === 'function' || _at === 'object' || _at === 'unknown'){\n\t\t\t\txhr.abort();\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction getHeader(headerName){\n\t\treturn this.xhr.getResponseHeader(headerName);\n\t}\n\n\tvar undefined,\n\t\tdefaultOptions = {\n\t\t\tdata: null,\n\t\t\tquery: null,\n\t\t\tsync: false,\n\t\t\tmethod: 'GET'\n\t\t};\n\tfunction xhr(url, options, returnDeferred){\n\t\tvar isFormData = has('native-formdata') && options && options.data && options.data instanceof FormData;\n\t\tvar response = util.parseArgs(\n\t\t\turl,\n\t\t\tutil.deepCreate(defaultOptions, options),\n\t\t\tisFormData\n\t\t);\n\t\turl = response.url;\n\t\toptions = response.options;\n\t\tvar hasNoData = !options.data && options.method !== 'POST' && options.method !== 'PUT';\n\n\t\tif(has('ie') <= 10){\n\t\t\t// older IE breaks point 9 in http://www.w3.org/TR/XMLHttpRequest/#the-open()-method and sends fragment, so strip it\n\t\t\turl = url.split('#')[0];\n\t\t}\n\n\t\tvar remover,\n\t\t\tlast = function(){\n\t\t\t\tremover && remover();\n\t\t\t};\n\n\t\t//Make the Deferred object for this xhr request.\n\t\tvar dfd = util.deferred(\n\t\t\tresponse,\n\t\t\tcancel,\n\t\t\tisValid,\n\t\t\tisReady,\n\t\t\thandleResponse,\n\t\t\tlast\n\t\t);\n\t\tvar _xhr = response.xhr = xhr._create();\n\n\t\tif(!_xhr){\n\t\t\t// If XHR factory somehow returns nothings,\n\t\t\t// cancel the deferred.\n\t\t\tdfd.cancel(new RequestError('XHR was not created'));\n\t\t\treturn returnDeferred ? dfd : dfd.promise;\n\t\t}\n\n\t\tresponse.getHeader = getHeader;\n\n\t\tif(addListeners){\n\t\t\tremover = addListeners(_xhr, dfd, response, options.uploadProgress);\n\t\t}\n\n\t\t// IE11 treats data: undefined different than other browsers\n\t\tvar data = typeof(options.data) === 'undefined' ? null : options.data,\n\t\t\tasync = !options.sync,\n\t\t\tmethod = options.method;\n\n\t\ttry{\n\t\t\t// IE6 won't let you call apply() on the native function.\n\t\t\t_xhr.open(method, url, async, options.user || undefined, options.password || undefined);\n\n\t\t\tif(options.withCredentials){\n\t\t\t\t_xhr.withCredentials = options.withCredentials;\n\t\t\t}\n\n\t\t\tif(has('native-response-type') && options.handleAs in nativeResponseTypes) {\n\t\t\t\t_xhr.responseType = nativeResponseTypes[options.handleAs];\n\t\t\t}\n\n\t\t\tvar headers = options.headers,\n\t\t\t\tcontentType = (isFormData || hasNoData) ? false : 'application/x-www-form-urlencoded';\n\t\t\tif(headers){\n\t\t\t\tfor(var hdr in headers){\n\t\t\t\t\tif(hdr.toLowerCase() === 'content-type'){\n\t\t\t\t\t\tcontentType = headers[hdr];\n\t\t\t\t\t}else if(headers[hdr]){\n\t\t\t\t\t\t//Only add header if it has a value. This allows for instance, skipping\n\t\t\t\t\t\t//insertion of X-Requested-With by specifying empty value.\n\t\t\t\t\t\t_xhr.setRequestHeader(hdr, headers[hdr]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(contentType && contentType !== false){\n\t\t\t\t_xhr.setRequestHeader('Content-Type', contentType);\n\t\t\t}\n\t\t\tif(!headers || !('X-Requested-With' in headers)){\n\t\t\t\t_xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\t\t\t}\n\n\t\t\tif(util.notify){\n\t\t\t\tutil.notify.emit('send', response, dfd.promise.cancel);\n\t\t\t}\n\t\t\t_xhr.send(data);\n\t\t}catch(e){\n\t\t\tdfd.reject(e);\n\t\t}\n\n\t\twatch(dfd);\n\t\t_xhr = null;\n\n\t\treturn returnDeferred ? dfd : dfd.promise;\n\t}\n\n\t/*=====\n\txhr = function(url, options){\n\t\t// summary:\n\t\t//\t\tSends a request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__Options?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.__BaseOptions = declare(request.__BaseOptions, {\n\t\t// sync: Boolean?\n\t\t//\t\tWhether to make a synchronous request or not. Default\n\t\t//\t\tis `false` (asynchronous).\n\t\t// data: String|Object|FormData?\n\t\t//\t\tData to transfer. This is ignored for GET and DELETE\n\t\t//\t\trequests.\n\t\t// headers: Object?\n\t\t//\t\tHeaders to use for the request.\n\t\t// user: String?\n\t\t//\t\tUsername to use during the request.\n\t\t// password: String?\n\t\t//\t\tPassword to use during the request.\n\t\t// withCredentials: Boolean?\n\t\t//\t\tFor cross-site requests, whether to send credentials\n\t\t//\t\tor not.\n\t\t// uploadProgress: Boolean?\n\t\t//\t\tUpload progress events cause preflighted requests. This\n\t\t//\t\toption enables upload progress event support but also\n\t\t//\t\tcauses all requests to be preflighted.\n\t});\n\txhr.__MethodOptions = declare(null, {\n\t\t// method: String?\n\t\t//\t\tThe HTTP method to use to make the request. Must be\n\t\t//\t\tuppercase. Default is `\"GET\"`.\n\t});\n\txhr.__Options = declare([xhr.__BaseOptions, xhr.__MethodOptions]);\n\n\txhr.get = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP GET request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.post = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP POST request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.put = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP PUT request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.del = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP DELETE request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\t=====*/\n\txhr._create = function(){\n\t\t// summary:\n\t\t//\t\tdoes the work of portably generating a new XMLHTTPRequest object.\n\t\tthrow new Error('XMLHTTP not available');\n\t};\n\tif(has('native-xhr') && !has('dojo-force-activex-xhr')){\n\t\txhr._create = function(){\n\t\t\treturn new XMLHttpRequest();\n\t\t};\n\t}else if(has('activex')){\n\t\ttry{\n\t\t\tnew ActiveXObject('Msxml2.XMLHTTP');\n\t\t\txhr._create = function(){\n\t\t\t\treturn new ActiveXObject('Msxml2.XMLHTTP');\n\t\t\t};\n\t\t}catch(e){\n\t\t\ttry{\n\t\t\t\tnew ActiveXObject('Microsoft.XMLHTTP');\n\t\t\t\txhr._create = function(){\n\t\t\t\t\treturn new ActiveXObject('Microsoft.XMLHTTP');\n\t\t\t\t};\n\t\t\t}catch(e){}\n\t\t}\n\t}\n\n\tutil.addCommonMethods(xhr);\n\n\treturn xhr;\n});\n","define([\"./has\"], function(has){\n\t\"use strict\";\n\tvar hasJSON = typeof JSON != \"undefined\";\n\thas.add(\"json-parse\", hasJSON); // all the parsers work fine\n\t\t// Firefox 3.5/Gecko 1.9 fails to use replacer in stringify properly https://bugzilla.mozilla.org/show_bug.cgi?id=509184\n\thas.add(\"json-stringify\", hasJSON && JSON.stringify({a:0}, function(k,v){return v||1;}) == '{\"a\":1}');\n\n\t/*=====\n\treturn {\n\t\t// summary:\n\t\t//\t\tFunctions to parse and serialize JSON\n\n\t\tparse: function(str, strict){\n\t\t\t// summary:\n\t\t\t//\t\tParses a [JSON](http://json.org) string to return a JavaScript object.\n\t\t\t// description:\n\t\t\t//\t\tThis function follows [native JSON API](https://developer.mozilla.org/en/JSON)\n\t\t\t//\t\tThrows for invalid JSON strings. This delegates to eval() if native JSON\n\t\t\t//\t\tsupport is not available. By default this will evaluate any valid JS expression.\n\t\t\t//\t\tWith the strict parameter set to true, the parser will ensure that only\n\t\t\t//\t\tvalid JSON strings are parsed (otherwise throwing an error). Without the strict\n\t\t\t//\t\tparameter, the content passed to this method must come\n\t\t\t//\t\tfrom a trusted source.\n\t\t\t// str:\n\t\t\t//\t\ta string literal of a JSON item, for instance:\n\t\t\t//\t\t`'{ \"foo\": [ \"bar\", 1, { \"baz\": \"thud\" } ] }'`\n\t\t\t// strict:\n\t\t\t//\t\tWhen set to true, this will ensure that only valid, secure JSON is ever parsed.\n\t\t\t//\t\tMake sure this is set to true for untrusted content. Note that on browsers/engines\n\t\t\t//\t\twithout native JSON support, setting this to true will run slower.\n\t\t},\n\t\tstringify: function(value, replacer, spacer){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a [JSON](http://json.org) serialization of an object.\n\t\t\t// description:\n\t\t\t//\t\tReturns a [JSON](http://json.org) serialization of an object.\n\t\t\t//\t\tThis function follows [native JSON API](https://developer.mozilla.org/en/JSON)\n\t\t\t//\t\tNote that this doesn't check for infinite recursion, so don't do that!\n\t\t\t// value:\n\t\t\t//\t\tA value to be serialized.\n\t\t\t// replacer:\n\t\t\t//\t\tA replacer function that is called for each value and can return a replacement\n\t\t\t// spacer:\n\t\t\t//\t\tA spacer string to be used for pretty printing of JSON\n\t\t\t// example:\n\t\t\t//\t\tsimple serialization of a trivial object\n\t\t\t//\t|\tdefine([\"dojo/json\"], function(JSON){\n\t\t\t// \t|\t\tvar jsonStr = JSON.stringify({ howdy: \"stranger!\", isStrange: true });\n\t\t\t//\t|\t\tdoh.is('{\"howdy\":\"stranger!\",\"isStrange\":true}', jsonStr);\n\t\t}\n\t};\n\t=====*/\n\n\tif(has(\"json-stringify\")){\n\t\treturn JSON;\n\t}else{\n\t\tvar escapeString = function(/*String*/str){\n\t\t\t// summary:\n\t\t\t//\t\tAdds escape sequences for non-visual characters, double quote and\n\t\t\t//\t\tbackslash and surrounds with double quotes to form a valid string\n\t\t\t//\t\tliteral.\n\t\t\treturn ('\"' + str.replace(/([\"\\\\])/g, '\\\\$1') + '\"').\n\t\t\t\treplace(/[\\f]/g, \"\\\\f\").replace(/[\\b]/g, \"\\\\b\").replace(/[\\n]/g, \"\\\\n\").\n\t\t\t\treplace(/[\\t]/g, \"\\\\t\").replace(/[\\r]/g, \"\\\\r\"); // string\n\t\t};\n\t\treturn {\n\t\t\tparse: has(\"json-parse\") ? JSON.parse : function(str, strict){\n\t\t\t\tif(strict && !/^([\\s\\[\\{]*(?:\"(?:\\\\.|[^\"])*\"|-?\\d[\\d\\.]*(?:[Ee][+-]?\\d+)?|null|true|false|)[\\s\\]\\}]*(?:,|:|$))+$/.test(str)){\n\t\t\t\t\tthrow new SyntaxError(\"Invalid characters in JSON\");\n\t\t\t\t}\n\t\t\t\treturn eval('(' + str + ')');\n\t\t\t},\n\t\t\tstringify: function(value, replacer, spacer){\n\t\t\t\tvar undef;\n\t\t\t\tif(typeof replacer == \"string\"){\n\t\t\t\t\tspacer = replacer;\n\t\t\t\t\treplacer = null;\n\t\t\t\t}\n\t\t\t\tfunction stringify(it, indent, key){\n\t\t\t\t\tif(replacer){\n\t\t\t\t\t\tit = replacer(key, it);\n\t\t\t\t\t}\n\t\t\t\t\tvar val, objtype = typeof it;\n\t\t\t\t\tif(objtype == \"number\"){\n\t\t\t\t\t\treturn isFinite(it) ? it + \"\" : \"null\";\n\t\t\t\t\t}\n\t\t\t\t\tif(objtype == \"boolean\"){\n\t\t\t\t\t\treturn it + \"\";\n\t\t\t\t\t}\n\t\t\t\t\tif(it === null){\n\t\t\t\t\t\treturn \"null\";\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof it == \"string\"){\n\t\t\t\t\t\treturn escapeString(it);\n\t\t\t\t\t}\n\t\t\t\t\tif(objtype == \"function\" || objtype == \"undefined\"){\n\t\t\t\t\t\treturn undef; // undefined\n\t\t\t\t\t}\n\t\t\t\t\t// short-circuit for objects that support \"json\" serialization\n\t\t\t\t\t// if they return \"self\" then just pass-through...\n\t\t\t\t\tif(typeof it.toJSON == \"function\"){\n\t\t\t\t\t\treturn stringify(it.toJSON(key), indent, key);\n\t\t\t\t\t}\n\t\t\t\t\tif(it instanceof Date){\n\t\t\t\t\t\treturn '\"{FullYear}-{Month+}-{Date}T{Hours}:{Minutes}:{Seconds}Z\"'.replace(/\\{(\\w+)(\\+)?\\}/g, function(t, prop, plus){\n\t\t\t\t\t\t\tvar num = it[\"getUTC\" + prop]() + (plus ? 1 : 0);\n\t\t\t\t\t\t\treturn num < 10 ? \"0\" + num : num;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif(it.valueOf() !== it){\n\t\t\t\t\t\t// primitive wrapper, try again unwrapped:\n\t\t\t\t\t\treturn stringify(it.valueOf(), indent, key);\n\t\t\t\t\t}\n\t\t\t\t\tvar nextIndent= spacer ? (indent + spacer) : \"\";\n\t\t\t\t\t/* we used to test for DOM nodes and throw, but FF serializes them as {}, so cross-browser consistency is probably not efficiently attainable */ \n\t\t\t\t\n\t\t\t\t\tvar sep = spacer ? \" \" : \"\";\n\t\t\t\t\tvar newLine = spacer ? \"\\n\" : \"\";\n\t\t\t\t\n\t\t\t\t\t// array\n\t\t\t\t\tif(it instanceof Array){\n\t\t\t\t\t\tvar itl = it.length, res = [];\n\t\t\t\t\t\tfor(key = 0; key < itl; key++){\n\t\t\t\t\t\t\tvar obj = it[key];\n\t\t\t\t\t\t\tval = stringify(obj, nextIndent, key);\n\t\t\t\t\t\t\tif(typeof val != \"string\"){\n\t\t\t\t\t\t\t\tval = \"null\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tres.push(newLine + nextIndent + val);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn \"[\" + res.join(\",\") + newLine + indent + \"]\";\n\t\t\t\t\t}\n\t\t\t\t\t// generic object code path\n\t\t\t\t\tvar output = [];\n\t\t\t\t\tfor(key in it){\n\t\t\t\t\t\tvar keyStr;\n\t\t\t\t\t\tif(it.hasOwnProperty(key)){\n\t\t\t\t\t\t\tif(typeof key == \"number\"){\n\t\t\t\t\t\t\t\tkeyStr = '\"' + key + '\"';\n\t\t\t\t\t\t\t}else if(typeof key == \"string\"){\n\t\t\t\t\t\t\t\tkeyStr = escapeString(key);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t// skip non-string or number keys\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tval = stringify(it[key], nextIndent, key);\n\t\t\t\t\t\t\tif(typeof val != \"string\"){\n\t\t\t\t\t\t\t\t// skip non-serializable values\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// At this point, the most non-IE browsers don't get in this branch \n\t\t\t\t\t\t\t// (they have native JSON), so push is definitely the way to\n\t\t\t\t\t\t\toutput.push(newLine + nextIndent + keyStr + \":\" + sep + val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn \"{\" + output.join(\",\") + newLine + indent + \"}\"; // String\n\t\t\t\t}\n\t\t\t\treturn stringify(value, \"\", \"\");\n\t\t\t}\n\t\t};\n\t}\n});\n","/**\n * @module ol/style/Fill\n */\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} [color=null] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n */\n/**\n * @classdesc\n * Set fill style for vector features.\n * @api\n */\nvar Fill = /** @class */ (function () {\n /**\n * @param {Options=} opt_options Options.\n */\n function Fill(opt_options) {\n var options = opt_options || {};\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n }\n /**\n * Clones the style. The color is not cloned if it is an {@link module:ol/colorlike~ColorLike}.\n * @return {Fill} The cloned style.\n * @api\n */\n Fill.prototype.clone = function () {\n var color = this.getColor();\n return new Fill({\n color: Array.isArray(color) ? color.slice() : color || undefined,\n });\n };\n /**\n * Get the fill color.\n * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} Color.\n * @api\n */\n Fill.prototype.getColor = function () {\n return this.color_;\n };\n /**\n * Set the color.\n *\n * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} color Color.\n * @api\n */\n Fill.prototype.setColor = function (color) {\n this.color_ = color;\n };\n return Fill;\n}());\nexport default Fill;\n//# sourceMappingURL=Fill.js.map","/**\n * @module ol/style/Stroke\n */\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} [color] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n * @property {CanvasLineCap} [lineCap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {CanvasLineJoin} [lineJoin='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {Array<number>} [lineDash] Line dash pattern. Default is `null` (no dash).\n * Please note that Internet Explorer 10 and lower do not support the `setLineDash` method on\n * the `CanvasRenderingContext2D` and therefore this option will have no visual effect in these browsers.\n * @property {number} [lineDashOffset=0] Line dash offset.\n * @property {number} [miterLimit=10] Miter limit.\n * @property {number} [width] Width.\n */\n/**\n * @classdesc\n * Set stroke style for vector features.\n * Note that the defaults given are the Canvas defaults, which will be used if\n * option is not defined. The `get` functions return whatever was entered in\n * the options; they will not return the default.\n * @api\n */\nvar Stroke = /** @class */ (function () {\n /**\n * @param {Options=} opt_options Options.\n */\n function Stroke(opt_options) {\n var options = opt_options || {};\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n /**\n * @private\n * @type {CanvasLineCap|undefined}\n */\n this.lineCap_ = options.lineCap;\n /**\n * @private\n * @type {Array<number>}\n */\n this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;\n /**\n * @private\n * @type {number|undefined}\n */\n this.lineDashOffset_ = options.lineDashOffset;\n /**\n * @private\n * @type {CanvasLineJoin|undefined}\n */\n this.lineJoin_ = options.lineJoin;\n /**\n * @private\n * @type {number|undefined}\n */\n this.miterLimit_ = options.miterLimit;\n /**\n * @private\n * @type {number|undefined}\n */\n this.width_ = options.width;\n }\n /**\n * Clones the style.\n * @return {Stroke} The cloned style.\n * @api\n */\n Stroke.prototype.clone = function () {\n var color = this.getColor();\n return new Stroke({\n color: Array.isArray(color) ? color.slice() : color || undefined,\n lineCap: this.getLineCap(),\n lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,\n lineDashOffset: this.getLineDashOffset(),\n lineJoin: this.getLineJoin(),\n miterLimit: this.getMiterLimit(),\n width: this.getWidth(),\n });\n };\n /**\n * Get the stroke color.\n * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} Color.\n * @api\n */\n Stroke.prototype.getColor = function () {\n return this.color_;\n };\n /**\n * Get the line cap type for the stroke.\n * @return {CanvasLineCap|undefined} Line cap.\n * @api\n */\n Stroke.prototype.getLineCap = function () {\n return this.lineCap_;\n };\n /**\n * Get the line dash style for the stroke.\n * @return {Array<number>} Line dash.\n * @api\n */\n Stroke.prototype.getLineDash = function () {\n return this.lineDash_;\n };\n /**\n * Get the line dash offset for the stroke.\n * @return {number|undefined} Line dash offset.\n * @api\n */\n Stroke.prototype.getLineDashOffset = function () {\n return this.lineDashOffset_;\n };\n /**\n * Get the line join type for the stroke.\n * @return {CanvasLineJoin|undefined} Line join.\n * @api\n */\n Stroke.prototype.getLineJoin = function () {\n return this.lineJoin_;\n };\n /**\n * Get the miter limit for the stroke.\n * @return {number|undefined} Miter limit.\n * @api\n */\n Stroke.prototype.getMiterLimit = function () {\n return this.miterLimit_;\n };\n /**\n * Get the stroke width.\n * @return {number|undefined} Width.\n * @api\n */\n Stroke.prototype.getWidth = function () {\n return this.width_;\n };\n /**\n * Set the color.\n *\n * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} color Color.\n * @api\n */\n Stroke.prototype.setColor = function (color) {\n this.color_ = color;\n };\n /**\n * Set the line cap.\n *\n * @param {CanvasLineCap|undefined} lineCap Line cap.\n * @api\n */\n Stroke.prototype.setLineCap = function (lineCap) {\n this.lineCap_ = lineCap;\n };\n /**\n * Set the line dash.\n *\n * Please note that Internet Explorer 10 and lower [do not support][mdn] the\n * `setLineDash` method on the `CanvasRenderingContext2D` and therefore this\n * property will have no visual effect in these browsers.\n *\n * [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility\n *\n * @param {Array<number>} lineDash Line dash.\n * @api\n */\n Stroke.prototype.setLineDash = function (lineDash) {\n this.lineDash_ = lineDash;\n };\n /**\n * Set the line dash offset.\n *\n * @param {number|undefined} lineDashOffset Line dash offset.\n * @api\n */\n Stroke.prototype.setLineDashOffset = function (lineDashOffset) {\n this.lineDashOffset_ = lineDashOffset;\n };\n /**\n * Set the line join.\n *\n * @param {CanvasLineJoin|undefined} lineJoin Line join.\n * @api\n */\n Stroke.prototype.setLineJoin = function (lineJoin) {\n this.lineJoin_ = lineJoin;\n };\n /**\n * Set the miter limit.\n *\n * @param {number|undefined} miterLimit Miter limit.\n * @api\n */\n Stroke.prototype.setMiterLimit = function (miterLimit) {\n this.miterLimit_ = miterLimit;\n };\n /**\n * Set the width.\n *\n * @param {number|undefined} width Width.\n * @api\n */\n Stroke.prototype.setWidth = function (width) {\n this.width_ = width;\n };\n return Stroke;\n}());\nexport default Stroke;\n//# sourceMappingURL=Stroke.js.map","/**\n * @module ol/obj\n */\n/**\n * Polyfill for Object.assign(). Assigns enumerable and own properties from\n * one or more source objects to a target object.\n * See https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign.\n *\n * @param {!Object} target The target object.\n * @param {...Object} var_sources The source object(s).\n * @return {!Object} The modified target object.\n */\nexport var assign = typeof Object.assign === 'function'\n ? Object.assign\n : function (target, var_sources) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n var output = Object(target);\n for (var i = 1, ii = arguments.length; i < ii; ++i) {\n var source = arguments[i];\n if (source !== undefined && source !== null) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n output[key] = source[key];\n }\n }\n }\n }\n return output;\n };\n/**\n * Removes all properties from an object.\n * @param {Object} object The object to clear.\n */\nexport function clear(object) {\n for (var property in object) {\n delete object[property];\n }\n}\n/**\n * Polyfill for Object.values(). Get an array of property values from an object.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object<K,V>} object The object from which to get the values.\n * @return {!Array<V>} The property values.\n * @template K,V\n */\nexport var getValues = typeof Object.values === 'function'\n ? Object.values\n : function (object) {\n var values = [];\n for (var property in object) {\n values.push(object[property]);\n }\n return values;\n };\n/**\n * Determine if an object has any properties.\n * @param {Object} object The object to check.\n * @return {boolean} The object is empty.\n */\nexport function isEmpty(object) {\n var property;\n for (property in object) {\n return false;\n }\n return !property;\n}\n//# sourceMappingURL=obj.js.map","/**\n * @module ol/color\n */\nimport { assert } from './asserts.js';\nimport { clamp } from './math.js';\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array<number>} Color\n * @api\n */\n/**\n * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.\n * @const\n * @type {RegExp}\n * @private\n */\nvar HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;\n/**\n * Regular expression for matching potential named color style strings.\n * @const\n * @type {RegExp}\n * @private\n */\nvar NAMED_COLOR_RE_ = /^([a-z]*)$|^hsla?\\(.*\\)$/i;\n/**\n * Return the color as an rgba string.\n * @param {Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nexport function asString(color) {\n if (typeof color === 'string') {\n return color;\n }\n else {\n return toString(color);\n }\n}\n/**\n * Return named color as an rgba string.\n * @param {string} color Named color.\n * @return {string} Rgb string.\n */\nfunction fromNamed(color) {\n var el = document.createElement('div');\n el.style.color = color;\n if (el.style.color !== '') {\n document.body.appendChild(el);\n var rgb = getComputedStyle(el).color;\n document.body.removeChild(el);\n return rgb;\n }\n else {\n return '';\n }\n}\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport var fromString = (function () {\n // We maintain a small cache of parsed strings. To provide cheap LRU-like\n // semantics, whenever the cache grows too large we simply delete an\n // arbitrary 25% of the entries.\n /**\n * @const\n * @type {number}\n */\n var MAX_CACHE_SIZE = 1024;\n /**\n * @type {Object<string, Color>}\n */\n var cache = {};\n /**\n * @type {number}\n */\n var cacheSize = 0;\n return (\n /**\n * @param {string} s String.\n * @return {Color} Color.\n */\n function (s) {\n var color;\n if (cache.hasOwnProperty(s)) {\n color = cache[s];\n }\n else {\n if (cacheSize >= MAX_CACHE_SIZE) {\n var i = 0;\n for (var key in cache) {\n if ((i++ & 3) === 0) {\n delete cache[key];\n --cacheSize;\n }\n }\n }\n color = fromStringInternal_(s);\n cache[s] = color;\n ++cacheSize;\n }\n return color;\n });\n})();\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {Color|string} color Color.\n * @return {Color} Color.\n * @api\n */\nexport function asArray(color) {\n if (Array.isArray(color)) {\n return color;\n }\n else {\n return fromString(color);\n }\n}\n/**\n * @param {string} s String.\n * @private\n * @return {Color} Color.\n */\nfunction fromStringInternal_(s) {\n var r, g, b, a, color;\n if (NAMED_COLOR_RE_.exec(s)) {\n s = fromNamed(s);\n }\n if (HEX_COLOR_RE_.exec(s)) {\n // hex\n var n = s.length - 1; // number of hex digits\n var d = // number of digits per channel\n void 0; // number of digits per channel\n if (n <= 4) {\n d = 1;\n }\n else {\n d = 2;\n }\n var hasAlpha = n === 4 || n === 8;\n r = parseInt(s.substr(1 + 0 * d, d), 16);\n g = parseInt(s.substr(1 + 1 * d, d), 16);\n b = parseInt(s.substr(1 + 2 * d, d), 16);\n if (hasAlpha) {\n a = parseInt(s.substr(1 + 3 * d, d), 16);\n }\n else {\n a = 255;\n }\n if (d == 1) {\n r = (r << 4) + r;\n g = (g << 4) + g;\n b = (b << 4) + b;\n if (hasAlpha) {\n a = (a << 4) + a;\n }\n }\n color = [r, g, b, a / 255];\n }\n else if (s.indexOf('rgba(') == 0) {\n // rgba()\n color = s.slice(5, -1).split(',').map(Number);\n normalize(color);\n }\n else if (s.indexOf('rgb(') == 0) {\n // rgb()\n color = s.slice(4, -1).split(',').map(Number);\n color.push(1);\n normalize(color);\n }\n else {\n assert(false, 14); // Invalid color\n }\n return color;\n}\n/**\n * TODO this function is only used in the test, we probably shouldn't export it\n * @param {Color} color Color.\n * @return {Color} Clamped color.\n */\nexport function normalize(color) {\n color[0] = clamp((color[0] + 0.5) | 0, 0, 255);\n color[1] = clamp((color[1] + 0.5) | 0, 0, 255);\n color[2] = clamp((color[2] + 0.5) | 0, 0, 255);\n color[3] = clamp(color[3], 0, 1);\n return color;\n}\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n var r = color[0];\n if (r != (r | 0)) {\n r = (r + 0.5) | 0;\n }\n var g = color[1];\n if (g != (g | 0)) {\n g = (g + 0.5) | 0;\n }\n var b = color[2];\n if (b != (b | 0)) {\n b = (b + 0.5) | 0;\n }\n var a = color[3] === undefined ? 1 : color[3];\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nexport function isStringColor(s) {\n if (NAMED_COLOR_RE_.test(s)) {\n s = fromNamed(s);\n }\n return (HEX_COLOR_RE_.test(s) || s.indexOf('rgba(') === 0 || s.indexOf('rgb(') === 0);\n}\n//# sourceMappingURL=color.js.map","/**\n * @module ol/math\n */\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n/**\n * Return the hyperbolic cosine of a given number. The method will use the\n * native `Math.cosh` function if it is available, otherwise the hyperbolic\n * cosine will be calculated via the reference implementation of the Mozilla\n * developer network.\n *\n * @param {number} x X.\n * @return {number} Hyperbolic cosine of x.\n */\nexport var cosh = (function () {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n var cosh;\n if ('cosh' in Math) {\n // The environment supports the native Math.cosh function, use it…\n cosh = Math.cosh;\n }\n else {\n // … else, use the reference implementation of MDN:\n cosh = function (x) {\n var y = /** @type {Math} */ (Math).exp(x);\n return (y + 1 / y) / 2;\n };\n }\n return cosh;\n})();\n/**\n * Return the base 2 logarithm of a given number. The method will use the\n * native `Math.log2` function if it is available, otherwise the base 2\n * logarithm will be calculated via the reference implementation of the\n * Mozilla developer network.\n *\n * @param {number} x X.\n * @return {number} Base 2 logarithm of x.\n */\nexport var log2 = (function () {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n var log2;\n if ('log2' in Math) {\n // The environment supports the native Math.log2 function, use it…\n log2 = Math.log2;\n }\n else {\n // … else, use the reference implementation of MDN:\n log2 = function (x) {\n return Math.log(x) * Math.LOG2E;\n };\n }\n return log2;\n})();\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n var dx = x2 - x1;\n var dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n }\n else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n var dx = x2 - x1;\n var dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array<Array<number>>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array<number>} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n var n = mat.length;\n for (var i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n var maxRow = i;\n var maxEl = Math.abs(mat[i][i]);\n for (var r = i + 1; r < n; r++) {\n var absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n // Swap max row with i-th (current) row\n var tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (var j = i + 1; j < n; j++) {\n var coef = -mat[j][i] / mat[i][i];\n for (var k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n }\n else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n // Solve Ax=b for upper triangular matrix A (mat)\n var x = new Array(n);\n for (var l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (var m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n var r = a % b;\n return r * b < 0 ? r + b : r;\n}\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n//# sourceMappingURL=math.js.map","/**\n * @module ol/array\n */\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function=} opt_comparator Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, opt_comparator) {\n var mid, cmp;\n var comparator = opt_comparator || numberSafeCompareFunction;\n var low = 0;\n var high = haystack.length;\n var found = false;\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n }\n else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n /* Key not found. */\n return found ? low : ~low;\n}\n/**\n * Compare function for array sort that is safe for numbers.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function numberSafeCompareFunction(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n/**\n * Whether the array contains the given object.\n * @param {Array<*>} arr The array to test for the presence of the element.\n * @param {*} obj The object for which to test.\n * @return {boolean} The object is in the array.\n */\nexport function includes(arr, obj) {\n return arr.indexOf(obj) >= 0;\n}\n/**\n * @param {Array<number>} arr Array.\n * @param {number} target Target.\n * @param {number} direction 0 means return the nearest, > 0\n * means return the largest nearest, < 0 means return the\n * smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n var n = arr.length;\n if (arr[0] <= target) {\n return 0;\n }\n else if (target <= arr[n - 1]) {\n return n - 1;\n }\n else {\n var i = void 0;\n if (direction > 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n }\n else if (direction < 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n }\n else {\n for (i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n }\n else if (arr[i] < target) {\n if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n }\n else {\n return i;\n }\n }\n }\n }\n return n - 1;\n }\n}\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n var tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n/**\n * @param {Array<VALUE>} arr The array to modify.\n * @param {!Array<VALUE>|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n var extension = Array.isArray(data) ? data : [data];\n var length = extension.length;\n for (var i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n/**\n * @param {Array<VALUE>} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n var i = arr.indexOf(obj);\n var found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n/**\n * @param {Array<VALUE>} arr The array to search in.\n * @param {function(VALUE, number, ?) : boolean} func The function to compare.\n * @template VALUE\n * @return {VALUE|null} The element found or null.\n */\nexport function find(arr, func) {\n var length = arr.length >>> 0;\n var value;\n for (var i = 0; i < length; i++) {\n value = arr[i];\n if (func(value, i, arr)) {\n return value;\n }\n }\n return null;\n}\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n var len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (var i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Sort the passed array such that the relative order of equal elements is preverved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n var length = arr.length;\n var tmp = Array(arr.length);\n var i;\n for (i = 0; i < length; i++) {\n tmp[i] = { index: i, value: arr[i] };\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n/**\n * @param {Array<*>} arr The array to search in.\n * @param {Function} func Comparison function.\n * @return {number} Return index.\n */\nexport function findIndex(arr, func) {\n var index;\n var found = !arr.every(function (el, idx) {\n index = idx;\n return !func(el, idx, arr);\n });\n return found ? index : -1;\n}\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function=} opt_func Comparison function.\n * @param {boolean=} opt_strict Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, opt_func, opt_strict) {\n var compare = opt_func || numberSafeCompareFunction;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n var res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (opt_strict && res === 0));\n });\n}\n//# sourceMappingURL=array.js.map","define([\"./_base/lang\"], function(lang){\n\n\t// module:\n\t//\t\tdojo/io-query\n\n\tvar backstop = {};\n\n\treturn {\n\t\t// summary:\n\t\t//\t\tThis module defines query string processing functions.\n\n\t\tobjectToQuery: function objectToQuery(/*Object*/ map){\n\t\t\t// summary:\n\t\t\t//\t\ttakes a name/value mapping object and returns a string representing\n\t\t\t//\t\ta URL-encoded version of that object.\n\t\t\t// example:\n\t\t\t//\t\tthis object:\n\t\t\t//\n\t\t\t//\t|\t{\n\t\t\t//\t|\t\tblah: \"blah\",\n\t\t\t//\t|\t\tmulti: [\n\t\t\t//\t|\t\t\t\"thud\",\n\t\t\t//\t|\t\t\t\"thonk\"\n\t\t\t//\t|\t\t]\n\t\t\t//\t|\t};\n\t\t\t//\n\t\t\t//\t\tyields the following query string:\n\t\t\t//\n\t\t\t//\t|\t\"blah=blah&multi=thud&multi=thonk\"\n\n\t\t\t// FIXME: need to implement encodeAscii!!\n\t\t\tvar enc = encodeURIComponent, pairs = [];\n\t\t\tfor(var name in map){\n\t\t\t\tvar value = map[name];\n\t\t\t\tif(value != backstop[name]){\n\t\t\t\t\tvar assign = enc(name) + \"=\";\n\t\t\t\t\tif(lang.isArray(value)){\n\t\t\t\t\t\tfor(var i = 0, l = value.length; i < l; ++i){\n\t\t\t\t\t\t\tpairs.push(assign + enc(value[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tpairs.push(assign + enc(value));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pairs.join(\"&\"); // String\n\t\t},\n\n\t\tqueryToObject: function queryToObject(/*String*/ str){\n\t\t\t// summary:\n\t\t\t//\t\tCreate an object representing a de-serialized query section of a\n\t\t\t//\t\tURL. Query keys with multiple values are returned in an array.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tThis string:\n\t\t\t//\n\t\t\t//\t|\t\t\"foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&\"\n\t\t\t//\n\t\t\t//\t\tresults in this object structure:\n\t\t\t//\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tfoo: [ \"bar\", \"baz\" ],\n\t\t\t//\t|\t\t\tthinger: \" spaces =blah\",\n\t\t\t//\t|\t\t\tzonk: \"blarg\"\n\t\t\t//\t|\t\t}\n\t\t\t//\n\t\t\t//\t\tNote that spaces and other urlencoded entities are correctly\n\t\t\t//\t\thandled.\n\n \tvar dec = decodeURIComponent, qp = str.split(\"&\"), ret = {}, name, val;\n\t\t\tfor(var i = 0, l = qp.length, item; i < l; ++i){\n\t\t\t\titem = qp[i];\n\t\t\t\tif(item.length){\n\t\t\t\t\tvar s = item.indexOf(\"=\");\n\t\t\t\t\tif(s < 0){\n\t\t\t\t\t\tname = dec(item);\n\t\t\t\t\t\tval = \"\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tname = dec(item.slice(0, s));\n\t\t\t\t\t\tval = dec(item.slice(s + 1));\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof ret[name] == \"string\"){ // inline'd type check\n\t\t\t\t\t\tret[name] = [ret[name]];\n\t\t\t\t\t}\n\n\t\t\t\t\tif(lang.isArray(ret[name])){\n\t\t\t\t\t\tret[name].push(val);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tret[name] = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ret; // Object\n\t\t}\n\t};\n});","/**\n * @module ol/asserts\n */\nimport AssertionError from './AssertionError.js';\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {number} errorCode Error code.\n */\nexport function assert(assertion, errorCode) {\n if (!assertion) {\n throw new AssertionError(errorCode);\n }\n}\n//# sourceMappingURL=asserts.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { AttributeCommitter, BooleanAttributePart, EventPart, NodePart, PropertyCommitter } from './parts.js';\n/**\n * Creates Parts when a template is instantiated.\n */\nexport class DefaultTemplateProcessor {\n /**\n * Create parts for an attribute-position binding, given the event, attribute\n * name, and string literals.\n *\n * @param element The element containing the binding\n * @param name The attribute name\n * @param strings The string literals. There are always at least two strings,\n * event for fully-controlled bindings with a single expression.\n */\n handleAttributeExpressions(element, name, strings, options) {\n const prefix = name[0];\n if (prefix === '.') {\n const committer = new PropertyCommitter(element, name.slice(1), strings);\n return committer.parts;\n }\n if (prefix === '@') {\n return [new EventPart(element, name.slice(1), options.eventContext)];\n }\n if (prefix === '?') {\n return [new BooleanAttributePart(element, name.slice(1), strings)];\n }\n const committer = new AttributeCommitter(element, name, strings);\n return committer.parts;\n }\n /**\n * Create parts for a text-position binding.\n * @param templateFactory\n */\n handleTextExpression(options) {\n return new NodePart(options);\n }\n}\nexport const defaultTemplateProcessor = new DefaultTemplateProcessor();\n//# sourceMappingURL=default-template-processor.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * - [[html]]\n * - [[svg]]\n * - [[render]]\n *\n * @packageDocumentation\n */\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport { defaultTemplateProcessor } from './lib/default-template-processor.js';\nimport { SVGTemplateResult, TemplateResult } from './lib/template-result.js';\nexport { DefaultTemplateProcessor, defaultTemplateProcessor } from './lib/default-template-processor.js';\nexport { directive, isDirective } from './lib/directive.js';\n// TODO(justinfagnani): remove line when we get NodePart moving methods\nexport { removeNodes, reparentNodes } from './lib/dom.js';\nexport { noChange, nothing } from './lib/part.js';\nexport { AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isIterable, isPrimitive, NodePart, PropertyCommitter, PropertyPart } from './lib/parts.js';\nexport { parts, render } from './lib/render.js';\nexport { templateCaches, templateFactory } from './lib/template-factory.js';\nexport { TemplateInstance } from './lib/template-instance.js';\nexport { SVGTemplateResult, TemplateResult } from './lib/template-result.js';\nexport { createMarker, isTemplatePartActive, Template } from './lib/template.js';\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\nif (typeof window !== 'undefined') {\n (window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.3.0');\n}\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nexport const html = (strings, ...values) => new TemplateResult(strings, values, 'html', defaultTemplateProcessor);\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nexport const svg = (strings, ...values) => new SVGTemplateResult(strings, values, 'svg', defaultTemplateProcessor);\n//# sourceMappingURL=lit-html.js.map","/**\n * @module ol/events\n */\nimport { clear } from './obj.js';\n/**\n * Key to use with {@link module:ol/Observable~Observable#unByKey}.\n * @typedef {Object} EventsKey\n * @property {ListenerFunction} listener\n * @property {import(\"./events/Target.js\").EventTargetLike} target\n * @property {string} type\n * @api\n */\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function((Event|import(\"./events/Event.js\").default)): (void|boolean)} ListenerFunction\n * @api\n */\n/**\n * @typedef {Object} ListenerObject\n * @property {ListenerFunction} handleEvent\n */\n/**\n * @typedef {ListenerFunction|ListenerObject} Listener\n */\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events~unlistenByKey}.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object=} opt_this Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @param {boolean=} opt_once If true, add the listener as one-off listener.\n * @return {EventsKey} Unique key for the listener.\n */\nexport function listen(target, type, listener, opt_this, opt_once) {\n if (opt_this && opt_this !== target) {\n listener = listener.bind(opt_this);\n }\n if (opt_once) {\n var originalListener_1 = listener;\n listener = function () {\n target.removeEventListener(type, listener);\n originalListener_1.apply(this, arguments);\n };\n }\n var eventsKey = {\n target: target,\n type: type,\n listener: listener,\n };\n target.addEventListener(type, listener);\n return eventsKey;\n}\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events~unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events~listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object=} opt_this Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @return {EventsKey} Key for unlistenByKey.\n */\nexport function listenOnce(target, type, listener, opt_this) {\n return listen(target, type, listener, opt_this, true);\n}\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events~listen} or {@link module:ol/events~listenOnce}.\n *\n * @param {EventsKey} key The key.\n */\nexport function unlistenByKey(key) {\n if (key && key.target) {\n key.target.removeEventListener(key.type, key.listener);\n clear(key);\n }\n}\n//# sourceMappingURL=events.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Object\n */\nimport Event from './events/Event.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport Observable from './Observable.js';\nimport { assign, isEmpty } from './obj.js';\nimport { getUid } from './util.js';\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nvar ObjectEvent = /** @class */ (function (_super) {\n __extends(ObjectEvent, _super);\n /**\n * @param {string} type The event type.\n * @param {string} key The property name.\n * @param {*} oldValue The old value for `key`.\n */\n function ObjectEvent(type, key, oldValue) {\n var _this = _super.call(this, type) || this;\n /**\n * The name of the property whose value is changing.\n * @type {string}\n * @api\n */\n _this.key = key;\n /**\n * The old value. To get the new value use `e.target.get(e.key)` where\n * `e` is the event object.\n * @type {*}\n * @api\n */\n _this.oldValue = oldValue;\n return _this;\n }\n return ObjectEvent;\n}(Event));\nexport { ObjectEvent };\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires ObjectEvent\n * @api\n */\nvar BaseObject = /** @class */ (function (_super) {\n __extends(BaseObject, _super);\n /**\n * @param {Object<string, *>=} opt_values An object with key-value pairs.\n */\n function BaseObject(opt_values) {\n var _this = _super.call(this) || this;\n // Call {@link module:ol/util~getUid} to ensure that the order of objects' ids is\n // the same as the order in which they were created. This also helps to\n // ensure that object properties are always added in the same order, which\n // helps many JavaScript engines generate faster code.\n getUid(_this);\n /**\n * @private\n * @type {Object<string, *>}\n */\n _this.values_ = null;\n if (opt_values !== undefined) {\n _this.setProperties(opt_values);\n }\n return _this;\n }\n /**\n * Gets a value.\n * @param {string} key Key name.\n * @return {*} Value.\n * @api\n */\n BaseObject.prototype.get = function (key) {\n var value;\n if (this.values_ && this.values_.hasOwnProperty(key)) {\n value = this.values_[key];\n }\n return value;\n };\n /**\n * Get a list of object property names.\n * @return {Array<string>} List of property names.\n * @api\n */\n BaseObject.prototype.getKeys = function () {\n return (this.values_ && Object.keys(this.values_)) || [];\n };\n /**\n * Get an object of all property names and values.\n * @return {Object<string, *>} Object.\n * @api\n */\n BaseObject.prototype.getProperties = function () {\n return (this.values_ && assign({}, this.values_)) || {};\n };\n /**\n * @return {boolean} The object has properties.\n */\n BaseObject.prototype.hasProperties = function () {\n return !!this.values_;\n };\n /**\n * @param {string} key Key name.\n * @param {*} oldValue Old value.\n */\n BaseObject.prototype.notify = function (key, oldValue) {\n var eventType;\n eventType = getChangeEventType(key);\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n eventType = ObjectEventType.PROPERTYCHANGE;\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n };\n /**\n * Sets a value.\n * @param {string} key Key name.\n * @param {*} value Value.\n * @param {boolean=} opt_silent Update without triggering an event.\n * @api\n */\n BaseObject.prototype.set = function (key, value, opt_silent) {\n var values = this.values_ || (this.values_ = {});\n if (opt_silent) {\n values[key] = value;\n }\n else {\n var oldValue = values[key];\n values[key] = value;\n if (oldValue !== value) {\n this.notify(key, oldValue);\n }\n }\n };\n /**\n * Sets a collection of key-value pairs. Note that this changes any existing\n * properties and adds new ones (it does not remove any existing properties).\n * @param {Object<string, *>} values Values.\n * @param {boolean=} opt_silent Update without triggering an event.\n * @api\n */\n BaseObject.prototype.setProperties = function (values, opt_silent) {\n for (var key in values) {\n this.set(key, values[key], opt_silent);\n }\n };\n /**\n * Apply any properties from another object without triggering events.\n * @param {BaseObject} source The source object.\n * @protected\n */\n BaseObject.prototype.applyProperties = function (source) {\n if (!source.values_) {\n return;\n }\n assign(this.values_ || (this.values_ = {}), source.values_);\n };\n /**\n * Unsets a property.\n * @param {string} key Key name.\n * @param {boolean=} opt_silent Unset without triggering an event.\n * @api\n */\n BaseObject.prototype.unset = function (key, opt_silent) {\n if (this.values_ && key in this.values_) {\n var oldValue = this.values_[key];\n delete this.values_[key];\n if (isEmpty(this.values_)) {\n this.values_ = null;\n }\n if (!opt_silent) {\n this.notify(key, oldValue);\n }\n }\n };\n return BaseObject;\n}(Observable));\n/**\n * @type {Object<string, string>}\n */\nvar changeEventTypeCache = {};\n/**\n * @param {string} key Key name.\n * @return {string} Change name.\n */\nexport function getChangeEventType(key) {\n return changeEventTypeCache.hasOwnProperty(key)\n ? changeEventTypeCache[key]\n : (changeEventTypeCache[key] = 'change:' + key);\n}\nexport default BaseObject;\n//# sourceMappingURL=Object.js.map","/**\n * @module ol/functions\n */\nimport { equals as arrayEquals } from './array.js';\n/**\n * Always returns true.\n * @returns {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n/**\n * Always returns false.\n * @returns {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() { }\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n var called = false;\n /** @type {ReturnType} */\n var lastResult;\n /** @type {Array<any>} */\n var lastArgs;\n var lastThis;\n return function () {\n var nextArgs = Array.prototype.slice.call(arguments);\n if (!called || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n called = true;\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n//# sourceMappingURL=functions.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/Pointer\n */\nimport Interaction from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport { getValues } from '../obj.js';\n/**\n * @typedef {Object} Options\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleDownEvent]\n * Function handling \"down\" events. If the function returns `true` then a drag\n * sequence is started.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleDragEvent]\n * Function handling \"drag\" events. This function is called on \"move\" events\n * during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleEvent]\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. The function may return `false` to prevent the\n * propagation of the event to other interactions in the map's interactions\n * chain.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleMoveEvent]\n * Function handling \"move\" events. This function is called on \"move\" events.\n * This functions is also called during a drag sequence, so during a drag\n * sequence both the `handleDragEvent` function and this function are called.\n * If `handleDownEvent` is defined and it returns true this function will not\n * be called during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleUpEvent]\n * Function handling \"up\" events. If the function returns `false` then the\n * current drag sequence is stopped.\n * @property {function(boolean):boolean} [stopDown]\n * Should the down event be propagated to other interactions, or should be\n * stopped?\n */\n/**\n * @classdesc\n * Base class that calls user-defined functions on `down`, `move` and `up`\n * events. This class also manages \"drag sequences\".\n *\n * When the `handleDownEvent` user function returns `true` a drag sequence is\n * started. During a drag sequence the `handleDragEvent` user function is\n * called on `move` events. The drag sequence ends when the `handleUpEvent`\n * user function is called and returns `false`.\n * @api\n */\nvar PointerInteraction = /** @class */ (function (_super) {\n __extends(PointerInteraction, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function PointerInteraction(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, \n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)) || this;\n if (options.handleDownEvent) {\n _this.handleDownEvent = options.handleDownEvent;\n }\n if (options.handleDragEvent) {\n _this.handleDragEvent = options.handleDragEvent;\n }\n if (options.handleMoveEvent) {\n _this.handleMoveEvent = options.handleMoveEvent;\n }\n if (options.handleUpEvent) {\n _this.handleUpEvent = options.handleUpEvent;\n }\n if (options.stopDown) {\n _this.stopDown = options.stopDown;\n }\n /**\n * @type {boolean}\n * @protected\n */\n _this.handlingDownUpSequence = false;\n /**\n * @type {!Object<string, PointerEvent>}\n * @private\n */\n _this.trackedPointers_ = {};\n /**\n * @type {Array<PointerEvent>}\n * @protected\n */\n _this.targetPointers = [];\n return _this;\n }\n /**\n * Returns the current number of pointers involved in the interaction,\n * e.g. `2` when two fingers are used.\n * @return {number} The number of pointers.\n * @api\n */\n PointerInteraction.prototype.getPointerCount = function () {\n return this.targetPointers.length;\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n PointerInteraction.prototype.handleDownEvent = function (mapBrowserEvent) {\n return false;\n };\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n PointerInteraction.prototype.handleDragEvent = function (mapBrowserEvent) { };\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} and may call into\n * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are\n * detected.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n PointerInteraction.prototype.handleEvent = function (mapBrowserEvent) {\n if (!mapBrowserEvent.originalEvent) {\n return true;\n }\n var stopEvent = false;\n this.updateTrackedPointers_(mapBrowserEvent);\n if (this.handlingDownUpSequence) {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDRAG) {\n this.handleDragEvent(mapBrowserEvent);\n // prevent page scrolling during dragging\n mapBrowserEvent.originalEvent.preventDefault();\n }\n else if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n var handledUp = this.handleUpEvent(mapBrowserEvent);\n this.handlingDownUpSequence =\n handledUp && this.targetPointers.length > 0;\n }\n }\n else {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n var handled = this.handleDownEvent(mapBrowserEvent);\n this.handlingDownUpSequence = handled;\n stopEvent = this.stopDown(handled);\n }\n else if (mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE) {\n this.handleMoveEvent(mapBrowserEvent);\n }\n }\n return !stopEvent;\n };\n /**\n * Handle pointer move events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n PointerInteraction.prototype.handleMoveEvent = function (mapBrowserEvent) { };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n PointerInteraction.prototype.handleUpEvent = function (mapBrowserEvent) {\n return false;\n };\n /**\n * This function is used to determine if \"down\" events should be propagated\n * to other interactions or should be stopped.\n * @param {boolean} handled Was the event handled by the interaction?\n * @return {boolean} Should the `down` event be stopped?\n */\n PointerInteraction.prototype.stopDown = function (handled) {\n return handled;\n };\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @private\n */\n PointerInteraction.prototype.updateTrackedPointers_ = function (mapBrowserEvent) {\n if (isPointerDraggingEvent(mapBrowserEvent)) {\n var event_1 = mapBrowserEvent.originalEvent;\n var id = event_1.pointerId.toString();\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n delete this.trackedPointers_[id];\n }\n else if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n this.trackedPointers_[id] = event_1;\n }\n else if (id in this.trackedPointers_) {\n // update only when there was a pointerdown event for this pointer\n this.trackedPointers_[id] = event_1;\n }\n this.targetPointers = getValues(this.trackedPointers_);\n }\n };\n return PointerInteraction;\n}(Interaction));\n/**\n * @param {Array<PointerEvent>} pointerEvents List of events.\n * @return {import(\"../pixel.js\").Pixel} Centroid pixel.\n */\nexport function centroid(pointerEvents) {\n var length = pointerEvents.length;\n var clientX = 0;\n var clientY = 0;\n for (var i = 0; i < length; i++) {\n clientX += pointerEvents[i].clientX;\n clientY += pointerEvents[i].clientY;\n }\n return [clientX / length, clientY / length];\n}\n/**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} Whether the event is a pointerdown, pointerdrag\n * or pointerup event.\n */\nfunction isPointerDraggingEvent(mapBrowserEvent) {\n var type = mapBrowserEvent.type;\n return (type === MapBrowserEventType.POINTERDOWN ||\n type === MapBrowserEventType.POINTERDRAG ||\n type === MapBrowserEventType.POINTERUP);\n}\nexport default PointerInteraction;\n//# sourceMappingURL=Pointer.js.map","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","import { WORKER_OFFSCREEN_CANVAS } from './has.js';\n/**\n * @module ol/dom\n */\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number=} opt_width Canvas width.\n * @param {number=} opt_height Canvas height.\n * @param {Array<HTMLCanvasElement>=} opt_canvasPool Canvas pool to take existing canvas from.\n * @return {CanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(opt_width, opt_height, opt_canvasPool) {\n var canvas = opt_canvasPool && opt_canvasPool.length\n ? opt_canvasPool.shift()\n : WORKER_OFFSCREEN_CANVAS\n ? new OffscreenCanvas(opt_width || 300, opt_height || 300)\n : document.createElement('canvas');\n if (opt_width) {\n canvas.width = opt_width;\n }\n if (opt_height) {\n canvas.height = opt_height;\n }\n //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n return /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));\n}\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n var width = element.offsetWidth;\n var style = getComputedStyle(element);\n width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n return width;\n}\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n var height = element.offsetHeight;\n var style = getComputedStyle(element);\n height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n return height;\n}\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n var parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n}\n/**\n * @param {Node} node The node to remove.\n * @returns {Node} The node that was removed or null.\n */\nexport function removeNode(node) {\n return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n}\n/**\n * Transform the children of a parent node so they match the\n * provided list of children. This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array<Node>} children The desired children.\n */\nexport function replaceChildren(node, children) {\n var oldChildren = node.childNodes;\n for (var i = 0; true; ++i) {\n var oldChild = oldChildren[i];\n var newChild = children[i];\n // check if our work is done\n if (!oldChild && !newChild) {\n break;\n }\n // check if children match\n if (oldChild === newChild) {\n continue;\n }\n // check if a new child needs to be added\n if (!oldChild) {\n node.appendChild(newChild);\n continue;\n }\n // check if an old child needs to be removed\n if (!newChild) {\n node.removeChild(oldChild);\n --i;\n continue;\n }\n // reorder\n node.insertBefore(newChild, oldChild);\n }\n}\n//# sourceMappingURL=dom.js.map","/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport { FALSE, TRUE } from '../functions.js';\nimport { MAC, WEBKIT } from '../has.js';\nimport { assert } from '../asserts.js';\n/**\n * A function that takes an {@link module:ol/MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n var conditions = arguments;\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} All conditions passed.\n */\n return function (event) {\n var pass = true;\n for (var i = 0, ii = conditions.length; i < ii; ++i) {\n pass = pass && conditions[i](event);\n if (!pass) {\n break;\n }\n }\n return pass;\n };\n}\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport var altKeyOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport var altShiftKeysOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey);\n};\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `<div id=\"map\" tabindex=\"1\">`.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport var focus = function (event) {\n return event.target.getTargetElement().contains(document.activeElement);\n};\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport var focusWithTabindex = function (event) {\n return event.map.getTargetElement().hasAttribute('tabindex')\n ? focus(event)\n : true;\n};\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport var always = TRUE;\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport var click = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport var mouseActionButton = function (mapBrowserEvent) {\n var originalEvent = /** @type {MouseEvent} */ (mapBrowserEvent.originalEvent);\n return originalEvent.button == 0 && !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport var never = FALSE;\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport var pointerMove = function (mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport var singleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport var doubleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport var noModifierKeys = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (!originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport var platformModifierKeyOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (!originalEvent.altKey &&\n (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport var shiftKeyOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (!originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey);\n};\n/**\n * Return `true` if the target element is not editable, i.e. not a `<input>`-,\n * `<select>`- or `<textarea>`-element, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if the target element is not editable.\n * @api\n */\nexport var targetNotEditable = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n var tagName = /** @type {Element} */ (originalEvent.target).tagName;\n return tagName !== 'INPUT' && tagName !== 'SELECT' && tagName !== 'TEXTAREA';\n};\n/**\n * Return `true` if the event originates from a mouse device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a mouse device.\n * @api\n */\nexport var mouseOnly = function (mapBrowserEvent) {\n var pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (mapBrowserEvent)\n .originalEvent;\n assert(pointerEvent !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvent.pointerType == 'mouse';\n};\n/**\n * Return `true` if the event originates from a touchable device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a touchable device.\n * @api\n */\nexport var touchOnly = function (mapBrowserEvent) {\n var pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (mapBrowserEvent)\n .originalEvent;\n assert(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'touch';\n};\n/**\n * Return `true` if the event originates from a digital pen.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a digital pen.\n * @api\n */\nexport var penOnly = function (mapBrowserEvent) {\n var pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (mapBrowserEvent)\n .originalEvent;\n assert(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'pen';\n};\n/**\n * Return `true` if the event originates from a primary pointer in\n * contact with the surface or if the left mouse button is pressed.\n * See http://www.w3.org/TR/pointerevents/#button-states.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a primary pointer.\n * @api\n */\nexport var primaryAction = function (mapBrowserEvent) {\n var pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (mapBrowserEvent)\n .originalEvent;\n assert(pointerEvent !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n return pointerEvent.isPrimary && pointerEvent.button === 0;\n};\n//# sourceMappingURL=condition.js.map","define([\n\t\"../_base/lang\"\n], function(lang){\n\t\"use strict\";\n\n\t// module:\n\t//\t\tdojo/promise/Promise\n\n\tfunction throwAbstract(){\n\t\tthrow new TypeError(\"abstract\");\n\t}\n\n\treturn lang.extend(function Promise(){\n\t\t// summary:\n\t\t//\t\tThe public interface to a deferred.\n\t\t// description:\n\t\t//\t\tThe public interface to a deferred. All promises in Dojo are\n\t\t//\t\tinstances of this class.\n\t}, {\n\t\tthen: function(callback, errback, progback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd new callbacks to the promise.\n\t\t\t// description:\n\t\t\t//\t\tAdd new callbacks to the deferred. Callbacks can be added\n\t\t\t//\t\tbefore or after the deferred is fulfilled.\n\t\t\t// callback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is resolved.\n\t\t\t//\t\tReceives the resolution value.\n\t\t\t// errback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is rejected.\n\t\t\t//\t\tReceives the rejection error.\n\t\t\t// progback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise emits a progress\n\t\t\t//\t\tupdate. Receives the progress update.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the callback(s).\n\t\t\t//\t\tThis can be used for chaining many asynchronous operations.\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tcancel: function(reason, strict){\n\t\t\t// summary:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t// description:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t//\t\tThe deferred's (optional) canceler is invoked and the\n\t\t\t//\t\tdeferred will be left in a rejected state. Can affect other\n\t\t\t//\t\tpromises that originate with the same deferred.\n\t\t\t// reason: any\n\t\t\t//\t\tA message that may be sent to the deferred's canceler,\n\t\t\t//\t\texplaining why it's being canceled.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be canceled.\n\t\t\t// returns: any\n\t\t\t//\t\tReturns the rejection reason if the deferred was canceled\n\t\t\t//\t\tnormally.\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisResolved: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been resolved.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisRejected: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been rejected.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisFulfilled: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been resolved or rejected.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisCanceled: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been canceled.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\t\"finally\": function(callback) {\n\t\t\t// summary:\n\t\t\t//\t\tAdd a callback to the promise that will fire whether it\n\t\t\t//\t\tresolves or rejects.\n\t\t\t// description:\n\t\t\t//\t\tConforms to ES2018's `Promise.prototype.finally`.\n\t\t\t//\t\tAdd a callback to the promise that will fire whether it\n\t\t\t//\t\tresolves or rejects. No value is passed to the callback.\n\t\t\t//\t\tReturns a promise that reflects the state of the original promise,\n\t\t\t//\t\twith two exceptions:\n\t\t\t//\t\t- If the callback return a promise, the outer promise will wait\n\t\t\t//\t\tuntil the returned promise is resolved, then it will resolve\n\t\t\t//\t\twith the original value.\n\t\t\t//\t\t- If the callback throws an exception or returns a promise that\n\t\t\t//\t\tis rejected (or rejects later), the outer promise will reject\n\t\t\t//\t\twith the inner promise's rejection reason.\n\t\t\t// callback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is resolved\n\t\t\t//\t\tor rejected. Doesn't receive any value.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise that reflects the state of the original promise,\n\t\t\t//\t\twith two small exceptions (see description).\n\t\t\t//\n\n\t\t\treturn this.then(function (value){\n\t\t\t\tvar valueOrPromise = callback();\n\t\t\t\tif (valueOrPromise && typeof valueOrPromise.then === \"function\"){\n\t\t\t\t\treturn valueOrPromise.then(function (){\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}, function(reason) {\n\t\t\t\tvar valueOrPromise = callback();\n\t\t\t\tif (valueOrPromise && typeof valueOrPromise.then === \"function\"){\n\t\t\t\t\treturn valueOrPromise.then(function (){\n\t\t\t\t\t\tthrow reason;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow reason;\n\t\t\t});\n\t\t},\n\n\t\talways: function(callbackOrErrback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd a callback to be invoked when the promise is resolved\n\t\t\t//\t\tor rejected.\n\t\t\t// callbackOrErrback: Function?\n\t\t\t//\t\tA function that is used both as a callback and errback.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the callback/errback.\n\n\t\t\treturn this.then(callbackOrErrback, callbackOrErrback);\n\t\t},\n\n\t\t\"catch\": function(errback){\n\t\t // summary:\n\t\t //\t\tAdd new errbacks to the promise. Follows ECMA specification naming.\n\t\t // errback: Function?\n\t\t //\t\tCallback to be invoked when the promise is rejected.\n\t\t // returns: dojo/promise/Promise\n\t\t //\t\tReturns a new promise for the result of the errback.\n\n\t\t return this.then(null, errback);\n\t\t},\n\n\t\totherwise: function(errback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd new errbacks to the promise.\n\t\t\t// errback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is rejected.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the errback.\n\n\t\t\treturn this.then(null, errback);\n\t\t},\n\n\t\ttrace: function(){\n\t\t\treturn this;\n\t\t},\n\n\t\ttraceRejected: function(){\n\t\t\treturn this;\n\t\t},\n\n\t\ttoString: function(){\n\t\t\t// returns: string\n\t\t\t//\t\tReturns `[object Promise]`.\n\n\t\t\treturn \"[object Promise]\";\n\t\t}\n\t});\n});\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Collection\n */\nimport AssertionError from './AssertionError.js';\nimport BaseObject from './Object.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport Event from './events/Event.js';\n/**\n * @enum {string}\n * @private\n */\nvar Property = {\n LENGTH: 'length',\n};\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n */\nvar CollectionEvent = /** @class */ (function (_super) {\n __extends(CollectionEvent, _super);\n /**\n * @param {import(\"./CollectionEventType.js\").default} type Type.\n * @param {*=} opt_element Element.\n * @param {number=} opt_index The index of the added or removed element.\n */\n function CollectionEvent(type, opt_element, opt_index) {\n var _this = _super.call(this, type) || this;\n /**\n * The element that is added to or removed from the collection.\n * @type {*}\n * @api\n */\n _this.element = opt_element;\n /**\n * The index of the added or removed element.\n * @type {number}\n * @api\n */\n _this.index = opt_index;\n return _this;\n }\n return CollectionEvent;\n}(Event));\nexport { CollectionEvent };\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @fires CollectionEvent\n *\n * @template T\n * @api\n */\nvar Collection = /** @class */ (function (_super) {\n __extends(Collection, _super);\n /**\n * @param {Array<T>=} opt_array Array.\n * @param {Options=} opt_options Collection options.\n */\n function Collection(opt_array, opt_options) {\n var _this = _super.call(this) || this;\n var options = opt_options || {};\n /**\n * @private\n * @type {boolean}\n */\n _this.unique_ = !!options.unique;\n /**\n * @private\n * @type {!Array<T>}\n */\n _this.array_ = opt_array ? opt_array : [];\n if (_this.unique_) {\n for (var i = 0, ii = _this.array_.length; i < ii; ++i) {\n _this.assertUnique_(_this.array_[i], i);\n }\n }\n _this.updateLength_();\n return _this;\n }\n /**\n * Remove all elements from the collection.\n * @api\n */\n Collection.prototype.clear = function () {\n while (this.getLength() > 0) {\n this.pop();\n }\n };\n /**\n * Add elements to the collection. This pushes each item in the provided array\n * to the end of the collection.\n * @param {!Array<T>} arr Array.\n * @return {Collection<T>} This collection.\n * @api\n */\n Collection.prototype.extend = function (arr) {\n for (var i = 0, ii = arr.length; i < ii; ++i) {\n this.push(arr[i]);\n }\n return this;\n };\n /**\n * Iterate over each element, calling the provided callback.\n * @param {function(T, number, Array<T>): *} f The function to call\n * for every element. This function takes 3 arguments (the element, the\n * index and the array). The return value is ignored.\n * @api\n */\n Collection.prototype.forEach = function (f) {\n var array = this.array_;\n for (var i = 0, ii = array.length; i < ii; ++i) {\n f(array[i], i, array);\n }\n };\n /**\n * Get a reference to the underlying Array object. Warning: if the array\n * is mutated, no events will be dispatched by the collection, and the\n * collection's \"length\" property won't be in sync with the actual length\n * of the array.\n * @return {!Array<T>} Array.\n * @api\n */\n Collection.prototype.getArray = function () {\n return this.array_;\n };\n /**\n * Get the element at the provided index.\n * @param {number} index Index.\n * @return {T} Element.\n * @api\n */\n Collection.prototype.item = function (index) {\n return this.array_[index];\n };\n /**\n * Get the length of this collection.\n * @return {number} The length of the array.\n * @observable\n * @api\n */\n Collection.prototype.getLength = function () {\n return this.get(Property.LENGTH);\n };\n /**\n * Insert an element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n Collection.prototype.insertAt = function (index, elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n this.array_.splice(index, 0, elem);\n this.updateLength_();\n this.dispatchEvent(new CollectionEvent(CollectionEventType.ADD, elem, index));\n };\n /**\n * Remove the last element of the collection and return it.\n * Return `undefined` if the collection is empty.\n * @return {T|undefined} Element.\n * @api\n */\n Collection.prototype.pop = function () {\n return this.removeAt(this.getLength() - 1);\n };\n /**\n * Insert the provided element at the end of the collection.\n * @param {T} elem Element.\n * @return {number} New length of the collection.\n * @api\n */\n Collection.prototype.push = function (elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n var n = this.getLength();\n this.insertAt(n, elem);\n return this.getLength();\n };\n /**\n * Remove the first occurrence of an element from the collection.\n * @param {T} elem Element.\n * @return {T|undefined} The removed element or undefined if none found.\n * @api\n */\n Collection.prototype.remove = function (elem) {\n var arr = this.array_;\n for (var i = 0, ii = arr.length; i < ii; ++i) {\n if (arr[i] === elem) {\n return this.removeAt(i);\n }\n }\n return undefined;\n };\n /**\n * Remove the element at the provided index and return it.\n * Return `undefined` if the collection does not contain this index.\n * @param {number} index Index.\n * @return {T|undefined} Value.\n * @api\n */\n Collection.prototype.removeAt = function (index) {\n var prev = this.array_[index];\n this.array_.splice(index, 1);\n this.updateLength_();\n this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev, index));\n return prev;\n };\n /**\n * Set the element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n Collection.prototype.setAt = function (index, elem) {\n var n = this.getLength();\n if (index < n) {\n if (this.unique_) {\n this.assertUnique_(elem, index);\n }\n var prev = this.array_[index];\n this.array_[index] = elem;\n this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev, index));\n this.dispatchEvent(new CollectionEvent(CollectionEventType.ADD, elem, index));\n }\n else {\n for (var j = n; j < index; ++j) {\n this.insertAt(j, undefined);\n }\n this.insertAt(index, elem);\n }\n };\n /**\n * @private\n */\n Collection.prototype.updateLength_ = function () {\n this.set(Property.LENGTH, this.array_.length);\n };\n /**\n * @private\n * @param {T} elem Element.\n * @param {number=} opt_except Optional index to ignore.\n */\n Collection.prototype.assertUnique_ = function (elem, opt_except) {\n for (var i = 0, ii = this.array_.length; i < ii; ++i) {\n if (this.array_[i] === elem && i !== opt_except) {\n throw new AssertionError(58);\n }\n }\n };\n return Collection;\n}(BaseObject));\nexport default Collection;\n//# sourceMappingURL=Collection.js.map","/**\n * @module ol/events/Event\n */\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nvar BaseEvent = /** @class */ (function () {\n /**\n * @param {string} type Type.\n */\n function BaseEvent(type) {\n /**\n * @type {boolean}\n */\n this.propagationStopped;\n /**\n * The event type.\n * @type {string}\n * @api\n */\n this.type = type;\n /**\n * The event target.\n * @type {Object}\n * @api\n */\n this.target = null;\n }\n /**\n * Stop event propagation.\n * @api\n */\n BaseEvent.prototype.preventDefault = function () {\n this.propagationStopped = true;\n };\n /**\n * Stop event propagation.\n * @api\n */\n BaseEvent.prototype.stopPropagation = function () {\n this.propagationStopped = true;\n };\n return BaseEvent;\n}());\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function stopPropagation(evt) {\n evt.stopPropagation();\n}\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function preventDefault(evt) {\n evt.preventDefault();\n}\nexport default BaseEvent;\n//# sourceMappingURL=Event.js.map","/**\n * @module ol/style/RegularShape\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport ImageState from '../ImageState.js';\nimport ImageStyle from './Image.js';\nimport { asArray } from '../color.js';\nimport { asColorLike } from '../colorlike.js';\nimport { createCanvasContext2D } from '../dom.js';\nimport { defaultFillStyle, defaultLineCap, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, } from '../render/canvas.js';\n/**\n * Specify radius for regular polygons, or radius1 and radius2 for stars.\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} points Number of points for stars and regular polygons. In case of a polygon, the number of points\n * is the number of sides.\n * @property {number} [radius] Radius of a regular polygon.\n * @property {number} [radius1] Outer radius of a star.\n * @property {number} [radius2] Inner radius of a star.\n * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up.\n * @property {Array<number>} [displacement=[0,0]] Displacement of the shape\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. Unless two dimensional scaling is required a better\n * result may be obtained with appropriate settings for `radius`, `radius1` and `radius2`.\n */\n/**\n * @typedef {Object} RenderOptions\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle]\n * @property {number} strokeWidth\n * @property {number} size\n * @property {CanvasLineCap} lineCap\n * @property {Array<number>} lineDash\n * @property {number} lineDashOffset\n * @property {CanvasLineJoin} lineJoin\n * @property {number} miterLimit\n */\n/**\n * @classdesc\n * Set regular shape style for vector features. The resulting shape will be\n * a regular polygon when `radius` is provided, or a star when `radius1` and\n * `radius2` are provided.\n * @api\n */\nvar RegularShape = /** @class */ (function (_super) {\n __extends(RegularShape, _super);\n /**\n * @param {Options} options Options.\n */\n function RegularShape(options) {\n var _this = this;\n /**\n * @type {boolean}\n */\n var rotateWithView = options.rotateWithView !== undefined ? options.rotateWithView : false;\n _this = _super.call(this, {\n opacity: 1,\n rotateWithView: rotateWithView,\n rotation: options.rotation !== undefined ? options.rotation : 0,\n scale: options.scale !== undefined ? options.scale : 1,\n displacement: options.displacement !== undefined ? options.displacement : [0, 0],\n }) || this;\n /**\n * @private\n * @type {Object<number, HTMLCanvasElement>}\n */\n _this.canvas_ = {};\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n _this.hitDetectionCanvas_ = null;\n /**\n * @private\n * @type {import(\"./Fill.js\").default}\n */\n _this.fill_ = options.fill !== undefined ? options.fill : null;\n /**\n * @private\n * @type {Array<number>}\n */\n _this.origin_ = [0, 0];\n /**\n * @private\n * @type {number}\n */\n _this.points_ = options.points;\n /**\n * @protected\n * @type {number}\n */\n _this.radius_ =\n options.radius !== undefined ? options.radius : options.radius1;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.radius2_ = options.radius2;\n /**\n * @private\n * @type {number}\n */\n _this.angle_ = options.angle !== undefined ? options.angle : 0;\n /**\n * @private\n * @type {import(\"./Stroke.js\").default}\n */\n _this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n /**\n * @private\n * @type {Array<number>}\n */\n _this.anchor_ = null;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n _this.size_ = null;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n _this.imageSize_ = null;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n _this.hitDetectionImageSize_ = null;\n _this.render();\n return _this;\n }\n /**\n * Clones the style.\n * @return {RegularShape} The cloned style.\n * @api\n */\n RegularShape.prototype.clone = function () {\n var scale = this.getScale();\n var style = new RegularShape({\n fill: this.getFill() ? this.getFill().clone() : undefined,\n points: this.getPoints(),\n radius: this.getRadius(),\n radius2: this.getRadius2(),\n angle: this.getAngle(),\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n displacement: this.getDisplacement().slice(),\n });\n style.setOpacity(this.getOpacity());\n return style;\n };\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @return {Array<number>} Anchor.\n * @api\n */\n RegularShape.prototype.getAnchor = function () {\n return this.anchor_;\n };\n /**\n * Get the angle used in generating the shape.\n * @return {number} Shape's rotation in radians.\n * @api\n */\n RegularShape.prototype.getAngle = function () {\n return this.angle_;\n };\n /**\n * Get the fill style for the shape.\n * @return {import(\"./Fill.js\").default} Fill style.\n * @api\n */\n RegularShape.prototype.getFill = function () {\n return this.fill_;\n };\n /**\n * @return {HTMLCanvasElement} Image element.\n */\n RegularShape.prototype.getHitDetectionImage = function () {\n if (!this.hitDetectionCanvas_) {\n var renderOptions = this.createRenderOptions();\n this.createHitDetectionCanvas_(renderOptions);\n }\n return this.hitDetectionCanvas_;\n };\n /**\n * Get the image icon.\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement} Image or Canvas element.\n * @api\n */\n RegularShape.prototype.getImage = function (pixelRatio) {\n if (!this.canvas_[pixelRatio || 1]) {\n var renderOptions = this.createRenderOptions();\n var context = createCanvasContext2D(renderOptions.size * pixelRatio || 1, renderOptions.size * pixelRatio || 1);\n this.draw_(renderOptions, context, 0, 0, pixelRatio || 1);\n this.canvas_[pixelRatio || 1] = context.canvas;\n }\n return this.canvas_[pixelRatio || 1];\n };\n /*\n * Get the image pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * */\n RegularShape.prototype.getPixelRatio = function (pixelRatio) {\n return pixelRatio;\n };\n /**\n * @return {import(\"../size.js\").Size} Image size.\n */\n RegularShape.prototype.getImageSize = function () {\n return this.imageSize_;\n };\n /**\n * @return {import(\"../size.js\").Size} Size of the hit-detection image.\n */\n RegularShape.prototype.getHitDetectionImageSize = function () {\n return this.hitDetectionImageSize_;\n };\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n RegularShape.prototype.getImageState = function () {\n return ImageState.LOADED;\n };\n /**\n * Get the origin of the symbolizer.\n * @return {Array<number>} Origin.\n * @api\n */\n RegularShape.prototype.getOrigin = function () {\n return this.origin_;\n };\n /**\n * Get the number of points for generating the shape.\n * @return {number} Number of points for stars and regular polygons.\n * @api\n */\n RegularShape.prototype.getPoints = function () {\n return this.points_;\n };\n /**\n * Get the (primary) radius for the shape.\n * @return {number} Radius.\n * @api\n */\n RegularShape.prototype.getRadius = function () {\n return this.radius_;\n };\n /**\n * Get the secondary radius for the shape.\n * @return {number|undefined} Radius2.\n * @api\n */\n RegularShape.prototype.getRadius2 = function () {\n return this.radius2_;\n };\n /**\n * Get the size of the symbolizer (in pixels).\n * @return {import(\"../size.js\").Size} Size.\n * @api\n */\n RegularShape.prototype.getSize = function () {\n return this.size_;\n };\n /**\n * Get the stroke style for the shape.\n * @return {import(\"./Stroke.js\").default} Stroke style.\n * @api\n */\n RegularShape.prototype.getStroke = function () {\n return this.stroke_;\n };\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n RegularShape.prototype.listenImageChange = function (listener) { };\n /**\n * Load not yet loaded URI.\n */\n RegularShape.prototype.load = function () { };\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n RegularShape.prototype.unlistenImageChange = function (listener) { };\n /**\n * @returns {RenderOptions} The render options\n * @protected\n */\n RegularShape.prototype.createRenderOptions = function () {\n var lineCap = defaultLineCap;\n var lineJoin = defaultLineJoin;\n var miterLimit = 0;\n var lineDash = null;\n var lineDashOffset = 0;\n var strokeStyle;\n var strokeWidth = 0;\n if (this.stroke_) {\n strokeStyle = this.stroke_.getColor();\n if (strokeStyle === null) {\n strokeStyle = defaultStrokeStyle;\n }\n strokeStyle = asColorLike(strokeStyle);\n strokeWidth = this.stroke_.getWidth();\n if (strokeWidth === undefined) {\n strokeWidth = defaultLineWidth;\n }\n lineDash = this.stroke_.getLineDash();\n lineDashOffset = this.stroke_.getLineDashOffset();\n lineJoin = this.stroke_.getLineJoin();\n if (lineJoin === undefined) {\n lineJoin = defaultLineJoin;\n }\n lineCap = this.stroke_.getLineCap();\n if (lineCap === undefined) {\n lineCap = defaultLineCap;\n }\n miterLimit = this.stroke_.getMiterLimit();\n if (miterLimit === undefined) {\n miterLimit = defaultMiterLimit;\n }\n }\n var size = 2 * (this.radius_ + strokeWidth) + 1;\n return {\n strokeStyle: strokeStyle,\n strokeWidth: strokeWidth,\n size: size,\n lineCap: lineCap,\n lineDash: lineDash,\n lineDashOffset: lineDashOffset,\n lineJoin: lineJoin,\n miterLimit: miterLimit,\n };\n };\n /**\n * @protected\n */\n RegularShape.prototype.render = function () {\n var renderOptions = this.createRenderOptions();\n var context = createCanvasContext2D(renderOptions.size, renderOptions.size);\n this.draw_(renderOptions, context, 0, 0, 1);\n this.canvas_ = {};\n this.canvas_[1] = context.canvas;\n // canvas.width and height are rounded to the closest integer\n var size = context.canvas.width;\n var imageSize = size;\n var displacement = this.getDisplacement();\n this.hitDetectionImageSize_ = [renderOptions.size, renderOptions.size];\n this.createHitDetectionCanvas_(renderOptions);\n this.anchor_ = [size / 2 - displacement[0], size / 2 + displacement[1]];\n this.size_ = [size, size];\n this.imageSize_ = [imageSize, imageSize];\n };\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The rendering context.\n * @param {number} x The origin for the symbol (x).\n * @param {number} y The origin for the symbol (y).\n * @param {number} pixelRatio The pixel ratio.\n */\n RegularShape.prototype.draw_ = function (renderOptions, context, x, y, pixelRatio) {\n var i, angle0, radiusC;\n // reset transform\n context.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n // then move to (x, y)\n context.translate(x, y);\n context.beginPath();\n var points = this.points_;\n if (points === Infinity) {\n context.arc(renderOptions.size / 2, renderOptions.size / 2, this.radius_, 0, 2 * Math.PI, true);\n }\n else {\n var radius2 = this.radius2_ !== undefined ? this.radius2_ : this.radius_;\n if (radius2 !== this.radius_) {\n points = 2 * points;\n }\n for (i = 0; i <= points; i++) {\n angle0 = (i * 2 * Math.PI) / points - Math.PI / 2 + this.angle_;\n radiusC = i % 2 === 0 ? this.radius_ : radius2;\n context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0), renderOptions.size / 2 + radiusC * Math.sin(angle0));\n }\n }\n if (this.fill_) {\n var color = this.fill_.getColor();\n if (color === null) {\n color = defaultFillStyle;\n }\n context.fillStyle = asColorLike(color);\n context.fill();\n }\n if (this.stroke_) {\n context.strokeStyle = renderOptions.strokeStyle;\n context.lineWidth = renderOptions.strokeWidth;\n if (context.setLineDash && renderOptions.lineDash) {\n context.setLineDash(renderOptions.lineDash);\n context.lineDashOffset = renderOptions.lineDashOffset;\n }\n context.lineCap = renderOptions.lineCap;\n context.lineJoin = renderOptions.lineJoin;\n context.miterLimit = renderOptions.miterLimit;\n context.stroke();\n }\n context.closePath();\n };\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n */\n RegularShape.prototype.createHitDetectionCanvas_ = function (renderOptions) {\n this.hitDetectionCanvas_ = this.getImage(1);\n if (this.fill_) {\n var color = this.fill_.getColor();\n // determine if fill is transparent (or pattern or gradient)\n var opacity = 0;\n if (typeof color === 'string') {\n color = asArray(color);\n }\n if (color === null) {\n opacity = 1;\n }\n else if (Array.isArray(color)) {\n opacity = color.length === 4 ? color[3] : 1;\n }\n if (opacity === 0) {\n // if a transparent fill style is set, create an extra hit-detection image\n // with a default fill style\n var context = createCanvasContext2D(renderOptions.size, renderOptions.size);\n this.hitDetectionCanvas_ = context.canvas;\n this.drawHitDetectionCanvas_(renderOptions, context, 0, 0);\n }\n }\n };\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The context.\n * @param {number} x The origin for the symbol (x).\n * @param {number} y The origin for the symbol (y).\n */\n RegularShape.prototype.drawHitDetectionCanvas_ = function (renderOptions, context, x, y) {\n // move to (x, y)\n context.translate(x, y);\n context.beginPath();\n var points = this.points_;\n if (points === Infinity) {\n context.arc(renderOptions.size / 2, renderOptions.size / 2, this.radius_, 0, 2 * Math.PI, true);\n }\n else {\n var radius2 = this.radius2_ !== undefined ? this.radius2_ : this.radius_;\n if (radius2 !== this.radius_) {\n points = 2 * points;\n }\n var i = void 0, radiusC = void 0, angle0 = void 0;\n for (i = 0; i <= points; i++) {\n angle0 = (i * 2 * Math.PI) / points - Math.PI / 2 + this.angle_;\n radiusC = i % 2 === 0 ? this.radius_ : radius2;\n context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0), renderOptions.size / 2 + radiusC * Math.sin(angle0));\n }\n }\n context.fillStyle = defaultFillStyle;\n context.fill();\n if (this.stroke_) {\n context.strokeStyle = renderOptions.strokeStyle;\n context.lineWidth = renderOptions.strokeWidth;\n if (renderOptions.lineDash) {\n context.setLineDash(renderOptions.lineDash);\n context.lineDashOffset = renderOptions.lineDashOffset;\n }\n context.stroke();\n }\n context.closePath();\n };\n return RegularShape;\n}(ImageStyle));\nexport default RegularShape;\n//# sourceMappingURL=RegularShape.js.map","define([\"./create\"], function(create){\n\t// module:\n\t//\t\tdojo/errors/CancelError\n\n\t/*=====\n\treturn function(){\n\t\t// summary:\n\t\t//\t\tDefault error if a promise is canceled without a reason.\n\t};\n\t=====*/\n\n\treturn create(\"CancelError\", null, null, { dojoType: \"cancel\", log: false });\n});\n","define([\"./kernel\", \"./config\", /*===== \"./declare\", =====*/ \"./lang\", \"../Evented\", \"./Color\", \"../aspect\", \"../sniff\", \"../dom\", \"../dom-style\"],\n\tfunction(dojo, config, /*===== declare, =====*/ lang, Evented, Color, aspect, has, dom, style){\n\t// module:\n\t//\t\tdojo/_base/fx\n\t// notes:\n\t//\t\tAnimation loosely package based on Dan Pupius' work, contributed under CLA; see\n\t//\t\thttp://pupius.co.uk/js/Toolkit.Drawing.js\n\n\tvar _mixin = lang.mixin;\n\n\t// Module export\n\tvar basefx = {\n\t\t// summary:\n\t\t//\t\tThis module defines the base dojo/_base/fx implementation.\n\t};\n\n\tvar _Line = basefx._Line = function(/*int*/ start, /*int*/ end){\n\t\t// summary:\n\t\t//\t\tObject used to generate values from a start value to an end value\n\t\t// start: int\n\t\t//\t\tBeginning value for range\n\t\t// end: int\n\t\t//\t\tEnding value for range\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t};\n\n\t_Line.prototype.getValue = function(/*float*/ n){\n\t\t// summary:\n\t\t//\t\tReturns the point on the line\n\t\t// n:\n\t\t//\t\ta floating point number greater than 0 and less than 1\n\t\treturn ((this.end - this.start) * n) + this.start; // Decimal\n\t};\n\n\tvar Animation = basefx.Animation = function(args){\n\t\t// summary:\n\t\t//\t\tA generic animation class that fires callbacks into its handlers\n\t\t//\t\tobject at various states.\n\t\t// description:\n\t\t//\t\tA generic animation class that fires callbacks into its handlers\n\t\t//\t\tobject at various states. Nearly all dojo animation functions\n\t\t//\t\treturn an instance of this method, usually without calling the\n\t\t//\t\t.play() method beforehand. Therefore, you will likely need to\n\t\t//\t\tcall .play() on instances of `Animation` when one is\n\t\t//\t\treturned.\n\t\t// args: Object\n\t\t//\t\tThe 'magic argument', mixing all the properties into this\n\t\t//\t\tanimation instance.\n\n\t\t_mixin(this, args);\n\t\tif(lang.isArray(this.curve)){\n\t\t\tthis.curve = new _Line(this.curve[0], this.curve[1]);\n\t\t}\n\n\t};\n\tAnimation.prototype = new Evented();\n\n\tlang.extend(Animation, {\n\t\t// duration: Integer\n\t\t//\t\tThe time in milliseconds the animation will take to run\n\t\tduration: 350,\n\n\t/*=====\n\t\t// curve: _Line|Array\n\t\t//\t\tA two element array of start and end values, or a `_Line` instance to be\n\t\t//\t\tused in the Animation.\n\t\tcurve: null,\n\n\t\t// easing: Function?\n\t\t//\t\tA Function to adjust the acceleration (or deceleration) of the progress\n\t\t//\t\tacross a _Line\n\t\teasing: null,\n\t=====*/\n\n\t\t// repeat: Integer?\n\t\t//\t\tThe number of times to loop the animation\n\t\trepeat: 0,\n\n\t\t// rate: Integer?\n\t\t//\t\tthe time in milliseconds to wait before advancing to next frame\n\t\t//\t\t(used as a fps timer: 1000/rate = fps)\n\t\trate: 20 /* 50 fps */,\n\n\t/*=====\n\t\t// delay: Integer?\n\t\t//\t\tThe time in milliseconds to wait before starting animation after it\n\t\t//\t\thas been .play()'ed\n\t\tdelay: null,\n\n\t\t// beforeBegin: Event?\n\t\t//\t\tSynthetic event fired before a Animation begins playing (synchronous)\n\t\tbeforeBegin: null,\n\n\t\t// onBegin: Event?\n\t\t//\t\tSynthetic event fired as a Animation begins playing (useful?)\n\t\tonBegin: null,\n\n\t\t// onAnimate: Event?\n\t\t//\t\tSynthetic event fired at each interval of the Animation\n\t\tonAnimate: null,\n\n\t\t// onEnd: Event?\n\t\t//\t\tSynthetic event fired after the final frame of the Animation\n\t\tonEnd: null,\n\n\t\t// onPlay: Event?\n\t\t//\t\tSynthetic event fired any time the Animation is play()'ed\n\t\tonPlay: null,\n\n\t\t// onPause: Event?\n\t\t//\t\tSynthetic event fired when the Animation is paused\n\t\tonPause: null,\n\n\t\t// onStop: Event\n\t\t//\t\tSynthetic event fires when the Animation is stopped\n\t\tonStop: null,\n\n\t=====*/\n\n\t\t_percent: 0,\n\t\t_startRepeatCount: 0,\n\n\t\t_getStep: function(){\n\t\t\tvar _p = this._percent,\n\t\t\t\t_e = this.easing\n\t\t\t;\n\t\t\treturn _e ? _e(_p) : _p;\n\t\t},\n\t\t_fire: function(/*Event*/ evt, /*Array?*/ args){\n\t\t\t// summary:\n\t\t\t//\t\tConvenience function. Fire event \"evt\" and pass it the\n\t\t\t//\t\targuments specified in \"args\".\n\t\t\t// description:\n\t\t\t//\t\tConvenience function. Fire event \"evt\" and pass it the\n\t\t\t//\t\targuments specified in \"args\".\n\t\t\t//\t\tFires the callback in the scope of this Animation\n\t\t\t//\t\tinstance.\n\t\t\t// evt:\n\t\t\t//\t\tThe event to fire.\n\t\t\t// args:\n\t\t\t//\t\tThe arguments to pass to the event.\n\t\t\tvar a = args||[];\n\t\t\tif(this[evt]){\n\t\t\t\tif(config.debugAtAllCosts){\n\t\t\t\t\tthis[evt].apply(this, a);\n\t\t\t\t}else{\n\t\t\t\t\ttry{\n\t\t\t\t\t\tthis[evt].apply(this, a);\n\t\t\t\t\t}catch(e){\n\t\t\t\t\t\t// squelch and log because we shouldn't allow exceptions in\n\t\t\t\t\t\t// synthetic event handlers to cause the internal timer to run\n\t\t\t\t\t\t// amuck, potentially pegging the CPU. I'm not a fan of this\n\t\t\t\t\t\t// squelch, but hopefully logging will make it clear what's\n\t\t\t\t\t\t// going on\n\t\t\t\t\t\tconsole.error(\"exception in animation handler for:\", evt);\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this; // Animation\n\t\t},\n\n\t\tplay: function(/*int?*/ delay, /*Boolean?*/ gotoStart){\n\t\t\t// summary:\n\t\t\t//\t\tStart the animation.\n\t\t\t// delay:\n\t\t\t//\t\tHow many milliseconds to delay before starting.\n\t\t\t// gotoStart:\n\t\t\t//\t\tIf true, starts the animation from the beginning; otherwise,\n\t\t\t//\t\tstarts it from its current position.\n\t\t\t// returns: Animation\n\t\t\t//\t\tThe instance to allow chaining.\n\n\t\t\tvar _t = this;\n\t\t\tif(_t._delayTimer){ _t._clearTimer(); }\n\t\t\tif(gotoStart){\n\t\t\t\t_t._stopTimer();\n\t\t\t\t_t._active = _t._paused = false;\n\t\t\t\t_t._percent = 0;\n\t\t\t}else if(_t._active && !_t._paused){\n\t\t\t\treturn _t;\n\t\t\t}\n\n\t\t\t_t._fire(\"beforeBegin\", [_t.node]);\n\n\t\t\tvar de = delay || _t.delay,\n\t\t\t\t_p = lang.hitch(_t, \"_play\", gotoStart);\n\n\t\t\tif(de > 0){\n\t\t\t\t_t._delayTimer = setTimeout(_p, de);\n\t\t\t\treturn _t;\n\t\t\t}\n\t\t\t_p();\n\t\t\treturn _t;\t// Animation\n\t\t},\n\n\t\t_play: function(gotoStart){\n\t\t\tvar _t = this;\n\t\t\tif(_t._delayTimer){ _t._clearTimer(); }\n\t\t\t_t._startTime = new Date().valueOf();\n\t\t\tif(_t._paused){\n\t\t\t\t_t._startTime -= _t.duration * _t._percent;\n\t\t\t}\n\n\t\t\t_t._active = true;\n\t\t\t_t._paused = false;\n\t\t\tvar value = _t.curve.getValue(_t._getStep());\n\t\t\tif(!_t._percent){\n\t\t\t\tif(!_t._startRepeatCount){\n\t\t\t\t\t_t._startRepeatCount = _t.repeat;\n\t\t\t\t}\n\t\t\t\t_t._fire(\"onBegin\", [value]);\n\t\t\t}\n\n\t\t\t_t._fire(\"onPlay\", [value]);\n\n\t\t\t_t._cycle();\n\t\t\treturn _t; // Animation\n\t\t},\n\n\t\tpause: function(){\n\t\t\t// summary:\n\t\t\t//\t\tPauses a running animation.\n\t\t\tvar _t = this;\n\t\t\tif(_t._delayTimer){ _t._clearTimer(); }\n\t\t\t_t._stopTimer();\n\t\t\tif(!_t._active){ return _t; /*Animation*/ }\n\t\t\t_t._paused = true;\n\t\t\t_t._fire(\"onPause\", [_t.curve.getValue(_t._getStep())]);\n\t\t\treturn _t; // Animation\n\t\t},\n\n\t\tgotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){\n\t\t\t// summary:\n\t\t\t//\t\tSets the progress of the animation.\n\t\t\t// percent:\n\t\t\t//\t\tA percentage in decimal notation (between and including 0.0 and 1.0).\n\t\t\t// andPlay:\n\t\t\t//\t\tIf true, play the animation after setting the progress.\n\t\t\tvar _t = this;\n\t\t\t_t._stopTimer();\n\t\t\t_t._active = _t._paused = true;\n\t\t\t_t._percent = percent;\n\t\t\tif(andPlay){ _t.play(); }\n\t\t\treturn _t; // Animation\n\t\t},\n\n\t\tstop: function(/*boolean?*/ gotoEnd){\n\t\t\t// summary:\n\t\t\t//\t\tStops a running animation.\n\t\t\t// gotoEnd:\n\t\t\t//\t\tIf true, the animation will end.\n\t\t\tvar _t = this;\n\t\t\tif(_t._delayTimer){ _t._clearTimer(); }\n\t\t\tif(!_t._timer){ return _t; /* Animation */ }\n\t\t\t_t._stopTimer();\n\t\t\tif(gotoEnd){\n\t\t\t\t_t._percent = 1;\n\t\t\t}\n\t\t\t_t._fire(\"onStop\", [_t.curve.getValue(_t._getStep())]);\n\t\t\t_t._active = _t._paused = false;\n\t\t\treturn _t; // Animation\n\t\t},\n\n\t\tdestroy: function(){\n\t\t\t// summary:\n\t\t\t//\t\tcleanup the animation\n\t\t\tthis.stop();\n\t\t},\n\n\t\tstatus: function(){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a string token representation of the status of\n\t\t\t//\t\tthe animation, one of: \"paused\", \"playing\", \"stopped\"\n\t\t\tif(this._active){\n\t\t\t\treturn this._paused ? \"paused\" : \"playing\"; // String\n\t\t\t}\n\t\t\treturn \"stopped\"; // String\n\t\t},\n\n\t\t_cycle: function(){\n\t\t\tvar _t = this;\n\t\t\tif(_t._active){\n\t\t\t\tvar curr = new Date().valueOf();\n\t\t\t\t// Allow durations of 0 (instant) by setting step to 1 - see #13798\n\t\t\t\tvar step = _t.duration === 0 ? 1 : (curr - _t._startTime) / (_t.duration);\n\n\t\t\t\tif(step >= 1){\n\t\t\t\t\tstep = 1;\n\t\t\t\t}\n\t\t\t\t_t._percent = step;\n\n\t\t\t\t// Perform easing\n\t\t\t\tif(_t.easing){\n\t\t\t\t\tstep = _t.easing(step);\n\t\t\t\t}\n\n\t\t\t\t_t._fire(\"onAnimate\", [_t.curve.getValue(step)]);\n\n\t\t\t\tif(_t._percent < 1){\n\t\t\t\t\t_t._startTimer();\n\t\t\t\t}else{\n\t\t\t\t\t_t._active = false;\n\n\t\t\t\t\tif(_t.repeat > 0){\n\t\t\t\t\t\t_t.repeat--;\n\t\t\t\t\t\t_t.play(null, true);\n\t\t\t\t\t}else if(_t.repeat == -1){\n\t\t\t\t\t\t_t.play(null, true);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(_t._startRepeatCount){\n\t\t\t\t\t\t\t_t.repeat = _t._startRepeatCount;\n\t\t\t\t\t\t\t_t._startRepeatCount = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_t._percent = 0;\n\t\t\t\t\t_t._fire(\"onEnd\", [_t.node]);\n\t\t\t\t\t!_t.repeat && _t._stopTimer();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn _t; // Animation\n\t\t},\n\n\t\t_clearTimer: function(){\n\t\t\t// summary:\n\t\t\t//\t\tClear the play delay timer\n\t\t\tclearTimeout(this._delayTimer);\n\t\t\tdelete this._delayTimer;\n\t\t}\n\n\t});\n\n\t// the local timer, stubbed into all Animation instances\n\tvar ctr = 0,\n\t\ttimer = null,\n\t\trunner = {\n\t\t\trun: function(){}\n\t\t};\n\n\tlang.extend(Animation, {\n\n\t\t_startTimer: function(){\n\t\t\tif(!this._timer){\n\t\t\t\tthis._timer = aspect.after(runner, \"run\", lang.hitch(this, \"_cycle\"), true);\n\t\t\t\tctr++;\n\t\t\t}\n\t\t\tif(!timer){\n\t\t\t\ttimer = setInterval(lang.hitch(runner, \"run\"), this.rate);\n\t\t\t}\n\t\t},\n\n\t\t_stopTimer: function(){\n\t\t\tif(this._timer){\n\t\t\t\tthis._timer.remove();\n\t\t\t\tthis._timer = null;\n\t\t\t\tctr--;\n\t\t\t}\n\t\t\tif(ctr <= 0){\n\t\t\t\tclearInterval(timer);\n\t\t\t\ttimer = null;\n\t\t\t\tctr = 0;\n\t\t\t}\n\t\t}\n\n\t});\n\n\tvar _makeFadeable =\n\t\thas(\"ie\") ? function(node){\n\t\t\t// only set the zoom if the \"tickle\" value would be the same as the\n\t\t\t// default\n\t\t\tvar ns = node.style;\n\t\t\t// don't set the width to auto if it didn't already cascade that way.\n\t\t\t// We don't want to f anyones designs\n\t\t\tif(!ns.width.length && style.get(node, \"width\") == \"auto\"){\n\t\t\t\tns.width = \"auto\";\n\t\t\t}\n\t\t} :\n\t\tfunction(){};\n\n\tbasefx._fade = function(/*Object*/ args){\n\t\t// summary:\n\t\t//\t\tReturns an animation that will fade the node defined by\n\t\t//\t\targs.node from the start to end values passed (args.start\n\t\t//\t\targs.end) (end is mandatory, start is optional)\n\n\t\targs.node = dom.byId(args.node);\n\t\tvar fArgs = _mixin({ properties: {} }, args),\n\t\t\tprops = (fArgs.properties.opacity = {});\n\n\t\tprops.start = !(\"start\" in fArgs) ?\n\t\t\tfunction(){\n\t\t\t\treturn +style.get(fArgs.node, \"opacity\")||0;\n\t\t\t} : fArgs.start;\n\t\tprops.end = fArgs.end;\n\n\t\tvar anim = basefx.animateProperty(fArgs);\n\t\taspect.after(anim, \"beforeBegin\", lang.partial(_makeFadeable, fArgs.node), true);\n\n\t\treturn anim; // Animation\n\t};\n\n\t/*=====\n\tvar __FadeArgs = declare(null, {\n\t\t// node: DOMNode|String\n\t\t//\t\tThe node referenced in the animation\n\t\t// duration: Integer?\n\t\t//\t\tDuration of the animation in milliseconds.\n\t\t// easing: Function?\n\t\t//\t\tAn easing function.\n\t});\n\t=====*/\n\n\tbasefx.fadeIn = function(/*__FadeArgs*/ args){\n\t\t// summary:\n\t\t//\t\tReturns an animation that will fade node defined in 'args' from\n\t\t//\t\tits current opacity to fully opaque.\n\t\treturn basefx._fade(_mixin({ end: 1 }, args)); // Animation\n\t};\n\n\tbasefx.fadeOut = function(/*__FadeArgs*/ args){\n\t\t// summary:\n\t\t//\t\tReturns an animation that will fade node defined in 'args'\n\t\t//\t\tfrom its current opacity to fully transparent.\n\t\treturn basefx._fade(_mixin({ end: 0 }, args)); // Animation\n\t};\n\n\tbasefx._defaultEasing = function(/*Decimal?*/ n){\n\t\t// summary:\n\t\t//\t\tThe default easing function for Animation(s)\n\t\treturn 0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2);\t// Decimal\n\t};\n\n\tvar PropLine = function(properties){\n\t\t// PropLine is an internal class which is used to model the values of\n\t\t// an a group of CSS properties across an animation lifecycle. In\n\t\t// particular, the \"getValue\" function handles getting interpolated\n\t\t// values between start and end for a particular CSS value.\n\t\tthis._properties = properties;\n\t\tfor(var p in properties){\n\t\t\tvar prop = properties[p];\n\t\t\tif(prop.start instanceof Color){\n\t\t\t\t// create a reusable temp color object to keep intermediate results\n\t\t\t\tprop.tempColor = new Color();\n\t\t\t}\n\t\t}\n\t};\n\n\tPropLine.prototype.getValue = function(r){\n\t\tvar ret = {};\n\t\tfor(var p in this._properties){\n\t\t\tvar prop = this._properties[p],\n\t\t\t\tstart = prop.start;\n\t\t\tif(start instanceof Color){\n\t\t\t\tret[p] = Color.blendColors(start, prop.end, r, prop.tempColor).toCss();\n\t\t\t}else if(!lang.isArray(start)){\n\t\t\t\tret[p] = ((prop.end - start) * r) + start + (p != \"opacity\" ? prop.units || \"px\" : 0);\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\t/*=====\n\tvar __AnimArgs = declare(__FadeArgs, {\n\t\t// properties: Object?\n\t\t//\t\tA hash map of style properties to Objects describing the transition,\n\t\t//\t\tsuch as the properties of _Line with an additional 'units' property\n\t\tproperties: {}\n\n\t\t//TODOC: add event callbacks\n\t});\n\t=====*/\n\n\tbasefx.animateProperty = function(/*__AnimArgs*/ args){\n\t\t// summary:\n\t\t//\t\tReturns an animation that will transition the properties of\n\t\t//\t\tnode defined in `args` depending how they are defined in\n\t\t//\t\t`args.properties`\n\t\t//\n\t\t// description:\n\t\t//\t\tFoundation of most `dojo/_base/fx`\n\t\t//\t\tanimations. It takes an object of \"properties\" corresponding to\n\t\t//\t\tstyle properties, and animates them in parallel over a set\n\t\t//\t\tduration.\n\t\t//\n\t\t// example:\n\t\t//\t\tA simple animation that changes the width of the specified node.\n\t\t//\t|\tbasefx.animateProperty({\n\t\t//\t|\t\tnode: \"nodeId\",\n\t\t//\t|\t\tproperties: { width: 400 },\n\t\t//\t|\t}).play();\n\t\t//\t\tDojo figures out the start value for the width and converts the\n\t\t//\t\tinteger specified for the width to the more expressive but\n\t\t//\t\tverbose form `{ width: { end: '400', units: 'px' } }` which you\n\t\t//\t\tcan also specify directly. Defaults to 'px' if omitted.\n\t\t//\n\t\t// example:\n\t\t//\t\tAnimate width, height, and padding over 2 seconds... the\n\t\t//\t\tpedantic way:\n\t\t//\t|\tbasefx.animateProperty({ node: node, duration:2000,\n\t\t//\t|\t\tproperties: {\n\t\t//\t|\t\t\twidth: { start: '200', end: '400', units:\"px\" },\n\t\t//\t|\t\t\theight: { start:'200', end: '400', units:\"px\" },\n\t\t//\t|\t\t\tpaddingTop: { start:'5', end:'50', units:\"px\" }\n\t\t//\t|\t\t}\n\t\t//\t|\t}).play();\n\t\t//\t\tNote 'paddingTop' is used over 'padding-top'. Multi-name CSS properties\n\t\t//\t\tare written using \"mixed case\", as the hyphen is illegal as an object key.\n\t\t//\n\t\t// example:\n\t\t//\t\tPlug in a different easing function and register a callback for\n\t\t//\t\twhen the animation ends. Easing functions accept values between\n\t\t//\t\tzero and one and return a value on that basis. In this case, an\n\t\t//\t\texponential-in curve.\n\t\t//\t|\tbasefx.animateProperty({\n\t\t//\t|\t\tnode: \"nodeId\",\n\t\t//\t|\t\t// dojo figures out the start value\n\t\t//\t|\t\tproperties: { width: { end: 400 } },\n\t\t//\t|\t\teasing: function(n){\n\t\t//\t|\t\t\treturn (n==0) ? 0 : Math.pow(2, 10 * (n - 1));\n\t\t//\t|\t\t},\n\t\t//\t|\t\tonEnd: function(node){\n\t\t//\t|\t\t\t// called when the animation finishes. The animation\n\t\t//\t|\t\t\t// target is passed to this function\n\t\t//\t|\t\t}\n\t\t//\t|\t}).play(500); // delay playing half a second\n\t\t//\n\t\t// example:\n\t\t//\t\tLike all `Animation`s, animateProperty returns a handle to the\n\t\t//\t\tAnimation instance, which fires the events common to Dojo FX. Use `aspect.after`\n\t\t//\t\tto access these events outside of the Animation definition:\n\t\t//\t|\tvar anim = basefx.animateProperty({\n\t\t//\t|\t\tnode:\"someId\",\n\t\t//\t|\t\tproperties:{\n\t\t//\t|\t\t\twidth:400, height:500\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\taspect.after(anim, \"onEnd\", function(){\n\t\t//\t|\t\tconsole.log(\"animation ended\");\n\t\t//\t|\t}, true);\n\t\t//\t|\t// play the animation now:\n\t\t//\t|\tanim.play();\n\t\t//\n\t\t// example:\n\t\t//\t\tEach property can be a function whose return value is substituted along.\n\t\t//\t\tAdditionally, each measurement (eg: start, end) can be a function. The node\n\t\t//\t\treference is passed directly to callbacks.\n\t\t//\t|\tbasefx.animateProperty({\n\t\t//\t|\t\tnode:\"mine\",\n\t\t//\t|\t\tproperties:{\n\t\t//\t|\t\t\theight:function(node){\n\t\t//\t|\t\t\t\t// shrink this node by 50%\n\t\t//\t|\t\t\t\treturn domGeom.position(node).h / 2\n\t\t//\t|\t\t\t},\n\t\t//\t|\t\t\twidth:{\n\t\t//\t|\t\t\t\tstart:function(node){ return 100; },\n\t\t//\t|\t\t\t\tend:function(node){ return 200; }\n\t\t//\t|\t\t\t}\n\t\t//\t|\t\t}\n\t\t//\t|\t}).play();\n\t\t//\n\n\t\tvar n = args.node = dom.byId(args.node);\n\t\tif(!args.easing){ args.easing = dojo._defaultEasing; }\n\n\t\tvar anim = new Animation(args);\n\t\taspect.after(anim, \"beforeBegin\", lang.hitch(anim, function(){\n\t\t\tvar pm = {};\n\t\t\tfor(var p in this.properties){\n\t\t\t\t// Make shallow copy of properties into pm because we overwrite\n\t\t\t\t// some values below. In particular if start/end are functions\n\t\t\t\t// we don't want to overwrite them or the functions won't be\n\t\t\t\t// called if the animation is reused.\n\t\t\t\tif(p == \"width\" || p == \"height\"){\n\t\t\t\t\tthis.node.display = \"block\";\n\t\t\t\t}\n\t\t\t\tvar prop = this.properties[p];\n\t\t\t\tif(lang.isFunction(prop)){\n\t\t\t\t\tprop = prop(n);\n\t\t\t\t}\n\t\t\t\tprop = pm[p] = _mixin({}, (lang.isObject(prop) ? prop: { end: prop }));\n\n\t\t\t\tif(lang.isFunction(prop.start)){\n\t\t\t\t\tprop.start = prop.start(n);\n\t\t\t\t}\n\t\t\t\tif(lang.isFunction(prop.end)){\n\t\t\t\t\tprop.end = prop.end(n);\n\t\t\t\t}\n\t\t\t\tvar isColor = (p.toLowerCase().indexOf(\"color\") >= 0);\n\t\t\t\tfunction getStyle(node, p){\n\t\t\t\t\t// domStyle.get(node, \"height\") can return \"auto\" or \"\" on IE; this is more reliable:\n\t\t\t\t\tvar v = { height: node.offsetHeight, width: node.offsetWidth }[p];\n\t\t\t\t\tif(v !== undefined){ return v; }\n\t\t\t\t\tv = style.get(node, p);\n\t\t\t\t\treturn (p == \"opacity\") ? +v : (isColor ? v : parseFloat(v));\n\t\t\t\t}\n\t\t\t\tif(!(\"end\" in prop)){\n\t\t\t\t\tprop.end = getStyle(n, p);\n\t\t\t\t}else if(!(\"start\" in prop)){\n\t\t\t\t\tprop.start = getStyle(n, p);\n\t\t\t\t}\n\n\t\t\t\tif(isColor){\n\t\t\t\t\tprop.start = new Color(prop.start);\n\t\t\t\t\tprop.end = new Color(prop.end);\n\t\t\t\t}else{\n\t\t\t\t\tprop.start = (p == \"opacity\") ? +prop.start : parseFloat(prop.start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.curve = new PropLine(pm);\n\t\t}), true);\n\t\taspect.after(anim, \"onAnimate\", lang.hitch(style, \"set\", anim.node), true);\n\t\treturn anim; // Animation\n\t};\n\n\tbasefx.anim = function(\t/*DOMNode|String*/\tnode,\n\t\t\t\t\t\t\t/*Object*/\t\t\tproperties,\n\t\t\t\t\t\t\t/*Integer?*/\t\tduration,\n\t\t\t\t\t\t\t/*Function?*/\t\teasing,\n\t\t\t\t\t\t\t/*Function?*/\t\tonEnd,\n\t\t\t\t\t\t\t/*Integer?*/\t\tdelay){\n\t\t// summary:\n\t\t//\t\tA simpler interface to `animateProperty()`, also returns\n\t\t//\t\tan instance of `Animation` but begins the animation\n\t\t//\t\timmediately, unlike nearly every other Dojo animation API.\n\t\t// description:\n\t\t//\t\tSimpler (but somewhat less powerful) version\n\t\t//\t\tof `animateProperty`. It uses defaults for many basic properties\n\t\t//\t\tand allows for positional parameters to be used in place of the\n\t\t//\t\tpacked \"property bag\" which is used for other Dojo animation\n\t\t//\t\tmethods.\n\t\t//\n\t\t//\t\tThe `Animation` object returned will be already playing, so\n\t\t//\t\tcalling play() on it again is (usually) a no-op.\n\t\t// node:\n\t\t//\t\ta DOM node or the id of a node to animate CSS properties on\n\t\t// duration:\n\t\t//\t\tThe number of milliseconds over which the animation\n\t\t//\t\tshould run. Defaults to the global animation default duration\n\t\t//\t\t(350ms).\n\t\t// easing:\n\t\t//\t\tAn easing function over which to calculate acceleration\n\t\t//\t\tand deceleration of the animation through its duration.\n\t\t//\t\tA default easing algorithm is provided, but you may\n\t\t//\t\tplug in any you wish. A large selection of easing algorithms\n\t\t//\t\tare available in `dojo/fx/easing`.\n\t\t// onEnd:\n\t\t//\t\tA function to be called when the animation finishes\n\t\t//\t\trunning.\n\t\t// delay:\n\t\t//\t\tThe number of milliseconds to delay beginning the\n\t\t//\t\tanimation by. The default is 0.\n\t\t// example:\n\t\t//\t\tFade out a node\n\t\t//\t|\tbasefx.anim(\"id\", { opacity: 0 });\n\t\t// example:\n\t\t//\t\tFade out a node over a full second\n\t\t//\t|\tbasefx.anim(\"id\", { opacity: 0 }, 1000);\n\t\treturn basefx.animateProperty({ // Animation\n\t\t\tnode: node,\n\t\t\tduration: duration || Animation.prototype.duration,\n\t\t\tproperties: properties,\n\t\t\teasing: easing,\n\t\t\tonEnd: onEnd\n\t\t}).play(delay || 0);\n\t};\n\n\n\tif(has(\"extend-dojo\")){\n\t\t_mixin(dojo, basefx);\n\t\t// Alias to drop come 2.0:\n\t\tdojo._Animation = Animation;\n\t}\n\n\treturn basefx;\n});\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isDirective } from './directive.js';\nimport { removeNodes } from './dom.js';\nimport { noChange, nothing } from './part.js';\nimport { TemplateInstance } from './template-instance.js';\nimport { TemplateResult } from './template-result.js';\nimport { createMarker } from './template.js';\nexport const isPrimitive = (value) => {\n return (value === null ||\n !(typeof value === 'object' || typeof value === 'function'));\n};\nexport const isIterable = (value) => {\n return Array.isArray(value) ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !!(value && value[Symbol.iterator]);\n};\n/**\n * Writes attribute values to the DOM for a group of AttributeParts bound to a\n * single attribute. The value is only set once even if there are multiple parts\n * for an attribute.\n */\nexport class AttributeCommitter {\n constructor(element, name, strings) {\n this.dirty = true;\n this.element = element;\n this.name = name;\n this.strings = strings;\n this.parts = [];\n for (let i = 0; i < strings.length - 1; i++) {\n this.parts[i] = this._createPart();\n }\n }\n /**\n * Creates a single part. Override this to create a differnt type of part.\n */\n _createPart() {\n return new AttributePart(this);\n }\n _getValue() {\n const strings = this.strings;\n const l = strings.length - 1;\n const parts = this.parts;\n // If we're assigning an attribute via syntax like:\n // attr=\"${foo}\" or attr=${foo}\n // but not\n // attr=\"${foo} ${bar}\" or attr=\"${foo} baz\"\n // then we don't want to coerce the attribute value into one long\n // string. Instead we want to just return the value itself directly,\n // so that sanitizeDOMValue can get the actual value rather than\n // String(value)\n // The exception is if v is an array, in which case we do want to smash\n // it together into a string without calling String() on the array.\n //\n // This also allows trusted values (when using TrustedTypes) being\n // assigned to DOM sinks without being stringified in the process.\n if (l === 1 && strings[0] === '' && strings[1] === '') {\n const v = parts[0].value;\n if (typeof v === 'symbol') {\n return String(v);\n }\n if (typeof v === 'string' || !isIterable(v)) {\n return v;\n }\n }\n let text = '';\n for (let i = 0; i < l; i++) {\n text += strings[i];\n const part = parts[i];\n if (part !== undefined) {\n const v = part.value;\n if (isPrimitive(v) || !isIterable(v)) {\n text += typeof v === 'string' ? v : String(v);\n }\n else {\n for (const t of v) {\n text += typeof t === 'string' ? t : String(t);\n }\n }\n }\n }\n text += strings[l];\n return text;\n }\n commit() {\n if (this.dirty) {\n this.dirty = false;\n this.element.setAttribute(this.name, this._getValue());\n }\n }\n}\n/**\n * A Part that controls all or part of an attribute value.\n */\nexport class AttributePart {\n constructor(committer) {\n this.value = undefined;\n this.committer = committer;\n }\n setValue(value) {\n if (value !== noChange && (!isPrimitive(value) || value !== this.value)) {\n this.value = value;\n // If the value is a not a directive, dirty the committer so that it'll\n // call setAttribute. If the value is a directive, it'll dirty the\n // committer if it calls setValue().\n if (!isDirective(value)) {\n this.committer.dirty = true;\n }\n }\n }\n commit() {\n while (isDirective(this.value)) {\n const directive = this.value;\n this.value = noChange;\n directive(this);\n }\n if (this.value === noChange) {\n return;\n }\n this.committer.commit();\n }\n}\n/**\n * A Part that controls a location within a Node tree. Like a Range, NodePart\n * has start and end locations and can set and update the Nodes between those\n * locations.\n *\n * NodeParts support several value types: primitives, Nodes, TemplateResults,\n * as well as arrays and iterables of those types.\n */\nexport class NodePart {\n constructor(options) {\n this.value = undefined;\n this.__pendingValue = undefined;\n this.options = options;\n }\n /**\n * Appends this part into a container.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendInto(container) {\n this.startNode = container.appendChild(createMarker());\n this.endNode = container.appendChild(createMarker());\n }\n /**\n * Inserts this part after the `ref` node (between `ref` and `ref`'s next\n * sibling). Both `ref` and its next sibling must be static, unchanging nodes\n * such as those that appear in a literal section of a template.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterNode(ref) {\n this.startNode = ref;\n this.endNode = ref.nextSibling;\n }\n /**\n * Appends this part into a parent part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendIntoPart(part) {\n part.__insert(this.startNode = createMarker());\n part.__insert(this.endNode = createMarker());\n }\n /**\n * Inserts this part after the `ref` part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterPart(ref) {\n ref.__insert(this.startNode = createMarker());\n this.endNode = ref.endNode;\n ref.endNode = this.startNode;\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n if (this.startNode.parentNode === null) {\n return;\n }\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n const value = this.__pendingValue;\n if (value === noChange) {\n return;\n }\n if (isPrimitive(value)) {\n if (value !== this.value) {\n this.__commitText(value);\n }\n }\n else if (value instanceof TemplateResult) {\n this.__commitTemplateResult(value);\n }\n else if (value instanceof Node) {\n this.__commitNode(value);\n }\n else if (isIterable(value)) {\n this.__commitIterable(value);\n }\n else if (value === nothing) {\n this.value = nothing;\n this.clear();\n }\n else {\n // Fallback, will render the string representation\n this.__commitText(value);\n }\n }\n __insert(node) {\n this.endNode.parentNode.insertBefore(node, this.endNode);\n }\n __commitNode(value) {\n if (this.value === value) {\n return;\n }\n this.clear();\n this.__insert(value);\n this.value = value;\n }\n __commitText(value) {\n const node = this.startNode.nextSibling;\n value = value == null ? '' : value;\n // If `value` isn't already a string, we explicitly convert it here in case\n // it can't be implicitly converted - i.e. it's a symbol.\n const valueAsString = typeof value === 'string' ? value : String(value);\n if (node === this.endNode.previousSibling &&\n node.nodeType === 3 /* Node.TEXT_NODE */) {\n // If we only have a single text node between the markers, we can just\n // set its value, rather than replacing it.\n // TODO(justinfagnani): Can we just check if this.value is primitive?\n node.data = valueAsString;\n }\n else {\n this.__commitNode(document.createTextNode(valueAsString));\n }\n this.value = value;\n }\n __commitTemplateResult(value) {\n const template = this.options.templateFactory(value);\n if (this.value instanceof TemplateInstance &&\n this.value.template === template) {\n this.value.update(value.values);\n }\n else {\n // Make sure we propagate the template processor from the TemplateResult\n // so that we use its syntax extension, etc. The template factory comes\n // from the render function options so that it can control template\n // caching and preprocessing.\n const instance = new TemplateInstance(template, value.processor, this.options);\n const fragment = instance._clone();\n instance.update(value.values);\n this.__commitNode(fragment);\n this.value = instance;\n }\n }\n __commitIterable(value) {\n // For an Iterable, we create a new InstancePart per item, then set its\n // value to the item. This is a little bit of overhead for every item in\n // an Iterable, but it lets us recurse easily and efficiently update Arrays\n // of TemplateResults that will be commonly returned from expressions like:\n // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n // If _value is an array, then the previous render was of an\n // iterable and _value will contain the NodeParts from the previous\n // render. If _value is not an array, clear this part and make a new\n // array for NodeParts.\n if (!Array.isArray(this.value)) {\n this.value = [];\n this.clear();\n }\n // Lets us keep track of how many items we stamped so we can clear leftover\n // items from a previous render\n const itemParts = this.value;\n let partIndex = 0;\n let itemPart;\n for (const item of value) {\n // Try to reuse an existing part\n itemPart = itemParts[partIndex];\n // If no existing part, create a new one\n if (itemPart === undefined) {\n itemPart = new NodePart(this.options);\n itemParts.push(itemPart);\n if (partIndex === 0) {\n itemPart.appendIntoPart(this);\n }\n else {\n itemPart.insertAfterPart(itemParts[partIndex - 1]);\n }\n }\n itemPart.setValue(item);\n itemPart.commit();\n partIndex++;\n }\n if (partIndex < itemParts.length) {\n // Truncate the parts array so _value reflects the current state\n itemParts.length = partIndex;\n this.clear(itemPart && itemPart.endNode);\n }\n }\n clear(startNode = this.startNode) {\n removeNodes(this.startNode.parentNode, startNode.nextSibling, this.endNode);\n }\n}\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nexport class BooleanAttributePart {\n constructor(element, name, strings) {\n this.value = undefined;\n this.__pendingValue = undefined;\n if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n throw new Error('Boolean attributes can only contain a single expression');\n }\n this.element = element;\n this.name = name;\n this.strings = strings;\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const value = !!this.__pendingValue;\n if (this.value !== value) {\n if (value) {\n this.element.setAttribute(this.name, '');\n }\n else {\n this.element.removeAttribute(this.name);\n }\n this.value = value;\n }\n this.__pendingValue = noChange;\n }\n}\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nexport class PropertyCommitter extends AttributeCommitter {\n constructor(element, name, strings) {\n super(element, name, strings);\n this.single =\n (strings.length === 2 && strings[0] === '' && strings[1] === '');\n }\n _createPart() {\n return new PropertyPart(this);\n }\n _getValue() {\n if (this.single) {\n return this.parts[0].value;\n }\n return super._getValue();\n }\n commit() {\n if (this.dirty) {\n this.dirty = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.element[this.name] = this._getValue();\n }\n }\n}\nexport class PropertyPart extends AttributePart {\n}\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the third\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\n// Wrap into an IIFE because MS Edge <= v41 does not support having try/catch\n// blocks right into the body of a module\n(() => {\n try {\n const options = {\n get capture() {\n eventOptionsSupported = true;\n return false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.addEventListener('test', options, options);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.removeEventListener('test', options, options);\n }\n catch (_e) {\n // event options not supported\n }\n})();\nexport class EventPart {\n constructor(element, eventName, eventContext) {\n this.value = undefined;\n this.__pendingValue = undefined;\n this.element = element;\n this.eventName = eventName;\n this.eventContext = eventContext;\n this.__boundHandleEvent = (e) => this.handleEvent(e);\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const newListener = this.__pendingValue;\n const oldListener = this.value;\n const shouldRemoveListener = newListener == null ||\n oldListener != null &&\n (newListener.capture !== oldListener.capture ||\n newListener.once !== oldListener.once ||\n newListener.passive !== oldListener.passive);\n const shouldAddListener = newListener != null && (oldListener == null || shouldRemoveListener);\n if (shouldRemoveListener) {\n this.element.removeEventListener(this.eventName, this.__boundHandleEvent, this.__options);\n }\n if (shouldAddListener) {\n this.__options = getOptions(newListener);\n this.element.addEventListener(this.eventName, this.__boundHandleEvent, this.__options);\n }\n this.value = newListener;\n this.__pendingValue = noChange;\n }\n handleEvent(event) {\n if (typeof this.value === 'function') {\n this.value.call(this.eventContext || this.element, event);\n }\n else {\n this.value.handleEvent(event);\n }\n }\n}\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o) => o &&\n (eventOptionsSupported ?\n { capture: o.capture, passive: o.passive, once: o.once } :\n o.capture);\n//# sourceMappingURL=parts.js.map","/**\n * @module ol/style/Text\n */\nimport Fill from './Fill.js';\nimport TextPlacement from './TextPlacement.js';\nimport { toSize } from '../size.js';\n/**\n * The default fill color to use if no fill was set at construction time; a\n * blackish `#333`.\n *\n * @const {string}\n */\nvar DEFAULT_FILL_COLOR = '#333';\n/**\n * @typedef {Object} Options\n * @property {string} [font] Font style as CSS 'font' value, see:\n * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font. Default is '10px sans-serif'\n * @property {number} [maxAngle=Math.PI/4] When `placement` is set to `'line'`, allow a maximum angle between adjacent characters.\n * The expected value is in radians, and the default is 45° (`Math.PI / 4`).\n * @property {number} [offsetX=0] Horizontal text offset in pixels. A positive will shift the text right.\n * @property {number} [offsetY=0] Vertical text offset in pixels. A positive will shift the text down.\n * @property {boolean} [overflow=false] For polygon labels or when `placement` is set to `'line'`, allow text to exceed\n * the width of the polygon at the label position or the length of the path that it follows.\n * @property {import(\"./TextPlacement.js\").default|string} [placement='point'] Text placement.\n * @property {number|import(\"../size.js\").Size} [scale] Scale.\n * @property {boolean} [rotateWithView=false] Whether to rotate the text with the view.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {string} [text] Text content.\n * @property {string} [textAlign] Text alignment. Possible values: 'left', 'right', 'center', 'end' or 'start'.\n * Default is 'center' for `placement: 'point'`. For `placement: 'line'`, the default is to let the renderer choose a\n * placement where `maxAngle` is not exceeded.\n * @property {string} [textBaseline='middle'] Text base line. Possible values: 'bottom', 'top', 'middle', 'alphabetic',\n * 'hanging', 'ideographic'.\n * @property {import(\"./Fill.js\").default} [fill] Fill style. If none is provided, we'll use a dark fill-style (#333).\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {import(\"./Fill.js\").default} [backgroundFill] Fill style for the text background when `placement` is\n * `'point'`. Default is no fill.\n * @property {import(\"./Stroke.js\").default} [backgroundStroke] Stroke style for the text background when `placement`\n * is `'point'`. Default is no stroke.\n * @property {Array<number>} [padding=[0, 0, 0, 0]] Padding in pixels around the text for decluttering and background. The order of\n * values in the array is `[top, right, bottom, left]`.\n */\n/**\n * @classdesc\n * Set text style for vector features.\n * @api\n */\nvar Text = /** @class */ (function () {\n /**\n * @param {Options=} opt_options Options.\n */\n function Text(opt_options) {\n var options = opt_options || {};\n /**\n * @private\n * @type {string|undefined}\n */\n this.font_ = options.font;\n /**\n * @private\n * @type {number|undefined}\n */\n this.rotation_ = options.rotation;\n /**\n * @private\n * @type {boolean|undefined}\n */\n this.rotateWithView_ = options.rotateWithView;\n /**\n * @private\n * @type {number|import(\"../size.js\").Size|undefined}\n */\n this.scale_ = options.scale;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.scaleArray_ = toSize(options.scale !== undefined ? options.scale : 1);\n /**\n * @private\n * @type {string|undefined}\n */\n this.text_ = options.text;\n /**\n * @private\n * @type {string|undefined}\n */\n this.textAlign_ = options.textAlign;\n /**\n * @private\n * @type {string|undefined}\n */\n this.textBaseline_ = options.textBaseline;\n /**\n * @private\n * @type {import(\"./Fill.js\").default}\n */\n this.fill_ =\n options.fill !== undefined\n ? options.fill\n : new Fill({ color: DEFAULT_FILL_COLOR });\n /**\n * @private\n * @type {number}\n */\n this.maxAngle_ =\n options.maxAngle !== undefined ? options.maxAngle : Math.PI / 4;\n /**\n * @private\n * @type {import(\"./TextPlacement.js\").default|string}\n */\n this.placement_ =\n options.placement !== undefined ? options.placement : TextPlacement.POINT;\n /**\n * @private\n * @type {boolean}\n */\n this.overflow_ = !!options.overflow;\n /**\n * @private\n * @type {import(\"./Stroke.js\").default}\n */\n this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n /**\n * @private\n * @type {number}\n */\n this.offsetX_ = options.offsetX !== undefined ? options.offsetX : 0;\n /**\n * @private\n * @type {number}\n */\n this.offsetY_ = options.offsetY !== undefined ? options.offsetY : 0;\n /**\n * @private\n * @type {import(\"./Fill.js\").default}\n */\n this.backgroundFill_ = options.backgroundFill\n ? options.backgroundFill\n : null;\n /**\n * @private\n * @type {import(\"./Stroke.js\").default}\n */\n this.backgroundStroke_ = options.backgroundStroke\n ? options.backgroundStroke\n : null;\n /**\n * @private\n * @type {Array<number>}\n */\n this.padding_ = options.padding === undefined ? null : options.padding;\n }\n /**\n * Clones the style.\n * @return {Text} The cloned style.\n * @api\n */\n Text.prototype.clone = function () {\n var scale = this.getScale();\n return new Text({\n font: this.getFont(),\n placement: this.getPlacement(),\n maxAngle: this.getMaxAngle(),\n overflow: this.getOverflow(),\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n text: this.getText(),\n textAlign: this.getTextAlign(),\n textBaseline: this.getTextBaseline(),\n fill: this.getFill() ? this.getFill().clone() : undefined,\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n offsetX: this.getOffsetX(),\n offsetY: this.getOffsetY(),\n backgroundFill: this.getBackgroundFill()\n ? this.getBackgroundFill().clone()\n : undefined,\n backgroundStroke: this.getBackgroundStroke()\n ? this.getBackgroundStroke().clone()\n : undefined,\n padding: this.getPadding(),\n });\n };\n /**\n * Get the `overflow` configuration.\n * @return {boolean} Let text overflow the length of the path they follow.\n * @api\n */\n Text.prototype.getOverflow = function () {\n return this.overflow_;\n };\n /**\n * Get the font name.\n * @return {string|undefined} Font.\n * @api\n */\n Text.prototype.getFont = function () {\n return this.font_;\n };\n /**\n * Get the maximum angle between adjacent characters.\n * @return {number} Angle in radians.\n * @api\n */\n Text.prototype.getMaxAngle = function () {\n return this.maxAngle_;\n };\n /**\n * Get the label placement.\n * @return {import(\"./TextPlacement.js\").default|string} Text placement.\n * @api\n */\n Text.prototype.getPlacement = function () {\n return this.placement_;\n };\n /**\n * Get the x-offset for the text.\n * @return {number} Horizontal text offset.\n * @api\n */\n Text.prototype.getOffsetX = function () {\n return this.offsetX_;\n };\n /**\n * Get the y-offset for the text.\n * @return {number} Vertical text offset.\n * @api\n */\n Text.prototype.getOffsetY = function () {\n return this.offsetY_;\n };\n /**\n * Get the fill style for the text.\n * @return {import(\"./Fill.js\").default} Fill style.\n * @api\n */\n Text.prototype.getFill = function () {\n return this.fill_;\n };\n /**\n * Determine whether the text rotates with the map.\n * @return {boolean|undefined} Rotate with map.\n * @api\n */\n Text.prototype.getRotateWithView = function () {\n return this.rotateWithView_;\n };\n /**\n * Get the text rotation.\n * @return {number|undefined} Rotation.\n * @api\n */\n Text.prototype.getRotation = function () {\n return this.rotation_;\n };\n /**\n * Get the text scale.\n * @return {number|import(\"../size.js\").Size|undefined} Scale.\n * @api\n */\n Text.prototype.getScale = function () {\n return this.scale_;\n };\n /**\n * Get the symbolizer scale array.\n * @return {import(\"../size.js\").Size} Scale array.\n */\n Text.prototype.getScaleArray = function () {\n return this.scaleArray_;\n };\n /**\n * Get the stroke style for the text.\n * @return {import(\"./Stroke.js\").default} Stroke style.\n * @api\n */\n Text.prototype.getStroke = function () {\n return this.stroke_;\n };\n /**\n * Get the text to be rendered.\n * @return {string|undefined} Text.\n * @api\n */\n Text.prototype.getText = function () {\n return this.text_;\n };\n /**\n * Get the text alignment.\n * @return {string|undefined} Text align.\n * @api\n */\n Text.prototype.getTextAlign = function () {\n return this.textAlign_;\n };\n /**\n * Get the text baseline.\n * @return {string|undefined} Text baseline.\n * @api\n */\n Text.prototype.getTextBaseline = function () {\n return this.textBaseline_;\n };\n /**\n * Get the background fill style for the text.\n * @return {import(\"./Fill.js\").default} Fill style.\n * @api\n */\n Text.prototype.getBackgroundFill = function () {\n return this.backgroundFill_;\n };\n /**\n * Get the background stroke style for the text.\n * @return {import(\"./Stroke.js\").default} Stroke style.\n * @api\n */\n Text.prototype.getBackgroundStroke = function () {\n return this.backgroundStroke_;\n };\n /**\n * Get the padding for the text.\n * @return {Array<number>} Padding.\n * @api\n */\n Text.prototype.getPadding = function () {\n return this.padding_;\n };\n /**\n * Set the `overflow` property.\n *\n * @param {boolean} overflow Let text overflow the path that it follows.\n * @api\n */\n Text.prototype.setOverflow = function (overflow) {\n this.overflow_ = overflow;\n };\n /**\n * Set the font.\n *\n * @param {string|undefined} font Font.\n * @api\n */\n Text.prototype.setFont = function (font) {\n this.font_ = font;\n };\n /**\n * Set the maximum angle between adjacent characters.\n *\n * @param {number} maxAngle Angle in radians.\n * @api\n */\n Text.prototype.setMaxAngle = function (maxAngle) {\n this.maxAngle_ = maxAngle;\n };\n /**\n * Set the x offset.\n *\n * @param {number} offsetX Horizontal text offset.\n * @api\n */\n Text.prototype.setOffsetX = function (offsetX) {\n this.offsetX_ = offsetX;\n };\n /**\n * Set the y offset.\n *\n * @param {number} offsetY Vertical text offset.\n * @api\n */\n Text.prototype.setOffsetY = function (offsetY) {\n this.offsetY_ = offsetY;\n };\n /**\n * Set the text placement.\n *\n * @param {import(\"./TextPlacement.js\").default|string} placement Placement.\n * @api\n */\n Text.prototype.setPlacement = function (placement) {\n this.placement_ = placement;\n };\n /**\n * Set whether to rotate the text with the view.\n *\n * @param {boolean} rotateWithView Rotate with map.\n * @api\n */\n Text.prototype.setRotateWithView = function (rotateWithView) {\n this.rotateWithView_ = rotateWithView;\n };\n /**\n * Set the fill.\n *\n * @param {import(\"./Fill.js\").default} fill Fill style.\n * @api\n */\n Text.prototype.setFill = function (fill) {\n this.fill_ = fill;\n };\n /**\n * Set the rotation.\n *\n * @param {number|undefined} rotation Rotation.\n * @api\n */\n Text.prototype.setRotation = function (rotation) {\n this.rotation_ = rotation;\n };\n /**\n * Set the scale.\n *\n * @param {number|import(\"../size.js\").Size|undefined} scale Scale.\n * @api\n */\n Text.prototype.setScale = function (scale) {\n this.scale_ = scale;\n this.scaleArray_ = toSize(scale !== undefined ? scale : 1);\n };\n /**\n * Set the stroke.\n *\n * @param {import(\"./Stroke.js\").default} stroke Stroke style.\n * @api\n */\n Text.prototype.setStroke = function (stroke) {\n this.stroke_ = stroke;\n };\n /**\n * Set the text.\n *\n * @param {string|undefined} text Text.\n * @api\n */\n Text.prototype.setText = function (text) {\n this.text_ = text;\n };\n /**\n * Set the text alignment.\n *\n * @param {string|undefined} textAlign Text align.\n * @api\n */\n Text.prototype.setTextAlign = function (textAlign) {\n this.textAlign_ = textAlign;\n };\n /**\n * Set the text baseline.\n *\n * @param {string|undefined} textBaseline Text baseline.\n * @api\n */\n Text.prototype.setTextBaseline = function (textBaseline) {\n this.textBaseline_ = textBaseline;\n };\n /**\n * Set the background fill.\n *\n * @param {import(\"./Fill.js\").default} fill Fill style.\n * @api\n */\n Text.prototype.setBackgroundFill = function (fill) {\n this.backgroundFill_ = fill;\n };\n /**\n * Set the background stroke.\n *\n * @param {import(\"./Stroke.js\").default} stroke Stroke style.\n * @api\n */\n Text.prototype.setBackgroundStroke = function (stroke) {\n this.backgroundStroke_ = stroke;\n };\n /**\n * Set the padding (`[top, right, bottom, left]`).\n *\n * @param {!Array<number>} padding Padding.\n * @api\n */\n Text.prototype.setPadding = function (padding) {\n this.padding_ = padding;\n };\n return Text;\n}());\nexport default Text;\n//# sourceMappingURL=Text.js.map","/**\n * @module ol/coordinate\n */\nimport { getWidth } from './extent.js';\nimport { modulo } from './math.js';\nimport { padNumber } from './string.js';\n/**\n * An array of numbers representing an xy coordinate. Example: `[16, 48]`.\n * @typedef {Array<number>} Coordinate\n * @api\n */\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {add} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * add(coord, [-2, 4]);\n * // coord is now [5.85, 51.983333]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {Coordinate} delta Delta.\n * @return {Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nexport function add(coordinate, delta) {\n coordinate[0] += +delta[0];\n coordinate[1] += +delta[1];\n return coordinate;\n}\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {import(\"./geom/Circle.js\").default} circle The circle.\n * @return {Coordinate} Closest point on the circumference.\n */\nexport function closestOnCircle(coordinate, circle) {\n var r = circle.getRadius();\n var center = circle.getCenter();\n var x0 = center[0];\n var y0 = center[1];\n var x1 = coordinate[0];\n var y1 = coordinate[1];\n var dx = x1 - x0;\n var dy = y1 - y0;\n if (dx === 0 && dy === 0) {\n dx = 1;\n }\n var d = Math.sqrt(dx * dx + dy * dy);\n var x = x0 + (r * dx) / d;\n var y = y0 + (r * dy) / d;\n return [x, y];\n}\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {Array<Coordinate>} segment The two coordinates\n * of the segment.\n * @return {Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nexport function closestOnSegment(coordinate, segment) {\n var x0 = coordinate[0];\n var y0 = coordinate[1];\n var start = segment[0];\n var end = segment[1];\n var x1 = start[0];\n var y1 = start[1];\n var x2 = end[0];\n var y2 = end[1];\n var dx = x2 - x1;\n var dy = y2 - y1;\n var along = dx === 0 && dy === 0\n ? 0\n : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);\n var x, y;\n if (along <= 0) {\n x = x1;\n y = y1;\n }\n else if (along >= 1) {\n x = x2;\n y = y2;\n }\n else {\n x = x1 + along * dx;\n y = y1 + along * dy;\n }\n return [x, y];\n}\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY();\n * var out = stringifyFunc(coord);\n * // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY(2);\n * var out = stringifyFunc(coord);\n * // out is now '7.85, 47.98'\n *\n * @param {number=} opt_fractionDigits The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {CoordinateFormat} Coordinate format.\n * @api\n */\nexport function createStringXY(opt_fractionDigits) {\n return (\n /**\n * @param {Coordinate} coordinate Coordinate.\n * @return {string} String XY.\n */\n function (coordinate) {\n return toStringXY(coordinate, opt_fractionDigits);\n });\n}\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number=} opt_fractionDigits The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} String.\n */\nexport function degreesToStringHDMS(hemispheres, degrees, opt_fractionDigits) {\n var normalizedDegrees = modulo(degrees + 180, 360) - 180;\n var x = Math.abs(3600 * normalizedDegrees);\n var dflPrecision = opt_fractionDigits || 0;\n var precision = Math.pow(10, dflPrecision);\n var deg = Math.floor(x / 3600);\n var min = Math.floor((x - deg * 3600) / 60);\n var sec = x - deg * 3600 - min * 60;\n sec = Math.ceil(sec * precision) / precision;\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n return (deg +\n '\\u00b0 ' +\n padNumber(min, 2) +\n '\\u2032 ' +\n padNumber(sec, 2, dflPrecision) +\n '\\u2033' +\n (normalizedDegrees == 0\n ? ''\n : ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0)));\n}\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template);\n * // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template, 2);\n * // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n * that will be replaced by first and second coordinate values.\n * @param {number=} opt_fractionDigits The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nexport function format(coordinate, template, opt_fractionDigits) {\n if (coordinate) {\n return template\n .replace('{x}', coordinate[0].toFixed(opt_fractionDigits))\n .replace('{y}', coordinate[1].toFixed(opt_fractionDigits));\n }\n else {\n return '';\n }\n}\n/**\n * @param {Coordinate} coordinate1 First coordinate.\n * @param {Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nexport function equals(coordinate1, coordinate2) {\n var equals = true;\n for (var i = coordinate1.length - 1; i >= 0; --i) {\n if (coordinate1[i] != coordinate2[i]) {\n equals = false;\n break;\n }\n }\n return equals;\n}\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n * import {rotate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var rotateRadians = Math.PI / 2; // 90 degrees\n * rotate(coord, rotateRadians);\n * // coord is now [-47.983333, 7.85]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {Coordinate} Coordinate.\n * @api\n */\nexport function rotate(coordinate, angle) {\n var cosAngle = Math.cos(angle);\n var sinAngle = Math.sin(angle);\n var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n coordinate[0] = x;\n coordinate[1] = y;\n return coordinate;\n}\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {scale as scaleCoordinate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var scale = 1.2;\n * scaleCoordinate(coord, scale);\n * // coord is now [9.42, 57.5799996]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {Coordinate} Coordinate.\n */\nexport function scale(coordinate, scale) {\n coordinate[0] *= scale;\n coordinate[1] *= scale;\n return coordinate;\n}\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nexport function squaredDistance(coord1, coord2) {\n var dx = coord1[0] - coord2[0];\n var dy = coord1[1] - coord2[1];\n return dx * dx + dy * dy;\n}\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nexport function distance(coord1, coord2) {\n return Math.sqrt(squaredDistance(coord1, coord2));\n}\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {Coordinate} coordinate Coordinate of the point.\n * @param {Array<Coordinate>} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nexport function squaredDistanceToSegment(coordinate, segment) {\n return squaredDistance(coordinate, closestOnSegment(coordinate, segment));\n}\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord);\n * // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord, 1);\n * // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number=} opt_fractionDigits The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nexport function toStringHDMS(coordinate, opt_fractionDigits) {\n if (coordinate) {\n return (degreesToStringHDMS('NS', coordinate[1], opt_fractionDigits) +\n ' ' +\n degreesToStringHDMS('EW', coordinate[0], opt_fractionDigits));\n }\n else {\n return '';\n }\n}\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord);\n * // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord, 1);\n * // out is now '7.8, 48.0'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number=} opt_fractionDigits The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nexport function toStringXY(coordinate, opt_fractionDigits) {\n return format(coordinate, '{x}, {y}', opt_fractionDigits);\n}\n/**\n * Modifies the provided coordinate in-place to be within the real world\n * extent. The lower projection extent boundary is inclusive, the upper one\n * exclusive.\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {Coordinate} The coordinate within the real world extent.\n */\nexport function wrapX(coordinate, projection) {\n if (projection.canWrapX()) {\n var worldWidth = getWidth(projection.getExtent());\n var worldsAway = getWorldsAway(coordinate, projection, worldWidth);\n if (worldsAway) {\n coordinate[0] -= worldsAway * worldWidth;\n }\n }\n return coordinate;\n}\n/**\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {number=} opt_sourceExtentWidth Width of the source extent.\n * @return {number} Offset in world widths.\n */\nexport function getWorldsAway(coordinate, projection, opt_sourceExtentWidth) {\n var projectionExtent = projection.getExtent();\n var worldsAway = 0;\n if (projection.canWrapX() &&\n (coordinate[0] < projectionExtent[0] || coordinate[0] > projectionExtent[2])) {\n var sourceExtentWidth = opt_sourceExtentWidth || getWidth(projectionExtent);\n worldsAway = Math.floor((coordinate[0] - projectionExtent[0]) / sourceExtentWidth);\n }\n return worldsAway;\n}\n//# sourceMappingURL=coordinate.js.map","define([\n\t'exports',\n\t'../errors/RequestError',\n\t'../errors/CancelError',\n\t'../Deferred',\n\t'../io-query',\n\t'../_base/array',\n\t'../_base/lang',\n\t'../promise/Promise',\n\t'../has'\n], function(exports, RequestError, CancelError, Deferred, ioQuery, array, lang, Promise, has){\n\n\tfunction isArrayBuffer(value) {\n\t\treturn has('native-arraybuffer') && value instanceof ArrayBuffer\n\t}\n\n\tfunction isBlob(value) {\n\t\treturn has('native-blob') && value instanceof Blob\n\t}\n\t\n\tfunction isElement(value) {\n\t\tif(typeof Element !== 'undefined') { //all other\n\t\t\treturn value instanceof Element;\n\t\t}\n\n\t\t//IE<=7\n\t\treturn value.nodeType === 1;\n\t}\n\n\tfunction isFormData(value) {\n\t\treturn has('native-formdata') && value instanceof FormData;\n\t}\n\n\tfunction shouldDeepCopy(value) {\n\t\treturn value &&\n\t\t\ttypeof value === 'object' &&\n\t\t\t!isFormData(value) &&\n\t\t\t!isElement(value) &&\n\t\t\t!isBlob(value) &&\n\t\t\t!isArrayBuffer(value)\n\t}\n\n\texports.deepCopy = function(target, source) {\n\t\tfor (var name in source) {\n\t\t\tvar tval = target[name],\n \t\t\t sval = source[name];\n\t\t\tif (name !== '__proto__' && tval !== sval) {\n\t\t\t\tif (shouldDeepCopy(sval)) {\n\t\t\t\t\tif (Object.prototype.toString.call(sval) === '[object Date]') { // use this date test to handle crossing frame boundaries\n\t\t\t\t\t\ttarget[name] = new Date(sval);\n\t\t\t\t\t} else if (lang.isArray(sval)) {\n \t\t\t\t\t\t target[name] = exports.deepCopyArray(sval);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (tval && typeof tval === 'object') {\n\t\t\t\t\t\t\texports.deepCopy(tval, sval);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget[name] = exports.deepCopy({}, sval);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttarget[name] = sval;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn target;\n\t};\n\n\texports.deepCopyArray = function(source) {\n\t\tvar clonedArray = [];\n\t\tfor (var i = 0, l = source.length; i < l; i++) {\n\t\t\tvar svalItem = source[i];\n\t\t\tif (typeof svalItem === 'object') {\n\t\t\t\tclonedArray.push(exports.deepCopy({}, svalItem));\n\t\t\t} else {\n\t\t\t\tclonedArray.push(svalItem);\n\t\t\t}\n\t\t}\n\n\t\treturn clonedArray;\n\t};\n\n\texports.deepCreate = function deepCreate(source, properties){\n\t\tproperties = properties || {};\n\t\tvar target = lang.delegate(source),\n\t\t\tname, value;\n\n\t\tfor(name in source){\n\t\t\tvalue = source[name];\n\n\t\t\tif(value && typeof value === 'object'){\n\t\t\t\ttarget[name] = exports.deepCreate(value, properties[name]);\n\t\t\t}\n\t\t}\n\t\treturn exports.deepCopy(target, properties);\n\t};\n\n\tvar freeze = Object.freeze || function(obj){ return obj; };\n\tfunction okHandler(response){\n\t\treturn freeze(response);\n\t}\n\tfunction dataHandler (response) {\n\t\treturn response.data !== undefined ? response.data : response.text;\n\t}\n\n\texports.deferred = function deferred(response, cancel, isValid, isReady, handleResponse, last){\n\t\tvar def = new Deferred(function(reason){\n\t\t\tcancel && cancel(def, response);\n\n\t\t\tif(!reason || !(reason instanceof RequestError) && !(reason instanceof CancelError)){\n\t\t\t\treturn new CancelError('Request canceled', response);\n\t\t\t}\n\t\t\treturn reason;\n\t\t});\n\n\t\tdef.response = response;\n\t\tdef.isValid = isValid;\n\t\tdef.isReady = isReady;\n\t\tdef.handleResponse = handleResponse;\n\n\t\tfunction errHandler(error){\n\t\t\terror.response = response;\n\t\t\tthrow error;\n\t\t}\n\t\tvar responsePromise = def.then(okHandler).otherwise(errHandler);\n\n\t\tif(exports.notify){\n\t\t\tresponsePromise.then(\n\t\t\t\tlang.hitch(exports.notify, 'emit', 'load'),\n\t\t\t\tlang.hitch(exports.notify, 'emit', 'error')\n\t\t\t);\n\t\t}\n\n\t\tvar dataPromise = responsePromise.then(dataHandler);\n\n\t\t// http://bugs.dojotoolkit.org/ticket/16794\n\t\t// The following works around a leak in IE9 through the\n\t\t// prototype using lang.delegate on dataPromise and\n\t\t// assigning the result a property with a reference to\n\t\t// responsePromise.\n\t\tvar promise = new Promise();\n\t\tfor (var prop in dataPromise) {\n\t\t\tif (dataPromise.hasOwnProperty(prop)) {\n\t\t\t\tpromise[prop] = dataPromise[prop];\n\t\t\t}\n\t\t}\n\t\tpromise.response = responsePromise;\n\t\tfreeze(promise);\n\t\t// End leak fix\n\n\n\t\tif(last){\n\t\t\tdef.then(function(response){\n\t\t\t\tlast.call(def, response);\n\t\t\t}, function(error){\n\t\t\t\tlast.call(def, response, error);\n\t\t\t});\n\t\t}\n\n\t\tdef.promise = promise;\n\t\tdef.then = promise.then;\n\n\t\treturn def;\n\t};\n\n\texports.addCommonMethods = function addCommonMethods(provider, methods){\n\t\tarray.forEach(methods||['GET', 'POST', 'PUT', 'DELETE'], function(method){\n\t\t\tprovider[(method === 'DELETE' ? 'DEL' : method).toLowerCase()] = function(url, options){\n\t\t\t\toptions = lang.delegate(options||{});\n\t\t\t\toptions.method = method;\n\t\t\t\treturn provider(url, options);\n\t\t\t};\n\t\t});\n\t};\n\n\texports.parseArgs = function parseArgs(url, options, skipData){\n\t\tvar data = options.data,\n\t\t\tquery = options.query;\n\n\t\tif(data && !skipData){\n\t\t\tif(typeof data === 'object' && (!(has('native-xhr2')) || !(isArrayBuffer(data) || isBlob(data) ))){\n\t\t\t\toptions.data = ioQuery.objectToQuery(data);\n\t\t\t}\n\t\t}\n\n\t\tif(query){\n\t\t\tif(typeof query === 'object'){\n\t\t\t\tquery = ioQuery.objectToQuery(query);\n\t\t\t}\n\t\t\tif(options.preventCache){\n\t\t\t\tquery += (query ? '&' : '') + 'request.preventCache=' + (+(new Date));\n\t\t\t}\n\t\t}else if(options.preventCache){\n\t\t\tquery = 'request.preventCache=' + (+(new Date));\n\t\t}\n\n\t\tif(url && query){\n\t\t\turl += (~url.indexOf('?') ? '&' : '?') + query;\n\t\t}\n\n\t\treturn {\n\t\t\turl: url,\n\t\t\toptions: options,\n\t\t\tgetHeader: function(headerName){ return null; }\n\t\t};\n\t};\n\n\texports.checkStatus = function(stat){\n\t\tstat = stat || 0;\n\t\treturn (stat >= 200 && stat < 300) || // allow any 2XX response code\n\t\t\tstat === 304 || // or, get it out of the cache\n\t\t\tstat === 1223 || // or, Internet Explorer mangled the status code\n\t\t\t!stat; // or, we're Titanium/browser chrome/chrome extension requesting a local file\n\t};\n});\n","/**\n * @module ol/proj/Units\n */\n/**\n * Projection units: `'degrees'`, `'ft'`, `'m'`, `'pixels'`, `'tile-pixels'` or\n * `'us-ft'`.\n * @enum {string}\n */\nvar Units = {\n /**\n * Degrees\n * @api\n */\n DEGREES: 'degrees',\n /**\n * Feet\n * @api\n */\n FEET: 'ft',\n /**\n * Meters\n * @api\n */\n METERS: 'm',\n /**\n * Pixels\n * @api\n */\n PIXELS: 'pixels',\n /**\n * Tile Pixels\n * @api\n */\n TILE_PIXELS: 'tile-pixels',\n /**\n * US Feet\n * @api\n */\n USFEET: 'us-ft',\n};\n/**\n * Meters per unit lookup table.\n * @const\n * @type {Object<Units, number>}\n * @api\n */\nexport var METERS_PER_UNIT = {};\n// use the radius of the Normal sphere\nMETERS_PER_UNIT[Units.DEGREES] = (2 * Math.PI * 6370997) / 360;\nMETERS_PER_UNIT[Units.FEET] = 0.3048;\nMETERS_PER_UNIT[Units.METERS] = 1;\nMETERS_PER_UNIT[Units.USFEET] = 1200 / 3937;\nexport default Units;\n//# sourceMappingURL=Units.js.map","/**\n * @module ol/transform\n */\nimport { assert } from './asserts.js';\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array<number>} Transform\n * @api\n */\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n/**\n * @private\n * @type {Transform}\n */\nvar tmp_ = new Array(6);\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n return [1, 0, 0, 1, 0, 0];\n}\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n return set(transform, 1, 0, 0, 1, 0, 0);\n}\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n var a1 = transform1[0];\n var b1 = transform1[1];\n var c1 = transform1[2];\n var d1 = transform1[3];\n var e1 = transform1[4];\n var f1 = transform1[5];\n var a2 = transform2[0];\n var b2 = transform2[1];\n var c2 = transform2[2];\n var d2 = transform2[3];\n var e2 = transform2[4];\n var f2 = transform2[5];\n transform1[0] = a1 * a2 + c1 * b2;\n transform1[1] = b1 * a2 + d1 * b2;\n transform1[2] = a1 * c2 + c1 * d2;\n transform1[3] = b1 * c2 + d1 * d2;\n transform1[4] = a1 * e2 + c1 * f2 + e1;\n transform1[5] = b1 * e2 + d1 * f2 + f1;\n return transform1;\n}\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n transform[0] = a;\n transform[1] = b;\n transform[2] = c;\n transform[3] = d;\n transform[4] = e;\n transform[5] = f;\n return transform;\n}\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n transform1[0] = transform2[0];\n transform1[1] = transform2[1];\n transform1[2] = transform2[2];\n transform1[3] = transform2[3];\n transform1[4] = transform2[4];\n transform1[5] = transform2[5];\n return transform1;\n}\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n * chained together.\n */\nexport function apply(transform, coordinate) {\n var x = coordinate[0];\n var y = coordinate[1];\n coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n return coordinate;\n}\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n return set(target, x, 0, 0, y, 0, 0);\n}\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n var sin = Math.sin(angle);\n var cos = Math.cos(angle);\n transform[0] = sx * cos;\n transform[1] = sy * sin;\n transform[2] = -sx * sin;\n transform[3] = sy * cos;\n transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n return transform;\n}\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` porperty of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n return makeInverse(source, source);\n}\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n * the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n var det = determinant(source);\n assert(det !== 0, 32); // Transformation matrix cannot be inverted\n var a = source[0];\n var b = source[1];\n var c = source[2];\n var d = source[3];\n var e = source[4];\n var f = source[5];\n target[0] = d / det;\n target[1] = -b / det;\n target[2] = -c / det;\n target[3] = a / det;\n target[4] = (c * f - d * e) / det;\n target[5] = -(a * f - b * e) / det;\n return target;\n}\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n return mat[0] * mat[3] - mat[1] * mat[2];\n}\n/**\n * A string version of the transform. This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n return 'matrix(' + mat.join(', ') + ')';\n}\n//# sourceMappingURL=transform.js.map","/**\n * @module ol/render/canvas\n */\nimport BaseObject from '../Object.js';\nimport EventTarget from '../events/Target.js';\nimport { WORKER_OFFSCREEN_CANVAS } from '../has.js';\nimport { clear } from '../obj.js';\nimport { createCanvasContext2D } from '../dom.js';\nimport { getFontParameters } from '../css.js';\nimport { toString } from '../transform.js';\n/**\n * @typedef {Object} FillState\n * @property {import(\"../colorlike.js\").ColorLike} fillStyle\n */\n/**\n * @typedef Label\n * @property {number} width\n * @property {number} height\n * @property {Array<string|number>} contextInstructions\n */\n/**\n * @typedef {Object} FillStrokeState\n * @property {import(\"../colorlike.js\").ColorLike} [currentFillStyle]\n * @property {import(\"../colorlike.js\").ColorLike} [currentStrokeStyle]\n * @property {CanvasLineCap} [currentLineCap]\n * @property {Array<number>} currentLineDash\n * @property {number} [currentLineDashOffset]\n * @property {CanvasLineJoin} [currentLineJoin]\n * @property {number} [currentLineWidth]\n * @property {number} [currentMiterLimit]\n * @property {number} [lastStroke]\n * @property {import(\"../colorlike.js\").ColorLike} [fillStyle]\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle]\n * @property {CanvasLineCap} [lineCap]\n * @property {Array<number>} lineDash\n * @property {number} [lineDashOffset]\n * @property {CanvasLineJoin} [lineJoin]\n * @property {number} [lineWidth]\n * @property {number} [miterLimit]\n */\n/**\n * @typedef {Object} StrokeState\n * @property {CanvasLineCap} lineCap\n * @property {Array<number>} lineDash\n * @property {number} lineDashOffset\n * @property {CanvasLineJoin} lineJoin\n * @property {number} lineWidth\n * @property {number} miterLimit\n * @property {import(\"../colorlike.js\").ColorLike} strokeStyle\n */\n/**\n * @typedef {Object} TextState\n * @property {string} font\n * @property {string} [textAlign]\n * @property {string} textBaseline\n * @property {string} [placement]\n * @property {number} [maxAngle]\n * @property {boolean} [overflow]\n * @property {import(\"../style/Fill.js\").default} [backgroundFill]\n * @property {import(\"../style/Stroke.js\").default} [backgroundStroke]\n * @property {import(\"../size.js\").Size} [scale]\n * @property {Array<number>} [padding]\n */\n/**\n * @typedef {Object} SerializableInstructions\n * @property {Array<*>} instructions The rendering instructions.\n * @property {Array<*>} hitDetectionInstructions The rendering hit detection instructions.\n * @property {Array<number>} coordinates The array of all coordinates.\n * @property {!Object<string, TextState>} [textStates] The text states (decluttering).\n * @property {!Object<string, FillState>} [fillStates] The fill states (decluttering).\n * @property {!Object<string, StrokeState>} [strokeStates] The stroke states (decluttering).\n */\n/**\n * @typedef {Object<number, import(\"./canvas/Executor.js\").ReplayImageOrLabelArgs>} DeclutterImageWithText\n */\n/**\n * @const\n * @type {string}\n */\nexport var defaultFont = '10px sans-serif';\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport var defaultFillStyle = '#000';\n/**\n * @const\n * @type {CanvasLineCap}\n */\nexport var defaultLineCap = 'round';\n/**\n * @const\n * @type {Array<number>}\n */\nexport var defaultLineDash = [];\n/**\n * @const\n * @type {number}\n */\nexport var defaultLineDashOffset = 0;\n/**\n * @const\n * @type {CanvasLineJoin}\n */\nexport var defaultLineJoin = 'round';\n/**\n * @const\n * @type {number}\n */\nexport var defaultMiterLimit = 10;\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport var defaultStrokeStyle = '#000';\n/**\n * @const\n * @type {string}\n */\nexport var defaultTextAlign = 'center';\n/**\n * @const\n * @type {string}\n */\nexport var defaultTextBaseline = 'middle';\n/**\n * @const\n * @type {Array<number>}\n */\nexport var defaultPadding = [0, 0, 0, 0];\n/**\n * @const\n * @type {number}\n */\nexport var defaultLineWidth = 1;\n/**\n * @type {BaseObject}\n */\nexport var checkedFonts = new BaseObject();\n/**\n * The label cache for text rendering. To change the default cache size of 2048\n * entries, use {@link module:ol/structs/LRUCache#setSize}.\n * Deprecated - there is no label cache any more.\n * @type {?}\n * @api\n * @deprecated\n */\nexport var labelCache = new EventTarget();\nlabelCache.setSize = function () {\n console.warn('labelCache is deprecated.'); //eslint-disable-line\n};\n/**\n * @type {CanvasRenderingContext2D}\n */\nvar measureContext = null;\n/**\n * @type {string}\n */\nvar measureFont;\n/**\n * @type {!Object<string, number>}\n */\nexport var textHeights = {};\n/**\n * Clears the label cache when a font becomes available.\n * @param {string} fontSpec CSS font spec.\n */\nexport var registerFont = (function () {\n var retries = 100;\n var size = '32px ';\n var referenceFonts = ['monospace', 'serif'];\n var len = referenceFonts.length;\n var text = 'wmytzilWMYTZIL@#/&?$%10\\uF013';\n var interval, referenceWidth;\n /**\n * @param {string} fontStyle Css font-style\n * @param {string} fontWeight Css font-weight\n * @param {*} fontFamily Css font-family\n * @return {boolean} Font with style and weight is available\n */\n function isAvailable(fontStyle, fontWeight, fontFamily) {\n var available = true;\n for (var i = 0; i < len; ++i) {\n var referenceFont = referenceFonts[i];\n referenceWidth = measureTextWidth(fontStyle + ' ' + fontWeight + ' ' + size + referenceFont, text);\n if (fontFamily != referenceFont) {\n var width = measureTextWidth(fontStyle +\n ' ' +\n fontWeight +\n ' ' +\n size +\n fontFamily +\n ',' +\n referenceFont, text);\n // If width and referenceWidth are the same, then the fallback was used\n // instead of the font we wanted, so the font is not available.\n available = available && width != referenceWidth;\n }\n }\n if (available) {\n return true;\n }\n return false;\n }\n function check() {\n var done = true;\n var fonts = checkedFonts.getKeys();\n for (var i = 0, ii = fonts.length; i < ii; ++i) {\n var font = fonts[i];\n if (checkedFonts.get(font) < retries) {\n if (isAvailable.apply(this, font.split('\\n'))) {\n clear(textHeights);\n // Make sure that loaded fonts are picked up by Safari\n measureContext = null;\n measureFont = undefined;\n checkedFonts.set(font, retries);\n }\n else {\n checkedFonts.set(font, checkedFonts.get(font) + 1, true);\n done = false;\n }\n }\n }\n if (done) {\n clearInterval(interval);\n interval = undefined;\n }\n }\n return function (fontSpec) {\n var font = getFontParameters(fontSpec);\n if (!font) {\n return;\n }\n var families = font.families;\n for (var i = 0, ii = families.length; i < ii; ++i) {\n var family = families[i];\n var key = font.style + '\\n' + font.weight + '\\n' + family;\n if (checkedFonts.get(key) === undefined) {\n checkedFonts.set(key, retries, true);\n if (!isAvailable(font.style, font.weight, family)) {\n checkedFonts.set(key, 0, true);\n if (interval === undefined) {\n interval = setInterval(check, 32);\n }\n }\n }\n }\n };\n})();\n/**\n * @param {string} font Font to use for measuring.\n * @return {import(\"../size.js\").Size} Measurement.\n */\nexport var measureTextHeight = (function () {\n /**\n * @type {HTMLDivElement}\n */\n var div;\n return function (fontSpec) {\n var height = textHeights[fontSpec];\n if (height == undefined) {\n if (WORKER_OFFSCREEN_CANVAS) {\n var font = getFontParameters(fontSpec);\n var metrics = measureText(fontSpec, 'Žg');\n var lineHeight = isNaN(Number(font.lineHeight))\n ? 1.2\n : Number(font.lineHeight);\n height =\n lineHeight *\n (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);\n }\n else {\n if (!div) {\n div = document.createElement('div');\n div.innerHTML = 'M';\n div.style.margin = '0 !important';\n div.style.padding = '0 !important';\n div.style.position = 'absolute !important';\n div.style.left = '-99999px !important';\n }\n div.style.font = fontSpec;\n document.body.appendChild(div);\n height = div.offsetHeight;\n document.body.removeChild(div);\n }\n textHeights[fontSpec] = height;\n }\n return height;\n };\n})();\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {TextMetrics} Text metrics.\n */\nfunction measureText(font, text) {\n if (!measureContext) {\n measureContext = createCanvasContext2D(1, 1);\n }\n if (font != measureFont) {\n measureContext.font = font;\n measureFont = measureContext.font;\n }\n return measureContext.measureText(text);\n}\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {number} Width.\n */\nexport function measureTextWidth(font, text) {\n return measureText(font, text).width;\n}\n/**\n * Measure text width using a cache.\n * @param {string} font The font.\n * @param {string} text The text to measure.\n * @param {Object<string, number>} cache A lookup of cached widths by text.\n * @returns {number} The text width.\n */\nexport function measureAndCacheTextWidth(font, text, cache) {\n if (text in cache) {\n return cache[text];\n }\n var width = measureTextWidth(font, text);\n cache[text] = width;\n return width;\n}\n/**\n * @param {string} font Font to use for measuring.\n * @param {Array<string>} lines Lines to measure.\n * @param {Array<number>} widths Array will be populated with the widths of\n * each line.\n * @return {number} Width of the whole text.\n */\nexport function measureTextWidths(font, lines, widths) {\n var numLines = lines.length;\n var width = 0;\n for (var i = 0; i < numLines; ++i) {\n var currentWidth = measureTextWidth(font, lines[i]);\n width = Math.max(width, currentWidth);\n widths.push(currentWidth);\n }\n return width;\n}\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n * @param {number} offsetX X offset.\n * @param {number} offsetY Y offset.\n */\nexport function rotateAtOffset(context, rotation, offsetX, offsetY) {\n if (rotation !== 0) {\n context.translate(offsetX, offsetY);\n context.rotate(rotation);\n context.translate(-offsetX, -offsetY);\n }\n}\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../transform.js\").Transform|null} transform Transform.\n * @param {number} opacity Opacity.\n * @param {Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../size.js\").Size} scale Scale.\n */\nexport function drawImageOrLabel(context, transform, opacity, labelOrImage, originX, originY, w, h, x, y, scale) {\n context.save();\n if (opacity !== 1) {\n context.globalAlpha *= opacity;\n }\n if (transform) {\n context.setTransform.apply(context, transform);\n }\n if ( /** @type {*} */(labelOrImage).contextInstructions) {\n // label\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n executeLabelInstructions(/** @type {Label} */ (labelOrImage), context);\n }\n else if (scale[0] < 0 || scale[1] < 0) {\n // flipped image\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (labelOrImage), originX, originY, w, h, 0, 0, w, h);\n }\n else {\n // if image not flipped translate and scale can be avoided\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (labelOrImage), originX, originY, w, h, x, y, w * scale[0], h * scale[1]);\n }\n context.restore();\n}\n/**\n * @param {Label} label Label.\n * @param {CanvasRenderingContext2D} context Context.\n */\nfunction executeLabelInstructions(label, context) {\n var contextInstructions = label.contextInstructions;\n for (var i = 0, ii = contextInstructions.length; i < ii; i += 2) {\n if (Array.isArray(contextInstructions[i + 1])) {\n context[contextInstructions[i]].apply(context, contextInstructions[i + 1]);\n }\n else {\n context[contextInstructions[i]] = contextInstructions[i + 1];\n }\n }\n}\n/**\n * @type {HTMLCanvasElement}\n * @private\n */\nvar createTransformStringCanvas = null;\n/**\n * @param {import(\"../transform.js\").Transform} transform Transform.\n * @return {string} CSS transform.\n */\nexport function createTransformString(transform) {\n if (WORKER_OFFSCREEN_CANVAS) {\n return toString(transform);\n }\n else {\n if (!createTransformStringCanvas) {\n createTransformStringCanvas = createCanvasContext2D(1, 1).canvas;\n }\n createTransformStringCanvas.style.transform = toString(transform);\n return createTransformStringCanvas.style.transform;\n }\n}\n//# sourceMappingURL=canvas.js.map","define([\n\t'./request/default!'/*=====,\n\t'./_base/declare',\n\t'./promise/Promise' =====*/\n], function(request/*=====, declare, Promise =====*/){\n\t/*=====\n\trequest = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend a request using the default transport for the current platform.\n\t\t// url: String\n\t\t//\t\tThe URL to request.\n\t\t// options: dojo/request.__Options?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\trequest.__Promise = declare(Promise, {\n\t\t// response: dojo/promise/Promise\n\t\t//\t\tA promise resolving to an object representing\n\t\t//\t\tthe response from the server.\n\t});\n\trequest.__BaseOptions = declare(null, {\n\t\t// query: String|Object?\n\t\t//\t\tQuery parameters to append to the URL.\n\t\t// data: String|Object?\n\t\t//\t\tData to transfer. This is ignored for GET and DELETE\n\t\t//\t\trequests.\n\t\t// preventCache: Boolean?\n\t\t//\t\tWhether to append a cache-busting parameter to the URL.\n\t\t// timeout: Integer?\n\t\t//\t\tMilliseconds to wait for the response. If this time\n\t\t//\t\tpasses, the then the promise is rejected.\n\t\t// handleAs: String?\n\t\t//\t\tHow to handle the response from the server. Default is\n\t\t//\t\t'text'. Other values are 'json', 'javascript', and 'xml'.\n\t});\n\trequest.__MethodOptions = declare(null, {\n\t\t// method: String?\n\t\t//\t\tThe HTTP method to use to make the request. Must be\n\t\t//\t\tuppercase.\n\t});\n\trequest.__Options = declare([request.__BaseOptions, request.__MethodOptions]);\n\n\trequest.get = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP GET request using the default transport for the current platform.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\trequest.post = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP POST request using the default transport for the current platform.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\trequest.put = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP POST request using the default transport for the current platform.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\trequest.del = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP DELETE request using the default transport for the current platform.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\t=====*/\n\treturn request;\n});\n","define([\n\t'./util',\n\t'../errors/RequestTimeoutError',\n\t'../errors/CancelError',\n\t'../_base/array',\n\t'../has!host-browser?../_base/window:',\n\t'../has!host-browser?dom-addeventlistener?:../on:'\n], function(util, RequestTimeoutError, CancelError, array, win, on){\n\t// avoid setting a timer per request. It degrades performance on IE\n\t// something fierece if we don't use unified loops.\n\tvar _inFlightIntvl = null,\n\t\t_inFlight = [];\n\n\tfunction watchInFlight(){\n\t\t// summary:\n\t\t//\t\tinternal method that checks each inflight XMLHttpRequest to see\n\t\t//\t\tif it has completed or if the timeout situation applies.\n\n\t\tvar now = +(new Date);\n\n\t\t// we need manual loop because we often modify _inFlight (and therefore 'i') while iterating\n\t\tfor(var i = 0, dfd; i < _inFlight.length && (dfd = _inFlight[i]); i++){\n\t\t\tvar response = dfd.response,\n\t\t\t\toptions = response.options;\n\t\t\tif((dfd.isCanceled && dfd.isCanceled()) || (dfd.isValid && !dfd.isValid(response))){\n\t\t\t\t_inFlight.splice(i--, 1);\n\t\t\t\twatch._onAction && watch._onAction();\n\t\t\t}else if(dfd.isReady && dfd.isReady(response)){\n\t\t\t\t_inFlight.splice(i--, 1);\n\t\t\t\tdfd.handleResponse(response);\n\t\t\t\twatch._onAction && watch._onAction();\n\t\t\t}else if(dfd.startTime){\n\t\t\t\t// did we timeout?\n\t\t\t\tif(dfd.startTime + (options.timeout || 0) < now){\n\t\t\t\t\t_inFlight.splice(i--, 1);\n\t\t\t\t\t// Cancel the request so the io module can do appropriate cleanup.\n\t\t\t\t\tdfd.cancel(new RequestTimeoutError('Timeout exceeded', response));\n\t\t\t\t\twatch._onAction && watch._onAction();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twatch._onInFlight && watch._onInFlight(dfd);\n\n\t\tif(!_inFlight.length){\n\t\t\tclearInterval(_inFlightIntvl);\n\t\t\t_inFlightIntvl = null;\n\t\t}\n\t}\n\n\tfunction watch(dfd){\n\t\t// summary:\n\t\t//\t\tWatches the io request represented by dfd to see if it completes.\n\t\t// dfd: Deferred\n\t\t//\t\tThe Deferred object to watch.\n\t\t// response: Object\n\t\t//\t\tThe object used as the value of the request promise.\n\t\t// validCheck: Function\n\t\t//\t\tFunction used to check if the IO request is still valid. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\t// ioCheck: Function\n\t\t//\t\tFunction used to check if basic IO call worked. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\t// resHandle: Function\n\t\t//\t\tFunction used to process response. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\tif(dfd.response.options.timeout){\n\t\t\tdfd.startTime = +(new Date);\n\t\t}\n\n\t\tif(dfd.isFulfilled()){\n\t\t\t// bail out if the deferred is already fulfilled\n\t\t\treturn;\n\t\t}\n\n\t\t_inFlight.push(dfd);\n\t\tif(!_inFlightIntvl){\n\t\t\t_inFlightIntvl = setInterval(watchInFlight, 50);\n\t\t}\n\n\t\t// handle sync requests separately from async:\n\t\t// http://bugs.dojotoolkit.org/ticket/8467\n\t\tif(dfd.response.options.sync){\n\t\t\twatchInFlight();\n\t\t}\n\t}\n\n\twatch.cancelAll = function cancelAll(){\n\t\t// summary:\n\t\t//\t\tCancels all pending IO requests, regardless of IO type\n\t\ttry{\n\t\t\tarray.forEach(_inFlight, function(dfd){\n\t\t\t\ttry{\n\t\t\t\t\tdfd.cancel(new CancelError('All requests canceled.'));\n\t\t\t\t}catch(e){}\n\t\t\t});\n\t\t}catch(e){}\n\t};\n\n\tif(win && on && win.doc.attachEvent){\n\t\t// Automatically call cancel all io calls on unload in IE\n\t\t// http://bugs.dojotoolkit.org/ticket/2357\n\t\ton(win.global, 'unload', function(){\n\t\t\twatch.cancelAll();\n\t\t});\n\t}\n\n\treturn watch;\n});\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/Interaction\n */\nimport BaseObject from '../Object.js';\nimport InteractionProperty from './Property.js';\nimport { easeOut, linear } from '../easing.js';\n/**\n * Object literal with config options for interactions.\n * @typedef {Object} InteractionOptions\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} handleEvent\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. If the function returns a falsy value, propagation of\n * the event to other interactions in the map's interactions chain will be\n * prevented (this includes functions with no explicit return). The interactions\n * are traversed in reverse order of the interactions collection of the map.\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * User actions that change the state of the map. Some are similar to controls,\n * but are not associated with a DOM element.\n * For example, {@link module:ol/interaction/KeyboardZoom~KeyboardZoom} is\n * functionally the same as {@link module:ol/control/Zoom~Zoom}, but triggered\n * by a keyboard event not a button element event.\n * Although interactions do not have a DOM element, some of them do render\n * vectors and so are visible on the screen.\n * @api\n */\nvar Interaction = /** @class */ (function (_super) {\n __extends(Interaction, _super);\n /**\n * @param {InteractionOptions=} opt_options Options.\n */\n function Interaction(opt_options) {\n var _this = _super.call(this) || this;\n if (opt_options && opt_options.handleEvent) {\n _this.handleEvent = opt_options.handleEvent;\n }\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n _this.map_ = null;\n _this.setActive(true);\n return _this;\n }\n /**\n * Return whether the interaction is currently active.\n * @return {boolean} `true` if the interaction is active, `false` otherwise.\n * @observable\n * @api\n */\n Interaction.prototype.getActive = function () {\n return /** @type {boolean} */ (this.get(InteractionProperty.ACTIVE));\n };\n /**\n * Get the map associated with this interaction.\n * @return {import(\"../PluggableMap.js\").default} Map.\n * @api\n */\n Interaction.prototype.getMap = function () {\n return this.map_;\n };\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event}.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n Interaction.prototype.handleEvent = function (mapBrowserEvent) {\n return true;\n };\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n */\n Interaction.prototype.setActive = function (active) {\n this.set(InteractionProperty.ACTIVE, active);\n };\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n Interaction.prototype.setMap = function (map) {\n this.map_ = map;\n };\n return Interaction;\n}(BaseObject));\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {import(\"../coordinate.js\").Coordinate} delta Delta.\n * @param {number=} opt_duration Duration.\n */\nexport function pan(view, delta, opt_duration) {\n var currentCenter = view.getCenterInternal();\n if (currentCenter) {\n var center = [currentCenter[0] + delta[0], currentCenter[1] + delta[1]];\n view.animateInternal({\n duration: opt_duration !== undefined ? opt_duration : 250,\n easing: linear,\n center: view.getConstrainedCenter(center),\n });\n }\n}\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {number} delta Delta from previous zoom level.\n * @param {import(\"../coordinate.js\").Coordinate=} opt_anchor Anchor coordinate in the user projection.\n * @param {number=} opt_duration Duration.\n */\nexport function zoomByDelta(view, delta, opt_anchor, opt_duration) {\n var currentZoom = view.getZoom();\n if (currentZoom === undefined) {\n return;\n }\n var newZoom = view.getConstrainedZoom(currentZoom + delta);\n var newResolution = view.getResolutionForZoom(newZoom);\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n resolution: newResolution,\n anchor: opt_anchor,\n duration: opt_duration !== undefined ? opt_duration : 250,\n easing: easeOut,\n });\n}\nexport default Interaction;\n//# sourceMappingURL=Interaction.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nexport const marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nexport const nodeMarker = `<!--${marker}-->`;\nexport const markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n/**\n * Suffix appended to all bound attribute names.\n */\nexport const boundAttributeSuffix = '$lit$';\n/**\n * An updatable Template that tracks the location of dynamic parts.\n */\nexport class Template {\n constructor(result, element) {\n this.parts = [];\n this.element = element;\n const nodesToRemove = [];\n const stack = [];\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(element.content, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n // Keeps track of the last index associated with a part. We try to delete\n // unnecessary nodes, but we never want to associate two different parts\n // to the same index. They must have a constant node between.\n let lastPartIndex = 0;\n let index = -1;\n let partIndex = 0;\n const { strings, values: { length } } = result;\n while (partIndex < length) {\n const node = walker.nextNode();\n if (node === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop();\n continue;\n }\n index++;\n if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n if (node.hasAttributes()) {\n const attributes = node.attributes;\n const { length } = attributes;\n // Per\n // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n // attributes are not guaranteed to be returned in document order.\n // In particular, Edge/IE can return them out of order, so we cannot\n // assume a correspondence between part index and attribute index.\n let count = 0;\n for (let i = 0; i < length; i++) {\n if (endsWith(attributes[i].name, boundAttributeSuffix)) {\n count++;\n }\n }\n while (count-- > 0) {\n // Get the template literal section leading up to the first\n // expression in this attribute\n const stringForPart = strings[partIndex];\n // Find the attribute name\n const name = lastAttributeNameRegex.exec(stringForPart)[2];\n // Find the corresponding attribute\n // All bound attributes have had a suffix added in\n // TemplateResult#getHTML to opt out of special attribute\n // handling. To look up the attribute value we also need to add\n // the suffix.\n const attributeLookupName = name.toLowerCase() + boundAttributeSuffix;\n const attributeValue = node.getAttribute(attributeLookupName);\n node.removeAttribute(attributeLookupName);\n const statics = attributeValue.split(markerRegex);\n this.parts.push({ type: 'attribute', index, name, strings: statics });\n partIndex += statics.length - 1;\n }\n }\n if (node.tagName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = node.content;\n }\n }\n else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n const data = node.data;\n if (data.indexOf(marker) >= 0) {\n const parent = node.parentNode;\n const strings = data.split(markerRegex);\n const lastIndex = strings.length - 1;\n // Generate a new text node for each literal section\n // These nodes are also used as the markers for node parts\n for (let i = 0; i < lastIndex; i++) {\n let insert;\n let s = strings[i];\n if (s === '') {\n insert = createMarker();\n }\n else {\n const match = lastAttributeNameRegex.exec(s);\n if (match !== null && endsWith(match[2], boundAttributeSuffix)) {\n s = s.slice(0, match.index) + match[1] +\n match[2].slice(0, -boundAttributeSuffix.length) + match[3];\n }\n insert = document.createTextNode(s);\n }\n parent.insertBefore(insert, node);\n this.parts.push({ type: 'node', index: ++index });\n }\n // If there's no text, we must insert a comment to mark our place.\n // Else, we can trust it will stick around after cloning.\n if (strings[lastIndex] === '') {\n parent.insertBefore(createMarker(), node);\n nodesToRemove.push(node);\n }\n else {\n node.data = strings[lastIndex];\n }\n // We have a part for each match found\n partIndex += lastIndex;\n }\n }\n else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n if (node.data === marker) {\n const parent = node.parentNode;\n // Add a new marker node to be the startNode of the Part if any of\n // the following are true:\n // * We don't have a previousSibling\n // * The previousSibling is already the start of a previous part\n if (node.previousSibling === null || index === lastPartIndex) {\n index++;\n parent.insertBefore(createMarker(), node);\n }\n lastPartIndex = index;\n this.parts.push({ type: 'node', index });\n // If we don't have a nextSibling, keep this node so we have an end.\n // Else, we can remove it to save future costs.\n if (node.nextSibling === null) {\n node.data = '';\n }\n else {\n nodesToRemove.push(node);\n index--;\n }\n partIndex++;\n }\n else {\n let i = -1;\n while ((i = node.data.indexOf(marker, i + 1)) !== -1) {\n // Comment node has a binding marker inside, make an inactive part\n // The binding won't work, but subsequent bindings will\n // TODO (justinfagnani): consider whether it's even worth it to\n // make bindings in comments work\n this.parts.push({ type: 'node', index: -1 });\n partIndex++;\n }\n }\n }\n }\n // Remove text binding nodes after the walk to not disturb the TreeWalker\n for (const n of nodesToRemove) {\n n.parentNode.removeChild(n);\n }\n }\n}\nconst endsWith = (str, suffix) => {\n const index = str.length - suffix.length;\n return index >= 0 && str.slice(index) === suffix;\n};\nexport const isTemplatePartActive = (part) => part.index !== -1;\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nexport const createMarker = () => document.createComment('');\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-characters\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters, which includes every\n * space character except \" \".\n *\n * So an attribute is:\n * * The name: any character except a control character, space character, ('),\n * (\"), \">\", \"=\", or \"/\"\n * * Followed by zero or more space characters\n * * Followed by \"=\"\n * * Followed by zero or more space characters\n * * Followed by:\n * * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n * * (\") then any non-(\"), or\n * * (') then any non-(')\n */\nexport const lastAttributeNameRegex = \n// eslint-disable-next-line no-control-regex\n/([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n//# sourceMappingURL=template.js.map","/**\n * @module ol/CollectionEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when an item is added to the collection.\n * @event module:ol/Collection.CollectionEvent#add\n * @api\n */\n ADD: 'add',\n /**\n * Triggered when an item is removed from the collection.\n * @event module:ol/Collection.CollectionEvent#remove\n * @api\n */\n REMOVE: 'remove',\n};\n//# sourceMappingURL=CollectionEventType.js.map","/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: EventType.CLICK,\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: EventType.DBLCLICK,\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n//# sourceMappingURL=MapBrowserEventType.js.map","/**\n * @module ol/geom/flat/deflate\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinate(flatCoordinates, offset, coordinate, stride) {\n for (var i = 0, ii = coordinate.length; i < ii; ++i) {\n flatCoordinates[offset++] = coordinate[i];\n }\n return offset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<import(\"../../coordinate.js\").Coordinate>} coordinates Coordinates.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinates(flatCoordinates, offset, coordinates, stride) {\n for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n var coordinate = coordinates[i];\n for (var j = 0; j < stride; ++j) {\n flatCoordinates[offset++] = coordinate[j];\n }\n }\n return offset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<import(\"../../coordinate.js\").Coordinate>>} coordinatess Coordinatess.\n * @param {number} stride Stride.\n * @param {Array<number>=} opt_ends Ends.\n * @return {Array<number>} Ends.\n */\nexport function deflateCoordinatesArray(flatCoordinates, offset, coordinatess, stride, opt_ends) {\n var ends = opt_ends ? opt_ends : [];\n var i = 0;\n for (var j = 0, jj = coordinatess.length; j < jj; ++j) {\n var end = deflateCoordinates(flatCoordinates, offset, coordinatess[j], stride);\n ends[i++] = end;\n offset = end;\n }\n ends.length = i;\n return ends;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<Array<import(\"../../coordinate.js\").Coordinate>>>} coordinatesss Coordinatesss.\n * @param {number} stride Stride.\n * @param {Array<Array<number>>=} opt_endss Endss.\n * @return {Array<Array<number>>} Endss.\n */\nexport function deflateMultiCoordinatesArray(flatCoordinates, offset, coordinatesss, stride, opt_endss) {\n var endss = opt_endss ? opt_endss : [];\n var i = 0;\n for (var j = 0, jj = coordinatesss.length; j < jj; ++j) {\n var ends = deflateCoordinatesArray(flatCoordinates, offset, coordinatesss[j], stride, endss[i]);\n endss[i++] = ends;\n offset = ends[ends.length - 1];\n }\n endss.length = i;\n return endss;\n}\n//# sourceMappingURL=deflate.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/geom/SimpleGeometry\n */\nimport Geometry from './Geometry.js';\nimport GeometryLayout from './GeometryLayout.js';\nimport { abstract } from '../util.js';\nimport { createOrUpdateFromFlatCoordinates, getCenter } from '../extent.js';\nimport { rotate, scale, transform2D, translate } from './flat/transform.js';\n/**\n * @classdesc\n * Abstract base class; only used for creating subclasses; do not instantiate\n * in apps, as cannot be rendered.\n *\n * @abstract\n * @api\n */\nvar SimpleGeometry = /** @class */ (function (_super) {\n __extends(SimpleGeometry, _super);\n function SimpleGeometry() {\n var _this = _super.call(this) || this;\n /**\n * @protected\n * @type {import(\"./GeometryLayout.js\").default}\n */\n _this.layout = GeometryLayout.XY;\n /**\n * @protected\n * @type {number}\n */\n _this.stride = 2;\n /**\n * @protected\n * @type {Array<number>}\n */\n _this.flatCoordinates = null;\n return _this;\n }\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n SimpleGeometry.prototype.computeExtent = function (extent) {\n return createOrUpdateFromFlatCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, extent);\n };\n /**\n * @abstract\n * @return {Array<*>} Coordinates.\n */\n SimpleGeometry.prototype.getCoordinates = function () {\n return abstract();\n };\n /**\n * Return the first coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} First coordinate.\n * @api\n */\n SimpleGeometry.prototype.getFirstCoordinate = function () {\n return this.flatCoordinates.slice(0, this.stride);\n };\n /**\n * @return {Array<number>} Flat coordinates.\n */\n SimpleGeometry.prototype.getFlatCoordinates = function () {\n return this.flatCoordinates;\n };\n /**\n * Return the last coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} Last point.\n * @api\n */\n SimpleGeometry.prototype.getLastCoordinate = function () {\n return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride);\n };\n /**\n * Return the {@link module:ol/geom/GeometryLayout layout} of the geometry.\n * @return {import(\"./GeometryLayout.js\").default} Layout.\n * @api\n */\n SimpleGeometry.prototype.getLayout = function () {\n return this.layout;\n };\n /**\n * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n */\n SimpleGeometry.prototype.getSimplifiedGeometry = function (squaredTolerance) {\n if (this.simplifiedGeometryRevision !== this.getRevision()) {\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n this.simplifiedGeometryRevision = this.getRevision();\n }\n // If squaredTolerance is negative or if we know that simplification will not\n // have any effect then just return this.\n if (squaredTolerance < 0 ||\n (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)) {\n return this;\n }\n var simplifiedGeometry = this.getSimplifiedGeometryInternal(squaredTolerance);\n var simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();\n if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {\n return simplifiedGeometry;\n }\n else {\n // Simplification did not actually remove any coordinates. We now know\n // that any calls to getSimplifiedGeometry with a squaredTolerance less\n // than or equal to the current squaredTolerance will also not have any\n // effect. This allows us to short circuit simplification (saving CPU\n // cycles) and prevents the cache of simplified geometries from filling\n // up with useless identical copies of this geometry (saving memory).\n this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n return this;\n }\n };\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n * @protected\n */\n SimpleGeometry.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n return this;\n };\n /**\n * @return {number} Stride.\n */\n SimpleGeometry.prototype.getStride = function () {\n return this.stride;\n };\n /**\n * @param {import(\"./GeometryLayout.js\").default} layout Layout.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n */\n SimpleGeometry.prototype.setFlatCoordinates = function (layout, flatCoordinates) {\n this.stride = getStrideForLayout(layout);\n this.layout = layout;\n this.flatCoordinates = flatCoordinates;\n };\n /**\n * @abstract\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n */\n SimpleGeometry.prototype.setCoordinates = function (coordinates, opt_layout) {\n abstract();\n };\n /**\n * @param {import(\"./GeometryLayout.js\").default|undefined} layout Layout.\n * @param {Array<*>} coordinates Coordinates.\n * @param {number} nesting Nesting.\n * @protected\n */\n SimpleGeometry.prototype.setLayout = function (layout, coordinates, nesting) {\n /** @type {number} */\n var stride;\n if (layout) {\n stride = getStrideForLayout(layout);\n }\n else {\n for (var i = 0; i < nesting; ++i) {\n if (coordinates.length === 0) {\n this.layout = GeometryLayout.XY;\n this.stride = 2;\n return;\n }\n else {\n coordinates = /** @type {Array} */ (coordinates[0]);\n }\n }\n stride = coordinates.length;\n layout = getLayoutForStride(stride);\n }\n this.layout = layout;\n this.stride = stride;\n };\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n * @api\n */\n SimpleGeometry.prototype.applyTransform = function (transformFn) {\n if (this.flatCoordinates) {\n transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);\n this.changed();\n }\n };\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @param {number} angle Rotation angle in counter-clockwise radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n SimpleGeometry.prototype.rotate = function (angle, anchor) {\n var flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n var stride = this.getStride();\n rotate(flatCoordinates, 0, flatCoordinates.length, stride, angle, anchor, flatCoordinates);\n this.changed();\n }\n };\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number=} opt_sy The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate=} opt_anchor The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n SimpleGeometry.prototype.scale = function (sx, opt_sy, opt_anchor) {\n var sy = opt_sy;\n if (sy === undefined) {\n sy = sx;\n }\n var anchor = opt_anchor;\n if (!anchor) {\n anchor = getCenter(this.getExtent());\n }\n var flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n var stride = this.getStride();\n scale(flatCoordinates, 0, flatCoordinates.length, stride, sx, sy, anchor, flatCoordinates);\n this.changed();\n }\n };\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n SimpleGeometry.prototype.translate = function (deltaX, deltaY) {\n var flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n var stride = this.getStride();\n translate(flatCoordinates, 0, flatCoordinates.length, stride, deltaX, deltaY, flatCoordinates);\n this.changed();\n }\n };\n return SimpleGeometry;\n}(Geometry));\n/**\n * @param {number} stride Stride.\n * @return {import(\"./GeometryLayout.js\").default} layout Layout.\n */\nfunction getLayoutForStride(stride) {\n var layout;\n if (stride == 2) {\n layout = GeometryLayout.XY;\n }\n else if (stride == 3) {\n layout = GeometryLayout.XYZ;\n }\n else if (stride == 4) {\n layout = GeometryLayout.XYZM;\n }\n return /** @type {import(\"./GeometryLayout.js\").default} */ (layout);\n}\n/**\n * @param {import(\"./GeometryLayout.js\").default} layout Layout.\n * @return {number} Stride.\n */\nexport function getStrideForLayout(layout) {\n var stride;\n if (layout == GeometryLayout.XY) {\n stride = 2;\n }\n else if (layout == GeometryLayout.XYZ || layout == GeometryLayout.XYM) {\n stride = 3;\n }\n else if (layout == GeometryLayout.XYZM) {\n stride = 4;\n }\n return /** @type {number} */ (stride);\n}\n/**\n * @param {SimpleGeometry} simpleGeometry Simple geometry.\n * @param {import(\"../transform.js\").Transform} transform Transform.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Transformed flat coordinates.\n */\nexport function transformGeom2D(simpleGeometry, transform, opt_dest) {\n var flatCoordinates = simpleGeometry.getFlatCoordinates();\n if (!flatCoordinates) {\n return null;\n }\n else {\n var stride = simpleGeometry.getStride();\n return transform2D(flatCoordinates, 0, flatCoordinates.length, stride, transform, opt_dest);\n }\n}\nexport default SimpleGeometry;\n//# sourceMappingURL=SimpleGeometry.js.map","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Observable\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport { listen, listenOnce, unlistenByKey } from './events.js';\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires import(\"./events/Event.js\").default\n * @api\n */\nvar Observable = /** @class */ (function (_super) {\n __extends(Observable, _super);\n function Observable() {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {number}\n */\n _this.revision_ = 0;\n return _this;\n }\n /**\n * Increases the revision counter and dispatches a 'change' event.\n * @api\n */\n Observable.prototype.changed = function () {\n ++this.revision_;\n this.dispatchEvent(EventType.CHANGE);\n };\n /**\n * Get the version number for this object. Each time the object is modified,\n * its version number will be incremented.\n * @return {number} Revision.\n * @api\n */\n Observable.prototype.getRevision = function () {\n return this.revision_;\n };\n /**\n * Listen for a certain type of event.\n * @param {string|Array<string>} type The event type or array of event types.\n * @param {function(?): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\n Observable.prototype.on = function (type, listener) {\n if (Array.isArray(type)) {\n var len = type.length;\n var keys = new Array(len);\n for (var i = 0; i < len; ++i) {\n keys[i] = listen(this, type[i], listener);\n }\n return keys;\n }\n else {\n return listen(this, /** @type {string} */ (type), listener);\n }\n };\n /**\n * Listen once for a certain type of event.\n * @param {string|Array<string>} type The event type or array of event types.\n * @param {function(?): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\n Observable.prototype.once = function (type, listener) {\n var key;\n if (Array.isArray(type)) {\n var len = type.length;\n key = new Array(len);\n for (var i = 0; i < len; ++i) {\n key[i] = listenOnce(this, type[i], listener);\n }\n }\n else {\n key = listenOnce(this, /** @type {string} */ (type), listener);\n }\n /** @type {Object} */ (listener).ol_key = key;\n return key;\n };\n /**\n * Unlisten for a certain type of event.\n * @param {string|Array<string>} type The event type or array of event types.\n * @param {function(?): ?} listener The listener function.\n * @api\n */\n Observable.prototype.un = function (type, listener) {\n var key = /** @type {Object} */ (listener).ol_key;\n if (key) {\n unByKey(key);\n }\n else if (Array.isArray(type)) {\n for (var i = 0, ii = type.length; i < ii; ++i) {\n this.removeEventListener(type[i], listener);\n }\n }\n else {\n this.removeEventListener(type, listener);\n }\n };\n return Observable;\n}(EventTarget));\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} key The key returned by `on()`\n * or `once()` (or an array of keys).\n * @api\n */\nexport function unByKey(key) {\n if (Array.isArray(key)) {\n for (var i = 0, ii = key.length; i < ii; ++i) {\n unlistenByKey(key[i]);\n }\n }\n else {\n unlistenByKey(/** @type {import(\"./events.js\").EventsKey} */ (key));\n }\n}\nexport default Observable;\n//# sourceMappingURL=Observable.js.map","/**\n * @module ol/css\n */\n/**\n * @typedef {Object} FontParameters\n * @property {string} style\n * @property {string} variant\n * @property {string} weight\n * @property {string} size\n * @property {string} lineHeight\n * @property {string} family\n * @property {Array<string>} families\n */\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_HIDDEN = 'ol-hidden';\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_SELECTABLE = 'ol-selectable';\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_UNSELECTABLE = 'ol-unselectable';\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_UNSUPPORTED = 'ol-unsupported';\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_CONTROL = 'ol-control';\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_COLLAPSED = 'ol-collapsed';\n/**\n * From http://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nvar fontRegEx = new RegExp([\n '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$',\n].join(''), 'i');\nvar fontRegExMatchIndex = [\n 'style',\n 'variant',\n 'weight',\n 'size',\n 'lineHeight',\n 'family',\n];\n/**\n * Get the list of font families from a font spec. Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters} The font parameters (or null if the input spec is invalid).\n */\nexport var getFontParameters = function (fontSpec) {\n var match = fontSpec.match(fontRegEx);\n if (!match) {\n return null;\n }\n var style = /** @type {FontParameters} */ ({\n lineHeight: 'normal',\n size: '1.2em',\n style: 'normal',\n weight: 'normal',\n variant: 'normal',\n });\n for (var i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n var value = match[i + 1];\n if (value !== undefined) {\n style[fontRegExMatchIndex[i]] = value;\n }\n }\n style.families = style.family.split(/,\\s?/);\n return style;\n};\n//# sourceMappingURL=css.js.map","/**\n * @module ol/easing\n */\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeIn(t) {\n return Math.pow(t, 3);\n}\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeOut(t) {\n return 1 - easeIn(1 - t);\n}\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function inAndOut(t) {\n return 3 * t * t - 2 * t * t * t;\n}\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function linear(t) {\n return t;\n}\n/**\n * Start slow, speed up, and at the very end slow down again. This has the\n * same general behavior as {@link module:ol/easing~inAndOut}, but the final\n * slowdown is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function upAndDown(t) {\n if (t < 0.5) {\n return inAndOut(2 * t);\n }\n else {\n return 1 - inAndOut(2 * (t - 0.5));\n }\n}\n//# sourceMappingURL=easing.js.map","/**\n * @module ol/has\n */\nvar ua = typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined'\n ? navigator.userAgent.toLowerCase()\n : '';\n/**\n * User agent string says we are dealing with Firefox as browser.\n * @type {boolean}\n */\nexport var FIREFOX = ua.indexOf('firefox') !== -1;\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nexport var SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1;\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nexport var WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1;\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nexport var MAC = ua.indexOf('macintosh') !== -1;\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nexport var DEVICE_PIXEL_RATIO = typeof devicePixelRatio !== 'undefined' ? devicePixelRatio : 1;\n/**\n * The execution context is a worker with OffscreenCanvas available.\n * @const\n * @type {boolean}\n */\nexport var WORKER_OFFSCREEN_CANVAS = typeof WorkerGlobalScope !== 'undefined' &&\n typeof OffscreenCanvas !== 'undefined' &&\n self instanceof WorkerGlobalScope; //eslint-disable-line\n/**\n * Image.prototype.decode() is supported.\n * @type {boolean}\n */\nexport var IMAGE_DECODE = typeof Image !== 'undefined' && Image.prototype.decode;\n/**\n * @type {boolean}\n */\nexport var PASSIVE_EVENT_LISTENERS = (function () {\n var passive = false;\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passive = true;\n },\n });\n window.addEventListener('_', null, options);\n window.removeEventListener('_', null, options);\n }\n catch (error) {\n // passive not supported\n }\n return passive;\n})();\n//# sourceMappingURL=has.js.map","/**\n * @module ol/TileState\n */\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n /**\n * Indicates that tile loading failed\n * @type {number}\n */\n ERROR: 3,\n EMPTY: 4,\n};\n//# sourceMappingURL=TileState.js.map","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * True if the custom elements polyfill is in use.\n */\nexport const isCEPolyfill = typeof window !== 'undefined' &&\n window.customElements != null &&\n window.customElements.polyfillWrapFlushCallback !==\n undefined;\n/**\n * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive),\n * into another container (could be the same container), before `before`. If\n * `before` is null, it appends the nodes to the container.\n */\nexport const reparentNodes = (container, start, end = null, before = null) => {\n while (start !== end) {\n const n = start.nextSibling;\n container.insertBefore(start, before);\n start = n;\n }\n};\n/**\n * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from\n * `container`.\n */\nexport const removeNodes = (container, start, end = null) => {\n while (start !== end) {\n const n = start.nextSibling;\n container.removeChild(start);\n start = n;\n }\n};\n//# sourceMappingURL=dom.js.map","/**\n * @module ol/ImageState\n */\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n ERROR: 3,\n EMPTY: 4,\n};\n//# sourceMappingURL=ImageState.js.map","/**\n * @module ol/geom/flat/inflate\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array<import(\"../../coordinate.js\").Coordinate>=} opt_coordinates Coordinates.\n * @return {Array<import(\"../../coordinate.js\").Coordinate>} Coordinates.\n */\nexport function inflateCoordinates(flatCoordinates, offset, end, stride, opt_coordinates) {\n var coordinates = opt_coordinates !== undefined ? opt_coordinates : [];\n var i = 0;\n for (var j = offset; j < end; j += stride) {\n coordinates[i++] = flatCoordinates.slice(j, j + stride);\n }\n coordinates.length = i;\n return coordinates;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {Array<Array<import(\"../../coordinate.js\").Coordinate>>=} opt_coordinatess Coordinatess.\n * @return {Array<Array<import(\"../../coordinate.js\").Coordinate>>} Coordinatess.\n */\nexport function inflateCoordinatesArray(flatCoordinates, offset, ends, stride, opt_coordinatess) {\n var coordinatess = opt_coordinatess !== undefined ? opt_coordinatess : [];\n var i = 0;\n for (var j = 0, jj = ends.length; j < jj; ++j) {\n var end = ends[j];\n coordinatess[i++] = inflateCoordinates(flatCoordinates, offset, end, stride, coordinatess[i]);\n offset = end;\n }\n coordinatess.length = i;\n return coordinatess;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array<Array<Array<import(\"../../coordinate.js\").Coordinate>>>=} opt_coordinatesss\n * Coordinatesss.\n * @return {Array<Array<Array<import(\"../../coordinate.js\").Coordinate>>>} Coordinatesss.\n */\nexport function inflateMultiCoordinatesArray(flatCoordinates, offset, endss, stride, opt_coordinatesss) {\n var coordinatesss = opt_coordinatesss !== undefined ? opt_coordinatesss : [];\n var i = 0;\n for (var j = 0, jj = endss.length; j < jj; ++j) {\n var ends = endss[j];\n coordinatesss[i++] = inflateCoordinatesArray(flatCoordinates, offset, ends, stride, coordinatesss[i]);\n offset = ends[ends.length - 1];\n }\n coordinatesss.length = i;\n return coordinatesss;\n}\n//# sourceMappingURL=inflate.js.map","/**\n * @module ol/geom/GeometryLayout\n */\n/**\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available. Supported values are `'XY'`,\n * `'XYZ'`, `'XYM'`, `'XYZM'`.\n * @enum {string}\n */\nexport default {\n XY: 'XY',\n XYZ: 'XYZ',\n XYM: 'XYM',\n XYZM: 'XYZM',\n};\n//# sourceMappingURL=GeometryLayout.js.map","/**\n * @module ol/geom/flat/transform\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function transform2D(flatCoordinates, offset, end, stride, transform, opt_dest) {\n var dest = opt_dest ? opt_dest : [];\n var i = 0;\n for (var j = offset; j < end; j += stride) {\n var x = flatCoordinates[j];\n var y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array<number>} anchor Rotation anchor point.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function rotate(flatCoordinates, offset, end, stride, angle, anchor, opt_dest) {\n var dest = opt_dest ? opt_dest : [];\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n var anchorX = anchor[0];\n var anchorY = anchor[1];\n var i = 0;\n for (var j = offset; j < end; j += stride) {\n var deltaX = flatCoordinates[j] - anchorX;\n var deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (var k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n/**\n * Scale the coordinates.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array<number>} anchor Scale anchor point.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function scale(flatCoordinates, offset, end, stride, sx, sy, anchor, opt_dest) {\n var dest = opt_dest ? opt_dest : [];\n var anchorX = anchor[0];\n var anchorY = anchor[1];\n var i = 0;\n for (var j = offset; j < end; j += stride) {\n var deltaX = flatCoordinates[j] - anchorX;\n var deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (var k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function translate(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) {\n var dest = opt_dest ? opt_dest : [];\n var i = 0;\n for (var j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (var k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n//# sourceMappingURL=transform.js.map","/*\r\n * (C) Copyright IBM Corp. 2012, 2016 All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nmodule.exports = undefined;\r\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/events/Target\n */\nimport Disposable from '../Disposable.js';\nimport Event from './Event.js';\nimport { VOID } from '../functions.js';\nimport { clear } from '../obj.js';\n/**\n * @typedef {EventTarget|Target} EventTargetLike\n */\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n * `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n * There is no event target hierarchy. When a listener calls\n * `stopPropagation` or `preventDefault` on an event object, it means that no\n * more listeners after this one will be called. Same as when the listener\n * returns false.\n */\nvar Target = /** @class */ (function (_super) {\n __extends(Target, _super);\n /**\n * @param {*=} opt_target Default event target for dispatched events.\n */\n function Target(opt_target) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {*}\n */\n _this.eventTarget_ = opt_target;\n /**\n * @private\n * @type {Object<string, number>}\n */\n _this.pendingRemovals_ = null;\n /**\n * @private\n * @type {Object<string, number>}\n */\n _this.dispatching_ = null;\n /**\n * @private\n * @type {Object<string, Array<import(\"../events.js\").Listener>>}\n */\n _this.listeners_ = null;\n return _this;\n }\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n Target.prototype.addEventListener = function (type, listener) {\n if (!type || !listener) {\n return;\n }\n var listeners = this.listeners_ || (this.listeners_ = {});\n var listenersForType = listeners[type] || (listeners[type] = []);\n if (listenersForType.indexOf(listener) === -1) {\n listenersForType.push(listener);\n }\n };\n /**\n * Dispatches an event and calls all listeners listening for events\n * of this type. The event parameter can either be a string or an\n * Object with a `type` property.\n *\n * @param {import(\"./Event.js\").default|string} event Event object.\n * @return {boolean|undefined} `false` if anyone called preventDefault on the\n * event object or if any of the listeners returned false.\n * @api\n */\n Target.prototype.dispatchEvent = function (event) {\n /** @type {import(\"./Event.js\").default|Event} */\n var evt = typeof event === 'string' ? new Event(event) : event;\n var type = evt.type;\n if (!evt.target) {\n evt.target = this.eventTarget_ || this;\n }\n var listeners = this.listeners_ && this.listeners_[type];\n var propagate;\n if (listeners) {\n var dispatching = this.dispatching_ || (this.dispatching_ = {});\n var pendingRemovals = this.pendingRemovals_ || (this.pendingRemovals_ = {});\n if (!(type in dispatching)) {\n dispatching[type] = 0;\n pendingRemovals[type] = 0;\n }\n ++dispatching[type];\n for (var i = 0, ii = listeners.length; i < ii; ++i) {\n if ('handleEvent' in listeners[i]) {\n propagate = /** @type {import(\"../events.js\").ListenerObject} */ (listeners[i]).handleEvent(evt);\n }\n else {\n propagate = /** @type {import(\"../events.js\").ListenerFunction} */ (listeners[i]).call(this, evt);\n }\n if (propagate === false || evt.propagationStopped) {\n propagate = false;\n break;\n }\n }\n --dispatching[type];\n if (dispatching[type] === 0) {\n var pr = pendingRemovals[type];\n delete pendingRemovals[type];\n while (pr--) {\n this.removeEventListener(type, VOID);\n }\n delete dispatching[type];\n }\n return propagate;\n }\n };\n /**\n * Clean up.\n */\n Target.prototype.disposeInternal = function () {\n this.listeners_ && clear(this.listeners_);\n };\n /**\n * Get the listeners for a specified event type. Listeners are returned in the\n * order that they will be called in.\n *\n * @param {string} type Type.\n * @return {Array<import(\"../events.js\").Listener>|undefined} Listeners.\n */\n Target.prototype.getListeners = function (type) {\n return (this.listeners_ && this.listeners_[type]) || undefined;\n };\n /**\n * @param {string=} opt_type Type. If not provided,\n * `true` will be returned if this event target has any listeners.\n * @return {boolean} Has listeners.\n */\n Target.prototype.hasListener = function (opt_type) {\n if (!this.listeners_) {\n return false;\n }\n return opt_type\n ? opt_type in this.listeners_\n : Object.keys(this.listeners_).length > 0;\n };\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n Target.prototype.removeEventListener = function (type, listener) {\n var listeners = this.listeners_ && this.listeners_[type];\n if (listeners) {\n var index = listeners.indexOf(listener);\n if (index !== -1) {\n if (this.pendingRemovals_ && type in this.pendingRemovals_) {\n // make listener a no-op, and remove later in #dispatchEvent()\n listeners[index] = VOID;\n ++this.pendingRemovals_[type];\n }\n else {\n listeners.splice(index, 1);\n if (listeners.length === 0) {\n delete this.listeners_[type];\n }\n }\n }\n }\n };\n return Target;\n}(Disposable));\nexport default Target;\n//# sourceMappingURL=Target.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/Layer\n */\nimport BaseLayer from './Base.js';\nimport EventType from '../events/EventType.js';\nimport LayerProperty from './Property.js';\nimport RenderEventType from '../render/EventType.js';\nimport SourceState from '../source/State.js';\nimport { assert } from '../asserts.js';\nimport { assign } from '../obj.js';\nimport { getChangeEventType } from '../Object.js';\nimport { listen, unlistenByKey } from '../events.js';\n/**\n * @typedef {function(import(\"../PluggableMap.js\").FrameState):HTMLElement} RenderFunction\n */\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"../source/Source.js\").default} [source] Source for this layer. If not provided to the constructor,\n * the source can be set by calling {@link module:ol/layer/Layer#setSource layer.setSource(source)} after\n * construction.\n * @property {import(\"../PluggableMap.js\").default} [map] Map.\n * @property {RenderFunction} [render] Render function. Takes the frame state as input and is expected to return an\n * HTML element. Will overwrite the default rendering for the layer.\n */\n/**\n * @typedef {Object} State\n * @property {import(\"./Layer.js\").default} layer\n * @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.\n * @property {import(\"../source/State.js\").default} sourceState\n * @property {boolean} visible\n * @property {boolean} managed\n * @property {import(\"../extent.js\").Extent} [extent]\n * @property {number} zIndex\n * @property {number} maxResolution\n * @property {number} minResolution\n * @property {number} minZoom\n * @property {number} maxZoom\n */\n/**\n * @classdesc\n * Base class from which all layer types are derived. This should only be instantiated\n * in the case where a custom layer is be added to the map with a custom `render` function.\n * Such a function can be specified in the `options` object, and is expected to return an HTML element.\n *\n * A visual representation of raster or vector map data.\n * Layers group together those properties that pertain to how the data is to be\n * displayed, irrespective of the source of that data.\n *\n * Layers are usually added to a map with {@link module:ol/Map#addLayer}. Components\n * like {@link module:ol/interaction/Select~Select} use unmanaged layers\n * internally. These unmanaged layers are associated with the map using\n * {@link module:ol/layer/Layer~Layer#setMap} instead.\n *\n * A generic `change` event is fired when the state of the source changes.\n *\n * Please note that for performance reasons several layers might get rendered to\n * the same HTML element, which will cause {@link module:ol/Map~Map#forEachLayerAtPixel} to\n * give false positives. To avoid this, apply different `className` properties to the\n * layers at creation time.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n *\n * @template {import(\"../source/Source.js\").default} SourceType\n * @api\n */\nvar Layer = /** @class */ (function (_super) {\n __extends(Layer, _super);\n /**\n * @param {Options} options Layer options.\n */\n function Layer(options) {\n var _this = this;\n var baseOptions = assign({}, options);\n delete baseOptions.source;\n _this = _super.call(this, baseOptions) || this;\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n _this.mapPrecomposeKey_ = null;\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n _this.mapRenderKey_ = null;\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n _this.sourceChangeKey_ = null;\n /**\n * @private\n * @type {import(\"../renderer/Layer.js\").default}\n */\n _this.renderer_ = null;\n // Overwrite default render method with a custom one\n if (options.render) {\n _this.render = options.render;\n }\n if (options.map) {\n _this.setMap(options.map);\n }\n _this.addEventListener(getChangeEventType(LayerProperty.SOURCE), _this.handleSourcePropertyChange_);\n var source = options.source\n ? /** @type {SourceType} */ (options.source)\n : null;\n _this.setSource(source);\n return _this;\n }\n /**\n * @param {Array<import(\"./Layer.js\").default>=} opt_array Array of layers (to be modified in place).\n * @return {Array<import(\"./Layer.js\").default>} Array of layers.\n */\n Layer.prototype.getLayersArray = function (opt_array) {\n var array = opt_array ? opt_array : [];\n array.push(this);\n return array;\n };\n /**\n * @param {Array<import(\"./Layer.js\").State>=} opt_states Optional list of layer states (to be modified in place).\n * @return {Array<import(\"./Layer.js\").State>} List of layer states.\n */\n Layer.prototype.getLayerStatesArray = function (opt_states) {\n var states = opt_states ? opt_states : [];\n states.push(this.getLayerState());\n return states;\n };\n /**\n * Get the layer source.\n * @return {SourceType} The layer source (or `null` if not yet set).\n * @observable\n * @api\n */\n Layer.prototype.getSource = function () {\n return /** @type {SourceType} */ (this.get(LayerProperty.SOURCE)) || null;\n };\n /**\n * @return {import(\"../source/State.js\").default} Source state.\n */\n Layer.prototype.getSourceState = function () {\n var source = this.getSource();\n return !source ? SourceState.UNDEFINED : source.getState();\n };\n /**\n * @private\n */\n Layer.prototype.handleSourceChange_ = function () {\n this.changed();\n };\n /**\n * @private\n */\n Layer.prototype.handleSourcePropertyChange_ = function () {\n if (this.sourceChangeKey_) {\n unlistenByKey(this.sourceChangeKey_);\n this.sourceChangeKey_ = null;\n }\n var source = this.getSource();\n if (source) {\n this.sourceChangeKey_ = listen(source, EventType.CHANGE, this.handleSourceChange_, this);\n }\n this.changed();\n };\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Promise<Array<import(\"../Feature\").default>>} Promise that resolves with\n * an array of features.\n */\n Layer.prototype.getFeatures = function (pixel) {\n return this.renderer_.getFeatures(pixel);\n };\n /**\n * In charge to manage the rendering of the layer. One layer type is\n * bounded with one layer renderer.\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target which the renderer may (but need not) use\n * for rendering its content.\n * @return {HTMLElement} The rendered element.\n */\n Layer.prototype.render = function (frameState, target) {\n var layerRenderer = this.getRenderer();\n if (layerRenderer.prepareFrame(frameState)) {\n return layerRenderer.renderFrame(frameState, target);\n }\n };\n /**\n * Sets the layer to be rendered on top of other layers on a map. The map will\n * not manage this layer in its layers collection, and the callback in\n * {@link module:ol/Map#forEachLayerAtPixel} will receive `null` as layer. This\n * is useful for temporary layers. To remove an unmanaged layer from the map,\n * use `#setMap(null)`.\n *\n * To add the layer to a map and have it managed by the map, use\n * {@link module:ol/Map#addLayer} instead.\n * @param {import(\"../PluggableMap.js\").default} map Map.\n * @api\n */\n Layer.prototype.setMap = function (map) {\n if (this.mapPrecomposeKey_) {\n unlistenByKey(this.mapPrecomposeKey_);\n this.mapPrecomposeKey_ = null;\n }\n if (!map) {\n this.changed();\n }\n if (this.mapRenderKey_) {\n unlistenByKey(this.mapRenderKey_);\n this.mapRenderKey_ = null;\n }\n if (map) {\n this.mapPrecomposeKey_ = listen(map, RenderEventType.PRECOMPOSE, function (evt) {\n var renderEvent = /** @type {import(\"../render/Event.js\").default} */ (evt);\n var layerStatesArray = renderEvent.frameState.layerStatesArray;\n var layerState = this.getLayerState(false);\n // A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both.\n assert(!layerStatesArray.some(function (arrayLayerState) {\n return arrayLayerState.layer === layerState.layer;\n }), 67);\n layerStatesArray.push(layerState);\n }, this);\n this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map);\n this.changed();\n }\n };\n /**\n * Set the layer source.\n * @param {SourceType} source The layer source.\n * @observable\n * @api\n */\n Layer.prototype.setSource = function (source) {\n this.set(LayerProperty.SOURCE, source);\n };\n /**\n * Get the renderer for this layer.\n * @return {import(\"../renderer/Layer.js\").default} The layer renderer.\n */\n Layer.prototype.getRenderer = function () {\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n return this.renderer_;\n };\n /**\n * @return {boolean} The layer has a renderer.\n */\n Layer.prototype.hasRenderer = function () {\n return !!this.renderer_;\n };\n /**\n * Create a renderer for this layer.\n * @return {import(\"../renderer/Layer.js\").default} A layer renderer.\n * @protected\n */\n Layer.prototype.createRenderer = function () {\n return null;\n };\n /**\n * Clean up.\n */\n Layer.prototype.disposeInternal = function () {\n this.setSource(null);\n _super.prototype.disposeInternal.call(this);\n };\n return Layer;\n}(BaseLayer));\n/**\n * Return `true` if the layer is visible and if the provided view state\n * has resolution and zoom levels that are in range of the layer's min/max.\n * @param {State} layerState Layer state.\n * @param {import(\"../View.js\").State} viewState View state.\n * @return {boolean} The layer is visible at the given view state.\n */\nexport function inView(layerState, viewState) {\n if (!layerState.visible) {\n return false;\n }\n var resolution = viewState.resolution;\n if (resolution < layerState.minResolution ||\n resolution >= layerState.maxResolution) {\n return false;\n }\n var zoom = viewState.zoom;\n return zoom > layerState.minZoom && zoom <= layerState.maxZoom;\n}\nexport default Layer;\n//# sourceMappingURL=Layer.js.map","/**\n * @module ol/source/State\n */\n/**\n * @enum {string}\n * State of the source, one of 'undefined', 'loading', 'ready' or 'error'.\n */\nexport default {\n UNDEFINED: 'undefined',\n LOADING: 'loading',\n READY: 'ready',\n ERROR: 'error',\n};\n//# sourceMappingURL=State.js.map","/**\n * @module ol/proj/Projection\n */\nimport { METERS_PER_UNIT } from './Units.js';\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").default|string} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link module:ol/proj/Units~METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, import(\"../coordinate.js\").Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `{number}` view resolution and an `{import(\"../coordinate.js\").Coordinate}` as arguments, and returns\n * the `{number}` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj#getPointResolution} function will be used.\n */\n/**\n * @classdesc\n * Projection definition class. One of these is created for each projection\n * supported in the application and stored in the {@link module:ol/proj} namespace.\n * You can use these in applications, but this is not required, as API params\n * and options use {@link module:ol/proj~ProjectionLike} which means the simple string\n * code will suffice.\n *\n * You can use {@link module:ol/proj~get} to retrieve the object for a particular\n * projection.\n *\n * The library includes definitions for `EPSG:4326` and `EPSG:3857`, together\n * with the following aliases:\n * * `EPSG:4326`: CRS:84, urn:ogc:def:crs:EPSG:6.6:4326,\n * urn:ogc:def:crs:OGC:1.3:CRS84, urn:ogc:def:crs:OGC:2:84,\n * http://www.opengis.net/gml/srs/epsg.xml#4326,\n * urn:x-ogc:def:crs:EPSG:4326\n * * `EPSG:3857`: EPSG:102100, EPSG:102113, EPSG:900913,\n * urn:ogc:def:crs:EPSG:6.18:3:3857,\n * http://www.opengis.net/gml/srs/epsg.xml#3857\n *\n * If you use [proj4js](https://github.com/proj4js/proj4js), aliases can\n * be added using `proj4.defs()`. After all required projection definitions are\n * added, call the {@link module:ol/proj/proj4~register} function.\n *\n * @api\n */\nvar Projection = /** @class */ (function () {\n /**\n * @param {Options} options Projection options.\n */\n function Projection(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {import(\"./Units.js\").default}\n */\n this.units_ = /** @type {import(\"./Units.js\").default} */ (options.units);\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.worldExtent_ =\n options.worldExtent !== undefined ? options.worldExtent : null;\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ =\n options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n /**\n * @private\n * @type {function(number, import(\"../coordinate.js\").Coordinate):number|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.defaultTileGrid_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n Projection.prototype.canWrapX = function () {\n return this.canWrapX_;\n };\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n Projection.prototype.getCode = function () {\n return this.code_;\n };\n /**\n * Get the validity extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n Projection.prototype.getExtent = function () {\n return this.extent_;\n };\n /**\n * Get the units of this projection.\n * @return {import(\"./Units.js\").default} Units.\n * @api\n */\n Projection.prototype.getUnits = function () {\n return this.units_;\n };\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n Projection.prototype.getMetersPerUnit = function () {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n };\n /**\n * Get the world extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n Projection.prototype.getWorldExtent = function () {\n return this.worldExtent_;\n };\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n Projection.prototype.getAxisOrientation = function () {\n return this.axisOrientation_;\n };\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n Projection.prototype.isGlobal = function () {\n return this.global_;\n };\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n Projection.prototype.setGlobal = function (global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n };\n /**\n * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n */\n Projection.prototype.getDefaultTileGrid = function () {\n return this.defaultTileGrid_;\n };\n /**\n * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n */\n Projection.prototype.setDefaultTileGrid = function (tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n };\n /**\n * Set the validity extent for this projection.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n Projection.prototype.setExtent = function (extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n };\n /**\n * Set the world extent for this projection.\n * @param {import(\"../extent.js\").Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n Projection.prototype.setWorldExtent = function (worldExtent) {\n this.worldExtent_ = worldExtent;\n };\n /**\n * Set the getPointResolution function (see {@link module:ol/proj~getPointResolution}\n * for this projection.\n * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n * @api\n */\n Projection.prototype.setGetPointResolution = function (func) {\n this.getPointResolutionFunc_ = func;\n };\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, import(\"../coordinate.js\").Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\n Projection.prototype.getPointResolutionFunc = function () {\n return this.getPointResolutionFunc_;\n };\n return Projection;\n}());\nexport default Projection;\n//# sourceMappingURL=Projection.js.map","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\nimport { squaredDistance, squaredSegmentDistance } from '../../math.js';\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array<number>=} opt_simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @return {Array<number>} Simplified line string.\n */\nexport function simplifyLineString(flatCoordinates, offset, end, stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) {\n var simplifiedFlatCoordinates = opt_simplifiedFlatCoordinates !== undefined\n ? opt_simplifiedFlatCoordinates\n : [];\n if (!highQuality) {\n end = radialDistance(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0);\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0);\n return simplifiedFlatCoordinates;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n var n = (end - offset) / stride;\n if (n < 3) {\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n /** @type {Array<number>} */\n var markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array<number>} */\n var stack = [offset, end - stride];\n var index = 0;\n while (stack.length > 0) {\n var last = stack.pop();\n var first = stack.pop();\n var maxSquaredDistance = 0;\n var x1 = flatCoordinates[first];\n var y1 = flatCoordinates[first + 1];\n var x2 = flatCoordinates[last];\n var y2 = flatCoordinates[last + 1];\n for (var i = first + stride; i < last; i += stride) {\n var x = flatCoordinates[i];\n var y = flatCoordinates[i + 1];\n var squaredDistance_1 = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n if (squaredDistance_1 > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance_1;\n }\n }\n if (maxSquaredDistance > squaredTolerance) {\n markers[(index - offset) / stride] = 1;\n if (first + stride < index) {\n stack.push(first, index);\n }\n if (index + stride < last) {\n stack.push(index, last);\n }\n }\n }\n for (var i = 0; i < n; ++i) {\n if (markers[i]) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride + 1];\n }\n }\n return simplifiedOffset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<number>} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n simplifiedOffset = douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset);\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<Array<number>>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(flatCoordinates, offset, endss, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n var simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n if (end <= offset + stride) {\n // zero or one point, no simplification possible, so copy and return\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n var x1 = flatCoordinates[offset];\n var y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n var x2 = x1;\n var y2 = y1;\n for (offset += stride; offset < end; offset += stride) {\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n // copy point at offset\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n }\n }\n if (x2 != x1 || y2 != y1) {\n // copy last point\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n }\n return simplifiedOffset;\n}\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n return tolerance * Math.round(value / tolerance);\n}\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded. This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string. This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons. This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n var x1 = snap(flatCoordinates[offset], tolerance);\n var y1 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // add the first coordinate to the output\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n // find the next coordinate that does not snap to the same value as the first\n // coordinate (P2)\n var x2, y2;\n do {\n x2 = snap(flatCoordinates[offset], tolerance);\n y2 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n if (offset == end) {\n // all coordinates snap to the same value, the line collapses to a point\n // push the last snapped value anyway to ensure that the output contains\n // at least two points\n // FIXME should we really return at least two points anyway?\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n }\n } while (x2 == x1 && y2 == y1);\n while (offset < end) {\n // snap the next coordinate (P3)\n var x3 = snap(flatCoordinates[offset], tolerance);\n var y3 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // skip P3 if it is equal to P2\n if (x3 == x2 && y3 == y2) {\n continue;\n }\n // calculate the delta between P1 and P2\n var dx1 = x2 - x1;\n var dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n var dx2 = x3 - x1;\n var dy2 = y3 - y1;\n // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n // P1 in the same direction then P2 is on the straight line between P1 and\n // P3\n if (dx1 * dy2 == dy1 * dx2 &&\n ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))) {\n // discard P2 and set P2 = P3\n x2 = x3;\n y2 = y3;\n continue;\n }\n // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n // between P3 and P1 or on the opposite half of the line to P2. add P2,\n // and continue with P1 = P2 and P2 = P3\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n x2 = x3;\n y2 = y3;\n }\n // add the last point (P2)\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<number>} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n simplifiedOffset = quantize(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset);\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<Array<number>>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(flatCoordinates, offset, endss, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n var simplifiedEnds = [];\n simplifiedOffset = quantizeArray(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n//# sourceMappingURL=simplify.js.map","/**\n * @module ol/size\n */\n/**\n * An array of numbers representing a size: `[width, height]`.\n * @typedef {Array<number>} Size\n * @api\n */\n/**\n * Returns a buffered size.\n * @param {Size} size Size.\n * @param {number} num The amount by which to buffer.\n * @param {Size=} opt_size Optional reusable size array.\n * @return {Size} The buffered size.\n */\nexport function buffer(size, num, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = size[0] + 2 * num;\n opt_size[1] = size[1] + 2 * num;\n return opt_size;\n}\n/**\n * Determines if a size has a positive area.\n * @param {Size} size The size to test.\n * @return {boolean} The size has a positive area.\n */\nexport function hasArea(size) {\n return size[0] > 0 && size[1] > 0;\n}\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n * @param {Size} size Size.\n * @param {number} ratio Ratio.\n * @param {Size=} opt_size Optional reusable size array.\n * @return {Size} The scaled size.\n */\nexport function scale(size, ratio, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = (size[0] * ratio + 0.5) | 0;\n opt_size[1] = (size[1] * ratio + 0.5) | 0;\n return opt_size;\n}\n/**\n * Returns an `Size` array for the passed in number (meaning: square) or\n * `Size` array.\n * (meaning: non-square),\n * @param {number|Size} size Width and height.\n * @param {Size=} opt_size Optional reusable size array.\n * @return {Size} Size.\n * @api\n */\nexport function toSize(size, opt_size) {\n if (Array.isArray(size)) {\n return size;\n }\n else {\n if (opt_size === undefined) {\n opt_size = [size, size];\n }\n else {\n opt_size[0] = size;\n opt_size[1] = size;\n }\n return opt_size;\n }\n}\n//# sourceMappingURL=size.js.map","/**\n * @module ol/structs/RBush\n */\nimport RBush_ from 'rbush';\nimport { createOrUpdate, equals } from '../extent.js';\nimport { getUid } from '../util.js';\nimport { isEmpty } from '../obj.js';\n/**\n * @typedef {Object} Entry\n * @property {number} minX\n * @property {number} minY\n * @property {number} maxX\n * @property {number} maxY\n * @property {Object} [value]\n */\n/**\n * @classdesc\n * Wrapper around the RBush by Vladimir Agafonkin.\n * See https://github.com/mourner/rbush.\n *\n * @template T\n */\nvar RBush = /** @class */ (function () {\n /**\n * @param {number=} opt_maxEntries Max entries.\n */\n function RBush(opt_maxEntries) {\n /**\n * @private\n */\n this.rbush_ = new RBush_(opt_maxEntries);\n /**\n * A mapping between the objects added to this rbush wrapper\n * and the objects that are actually added to the internal rbush.\n * @private\n * @type {Object<string, Entry>}\n */\n this.items_ = {};\n }\n /**\n * Insert a value into the RBush.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {T} value Value.\n */\n RBush.prototype.insert = function (extent, value) {\n /** @type {Entry} */\n var item = {\n minX: extent[0],\n minY: extent[1],\n maxX: extent[2],\n maxY: extent[3],\n value: value,\n };\n this.rbush_.insert(item);\n this.items_[getUid(value)] = item;\n };\n /**\n * Bulk-insert values into the RBush.\n * @param {Array<import(\"../extent.js\").Extent>} extents Extents.\n * @param {Array<T>} values Values.\n */\n RBush.prototype.load = function (extents, values) {\n var items = new Array(values.length);\n for (var i = 0, l = values.length; i < l; i++) {\n var extent = extents[i];\n var value = values[i];\n /** @type {Entry} */\n var item = {\n minX: extent[0],\n minY: extent[1],\n maxX: extent[2],\n maxY: extent[3],\n value: value,\n };\n items[i] = item;\n this.items_[getUid(value)] = item;\n }\n this.rbush_.load(items);\n };\n /**\n * Remove a value from the RBush.\n * @param {T} value Value.\n * @return {boolean} Removed.\n */\n RBush.prototype.remove = function (value) {\n var uid = getUid(value);\n // get the object in which the value was wrapped when adding to the\n // internal rbush. then use that object to do the removal.\n var item = this.items_[uid];\n delete this.items_[uid];\n return this.rbush_.remove(item) !== null;\n };\n /**\n * Update the extent of a value in the RBush.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {T} value Value.\n */\n RBush.prototype.update = function (extent, value) {\n var item = this.items_[getUid(value)];\n var bbox = [item.minX, item.minY, item.maxX, item.maxY];\n if (!equals(bbox, extent)) {\n this.remove(value);\n this.insert(extent, value);\n }\n };\n /**\n * Return all values in the RBush.\n * @return {Array<T>} All.\n */\n RBush.prototype.getAll = function () {\n var items = this.rbush_.all();\n return items.map(function (item) {\n return item.value;\n });\n };\n /**\n * Return all values in the given extent.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {Array<T>} All in extent.\n */\n RBush.prototype.getInExtent = function (extent) {\n /** @type {Entry} */\n var bbox = {\n minX: extent[0],\n minY: extent[1],\n maxX: extent[2],\n maxY: extent[3],\n };\n var items = this.rbush_.search(bbox);\n return items.map(function (item) {\n return item.value;\n });\n };\n /**\n * Calls a callback function with each value in the tree.\n * If the callback returns a truthy value, this value is returned without\n * checking the rest of the tree.\n * @param {function(T): *} callback Callback.\n * @return {*} Callback return value.\n */\n RBush.prototype.forEach = function (callback) {\n return this.forEach_(this.getAll(), callback);\n };\n /**\n * Calls a callback function with each value in the provided extent.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {function(T): *} callback Callback.\n * @return {*} Callback return value.\n */\n RBush.prototype.forEachInExtent = function (extent, callback) {\n return this.forEach_(this.getInExtent(extent), callback);\n };\n /**\n * @param {Array<T>} values Values.\n * @param {function(T): *} callback Callback.\n * @private\n * @return {*} Callback return value.\n */\n RBush.prototype.forEach_ = function (values, callback) {\n var result;\n for (var i = 0, l = values.length; i < l; i++) {\n result = callback(values[i]);\n if (result) {\n return result;\n }\n }\n return result;\n };\n /**\n * @return {boolean} Is empty.\n */\n RBush.prototype.isEmpty = function () {\n return isEmpty(this.items_);\n };\n /**\n * Remove all values from the RBush.\n */\n RBush.prototype.clear = function () {\n this.rbush_.clear();\n this.items_ = {};\n };\n /**\n * @param {import(\"../extent.js\").Extent=} opt_extent Extent.\n * @return {import(\"../extent.js\").Extent} Extent.\n */\n RBush.prototype.getExtent = function (opt_extent) {\n var data = this.rbush_.toJSON();\n return createOrUpdate(data.minX, data.minY, data.maxX, data.maxY, opt_extent);\n };\n /**\n * @param {RBush} rbush R-Tree.\n */\n RBush.prototype.concat = function (rbush) {\n this.rbush_.load(rbush.rbush_.all());\n for (var i in rbush.items_) {\n this.items_[i] = rbush.items_[i];\n }\n };\n return RBush;\n}());\nexport default RBush;\n//# sourceMappingURL=RBush.js.map","/**\n * @module ol/source/VectorEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a feature is added to the source.\n * @event module:ol/source/Vector.VectorSourceEvent#addfeature\n * @api\n */\n ADDFEATURE: 'addfeature',\n /**\n * Triggered when a feature is updated.\n * @event module:ol/source/Vector.VectorSourceEvent#changefeature\n * @api\n */\n CHANGEFEATURE: 'changefeature',\n /**\n * Triggered when the clear method is called on the source.\n * @event module:ol/source/Vector.VectorSourceEvent#clear\n * @api\n */\n CLEAR: 'clear',\n /**\n * Triggered when a feature is removed from the source.\n * See {@link module:ol/source/Vector#clear source.clear()} for exceptions.\n * @event module:ol/source/Vector.VectorSourceEvent#removefeature\n * @api\n */\n REMOVEFEATURE: 'removefeature',\n /**\n * Triggered when features starts loading.\n * @event module:ol/source/Vector.VectorSourceEvent#featuresloadstart\n * @api\n */\n FEATURESLOADSTART: 'featuresloadstart',\n /**\n * Triggered when features finishes loading.\n * @event module:ol/source/Vector.VectorSourceEvent#featuresloadend\n * @api\n */\n FEATURESLOADEND: 'featuresloadend',\n /**\n * Triggered if feature loading results in an error.\n * @event module:ol/source/Vector.VectorSourceEvent#featuresloaderror\n * @api\n */\n FEATURESLOADERROR: 'featuresloaderror',\n};\n//# sourceMappingURL=VectorEventType.js.map","/**\n * @module ol/tilecoord\n */\n/**\n * An array of three numbers representing the location of a tile in a tile\n * grid. The order is `z` (zoom level), `x` (column), and `y` (row).\n * @typedef {Array<number>} TileCoord\n * @api\n */\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {TileCoord=} opt_tileCoord Tile coordinate.\n * @return {TileCoord} Tile coordinate.\n */\nexport function createOrUpdate(z, x, y, opt_tileCoord) {\n if (opt_tileCoord !== undefined) {\n opt_tileCoord[0] = z;\n opt_tileCoord[1] = x;\n opt_tileCoord[2] = y;\n return opt_tileCoord;\n }\n else {\n return [z, x, y];\n }\n}\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {string} Key.\n */\nexport function getKeyZXY(z, x, y) {\n return z + '/' + x + '/' + y;\n}\n/**\n * Get the key for a tile coord.\n * @param {TileCoord} tileCoord The tile coord.\n * @return {string} Key.\n */\nexport function getKey(tileCoord) {\n return getKeyZXY(tileCoord[0], tileCoord[1], tileCoord[2]);\n}\n/**\n * Get a tile coord given a key.\n * @param {string} key The tile coord key.\n * @return {TileCoord} The tile coord.\n */\nexport function fromKey(key) {\n return key.split('/').map(Number);\n}\n/**\n * @param {TileCoord} tileCoord Tile coord.\n * @return {number} Hash.\n */\nexport function hash(tileCoord) {\n return (tileCoord[1] << tileCoord[0]) + tileCoord[2];\n}\n/**\n * @param {TileCoord} tileCoord Tile coordinate.\n * @param {!import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {boolean} Tile coordinate is within extent and zoom level range.\n */\nexport function withinExtentAndZ(tileCoord, tileGrid) {\n var z = tileCoord[0];\n var x = tileCoord[1];\n var y = tileCoord[2];\n if (tileGrid.getMinZoom() > z || z > tileGrid.getMaxZoom()) {\n return false;\n }\n var tileRange = tileGrid.getFullTileRange(z);\n if (!tileRange) {\n return true;\n }\n else {\n return tileRange.containsXY(x, y);\n }\n}\n//# sourceMappingURL=tilecoord.js.map","/**\n * @module ol/ObjectEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a property is changed.\n * @event module:ol/Object.ObjectEvent#propertychange\n * @api\n */\n PROPERTYCHANGE: 'propertychange',\n};\n//# sourceMappingURL=ObjectEventType.js.map","/**\n * @module ol/MapEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend',\n};\n//# sourceMappingURL=MapEventType.js.map","/**\n * @module ol/geom/flat/closest\n */\nimport { lerp, squaredDistance as squaredDx } from '../../math.js';\n/**\n * Returns the point on the 2D line segment flatCoordinates[offset1] to\n * flatCoordinates[offset2] that is closest to the point (x, y). Extra\n * dimensions are linearly interpolated.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset1 Offset 1.\n * @param {number} offset2 Offset 2.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n */\nfunction assignClosest(flatCoordinates, offset1, offset2, stride, x, y, closestPoint) {\n var x1 = flatCoordinates[offset1];\n var y1 = flatCoordinates[offset1 + 1];\n var dx = flatCoordinates[offset2] - x1;\n var dy = flatCoordinates[offset2 + 1] - y1;\n var offset;\n if (dx === 0 && dy === 0) {\n offset = offset1;\n }\n else {\n var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n offset = offset2;\n }\n else if (t > 0) {\n for (var i = 0; i < stride; ++i) {\n closestPoint[i] = lerp(flatCoordinates[offset1 + i], flatCoordinates[offset2 + i], t);\n }\n closestPoint.length = stride;\n return;\n }\n else {\n offset = offset1;\n }\n }\n for (var i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n}\n/**\n * Return the squared of the largest distance between any pair of consecutive\n * coordinates.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function maxSquaredDelta(flatCoordinates, offset, end, stride, max) {\n var x1 = flatCoordinates[offset];\n var y1 = flatCoordinates[offset + 1];\n for (offset += stride; offset < end; offset += stride) {\n var x2 = flatCoordinates[offset];\n var y2 = flatCoordinates[offset + 1];\n var squaredDelta = squaredDx(x1, y1, x2, y2);\n if (squaredDelta > max) {\n max = squaredDelta;\n }\n x1 = x2;\n y1 = y2;\n }\n return max;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n max = maxSquaredDelta(flatCoordinates, offset, end, stride, max);\n offset = end;\n }\n return max;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function multiArrayMaxSquaredDelta(flatCoordinates, offset, endss, stride, max) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n max = arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max);\n offset = ends[ends.length - 1];\n }\n return max;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array<number>=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestPoint(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {\n if (offset == end) {\n return minSquaredDistance;\n }\n var i, squaredDistance;\n if (maxDelta === 0) {\n // All points are identical, so just test the first point.\n squaredDistance = squaredDx(x, y, flatCoordinates[offset], flatCoordinates[offset + 1]);\n if (squaredDistance < minSquaredDistance) {\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n }\n else {\n return minSquaredDistance;\n }\n }\n var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n var index = offset + stride;\n while (index < end) {\n assignClosest(flatCoordinates, index - stride, index, stride, x, y, tmpPoint);\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n index += stride;\n }\n else {\n // Skip ahead multiple points, because we know that all the skipped\n // points cannot be any closer than the closest point we have found so\n // far. We know this because we know how close the current point is, how\n // close the closest point we have found so far is, and the maximum\n // distance between consecutive points. For example, if we're currently\n // at distance 10, the best we've found so far is 3, and that the maximum\n // distance between consecutive points is 2, then we'll need to skip at\n // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of\n // finding a closer point. We use Math.max(..., 1) to ensure that we\n // always advance at least one point, to avoid an infinite loop.\n index +=\n stride *\n Math.max(((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) /\n maxDelta) |\n 0, 1);\n }\n }\n if (isRing) {\n // Check the closing segment.\n assignClosest(flatCoordinates, end - stride, offset, stride, x, y, tmpPoint);\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n }\n }\n return minSquaredDistance;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array<number>=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestArrayPoint(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {\n var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n minSquaredDistance = assignClosestPoint(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);\n offset = end;\n }\n return minSquaredDistance;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array<number>=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestMultiArrayPoint(flatCoordinates, offset, endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {\n var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n minSquaredDistance = assignClosestArrayPoint(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);\n offset = ends[ends.length - 1];\n }\n return minSquaredDistance;\n}\n//# sourceMappingURL=closest.js.map","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\nimport { reparentNodes } from './dom.js';\nimport { boundAttributeSuffix, lastAttributeNameRegex, marker, nodeMarker } from './template.js';\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = window.trustedTypes &&\n trustedTypes.createPolicy('lit-html', { createHTML: (s) => s });\nconst commentMarker = ` ${marker} `;\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nexport class TemplateResult {\n constructor(strings, values, type, processor) {\n this.strings = strings;\n this.values = values;\n this.type = type;\n this.processor = processor;\n }\n /**\n * Returns a string of HTML used to create a `<template>` element.\n */\n getHTML() {\n const l = this.strings.length - 1;\n let html = '';\n let isCommentBinding = false;\n for (let i = 0; i < l; i++) {\n const s = this.strings[i];\n // For each binding we want to determine the kind of marker to insert\n // into the template source before it's parsed by the browser's HTML\n // parser. The marker type is based on whether the expression is in an\n // attribute, text, or comment position.\n // * For node-position bindings we insert a comment with the marker\n // sentinel as its text content, like <!--{{lit-guid}}-->.\n // * For attribute bindings we insert just the marker sentinel for the\n // first binding, so that we support unquoted attribute bindings.\n // Subsequent bindings can use a comment marker because multi-binding\n // attributes must be quoted.\n // * For comment bindings we insert just the marker sentinel so we don't\n // close the comment.\n //\n // The following code scans the template source, but is *not* an HTML\n // parser. We don't need to track the tree structure of the HTML, only\n // whether a binding is inside a comment, and if not, if it appears to be\n // the first binding in an attribute.\n const commentOpen = s.lastIndexOf('<!--');\n // We're in comment position if we have a comment open with no following\n // comment close. Because <-- can appear in an attribute value there can\n // be false positives.\n isCommentBinding = (commentOpen > -1 || isCommentBinding) &&\n s.indexOf('-->', commentOpen + 1) === -1;\n // Check to see if we have an attribute-like sequence preceding the\n // expression. This can match \"name=value\" like structures in text,\n // comments, and attribute values, so there can be false-positives.\n const attributeMatch = lastAttributeNameRegex.exec(s);\n if (attributeMatch === null) {\n // We're only in this branch if we don't have a attribute-like\n // preceding sequence. For comments, this guards against unusual\n // attribute values like <div foo=\"<!--${'bar'}\">. Cases like\n // <!-- foo=${'bar'}--> are handled correctly in the attribute branch\n // below.\n html += s + (isCommentBinding ? commentMarker : nodeMarker);\n }\n else {\n // For attributes we use just a marker sentinel, and also append a\n // $lit$ suffix to the name to opt-out of attribute-specific parsing\n // that IE and Edge do for style and certain SVG attributes.\n html += s.substr(0, attributeMatch.index) + attributeMatch[1] +\n attributeMatch[2] + boundAttributeSuffix + attributeMatch[3] +\n marker;\n }\n }\n html += this.strings[l];\n return html;\n }\n getTemplateElement() {\n const template = document.createElement('template');\n let value = this.getHTML();\n if (policy !== undefined) {\n // this is secure because `this.strings` is a TemplateStringsArray.\n // TODO: validate this when\n // https://github.com/tc39/proposal-array-is-template-object is\n // implemented.\n value = policy.createHTML(value);\n }\n template.innerHTML = value;\n return template;\n }\n}\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTML in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nexport class SVGTemplateResult extends TemplateResult {\n getHTML() {\n return `<svg>${super.getHTML()}</svg>`;\n }\n getTemplateElement() {\n const template = super.getTemplateElement();\n const content = template.content;\n const svgElement = content.firstChild;\n content.removeChild(svgElement);\n reparentNodes(content, svgElement.firstChild);\n return template;\n }\n}\n//# sourceMappingURL=template-result.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { marker, Template } from './template.js';\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nexport function templateFactory(result) {\n let templateCache = templateCaches.get(result.type);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap(),\n keyString: new Map()\n };\n templateCaches.set(result.type, templateCache);\n }\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n // If the TemplateStringsArray is new, generate a key from the strings\n // This key is shared between all templates with identical content\n const key = result.strings.join(marker);\n // Check if we already have a Template for this key\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n // If we have not seen this key before, create a new Template\n template = new Template(result, result.getTemplateElement());\n // Cache the Template for this key\n templateCache.keyString.set(key, template);\n }\n // Cache all future queries for this TemplateStringsArray\n templateCache.stringsArray.set(result.strings, template);\n return template;\n}\nexport const templateCaches = new Map();\n//# sourceMappingURL=template-factory.js.map","/**\n * @module ol/reproj/common\n */\n/**\n * Default maximum allowed threshold (in pixels) for reprojection\n * triangulation.\n * @type {number}\n */\nexport var ERROR_THRESHOLD = 0.5;\n/**\n * Enable automatic reprojection of raster sources. Default is `true`.\n * TODO: decide if we want to expose this as a build flag or remove it\n * @type {boolean}\n */\nexport var ENABLE_RASTER_REPROJECTION = true;\n//# sourceMappingURL=common.js.map","/**\n * @module ol/tilegrid/TileGrid\n */\nimport TileRange, { createOrUpdate as createOrUpdateTileRange, } from '../TileRange.js';\nimport { DEFAULT_TILE_SIZE } from './common.js';\nimport { assert } from '../asserts.js';\nimport { clamp } from '../math.js';\nimport { createOrUpdate, getTopLeft } from '../extent.js';\nimport { createOrUpdate as createOrUpdateTileCoord } from '../tilecoord.js';\nimport { isSorted, linearFindNearest } from '../array.js';\nimport { toSize } from '../size.js';\n/**\n * @private\n * @type {import(\"../tilecoord.js\").TileCoord}\n */\nvar tmpTileCoord = [0, 0, 0];\n/**\n * @typedef {Object} Options\n * @property {import(\"../extent.js\").Extent} [extent] Extent for the tile grid. No tiles outside this\n * extent will be requested by {@link module:ol/source/Tile} sources. When no `origin` or\n * `origins` are configured, the `origin` will be set to the top-left corner of the extent.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {import(\"../coordinate.js\").Coordinate} [origin] The tile grid origin, i.e. where the `x`\n * and `y` axes meet (`[z, 0, 0]`). Tile coordinates increase left to right and downwards. If not\n * specified, `extent` or `origins` must be provided.\n * @property {Array<import(\"../coordinate.js\").Coordinate>} [origins] Tile grid origins, i.e. where\n * the `x` and `y` axes meet (`[z, 0, 0]`), for each zoom level. If given, the array length\n * should match the length of the `resolutions` array, i.e. each resolution can have a different\n * origin. Tile coordinates increase left to right and downwards. If not specified, `extent` or\n * `origin` must be provided.\n * @property {!Array<number>} resolutions Resolutions. The array index of each resolution needs\n * to match the zoom level. This means that even if a `minZoom` is configured, the resolutions\n * array will have a length of `maxZoom + 1`.\n * @property {Array<import(\"../size.js\").Size>} [sizes] Number of tile rows and columns\n * of the grid for each zoom level. If specified the values\n * define each zoom level's extent together with the `origin` or `origins`.\n * A grid `extent` can be configured in addition, and will further limit the extent\n * for which tile requests are made by sources. If the bottom-left corner of\n * an extent is used as `origin` or `origins`, then the `y` value must be\n * negative because OpenLayers tile coordinates use the top left as the origin.\n * @property {number|import(\"../size.js\").Size} [tileSize] Tile size.\n * Default is `[256, 256]`.\n * @property {Array<import(\"../size.js\").Size>} [tileSizes] Tile sizes. If given, the array length\n * should match the length of the `resolutions` array, i.e. each resolution can have a different\n * tile size.\n */\n/**\n * @classdesc\n * Base class for setting the grid pattern for sources accessing tiled-image\n * servers.\n * @api\n */\nvar TileGrid = /** @class */ (function () {\n /**\n * @param {Options} options Tile grid options.\n */\n function TileGrid(options) {\n /**\n * @protected\n * @type {number}\n */\n this.minZoom = options.minZoom !== undefined ? options.minZoom : 0;\n /**\n * @private\n * @type {!Array<number>}\n */\n this.resolutions_ = options.resolutions;\n assert(isSorted(this.resolutions_, function (a, b) {\n return b - a;\n }, true), 17); // `resolutions` must be sorted in descending order\n // check if we've got a consistent zoom factor and origin\n var zoomFactor;\n if (!options.origins) {\n for (var i = 0, ii = this.resolutions_.length - 1; i < ii; ++i) {\n if (!zoomFactor) {\n zoomFactor = this.resolutions_[i] / this.resolutions_[i + 1];\n }\n else {\n if (this.resolutions_[i] / this.resolutions_[i + 1] !== zoomFactor) {\n zoomFactor = undefined;\n break;\n }\n }\n }\n }\n /**\n * @private\n * @type {number|undefined}\n */\n this.zoomFactor_ = zoomFactor;\n /**\n * @protected\n * @type {number}\n */\n this.maxZoom = this.resolutions_.length - 1;\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.origin_ = options.origin !== undefined ? options.origin : null;\n /**\n * @private\n * @type {Array<import(\"../coordinate.js\").Coordinate>}\n */\n this.origins_ = null;\n if (options.origins !== undefined) {\n this.origins_ = options.origins;\n assert(this.origins_.length == this.resolutions_.length, 20); // Number of `origins` and `resolutions` must be equal\n }\n var extent = options.extent;\n if (extent !== undefined && !this.origin_ && !this.origins_) {\n this.origin_ = getTopLeft(extent);\n }\n assert((!this.origin_ && this.origins_) || (this.origin_ && !this.origins_), 18); // Either `origin` or `origins` must be configured, never both\n /**\n * @private\n * @type {Array<number|import(\"../size.js\").Size>}\n */\n this.tileSizes_ = null;\n if (options.tileSizes !== undefined) {\n this.tileSizes_ = options.tileSizes;\n assert(this.tileSizes_.length == this.resolutions_.length, 19); // Number of `tileSizes` and `resolutions` must be equal\n }\n /**\n * @private\n * @type {number|import(\"../size.js\").Size}\n */\n this.tileSize_ =\n options.tileSize !== undefined\n ? options.tileSize\n : !this.tileSizes_\n ? DEFAULT_TILE_SIZE\n : null;\n assert((!this.tileSize_ && this.tileSizes_) ||\n (this.tileSize_ && !this.tileSizes_), 22); // Either `tileSize` or `tileSizes` must be configured, never both\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = extent !== undefined ? extent : null;\n /**\n * @private\n * @type {Array<import(\"../TileRange.js\").default>}\n */\n this.fullTileRanges_ = null;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.tmpSize_ = [0, 0];\n if (options.sizes !== undefined) {\n this.fullTileRanges_ = options.sizes.map(function (size, z) {\n var tileRange = new TileRange(Math.min(0, size[0]), Math.max(size[0] - 1, -1), Math.min(0, size[1]), Math.max(size[1] - 1, -1));\n if (extent) {\n var restrictedTileRange = this.getTileRangeForExtentAndZ(extent, z);\n tileRange.minX = Math.max(restrictedTileRange.minX, tileRange.minX);\n tileRange.maxX = Math.min(restrictedTileRange.maxX, tileRange.maxX);\n tileRange.minY = Math.max(restrictedTileRange.minY, tileRange.minY);\n tileRange.maxY = Math.min(restrictedTileRange.maxY, tileRange.maxY);\n }\n return tileRange;\n }, this);\n }\n else if (extent) {\n this.calculateTileRanges_(extent);\n }\n }\n /**\n * Call a function with each tile coordinate for a given extent and zoom level.\n *\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} zoom Integer zoom level.\n * @param {function(import(\"../tilecoord.js\").TileCoord): void} callback Function called with each tile coordinate.\n * @api\n */\n TileGrid.prototype.forEachTileCoord = function (extent, zoom, callback) {\n var tileRange = this.getTileRangeForExtentAndZ(extent, zoom);\n for (var i = tileRange.minX, ii = tileRange.maxX; i <= ii; ++i) {\n for (var j = tileRange.minY, jj = tileRange.maxY; j <= jj; ++j) {\n callback([zoom, i, j]);\n }\n }\n };\n /**\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {function(number, import(\"../TileRange.js\").default): boolean} callback Callback.\n * @param {import(\"../TileRange.js\").default=} opt_tileRange Temporary import(\"../TileRange.js\").default object.\n * @param {import(\"../extent.js\").Extent=} opt_extent Temporary import(\"../extent.js\").Extent object.\n * @return {boolean} Callback succeeded.\n */\n TileGrid.prototype.forEachTileCoordParentTileRange = function (tileCoord, callback, opt_tileRange, opt_extent) {\n var tileRange, x, y;\n var tileCoordExtent = null;\n var z = tileCoord[0] - 1;\n if (this.zoomFactor_ === 2) {\n x = tileCoord[1];\n y = tileCoord[2];\n }\n else {\n tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);\n }\n while (z >= this.minZoom) {\n if (this.zoomFactor_ === 2) {\n x = Math.floor(x / 2);\n y = Math.floor(y / 2);\n tileRange = createOrUpdateTileRange(x, x, y, y, opt_tileRange);\n }\n else {\n tileRange = this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange);\n }\n if (callback(z, tileRange)) {\n return true;\n }\n --z;\n }\n return false;\n };\n /**\n * Get the extent for this tile grid, if it was configured.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n TileGrid.prototype.getExtent = function () {\n return this.extent_;\n };\n /**\n * Get the maximum zoom level for the grid.\n * @return {number} Max zoom.\n * @api\n */\n TileGrid.prototype.getMaxZoom = function () {\n return this.maxZoom;\n };\n /**\n * Get the minimum zoom level for the grid.\n * @return {number} Min zoom.\n * @api\n */\n TileGrid.prototype.getMinZoom = function () {\n return this.minZoom;\n };\n /**\n * Get the origin for the grid at the given zoom level.\n * @param {number} z Integer zoom level.\n * @return {import(\"../coordinate.js\").Coordinate} Origin.\n * @api\n */\n TileGrid.prototype.getOrigin = function (z) {\n if (this.origin_) {\n return this.origin_;\n }\n else {\n return this.origins_[z];\n }\n };\n /**\n * Get the resolution for the given zoom level.\n * @param {number} z Integer zoom level.\n * @return {number} Resolution.\n * @api\n */\n TileGrid.prototype.getResolution = function (z) {\n return this.resolutions_[z];\n };\n /**\n * Get the list of resolutions for the tile grid.\n * @return {Array<number>} Resolutions.\n * @api\n */\n TileGrid.prototype.getResolutions = function () {\n return this.resolutions_;\n };\n /**\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"../TileRange.js\").default=} opt_tileRange Temporary import(\"../TileRange.js\").default object.\n * @param {import(\"../extent.js\").Extent=} opt_extent Temporary import(\"../extent.js\").Extent object.\n * @return {import(\"../TileRange.js\").default} Tile range.\n */\n TileGrid.prototype.getTileCoordChildTileRange = function (tileCoord, opt_tileRange, opt_extent) {\n if (tileCoord[0] < this.maxZoom) {\n if (this.zoomFactor_ === 2) {\n var minX = tileCoord[1] * 2;\n var minY = tileCoord[2] * 2;\n return createOrUpdateTileRange(minX, minX + 1, minY, minY + 1, opt_tileRange);\n }\n var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);\n return this.getTileRangeForExtentAndZ(tileCoordExtent, tileCoord[0] + 1, opt_tileRange);\n }\n return null;\n };\n /**\n * Get the extent for a tile range.\n * @param {number} z Integer zoom level.\n * @param {import(\"../TileRange.js\").default} tileRange Tile range.\n * @param {import(\"../extent.js\").Extent=} opt_extent Temporary import(\"../extent.js\").Extent object.\n * @return {import(\"../extent.js\").Extent} Extent.\n */\n TileGrid.prototype.getTileRangeExtent = function (z, tileRange, opt_extent) {\n var origin = this.getOrigin(z);\n var resolution = this.getResolution(z);\n var tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n var minX = origin[0] + tileRange.minX * tileSize[0] * resolution;\n var maxX = origin[0] + (tileRange.maxX + 1) * tileSize[0] * resolution;\n var minY = origin[1] + tileRange.minY * tileSize[1] * resolution;\n var maxY = origin[1] + (tileRange.maxY + 1) * tileSize[1] * resolution;\n return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n };\n /**\n * Get a tile range for the given extent and integer zoom level.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} z Integer zoom level.\n * @param {import(\"../TileRange.js\").default=} opt_tileRange Temporary tile range object.\n * @return {import(\"../TileRange.js\").default} Tile range.\n */\n TileGrid.prototype.getTileRangeForExtentAndZ = function (extent, z, opt_tileRange) {\n var tileCoord = tmpTileCoord;\n this.getTileCoordForXYAndZ_(extent[0], extent[3], z, false, tileCoord);\n var minX = tileCoord[1];\n var minY = tileCoord[2];\n this.getTileCoordForXYAndZ_(extent[2], extent[1], z, true, tileCoord);\n return createOrUpdateTileRange(minX, tileCoord[1], minY, tileCoord[2], opt_tileRange);\n };\n /**\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @return {import(\"../coordinate.js\").Coordinate} Tile center.\n */\n TileGrid.prototype.getTileCoordCenter = function (tileCoord) {\n var origin = this.getOrigin(tileCoord[0]);\n var resolution = this.getResolution(tileCoord[0]);\n var tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n return [\n origin[0] + (tileCoord[1] + 0.5) * tileSize[0] * resolution,\n origin[1] - (tileCoord[2] + 0.5) * tileSize[1] * resolution,\n ];\n };\n /**\n * Get the extent of a tile coordinate.\n *\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"../extent.js\").Extent=} opt_extent Temporary extent object.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n TileGrid.prototype.getTileCoordExtent = function (tileCoord, opt_extent) {\n var origin = this.getOrigin(tileCoord[0]);\n var resolution = this.getResolution(tileCoord[0]);\n var tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n var minX = origin[0] + tileCoord[1] * tileSize[0] * resolution;\n var minY = origin[1] - (tileCoord[2] + 1) * tileSize[1] * resolution;\n var maxX = minX + tileSize[0] * resolution;\n var maxY = minY + tileSize[1] * resolution;\n return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n };\n /**\n * Get the tile coordinate for the given map coordinate and resolution. This\n * method considers that coordinates that intersect tile boundaries should be\n * assigned the higher tile coordinate.\n *\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {import(\"../tilecoord.js\").TileCoord=} opt_tileCoord Destination import(\"../tilecoord.js\").TileCoord object.\n * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n * @api\n */\n TileGrid.prototype.getTileCoordForCoordAndResolution = function (coordinate, resolution, opt_tileCoord) {\n return this.getTileCoordForXYAndResolution_(coordinate[0], coordinate[1], resolution, false, opt_tileCoord);\n };\n /**\n * Note that this method should not be called for resolutions that correspond\n * to an integer zoom level. Instead call the `getTileCoordForXYAndZ_` method.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} resolution Resolution (for a non-integer zoom level).\n * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n * intersections go to the higher tile coordinate, let edge intersections\n * go to the lower tile coordinate.\n * @param {import(\"../tilecoord.js\").TileCoord=} opt_tileCoord Temporary import(\"../tilecoord.js\").TileCoord object.\n * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n * @private\n */\n TileGrid.prototype.getTileCoordForXYAndResolution_ = function (x, y, resolution, reverseIntersectionPolicy, opt_tileCoord) {\n var z = this.getZForResolution(resolution);\n var scale = resolution / this.getResolution(z);\n var origin = this.getOrigin(z);\n var tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n var adjustX = reverseIntersectionPolicy ? 0.5 : 0;\n var adjustY = reverseIntersectionPolicy ? 0.5 : 0;\n var xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);\n var yFromOrigin = Math.floor((origin[1] - y) / resolution + adjustY);\n var tileCoordX = (scale * xFromOrigin) / tileSize[0];\n var tileCoordY = (scale * yFromOrigin) / tileSize[1];\n if (reverseIntersectionPolicy) {\n tileCoordX = Math.ceil(tileCoordX) - 1;\n tileCoordY = Math.ceil(tileCoordY) - 1;\n }\n else {\n tileCoordX = Math.floor(tileCoordX);\n tileCoordY = Math.floor(tileCoordY);\n }\n return createOrUpdateTileCoord(z, tileCoordX, tileCoordY, opt_tileCoord);\n };\n /**\n * Although there is repetition between this method and `getTileCoordForXYAndResolution_`,\n * they should have separate implementations. This method is for integer zoom\n * levels. The other method should only be called for resolutions corresponding\n * to non-integer zoom levels.\n * @param {number} x Map x coordinate.\n * @param {number} y Map y coordinate.\n * @param {number} z Integer zoom level.\n * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n * intersections go to the higher tile coordinate, let edge intersections\n * go to the lower tile coordinate.\n * @param {import(\"../tilecoord.js\").TileCoord=} opt_tileCoord Temporary import(\"../tilecoord.js\").TileCoord object.\n * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n * @private\n */\n TileGrid.prototype.getTileCoordForXYAndZ_ = function (x, y, z, reverseIntersectionPolicy, opt_tileCoord) {\n var origin = this.getOrigin(z);\n var resolution = this.getResolution(z);\n var tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n var adjustX = reverseIntersectionPolicy ? 0.5 : 0;\n var adjustY = reverseIntersectionPolicy ? 0.5 : 0;\n var xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);\n var yFromOrigin = Math.floor((origin[1] - y) / resolution + adjustY);\n var tileCoordX = xFromOrigin / tileSize[0];\n var tileCoordY = yFromOrigin / tileSize[1];\n if (reverseIntersectionPolicy) {\n tileCoordX = Math.ceil(tileCoordX) - 1;\n tileCoordY = Math.ceil(tileCoordY) - 1;\n }\n else {\n tileCoordX = Math.floor(tileCoordX);\n tileCoordY = Math.floor(tileCoordY);\n }\n return createOrUpdateTileCoord(z, tileCoordX, tileCoordY, opt_tileCoord);\n };\n /**\n * Get a tile coordinate given a map coordinate and zoom level.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} z Zoom level.\n * @param {import(\"../tilecoord.js\").TileCoord=} opt_tileCoord Destination import(\"../tilecoord.js\").TileCoord object.\n * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n * @api\n */\n TileGrid.prototype.getTileCoordForCoordAndZ = function (coordinate, z, opt_tileCoord) {\n return this.getTileCoordForXYAndZ_(coordinate[0], coordinate[1], z, false, opt_tileCoord);\n };\n /**\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @return {number} Tile resolution.\n */\n TileGrid.prototype.getTileCoordResolution = function (tileCoord) {\n return this.resolutions_[tileCoord[0]];\n };\n /**\n * Get the tile size for a zoom level. The type of the return value matches the\n * `tileSize` or `tileSizes` that the tile grid was configured with. To always\n * get an `import(\"../size.js\").Size`, run the result through `import(\"../size.js\").Size.toSize()`.\n * @param {number} z Z.\n * @return {number|import(\"../size.js\").Size} Tile size.\n * @api\n */\n TileGrid.prototype.getTileSize = function (z) {\n if (this.tileSize_) {\n return this.tileSize_;\n }\n else {\n return this.tileSizes_[z];\n }\n };\n /**\n * @param {number} z Zoom level.\n * @return {import(\"../TileRange.js\").default} Extent tile range for the specified zoom level.\n */\n TileGrid.prototype.getFullTileRange = function (z) {\n if (!this.fullTileRanges_) {\n return this.extent_\n ? this.getTileRangeForExtentAndZ(this.extent_, z)\n : null;\n }\n else {\n return this.fullTileRanges_[z];\n }\n };\n /**\n * @param {number} resolution Resolution.\n * @param {number=} opt_direction If 0, the nearest resolution will be used.\n * If 1, the nearest lower resolution will be used. If -1, the nearest\n * higher resolution will be used. Default is 0.\n * @return {number} Z.\n * @api\n */\n TileGrid.prototype.getZForResolution = function (resolution, opt_direction) {\n var z = linearFindNearest(this.resolutions_, resolution, opt_direction || 0);\n return clamp(z, this.minZoom, this.maxZoom);\n };\n /**\n * @param {!import(\"../extent.js\").Extent} extent Extent for this tile grid.\n * @private\n */\n TileGrid.prototype.calculateTileRanges_ = function (extent) {\n var length = this.resolutions_.length;\n var fullTileRanges = new Array(length);\n for (var z = this.minZoom; z < length; ++z) {\n fullTileRanges[z] = this.getTileRangeForExtentAndZ(extent, z);\n }\n this.fullTileRanges_ = fullTileRanges;\n };\n return TileGrid;\n}());\nexport default TileGrid;\n//# sourceMappingURL=TileGrid.js.map","/**\n * @module ol/tilegrid\n */\nimport Corner from './extent/Corner.js';\nimport TileGrid from './tilegrid/TileGrid.js';\nimport Units from './proj/Units.js';\nimport { DEFAULT_MAX_ZOOM, DEFAULT_TILE_SIZE } from './tilegrid/common.js';\nimport { METERS_PER_UNIT, get as getProjection } from './proj.js';\nimport { containsCoordinate, createOrUpdate, getCorner, getHeight, getWidth, } from './extent.js';\nimport { toSize } from './size.js';\n/**\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {!TileGrid} Default tile grid for the\n * passed projection.\n */\nexport function getForProjection(projection) {\n var tileGrid = projection.getDefaultTileGrid();\n if (!tileGrid) {\n tileGrid = createForProjection(projection);\n projection.setDefaultTileGrid(tileGrid);\n }\n return tileGrid;\n}\n/**\n * @param {TileGrid} tileGrid Tile grid.\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {import(\"./tilecoord.js\").TileCoord} Tile coordinate.\n */\nexport function wrapX(tileGrid, tileCoord, projection) {\n var z = tileCoord[0];\n var center = tileGrid.getTileCoordCenter(tileCoord);\n var projectionExtent = extentFromProjection(projection);\n if (!containsCoordinate(projectionExtent, center)) {\n var worldWidth = getWidth(projectionExtent);\n var worldsAway = Math.ceil((projectionExtent[0] - center[0]) / worldWidth);\n center[0] += worldWidth * worldsAway;\n return tileGrid.getTileCoordForCoordAndZ(center, z);\n }\n else {\n return tileCoord;\n }\n}\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n * DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size=} opt_tileSize Tile size (default uses\n * DEFAULT_TILE_SIZE).\n * @param {import(\"./extent/Corner.js\").default=} opt_corner Extent corner (default is `'top-left'`).\n * @return {!TileGrid} TileGrid instance.\n */\nexport function createForExtent(extent, opt_maxZoom, opt_tileSize, opt_corner) {\n var corner = opt_corner !== undefined ? opt_corner : Corner.TOP_LEFT;\n var resolutions = resolutionsFromExtent(extent, opt_maxZoom, opt_tileSize);\n return new TileGrid({\n extent: extent,\n origin: getCorner(extent, corner),\n resolutions: resolutions,\n tileSize: opt_tileSize,\n });\n}\n/**\n * @typedef {Object} XYZOptions\n * @property {import(\"./extent.js\").Extent} [extent] Extent for the tile grid. The origin for an XYZ tile grid is the\n * top-left corner of the extent. If `maxResolution` is not provided the zero level of the grid is defined by the resolution\n * at which one tile fits in the provided extent. If not provided, the extent of the EPSG:3857 projection is used.\n * @property {number} [maxResolution] Resolution at level zero.\n * @property {number} [maxZoom] Maximum zoom. The default is `42`. This determines the number of levels\n * in the grid set. For example, a `maxZoom` of 21 means there are 22 levels in the grid set.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {number|import(\"./size.js\").Size} [tileSize=[256, 256]] Tile size in pixels.\n */\n/**\n * Creates a tile grid with a standard XYZ tiling scheme.\n * @param {XYZOptions=} opt_options Tile grid options.\n * @return {!TileGrid} Tile grid instance.\n * @api\n */\nexport function createXYZ(opt_options) {\n var xyzOptions = opt_options || {};\n var extent = xyzOptions.extent || getProjection('EPSG:3857').getExtent();\n var gridOptions = {\n extent: extent,\n minZoom: xyzOptions.minZoom,\n tileSize: xyzOptions.tileSize,\n resolutions: resolutionsFromExtent(extent, xyzOptions.maxZoom, xyzOptions.tileSize, xyzOptions.maxResolution),\n };\n return new TileGrid(gridOptions);\n}\n/**\n * Create a resolutions array from an extent. A zoom factor of 2 is assumed.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n * DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size=} opt_tileSize Tile size (default uses\n * DEFAULT_TILE_SIZE).\n * @param {number=} opt_maxResolution Resolution at level zero.\n * @return {!Array<number>} Resolutions array.\n */\nfunction resolutionsFromExtent(extent, opt_maxZoom, opt_tileSize, opt_maxResolution) {\n var maxZoom = opt_maxZoom !== undefined ? opt_maxZoom : DEFAULT_MAX_ZOOM;\n var height = getHeight(extent);\n var width = getWidth(extent);\n var tileSize = toSize(opt_tileSize !== undefined ? opt_tileSize : DEFAULT_TILE_SIZE);\n var maxResolution = opt_maxResolution > 0\n ? opt_maxResolution\n : Math.max(width / tileSize[0], height / tileSize[1]);\n var length = maxZoom + 1;\n var resolutions = new Array(length);\n for (var z = 0; z < length; ++z) {\n resolutions[z] = maxResolution / Math.pow(2, z);\n }\n return resolutions;\n}\n/**\n * @param {import(\"./proj.js\").ProjectionLike} projection Projection.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n * DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size=} opt_tileSize Tile size (default uses\n * DEFAULT_TILE_SIZE).\n * @param {import(\"./extent/Corner.js\").default=} opt_corner Extent corner (default is `'top-left'`).\n * @return {!TileGrid} TileGrid instance.\n */\nexport function createForProjection(projection, opt_maxZoom, opt_tileSize, opt_corner) {\n var extent = extentFromProjection(projection);\n return createForExtent(extent, opt_maxZoom, opt_tileSize, opt_corner);\n}\n/**\n * Generate a tile grid extent from a projection. If the projection has an\n * extent, it is used. If not, a global extent is assumed.\n * @param {import(\"./proj.js\").ProjectionLike} projection Projection.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\nexport function extentFromProjection(projection) {\n projection = getProjection(projection);\n var extent = projection.getExtent();\n if (!extent) {\n var half = (180 * METERS_PER_UNIT[Units.DEGREES]) / projection.getMetersPerUnit();\n extent = createOrUpdate(-half, -half, half, half);\n }\n return extent;\n}\n//# sourceMappingURL=tilegrid.js.map","define(function(){\n if (typeof global !== 'undefined' && typeof global !== 'function') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n return this;\n});\n","/**\n * @module ol/render/EventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered before a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#prerender\n * @api\n */\n PRERENDER: 'prerender',\n /**\n * Triggered after a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n /**\n * Triggered before layers are rendered.\n * The event object will not have a `context` set.\n * @event module:ol/render/Event~RenderEvent#precompose\n * @api\n */\n PRECOMPOSE: 'precompose',\n /**\n * Triggered after all layers are rendered.\n * The event object will not have a `context` set.\n * @event module:ol/render/Event~RenderEvent#postcompose\n * @api\n */\n POSTCOMPOSE: 'postcompose',\n /**\n * Triggered when rendering is complete, i.e. all sources and tiles have\n * finished loading for the current viewport, and all tiles are faded in.\n * The event object will not have a `context` set.\n * @event module:ol/render/Event~RenderEvent#rendercomplete\n * @api\n */\n RENDERCOMPLETE: 'rendercomplete',\n};\n//# sourceMappingURL=EventType.js.map","/**\n * @module ol/geom/flat/contains\n */\nimport { forEachCorner } from '../../extent.js';\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(flatCoordinates, offset, end, stride, extent) {\n var outside = forEachCorner(extent, \n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function (coordinate) {\n return !linearRingContainsXY(flatCoordinates, offset, end, stride, coordinate[0], coordinate[1]);\n });\n return !outside;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(flatCoordinates, offset, end, stride, x, y) {\n // http://geomalgorithms.com/a03-_inclusion.html\n // Copyright 2000 softSurfer, 2012 Dan Sunday\n // This code may be freely used and modified for any purpose\n // providing that this copyright notice is included with it.\n // SoftSurfer makes no warranty for this code, and cannot be held\n // liable for any real or imagined damage resulting from its use.\n // Users of this code must verify correctness for their application.\n var wn = 0;\n var x1 = flatCoordinates[end - stride];\n var y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n var x2 = flatCoordinates[offset];\n var y2 = flatCoordinates[offset + 1];\n if (y1 <= y) {\n if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n wn++;\n }\n }\n else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n wn--;\n }\n x1 = x2;\n y1 = y2;\n }\n return wn !== 0;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y) {\n if (ends.length === 0) {\n return false;\n }\n if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n return false;\n }\n for (var i = 1, ii = ends.length; i < ii; ++i) {\n if (linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {\n return false;\n }\n }\n return true;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(flatCoordinates, offset, endss, stride, x, y) {\n if (endss.length === 0) {\n return false;\n }\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n//# sourceMappingURL=contains.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/geom/LinearRing\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport GeometryType from './GeometryType.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { assignClosestPoint, maxSquaredDelta } from './flat/closest.js';\nimport { closestSquaredDistanceXY } from '../extent.js';\nimport { deflateCoordinates } from './flat/deflate.js';\nimport { douglasPeucker } from './flat/simplify.js';\nimport { inflateCoordinates } from './flat/inflate.js';\nimport { linearRing as linearRingArea } from './flat/area.js';\n/**\n * @classdesc\n * Linear ring geometry. Only used as part of polygon; cannot be rendered\n * on its own.\n *\n * @api\n */\nvar LinearRing = /** @class */ (function (_super) {\n __extends(LinearRing, _super);\n /**\n * @param {Array<import(\"../coordinate.js\").Coordinate>|Array<number>} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `opt_layout` are also accepted.\n * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n */\n function LinearRing(coordinates, opt_layout) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {number}\n */\n _this.maxDelta_ = -1;\n /**\n * @private\n * @type {number}\n */\n _this.maxDeltaRevision_ = -1;\n if (opt_layout !== undefined && !Array.isArray(coordinates[0])) {\n _this.setFlatCoordinates(opt_layout, \n /** @type {Array<number>} */ (coordinates));\n }\n else {\n _this.setCoordinates(\n /** @type {Array<import(\"../coordinate.js\").Coordinate>} */ (coordinates), opt_layout);\n }\n return _this;\n }\n /**\n * Make a complete copy of the geometry.\n * @return {!LinearRing} Clone.\n * @api\n */\n LinearRing.prototype.clone = function () {\n return new LinearRing(this.flatCoordinates.slice(), this.layout);\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n LinearRing.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(maxSquaredDelta(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestPoint(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n };\n /**\n * Return the area of the linear ring on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n LinearRing.prototype.getArea = function () {\n return linearRingArea(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n };\n /**\n * Return the coordinates of the linear ring.\n * @return {Array<import(\"../coordinate.js\").Coordinate>} Coordinates.\n * @api\n */\n LinearRing.prototype.getCoordinates = function () {\n return inflateCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n };\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LinearRing} Simplified LinearRing.\n * @protected\n */\n LinearRing.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n var simplifiedFlatCoordinates = [];\n simplifiedFlatCoordinates.length = douglasPeucker(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0);\n return new LinearRing(simplifiedFlatCoordinates, GeometryLayout.XY);\n };\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n LinearRing.prototype.getType = function () {\n return GeometryType.LINEAR_RING;\n };\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n LinearRing.prototype.intersectsExtent = function (extent) {\n return false;\n };\n /**\n * Set the coordinates of the linear ring.\n * @param {!Array<import(\"../coordinate.js\").Coordinate>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default=} opt_layout Layout.\n * @api\n */\n LinearRing.prototype.setCoordinates = function (coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 1);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinates(this.flatCoordinates, 0, coordinates, this.stride);\n this.changed();\n };\n return LinearRing;\n}(SimpleGeometry));\nexport default LinearRing;\n//# sourceMappingURL=LinearRing.js.map","/**\n * @module ol/geom/flat/intersectsextent\n */\nimport { containsExtent, createEmpty, extendFlatCoordinates, intersects, intersectsSegment, } from '../../extent.js';\nimport { forEach as forEachSegment } from './segments.js';\nimport { linearRingContainsExtent, linearRingContainsXY } from './contains.js';\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineString(flatCoordinates, offset, end, stride, extent) {\n var coordinatesExtent = extendFlatCoordinates(createEmpty(), flatCoordinates, offset, end, stride);\n if (!intersects(extent, coordinatesExtent)) {\n return false;\n }\n if (containsExtent(extent, coordinatesExtent)) {\n return true;\n }\n if (coordinatesExtent[0] >= extent[0] && coordinatesExtent[2] <= extent[2]) {\n return true;\n }\n if (coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3]) {\n return true;\n }\n return forEachSegment(flatCoordinates, offset, end, stride, \n /**\n * @param {import(\"../../coordinate.js\").Coordinate} point1 Start point.\n * @param {import(\"../../coordinate.js\").Coordinate} point2 End point.\n * @return {boolean} `true` if the segment and the extent intersect,\n * `false` otherwise.\n */\n function (point1, point2) {\n return intersectsSegment(extent, point1, point2);\n });\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineStringArray(flatCoordinates, offset, ends, stride, extent) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n if (intersectsLineString(flatCoordinates, offset, ends[i], stride, extent)) {\n return true;\n }\n offset = ends[i];\n }\n return false;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRing(flatCoordinates, offset, end, stride, extent) {\n if (intersectsLineString(flatCoordinates, offset, end, stride, extent)) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[0], extent[1])) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[0], extent[3])) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[2], extent[1])) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[2], extent[3])) {\n return true;\n }\n return false;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent) {\n if (!intersectsLinearRing(flatCoordinates, offset, ends[0], stride, extent)) {\n return false;\n }\n if (ends.length === 1) {\n return true;\n }\n for (var i = 1, ii = ends.length; i < ii; ++i) {\n if (linearRingContainsExtent(flatCoordinates, ends[i - 1], ends[i], stride, extent)) {\n if (!intersectsLineString(flatCoordinates, ends[i - 1], ends[i], stride, extent)) {\n return false;\n }\n }\n }\n return true;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingMultiArray(flatCoordinates, offset, endss, stride, extent) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n if (intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n//# sourceMappingURL=intersectsextent.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/MapBrowserEvent\n */\nimport MapEvent from './MapEvent.js';\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map browser event.\n * @template {UIEvent} EVENT\n */\nvar MapBrowserEvent = /** @class */ (function (_super) {\n __extends(MapBrowserEvent, _super);\n /**\n * @param {string} type Event type.\n * @param {import(\"./PluggableMap.js\").default} map Map.\n * @param {EVENT} originalEvent Original event.\n * @param {boolean=} opt_dragging Is the map currently being dragged?\n * @param {?import(\"./PluggableMap.js\").FrameState=} opt_frameState Frame state.\n */\n function MapBrowserEvent(type, map, originalEvent, opt_dragging, opt_frameState) {\n var _this = _super.call(this, type, map, opt_frameState) || this;\n /**\n * The original browser event.\n * @const\n * @type {EVENT}\n * @api\n */\n _this.originalEvent = originalEvent;\n /**\n * The map pixel relative to the viewport corresponding to the original browser event.\n * @type {?import(\"./pixel.js\").Pixel}\n */\n _this.pixel_ = null;\n /**\n * The coordinate in the user projection corresponding to the original browser event.\n * @type {?import(\"./coordinate.js\").Coordinate}\n */\n _this.coordinate_ = null;\n /**\n * Indicates if the map is currently being dragged. Only set for\n * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n *\n * @type {boolean}\n * @api\n */\n _this.dragging = opt_dragging !== undefined ? opt_dragging : false;\n return _this;\n }\n Object.defineProperty(MapBrowserEvent.prototype, \"pixel\", {\n /**\n * The map pixel relative to the viewport corresponding to the original event.\n * @type {import(\"./pixel.js\").Pixel}\n * @api\n */\n get: function () {\n if (!this.pixel_) {\n this.pixel_ = this.map.getEventPixel(this.originalEvent);\n }\n return this.pixel_;\n },\n set: function (pixel) {\n this.pixel_ = pixel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MapBrowserEvent.prototype, \"coordinate\", {\n /**\n * The coordinate corresponding to the original browser event. This will be in the user\n * projection if one is set. Otherwise it will be in the view projection.\n * @type {import(\"./coordinate.js\").Coordinate}\n * @api\n */\n get: function () {\n if (!this.coordinate_) {\n this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);\n }\n return this.coordinate_;\n },\n set: function (coordinate) {\n this.coordinate_ = coordinate;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Prevents the default browser action.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n * @api\n */\n MapBrowserEvent.prototype.preventDefault = function () {\n _super.prototype.preventDefault.call(this);\n this.originalEvent.preventDefault();\n };\n /**\n * Prevents further propagation of the current event.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n * @api\n */\n MapBrowserEvent.prototype.stopPropagation = function () {\n _super.prototype.stopPropagation.call(this);\n this.originalEvent.stopPropagation();\n };\n return MapBrowserEvent;\n}(MapEvent));\nexport default MapBrowserEvent;\n//# sourceMappingURL=MapBrowserEvent.js.map","/**\n * @module ol/ViewHint\n */\n/**\n * @enum {number}\n */\nexport default {\n ANIMATING: 0,\n INTERACTING: 1,\n};\n//# sourceMappingURL=ViewHint.js.map","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { removeNodes } from './dom.js';\nimport { NodePart } from './parts.js';\nimport { templateFactory } from './template-factory.js';\nexport const parts = new WeakMap();\n/**\n * Renders a template result or other value to a container.\n *\n * To update a container with new values, reevaluate the template literal and\n * call `render` with the new result.\n *\n * @param result Any value renderable by NodePart - typically a TemplateResult\n * created by evaluating a template tag like `html` or `svg`.\n * @param container A DOM parent to render to. The entire contents are either\n * replaced, or efficiently updated if the same result type was previous\n * rendered there.\n * @param options RenderOptions for the entire render tree rendered to this\n * container. Render options must *not* change between renders to the same\n * container, as those changes will not effect previously rendered DOM.\n */\nexport const render = (result, container, options) => {\n let part = parts.get(container);\n if (part === undefined) {\n removeNodes(container, container.firstChild);\n parts.set(container, part = new NodePart(Object.assign({ templateFactory }, options)));\n part.appendInto(container);\n }\n part.setValue(result);\n part.commit();\n};\n//# sourceMappingURL=render.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst directives = new WeakMap();\n/**\n * Brands a function as a directive factory function so that lit-html will call\n * the function during template rendering, rather than passing as a value.\n *\n * A _directive_ is a function that takes a Part as an argument. It has the\n * signature: `(part: Part) => void`.\n *\n * A directive _factory_ is a function that takes arguments for data and\n * configuration and returns a directive. Users of directive usually refer to\n * the directive factory as the directive. For example, \"The repeat directive\".\n *\n * Usually a template author will invoke a directive factory in their template\n * with relevant arguments, which will then return a directive function.\n *\n * Here's an example of using the `repeat()` directive factory that takes an\n * array and a function to render an item:\n *\n * ```js\n * html`<ul><${repeat(items, (item) => html`<li>${item}</li>`)}</ul>`\n * ```\n *\n * When `repeat` is invoked, it returns a directive function that closes over\n * `items` and the template function. When the outer template is rendered, the\n * return directive function is called with the Part for the expression.\n * `repeat` then performs it's custom logic to render multiple items.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object.\n *\n * @example\n *\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n * if (part.value !== v) {\n * part.setValue(v)\n * }\n * });\n */\nexport const directive = (f) => ((...args) => {\n const d = f(...args);\n directives.set(d, true);\n return d;\n});\nexport const isDirective = (o) => {\n return typeof o === 'function' && directives.has(o);\n};\n//# sourceMappingURL=directive.js.map","/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = {};\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nexport const nothing = {};\n//# sourceMappingURL=part.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isCEPolyfill } from './dom.js';\nimport { isTemplatePartActive } from './template.js';\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nexport class TemplateInstance {\n constructor(template, processor, options) {\n this.__parts = [];\n this.template = template;\n this.processor = processor;\n this.options = options;\n }\n update(values) {\n let i = 0;\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.setValue(values[i]);\n }\n i++;\n }\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.commit();\n }\n }\n }\n _clone() {\n // There are a number of steps in the lifecycle of a template instance's\n // DOM fragment:\n // 1. Clone - create the instance fragment\n // 2. Adopt - adopt into the main document\n // 3. Process - find part markers and create parts\n // 4. Upgrade - upgrade custom elements\n // 5. Update - set node, attribute, property, etc., values\n // 6. Connect - connect to the document. Optional and outside of this\n // method.\n //\n // We have a few constraints on the ordering of these steps:\n // * We need to upgrade before updating, so that property values will pass\n // through any property setters.\n // * We would like to process before upgrading so that we're sure that the\n // cloned fragment is inert and not disturbed by self-modifying DOM.\n // * We want custom elements to upgrade even in disconnected fragments.\n //\n // Given these constraints, with full custom elements support we would\n // prefer the order: Clone, Process, Adopt, Upgrade, Update, Connect\n //\n // But Safari does not implement CustomElementRegistry#upgrade, so we\n // can not implement that order and still have upgrade-before-update and\n // upgrade disconnected fragments. So we instead sacrifice the\n // process-before-upgrade constraint, since in Custom Elements v1 elements\n // must not modify their light DOM in the constructor. We still have issues\n // when co-existing with CEv0 elements like Polymer 1, and with polyfills\n // that don't strictly adhere to the no-modification rule because shadow\n // DOM, which may be created in the constructor, is emulated by being placed\n // in the light DOM.\n //\n // The resulting order is on native is: Clone, Adopt, Upgrade, Process,\n // Update, Connect. document.importNode() performs Clone, Adopt, and Upgrade\n // in one step.\n //\n // The Custom Elements v1 polyfill supports upgrade(), so the order when\n // polyfilled is the more ideal: Clone, Process, Adopt, Upgrade, Update,\n // Connect.\n const fragment = isCEPolyfill ?\n this.template.element.content.cloneNode(true) :\n document.importNode(this.template.element.content, true);\n const stack = [];\n const parts = this.template.parts;\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(fragment, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n let partIndex = 0;\n let nodeIndex = 0;\n let part;\n let node = walker.nextNode();\n // Loop through all the nodes and parts of a template\n while (partIndex < parts.length) {\n part = parts[partIndex];\n if (!isTemplatePartActive(part)) {\n this.__parts.push(undefined);\n partIndex++;\n continue;\n }\n // Progress the tree walker until we find our next part's node.\n // Note that multiple parts may share the same node (attribute parts\n // on a single element), so this loop may not run at all.\n while (nodeIndex < part.index) {\n nodeIndex++;\n if (node.nodeName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = node.content;\n }\n if ((node = walker.nextNode()) === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop();\n node = walker.nextNode();\n }\n }\n // We've arrived at our part's node.\n if (part.type === 'node') {\n const part = this.processor.handleTextExpression(this.options);\n part.insertAfterNode(node.previousSibling);\n this.__parts.push(part);\n }\n else {\n this.__parts.push(...this.processor.handleAttributeExpressions(node, part.name, part.strings, this.options));\n }\n partIndex++;\n }\n if (isCEPolyfill) {\n document.adoptNode(fragment);\n customElements.upgrade(fragment);\n }\n return fragment;\n }\n}\n//# sourceMappingURL=template-instance.js.map","/**\n * @module ol/colorlike\n */\nimport { toString } from './color.js';\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, pattern, or gradient. The origin for patterns and\n * gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n/**\n * @param {import(\"./color.js\").Color|ColorLike} color Color.\n * @return {ColorLike} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n if (Array.isArray(color)) {\n return toString(color);\n }\n else {\n return color;\n }\n}\n//# sourceMappingURL=colorlike.js.map","define([\"./_base/kernel\", \"./_base/lang\"], function(dojo, lang){\n\n// module:\n//\t\tdojo/regexp\n\nvar regexp = {\n\t// summary:\n\t//\t\tRegular expressions and Builder resources\n};\nlang.setObject(\"dojo.regexp\", regexp);\n\nregexp.escapeString = function(/*String*/str, /*String?*/except){\n\t// summary:\n\t//\t\tAdds escape sequences for special characters in regular expressions\n\t// except:\n\t//\t\ta String with special characters to be left unescaped\n\n\treturn str.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+\\-^])/g, function(ch){\n\t\tif(except && except.indexOf(ch) != -1){\n\t\t\treturn ch;\n\t\t}\n\t\treturn \"\\\\\" + ch;\n\t}); // String\n};\n\nregexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){\n\t// summary:\n\t//\t\tBuilds a regular expression that groups subexpressions\n\t// description:\n\t//\t\tA utility function used by some of the RE generators. The\n\t//\t\tsubexpressions are constructed by the function, re, in the second\n\t//\t\tparameter. re builds one subexpression for each elem in the array\n\t//\t\ta, in the first parameter. Returns a string for a regular\n\t//\t\texpression that groups all the subexpressions.\n\t// arr:\n\t//\t\tA single value or an array of values.\n\t// re:\n\t//\t\tA function. Takes one parameter and converts it to a regular\n\t//\t\texpression.\n\t// nonCapture:\n\t//\t\tIf true, uses non-capturing match, otherwise matches are retained\n\t//\t\tby regular expression. Defaults to false\n\n\t// case 1: a is a single value.\n\tif(!(arr instanceof Array)){\n\t\treturn re(arr); // String\n\t}\n\n\t// case 2: a is an array\n\tvar b = [];\n\tfor(var i = 0; i < arr.length; i++){\n\t\t// convert each elem to a RE\n\t\tb.push(re(arr[i]));\n\t}\n\n\t // join the REs as alternatives in a RE group.\n\treturn regexp.group(b.join(\"|\"), nonCapture); // String\n};\n\nregexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){\n\t// summary:\n\t//\t\tadds group match to expression\n\t// nonCapture:\n\t//\t\tIf true, uses non-capturing match, otherwise matches are retained\n\t//\t\tby regular expression.\n\treturn \"(\" + (nonCapture ? \"?:\":\"\") + expression + \")\"; // String\n};\n\nreturn regexp;\n});\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex, Collection, isBlazor } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Tooltip, getZindexPartial } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the color track data in slider.\n * {% codeBlock src='slider/colorrange/index.md' %}{% endcodeBlock %}\n */\nvar ColorRangeData = /** @class */ (function (_super) {\n __extends(ColorRangeData, _super);\n function ColorRangeData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"end\", void 0);\n return ColorRangeData;\n}(ChildProperty));\nexport { ColorRangeData };\n/**\n * It illustrates the limit data in slider.\n * {% codeBlock src='slider/limits/index.md' %}{% endcodeBlock %}\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar bootstrap4TooltipOffset = 3;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHorizantalColor: 'e-slider-horizantal-color',\n sliderVerticalColor: 'e-slider-vertical-color',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n * <div id='slider'></div>\n * ```\n * ```typescript\n * <script>\n * var sliderObj = new Slider({ value: 10 });\n * sliderObj.appendTo('#slider');\n * </script>\n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n _this.initialTooltip = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.formChecker();\n };\n Slider.prototype.formChecker = function () {\n var formElement = closest(this.element, 'form');\n if (formElement) {\n this.isForm = true;\n // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n if (!isNullOrUndefined(this.formResetValue)) {\n this.setProperties({ 'value': this.formResetValue }, true);\n }\n this.formResetValue = this.value;\n if (this.type === 'Range' &&\n (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n else if (isNullOrUndefined(this.formResetValue)) {\n this.formResetValue = parseFloat(formatUnit(this.min));\n }\n this.formElement = formElement;\n }\n else {\n this.isForm = false;\n }\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n ;\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n ;\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n ;\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Slider.prototype.render = function () {\n if (!isBlazor() || !this.isServerRendered) {\n this.initialize();\n }\n this.initRender();\n this.wireEvents();\n this.setZindex();\n this.renderComplete();\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.sliderContainer.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.sliderContainer.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.add(classNames.sliderDisabled);\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.remove(classNames.sliderDisabled);\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n * @private\n */\n Slider.prototype.initRender = function () {\n if (isBlazor() && this.isServerRendered) {\n this.sliderContainer = this.element.parentElement;\n this.sliderTrack = this.element.querySelector('.e-slider-track');\n this.hiddenInput = this.element.parentElement.querySelector('.e-slider-input');\n }\n else {\n this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n }\n this.setElementWidth(this.width);\n this.element.tabIndex = -1;\n this.getThemeInitialization();\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n if (!isBlazor() || !this.isServerRendered) {\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n }\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!isBlazor() || !this.isServerRendered) {\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n }\n };\n Slider.prototype.getThemeInitialization = function () {\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material'\n || this.getTheme(this.sliderContainer) === 'material-dark';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap'\n || this.getTheme(this.sliderContainer) === 'bootstrap-dark';\n this.isBootstrap4 = this.getTheme(this.sliderContainer) === 'bootstrap4';\n this.isMaterialTooltip = this.isMaterial && this.type !== 'Range' && this.tooltip.isVisible;\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n if (isBlazor() && this.isServerRendered) {\n this.limitBarFirst = this.element.querySelectorAll('.e-limits')[0];\n if (this.type === 'Range') {\n this.limitBarSecond = this.element.querySelectorAll('.e-limit-second')[0];\n }\n }\n else {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n if (isBlazor() && this.isServerRendered) {\n this.secondHandle = this.element.querySelector('.e-handle-second');\n }\n else {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n }\n };\n Slider.prototype.createFirstHandle = function () {\n if (isBlazor() && this.isServerRendered) {\n this.firstHandle = this.element.querySelector('.e-handle-first');\n }\n else {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n }\n if (this.isMaterialTooltip) {\n this.materialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.materialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n if (this.type !== 'Range') {\n this.firstHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.isMaterialTooltip) {\n this.materialHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.tooltipElement) {\n this.tooltipElement.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n if (e.propertyName !== 'transform') {\n this.handleStart();\n this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.isMaterial && this.tooltip.isVisible && this.type === 'Default') {\n this.tooltipElement.style.transition = this.transition.handle;\n }\n this.tooltipToggle(this.getHandle());\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n this.focusSliderElement();\n this.sliderBarClick(e);\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n }\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipToggle(e.currentTarget);\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeTooltip();\n }\n };\n Slider.prototype.setHandler = function () {\n if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n if (!isBlazor() || !this.isServerRendered) {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n }\n this.setBarColor();\n };\n Slider.prototype.tooltipValue = function () {\n var _this = this;\n var text;\n var args = {\n value: this.value,\n text: ''\n };\n if (this.initialTooltip) {\n this.initialTooltip = false;\n if (isBlazor() && this.isServerRendered) {\n args.text = this.formatContent(this.tooltipFormatInfo, false);\n }\n else {\n this.setTooltipContent();\n args.text = text = this.tooltipObj.content;\n }\n this.trigger('tooltipChange', args, function (observedArgs) {\n _this.addTooltipClass(observedArgs.text);\n if (text !== observedArgs.text) {\n _this.customAriaText = observedArgs.text;\n _this.tooltipObj.content = observedArgs.text;\n _this.setAriaAttrValue(_this.firstHandle);\n if (_this.type === 'Range') {\n _this.setAriaAttrValue(_this.secondHandle);\n }\n }\n });\n if (this.isMaterialTooltip) {\n this.setPreviousVal('change', this.value);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.tooltipObj.content = content;\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n if (this.isMaterialTooltip) {\n var count = content.toString().length;\n if (!this.tooltipElement) {\n var cssClass = count > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n this.tooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n var cssClass = count > 4 ?\n { oldCss: classNames.sliderMaterialDefault, newCss: classNames.sliderMaterialRange } :\n { oldCss: classNames.sliderMaterialRange, newCss: classNames.sliderMaterialDefault };\n this.tooltipElement.classList.remove(cssClass.oldCss);\n if (!this.tooltipElement.classList.contains(cssClass.newCss)) {\n this.tooltipElement.classList.add(cssClass.newCss);\n this.tooltipElement.style.transform = count > 4 ? 'scale(1)' :\n this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n return this.orientation === 'Horizontal' ? (this.tooltip.placement === 'Before' ? 'TopCenter' : 'BottomCenter') :\n (this.tooltip.placement === 'Before' ? 'LeftCenter' : 'RightCenter');\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n this.tooltipElement = args.element;\n if (this.tooltip.cssClass) {\n addClass([this.tooltipElement], this.tooltip.cssClass.split(' ').filter(function (css) { return css; }));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterialTooltip) {\n this.tooltipElement.firstElementChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n this.setTooltipTransform();\n }\n };\n Slider.prototype.tooltipCollision = function (position) {\n if (this.isBootstrap || this.isBootstrap4 || (this.isMaterial && !this.isMaterialTooltip)) {\n var tooltipOffsetValue = this.isBootstrap4 ? bootstrap4TooltipOffset : bootstrapTooltipOffset;\n switch (position) {\n case 'TopCenter':\n this.tooltipObj.setProperties({ 'offsetY': -(tooltipOffsetValue) }, false);\n break;\n case 'BottomCenter':\n this.tooltipObj.setProperties({ 'offsetY': tooltipOffsetValue }, false);\n break;\n case 'LeftCenter':\n this.tooltipObj.setProperties({ 'offsetX': -(tooltipOffsetValue) }, false);\n break;\n case 'RightCenter':\n this.tooltipObj.setProperties({ 'offsetX': tooltipOffsetValue }, false);\n break;\n }\n }\n };\n Slider.prototype.materialTooltipEventCallBack = function (event) {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterialTooltip) {\n if (!destroy) {\n EventHandler.add(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack, this);\n }\n else {\n EventHandler.remove(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack);\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n var transformProperties;\n if (this.tooltipElement) {\n var position = this.orientation === 'Horizontal' ?\n ((this.tooltipElement.clientHeight + 14) - (this.tooltipElement.clientHeight / 2)) :\n ((this.tooltipElement.clientWidth + 14) - (this.tooltipElement.clientWidth / 2));\n transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n }\n return transformProperties;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n this.refreshTooltip(this.firstHandle);\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n tooltipContentElement.classList.remove(classNames.materialTooltipHide);\n tooltipContentElement.classList.add(classNames.materialTooltipShow);\n this.firstHandle.style.cursor = 'default';\n this.tooltipElement.style.transition = this.scaleTransform;\n this.tooltipElement.classList.add(classNames.materialTooltipOpen);\n this.materialHandle.style.transform = 'scale(0)';\n if (tooltipContentElement.innerText.length > 4) {\n this.tooltipElement.style.transform = 'scale(1)';\n }\n else {\n this.tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { _this.tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n }\n };\n Slider.prototype.closeMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n this.tooltipElement.style.transition = this.scaleTransform;\n tooltipContentElement.classList.remove(classNames.materialTooltipShow);\n tooltipContentElement.classList.add(classNames.materialTooltipHide);\n this.firstHandle.style.cursor = '-webkit-grab';\n this.firstHandle.style.cursor = 'grab';\n if (this.materialHandle) {\n this.materialHandle.style.transform = 'scale(1)';\n }\n this.tooltipElement.classList.remove(classNames.materialTooltipOpen);\n this.setTooltipTransform();\n this.tooltipTarget = undefined;\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n if (this.tooltipCollidedPosition === undefined ||\n this.tooltipCollidedPosition !== args.collidedPosition || !args.element.classList.contains(tooltipClass)) {\n if (this.isMaterialTooltip) {\n if (tooltipClass !== undefined) {\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n }\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length <= 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n this.tooltipCollidedPosition = args.collidedPosition;\n }\n if (this.isMaterialTooltip && this.tooltipElement && this.tooltipElement.style.transform.indexOf('translate') !== -1) {\n this.setTooltipTransform();\n }\n };\n Slider.prototype.setTooltipTransform = function () {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n if (this.tooltipElement.firstElementChild.innerText.length > 4) {\n this.tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n this.tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n };\n Slider.prototype.renderTooltip = function () {\n this.tooltipObj = new Tooltip({\n showTipPointer: this.isBootstrap || this.isMaterial || this.isBootstrap4,\n cssClass: classNames.sliderTooltip,\n height: this.isMaterial ? 30 : 'auto',\n animation: { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n beforeClose: this.tooltipBeforeClose.bind(this),\n enableHtmlSanitizer: this.enableHtmlSanitizer\n });\n this.tooltipObj.appendTo(this.firstHandle);\n this.initializeTooltipProps();\n };\n Slider.prototype.initializeTooltipProps = function () {\n var tooltipShowOn = this.isMaterialTooltip ? 'Always' : (this.tooltip.showOn === 'Auto' ? 'Hover' : this.tooltip.showOn);\n this.setProperties({ tooltip: { showOn: tooltipShowOn } }, true);\n this.tooltipObj.position = this.tooltipPlacement();\n this.tooltipCollision(this.tooltipObj.position);\n [this.firstHandle, this.rangeBar, this.secondHandle].forEach(function (handle) {\n if (!isNullOrUndefined(handle)) {\n handle.style.transition = 'none';\n }\n });\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n if (!isBlazor()) {\n this.tooltipValue();\n }\n this.tooltipObj.animation.close.effect = 'None';\n this.tooltipObj.open(this.firstHandle);\n }\n };\n Slider.prototype.tooltipBeforeClose = function () {\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n };\n Slider.prototype.setButtons = function () {\n if (isBlazor() && this.isServerRendered) {\n this.firstBtn = this.element.parentElement.querySelector('.e-slider-button.e-first-button');\n this.secondBtn = this.element.parentElement.querySelector('.e-slider-button.e-second-button');\n }\n else {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n }\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed', e);\n this.closeTooltip();\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n // tslint:disable-next-line:max-func-body-length\n Slider.prototype.renderScale = function () {\n var liElementPosition = 0;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n if (isBlazor() && this.isServerRendered) {\n this.ul = this.element.querySelector('ul');\n }\n else {\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n }\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n if (!isBlazor() || !this.isServerRendered) {\n this.element.appendChild(this.ul);\n }\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n if (orien === 'h') {\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(startValue - parseFloat(max.toString())) % largestep === 0) ? true : false;\n }\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start, tickWidth);\n }\n if (isBlazor() && this.isServerRendered && isNullOrUndefined(this.customValues)) {\n this.updateTicksValues(start, this.ul.children[liElementPosition]);\n liElementPosition++;\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n if (isBlazor() && this.isServerRendered && isNullOrUndefined(this.customValues)) {\n this.updateTicksValues(start, this.ul.children[liElementPosition]);\n liElementPosition++;\n }\n }\n if (!isBlazor() || !this.isServerRendered) {\n this.ul.appendChild(li);\n }\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.ticksAlignment(orien, tickWidth);\n };\n Slider.prototype.updateTicksValues = function (start, liElement) {\n if (liElement.childElementCount > 0) {\n for (var i = 0; i < liElement.childElementCount; i++) {\n this.blazortTicksValue(liElement, start, liElement.children[i]);\n }\n }\n else {\n this.blazortTicksValue(liElement, start, null);\n }\n };\n Slider.prototype.blazortTicksValue = function (li, start, span) {\n var _this = this;\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n li.setAttribute('title', observedArgs.text.toString());\n if (span) {\n if (_this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n span.innerHTML = observedArgs.text.toString();\n }\n }\n });\n };\n Slider.prototype.ticksAlignment = function (orien, tickWidth, triggerEvent) {\n if (triggerEvent === void 0) { triggerEvent = true; }\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n if (triggerEvent) {\n this.trigger('renderedTicks', eventArgs);\n }\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start, tickWidth) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start, span, tickWidth);\n }\n else {\n if (this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(start.toString());\n }\n else {\n span.innerHTML = start.toString();\n }\n }\n };\n Slider.prototype.formatTicksValue = function (li, start, spanElement, tickWidth) {\n var _this = this;\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n li.setAttribute('title', observedArgs.text.toString());\n if (spanElement) {\n if (_this.enableHtmlSanitizer) {\n spanElement.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n spanElement.innerHTML = observedArgs.text.toString();\n }\n }\n if (!isNullOrUndefined(_this.renderingTicks) && isBlazor()) {\n var orien = _this.orientation === 'Horizontal' ? 'h' : 'v';\n _this.ticksAlignment(orien, tickWidth, false);\n }\n });\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n this.firstChild = this.element.querySelector('ul').children[0];\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var otherChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n if (!isBlazor() || !this.isServerRendered) {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n if (!isBlazor() || !this.isServerRendered) {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n if (!isBlazor()) {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n if (!isBlazor()) {\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n if (!isBlazor()) {\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n }\n if (!isBlazor() || !this.isServerRendered) {\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n }\n if (isBlazor() && this.isServerRendered) {\n var args = void 0;\n if (this.firstChild != null) {\n if (this.orientation === 'Horizontal') {\n args = { firstTickPostion: this.firstChild.children[0].style.left };\n }\n else {\n args = { firstTickPostion: -(firstChild.height / 2) + 'px' };\n }\n }\n if (other[0] != null) {\n if (this.orientation === 'Horizontal') {\n args = { otherTicksPosition: other[0].style.left };\n }\n else {\n args = { otherTicksPosition: (tickWidth - otherChild.height) / 2 + 'px' };\n }\n }\n if (this.firstChild != null && other[0] != null) {\n if (this.orientation === 'Horizontal') {\n args = {\n firstTickPostion: this.firstChild.children[0].style.left,\n otherTicksPosition: other[0].style.left\n };\n }\n else {\n args = {\n firstTickPostion: -(firstChild.height / 2) + 'px',\n otherTicksPosition: (tickWidth - otherChild.height) / 2 + 'px'\n };\n }\n }\n // tslint:disable\n this.interopAdaptor.invokeMethodAsync('SliderTicksData', args);\n // tslint:enable\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipToggle = function (target) {\n if (this.isMaterialTooltip) {\n !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n }\n else {\n !this.tooltipElement ? this.openTooltip(target) : this.refreshTooltip(target);\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal') {\n if (this.type === 'MinRange') {\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n this.setBarColor();\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition(null);\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed', null);\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n else if (this.isMaterialTooltip && this.tooltipElement) {\n this.tooltipElement.style.zIndex = getZindexPartial(this.element) + '';\n }\n };\n Slider.prototype.setHandlePosition = function (event) {\n var _this = this;\n var handle;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n if (this.isMaterialTooltip) {\n handle = [this.firstHandle, this.materialHandle];\n }\n else {\n handle = [this.getHandle()];\n }\n this.handleStart();\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n if (isBlazor() && _this.isServerRendered) {\n handle.style.removeProperty('visibility');\n }\n });\n this.changeEvent('change', event);\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition(null);\n this.activeHandle = 2;\n this.setHandlePosition(null);\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName, e) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value && (!this.isMaterialTooltip || !this.initialTooltip)) {\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.initialTooltip = false;\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName, e) {\n var eventArgs;\n if (this.tooltip.isVisible && this.tooltipObj && this.initialTooltip) {\n if (!isBlazor() || !this.isServerRendered) {\n this.tooltipValue();\n }\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.tooltipObj.content, isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString)),\n isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min > this.max) {\n this.min = this.max;\n }\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n /**\n * It is used to reposition slider.\n * @returns void\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n this.enableRtl ? this.materialHandle.style.right =\n this.handlePos1 + \"px\" : this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n this.materialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n if (!isBlazor()) {\n this.removeElement(this.ul);\n this.ul = undefined;\n }\n this.renderScale();\n if (isBlazor()) {\n this.tickValuePosition();\n }\n }\n this.handleStart();\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n if (!isBlazor() || !this.isServerRendered) {\n this.refreshTooltip(this.tooltipTarget);\n }\n this.setBarColor();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition(null);\n }\n };\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.sliderBarUp(evt);\n this.tooltipToggle(this.getHandle());\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition(evt);\n if (this.isMaterialTooltip) {\n this.initialTooltip = false;\n }\n this.changeEvent('changed', evt);\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n var _a, _b;\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n this.rangeBarDragged = true;\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === this.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, this.min, 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition(event);\n this.activeHandle = 2;\n this.setHandlePosition(event);\n this.tooltipToggle(this.rangeBar);\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function (event) {\n this.changeEvent('changed', event);\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.initialTooltip = false;\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n this.closeTooltip();\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition(evt);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n if (!this.rangeBarDragged) {\n this.focusSliderElement();\n this.sliderBarClick(event);\n }\n this.changeEvent('changed', event);\n this.closeTooltip();\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n this.rangeBarDragged = false;\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj) {\n this.tooltipValue();\n if (target) {\n this.tooltipObj.refresh(target);\n this.tooltipTarget = target;\n }\n }\n };\n Slider.prototype.openTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.open(target);\n this.tooltipTarget = target;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible && this.tooltipObj && this.tooltip.showOn !== 'Always' && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.close();\n this.tooltipTarget = undefined;\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.rangeBarMousedown = function (event) {\n var _a, _b;\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.tooltipToggle(this.rangeBar);\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n };\n Slider.prototype.elementClick = function (event) {\n event.preventDefault();\n this.focusSliderElement();\n this.sliderBarClick(event);\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.reposition.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'click', this.elementClick, this);\n if (this.type === 'Range' && this.drag) {\n EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n }\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.elementClick);\n if (this.type === 'Range' && this.drag) {\n EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n }\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n EventHandler.remove(this.element, 'reset', this.formResetHandler);\n };\n Slider.prototype.formResetHandler = function () {\n this.setProperties({ 'value': this.formResetValue }, true);\n this.setValue();\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.getHandle().focus();\n this.tooltipToggle(this.getHandle());\n }\n }\n this.closeTooltip();\n this.changeEvent('changed', event);\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n this.closeMaterialTooltip();\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type, args) {\n if (this.isMaterialTooltip && this.materialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.materialHandle);\n this.materialHandle = undefined;\n }\n this.removeElement(this.firstHandle);\n this.firstHandle = undefined;\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n this.secondHandle = undefined;\n }\n this.removeElement(this.rangeBar);\n this.rangeBar = undefined;\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.tooltipObj)) {\n this.tooltipObj.destroy();\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n }\n if (this.limits.enabled) {\n if (type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n this.limitBarFirst = undefined;\n }\n }\n else {\n if (!isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarSecond);\n this.limitBarSecond = undefined;\n }\n }\n }\n this.activeHandle = 1;\n this.getThemeInitialization();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.setBarColor();\n if ((!isBlazor() && !this.isServerRendered) || args !== 'tooltip') {\n this.updateConfig();\n }\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.tooltipObj.refresh(this.firstHandle);\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type, 'null');\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n if (!isBlazor()) {\n this.refreshTooltip(this.tooltipTarget);\n }\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n if (!isBlazor() && !this.isServerRendered) {\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n }\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n if (isBlazor() && this.isMaterialTooltip && !isNullOrUndefined(this.materialHandle)) {\n this.materialHandle.remove();\n }\n if (!isBlazor() && !this.isServerRendered) {\n this.element.innerHTML = '';\n }\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n // tslint:disable-next-line\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (newProp && oldProp) {\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (!isNullOrUndefined(oldProp.value) && oldProp.value.toString() !== value.toString()) {\n this.setValue();\n if (!isBlazor() || !this.isServerRendered) {\n this.refreshTooltip(this.tooltipTarget);\n }\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n this.setMinMaxValue();\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'tooltip':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip(prop);\n }\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'type':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n && !isNullOrUndefined(oldProp.type)) {\n this.changeSliderType(oldProp.type, prop);\n this.setZindex();\n }\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'enableRtl':\n if (isBlazor() && this.isServerRendered) {\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n this.isServerRendered = false;\n }\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n this.changeOrientation();\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (!isBlazor() || !this.isServerRendered) {\n detach(this.ul);\n }\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.reposition();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (!isBlazor() || !this.isServerRendered) {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.sliderContainer.classList.remove(classNames.sliderButtonClass);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n this.reposition();\n }\n }\n }\n if (isBlazor() && this.isServerRendered) {\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n if (isBlazor() && this.isServerRendered) {\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n }\n break;\n case 'readonly':\n this.setReadOnly();\n if (isBlazor() && this.isServerRendered) {\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n }\n break;\n case 'customValues':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n this.setValue();\n this.reposition();\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'colorRange':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n this.reposition();\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'width':\n this.setElementWidth(newProp.width);\n this.setMinMaxValue();\n if (this.limits) {\n this.limitsPropertyChange();\n }\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n if (!isBlazor()) {\n this.refreshTooltip(this.tooltipTarget);\n }\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function (args) {\n this.changeSliderType(this.type, args);\n };\n Slider.prototype.setBarColor = function () {\n var trackPosition;\n var trackClassName;\n var child = this.sliderTrack.lastElementChild;\n while (child) {\n this.sliderTrack.removeChild(child);\n child = this.sliderTrack.lastElementChild;\n }\n for (var i = 0; i < this.colorRange.length; i++) {\n if (!isNullOrUndefined(this.colorRange[i].start) && !isNullOrUndefined(this.colorRange[i].end)) {\n if (this.colorRange[i].end > this.colorRange[i].start) {\n if (this.colorRange[i].start < this.min) {\n this.colorRange[i].start = this.min;\n }\n if (this.colorRange[i].end > this.max) {\n this.colorRange[i].end = this.max;\n }\n var startingPosition = this.checkHandlePosition(this.colorRange[i].start);\n var endPosition = this.checkHandlePosition(this.colorRange[i].end);\n var trackContainer = this.createElement('div');\n trackContainer.style.backgroundColor = this.colorRange[i].color;\n trackContainer.style.border = '1px solid ' + this.colorRange[i].color;\n if (this.orientation === 'Horizontal') {\n trackClassName = classNames.sliderHorizantalColor;\n if (this.enableRtl) {\n if (isNullOrUndefined(this.customValues)) {\n trackPosition = this.checkHandlePosition(this.max) - this.checkHandlePosition(this.colorRange[i].end);\n }\n else {\n trackPosition = this.checkHandlePosition(this.customValues.length - this.colorRange[i].end - 1);\n }\n }\n else {\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n }\n trackContainer.style.width = endPosition - startingPosition + 'px';\n trackContainer.style.left = trackPosition + 'px';\n }\n else {\n trackClassName = classNames.sliderVerticalColor;\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n trackContainer.style.height = endPosition - startingPosition + 'px';\n trackContainer.style.bottom = trackPosition + 'px';\n }\n trackContainer.classList.add(trackClassName);\n this.sliderTrack.appendChild(trackContainer);\n }\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Collection([{}], ColorRangeData)\n ], Slider.prototype, \"colorRange\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","import { detach, getUniqueID, rippleEffect, setValue, attributes } from '@syncfusion/ej2-base';\nimport { getValue, addClass, deleteObject } from '@syncfusion/ej2-base';\n/**\n * Initialize wrapper element for angular.\n * @private\n */\nexport function wrapperInitialize(createElement, tag, type, element, WRAPPER, role) {\n var input = element;\n if (element.tagName === tag) {\n var ejInstance = getValue('ej2_instances', element);\n input = createElement('input', { attrs: { 'type': type } });\n var props = ['change', 'cssClass', 'label', 'labelPosition', 'id'];\n for (var index = 0, len = element.attributes.length; index < len; index++) {\n if (props.indexOf(element.attributes[index].nodeName) === -1) {\n input.setAttribute(element.attributes[index].nodeName, element.attributes[index].nodeValue);\n }\n }\n attributes(element, { 'class': WRAPPER, 'role': role, 'aria-checked': 'false' });\n element.appendChild(input);\n setValue('ej2_instances', ejInstance, input);\n deleteObject(element, 'ej2_instances');\n }\n return input;\n}\nexport function getTextNode(element) {\n var node;\n var childnode = element.childNodes;\n for (var i = 0; i < childnode.length; i++) {\n node = childnode[i];\n if (node.nodeType === 3) {\n return node;\n }\n }\n return null;\n}\n/**\n * Destroy the button components.\n * @private\n */\nexport function destroy(ejInst, wrapper, tagName) {\n if (tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(ejInst.element, wrapper);\n detach(wrapper);\n ejInst.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n ejInst.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n }\n}\nexport function preRender(proxy, control, wrapper, element, moduleName) {\n element = wrapperInitialize(proxy.createElement, control, 'checkbox', element, wrapper, moduleName);\n proxy.element = element;\n if (proxy.element.getAttribute('type') !== 'checkbox') {\n proxy.element.setAttribute('type', 'checkbox');\n }\n if (!proxy.element.id) {\n proxy.element.id = getUniqueID('e-' + moduleName);\n }\n}\n/**\n * Creates CheckBox component UI with theming and ripple support.\n * @private\n */\nexport function createCheckBox(createElement, enableRipple, options) {\n if (enableRipple === void 0) { enableRipple = false; }\n if (options === void 0) { options = {}; }\n var wrapper = createElement('div', { className: 'e-checkbox-wrapper e-css' });\n if (options.cssClass) {\n addClass([wrapper], options.cssClass.split(' '));\n }\n if (options.enableRtl) {\n wrapper.classList.add('e-rtl');\n }\n if (enableRipple) {\n var rippleSpan = createElement('span', { className: 'e-ripple-container' });\n rippleEffect(rippleSpan, { isCenterRipple: true, duration: 400 });\n wrapper.appendChild(rippleSpan);\n }\n var frameSpan = createElement('span', { className: 'e-frame e-icons' });\n if (options.checked) {\n frameSpan.classList.add('e-check');\n }\n wrapper.appendChild(frameSpan);\n if (options.label) {\n var labelSpan = createElement('span', { className: 'e-label', innerHTML: options.label });\n wrapper.appendChild(labelSpan);\n }\n return wrapper;\n}\nexport function rippleMouseHandler(e, rippleSpan) {\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(e.type, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n}\n/**\n * Append hidden input to given element\n * @private\n */\nexport function setHiddenInput(proxy, wrap) {\n if (proxy.element.getAttribute('ejs-for')) {\n wrap.appendChild(proxy.createElement('input', {\n attrs: { 'name': proxy.name || proxy.element.name, 'value': 'false', 'type': 'hidden' }\n }));\n }\n}\n","/**\n * @module ol/Disposable\n */\n/**\n * @classdesc\n * Objects that need to clean up after themselves.\n */\nvar Disposable = /** @class */ (function () {\n function Disposable() {\n /**\n * The object has already been disposed.\n * @type {boolean}\n * @protected\n */\n this.disposed = false;\n }\n /**\n * Clean up.\n */\n Disposable.prototype.dispose = function () {\n if (!this.disposed) {\n this.disposed = true;\n this.disposeInternal();\n }\n };\n /**\n * Extension point for disposable objects.\n * @protected\n */\n Disposable.prototype.disposeInternal = function () { };\n return Disposable;\n}());\nexport default Disposable;\n//# sourceMappingURL=Disposable.js.map","/**\n * @module ol/rotationconstraint\n */\nimport { toRadians } from './math.js';\n/**\n * @typedef {function((number|undefined), boolean=): (number|undefined)} Type\n */\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function disable(rotation) {\n if (rotation !== undefined) {\n return 0;\n }\n else {\n return undefined;\n }\n}\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function none(rotation) {\n if (rotation !== undefined) {\n return rotation;\n }\n else {\n return undefined;\n }\n}\n/**\n * @param {number} n N.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToN(n) {\n var theta = (2 * Math.PI) / n;\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, opt_isMoving) {\n if (opt_isMoving) {\n return rotation;\n }\n if (rotation !== undefined) {\n rotation = Math.floor(rotation / theta + 0.5) * theta;\n return rotation;\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {number=} opt_tolerance Tolerance.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToZero(opt_tolerance) {\n var tolerance = opt_tolerance || toRadians(5);\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, opt_isMoving) {\n if (opt_isMoving) {\n return rotation;\n }\n if (rotation !== undefined) {\n if (Math.abs(rotation) <= tolerance) {\n return 0;\n }\n else {\n return rotation;\n }\n }\n else {\n return undefined;\n }\n });\n}\n//# sourceMappingURL=rotationconstraint.js.map","/**\n * @module ol/geom/flat/area\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRing(flatCoordinates, offset, end, stride) {\n var twiceArea = 0;\n var x1 = flatCoordinates[end - stride];\n var y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n var x2 = flatCoordinates[offset];\n var y2 = flatCoordinates[offset + 1];\n twiceArea += y1 * x2 - x1 * y2;\n x1 = x2;\n y1 = y2;\n }\n return twiceArea / 2;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRings(flatCoordinates, offset, ends, stride) {\n var area = 0;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n area += linearRing(flatCoordinates, offset, end, stride);\n offset = end;\n }\n return area;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n var area = 0;\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n area += linearRings(flatCoordinates, offset, ends, stride);\n offset = ends[ends.length - 1];\n }\n return area;\n}\n//# sourceMappingURL=area.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/geom/Geometry\n */\nimport BaseObject from '../Object.js';\nimport Units from '../proj/Units.js';\nimport { abstract } from '../util.js';\nimport { compose as composeTransform, create as createTransform, } from '../transform.js';\nimport { createEmpty, createOrUpdateEmpty, getHeight, returnOrUpdate, } from '../extent.js';\nimport { get as getProjection, getTransform } from '../proj.js';\nimport { memoizeOne } from '../functions.js';\nimport { transform2D } from './flat/transform.js';\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nvar tmpTransform = createTransform();\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @abstract\n * @api\n */\nvar Geometry = /** @class */ (function (_super) {\n __extends(Geometry, _super);\n function Geometry() {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n _this.extent_ = createEmpty();\n /**\n * @private\n * @type {number}\n */\n _this.extentRevision_ = -1;\n /**\n * @protected\n * @type {number}\n */\n _this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n /**\n * @protected\n * @type {number}\n */\n _this.simplifiedGeometryRevision = 0;\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} revision The geometry revision.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n _this.simplifyTransformedInternal = memoizeOne(function (revision, squaredTolerance, opt_transform) {\n if (!opt_transform) {\n return this.getSimplifiedGeometry(squaredTolerance);\n }\n var clone = this.clone();\n clone.applyTransform(opt_transform);\n return clone.getSimplifiedGeometry(squaredTolerance);\n });\n return _this;\n }\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n Geometry.prototype.simplifyTransformed = function (squaredTolerance, opt_transform) {\n return this.simplifyTransformedInternal(this.getRevision(), squaredTolerance, opt_transform);\n };\n /**\n * Make a complete copy of the geometry.\n * @abstract\n * @return {!Geometry} Clone.\n */\n Geometry.prototype.clone = function () {\n return abstract();\n };\n /**\n * @abstract\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n Geometry.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n return abstract();\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n Geometry.prototype.containsXY = function (x, y) {\n var coord = this.getClosestPoint([x, y]);\n return coord[0] === x && coord[1] === y;\n };\n /**\n * Return the closest point of the geometry to the passed point as\n * {@link module:ol/coordinate~Coordinate coordinate}.\n * @param {import(\"../coordinate.js\").Coordinate} point Point.\n * @param {import(\"../coordinate.js\").Coordinate=} opt_closestPoint Closest point.\n * @return {import(\"../coordinate.js\").Coordinate} Closest point.\n * @api\n */\n Geometry.prototype.getClosestPoint = function (point, opt_closestPoint) {\n var closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN];\n this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n return closestPoint;\n };\n /**\n * Returns true if this geometry includes the specified coordinate. If the\n * coordinate is on the boundary of the geometry, returns false.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains coordinate.\n * @api\n */\n Geometry.prototype.intersectsCoordinate = function (coordinate) {\n return this.containsXY(coordinate[0], coordinate[1]);\n };\n /**\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n Geometry.prototype.computeExtent = function (extent) {\n return abstract();\n };\n /**\n * Get the extent of the geometry.\n * @param {import(\"../extent.js\").Extent=} opt_extent Extent.\n * @return {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n Geometry.prototype.getExtent = function (opt_extent) {\n if (this.extentRevision_ != this.getRevision()) {\n var extent = this.computeExtent(this.extent_);\n if (isNaN(extent[0]) || isNaN(extent[1])) {\n createOrUpdateEmpty(extent);\n }\n this.extentRevision_ = this.getRevision();\n }\n return returnOrUpdate(this.extent_, opt_extent);\n };\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} angle Rotation angle in radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n Geometry.prototype.rotate = function (angle, anchor) {\n abstract();\n };\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number=} opt_sy The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate=} opt_anchor The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n Geometry.prototype.scale = function (sx, opt_sy, opt_anchor) {\n abstract();\n };\n /**\n * Create a simplified version of this geometry. For linestrings, this uses\n * the [Douglas Peucker](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm)\n * algorithm. For polygons, a quantization-based\n * simplification is used to preserve topology.\n * @param {number} tolerance The tolerance distance for simplification.\n * @return {Geometry} A new, simplified version of the original geometry.\n * @api\n */\n Geometry.prototype.simplify = function (tolerance) {\n return this.getSimplifiedGeometry(tolerance * tolerance);\n };\n /**\n * Create a simplified version of this geometry using the Douglas Peucker\n * algorithm.\n * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Geometry} Simplified geometry.\n */\n Geometry.prototype.getSimplifiedGeometry = function (squaredTolerance) {\n return abstract();\n };\n /**\n * Get the type of this geometry.\n * @abstract\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n */\n Geometry.prototype.getType = function () {\n return abstract();\n };\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @abstract\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n */\n Geometry.prototype.applyTransform = function (transformFn) {\n abstract();\n };\n /**\n * Test if the geometry and the passed extent intersect.\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n */\n Geometry.prototype.intersectsExtent = function (extent) {\n return abstract();\n };\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @abstract\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n Geometry.prototype.translate = function (deltaX, deltaY) {\n abstract();\n };\n /**\n * Transform each coordinate of the geometry from one coordinate reference\n * system to another. The geometry is modified in place.\n * For example, a line will be transformed to a line and a circle to a circle.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n *\n * @param {import(\"../proj.js\").ProjectionLike} source The current projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {Geometry} This geometry. Note that original geometry is\n * modified in place.\n * @api\n */\n Geometry.prototype.transform = function (source, destination) {\n /** @type {import(\"../proj/Projection.js\").default} */\n var sourceProj = getProjection(source);\n var transformFn = sourceProj.getUnits() == Units.TILE_PIXELS\n ? function (inCoordinates, outCoordinates, stride) {\n var pixelExtent = sourceProj.getExtent();\n var projectedExtent = sourceProj.getWorldExtent();\n var scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(tmpTransform, projectedExtent[0], projectedExtent[3], scale, -scale, 0, 0, 0);\n transform2D(inCoordinates, 0, inCoordinates.length, stride, tmpTransform, outCoordinates);\n return getTransform(sourceProj, destination)(inCoordinates, outCoordinates, stride);\n }\n : getTransform(sourceProj, destination);\n this.applyTransform(transformFn);\n return this;\n };\n return Geometry;\n}(BaseObject));\nexport default Geometry;\n//# sourceMappingURL=Geometry.js.map","/**\n * @module ol/proj/transforms\n */\nimport { isEmpty } from '../obj.js';\n/**\n * @private\n * @type {!Object<string, Object<string, import(\"../proj.js\").TransformFunction>>}\n */\nvar transforms = {};\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n var sourceCode = source.getCode();\n var destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n var sourceCode = source.getCode();\n var destinationCode = destination.getCode();\n var transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|undefined} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n var transform;\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n transform = transforms[sourceCode][destinationCode];\n }\n return transform;\n}\n//# sourceMappingURL=transforms.js.map","/**\n * @module ol/tilegrid/common\n */\n/**\n * Default maximum zoom for default tile grids.\n * @type {number}\n */\nexport var DEFAULT_MAX_ZOOM = 42;\n/**\n * Default tile size.\n * @type {number}\n */\nexport var DEFAULT_TILE_SIZE = 256;\n//# sourceMappingURL=common.js.map","var baseFor = require('./_baseFor'),\n castFunction = require('./_castFunction'),\n keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","define([\"../_base/lang\"], function(lang){\n\treturn function(name, ctor, base, props){\n\t\tbase = base || Error;\n\n\t\tvar ErrorCtor = function(message){\n\t\t\tif(base === Error){\n\t\t\t\tif(Error.captureStackTrace){\n\t\t\t\t\tError.captureStackTrace(this, ErrorCtor);\n\t\t\t\t}\n\n\t\t\t\t// Error.call() operates on the returned error\n\t\t\t\t// object rather than operating on |this|\n\t\t\t\tvar err = Error.call(this, message),\n\t\t\t\t\tprop;\n\n\t\t\t\t// Copy own properties from err to |this|\n\t\t\t\tfor(prop in err){\n\t\t\t\t\tif(err.hasOwnProperty(prop)){\n\t\t\t\t\t\tthis[prop] = err[prop];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// messsage is non-enumerable in ES5\n\t\t\t\tthis.message = message;\n\t\t\t\t// stack is non-enumerable in at least Firefox\n\t\t\t\tthis.stack = err.stack;\n\t\t\t}else{\n\t\t\t\tbase.apply(this, arguments);\n\t\t\t}\n\t\t\tif(ctor){\n\t\t\t\tctor.apply(this, arguments);\n\t\t\t}\n\t\t};\n\n\t\tErrorCtor.prototype = lang.delegate(base.prototype, props);\n\t\tErrorCtor.prototype.name = name;\n\t\tErrorCtor.prototype.constructor = ErrorCtor;\n\n\t\treturn ErrorCtor;\n\t};\n});\n","define(['./create'], function(create){\n\t// module:\n\t//\t\tdojo/errors/RequestError\n\n\t/*=====\n\t return function(){\n\t\t // summary:\n\t\t //\t\tTODOC\n\t };\n\t =====*/\n\n\treturn create(\"RequestError\", function(message, response){\n\t\tthis.response = response;\n\t});\n});\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Image\n */\nimport EventType from './events/EventType.js';\nimport ImageBase from './ImageBase.js';\nimport ImageState from './ImageState.js';\nimport { IMAGE_DECODE } from './has.js';\nimport { getHeight } from './extent.js';\nimport { listenOnce, unlistenByKey } from './events.js';\n/**\n * A function that takes an {@link module:ol/Image~Image} for the image and a\n * `{string}` for the src as arguments. It is supposed to make it so the\n * underlying image {@link module:ol/Image~Image#getImage} is assigned the\n * content specified by the src. If not specified, the default is\n *\n * function(image, src) {\n * image.getImage().src = src;\n * }\n *\n * Providing a custom `imageLoadFunction` can be useful to load images with\n * post requests or - in general - through XHR requests, where the src of the\n * image element would be set to a data URI when the content is loaded.\n *\n * @typedef {function(ImageWrapper, string): void} LoadFunction\n * @api\n */\nvar ImageWrapper = /** @class */ (function (_super) {\n __extends(ImageWrapper, _super);\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|undefined} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {LoadFunction} imageLoadFunction Image load function.\n */\n function ImageWrapper(extent, resolution, pixelRatio, src, crossOrigin, imageLoadFunction) {\n var _this = _super.call(this, extent, resolution, pixelRatio, ImageState.IDLE) || this;\n /**\n * @private\n * @type {string}\n */\n _this.src_ = src;\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement}\n */\n _this.image_ = new Image();\n if (crossOrigin !== null) {\n _this.image_.crossOrigin = crossOrigin;\n }\n /**\n * @private\n * @type {?function():void}\n */\n _this.unlisten_ = null;\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n _this.state = ImageState.IDLE;\n /**\n * @private\n * @type {LoadFunction}\n */\n _this.imageLoadFunction_ = imageLoadFunction;\n return _this;\n }\n /**\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @api\n */\n ImageWrapper.prototype.getImage = function () {\n return this.image_;\n };\n /**\n * Tracks loading or read errors.\n *\n * @private\n */\n ImageWrapper.prototype.handleImageError_ = function () {\n this.state = ImageState.ERROR;\n this.unlistenImage_();\n this.changed();\n };\n /**\n * Tracks successful image load.\n *\n * @private\n */\n ImageWrapper.prototype.handleImageLoad_ = function () {\n if (this.resolution === undefined) {\n this.resolution = getHeight(this.extent) / this.image_.height;\n }\n this.state = ImageState.LOADED;\n this.unlistenImage_();\n this.changed();\n };\n /**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n * @api\n */\n ImageWrapper.prototype.load = function () {\n if (this.state == ImageState.IDLE || this.state == ImageState.ERROR) {\n this.state = ImageState.LOADING;\n this.changed();\n this.imageLoadFunction_(this, this.src_);\n this.unlisten_ = listenImage(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this));\n }\n };\n /**\n * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image.\n */\n ImageWrapper.prototype.setImage = function (image) {\n this.image_ = image;\n };\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n ImageWrapper.prototype.unlistenImage_ = function () {\n if (this.unlisten_) {\n this.unlisten_();\n this.unlisten_ = null;\n }\n };\n return ImageWrapper;\n}(ImageBase));\n/**\n * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image element.\n * @param {function():any} loadHandler Load callback function.\n * @param {function():any} errorHandler Error callback function.\n * @return {function():void} Callback to stop listening.\n */\nexport function listenImage(image, loadHandler, errorHandler) {\n var img = /** @type {HTMLImageElement} */ (image);\n if (img.src && IMAGE_DECODE) {\n var promise = img.decode();\n var listening_1 = true;\n var unlisten = function () {\n listening_1 = false;\n };\n promise\n .then(function () {\n if (listening_1) {\n loadHandler();\n }\n })\n .catch(function (error) {\n if (listening_1) {\n // FIXME: Unconditionally call errorHandler() when this bug is fixed upstream:\n // https://bugs.webkit.org/show_bug.cgi?id=198527\n if (error.name === 'EncodingError' &&\n error.message === 'Invalid image type.') {\n loadHandler();\n }\n else {\n errorHandler();\n }\n }\n });\n return unlisten;\n }\n var listenerKeys = [\n listenOnce(img, EventType.LOAD, loadHandler),\n listenOnce(img, EventType.ERROR, errorHandler),\n ];\n return function unlisten() {\n listenerKeys.forEach(unlistenByKey);\n };\n}\nexport default ImageWrapper;\n//# sourceMappingURL=Image.js.map","/**\n * @module ol/loadingstrategy\n */\n/**\n * Strategy function for loading all features with a single request.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array<import(\"./extent.js\").Extent>} Extents.\n * @api\n */\nexport function all(extent, resolution) {\n return [[-Infinity, -Infinity, Infinity, Infinity]];\n}\n/**\n * Strategy function for loading features based on the view's extent and\n * resolution.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array<import(\"./extent.js\").Extent>} Extents.\n * @api\n */\nexport function bbox(extent, resolution) {\n return [extent];\n}\n/**\n * Creates a strategy function for loading features based on a tile grid.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {function(import(\"./extent.js\").Extent, number): Array<import(\"./extent.js\").Extent>} Loading strategy.\n * @api\n */\nexport function tile(tileGrid) {\n return (\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array<import(\"./extent.js\").Extent>} Extents.\n */\n function (extent, resolution) {\n var z = tileGrid.getZForResolution(resolution);\n var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);\n /** @type {Array<import(\"./extent.js\").Extent>} */\n var extents = [];\n /** @type {import(\"./tilecoord.js\").TileCoord} */\n var tileCoord = [z, 0, 0];\n for (tileCoord[1] = tileRange.minX; tileCoord[1] <= tileRange.maxX; ++tileCoord[1]) {\n for (tileCoord[2] = tileRange.minY; tileCoord[2] <= tileRange.maxY; ++tileCoord[2]) {\n extents.push(tileGrid.getTileCoordExtent(tileCoord));\n }\n }\n return extents;\n });\n}\n//# sourceMappingURL=loadingstrategy.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/source/Source\n */\nimport BaseObject from '../Object.js';\nimport SourceState from './State.js';\nimport { abstract } from '../util.js';\nimport { get as getProjection } from '../proj.js';\n/**\n * A function that returns a string or an array of strings representing source\n * attributions.\n *\n * @typedef {function(import(\"../PluggableMap.js\").FrameState): (string|Array<string>)} Attribution\n */\n/**\n * A type that can be used to provide attribution information for data sources.\n *\n * It represents either\n * * a simple string (e.g. `'© Acme Inc.'`)\n * * an array of simple strings (e.g. `['© Acme Inc.', '© Bacme Inc.']`)\n * * a function that returns a string or array of strings ({@link module:ol/source/Source~Attribution})\n *\n * @typedef {string|Array<string>|Attribution} AttributionLike\n */\n/**\n * @typedef {Object} Options\n * @property {AttributionLike} [attributions]\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {import(\"./State.js\").default} [state='ready']\n * @property {boolean} [wrapX=false]\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for {@link module:ol/layer/Layer~Layer} sources.\n *\n * A generic `change` event is triggered when the state of the source changes.\n * @abstract\n * @api\n */\nvar Source = /** @class */ (function (_super) {\n __extends(Source, _super);\n /**\n * @param {Options} options Source options.\n */\n function Source(options) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {import(\"../proj/Projection.js\").default}\n */\n _this.projection_ = getProjection(options.projection);\n /**\n * @private\n * @type {?Attribution}\n */\n _this.attributions_ = adaptAttributions(options.attributions);\n /**\n * @private\n * @type {boolean}\n */\n _this.attributionsCollapsible_ =\n options.attributionsCollapsible !== undefined\n ? options.attributionsCollapsible\n : true;\n /**\n * This source is currently loading data. Sources that defer loading to the\n * map's tile queue never set this to `true`.\n * @type {boolean}\n */\n _this.loading = false;\n /**\n * @private\n * @type {import(\"./State.js\").default}\n */\n _this.state_ =\n options.state !== undefined ? options.state : SourceState.READY;\n /**\n * @private\n * @type {boolean}\n */\n _this.wrapX_ = options.wrapX !== undefined ? options.wrapX : false;\n return _this;\n }\n /**\n * Get the attribution function for the source.\n * @return {?Attribution} Attribution function.\n */\n Source.prototype.getAttributions = function () {\n return this.attributions_;\n };\n /**\n * @return {boolean} Attributions are collapsible.\n */\n Source.prototype.getAttributionsCollapsible = function () {\n return this.attributionsCollapsible_;\n };\n /**\n * Get the projection of the source.\n * @return {import(\"../proj/Projection.js\").default} Projection.\n * @api\n */\n Source.prototype.getProjection = function () {\n return this.projection_;\n };\n /**\n * @abstract\n * @return {Array<number>|undefined} Resolutions.\n */\n Source.prototype.getResolutions = function () {\n return abstract();\n };\n /**\n * Get the state of the source, see {@link module:ol/source/State~State} for possible states.\n * @return {import(\"./State.js\").default} State.\n * @api\n */\n Source.prototype.getState = function () {\n return this.state_;\n };\n /**\n * @return {boolean|undefined} Wrap X.\n */\n Source.prototype.getWrapX = function () {\n return this.wrapX_;\n };\n /**\n * @return {Object|undefined} Context options.\n */\n Source.prototype.getContextOptions = function () {\n return undefined;\n };\n /**\n * Refreshes the source. The source will be cleared, and data from the server will be reloaded.\n * @api\n */\n Source.prototype.refresh = function () {\n this.changed();\n };\n /**\n * Set the attributions of the source.\n * @param {AttributionLike|undefined} attributions Attributions.\n * Can be passed as `string`, `Array<string>`, {@link module:ol/source/Source~Attribution},\n * or `undefined`.\n * @api\n */\n Source.prototype.setAttributions = function (attributions) {\n this.attributions_ = adaptAttributions(attributions);\n this.changed();\n };\n /**\n * Set the state of the source.\n * @param {import(\"./State.js\").default} state State.\n */\n Source.prototype.setState = function (state) {\n this.state_ = state;\n this.changed();\n };\n return Source;\n}(BaseObject));\n/**\n * Turns the attributions option into an attributions function.\n * @param {AttributionLike|undefined} attributionLike The attribution option.\n * @return {?Attribution} An attribution function (or null).\n */\nfunction adaptAttributions(attributionLike) {\n if (!attributionLike) {\n return null;\n }\n if (Array.isArray(attributionLike)) {\n return function (frameState) {\n return attributionLike;\n };\n }\n if (typeof attributionLike === 'function') {\n return attributionLike;\n }\n return function (frameState) {\n return [attributionLike];\n };\n}\nexport default Source;\n//# sourceMappingURL=Source.js.map","/**\n * @module ol/source/common\n */\n/**\n * Default WMS version.\n * @type {string}\n */\nexport var DEFAULT_WMS_VERSION = '1.3.0';\n/**\n * Context options to disable image smoothing.\n * @type {Object}\n */\nexport var IMAGE_SMOOTHING_DISABLED = {\n imageSmoothingEnabled: false,\n msImageSmoothingEnabled: false,\n};\n//# sourceMappingURL=common.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isValid;\n\nvar _index = _interopRequireDefault(require(\"../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `false` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * var result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * var result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */\nfunction isValid(dirtyDate) {\n (0, _index2.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n return !isNaN(date);\n}\n\nmodule.exports = exports.default;","/**\n * Position library\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar elementRect;\nvar popupRect;\nvar element;\nvar parentDocument;\nvar fixedParent = false;\nexport function calculateRelativeBasedPosition(anchor, element) {\n var fixedElement = false;\n var anchorPos = { left: 0, top: 0 };\n var tempAnchor = anchor;\n if (!anchor || !element) {\n return anchorPos;\n }\n if (isNullOrUndefined(element.offsetParent) && element.style.position === 'fixed') {\n fixedElement = true;\n }\n while ((element.offsetParent || fixedElement) && anchor && element.offsetParent !== anchor) {\n anchorPos.left += anchor.offsetLeft;\n anchorPos.top += anchor.offsetTop;\n anchor = anchor.offsetParent;\n }\n anchor = tempAnchor;\n while ((element.offsetParent || fixedElement) && anchor && element.offsetParent !== anchor) {\n anchorPos.left -= anchor.scrollLeft;\n anchorPos.top -= anchor.scrollTop;\n anchor = anchor.parentElement;\n }\n return anchorPos;\n}\nexport function calculatePosition(currentElement, positionX, positionY, parentElement, targetValues) {\n (positionY + positionX === 'topright') ? popupRect = undefined : popupRect = targetValues;\n popupRect = targetValues;\n fixedParent = parentElement ? true : false;\n if (!currentElement) {\n return { left: 0, top: 0 };\n }\n if (!positionX) {\n positionX = 'left';\n }\n if (!positionY) {\n positionY = 'top';\n }\n parentDocument = currentElement.ownerDocument;\n element = currentElement;\n var pos = { left: 0, top: 0 };\n return updatePosition(positionX.toLowerCase(), positionY.toLowerCase(), pos);\n}\nfunction setPosx(value, pos) {\n pos.left = value;\n}\nfunction setPosy(value, pos) {\n pos.top = value;\n}\nfunction updatePosition(posX, posY, pos) {\n elementRect = element.getBoundingClientRect();\n switch (posY + posX) {\n case 'topcenter':\n setPosx(getElementHCenter(), pos);\n setPosy(getElementTop(), pos);\n break;\n case 'topright':\n setPosx(getElementRight(), pos);\n setPosy(getElementTop(), pos);\n break;\n case 'centercenter':\n setPosx(getElementHCenter(), pos);\n setPosy(getElementVCenter(), pos);\n break;\n case 'centerright':\n setPosx(getElementRight(), pos);\n setPosy(getElementVCenter(), pos);\n break;\n case 'centerleft':\n setPosx(getElementLeft(), pos);\n setPosy(getElementVCenter(), pos);\n break;\n case 'bottomcenter':\n setPosx(getElementHCenter(), pos);\n setPosy(getElementBottom(), pos);\n break;\n case 'bottomright':\n setPosx(getElementRight(), pos);\n setPosy(getElementBottom(), pos);\n break;\n case 'bottomleft':\n setPosx(getElementLeft(), pos);\n setPosy(getElementBottom(), pos);\n break;\n default:\n case 'topleft':\n setPosx(getElementLeft(), pos);\n setPosy(getElementTop(), pos);\n break;\n }\n return pos;\n}\nfunction getBodyScrollTop() {\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\nfunction getBodyScrollLeft() {\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\nfunction getElementBottom() {\n return fixedParent ? elementRect.bottom : elementRect.bottom + getBodyScrollTop();\n}\nfunction getElementVCenter() {\n return getElementTop() + (elementRect.height / 2);\n}\nfunction getElementTop() {\n return fixedParent ? elementRect.top : elementRect.top + getBodyScrollTop();\n}\nfunction getElementLeft() {\n return elementRect.left + getBodyScrollLeft();\n}\nfunction getElementRight() {\n return elementRect.right + getBodyScrollLeft() - (popupRect ? popupRect.width : 0);\n}\nfunction getElementHCenter() {\n return getElementLeft() + (elementRect.width / 2);\n}\n","import { DataUtil } from './util';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Query class is used to build query which is used by the DataManager to communicate with datasource.\n */\nvar Query = /** @class */ (function () {\n /**\n * Constructor for Query class.\n * @param {string|string[]} from?\n * @hidden\n */\n function Query(from) {\n /** @hidden */\n this.subQuery = null;\n /** @hidden */\n this.isChild = false;\n /** @hidden */\n this.distincts = [];\n this.queries = [];\n this.key = '';\n this.fKey = '';\n if (typeof from === 'string') {\n this.fromTable = from;\n }\n else if (from && from instanceof Array) {\n this.lookups = from;\n }\n this.expands = [];\n this.sortedColumns = [];\n this.groupedColumns = [];\n this.subQuery = null;\n this.isChild = false;\n this.params = [];\n this.lazyLoad = [];\n return this;\n }\n /**\n * Sets the primary key.\n * @param {string} field - Defines the column field.\n */\n Query.prototype.setKey = function (field) {\n this.key = field;\n return this;\n };\n /**\n * Sets default DataManager to execute query.\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.using = function (dataManager) {\n this.dataManager = dataManager;\n return this;\n };\n /**\n * Executes query with the given DataManager.\n * @param {DataManager} dataManager - Defines the DataManager.\n * @param {Function} done - Defines the success callback.\n * @param {Function} fail - Defines the failure callback.\n * @param {Function} always - Defines the callback which will be invoked on either success or failure.\n *\n * <pre>\n * let dataManager: DataManager = new DataManager([{ ID: '10' }, { ID: '2' }, { ID: '1' }, { ID: '20' }]);\n * let query: Query = new Query();\n * query.sortBy('ID', (x: string, y: string): number => { return parseInt(x, 10) - parseInt(y, 10) });\n * let promise: Promise< Object > = query.execute(dataManager);\n * promise.then((e: { result: Object }) => { });\n * </pre>\n */\n Query.prototype.execute = function (dataManager, done, fail, always) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeQuery(this, done, fail, always);\n }\n return DataUtil.throwError('Query - execute() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Executes query with the local datasource.\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.executeLocal = function (dataManager) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeLocal(this);\n }\n return DataUtil.throwError('Query - executeLocal() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Creates deep copy of the Query object.\n */\n Query.prototype.clone = function () {\n var cloned = new Query();\n cloned.queries = this.queries.slice(0);\n cloned.key = this.key;\n cloned.isChild = this.isChild;\n cloned.dataManager = this.dataManager;\n cloned.fromTable = this.fromTable;\n cloned.params = this.params.slice(0);\n cloned.expands = this.expands.slice(0);\n cloned.sortedColumns = this.sortedColumns.slice(0);\n cloned.groupedColumns = this.groupedColumns.slice(0);\n cloned.subQuerySelector = this.subQuerySelector;\n cloned.subQuery = this.subQuery;\n cloned.fKey = this.fKey;\n cloned.isCountRequired = this.isCountRequired;\n cloned.distincts = this.distincts.slice(0);\n cloned.lazyLoad = this.lazyLoad.slice(0);\n return cloned;\n };\n /**\n * Specifies the name of table to retrieve data in query execution.\n * @param {string} tableName - Defines the table name.\n */\n Query.prototype.from = function (tableName) {\n this.fromTable = tableName;\n return this;\n };\n /**\n * Adds additional parameter which will be sent along with the request which will be generated while DataManager execute.\n * @param {string} key - Defines the key of additional parameter.\n * @param {Function|string} value - Defines the value for the key.\n */\n Query.prototype.addParams = function (key, value) {\n if (typeof value === 'function') {\n this.params.push({ key: key, fn: value });\n }\n else {\n this.params.push({ key: key, value: value });\n }\n return this;\n };\n /**\n * @hidden\n */\n Query.prototype.distinct = function (fields) {\n if (typeof fields === 'string') {\n this.distincts = [].slice.call([fields], 0);\n }\n else {\n this.distincts = fields.slice(0);\n }\n return this;\n };\n /**\n * Expands the related table.\n * @param {string|Object[]} tables\n */\n Query.prototype.expand = function (tables) {\n if (typeof tables === 'string') {\n this.expands = [].slice.call([tables], 0);\n }\n else {\n this.expands = tables.slice(0);\n }\n return this;\n };\n /**\n * Filter data with given filter criteria.\n * @param {string|Predicate} fieldName - Defines the column field or Predicate.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string|number|boolean} value - Defines the values to match with data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Query.prototype.where = function (fieldName, operator, value, ignoreCase, ignoreAccent) {\n operator = operator ? (operator).toLowerCase() : null;\n var predicate = null;\n if (typeof fieldName === 'string') {\n predicate = new Predicate(fieldName, operator, value, ignoreCase, ignoreAccent);\n }\n else if (fieldName instanceof Predicate) {\n predicate = fieldName;\n }\n this.queries.push({\n fn: 'onWhere',\n e: predicate\n });\n return this;\n };\n /**\n * Search data with given search criteria.\n * @param {string|number|boolean} searchKey - Defines the search key.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n * @param {string} operator - Defines the operator how to search data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Query.prototype.search = function (searchKey, fieldNames, operator, ignoreCase, ignoreAccent) {\n if (typeof fieldNames === 'string') {\n fieldNames = [fieldNames];\n }\n if (!operator || operator === 'none') {\n operator = 'contains';\n }\n var comparer = DataUtil.fnOperators[operator];\n this.queries.push({\n fn: 'onSearch',\n e: {\n fieldNames: fieldNames,\n operator: operator,\n searchKey: searchKey,\n ignoreCase: ignoreCase,\n ignoreAccent: ignoreAccent,\n comparer: comparer\n }\n });\n return this;\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n */\n Query.prototype.sortBy = function (fieldName, comparer, isFromGroup) {\n return this.sortByForeignKey(fieldName, comparer, isFromGroup);\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n * @param {string} direction - Defines the sort direction .\n */\n Query.prototype.sortByForeignKey = function (fieldName, comparer, isFromGroup, direction) {\n var order = !isNullOrUndefined(direction) ? direction : 'ascending';\n var sorts;\n var temp;\n if (typeof fieldName === 'string' && DataUtil.endsWith(fieldName.toLowerCase(), ' desc')) {\n fieldName = fieldName.replace(/ desc$/i, '');\n comparer = 'descending';\n }\n if (!comparer || typeof comparer === 'string') {\n order = comparer ? comparer.toLowerCase() : 'ascending';\n comparer = DataUtil.fnSort(comparer);\n }\n if (isFromGroup) {\n sorts = Query.filterQueries(this.queries, 'onSortBy');\n for (var i = 0; i < sorts.length; i++) {\n temp = sorts[i].e.fieldName;\n if (typeof temp === 'string') {\n if (temp === fieldName) {\n return this;\n }\n }\n else if (temp instanceof Array) {\n for (var j = 0; j < temp.length; j++) {\n if (temp[j] === fieldName || fieldName.toLowerCase() === temp[j] + ' desc') {\n return this;\n }\n }\n }\n }\n }\n this.queries.push({\n fn: 'onSortBy',\n e: {\n fieldName: fieldName,\n comparer: comparer,\n direction: order\n }\n });\n return this;\n };\n /**\n * Sorts data in descending order.\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.sortByDesc = function (fieldName) {\n return this.sortBy(fieldName, 'descending');\n };\n /**\n * Groups data with the given field name.\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.group = function (fieldName, fn, format) {\n this.sortBy(fieldName, null, true);\n this.queries.push({\n fn: 'onGroup',\n e: {\n fieldName: fieldName,\n comparer: fn ? fn : null,\n format: format ? format : null\n }\n });\n return this;\n };\n /**\n * Gets data based on the given page index and size.\n * @param {number} pageIndex - Defines the current page index.\n * @param {number} pageSize - Defines the no of records per page.\n */\n Query.prototype.page = function (pageIndex, pageSize) {\n this.queries.push({\n fn: 'onPage',\n e: {\n pageIndex: pageIndex,\n pageSize: pageSize\n }\n });\n return this;\n };\n /**\n * Gets data based on the given start and end index.\n * @param {number} start - Defines the start index of the datasource.\n * @param {number} end - Defines the end index of the datasource.\n */\n Query.prototype.range = function (start, end) {\n this.queries.push({\n fn: 'onRange',\n e: {\n start: start,\n end: end\n }\n });\n return this;\n };\n /**\n * Gets data from the top of the data source based on given number of records count.\n * @param {number} nos - Defines the no of records to retrieve from datasource.\n */\n Query.prototype.take = function (nos) {\n this.queries.push({\n fn: 'onTake',\n e: {\n nos: nos\n }\n });\n return this;\n };\n /**\n * Skips data with given number of records count from the top of the data source.\n * @param {number} nos - Defines the no of records skip in the datasource.\n */\n Query.prototype.skip = function (nos) {\n this.queries.push({\n fn: 'onSkip',\n e: { nos: nos }\n });\n return this;\n };\n /**\n * Selects specified columns from the data source.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n */\n Query.prototype.select = function (fieldNames) {\n if (typeof fieldNames === 'string') {\n fieldNames = [].slice.call([fieldNames], 0);\n }\n this.queries.push({\n fn: 'onSelect',\n e: { fieldNames: fieldNames }\n });\n return this;\n };\n /**\n * Gets the records in hierarchical relationship from two tables. It requires the foreign key to relate two tables.\n * @param {Query} query - Defines the query to relate two tables.\n * @param {Function} selectorFn - Defines the custom function to select records.\n */\n Query.prototype.hierarchy = function (query, selectorFn) {\n this.subQuerySelector = selectorFn;\n this.subQuery = query;\n return this;\n };\n /**\n * Sets the foreign key which is used to get data from the related table.\n * @param {string} key - Defines the foreign key.\n */\n Query.prototype.foreignKey = function (key) {\n this.fKey = key;\n return this;\n };\n /**\n * It is used to get total number of records in the DataManager execution result.\n */\n Query.prototype.requiresCount = function () {\n this.isCountRequired = true;\n return this;\n };\n //type - sum, avg, min, max\n /**\n * Aggregate the data with given type and field name.\n * @param {string} type - Defines the aggregate type.\n * @param {string} field - Defines the column field to aggregate.\n */\n Query.prototype.aggregate = function (type, field) {\n this.queries.push({\n fn: 'onAggregates',\n e: { field: field, type: type }\n });\n return this;\n };\n /**\n * Pass array of filterColumn query for performing filter operation.\n * @param {QueryOptions[]} queries\n * @param {string} name\n * @hidden\n */\n Query.filterQueries = function (queries, name) {\n return queries.filter(function (q) {\n return q.fn === name;\n });\n };\n /**\n * To get the list of queries which is already filtered in current data source.\n * @param {Object[]} queries\n * @param {string[]} singles\n * @hidden\n */\n Query.filterQueryLists = function (queries, singles) {\n var filtered = queries.filter(function (q) {\n return singles.indexOf(q.fn) !== -1;\n });\n var res = {};\n for (var i = 0; i < filtered.length; i++) {\n if (!res[filtered[i].fn]) {\n res[filtered[i].fn] = filtered[i].e;\n }\n }\n return res;\n };\n return Query;\n}());\nexport { Query };\n/**\n * Predicate class is used to generate complex filter criteria.\n * This will be used by DataManager to perform multiple filtering operation.\n */\nvar Predicate = /** @class */ (function () {\n /**\n * Constructor for Predicate class.\n * @param {string|Predicate} field\n * @param {string} operator\n * @param {string|number|boolean|Predicate|Predicate[]} value\n * @param {boolean=false} ignoreCase\n * @hidden\n */\n function Predicate(field, operator, value, ignoreCase, ignoreAccent) {\n if (ignoreCase === void 0) { ignoreCase = false; }\n /** @hidden */\n this.ignoreAccent = false;\n /** @hidden */\n this.isComplex = false;\n if (typeof field === 'string') {\n this.field = field;\n this.operator = operator.toLowerCase();\n this.value = value;\n this.ignoreCase = ignoreCase;\n this.ignoreAccent = ignoreAccent;\n this.isComplex = false;\n this.comparer = DataUtil.fnOperators.processOperator(this.operator);\n }\n else if (field instanceof Predicate && value instanceof Predicate || value instanceof Array) {\n this.isComplex = true;\n this.condition = operator.toLowerCase();\n this.predicates = [field];\n if (value instanceof Array) {\n [].push.apply(this.predicates, value);\n }\n else {\n this.predicates.push(value);\n }\n }\n return this;\n }\n /**\n * Adds n-number of new predicates on existing predicate with “and†condition.\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and');\n };\n /**\n * Adds new predicate on existing predicate with “and†condition.\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Predicate.prototype.and = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'and', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “or†condition.\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or');\n };\n /**\n * Adds new predicate on existing predicate with “or†condition.\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Predicate.prototype.or = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'or', ignoreCase, ignoreAccent);\n };\n /**\n * Converts plain JavaScript object to Predicate object.\n * @param {Predicate[]|Predicate} json - Defines single or collection of Predicate.\n */\n Predicate.fromJson = function (json) {\n if (json instanceof Array) {\n var res = [];\n for (var i = 0, len = json.length; i < len; i++) {\n res.push(this.fromJSONData(json[i]));\n }\n return res;\n }\n var pred = json;\n return this.fromJSONData(pred);\n };\n /**\n * Validate the record based on the predicates.\n * @param {Object} record - Defines the datasource record.\n */\n Predicate.prototype.validate = function (record) {\n var predicate = this.predicates ? this.predicates : [];\n var isAnd;\n var ret;\n if (!this.isComplex && this.comparer) {\n return this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n isAnd = this.condition === 'and';\n for (var i = 0; i < predicate.length; i++) {\n ret = predicate[i].validate(record);\n if (isAnd) {\n if (!ret) {\n return false;\n }\n }\n else {\n if (ret) {\n return true;\n }\n }\n }\n return isAnd;\n };\n /**\n * Converts predicates to plain JavaScript.\n * This method is uses Json stringify when serializing Predicate object.\n */\n Predicate.prototype.toJson = function () {\n var predicates;\n var p;\n if (this.isComplex) {\n predicates = [];\n p = this.predicates;\n for (var i = 0; i < p.length; i++) {\n predicates.push(p[i].toJson());\n }\n }\n return {\n isComplex: this.isComplex,\n field: this.field,\n operator: this.operator,\n value: this.value,\n ignoreCase: this.ignoreCase,\n ignoreAccent: this.ignoreAccent,\n condition: this.condition,\n predicates: predicates\n };\n };\n Predicate.combinePredicates = function (predicates, operator) {\n if (predicates.length === 1) {\n if (!(predicates[0] instanceof Array)) {\n return predicates[0];\n }\n predicates = predicates[0];\n }\n return new Predicate(predicates[0], operator, predicates.slice(1));\n };\n Predicate.combine = function (pred, field, operator, value, condition, ignoreCase, ignoreAccent) {\n if (field instanceof Predicate) {\n return Predicate[condition](pred, field);\n }\n if (typeof field === 'string') {\n return Predicate[condition](pred, new Predicate(field, operator, value, ignoreCase, ignoreAccent));\n }\n return DataUtil.throwError('Predicate - ' + condition + ' : invalid arguments');\n };\n Predicate.fromJSONData = function (json) {\n var preds = json.predicates || [];\n var len = preds.length;\n var predicates = [];\n var result;\n for (var i = 0; i < len; i++) {\n predicates.push(this.fromJSONData(preds[i]));\n }\n if (!json.isComplex) {\n result = new Predicate(json.field, json.operator, json.value, json.ignoreCase, json.ignoreAccent);\n }\n else {\n result = new Predicate(predicates[0], json.condition, predicates.slice(1));\n }\n return result;\n };\n return Predicate;\n}());\nexport { Predicate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from './manager';\nimport { Query } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Data manager common utility methods.\n * @hidden\n */\nvar DataUtil = /** @class */ (function () {\n function DataUtil() {\n }\n /**\n * Returns the value by invoking the provided parameter function.\n * If the paramater is not of type function then it will be returned as it is.\n * @param {Function|string|string[]|number} value\n * @param {Object} inst?\n * @hidden\n */\n DataUtil.getValue = function (value, inst) {\n if (typeof value === 'function') {\n return value.call(inst || {});\n }\n return value;\n };\n /**\n * Returns true if the input string ends with given string.\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.endsWith = function (input, substr) {\n return input.slice && input.slice(-substr.length) === substr;\n };\n /**\n * Returns true if the input string starts with given string.\n * @param {string} str\n * @param {string} startstr\n */\n DataUtil.startsWith = function (input, start) {\n return input.slice(0, start.length) === start;\n };\n /**\n * To return the sorting function based on the string.\n * @param {string} order\n * @hidden\n */\n DataUtil.fnSort = function (order) {\n order = order ? DataUtil.toLowerCase(order) : 'ascending';\n if (order === 'ascending') {\n return this.fnAscending;\n }\n return this.fnDescending;\n };\n /**\n * Comparer function which is used to sort the data in ascending order.\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnAscending = function (x, y) {\n if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n return -1;\n }\n if (y === null || y === undefined) {\n return -1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y);\n }\n if (x === null || x === undefined) {\n return 1;\n }\n return x - y;\n };\n /**\n * Comparer function which is used to sort the data in descending order.\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnDescending = function (x, y) {\n if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n return -1;\n }\n if (y === null || y === undefined) {\n return 1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y) * -1;\n }\n if (x === null || x === undefined) {\n return -1;\n }\n return y - x;\n };\n DataUtil.extractFields = function (obj, fields) {\n var newObj = {};\n for (var i = 0; i < fields.length; i++) {\n newObj = this.setValue(fields[i], this.getObject(fields[i], obj), newObj);\n }\n return newObj;\n };\n /**\n * Select objects by given fields from jsonArray.\n * @param {Object[]} jsonArray\n * @param {string[]} fields\n */\n DataUtil.select = function (jsonArray, fields) {\n var newData = [];\n for (var i = 0; i < jsonArray.length; i++) {\n newData.push(this.extractFields(jsonArray[i], fields));\n }\n return newData;\n };\n /**\n * Group the input data based on the field name.\n * It also performs aggregation of the grouped records based on the aggregates paramater.\n * @param {Object[]} jsonArray\n * @param {string} field?\n * @param {Object[]} agg?\n * @param {number} level?\n * @param {Object[]} groupDs?\n */\n DataUtil.group = function (jsonArray, field, aggregates, level, groupDs, format, isLazyLoad) {\n level = level || 1;\n var jsonData = jsonArray;\n var guid = 'GroupGuid';\n if (jsonData.GroupGuid === consts[guid]) {\n var _loop_1 = function (j) {\n if (!isNullOrUndefined(groupDs)) {\n var indx = -1;\n var temp = groupDs.filter(function (e) { return e.key === jsonData[j].key; });\n indx = groupDs.indexOf(temp[0]);\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, groupDs[indx].items, format, isLazyLoad);\n jsonData[j].count = groupDs[indx].count;\n }\n else {\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, null, format, isLazyLoad);\n jsonData[j].count = jsonData[j].items.length;\n }\n };\n var this_1 = this;\n for (var j = 0; j < jsonData.length; j++) {\n _loop_1(j);\n }\n jsonData.childLevels += 1;\n return jsonData;\n }\n var grouped = {};\n var groupedArray = [];\n groupedArray.GroupGuid = consts[guid];\n groupedArray.level = level;\n groupedArray.childLevels = 0;\n groupedArray.records = jsonData;\n var _loop_2 = function (i) {\n var val = this_2.getVal(jsonData, i, field);\n if (!isNullOrUndefined(format)) {\n val = format(val, field);\n }\n if (!grouped[val]) {\n grouped[val] = {\n key: val,\n count: 0,\n items: [],\n aggregates: {},\n field: field\n };\n groupedArray.push(grouped[val]);\n if (!isNullOrUndefined(groupDs)) {\n var tempObj = groupDs.filter(function (e) { return e.key === grouped[val].key; });\n grouped[val].count = tempObj[0].count;\n }\n }\n grouped[val].count = !isNullOrUndefined(groupDs) ? grouped[val].count : grouped[val].count += 1;\n if (!isLazyLoad || (isLazyLoad && aggregates.length)) {\n grouped[val].items.push(jsonData[i]);\n }\n };\n var this_2 = this;\n for (var i = 0; i < jsonData.length; i++) {\n _loop_2(i);\n }\n if (aggregates && aggregates.length) {\n var _loop_3 = function (i) {\n var res = {};\n var fn = void 0;\n var aggs = aggregates;\n for (var j = 0; j < aggregates.length; j++) {\n fn = DataUtil.aggregates[aggregates[j].type];\n if (!isNullOrUndefined(groupDs)) {\n var temp = groupDs.filter(function (e) { return e.key === groupedArray[i].key; });\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(temp[0].items, aggs[j].field);\n }\n }\n else {\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(groupedArray[i].items, aggs[j].field);\n }\n }\n }\n groupedArray[i].aggregates = res;\n };\n for (var i = 0; i < groupedArray.length; i++) {\n _loop_3(i);\n }\n }\n if (isLazyLoad && groupedArray.length && aggregates.length) {\n for (var i = 0; i < groupedArray.length; i++) {\n groupedArray[i].items = [];\n }\n }\n return jsonData.length && groupedArray || jsonData;\n };\n /**\n * It is used to categorize the multiple items based on a specific field in jsonArray.\n * The hierarchical queries are commonly required when you use foreign key binding.\n * @param {string} fKey\n * @param {string} from\n * @param {Object[]} source\n * @param {Group} lookup?\n * @param {string} pKey?\n * @hidden\n */\n DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n var i;\n var grp = {};\n var temp;\n if (lookup.result) {\n lookup = lookup.result;\n }\n if (lookup.GroupGuid) {\n this.throwError('DataManager: Do not have support Grouping in hierarchy');\n }\n for (i = 0; i < lookup.length; i++) {\n var fKeyData = this.getObject(fKey, lookup[i]);\n temp = grp[fKeyData] || (grp[fKeyData] = []);\n temp.push(lookup[i]);\n }\n for (i = 0; i < source.length; i++) {\n var fKeyData = this.getObject(pKey || fKey, source[i]);\n source[i][from] = grp[fKeyData];\n }\n };\n /**\n * The method used to get the field names which started with specified characters.\n * @param {Object} obj\n * @param {string[]} fields?\n * @param {string} prefix?\n * @hidden\n */\n DataUtil.getFieldList = function (obj, fields, prefix) {\n if (prefix === undefined) {\n prefix = '';\n }\n if (fields === undefined || fields === null) {\n return this.getFieldList(obj, [], prefix);\n }\n var copyObj = obj;\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n }\n else {\n fields.push(prefix + prop);\n }\n }\n return fields;\n };\n /**\n * Gets the value of the property in the given object.\n * The complex object can be accessed by providing the field names concatenated with dot(.).\n * @param {string} nameSpace - The name of the property to be accessed.\n * @param {Object} from - Defines the source object.\n */\n DataUtil.getObject = function (nameSpace, from) {\n if (!nameSpace) {\n return from;\n }\n if (!from) {\n return undefined;\n }\n if (nameSpace.indexOf('.') === -1) {\n return from[nameSpace];\n }\n var value = from;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length; i++) {\n if (value == null) {\n break;\n }\n value = value[splits[i]];\n }\n return value;\n };\n /**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object.\n * @param {Object} value - Value that you need to set.\n * @param {Object} obj - Object to get the inner object value.\n * @return { [key: string]: Object; } | Object\n * @hidden\n */\n DataUtil.setValue = function (nameSpace, value, obj) {\n var keys = nameSpace.toString().split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? undefined : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n };\n /**\n * Sort the given data based on the field and comparer.\n * @param {Object[]} ds - Defines the input data.\n * @param {string} field - Defines the field to be sorted.\n * @param {Function} comparer - Defines the comparer function used to sort the records.\n */\n DataUtil.sort = function (ds, field, comparer) {\n if (ds.length <= 1) {\n return ds;\n }\n var middle = parseInt((ds.length / 2).toString(), 10);\n var left = ds.slice(0, middle);\n var right = ds.slice(middle);\n left = this.sort(left, field, comparer);\n right = this.sort(right, field, comparer);\n return this.merge(left, right, field, comparer);\n };\n DataUtil.ignoreDiacritics = function (value) {\n if (typeof value !== 'string') {\n return value;\n }\n var result = value.split('');\n var newValue = result.map(function (temp) { return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp; });\n return newValue.join('');\n };\n DataUtil.merge = function (left, right, fieldName, comparer) {\n var result = [];\n var current;\n while (left.length > 0 || right.length > 0) {\n if (left.length > 0 && right.length > 0) {\n if (comparer) {\n current = comparer(this.getVal(left, 0, fieldName), this.getVal(right, 0, fieldName), left[0], right[0]) <= 0 ? left : right;\n }\n else {\n current = left[0][fieldName] < left[0][fieldName] ? left : right;\n }\n }\n else {\n current = left.length > 0 ? left : right;\n }\n result.push(current.shift());\n }\n return result;\n };\n DataUtil.getVal = function (array, index, field) {\n return field ? this.getObject(field, array[index]) : array[index];\n };\n DataUtil.toLowerCase = function (val) {\n return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';\n };\n /**\n * To perform the filter operation with specified adaptor and returns the result.\n * @param {Object} adaptor\n * @param {string} fnName\n * @param {Object} param1?\n * @param {Object} param2?\n * @hidden\n */\n DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n if (fnName in adaptor) {\n var res = adaptor[fnName](param1, param2);\n if (!isNullOrUndefined(res)) {\n param1 = res;\n }\n }\n return param1;\n };\n DataUtil.getAddParams = function (adp, dm, query) {\n var req = {};\n DataUtil.callAdaptorFunction(adp, 'addParams', {\n dm: dm,\n query: query,\n params: query.params,\n reqParams: req\n });\n return req;\n };\n /**\n * Checks wheather the given input is a plain object or not.\n * @param {Object|Object[]} obj\n */\n DataUtil.isPlainObject = function (obj) {\n return (!!obj) && (obj.constructor === Object);\n };\n /**\n * Returns true when the browser cross origin request.\n */\n DataUtil.isCors = function () {\n var xhr = null;\n var request = 'XMLHttpRequest';\n try {\n xhr = new window[request]();\n }\n catch (e) {\n // No exception handling\n }\n return !!xhr && ('withCredentials' in xhr);\n };\n /**\n * Generate random GUID value which will be prefixed with the given value.\n * @param {string} prefix\n */\n DataUtil.getGuid = function (prefix) {\n var hexs = '0123456789abcdef';\n var rand;\n return (prefix || '') + '00000000-0000-4000-0000-000000000000'.replace(/0/g, function (val, i) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var arr = new Uint8Array(1);\n window.crypto.getRandomValues(arr);\n rand = arr[0] % 16 | 0;\n }\n else {\n rand = Math.random() * 16 | 0;\n }\n return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n });\n };\n /**\n * Checks wheather the given value is null or not.\n * @param {string|Object} val\n * @returns boolean\n */\n DataUtil.isNull = function (val) {\n return val === undefined || val === null;\n };\n /**\n * To get the required items from collection of objects.\n * @param {Object[]} array\n * @param {string} field\n * @param {Function} comparer\n * @returns Object\n * @hidden\n */\n DataUtil.getItemFromComparer = function (array, field, comparer) {\n var keyVal;\n var current;\n var key;\n var i = 0;\n var castRequired = typeof DataUtil.getVal(array, 0, field) === 'string';\n if (array.length) {\n while (isNullOrUndefined(keyVal) && i < array.length) {\n keyVal = DataUtil.getVal(array, i, field);\n key = array[i++];\n }\n }\n for (; i < array.length; i++) {\n current = DataUtil.getVal(array, i, field);\n if (isNullOrUndefined(current)) {\n continue;\n }\n if (castRequired) {\n keyVal = +keyVal;\n current = +current;\n }\n if (comparer(keyVal, current) > 0) {\n keyVal = current;\n key = array[i];\n }\n }\n return key;\n };\n /**\n * To get distinct values of Array or Array of Objects.\n * @param {Object[]} json\n * @param {string} field\n * @param {boolean} requiresCompleteRecord\n * @returns Object[]\n * * distinct array of objects is return when requiresCompleteRecord set as true.\n * @hidden\n */\n DataUtil.distinct = function (json, fieldName, requiresCompleteRecord) {\n requiresCompleteRecord = isNullOrUndefined(requiresCompleteRecord) ? false : requiresCompleteRecord;\n var result = [];\n var val;\n var tmp = {};\n json.forEach(function (data, index) {\n val = typeof (json[index]) === 'object' ? DataUtil.getVal(json, index, fieldName) : json[index];\n if (!(val in tmp)) {\n result.push(!requiresCompleteRecord ? val : json[index]);\n tmp[val] = 1;\n }\n });\n return result;\n };\n /**\n * Specifies the value which will be used to adjust the date value to server timezone.\n * @default null\n */\n DataUtil.serverTimezoneOffset = null;\n /**\n * Species whether are not to be parsed with serverTimezoneOffset value.\n * @hidden\n */\n DataUtil.timeZoneHandling = true;\n /**\n * Throw error with the given string as message.\n * @param {string} er\n */\n DataUtil.throwError = function (error) {\n try {\n throw new Error(error);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n };\n DataUtil.aggregates = {\n /**\n * Calculate sum of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n sum: function (ds, field) {\n var result = 0;\n var val;\n var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n for (var i = 0; i < ds.length; i++) {\n val = DataUtil.getVal(ds, i, field);\n if (!isNaN(val) && val !== null) {\n if (castRequired) {\n val = +val;\n }\n result += val;\n }\n }\n return result;\n },\n /**\n * Calculate average value of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n average: function (ds, field) {\n return DataUtil.aggregates.sum(ds, field) / ds.length;\n },\n /**\n * Returns the min value of the data based on the field.\n * @param {Object[]} ds\n * @param {string|Function} field\n */\n min: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n },\n /**\n * Returns the max value of the data based on the field.\n * @param {Object[]} ds\n * @param {string} field\n * @returns number\n */\n max: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n },\n /**\n * Returns the total number of true value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n truecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n },\n /**\n * Returns the total number of false value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n falsecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n },\n /**\n * Returns the length of the given data.\n * @param {Object[]} ds\n * @param {string} field?\n * @returns number\n */\n count: function (ds, field) {\n return ds.length;\n }\n };\n /**\n * Specifies the Object with filter operators.\n */\n DataUtil.operatorSymbols = {\n '<': 'lessthan',\n '>': 'greaterthan',\n '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal',\n '==': 'equal',\n '!=': 'notequal',\n '*=': 'contains',\n '$=': 'endswith',\n '^=': 'startswith'\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * * It will be used for date/number type filter query.\n */\n DataUtil.odBiOperator = {\n '<': ' lt ',\n '>': ' gt ',\n '<=': ' le ',\n '>=': ' ge ',\n '==': ' eq ',\n '!=': ' ne ',\n 'lessthan': ' lt ',\n 'lessthanorequal': ' le ',\n 'greaterthan': ' gt ',\n 'greaterthanorequal': ' ge ',\n 'equal': ' eq ',\n 'notequal': ' ne '\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odUniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'substringof',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'substringof'\n };\n /**\n * Specifies the Object with filter operators which will be used for ODataV4 filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odv4UniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'contains',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'contains'\n };\n DataUtil.diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n DataUtil.fnOperators = {\n /**\n * Returns true when the actual input is equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param {boolean} ignoreAccent?\n */\n equal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n }\n return actual === expected;\n },\n /**\n * Returns true when the actual input is not equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n notequal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n },\n /**\n * Returns true when the actual input is less than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n }\n return actual < expected;\n },\n /**\n * Returns true when the actual input is greater than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n }\n return actual > expected;\n },\n /**\n * Returns true when the actual input is less than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n }\n return actual <= expected;\n },\n /**\n * Returns true when the actual input is greater than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n }\n return actual >= expected;\n },\n /**\n * Returns true when the actual input contains the given string.\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n */\n contains: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) !== -1;\n },\n /**\n * Returns true when the given input value is not null.\n * @param {string|number} actual\n * @returns boolean\n */\n notnull: function (actual) {\n return actual !== null;\n },\n /**\n * Returns true when the given input value is null.\n * @param {string|number} actual\n * @returns boolean\n */\n isnull: function (actual) {\n return actual === null;\n },\n /**\n * Returns true when the actual input starts with the given string\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n startswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.startsWith(actual, expected);\n },\n /**\n * Returns true when the actual input ends with the given string.\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n endswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.endsWith(actual, expected);\n },\n /**\n * It will return the filter operator based on the filter symbol.\n * @param {string} operator\n * @hidden\n */\n processSymbols: function (operator) {\n var fnName = DataUtil.operatorSymbols[operator];\n if (fnName) {\n var fn = DataUtil.fnOperators[fnName];\n return fn;\n }\n return DataUtil.throwError('Query - Process Operator : Invalid operator');\n },\n /**\n * It will return the valid filter operator based on the specified operators.\n * @param {string} operator\n * @hidden\n */\n processOperator: function (operator) {\n var fn = DataUtil.fnOperators[operator];\n if (fn) {\n return fn;\n }\n return DataUtil.fnOperators.processSymbols(operator);\n }\n };\n /**\n * To perform the parse operation on JSON data, like convert to string from JSON or convert to JSON from string.\n */\n DataUtil.parse = {\n /**\n * Parse the given string to the plain JavaScript object.\n * @param {string|Object|Object[]} jsonText\n */\n parseJson: function (jsonText) {\n if (typeof jsonText === 'string') {\n jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n }\n else if (jsonText instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(jsonText);\n }\n else if (typeof jsonText === 'object' && jsonText !== null) {\n DataUtil.parse.iterateAndReviveJson(jsonText);\n }\n return jsonText;\n },\n /**\n * It will perform on array of values.\n * @param {string[]|Object[]} array\n * @hidden\n */\n iterateAndReviveArray: function (array) {\n for (var i = 0; i < array.length; i++) {\n if (typeof array[i] === 'object' && array[i] !== null) {\n DataUtil.parse.iterateAndReviveJson(array[i]);\n }\n else if (typeof array[i] === 'string' && !/^[\\s]*\\[|^[\\s]*\\{(.)+:|\\\"/g.test(array[i])) {\n array[i] = DataUtil.parse.jsonReviver('', array[i]);\n }\n else {\n array[i] = DataUtil.parse.parseJson(array[i]);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {JSON} json\n * @hidden\n */\n iterateAndReviveJson: function (json) {\n var value;\n var keys = Object.keys(json);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.startsWith(prop, '__')) {\n continue;\n }\n value = json[prop];\n if (typeof value === 'object') {\n if (value instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(value);\n }\n else if (value) {\n DataUtil.parse.iterateAndReviveJson(value);\n }\n }\n else {\n json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {string} field\n * @param {string|Date} value\n * @hidden\n */\n jsonReviver: function (field, value) {\n if (typeof value === 'string') {\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n var offSet = DataUtil.timeZoneHandling ? DataUtil.serverTimezoneOffset : null;\n if (ms) {\n return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), offSet, true);\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var isUTC = value.indexOf('Z') > -1 || value.indexOf('z') > -1;\n var arr = value.split(/[^0-9.]/);\n if (isUTC) {\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), DataUtil.serverTimezoneOffset, false);\n }\n else {\n var utcFormat = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10));\n var hrs = parseInt(arr[6], 10);\n var mins = parseInt(arr[7], 10);\n if (isNaN(hrs) && isNaN(mins)) {\n return utcFormat;\n }\n if (value.indexOf('+') > -1) {\n utcFormat.setHours(utcFormat.getHours() - hrs, utcFormat.getMinutes() - mins);\n }\n else {\n utcFormat.setHours(utcFormat.getHours() + hrs, utcFormat.getMinutes() + mins);\n }\n value = DataUtil.dateParse\n .toTimeZone(utcFormat, DataUtil.serverTimezoneOffset, false);\n }\n if (DataUtil.serverTimezoneOffset == null) {\n value = DataUtil.dateParse.addSelfOffset(value);\n }\n }\n }\n return value;\n },\n /**\n * Check wheather the given value is JSON or not.\n * @param {Object[]} jsonData\n */\n isJson: function (jsonData) {\n if (typeof jsonData[0] === 'string') {\n return jsonData;\n }\n return DataUtil.parse.parseJson(jsonData);\n },\n /**\n * Checks wheather the given value is GUID or not.\n * @param {string} value\n */\n isGuid: function (value) {\n var regex = /[A-Fa-f0-9]{8}(?:-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}/i;\n var match = regex.exec(value);\n return match != null;\n },\n /**\n * The method used to replace the value based on the type.\n * @param {Object} value\n * @param {boolean} stringify\n * @hidden\n */\n replacer: function (value, stringify) {\n if (DataUtil.isPlainObject(value)) {\n return DataUtil.parse.jsonReplacer(value, stringify);\n }\n if (value instanceof Array) {\n return DataUtil.parse.arrayReplacer(value);\n }\n if (value instanceof Date) {\n return DataUtil.parse.jsonReplacer({ val: value }, stringify).val;\n }\n return value;\n },\n /**\n * It will replace the JSON value.\n * @param {string} key\n * @param {Object} val\n * @hidden\n */\n jsonReplacer: function (val, stringify) {\n var value;\n var keys = Object.keys(val);\n for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n var prop = keys_3[_i];\n value = val[prop];\n if (!(value instanceof Date)) {\n continue;\n }\n var d = value;\n if (DataUtil.serverTimezoneOffset == null) {\n val[prop] = DataUtil.dateParse.toTimeZone(d, null).toJSON();\n }\n else {\n d = new Date(+d + DataUtil.serverTimezoneOffset * 3600000);\n val[prop] = DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(d), null).toJSON();\n }\n }\n return val;\n },\n /**\n * It will replace the Array of value.\n * @param {string} key\n * @param {Object[]} val\n * @hidden\n */\n arrayReplacer: function (val) {\n for (var i = 0; i < val.length; i++) {\n if (DataUtil.isPlainObject(val[i])) {\n val[i] = DataUtil.parse.jsonReplacer(val[i]);\n }\n else if (val[i] instanceof Date) {\n val[i] = DataUtil.parse.jsonReplacer({ date: val[i] }).date;\n }\n }\n return val;\n },\n /**\n * It will replace the Date object with respective to UTC format value.\n * @param {string} key\n * @param {any} value\n * @hidden\n */\n /* tslint:disable-next-line:no-any */\n jsonDateReplacer: function (key, value) {\n if (key === 'value' && value) {\n if (typeof value === 'string') {\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n if (ms) {\n value = DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), null, true);\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var arr = value.split(/[^0-9]/);\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), null, true);\n }\n }\n if (value instanceof Date) {\n value = DataUtil.dateParse.addSelfOffset(value);\n if (DataUtil.serverTimezoneOffset === null) {\n return DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(value), null).toJSON();\n }\n else {\n value = DataUtil.dateParse.toTimeZone(value, (((value.getTimezoneOffset() / 60) * 2)\n - DataUtil.serverTimezoneOffset), false);\n return value.toJSON();\n }\n }\n }\n return value;\n }\n };\n /**\n * @hidden\n */\n DataUtil.dateParse = {\n addSelfOffset: function (input) {\n return new Date(+input - (input.getTimezoneOffset() * 60000));\n },\n toUTC: function (input) {\n return new Date(+input + (input.getTimezoneOffset() * 60000));\n },\n toTimeZone: function (input, offset, utc) {\n if (offset === null) {\n return input;\n }\n var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n return new Date(+unix - (offset * 3600000));\n },\n toLocalTime: function (input) {\n var datefn = input;\n var timeZone = -datefn.getTimezoneOffset();\n var differenceString = timeZone >= 0 ? '+' : '-';\n var localtimefn = function (num) {\n var norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n };\n var val = datefn.getFullYear() + '-' + localtimefn(datefn.getMonth() + 1) + '-' + localtimefn(datefn.getDate()) +\n 'T' + localtimefn(datefn.getHours()) +\n ':' + localtimefn(datefn.getMinutes()) +\n ':' + localtimefn(datefn.getSeconds()) +\n differenceString + localtimefn(timeZone / 60) +\n ':' + localtimefn(timeZone % 60);\n return val;\n }\n };\n return DataUtil;\n}());\nexport { DataUtil };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_RIGHTOVERLAY = 'e-scroll-right-overlay';\nvar CLS_LEFTOVERLAY = 'e-scroll-left-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n * <div id=\"scroll\"/>\n * <script>\n * var scrollObj = new HScroll();\n * scrollObj.appendTo(\"#scroll\");\n * </script>\n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n __extends(HScroll, _super);\n /**\n * Initializes a new instance of the HScroll class.\n * @param options - Specifies HScroll model properties as options.\n * @param element - Specifies the element for which horizontal scrolling applies.\n */\n function HScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n HScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var element = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (element.id === '') {\n element.id = getUniqueID('hscroll');\n this.uniqueId = true;\n }\n element.style.display = 'block';\n if (this.enableRtl) {\n element.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the horizontal scroll rendering\n * @private\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlay(this.element);\n }\n this.setScrollState();\n };\n HScroll.prototype.setScrollState = function () {\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetWidth;\n this.customStep = false;\n }\n else {\n this.customStep = true;\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = this.createElement('div', { className: CLS_HSCROLLCON });\n var scrollDiv = this.createElement('div', { className: CLS_HSCROLLBAR });\n scrollDiv.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollEle.appendChild(ele_1);\n }\n scrollDiv.appendChild(scrollEle);\n ele.appendChild(scrollDiv);\n scrollDiv.style.overflowX = 'hidden';\n this.scrollEle = scrollDiv;\n this.scrollItems = scrollEle;\n };\n HScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n HScroll.prototype.getModuleName = function () {\n return 'hScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n HScroll.prototype.destroy = function () {\n var ele = this.element;\n ele.style.display = '';\n ele.classList.remove(CLS_ROOT);\n ele.classList.remove(CLS_DEVICE);\n var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n var overlay = selectAll('.' + CLS_OVERLAY, ele);\n [].slice.call(overlay).forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n ele.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (nav.length > 0) {\n detach(nav[0]);\n if (!isNullOrUndefined(nav[1])) {\n detach(nav[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the HScroll component.\n * When set to `true` , the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, HScroll will be enabled (false) or disabled (true).\n * @returns void.\n */\n HScroll.prototype.disable = function (value) {\n var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n value ? this.element.classList.add(CLS_DISABLE) : this.element.classList.remove(CLS_DISABLE);\n [].slice.call(navEles).forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n HScroll.prototype.createOverlay = function (element) {\n var id = element.id.concat('_nav');\n var rightOverlayEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_RIGHTOVERLAY });\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var rightEle = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n rightEle.appendChild(navItem);\n var leftEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_LEFTOVERLAY });\n if (this.ieCheck) {\n rightEle.classList.add('e-ie-align');\n }\n element.appendChild(rightOverlayEle);\n element.appendChild(rightEle);\n element.insertBefore(leftEle, element.firstChild);\n this.eventBinding([rightEle]);\n };\n HScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var nav = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n var navEle = this.createElement('div', { id: id.concat('_left'), className: clsLeft + ' ' + CLS_DISABLE });\n navEle.setAttribute('aria-disabled', 'true');\n var navLeftItem = this.createElement('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navEle.appendChild(navLeftItem);\n nav.appendChild(navItem);\n element.appendChild(nav);\n element.insertBefore(navEle, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navEle.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navEle]);\n };\n HScroll.prototype.onKeyPress = function (e) {\n var _this = this;\n if (e.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, e.target, true);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n HScroll.prototype.onKeyUp = function (e) {\n if (e.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n e.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n HScroll.prototype.eventBinding = function (ele) {\n var _this = this;\n [].slice.call(ele).forEach(function (el) {\n new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n el.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n });\n };\n HScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n HScroll.prototype.tabHoldHandler = function (e) {\n var _this = this;\n var trgt = e.originalEvent.target;\n trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDis = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDis, trgt, true);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n HScroll.prototype.contains = function (ele, className) {\n return ele.classList.contains(className);\n };\n HScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var element = this.scrollEle;\n var rootEle = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_HSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n scrollDis = -scrollDis;\n }\n var scrlLeft = element.scrollLeft;\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n if (classList.contains(CLS_NAVRIGHTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target, false);\n };\n HScroll.prototype.swipeHandler = function (e) {\n var swipeEle = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceX / (e.velocity * 10);\n }\n else {\n distance = e.distanceX / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Left') {\n swipeEle.scrollLeft += distance * step;\n }\n else if (e.swipeDirection === 'Right') {\n swipeEle.scrollLeft -= distance * step;\n }\n start -= 0.5;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollLeft += scrollVal;\n }\n else {\n this.scrollEle.scrollLeft -= scrollVal;\n }\n };\n HScroll.prototype.frameScrollRequest = function (scrollVal, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollVal, action);\n return;\n }\n if (!this.customStep) {\n [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n scrollVal -= el.offsetWidth;\n });\n }\n var animate = function () {\n var scrollValue;\n var scrollStep;\n if (_this.contains(_this.element, CLS_RTL) && _this.browserCheck) {\n scrollValue = -scrollVal;\n scrollStep = -step;\n }\n else {\n scrollValue = scrollVal;\n scrollStep = step;\n }\n if (scrollValue < step) {\n window.cancelAnimationFrame(scrollStep);\n }\n else {\n _this.scrollUpdating(scrollStep, action);\n scrollVal -= scrollStep;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.touchHandler = function (e) {\n var ele = this.scrollEle;\n var distance;\n distance = e.distanceX;\n if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n distance = -distance;\n }\n if (e.scrollDirection === 'Left') {\n ele.scrollLeft = ele.scrollLeft + distance;\n }\n else if (e.scrollDirection === 'Right') {\n ele.scrollLeft = ele.scrollLeft - distance;\n }\n };\n HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisable) ? removeDisable : addDisable;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisable)) {\n classList(arrowIcon, [CLS_NAVRIGHTARROW], [CLS_NAVLEFTARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVLEFTARROW], [CLS_NAVRIGHTARROW]);\n }\n }\n else {\n addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n HScroll.prototype.scrollHandler = function (e) {\n var target = e.target;\n var width = target.offsetWidth;\n var rootEle = this.element;\n var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n var leftOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n var rightOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n var scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\n }\n if (this.isDevice) {\n if (this.enableRtl && !(this.browserCheck || this.ieCheck)) {\n leftOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n rightOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n }\n if (scrollLeft < OVERLAY_MAXWID) {\n leftOverlay.style.width = scrollLeft + 'px';\n }\n else {\n leftOverlay.style.width = '40px';\n }\n if ((target.scrollWidth - Math.ceil(width + scrollLeft)) < OVERLAY_MAXWID) {\n rightOverlay.style.width = (target.scrollWidth - Math.ceil(width + scrollLeft)) + 'px';\n }\n else {\n rightOverlay.style.width = '40px';\n }\n }\n if (scrollLeft === 0) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n else {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n }\n else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n else {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n * @param {HScrollModel} newProp\n * @param {HScrollModel} oldProp\n * @returns void\n * @private\n */\n HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n this.setScrollState();\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], HScroll.prototype, \"scrollStep\", void 0);\n HScroll = __decorate([\n NotifyPropertyChanges\n ], HScroll);\n return HScroll;\n}(Component));\nexport { HScroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID, removeClass } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach, createElement as buildTag } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-vscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_VSCROLLBAR = 'e-vscroll-bar';\nvar CLS_VSCROLLCON = 'e-vscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVUPARROW = 'e-nav-up-arrow';\nvar CLS_NAVDOWNARROW = 'e-nav-down-arrow';\nvar CLS_VSCROLLNAV = 'e-scroll-nav';\nvar CLS_VSCROLLNAVUP = 'e-scroll-up-nav';\nvar CLS_VSCROLLNAVDOWN = 'e-scroll-down-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_UPOVERLAY = 'e-scroll-up-overlay';\nvar CLS_DOWNOVERLAY = 'e-scroll-down-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * VScroll module is introduces vertical scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs vertical scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n * <div id=\"scroll\"/>\n * <script>\n * var scrollObj = new VScroll();\n * scrollObj.appendTo(\"#scroll\");\n * </script>\n * ```\n */\nvar VScroll = /** @class */ (function (_super) {\n __extends(VScroll, _super);\n /**\n * Initializes a new instance of the VScroll class.\n * @param options - Specifies VScroll model properties as options.\n * @param element - Specifies the element for which vertical scrolling applies.\n */\n function VScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n VScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var ele = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (ele.id === '') {\n ele.id = getUniqueID('vscroll');\n this.uniqueId = true;\n }\n ele.style.display = 'block';\n if (this.enableRtl) {\n ele.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the vertical scroll rendering\n * @private\n */\n VScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollEventHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlayElement(this.element);\n }\n this.setScrollState();\n EventHandler.add(this.element, 'wheel', this.wheelEventHandler, this);\n };\n VScroll.prototype.setScrollState = function () {\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetHeight;\n this.customStep = false;\n }\n else {\n this.customStep = true;\n }\n };\n VScroll.prototype.initialize = function () {\n var scrollCnt = buildTag('div', { className: CLS_VSCROLLCON });\n var scrollBar = buildTag('div', { className: CLS_VSCROLLBAR });\n scrollBar.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollCnt.appendChild(ele_1);\n }\n scrollBar.appendChild(scrollCnt);\n ele.appendChild(scrollBar);\n scrollBar.style.overflowY = 'hidden';\n this.scrollEle = scrollBar;\n this.scrollItems = scrollCnt;\n };\n VScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n VScroll.prototype.getModuleName = function () {\n return 'vScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n VScroll.prototype.destroy = function () {\n var el = this.element;\n el.style.display = '';\n removeClass([this.element], [CLS_ROOT, CLS_DEVICE]);\n var navs = selectAll('.e-' + el.id + '_nav.' + CLS_VSCROLLNAV, el);\n var overlays = selectAll('.' + CLS_OVERLAY, el);\n [].slice.call(overlays).forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n el.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (navs.length > 0) {\n detach(navs[0]);\n if (!isNullOrUndefined(navs[1])) {\n detach(navs[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollEventHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the VScroll component.\n * When set to `true` , the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, VScroll will be enabled (false) or disabled (true).\n * @returns void.\n */\n VScroll.prototype.disable = function (value) {\n var navEle = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n value ? this.element.classList.add(CLS_DISABLE) : this.element.classList.remove(CLS_DISABLE);\n [].slice.call(navEle).forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n VScroll.prototype.createOverlayElement = function (element) {\n var id = element.id.concat('_nav');\n var downOverlayEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_DOWNOVERLAY });\n var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n var downEle = buildTag('div', { id: id.concat('down'), className: clsDown });\n var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n downEle.appendChild(navItem);\n var upEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_UPOVERLAY });\n if (this.ieCheck) {\n downEle.classList.add('e-ie-align');\n }\n element.appendChild(downOverlayEle);\n element.appendChild(downEle);\n element.insertBefore(upEle, element.firstChild);\n this.eventBinding([downEle]);\n };\n VScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n var nav = buildTag('div', { id: id.concat('_down'), className: clsDown });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsUp = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVUP);\n var navElement = buildTag('div', { id: id.concat('_up'), className: clsUp + ' ' + CLS_DISABLE });\n navElement.setAttribute('aria-disabled', 'true');\n var navUpItem = buildTag('div', { className: CLS_NAVUPARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navElement.appendChild(navUpItem);\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n element.insertBefore(navElement, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navElement.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navElement]);\n };\n VScroll.prototype.onKeyPress = function (ev) {\n var _this = this;\n if (ev.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, ev.target, true);\n };\n this.keyTimer = window.setTimeout(function () { timeoutFun_1(); }, 100);\n }\n };\n VScroll.prototype.onKeyUp = function (ev) {\n if (ev.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n ev.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n VScroll.prototype.eventBinding = function (element) {\n var _this = this;\n [].slice.call(element).forEach(function (ele) {\n new Touch(ele, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n ele.addEventListener('keydown', _this.onKeyPress.bind(_this));\n ele.addEventListener('keyup', _this.onKeyUp.bind(_this));\n ele.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n ele.addEventListener('touchend', _this.repeatScroll.bind(_this));\n ele.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(ele, 'click', _this.clickEventHandler, _this);\n });\n };\n VScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n VScroll.prototype.tabHoldHandler = function (ev) {\n var _this = this;\n var trgt = ev.originalEvent.target;\n trgt = this.contains(trgt, CLS_VSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDistance = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDistance, trgt, true);\n };\n this.timeout = window.setInterval(function () { timeoutFun(); }, 50);\n };\n VScroll.prototype.contains = function (element, className) {\n return element.classList.contains(className);\n };\n VScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var rootElement = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_VSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (classList.contains(CLS_NAVDOWNARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else if (classList.contains(CLS_NAVUPARROW)) {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n };\n VScroll.prototype.clickEventHandler = function (event) {\n this.eleScrolling(this.scrollStep, event.target, false);\n };\n VScroll.prototype.wheelEventHandler = function (e) {\n e.preventDefault();\n this.frameScrollRequest(this.scrollStep, (e.deltaY > 0 ? 'add' : ''), false);\n };\n VScroll.prototype.swipeHandler = function (e) {\n var swipeElement = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceY / (e.velocity * 10);\n }\n else {\n distance = e.distanceY / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Up') {\n swipeElement.scrollTop += distance * step;\n }\n else if (e.swipeDirection === 'Down') {\n swipeElement.scrollTop -= distance * step;\n }\n start -= 0.02;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n VScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollTop += scrollVal;\n }\n else {\n this.scrollEle.scrollTop -= scrollVal;\n }\n };\n VScroll.prototype.frameScrollRequest = function (scrollValue, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollValue, action);\n return;\n }\n if (!this.customStep) {\n [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n scrollValue -= el.offsetHeight;\n });\n }\n var animate = function () {\n if (scrollValue < step) {\n window.cancelAnimationFrame(step);\n }\n else {\n _this.scrollUpdating(step, action);\n scrollValue -= step;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n VScroll.prototype.touchHandler = function (e) {\n var el = this.scrollEle;\n var distance;\n distance = e.distanceY;\n if (e.scrollDirection === 'Up') {\n el.scrollTop = el.scrollTop + distance;\n }\n else if (e.scrollDirection === 'Down') {\n el.scrollTop = el.scrollTop - distance;\n }\n };\n VScroll.prototype.arrowDisabling = function (addDisableCls, removeDisableCls) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisableCls) ? removeDisableCls : addDisableCls;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisableCls)) {\n classList(arrowIcon, [CLS_NAVDOWNARROW], [CLS_NAVUPARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVUPARROW], [CLS_NAVDOWNARROW]);\n }\n }\n else {\n addDisableCls.classList.add(CLS_DISABLE);\n addDisableCls.setAttribute('aria-disabled', 'true');\n addDisableCls.removeAttribute('tabindex');\n removeDisableCls.classList.remove(CLS_DISABLE);\n removeDisableCls.setAttribute('aria-disabled', 'false');\n removeDisableCls.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n VScroll.prototype.scrollEventHandler = function (e) {\n var target = e.target;\n var height = target.offsetHeight;\n var rootEle = this.element;\n var navUpEle = this.element.querySelector('.' + CLS_VSCROLLNAVUP);\n var navDownEle = this.element.querySelector('.' + CLS_VSCROLLNAVDOWN);\n var upOverlay = this.element.querySelector('.' + CLS_UPOVERLAY);\n var downOverlay = this.element.querySelector('.' + CLS_DOWNOVERLAY);\n var scrollTop = target.scrollTop;\n if (scrollTop <= 0) {\n scrollTop = -scrollTop;\n }\n if (this.isDevice) {\n if (scrollTop < OVERLAY_MAXWID) {\n upOverlay.style.height = scrollTop + 'px';\n }\n else {\n upOverlay.style.height = '40px';\n }\n if ((target.scrollHeight - Math.ceil(height + scrollTop)) < OVERLAY_MAXWID) {\n downOverlay.style.height = (target.scrollHeight - Math.ceil(height + scrollTop)) + 'px';\n }\n else {\n downOverlay.style.height = '40px';\n }\n }\n if (scrollTop === 0) {\n this.arrowDisabling(navUpEle, navDownEle);\n }\n else if (Math.ceil(height + scrollTop + .1) >= target.scrollHeight) {\n this.arrowDisabling(navDownEle, navUpEle);\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_VSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n * @param {VScrollModel} newProp\n * @param {VScrollModel} oldProp\n * @returns void\n * @private\n */\n VScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n this.setScrollState();\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], VScroll.prototype, \"scrollStep\", void 0);\n VScroll = __decorate([\n NotifyPropertyChanges\n ], VScroll);\n return VScroll;\n}(Component));\nexport { VScroll };\n","import { select, detach } from '@syncfusion/ej2-base';\nimport { VScroll } from './v-scroll';\nimport { HScroll } from './h-scroll';\n/**\n * Used to add scroll in menu.\n * @hidden\n */\nexport function addScrolling(createElement, container, content, scrollType, enableRtl, offset) {\n var containerOffset;\n var contentOffset;\n if (scrollType === 'vscroll') {\n containerOffset = offset || container.getBoundingClientRect().height;\n contentOffset = content.getBoundingClientRect().height;\n }\n else {\n containerOffset = container.getBoundingClientRect().width;\n contentOffset = content.getBoundingClientRect().width;\n }\n if (containerOffset < contentOffset) {\n var scrollEle = createElement('div', { className: 'e-menu-' + scrollType });\n container.appendChild(scrollEle);\n scrollEle.appendChild(content);\n if (offset) {\n scrollEle.style.overflow = 'hidden';\n scrollEle.style.height = offset + 'px';\n }\n else {\n scrollEle.style.maxHeight = container.style.maxHeight;\n container.style.overflow = 'hidden';\n }\n var scrollObj = void 0;\n if (scrollType === 'vscroll') {\n scrollObj = new VScroll({ enableRtl: enableRtl }, scrollEle);\n scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetHeight / 2;\n }\n else {\n scrollObj = new HScroll({ enableRtl: enableRtl }, scrollEle);\n scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetWidth;\n }\n return scrollEle;\n }\n else {\n return content;\n }\n}\n/**\n * Used to destroy the scroll option.\n * @hidden\n */\nexport function destroyScroll(scrollObj, element, skipEle) {\n if (scrollObj) {\n var menu = select('.e-menu-parent', element);\n if (menu) {\n if (!skipEle || skipEle === menu) {\n scrollObj.destroy();\n element.parentElement.appendChild(menu);\n detach(element);\n }\n }\n else {\n scrollObj.destroy();\n detach(element);\n }\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents, Touch } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { Browser, Collection, setValue, getValue, getUniqueID, getInstance, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { select, selectAll, closest, detach, append, rippleEffect, isVisible, Complex, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { getZindexPartial, calculatePosition, isCollide, fit, Popup } from '@syncfusion/ej2-popups';\nimport { updateBlazorTemplate, resetBlazorTemplate, blazorTemplates, extend, SanitizeHtmlHelper, isBlazor } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nimport { addScrolling, destroyScroll } from '../common/menu-scroll';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar DOWNARROW = 'downarrow';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar HOME = 'home';\nvar END = 'end';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\nvar RTL = 'e-rtl';\nvar POPUP = 'e-menu-popup';\nvar TEMPLATE_PROPERTY = 'Template';\n/**\n * Configures the field options of the Menu.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"itemId\", void 0);\n __decorate([\n Property('parentId')\n ], FieldSettings.prototype, \"parentId\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('url')\n ], FieldSettings.prototype, \"url\", void 0);\n __decorate([\n Property('separator')\n ], FieldSettings.prototype, \"separator\", void 0);\n __decorate([\n Property('items')\n ], FieldSettings.prototype, \"children\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Specifies menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n __extends(MenuItem, _super);\n function MenuItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MenuItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], MenuItem.prototype, \"separator\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuItem.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"url\", void 0);\n return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * Animation configuration settings.\n */\nvar MenuAnimationSettings = /** @class */ (function (_super) {\n __extends(MenuAnimationSettings, _super);\n function MenuAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], MenuAnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], MenuAnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], MenuAnimationSettings.prototype, \"easing\", void 0);\n return MenuAnimationSettings;\n}(ChildProperty));\nexport { MenuAnimationSettings };\n/**\n * @private\n * Base class for Menu and ContextMenu components.\n */\nvar MenuBase = /** @class */ (function (_super) {\n __extends(MenuBase, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function MenuBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.navIdx = [];\n _this.animation = new Animation({});\n _this.isTapHold = false;\n _this.tempItem = [];\n return _this;\n }\n /**\n * Initialized third party configuration settings.\n * @private\n */\n MenuBase.prototype.preRender = function () {\n if (!this.isMenu) {\n var ul = void 0;\n if (this.element.tagName === 'EJS-CONTEXTMENU') {\n ul = this.createElement('ul', {\n id: getUniqueID(this.getModuleName()), className: 'e-control e-lib e-' + this.getModuleName()\n });\n var ejInst = getValue('ej2_instances', this.element);\n removeClass([this.element], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n this.clonedElement = this.element;\n this.element = ul;\n setValue('ej2_instances', ejInst, this.element);\n }\n else {\n ul = this.createElement('ul', { id: getUniqueID(this.getModuleName()) });\n append([].slice.call(this.element.cloneNode(true).children), ul);\n var refEle = this.element.nextElementSibling;\n refEle ? this.element.parentElement.insertBefore(ul, refEle) : this.element.parentElement.appendChild(ul);\n this.clonedElement = ul;\n }\n this.clonedElement.style.display = 'none';\n }\n if (this.element.tagName === 'EJS-MENU') {\n var ele = this.element;\n var ejInstance = getValue('ej2_instances', ele);\n var ul = this.createElement('ul');\n var wrapper = this.createElement('EJS-MENU', { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n ul.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = ul;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.clonedElement = wrapper;\n this.element = ele;\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n MenuBase.prototype.render = function () {\n this.initialize();\n this.renderItems();\n if (this.isMenu && this.template && isBlazor()) {\n var menuTemplateId = this.element.id + TEMPLATE_PROPERTY;\n resetBlazorTemplate(menuTemplateId, TEMPLATE_PROPERTY);\n if (Object.keys(blazorTemplates).length) {\n extend(this.tempItem, blazorTemplates[menuTemplateId], [], true);\n }\n updateBlazorTemplate(menuTemplateId, TEMPLATE_PROPERTY, this);\n }\n this.wireEvents();\n this.renderComplete();\n };\n MenuBase.prototype.initialize = function () {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n if (this.isMenu) {\n this.element.parentElement.insertBefore(wrapper, this.element);\n }\n else {\n document.body.appendChild(wrapper);\n }\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n wrapper.appendChild(this.element);\n if (this.isMenu && this.hamburgerMode) {\n if (!this.target) {\n this.createHeaderContainer(wrapper);\n }\n }\n };\n MenuBase.prototype.renderItems = function () {\n if (!this.items.length) {\n var items = ListBase.createJsonFromElement(this.element, { fields: { child: 'items' } });\n this.setProperties({ items: items }, true);\n if (isBlazor()) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n }\n var ul = this.createItems(this.items);\n append(Array.prototype.slice.call(ul.children), this.element);\n this.element.classList.add('e-menu-parent');\n if (this.isMenu) {\n if (!this.hamburgerMode && this.element.classList.contains('e-vertical')) {\n this.setBlankIconStyle(this.element);\n }\n if (this.enableScrolling) {\n var wrapper = this.getWrapper();\n this.element.classList.contains('e-vertical') ?\n addScrolling(this.createElement, wrapper, this.element, 'vscroll', this.enableRtl)\n : addScrolling(this.createElement, wrapper, this.element, 'hscroll', this.enableRtl);\n }\n }\n };\n MenuBase.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (this.isMenu) {\n EventHandler.add(target, 'click', this.menuHeaderClickHandler, this);\n }\n else {\n if (Browser.isIos) {\n new Touch(target, { tapHold: this.touchHandler.bind(this) });\n }\n else {\n EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n }\n }\n }\n this.targetElement = target;\n if (!this.isMenu) {\n EventHandler.add(this.targetElement, 'scroll', this.scrollHandler, this);\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);\n }\n }\n }\n if (!Browser.isDevice) {\n this.delegateMoverHandler = this.moverHandler.bind(this);\n this.delegateMouseDownHandler = this.mouseDownHandler.bind(this);\n EventHandler.add(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler, this);\n EventHandler.add(document, 'mousedown', this.delegateMouseDownHandler, this);\n }\n this.delegateClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.delegateClickHandler, this);\n this.wireKeyboardEvent(wrapper);\n this.rippleFn = rippleEffect(wrapper, { selector: '.' + ITEM });\n };\n MenuBase.prototype.wireKeyboardEvent = function (element) {\n var keyConfigs = {\n downarrow: DOWNARROW,\n uparrow: UPARROW,\n enter: ENTER,\n leftarrow: LEFTARROW,\n rightarrow: RIGHTARROW,\n escape: ESCAPE\n };\n if (this.isMenu) {\n keyConfigs.home = HOME;\n keyConfigs.end = END;\n }\n new KeyboardEvents(element, {\n keyAction: this.keyBoardHandler.bind(this),\n keyConfigs: keyConfigs\n });\n };\n MenuBase.prototype.mouseDownHandler = function (e) {\n if (closest(e.target, '.e-' + this.getModuleName() + '-wrapper') !== this.getWrapper()\n && (!closest(e.target, '.e-' + this.getModuleName() + '-popup'))) {\n this.closeMenu(this.isMenu ? null : this.navIdx.length, e);\n }\n };\n MenuBase.prototype.keyBoardHandler = function (e) {\n var actionName = '';\n var trgt = e.target;\n var actionNeeded = this.isMenu && !this.hamburgerMode && !this.element.classList.contains('e-vertical')\n && this.navIdx.length < 1;\n e.preventDefault();\n if (this.enableScrolling && e.keyCode === 13 && trgt.classList.contains('e-scroll-nav')) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [closest(trgt, '.e-' + this.getModuleName() + '-wrapper')]);\n }\n if (actionNeeded) {\n switch (e.action) {\n case RIGHTARROW:\n actionName = RIGHTARROW;\n e.action = DOWNARROW;\n break;\n case LEFTARROW:\n actionName = LEFTARROW;\n e.action = UPARROW;\n break;\n case DOWNARROW:\n actionName = DOWNARROW;\n e.action = RIGHTARROW;\n break;\n case UPARROW:\n actionName = UPARROW;\n e.action = '';\n break;\n }\n }\n else if (this.enableRtl) {\n switch (e.action) {\n case LEFTARROW:\n actionNeeded = true;\n actionName = LEFTARROW;\n e.action = RIGHTARROW;\n break;\n case RIGHTARROW:\n actionNeeded = true;\n actionName = RIGHTARROW;\n e.action = LEFTARROW;\n break;\n }\n }\n switch (e.action) {\n case DOWNARROW:\n case UPARROW:\n case END:\n case HOME:\n this.upDownKeyHandler(e);\n break;\n case RIGHTARROW:\n this.rightEnterKeyHandler(e);\n break;\n case LEFTARROW:\n this.leftEscKeyHandler(e);\n break;\n case ENTER:\n if (this.hamburgerMode && trgt.tagName === 'SPAN' && trgt.classList.contains('e-menu-icon')) {\n this.menuHeaderClickHandler(e);\n }\n else {\n this.rightEnterKeyHandler(e);\n }\n break;\n case ESCAPE:\n this.leftEscKeyHandler(e);\n break;\n }\n if (actionNeeded) {\n e.action = actionName;\n }\n };\n MenuBase.prototype.upDownKeyHandler = function (e) {\n var cul = this.getUlByNavIdx();\n var defaultIdx = (e.action === DOWNARROW || e.action === HOME) ? 0 : cul.childElementCount - 1;\n var fliIdx = defaultIdx;\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n if (e.action !== END && e.action !== HOME) {\n fliIdx = this.getIdx(cul, fli);\n }\n fli.classList.remove(FOCUSED);\n if (e.action !== END && e.action !== HOME) {\n e.action === DOWNARROW ? fliIdx++ : fliIdx--;\n if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n fliIdx = defaultIdx;\n }\n }\n }\n var cli = cul.children[fliIdx];\n fliIdx = this.isValidLI(cli, fliIdx, e.action);\n cul.children[fliIdx].classList.add(FOCUSED);\n cul.children[fliIdx].focus();\n };\n MenuBase.prototype.isValidLI = function (cli, index, action) {\n var wrapper = this.getWrapper();\n var cul = this.getUlByNavIdx();\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n ((action === DOWNARROW) || (action === RIGHTARROW)) ? index++ : index--;\n }\n cli = cul.children[index];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n index = this.isValidLI(cli, index, action);\n }\n return index;\n };\n MenuBase.prototype.getUlByNavIdx = function (navIdxLen) {\n if (navIdxLen === void 0) { navIdxLen = this.navIdx.length; }\n if (this.isMenu) {\n var popup = [this.getWrapper()].concat([].slice.call(selectAll('.' + POPUP)))[navIdxLen];\n return isNullOrUndefined(popup) ? null : select('.e-menu-parent', popup);\n }\n else {\n return this.getWrapper().children[navIdxLen];\n }\n };\n MenuBase.prototype.rightEnterKeyHandler = function (e) {\n var eventArgs;\n var cul = this.getUlByNavIdx();\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n var fliIdx = this.getIdx(cul, fli);\n var navIdx = this.navIdx.concat(fliIdx);\n var index = void 0;\n var item = this.getItem(navIdx);\n if (item.items.length) {\n this.navIdx.push(fliIdx);\n this.keyType = 'right';\n this.action = e.action;\n this.openMenu(fli, item, -1, -1, e);\n }\n else {\n if (e.action === ENTER) {\n if (this.isMenu && this.navIdx.length === 0) {\n this.removeLIStateByClass([SELECTED], [this.getWrapper()]);\n }\n else {\n fli.classList.remove(FOCUSED);\n }\n fli.classList.add(SELECTED);\n eventArgs = { element: fli, item: item, event: e };\n this.trigger('select', eventArgs);\n this.closeMenu(null, e);\n }\n }\n }\n };\n MenuBase.prototype.leftEscKeyHandler = function (e) {\n if (this.navIdx.length) {\n this.keyType = 'left';\n this.closeMenu(this.navIdx.length, e);\n }\n else {\n if (e.action === ESCAPE) {\n this.closeMenu(null, e);\n }\n }\n };\n MenuBase.prototype.scrollHandler = function (e) {\n this.closeMenu(null, e);\n };\n MenuBase.prototype.touchHandler = function (e) {\n this.isTapHold = true;\n this.cmenuHandler(e.originalEvent);\n };\n MenuBase.prototype.cmenuHandler = function (e) {\n e.preventDefault();\n this.isCMenu = true;\n this.pageX = e.changedTouches ? e.changedTouches[0].pageX + 1 : e.pageX + 1;\n this.pageY = e.changedTouches ? e.changedTouches[0].pageY + 1 : e.pageY + 1;\n this.closeMenu(null, e);\n if (this.isCMenu) {\n if (this.canOpen(e.target)) {\n this.openMenu(null, null, this.pageY, this.pageX, e);\n }\n this.isCMenu = false;\n }\n };\n // tslint:disable-next-line:max-func-body-length\n MenuBase.prototype.closeMenu = function (ulIndex, e, isIterated) {\n var _this = this;\n if (ulIndex === void 0) { ulIndex = 0; }\n if (e === void 0) { e = null; }\n if (this.isMenuVisible()) {\n var sli = void 0;\n var ul_1;\n var item_1;\n var wrapper = this.getWrapper();\n var beforeCloseArgs = void 0;\n var items_1;\n var popups = this.getPopups();\n var isClose = false;\n var cnt = this.isMenu ? popups.length + 1 : wrapper.childElementCount;\n ul_1 = this.isMenu && cnt !== 1 ? select('.e-ul', popups[cnt - 2])\n : selectAll('.e-menu-parent', wrapper)[cnt - 1];\n if (this.isMenu && ul_1.classList.contains('e-menu')) {\n sli = this.getLIByClass(ul_1, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n isClose = true;\n }\n if (!isClose) {\n var liElem_1 = e && e.target && this.getLI(e.target);\n item_1 = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items_1 = item_1 ? item_1.items : this.items;\n beforeCloseArgs = { element: ul_1, parentItem: this.isMenu && isBlazor() ? this.getMenuItemModel(item_1, ulIndex) : item_1,\n items: items_1, event: e, cancel: false, isFocused: true };\n this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n var popupEle;\n var closeArgs;\n var popupId = '';\n var popupObj;\n var isOpen = !observedCloseArgs.cancel;\n if (isOpen || _this.isCMenu) {\n if (_this.isMenu) {\n popupEle = closest(ul_1, '.' + POPUP);\n if (_this.hamburgerMode) {\n popupEle.parentElement.style.minHeight = '';\n closest(ul_1, '.e-menu-item').setAttribute('aria-expanded', 'false');\n }\n _this.unWireKeyboardEvent(popupEle);\n destroyScroll(getInstance(popupEle.children[0], VScroll), popupEle.children[0]);\n popupObj = getInstance(popupEle, Popup);\n popupObj.hide();\n popupId = popupEle.id;\n popupObj.destroy();\n detach(popupEle);\n }\n else {\n _this.toggleAnimation(ul_1, false);\n }\n closeArgs = { element: ul_1, parentItem: item_1, items: items_1 };\n _this.trigger('onClose', closeArgs);\n _this.navIdx.pop();\n }\n _this.updateReactTemplate();\n var trgtliId;\n var closedLi;\n var trgtLi;\n var trgtpopUp = _this.getWrapper() && _this.getUlByNavIdx();\n if (_this.isCMenu) {\n if (_this.canOpen(e.target)) {\n _this.openMenu(null, null, _this.pageY, _this.pageX, e);\n }\n _this.isCMenu = false;\n }\n if (_this.isMenu && trgtpopUp && popupId.length) {\n trgtliId = new RegExp('(.*)-ej2menu-' + _this.element.id + '-popup').exec(popupId)[1];\n closedLi = trgtpopUp.querySelector('[id=\"' + trgtliId + '\"]');\n trgtLi = (liElem_1 && trgtpopUp.querySelector('[id=\"' + liElem_1.id + '\"]'));\n }\n var submenus = liElem_1 && liElem_1.querySelectorAll('.e-menu-item');\n if (isOpen && _this.hamburgerMode && ulIndex && !(submenus.length)) {\n _this.afterCloseMenu(e);\n }\n else if (isOpen && !_this.hamburgerMode && _this.navIdx.length && closedLi && !trgtLi) {\n var ele = (e && e.target.classList.contains('e-vscroll'))\n ? closest(e.target, '.e-menu-wrapper') : null;\n if (ele) {\n ele = ele.querySelector('.e-menu-item');\n if (_this.showItemOnClick || (ele && _this.getIndex(ele.id, true).length <= _this.navIdx.length)) {\n _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e, true);\n }\n }\n else {\n _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e);\n }\n }\n else if (isOpen && !isIterated && !ulIndex && ((_this.hamburgerMode && _this.navIdx.length) ||\n _this.navIdx.length === 1)) {\n _this.closeMenu(null, e);\n }\n else if (isOpen && isNullOrUndefined(ulIndex) && _this.navIdx.length) {\n _this.closeMenu(null, e);\n }\n else if (isOpen && !_this.isMenu && !ulIndex && _this.navIdx.length === 0 && !_this.isMenusClosed) {\n _this.isMenusClosed = true;\n _this.closeMenu(0, e);\n }\n else if (isOpen && _this.isMenu && e && e.target &&\n _this.navIdx.length !== 0 && closest(e.target, '.e-menu-parent.e-control')) {\n _this.closeMenu(0, e);\n }\n else {\n if (isOpen && (_this.keyType === 'right' || _this.keyType === 'click')) {\n _this.afterCloseMenu(e);\n }\n else {\n var cul = _this.getUlByNavIdx();\n var sli_1 = _this.getLIByClass(cul, SELECTED);\n if (sli_1) {\n sli_1.setAttribute('aria-expanded', 'false');\n sli_1.classList.remove(SELECTED);\n if (observedCloseArgs.isFocused && liElem_1) {\n sli_1.classList.add(FOCUSED);\n sli_1.focus();\n }\n }\n if (!isOpen && _this.hamburgerMode && liElem_1 && liElem_1.getAttribute('aria-expanded') === 'false' &&\n liElem_1.getAttribute('aria-haspopup') === 'true') {\n if (closest(liElem_1, '.e-menu-parent.e-control')) {\n _this.navIdx = [];\n }\n else {\n _this.navIdx.pop();\n }\n _this.navIdx.push(_this.cliIdx);\n var item_2 = _this.getItem(_this.navIdx);\n liElem_1.setAttribute('aria-expanded', 'true');\n _this.openMenu(liElem_1, item_2, -1, -1, e);\n }\n }\n }\n _this.removeStateWrapper();\n });\n }\n }\n };\n MenuBase.prototype.updateReactTemplate = function () {\n // tslint:disable\n if (this.isReact && this.template && this.navIdx.length === 0) {\n // tslint:disable\n var portals = this.portals.splice(0, this.items.length);\n this.clearTemplate(['template']);\n // tslint:disable\n this.portals = portals;\n this.renderReactTemplates();\n }\n };\n MenuBase.prototype.getMenuItemModel = function (item, level) {\n if (isNullOrUndefined(item)) {\n return null;\n }\n if (isNullOrUndefined(level)) {\n level = 0;\n }\n var fields = this.getFields(level);\n return { text: item[fields.text], id: item[fields.id], items: item[fields.child], separator: item[fields.separator],\n iconCss: item[fields.iconCss], url: item[fields.url] };\n };\n MenuBase.prototype.getPopups = function () {\n var _this = this;\n var popups = [];\n [].slice.call(document.querySelectorAll('.' + POPUP)).forEach(function (elem) {\n if (_this.getIndex(elem.querySelector('.' + ITEM).id, true).length) {\n popups.push(elem);\n }\n });\n return popups;\n };\n MenuBase.prototype.isMenuVisible = function () {\n return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n };\n MenuBase.prototype.canOpen = function (target) {\n var canOpen = true;\n if (this.filter) {\n canOpen = false;\n var filter = this.filter.split(' ');\n for (var i = 0, len = filter.length; i < len; i++) {\n if (closest(target, '.' + filter[i])) {\n canOpen = true;\n break;\n }\n }\n }\n return canOpen;\n };\n MenuBase.prototype.openMenu = function (li, item, top, left, e, target) {\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (e === void 0) { e = null; }\n if (target === void 0) { target = this.targetElement; }\n var eventArgs;\n var wrapper = this.getWrapper();\n this.lItem = li;\n var elemId = this.element.id !== '' ? this.element.id : 'menu';\n this.isMenusClosed = false;\n if (isNullOrUndefined(top)) {\n top = -1;\n }\n if (isNullOrUndefined(left)) {\n left = -1;\n }\n if (li) {\n this.uList = this.createItems(item[this.getField('children', this.navIdx.length - 1)]);\n if (!this.isMenu && Browser.isDevice) {\n wrapper.lastChild.style.display = 'none';\n var data = {\n text: item[this.getField('text')].toString(), iconCss: ICONS + ' e-previous'\n };\n var hdata = new MenuItem(this.items[0], 'items', data, true);\n var hli = this.createItems([hdata]).children[0];\n hli.classList.add(HEADER);\n this.uList.insertBefore(hli, this.uList.children[0]);\n }\n if (this.isMenu) {\n this.popupWrapper = this.createElement('div', {\n className: 'e-' + this.getModuleName() + '-wrapper ' + POPUP, id: li.id + '-ej2menu-' + elemId + '-popup'\n });\n if (this.hamburgerMode) {\n top = li.offsetHeight;\n li.appendChild(this.popupWrapper);\n }\n else {\n document.body.appendChild(this.popupWrapper);\n }\n this.isNestedOrVertical = this.element.classList.contains('e-vertical') || this.navIdx.length !== 1;\n this.popupObj = this.generatePopup(this.popupWrapper, this.uList, li, this.isNestedOrVertical);\n if (this.template) {\n this.renderReactTemplates();\n }\n if (this.hamburgerMode) {\n this.calculateIndentSize(this.uList, li);\n }\n else {\n if (this.cssClass) {\n addClass([this.popupWrapper], this.cssClass.split(' '));\n }\n this.popupObj.hide();\n }\n this.triggerBeforeOpen(li, this.uList, item, e, 0, 0, 'menu');\n }\n else {\n this.uList.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(this.uList);\n this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n }\n }\n else {\n this.uList = this.element;\n this.uList.style.zIndex = getZindexPartial(target ? target : this.element).toString();\n this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n }\n if (this.isMenu && this.template && isBlazor()) {\n var menuTemplateId = this.element.id + TEMPLATE_PROPERTY;\n if (Object.keys(blazorTemplates).length) {\n var itemFromBlazorTemplate = blazorTemplates[menuTemplateId];\n this.tempItem = this.tempItem.concat(itemFromBlazorTemplate);\n blazorTemplates[menuTemplateId] = this.tempItem;\n }\n updateBlazorTemplate(menuTemplateId, TEMPLATE_PROPERTY, this);\n }\n };\n MenuBase.prototype.calculateIndentSize = function (ul, li) {\n var liStyle = getComputedStyle(li);\n var liIndent = parseInt(liStyle.textIndent, 10);\n if (this.navIdx.length < 2 && !li.classList.contains('e-blankicon')) {\n liIndent *= 2;\n }\n else {\n liIndent += (liIndent / 4);\n }\n ul.style.textIndent = liIndent + 'px';\n var blankIconElem = ul.querySelectorAll('.e-blankicon');\n if (blankIconElem && blankIconElem.length) {\n var menuIconElem = ul.querySelector('.e-menu-icon');\n var menuIconElemStyle = getComputedStyle(menuIconElem);\n var blankIconIndent = (parseInt(menuIconElemStyle.marginRight, 10) + menuIconElem.offsetWidth + liIndent);\n for (var i = 0; i < blankIconElem.length; i++) {\n blankIconElem[i].style.textIndent = blankIconIndent + 'px';\n }\n }\n };\n MenuBase.prototype.generatePopup = function (popupWrapper, ul, li, isNestedOrVertical) {\n var _this = this;\n var popupObj = new Popup(popupWrapper, {\n actionOnScroll: this.hamburgerMode ? 'none' : 'reposition',\n relateTo: li,\n collision: this.hamburgerMode ? { X: 'none', Y: 'none' } : { X: isNestedOrVertical ||\n this.enableRtl ? 'none' : 'flip', Y: 'fit' },\n position: (isNestedOrVertical && !this.hamburgerMode) ? { X: 'right', Y: 'top' } : { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n enableRtl: this.enableRtl,\n content: ul,\n open: function () {\n var scrollEle = select('.e-menu-vscroll', popupObj.element);\n if (scrollEle) {\n scrollEle.style.height = 'inherit';\n scrollEle.style.maxHeight = '';\n }\n var ul = select('.e-ul', popupObj.element);\n popupObj.element.style.maxHeight = '';\n ul.focus();\n _this.triggerOpen(ul);\n }\n });\n return popupObj;\n };\n MenuBase.prototype.createHeaderContainer = function (wrapper) {\n wrapper = wrapper || this.getWrapper();\n var spanElem = this.createElement('span', { className: 'e-' + this.getModuleName() + '-header' });\n var tempTitle = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.title) : this.title;\n var spanTitle = this.createElement('span', {\n className: 'e-' + this.getModuleName() + '-title', innerHTML: tempTitle\n });\n var spanIcon = this.createElement('span', {\n className: 'e-icons e-' + this.getModuleName() + '-icon', attrs: { 'tabindex': '0' }\n });\n spanElem.appendChild(spanTitle);\n spanElem.appendChild(spanIcon);\n wrapper.insertBefore(spanElem, this.element);\n };\n MenuBase.prototype.openHamburgerMenu = function (e) {\n if (this.hamburgerMode) {\n var eventArgs = void 0;\n this.triggerBeforeOpen(null, this.element, null, e, 0, 0, 'hamburger');\n }\n };\n MenuBase.prototype.closeHamburgerMenu = function (e) {\n var _this = this;\n if (this.hamburgerMode) {\n var beforeCloseArgs = void 0;\n beforeCloseArgs = { element: this.element, parentItem: null, event: e, items: this.items, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedHamburgerCloseArgs) {\n if (!observedHamburgerCloseArgs.cancel) {\n _this.closeMenu(null, e);\n _this.element.classList.add('e-hide-menu');\n _this.trigger('onClose', { element: _this.element, parentItem: null, items: _this.items });\n }\n });\n }\n };\n MenuBase.prototype.callFit = function (element, x, y, top, left) {\n return fit(element, null, { X: x, Y: y }, { top: top, left: left });\n };\n MenuBase.prototype.triggerBeforeOpen = function (li, ul, item, e, top, left, type) {\n var _this = this;\n var navIdx = this.getIndex(li ? li.id : null, true);\n var items = li ? item[this.getField('children', this.navIdx.length - 1)] : this.items;\n var eventArgs = {\n element: ul, items: items, parentItem: this.isMenu && isBlazor() ? this.getMenuItemModel(item, this.navIdx.length - 1) :\n item, event: e, cancel: false, top: top, left: left\n };\n var menuType = type;\n var collide;\n this.trigger('beforeOpen', eventArgs, function (observedOpenArgs) {\n switch (menuType) {\n case 'menu':\n if (!_this.hamburgerMode) {\n _this.top = observedOpenArgs.top;\n _this.left = observedOpenArgs.left;\n }\n _this.popupWrapper.style.display = 'block';\n if (!_this.hamburgerMode) {\n _this.popupWrapper.style.maxHeight = _this.popupWrapper.getBoundingClientRect().height + 'px';\n if (_this.enableScrolling) {\n addScrolling(_this.createElement, _this.popupWrapper, _this.uList, 'vscroll', _this.enableRtl);\n }\n _this.checkScrollOffset(e);\n }\n if (!_this.hamburgerMode && !_this.left && !_this.top) {\n _this.popupObj.refreshPosition(_this.lItem, true);\n _this.left = parseInt(_this.popupWrapper.style.left, 10);\n _this.top = parseInt(_this.popupWrapper.style.top, 10);\n if (_this.enableRtl) {\n _this.left =\n _this.isNestedOrVertical ? _this.left - _this.popupWrapper.offsetWidth - _this.lItem.parentElement.offsetWidth + 2\n : _this.left - _this.popupWrapper.offsetWidth + _this.lItem.offsetWidth;\n }\n collide = isCollide(_this.popupWrapper, null, _this.left, _this.top);\n if ((_this.isNestedOrVertical || _this.enableRtl) && (collide.indexOf('right') > -1\n || collide.indexOf('left') > -1)) {\n _this.popupObj.collision.X = 'none';\n var offWidth = closest(_this.lItem, '.e-' + _this.getModuleName() + '-wrapper').offsetWidth;\n _this.left =\n _this.enableRtl ? calculatePosition(_this.lItem, _this.isNestedOrVertical ? 'right' : 'left', 'top').left\n : _this.left - _this.popupWrapper.offsetWidth - offWidth + 2;\n }\n collide = isCollide(_this.popupWrapper, null, _this.left, _this.top);\n if (collide.indexOf('left') > -1 || collide.indexOf('right') > -1) {\n _this.left = _this.callFit(_this.popupWrapper, true, false, _this.top, _this.left).left;\n }\n _this.popupWrapper.style.left = _this.left + 'px';\n }\n else {\n _this.popupObj.collision = { X: 'none', Y: 'none' };\n }\n _this.popupWrapper.style.display = '';\n break;\n case 'none':\n _this.top = observedOpenArgs.top;\n _this.left = observedOpenArgs.left;\n break;\n case 'hamburger':\n if (!observedOpenArgs.cancel) {\n _this.element.classList.remove('e-hide-menu');\n _this.triggerOpen(_this.element);\n }\n break;\n }\n if (menuType !== 'hamburger') {\n if (observedOpenArgs.cancel) {\n if (_this.isMenu) {\n _this.popupObj.destroy();\n detach(_this.popupWrapper);\n }\n else if (ul.className.indexOf('e-ul') > -1) {\n detach(ul);\n }\n _this.navIdx.pop();\n }\n else {\n if (_this.isMenu) {\n if (_this.hamburgerMode) {\n _this.popupWrapper.style.top = _this.top + 'px';\n _this.popupWrapper.style.left = 0 + 'px';\n _this.toggleAnimation(_this.popupWrapper);\n }\n else {\n _this.setBlankIconStyle(_this.popupWrapper);\n _this.wireKeyboardEvent(_this.popupWrapper);\n rippleEffect(_this.popupWrapper, { selector: '.' + ITEM });\n _this.popupWrapper.style.left = _this.left + 'px';\n _this.popupWrapper.style.top = _this.top + 'px';\n var animationOptions = _this.animationSettings.effect !== 'None' ? {\n name: _this.animationSettings.effect, duration: _this.animationSettings.duration,\n timingFunction: _this.animationSettings.easing\n } : null;\n _this.popupObj.show(animationOptions, _this.lItem);\n }\n }\n else {\n _this.setBlankIconStyle(_this.uList);\n _this.setPosition(_this.lItem, _this.uList, _this.top, _this.left);\n _this.toggleAnimation(_this.uList);\n }\n }\n }\n if (_this.keyType === 'right') {\n var cul = _this.getUlByNavIdx();\n li.classList.remove(FOCUSED);\n var index = void 0;\n if (_this.isMenu && _this.navIdx.length === 1) {\n _this.removeLIStateByClass([SELECTED], [_this.getWrapper()]);\n }\n li.classList.add(SELECTED);\n if (_this.action === ENTER) {\n var eventArgs_1 = { element: li, item: item, event: e };\n _this.trigger('select', eventArgs_1);\n }\n li.focus();\n cul = _this.getUlByNavIdx();\n index = _this.isValidLI(cul.children[0], 0, _this.action);\n cul.children[index].classList.add(FOCUSED);\n cul.children[index].focus();\n }\n });\n };\n MenuBase.prototype.setBlankIconStyle = function (menu) {\n var blankIconList = [].slice.call(menu.getElementsByClassName('e-blankicon'));\n if (!blankIconList.length) {\n return;\n }\n var iconLi = menu.querySelector('.e-menu-item:not(.e-blankicon):not(.e-separator)');\n var icon = iconLi.querySelector('.e-menu-icon');\n if (!icon) {\n return;\n }\n var cssProp = this.enableRtl ? { padding: 'paddingRight', margin: 'marginLeft' } :\n { padding: 'paddingLeft', margin: 'marginRight' };\n var iconCssProps = getComputedStyle(icon);\n var iconSize = parseInt(iconCssProps.fontSize, 10);\n if (!!parseInt(iconCssProps.width, 10) && parseInt(iconCssProps.width, 10) > iconSize) {\n iconSize = parseInt(iconCssProps.width, 10);\n }\n // tslint:disable\n var size = iconSize + parseInt(iconCssProps[cssProp.margin], 10) + parseInt(getComputedStyle(iconLi)[cssProp.padding], 10) + \"px\";\n blankIconList.forEach(function (li) {\n li.style[cssProp.padding] = size;\n });\n // tslint:enable\n };\n MenuBase.prototype.checkScrollOffset = function (e) {\n var wrapper = this.getWrapper();\n if (wrapper.children[0].classList.contains('e-menu-hscroll') && this.navIdx.length === 1) {\n var trgt = isNullOrUndefined(e) ? this.element : closest(e.target, '.' + ITEM);\n var offsetEle = select('.e-hscroll-bar', wrapper);\n var offsetLeft = void 0;\n var offsetRight = void 0;\n if (offsetEle.scrollLeft > trgt.offsetLeft) {\n offsetEle.scrollLeft -= (offsetEle.scrollLeft - trgt.offsetLeft);\n }\n offsetLeft = offsetEle.scrollLeft + offsetEle.offsetWidth;\n offsetRight = trgt.offsetLeft + trgt.offsetWidth;\n if (offsetLeft < offsetRight) {\n offsetEle.scrollLeft += (offsetRight - offsetLeft);\n }\n }\n };\n MenuBase.prototype.setPosition = function (li, ul, top, left) {\n var px = 'px';\n this.toggleVisiblity(ul);\n if (ul === this.element || (left > -1 && top > -1)) {\n var collide = isCollide(ul, null, left, top);\n if (collide.indexOf('right') > -1) {\n left = left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n var offset = this.callFit(ul, false, true, top, left);\n top = offset.top - 20;\n if (top < 0) {\n var newTop = (pageYOffset + document.documentElement.clientHeight) - ul.getBoundingClientRect().height;\n if (newTop > -1) {\n top = newTop;\n }\n }\n }\n collide = isCollide(ul, null, left, top);\n if (collide.indexOf('left') > -1) {\n var offset = this.callFit(ul, true, false, top, left);\n left = offset.left;\n }\n }\n else {\n if (Browser.isDevice) {\n top = Number(this.element.style.top.replace(px, ''));\n left = Number(this.element.style.left.replace(px, ''));\n }\n else {\n var x = this.enableRtl ? 'left' : 'right';\n var offset = calculatePosition(li, x, 'top');\n top = offset.top;\n left = offset.left;\n var collide = isCollide(ul, null, this.enableRtl ? left - ul.offsetWidth : left, top);\n var xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n if (xCollision) {\n offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n left = offset.left;\n }\n if (this.enableRtl || xCollision) {\n left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n offset = this.callFit(ul, false, true, top, left);\n top = offset.top;\n }\n }\n }\n this.toggleVisiblity(ul, false);\n ul.style.top = top + px;\n ul.style.left = left + px;\n };\n MenuBase.prototype.toggleVisiblity = function (ul, isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n ul.style.visibility = isVisible ? 'hidden' : '';\n ul.style.display = isVisible ? 'block' : 'none';\n };\n MenuBase.prototype.createItems = function (items) {\n var _this = this;\n var level = this.navIdx ? this.navIdx.length : 0;\n var fields = this.getFields(level);\n // tslint:disable-next-line:no-any\n if (isBlazor() && this.template && items.length && items[0].properties) {\n var itemsObj_1 = [];\n items.forEach(function (item, index) {\n itemsObj_1.push({});\n itemsObj_1[index][fields.text] = item[fields.text];\n if (!item[fields.id]) {\n item[fields.id] = getUniqueID('menuitem');\n }\n itemsObj_1[index][fields.id] = item[fields.id];\n itemsObj_1[index][fields.iconCss] = item[fields.iconCss];\n itemsObj_1[index][fields.url] = item[fields.url];\n itemsObj_1[index][fields.child] = item[fields.child];\n itemsObj_1[index][fields.separator] = item[fields.separator];\n });\n items = itemsObj_1;\n }\n var showIcon = this.hasField(items, this.getField('iconCss', level));\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n fields: fields,\n template: this.template,\n itemNavigable: true,\n itemCreating: function (args) {\n if (!args.curData[args.fields[fields.id]]) {\n args.curData[args.fields[fields.id]] = getUniqueID('menuitem');\n }\n args.curData.htmlAttributes = {\n role: 'menuitem',\n tabindex: '-1'\n };\n if (_this.isMenu && !args.curData[_this.getField('separator', level)]) {\n args.curData.htmlAttributes['aria-label'] = args.curData[args.fields.text];\n }\n if (args.curData[args.fields[fields.iconCss]] === '') {\n args.curData[args.fields[fields.iconCss]] = null;\n }\n },\n itemCreated: function (args) {\n if (args.curData[_this.getField('separator', level)]) {\n args.item.classList.add(SEPARATOR);\n args.item.removeAttribute('role');\n }\n if (showIcon && !args.curData[args.fields.iconCss]\n && !args.curData[_this.getField('separator', level)]) {\n args.item.classList.add('e-blankicon');\n }\n if (args.curData[args.fields.child]\n && args.curData[args.fields.child].length) {\n var span = _this.createElement('span', { className: ICONS + ' ' + CARET });\n args.item.appendChild(span);\n args.item.setAttribute('aria-haspopup', 'true');\n args.item.setAttribute('aria-expanded', 'false');\n if (!_this.isMenu) {\n args.item.removeAttribute('role');\n }\n args.item.classList.add('e-menu-caret-icon');\n }\n if (_this.isMenu && _this.template) {\n args.item.setAttribute('id', args.curData[args.fields.id].toString());\n args.item.removeAttribute('data-uid');\n if (args.item.classList.contains('e-level-1')) {\n args.item.classList.remove('e-level-1');\n }\n if (args.item.classList.contains('e-has-child')) {\n args.item.classList.remove('e-has-child');\n }\n }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n this.setProperties({ 'items': this.items }, true);\n if (this.isMenu) {\n listBaseOptions.templateID = this.element.id + TEMPLATE_PROPERTY;\n }\n var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template, this);\n ul.setAttribute('tabindex', '0');\n if (this.isMenu) {\n ul.setAttribute('role', 'menu');\n }\n return ul;\n };\n MenuBase.prototype.moverHandler = function (e) {\n var trgt = e.target;\n this.liTrgt = trgt;\n var cli = this.getLI(trgt);\n var wrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : this.getWrapper();\n var hdrWrapper = this.getWrapper();\n var regex = new RegExp('-ej2menu-(.*)-popup');\n var ulId;\n var isDifferentElem = false;\n if (!wrapper) {\n return;\n }\n if (wrapper.id !== '') {\n ulId = regex.exec(wrapper.id)[1];\n }\n else {\n ulId = wrapper.querySelector('ul').id;\n }\n if (ulId !== this.element.id) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [this.getWrapper()]);\n if (this.navIdx.length) {\n isDifferentElem = true;\n }\n else {\n return;\n }\n }\n if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper') && !isDifferentElem) {\n this.removeLIStateByClass([FOCUSED], this.isMenu ? [wrapper].concat(this.getPopups()) : [wrapper]);\n this.removeLIStateByClass([FOCUSED], this.isMenu ? [hdrWrapper].concat(this.getPopups()) : [hdrWrapper]);\n cli.classList.add(FOCUSED);\n if (!this.showItemOnClick) {\n this.clickHandler(e);\n }\n }\n else if (this.isMenu && this.showItemOnClick && !isDifferentElem) {\n this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n }\n if (this.isMenu) {\n if (!this.showItemOnClick && (trgt.parentElement !== wrapper && !closest(trgt, '.e-' + this.getModuleName() + '-popup'))\n && (!cli || (cli && !this.getIndex(cli.id, true).length))) {\n this.removeLIStateByClass([FOCUSED], [wrapper]);\n if (this.navIdx.length) {\n this.isClosed = true;\n this.closeMenu(null, e);\n }\n }\n else if (isDifferentElem && !this.showItemOnClick) {\n if (this.navIdx.length) {\n this.isClosed = true;\n this.closeMenu(null, e);\n }\n }\n if (!this.isClosed) {\n this.removeStateWrapper();\n }\n this.isClosed = false;\n }\n };\n MenuBase.prototype.removeStateWrapper = function () {\n if (this.liTrgt) {\n var wrapper = closest(this.liTrgt, '.e-menu-vscroll');\n if (this.liTrgt.tagName === 'DIV' && wrapper) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [wrapper]);\n }\n }\n };\n MenuBase.prototype.removeLIStateByClass = function (classList, element) {\n var li;\n var _loop_1 = function (i) {\n classList.forEach(function (className) {\n li = select('.' + className, element[i]);\n if (li) {\n li.classList.remove(className);\n }\n });\n };\n for (var i = 0; i < element.length; i++) {\n _loop_1(i);\n }\n };\n MenuBase.prototype.getField = function (propName, level) {\n if (level === void 0) { level = 0; }\n var fieldName = this.fields[propName];\n return typeof fieldName === 'string' ? fieldName :\n (!fieldName[level] ? fieldName[fieldName.length - 1].toString()\n : fieldName[level].toString());\n };\n MenuBase.prototype.getFields = function (level) {\n if (level === void 0) { level = 0; }\n return {\n id: this.getField('itemId', level),\n iconCss: this.getField('iconCss', level),\n text: this.getField('text', level),\n url: this.getField('url', level),\n child: this.getField('children', level),\n separator: this.getField('separator', level)\n };\n };\n MenuBase.prototype.hasField = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][field]) {\n return true;\n }\n }\n return false;\n };\n MenuBase.prototype.menuHeaderClickHandler = function (e) {\n if (closest(e.target, '.e-menu-wrapper').querySelector('ul.e-menu-parent').id !== this.element.id) {\n return;\n }\n this.element.classList.contains('e-hide-menu') ? this.openHamburgerMenu(e) : this.closeHamburgerMenu(e);\n };\n MenuBase.prototype.clickHandler = function (e) {\n if (this.isTapHold) {\n this.isTapHold = false;\n }\n else {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.cli = this.getLI(trgt);\n var regex = new RegExp('-ej2menu-(.*)-popup');\n var cliWrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : null;\n var isInstLI = cli && cliWrapper && (this.isMenu ? this.getIndex(cli.id, true).length > 0\n : wrapper.firstElementChild.id === cliWrapper.firstElementChild.id);\n if (Browser.isDevice && this.isMenu) {\n this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n this.mouseDownHandler(e);\n }\n if (cli && cliWrapper && this.isMenu) {\n var cliWrapperId = cliWrapper.id ? regex.exec(cliWrapper.id)[1] : cliWrapper.querySelector('.e-menu-parent').id;\n if (this.element.id !== cliWrapperId) {\n return;\n }\n }\n if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n this.setLISelected(cli);\n var navIdx = this.getIndex(cli.id, true);\n var item = this.getItem(navIdx);\n var eventArgs = { element: cli, item: item, event: e };\n this.trigger('select', eventArgs);\n }\n if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {\n var ul = void 0;\n if (cli.classList.contains(HEADER)) {\n ul = wrapper.children[this.navIdx.length - 1];\n this.toggleAnimation(ul);\n var sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n detach(cli.parentNode);\n this.navIdx.pop();\n }\n else {\n if (!cli.classList.contains(SEPARATOR)) {\n this.showSubMenu = true;\n var cul = cli.parentNode;\n this.cliIdx = this.getIdx(cul, cli);\n if (this.isMenu || !Browser.isDevice) {\n var culIdx = this.isMenu ? Array.prototype.indexOf.call([wrapper].concat(this.getPopups()), closest(cul, '.' + 'e-' + this.getModuleName() + '-wrapper'))\n : this.getIdx(wrapper, cul);\n if (this.navIdx[culIdx] === this.cliIdx) {\n this.showSubMenu = false;\n }\n if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || this.showSubMenu)) {\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n this.isClosed = true;\n this.keyType = 'click';\n if (this.showItemOnClick) {\n this.setLISelected(cli);\n }\n this.closeMenu(culIdx + 1, e);\n if (this.showItemOnClick) {\n this.setLISelected(cli);\n }\n }\n }\n if (!this.isClosed) {\n this.afterCloseMenu(e);\n }\n this.isClosed = false;\n }\n }\n }\n else {\n if (this.isMenu && trgt.tagName === 'DIV' && this.navIdx.length && closest(trgt, '.e-menu-vscroll')) {\n var popupEle = closest(trgt, '.' + POPUP);\n var cIdx = Array.prototype.indexOf.call(this.getPopups(), popupEle) + 1;\n if (cIdx < this.navIdx.length) {\n this.closeMenu(cIdx + 1, e);\n if (popupEle) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [popupEle]);\n }\n }\n }\n else if (this.isMenu && this.hamburgerMode && trgt.tagName === 'SPAN'\n && trgt.classList.contains('e-menu-icon')) {\n this.menuHeaderClickHandler(e);\n }\n else {\n if (trgt.tagName !== 'UL' || (this.isMenu ? trgt.parentElement.classList.contains('e-menu-wrapper') &&\n !this.getIndex(trgt.querySelector('.' + ITEM).id, true).length : trgt.parentElement !== wrapper)) {\n if (!cli) {\n this.removeLIStateByClass([SELECTED], [wrapper]);\n }\n if (!cli || !cli.querySelector('.' + CARET)) {\n this.closeMenu(null, e);\n }\n }\n }\n }\n }\n };\n MenuBase.prototype.afterCloseMenu = function (e) {\n var isHeader;\n if (this.showSubMenu) {\n if (this.showItemOnClick && this.navIdx.length === 0) {\n isHeader = closest(e.target, '.e-menu-parent.e-control');\n }\n else {\n isHeader = closest(this.element, '.e-menu-parent.e-control');\n }\n var idx = this.navIdx.concat(this.cliIdx);\n var item = this.getItem(idx);\n if (item && item[this.getField('children', idx.length - 1)] &&\n item[this.getField('children', idx.length - 1)].length) {\n if (e.type === 'mouseover' || (Browser.isDevice && this.isMenu)) {\n this.setLISelected(this.cli);\n }\n if ((!this.hamburgerMode && isHeader) || (this.hamburgerMode && this.cli.getAttribute('aria-expanded') === 'false')) {\n this.cli.setAttribute('aria-expanded', 'true');\n this.navIdx.push(this.cliIdx);\n this.openMenu(this.cli, item, null, null, e);\n }\n }\n else {\n if (e.type !== 'mouseover') {\n this.closeMenu(null, e);\n }\n }\n if (!isHeader) {\n var cul = this.getUlByNavIdx();\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.setAttribute('aria-expanded', 'false');\n sli.classList.remove(SELECTED);\n }\n }\n }\n this.keyType = '';\n };\n MenuBase.prototype.setLISelected = function (li) {\n var sli = this.getLIByClass(li.parentElement, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n if (!this.isMenu) {\n li.classList.remove(FOCUSED);\n }\n li.classList.add(SELECTED);\n };\n MenuBase.prototype.getLIByClass = function (ul, classname) {\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classname)) {\n return ul.children[i];\n }\n }\n return null;\n };\n /**\n * This method is used to get the index of the menu item in the Menu based on the argument.\n * @param item - item be passed to get the index | id to be passed to get the item index.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.getItemIndex = function (item, isUniqueId) {\n var idx;\n if (typeof item === 'string') {\n idx = item;\n }\n else {\n idx = item.id;\n }\n var isText = (isUniqueId === false) ? false : true;\n var navIdx = this.getIndex(idx, isText);\n return navIdx;\n };\n /**\n * This method is used to set the menu item in the Menu based on the argument.\n * @param item - item need to be updated.\n * @param id - id to be passed to update the item.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.setItem = function (item, id, isUniqueId) {\n var idx = id ? id : item.id;\n var isText = (isUniqueId === false) ? false : true;\n var navIdx = this.getIndex(idx, isText);\n var newItem = this.getItem(navIdx);\n newItem.iconCss = item.iconCss;\n newItem.id = item.id;\n newItem.text = item.text;\n newItem.url = item.url;\n newItem.separator = item.separator;\n newItem.items = item.items;\n };\n MenuBase.prototype.getItem = function (navIdx) {\n navIdx = navIdx.slice();\n var idx = navIdx.pop();\n var items = this.getItems(navIdx);\n return items[idx];\n };\n MenuBase.prototype.getItems = function (navIdx) {\n var items = this.items;\n for (var i = 0; i < navIdx.length; i++) {\n items = items[navIdx[i]][this.getField('children', i)];\n }\n return items;\n };\n MenuBase.prototype.setItems = function (newItems, navIdx) {\n var items = this.getItems(navIdx);\n items.splice(0, items.length);\n for (var i = 0; i < newItems.length; i++) {\n items.splice(i, 0, newItems[i]);\n }\n };\n MenuBase.prototype.getIdx = function (ul, li, skipHdr) {\n if (skipHdr === void 0) { skipHdr = true; }\n var idx = Array.prototype.indexOf.call(ul.querySelectorAll('li'), li);\n if (this.isMenu && this.template && isBlazor()) {\n idx = Array.prototype.indexOf.call(ul.querySelectorAll(li.tagName), li);\n }\n else {\n idx = Array.prototype.indexOf.call(ul.children, li);\n }\n if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n idx--;\n }\n return idx;\n };\n MenuBase.prototype.getLI = function (elem) {\n if (elem.tagName === 'LI' && elem.classList.contains('e-menu-item')) {\n return elem;\n }\n return closest(elem, 'li.e-menu-item');\n };\n MenuBase.prototype.updateItemsByNavIdx = function () {\n var items = this.items;\n var count = 0;\n for (var index = 0; index < this.navIdx.length; index++) {\n items = items[index].items;\n if (!items) {\n break;\n }\n count++;\n var ul = this.getUlByNavIdx(count);\n if (!ul) {\n break;\n }\n this.updateItem(ul, items);\n }\n };\n MenuBase.prototype.removeChildElement = function (elem) {\n while (elem.firstElementChild) {\n elem.removeChild(elem.firstElementChild);\n }\n return elem;\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {MenuBaseModel} newProp\n * @param {MenuBaseModel} oldProp\n * @returns void\n */\n MenuBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var wrapper = this.getWrapper();\n var _loop_2 = function (prop) {\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n wrapper.classList.toggle(RTL);\n break;\n case 'showItemOnClick':\n this_1.unWireEvents();\n this_1.showItemOnClick = newProp.showItemOnClick;\n this_1.wireEvents();\n break;\n case 'enableScrolling':\n if (newProp.enableScrolling) {\n var ul_2;\n this_1.element.classList.contains('e-vertical') ?\n addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl)\n : addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);\n this_1.getPopups().forEach(function (wrapper) {\n ul_2 = select('.e-ul', wrapper);\n addScrolling(_this.createElement, wrapper, ul_2, 'vscroll', _this.enableRtl);\n });\n }\n else {\n var ul_3 = wrapper.children[0];\n this_1.element.classList.contains('e-vertical') ? destroyScroll(getInstance(ul_3, VScroll), ul_3)\n : destroyScroll(getInstance(ul_3, HScroll), ul_3);\n wrapper.style.overflow = '';\n wrapper.appendChild(this_1.element);\n this_1.getPopups().forEach(function (wrapper) {\n ul_3 = wrapper.children[0];\n destroyScroll(getInstance(ul_3, VScroll), ul_3);\n wrapper.style.overflow = '';\n });\n }\n break;\n case 'items':\n var idx = void 0;\n var navIdx = void 0;\n var item = void 0;\n if (!Object.keys(oldProp.items).length) {\n this_1.updateItem(this_1.element, this_1.items);\n for (var i = 1, count = wrapper.childElementCount; i < count; i++) {\n detach(wrapper.lastElementChild);\n }\n if (this_1.isMenu && isBlazor()) {\n this_1.updateItemsByNavIdx();\n }\n else {\n this_1.navIdx = [];\n }\n }\n else {\n var keys = Object.keys(newProp.items);\n for (var i = 0; i < keys.length; i++) {\n navIdx = this_1.getChangedItemIndex(newProp, [], Number(keys[i]));\n if (navIdx.length <= this_1.getWrapper().children.length) {\n idx = navIdx.pop();\n item = this_1.getItems(navIdx);\n this_1.insertAfter([item[idx]], item[idx].text);\n this_1.removeItem(item, navIdx, idx);\n this_1.setItems(item, navIdx);\n }\n navIdx.length = 0;\n }\n }\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_2(prop);\n }\n };\n MenuBase.prototype.updateItem = function (ul, items) {\n if (isBlazor()) {\n ul = this.removeChildElement(ul);\n }\n else {\n ul.innerHTML = '';\n }\n var lis = [].slice.call(this.createItems(items).children);\n lis.forEach(function (li) {\n ul.appendChild(li);\n });\n };\n MenuBase.prototype.getChangedItemIndex = function (newProp, index, idx) {\n index.push(idx);\n var key = Object.keys(newProp.items[idx]).pop();\n if (key === 'items') {\n var item = newProp.items[idx];\n var popStr = Object.keys(item.items).pop();\n if (popStr) {\n this.getChangedItemIndex(item, index, Number(popStr));\n }\n }\n else {\n if (key === 'isParentArray' && index.length > 1) {\n index.pop();\n }\n }\n return index;\n };\n MenuBase.prototype.removeItem = function (item, navIdx, idx) {\n item.splice(idx, 1);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n detach(uls[navIdx.length].children[idx]);\n }\n };\n /**\n * Used to unwire the bind events.\n * @private\n */\n MenuBase.prototype.unWireEvents = function (targetSelctor) {\n if (targetSelctor === void 0) { targetSelctor = this.target; }\n var wrapper = this.getWrapper();\n if (targetSelctor) {\n var target = void 0;\n var touchModule = void 0;\n var targetElems = selectAll(targetSelctor);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (this.isMenu) {\n EventHandler.remove(target, 'click', this.menuHeaderClickHandler);\n }\n else {\n if (Browser.isIos) {\n touchModule = getInstance(target, Touch);\n if (touchModule) {\n touchModule.destroy();\n }\n }\n else {\n EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n }\n }\n }\n if (!this.isMenu) {\n EventHandler.remove(this.targetElement, 'scroll', this.scrollHandler);\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollHandler);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.remove(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler);\n EventHandler.remove(document, 'mousedown', this.delegateMouseDownHandler);\n }\n EventHandler.remove(document, 'click', this.delegateClickHandler);\n this.unWireKeyboardEvent(wrapper);\n this.rippleFn();\n };\n MenuBase.prototype.unWireKeyboardEvent = function (element) {\n var keyboardModule = getInstance(element, KeyboardEvents);\n if (keyboardModule) {\n keyboardModule.destroy();\n }\n };\n MenuBase.prototype.toggleAnimation = function (ul, isMenuOpen) {\n var _this = this;\n if (isMenuOpen === void 0) { isMenuOpen = true; }\n var pUlHeight;\n var pElement;\n if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n this.end(ul, isMenuOpen);\n }\n else {\n this.animation.animate(ul, {\n name: this.animationSettings.effect,\n duration: this.animationSettings.duration,\n timingFunction: this.animationSettings.easing,\n begin: function (options) {\n if (_this.hamburgerMode) {\n pElement = options.element.parentElement;\n options.element.style.position = 'absolute';\n pUlHeight = pElement.offsetHeight;\n options.element.style.maxHeight = options.element.offsetHeight + 'px';\n pElement.style.maxHeight = '';\n }\n else {\n options.element.style.display = 'block';\n options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n }\n },\n progress: function (options) {\n if (_this.hamburgerMode) {\n pElement.style.minHeight = (pUlHeight + options.element.offsetHeight) + 'px';\n }\n },\n end: function (options) {\n if (_this.hamburgerMode) {\n options.element.style.position = '';\n options.element.style.maxHeight = '';\n pElement.style.minHeight = '';\n options.element.style.top = 0 + 'px';\n options.element.children[0].focus();\n _this.triggerOpen(options.element.children[0]);\n }\n else {\n _this.end(options.element, isMenuOpen);\n }\n }\n });\n }\n };\n MenuBase.prototype.triggerOpen = function (ul) {\n var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n var eventArgs = {\n element: ul, parentItem: item, items: item ? item.items : this.items\n };\n this.trigger('onOpen', eventArgs);\n };\n MenuBase.prototype.end = function (ul, isMenuOpen) {\n if (isMenuOpen) {\n ul.style.display = 'block';\n ul.style.maxHeight = '';\n this.triggerOpen(ul);\n if (ul.querySelector('.' + FOCUSED)) {\n ul.querySelector('.' + FOCUSED).focus();\n }\n else {\n var ele = void 0;\n ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n else {\n if (ul === this.element) {\n var fli = this.getLIByClass(this.element, FOCUSED);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n var sli = this.getLIByClass(this.element, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n ul.style.display = 'none';\n }\n else {\n detach(ul);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n MenuBase.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get wrapper element.\n * @returns Element\n * @private\n */\n MenuBase.prototype.getWrapper = function () {\n return closest(this.element, '.e-' + this.getModuleName() + '-wrapper');\n };\n MenuBase.prototype.getIndex = function (data, isUniqueId, items, nIndex, isCallBack, level) {\n if (items === void 0) { items = this.items; }\n if (nIndex === void 0) { nIndex = []; }\n if (isCallBack === void 0) { isCallBack = false; }\n if (level === void 0) { level = 0; }\n var item;\n level = isCallBack ? level + 1 : 0;\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i];\n if ((isUniqueId ? item[this.getField('itemId', level)] : item[this.getField('text', level)]) === data) {\n nIndex.push(i);\n break;\n }\n else if (item[this.getField('children', level)]\n && item[this.getField('children', level)].length) {\n nIndex = this.getIndex(data, isUniqueId, item[this.getField('children', level)], nIndex, true, level);\n if (nIndex[nIndex.length - 1] === -1) {\n if (i !== len - 1) {\n nIndex.pop();\n }\n }\n else {\n nIndex.unshift(i);\n break;\n }\n }\n else {\n if (i === len - 1) {\n nIndex.push(-1);\n }\n }\n }\n return (!isCallBack && nIndex[0] === -1) ? [] : nIndex;\n };\n /**\n * This method is used to enable or disable the menu items in the Menu based on the items and enable argument.\n * @param items Text items that needs to be enabled/disabled.\n * @param enable Set `true`/`false` to enable/disable the list items.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.enableItems = function (items, enable, isUniqueId) {\n if (enable === void 0) { enable = true; }\n var ul;\n var idx;\n var navIdx;\n var disabled = DISABLED;\n var skipItem;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n if (this.navIdx.length) {\n if (navIdx.length !== 1) {\n skipItem = false;\n for (var i_1 = 0, len = navIdx.length - 1; i_1 < len; i_1++) {\n if (navIdx[i_1] !== this.navIdx[i_1]) {\n skipItem = true;\n break;\n }\n }\n if (skipItem) {\n continue;\n }\n }\n }\n else {\n if (navIdx.length !== 1) {\n continue;\n }\n }\n idx = navIdx.pop();\n ul = this.getUlByNavIdx(navIdx.length);\n if (ul) {\n if (enable) {\n if (this.isMenu) {\n ul.children[idx].classList.remove(disabled);\n ul.children[idx].removeAttribute('aria-disabled');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(disabled);\n }\n else {\n ul.children[idx].classList.remove(disabled);\n }\n }\n }\n else {\n if (this.isMenu) {\n ul.children[idx].classList.add(disabled);\n ul.children[idx].setAttribute('aria-disabled', 'true');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(disabled);\n }\n else {\n ul.children[idx].classList.add(disabled);\n }\n }\n }\n }\n }\n };\n /**\n * This method is used to show the menu items in the Menu based on the items text.\n * @param items Text items that needs to be shown.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.showItems = function (items, isUniqueId) {\n this.showHideItems(items, false, isUniqueId);\n };\n /**\n * This method is used to hide the menu items in the Menu based on the items text.\n * @param items Text items that needs to be hidden.\n * @returns void\n */\n MenuBase.prototype.hideItems = function (items, isUniqueId) {\n this.showHideItems(items, true, isUniqueId);\n };\n MenuBase.prototype.showHideItems = function (items, ishide, isUniqueId) {\n var ul;\n var index;\n var navIdx;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n index = navIdx.pop();\n ul = this.getUlByNavIdx(navIdx.length);\n if (ul) {\n if (ishide) {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[index + 1].classList.add(HIDE);\n }\n else {\n ul.children[index].classList.add(HIDE);\n }\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[index + 1].classList.remove(HIDE);\n }\n else {\n ul.children[index].classList.remove(HIDE);\n }\n }\n }\n }\n };\n /**\n * It is used to remove the menu items from the Menu based on the items text.\n * @param items Text items that needs to be removed.\n * @returns void\n */\n MenuBase.prototype.removeItems = function (items, isUniqueId) {\n var idx;\n var navIdx;\n var iitems;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n this.removeItem(iitems, navIdx, idx);\n }\n };\n /**\n * It is used to insert the menu items after the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item after that the element to be inserted.\n * @returns void\n */\n MenuBase.prototype.insertAfter = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId);\n };\n /**\n * It is used to insert the menu items before the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item before that the element to be inserted.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.insertBefore = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId, false);\n };\n MenuBase.prototype.insertItems = function (items, text, isUniqueId, isAfter) {\n if (isAfter === void 0) { isAfter = true; }\n var li;\n var idx;\n var navIdx;\n var iitems;\n var menuitem;\n var showIcon;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(text, isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n menuitem = new MenuItem(iitems[0], 'items', items[i], true);\n iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n var uls = this.isMenu ? [this.getWrapper()].concat(this.getPopups()) : [].slice.call(this.getWrapper().children);\n if (navIdx.length < uls.length) {\n idx = isAfter ? idx + 1 : idx;\n showIcon = this.hasField(iitems, this.getField('iconCss', navIdx.length - 1));\n li = this.createItems(iitems).children[idx];\n var ul = this.isMenu ? select('.e-menu-parent', uls[navIdx.length]) : uls[navIdx.length];\n ul.insertBefore(li, ul.children[idx]);\n }\n }\n };\n MenuBase.prototype.removeAttributes = function () {\n var _this = this;\n ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n _this.element.style.removeProperty(key);\n });\n ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n if (key === 'class' && _this.element.classList.contains('e-menu-parent')) {\n _this.element.classList.remove('e-menu-parent');\n }\n if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n _this.element.removeAttribute(key);\n }\n if (_this.isMenu && key === 'class' && _this.element.classList.contains('e-vertical')) {\n _this.element.classList.remove('e-vertical');\n }\n });\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n MenuBase.prototype.destroy = function () {\n var wrapper = this.getWrapper();\n if (wrapper) {\n this.unWireEvents();\n if (!this.isMenu) {\n this.clonedElement.style.display = '';\n if (this.clonedElement.tagName === 'EJS-CONTEXTMENU') {\n addClass([this.clonedElement], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n this.element = this.clonedElement;\n }\n else {\n if (this.refreshing && this.clonedElement.childElementCount && this.clonedElement.children[0].tagName === 'LI') {\n this.setProperties({ 'items': [] }, true);\n }\n if (document.getElementById(this.clonedElement.id)) {\n var refEle = this.clonedElement.nextElementSibling;\n refEle && refEle !== wrapper ? this.clonedElement.parentElement.insertBefore(this.element, refEle) :\n this.clonedElement.parentElement.appendChild(this.element);\n if (isBlazor()) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n append([].slice.call(this.clonedElement.children), this.element);\n detach(this.clonedElement);\n this.removeAttributes();\n }\n }\n this.clonedElement = null;\n }\n else {\n this.closeMenu();\n if (isBlazor()) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n this.removeAttributes();\n wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n if (this.isMenu && this.clonedElement) {\n detach(this.element);\n wrapper.style.display = '';\n wrapper.classList.remove('e-' + this.getModuleName() + '-wrapper');\n wrapper.removeAttribute('data-ripple');\n }\n else {\n detach(wrapper);\n }\n _super.prototype.destroy.call(this);\n if (this.template) {\n this.clearTemplate(['template']);\n }\n }\n };\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"created\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"filter\", void 0);\n __decorate([\n Property(null)\n ], MenuBase.prototype, \"template\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"enableScrolling\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Complex({ itemId: \"id\", text: \"text\", parentId: \"parentId\", iconCss: \"iconCss\", url: \"url\", separator: \"separator\", children: \"items\" }, FieldSettings)\n ], MenuBase.prototype, \"fields\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuBase.prototype, \"items\", void 0);\n __decorate([\n Complex({ duration: 400, easing: 'ease', effect: 'SlideDown' }, MenuAnimationSettings)\n ], MenuBase.prototype, \"animationSettings\", void 0);\n MenuBase = __decorate([\n NotifyPropertyChanges\n ], MenuBase);\n return MenuBase;\n}(Component));\nexport { MenuBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// <reference path='../common/menu-base-model.d.ts'/>\nimport { attributes, getUniqueID, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { getZindexPartial } from '@syncfusion/ej2-popups';\nimport { MenuBase, MenuItem } from '../common/menu-base';\n/**\n * The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.\n * ```html\n * <div id = 'target'></div>\n * <ul id = 'contextmenu'></ul>\n * ```\n * ```typescript\n * <script>\n * var contextMenuObj = new ContextMenu({items: [{ text: 'Cut' }, { text: 'Copy' },{ text: 'Paste' }], target: '#target'});\n * </script>\n * ```\n */\nvar ContextMenu = /** @class */ (function (_super) {\n __extends(ContextMenu, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function ContextMenu(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * For internal use only - prerender processing.\n * @private\n */\n ContextMenu.prototype.preRender = function () {\n this.isMenu = false;\n this.element.id = this.element.id || getUniqueID('ej2-contextmenu');\n _super.prototype.preRender.call(this);\n };\n ContextMenu.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n attributes(this.element, { 'role': 'context menu', 'tabindex': '0' });\n this.element.style.zIndex = getZindexPartial(this.element).toString();\n };\n /**\n * This method is used to open the ContextMenu in specified position.\n * @param top - To specify ContextMenu vertical positioning.\n * @param left - To specify ContextMenu horizontal positioning.\n * @param target - To calculate z-index for ContextMenu based upon the specified target.\n * @method open\n * @returns void\n */\n ContextMenu.prototype.open = function (top, left, target) {\n _super.prototype.openMenu.call(this, null, null, top, left, null, target);\n };\n /**\n * Closes the ContextMenu if it is opened.\n */\n ContextMenu.prototype.close = function () {\n _super.prototype.closeMenu.call(this);\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {ContextMenuModel} newProp\n * @param {ContextMenuModel} oldProp\n * @returns void\n */\n ContextMenu.prototype.onPropertyChanged = function (newProp, oldProp) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'filter':\n this.close();\n this.filter = newProp.filter;\n break;\n case 'target':\n this.unWireEvents(oldProp.target);\n this.wireEvents();\n break;\n }\n }\n };\n /**\n * Get module name.\n * @returns string\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"filter\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], ContextMenu.prototype, \"items\", void 0);\n ContextMenu = __decorate([\n NotifyPropertyChanges\n ], ContextMenu);\n return ContextMenu;\n}(MenuBase));\nexport { ContextMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isUndefined, Browser, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { rippleEffect, Animation, remove } from '@syncfusion/ej2-base';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { updateBlazorTemplate, resetBlazorTemplate, isBlazor, getElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, closest, matches, detach, select, selectAll, isVisible, append } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined as isNOU, Touch, getValue, setValue, extend, merge, attributes } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-treeview';\nvar CONTROL = 'e-control';\nvar COLLAPSIBLE = 'e-icon-collapsible';\nvar EXPANDABLE = 'e-icon-expandable';\nvar LISTITEM = 'e-list-item';\nvar LISTTEXT = 'e-list-text';\nvar LISTICON = 'e-list-icon';\nvar LISTIMG = 'e-list-img';\nvar LISTURL = 'e-list-url';\nvar PARENTITEM = 'e-list-parent';\nvar HOVER = 'e-hover';\nvar ACTIVE = 'e-active';\nvar LOAD = 'e-icons-spinner';\nvar PROCESS = 'e-process';\nvar ICON = 'e-icons';\nvar TEXTWRAP = 'e-text-content';\nvar INPUT = 'e-input';\nvar INPUTGROUP = 'e-input-group';\nvar TREEINPUT = 'e-tree-input';\nvar EDITING = 'e-editing';\nvar RTL = 'e-rtl';\nvar INTERACTION = 'e-interaction';\nvar DRAGITEM = 'e-drag-item';\nvar DROPPABLE = 'e-droppable';\nvar DRAGGING = 'e-dragging';\nvar SIBLING = 'e-sibling';\nvar DROPIN = 'e-drop-in';\nvar DROPNEXT = 'e-drop-next';\nvar DROPOUT = 'e-drop-out';\nvar NODROP = 'e-no-drop';\nvar FULLROWWRAP = 'e-fullrow-wrap';\nvar FULLROW = 'e-fullrow';\nvar SELECTED = 'e-selected';\nvar EXPANDED = 'e-expanded';\nvar NODECOLLAPSED = 'e-node-collapsed';\nvar DISABLE = 'e-disable';\nvar CONTENT = 'e-content';\nvar DOWNTAIL = 'e-downtail';\nvar DROPCOUNT = 'e-drop-count';\nvar CHECK = 'e-check';\nvar INDETERMINATE = 'e-stop';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar RIPPLE = 'e-ripple';\nvar RIPPLEELMENT = 'e-ripple-element';\nvar FOCUS = 'e-node-focus';\nvar IMAGE = 'e-list-img';\nvar BIGGER = 'e-bigger';\nvar SMALL = 'e-small';\nvar CHILD = 'e-has-child';\nvar ITEM_ANIMATION_ACTIVE = 'e-animation-active';\nvar DISABLED = 'e-disabled';\nvar treeAriaAttr = {\n treeRole: 'tree',\n itemRole: 'treeitem',\n listRole: 'group',\n itemText: '',\n wrapperRole: '',\n};\n/**\n * Configures the fields to bind to the properties of node in the TreeView component.\n */\nvar FieldsSettings = /** @class */ (function (_super) {\n __extends(FieldsSettings, _super);\n function FieldsSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('child')\n ], FieldsSettings.prototype, \"child\", void 0);\n __decorate([\n Property([])\n ], FieldsSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('expanded')\n ], FieldsSettings.prototype, \"expanded\", void 0);\n __decorate([\n Property('hasChildren')\n ], FieldsSettings.prototype, \"hasChildren\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldsSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldsSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('id')\n ], FieldsSettings.prototype, \"id\", void 0);\n __decorate([\n Property('imageUrl')\n ], FieldsSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldsSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('parentID')\n ], FieldsSettings.prototype, \"parentID\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"query\", void 0);\n __decorate([\n Property('selected')\n ], FieldsSettings.prototype, \"selected\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"tableName\", void 0);\n __decorate([\n Property('text')\n ], FieldsSettings.prototype, \"text\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldsSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('navigateUrl')\n ], FieldsSettings.prototype, \"navigateUrl\", void 0);\n return FieldsSettings;\n}(ChildProperty));\nexport { FieldsSettings };\n/**\n * Configures animation settings for the TreeView component.\n */\nvar ActionSettings = /** @class */ (function (_super) {\n __extends(ActionSettings, _super);\n function ActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], ActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], ActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], ActionSettings.prototype, \"easing\", void 0);\n return ActionSettings;\n}(ChildProperty));\nexport { ActionSettings };\n/**\n * Configures the animation settings for expanding and collapsing nodes in TreeView.\n */\nvar NodeAnimationSettings = /** @class */ (function (_super) {\n __extends(NodeAnimationSettings, _super);\n function NodeAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"expand\", void 0);\n return NodeAnimationSettings;\n}(ChildProperty));\nexport { NodeAnimationSettings };\n/**\n * The TreeView component is used to represent hierarchical data in a tree like structure with advanced\n * functions to perform edit, drag and drop, selection with check-box, and more.\n * ```html\n * <div id=\"tree\"></div>\n * ```\n * ```typescript\n * let treeObj: TreeView = new TreeView();\n * treeObj.appendTo('#tree');\n * ```\n */\nvar TreeView = /** @class */ (function (_super) {\n __extends(TreeView, _super);\n function TreeView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isRefreshed = false;\n _this.preventExpand = false;\n _this.checkedElement = [];\n _this.disableNode = [];\n _this.validArr = [];\n _this.expandChildren = [];\n _this.isFieldChange = false;\n _this.changeDataSource = false;\n _this.isBlazorExpandedNodes = [];\n _this.mouseDownStatus = false;\n return _this;\n }\n TreeView_1 = TreeView;\n /**\n * Get component name.\n * @returns string\n * @private\n */\n TreeView.prototype.getModuleName = function () {\n return 'treeview';\n };\n /**\n * Initialize the event handler\n */\n TreeView.prototype.preRender = function () {\n var _this = this;\n this.isBlazorPlatform = (isBlazor() && this.isServerRendered);\n this.checkActionNodes = [];\n this.parentNodeCheck = [];\n this.dragStartAction = false;\n this.isAnimate = false;\n this.keyConfigs = {\n escape: 'escape',\n end: 'end',\n enter: 'enter',\n f2: 'f2',\n home: 'home',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlDown: 'ctrl+downarrow',\n ctrlUp: 'ctrl+uparrow',\n ctrlEnter: 'ctrl+enter',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n ctrlA: 'ctrl+A',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftEnter: 'shift+enter',\n shiftHome: 'shift+home',\n shiftEnd: 'shift+end',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n csEnter: 'ctrl+shift+enter',\n csHome: 'ctrl+shift+home',\n csEnd: 'ctrl+shift+end',\n space: 'space',\n };\n this.listBaseOption = {\n expandCollapse: true,\n showIcon: true,\n expandIconClass: EXPANDABLE,\n ariaAttributes: treeAriaAttr,\n expandIconPosition: 'Left',\n itemCreated: function (e) {\n _this.beforeNodeCreate(e);\n },\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n itemNavigable: this.fullRowNavigable,\n };\n this.updateListProp(this.fields);\n this.aniObj = new Animation({});\n this.treeList = [];\n this.isLoaded = false;\n this.isInitalExpand = false;\n this.expandChildren = [];\n this.index = 0;\n this.setTouchClass();\n if (isNOU(this.selectedNodes)) {\n this.setProperties({ selectedNodes: [] }, true);\n }\n if (isNOU(this.checkedNodes)) {\n this.setProperties({ checkedNodes: [] }, true);\n }\n if (isNOU(this.expandedNodes)) {\n this.setProperties({ expandedNodes: [] }, true);\n }\n else {\n this.isInitalExpand = true;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n * @hidden\n */\n TreeView.prototype.getPersistData = function () {\n var keyEntity = ['selectedNodes', 'checkedNodes', 'expandedNodes'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TreeView.prototype.render = function () {\n this.initialRender = true;\n this.blazorInitialRender = false;\n this.initialize();\n this.setDataBinding(false);\n this.setDisabledMode();\n this.setExpandOnType();\n if (!this.disabled) {\n this.setRipple();\n }\n this.wireEditingEvents(this.allowEditing);\n this.setDragAndDrop(this.allowDragAndDrop);\n if (!this.disabled) {\n this.wireEvents();\n }\n if (!this.isBlazorPlatform) {\n this.initialRender = false;\n }\n this.renderComplete();\n };\n TreeView.prototype.initialize = function () {\n if (!this.isBlazorPlatform) {\n this.element.setAttribute('role', 'tree');\n this.element.setAttribute('tabindex', '0');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n this.setCssClass(null, this.cssClass);\n this.setEnableRtl();\n this.setFullRow(this.fullRowSelect);\n }\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n };\n TreeView.prototype.setDisabledMode = function () {\n if (this.disabled) {\n this.element.classList.add(DISABLED);\n }\n else {\n this.element.classList.remove(DISABLED);\n }\n };\n TreeView.prototype.setEnableRtl = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n TreeView.prototype.setRipple = function () {\n var tempStr = '.' + FULLROW + ',.' + TEXTWRAP;\n var rippleModel = {\n selector: tempStr,\n ignore: '.' + TEXTWRAP + ' > .' + ICON + ',.' + INPUTGROUP + ',.' + INPUT + ', .' + CHECKBOXWRAP\n };\n this.rippleFn = rippleEffect(this.element, rippleModel);\n var iconModel = {\n selector: '.' + TEXTWRAP + ' > .' + ICON,\n isCenterRipple: true,\n };\n this.rippleIconFn = rippleEffect(this.element, iconModel);\n };\n TreeView.prototype.setFullRow = function (isEnabled) {\n isEnabled ? addClass([this.element], FULLROWWRAP) : removeClass([this.element], FULLROWWRAP);\n };\n TreeView.prototype.setMultiSelect = function (isEnabled) {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (isEnabled) {\n firstUl.setAttribute('aria-multiselectable', 'true');\n }\n else {\n firstUl.removeAttribute('aria-multiselectable');\n }\n };\n TreeView.prototype.templateComplier = function (template) {\n if (template) {\n var e = void 0;\n this.element.classList.add(INTERACTION);\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n this.element.classList.remove(INTERACTION);\n return undefined;\n };\n TreeView.prototype.setDataBinding = function (changeDataSource) {\n var _this = this;\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager) {\n // tslint:disable\n this.isOffline = (this.isBlazorPlatform ? this.fields.dataSource.offline :\n this.fields.dataSource.dataSource.offline);\n if (this.fields.dataSource.ready) {\n this.fields.dataSource.ready.then(function (e) {\n // tslint:disable\n _this.isOffline = (_this.isBlazorPlatform ? _this.fields.dataSource.offline :\n _this.fields.dataSource.dataSource.offline);\n if (_this.fields.dataSource instanceof DataManager && _this.isOffline) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n _this.renderItems(true);\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n }\n }).catch(function (e) {\n _this.trigger('actionFailure', { error: e });\n });\n }\n else {\n this.fields.dataSource.executeQuery(this.getQuery(this.fields)).then(function (e) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n if (changeDataSource) {\n _this.changeDataSource = true;\n }\n _this.renderItems(true);\n _this.changeDataSource = false;\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n }).catch(function (e) {\n _this.trigger('actionFailure', { error: e });\n });\n }\n }\n else {\n this.treeList.pop();\n if (isNOU(this.fields.dataSource)) {\n this.rootData = this.treeData = [];\n }\n else {\n this.treeData = JSON.parse(JSON.stringify(this.fields.dataSource));\n this.setRootData();\n }\n this.isNumberTypeId = this.getType();\n this.renderItems(false);\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.getQuery = function (mapper, value) {\n if (value === void 0) { value = null; }\n var columns = [];\n var query;\n if (!mapper.query) {\n query = new Query();\n var prop = this.getActualProperties(mapper);\n for (var _i = 0, _a = Object.keys(prop); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col !== 'dataSource' && col !== 'tableName' && col !== 'child' && !!mapper[col]\n && col !== 'url' && columns.indexOf(mapper[col]) === -1) {\n columns.push(mapper[col]);\n }\n }\n query.select(columns);\n if (prop.hasOwnProperty('tableName')) {\n query.from(mapper.tableName);\n }\n }\n else {\n query = mapper.query.clone();\n }\n ListBase.addSorting(this.sortOrder, mapper.text, query);\n if (!isNOU(value) && !isNOU(mapper.parentID)) {\n query.where(mapper.parentID, 'equal', (this.isNumberTypeId ? parseFloat(value) : value));\n }\n return query;\n };\n TreeView.prototype.getType = function () {\n return this.treeData[0] ? ((typeof getValue(this.fields.id, this.treeData[0]) === 'number') ? true : false) : false;\n };\n TreeView.prototype.setRootData = function () {\n this.dataType = this.getDataType(this.treeData, this.fields);\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n var rootItems = this.getChildNodes(this.treeData, undefined, true);\n if (isNOU(rootItems)) {\n this.rootData = [];\n }\n else {\n this.rootData = rootItems;\n }\n }\n else {\n this.rootData = this.treeData;\n }\n };\n TreeView.prototype.renderItems = function (isSorted) {\n // tslint:disable\n if (!this.isBlazorPlatform || (this.isBlazorPlatform && this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) || this.changeDataSource) {\n this.listBaseOption.ariaAttributes.level = 1;\n var sortedData = this.getSortedData(this.rootData);\n this.ulElement = ListBase.createList(this.createElement, isSorted ? this.rootData : sortedData, this.listBaseOption);\n this.element.appendChild(this.ulElement);\n var rootNodes = this.ulElement.querySelectorAll('.e-list-item');\n if (this.loadOnDemand === false) {\n var i = 0;\n while (i < rootNodes.length) {\n this.renderChildNodes(rootNodes[i], true, null, true);\n i++;\n }\n }\n var parentEle = selectAll('.' + PARENTITEM, this.element);\n if ((parentEle.length === 1 && (rootNodes && rootNodes.length !== 0)) || this.loadOnDemand) {\n this.finalizeNode(this.element);\n }\n }\n this.updateTemplateForBlazor();\n this.parentNodeCheck = [];\n this.parentCheckData = [];\n this.updateCheckedStateFromDS();\n if (this.autoCheck && this.showCheckBox && !this.isLoaded) {\n this.updateParentCheckState();\n }\n };\n TreeView.prototype.updateTemplateForBlazor = function () {\n if (this.nodeTemplate && this.isBlazorPlatform && !this.isStringTemplate) {\n this.updateBlazorTemplate();\n }\n };\n /**\n * Update the checkedNodes from datasource at initial rendering\n */\n TreeView.prototype.updateCheckedStateFromDS = function (id) {\n if (this.treeData && this.showCheckBox) {\n if (this.dataType === 1) {\n var mapper = this.fields;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.isChecked, 'equal', true, false));\n for (var i = 0; i < resultData.length; i++) {\n var resultId = resultData[i][this.fields.id] ? resultData[i][this.fields.id].toString() : null;\n var resultPId = resultData[i][this.fields.parentID] ? resultData[i][this.fields.parentID].toString() : null;\n if (this.checkedNodes.indexOf(resultId) === -1 && !(this.isLoaded)) {\n this.checkedNodes.push(resultId);\n }\n if (resultData[i][this.fields.hasChildren]) {\n var id_1 = resultData[i][this.fields.id];\n var childData = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper.parentID, 'equal', id_1, false));\n for (var child = 0; child < childData.length; child++) {\n var childId = childData[child][this.fields.id] ? childData[child][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(childId) === -1 && this.autoCheck) {\n this.checkedNodes.push(childId);\n }\n }\n }\n }\n for (var i = 0; i < this.checkedNodes.length; i++) {\n var mapper_1 = this.fields;\n var checkState = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper_1.id, 'equal', this.checkedNodes[i], true));\n if (checkState[0] && this.autoCheck) {\n this.getCheckedNodeDetails(mapper_1, checkState);\n this.checkIndeterminateState(checkState[0]);\n }\n var checkedData = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper_1.parentID, 'equal', this.checkedNodes[i], true));\n for (var index = 0; index < checkedData.length; index++) {\n var checkedId = checkedData[index][this.fields.id] ? checkedData[index][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(checkedId) === -1 && this.autoCheck) {\n this.checkedNodes.push(checkedId);\n }\n }\n }\n }\n else if (this.dataType === 2 || (this.fields.dataSource instanceof DataManager &&\n this.isOffline)) {\n for (var index = 0; index < this.treeData.length; index++) {\n var fieldId = this.treeData[index][this.fields.id] ? this.treeData[index][this.fields.id].toString() : '';\n if (this.treeData[index][this.fields.isChecked] && !(this.isLoaded) && this.checkedNodes.indexOf(fieldId) === -1) {\n this.checkedNodes.push(fieldId);\n }\n var childItems = getValue(this.fields.child.toString(), this.treeData[index]);\n if (childItems) {\n this.updateChildCheckState(childItems, this.treeData[index]);\n }\n }\n }\n }\n };\n /**\n * To check whether the list data has sub child and to change the parent check state accordingly\n */\n TreeView.prototype.getCheckedNodeDetails = function (mapper, checkNodes) {\n var id = checkNodes[0][this.fields.parentID] ? checkNodes[0][this.fields.parentID].toString() : null;\n var count = 0;\n var element = this.element.querySelector('[data-uid=\"' + checkNodes[0][this.fields.id] + '\"]');\n var parentEle = this.element.querySelector('[data-uid=\"' + checkNodes[0][this.fields.parentID] + '\"]');\n if (!element && !parentEle) {\n var len = this.parentNodeCheck.length;\n if (this.parentNodeCheck.indexOf(id) === -1) {\n this.parentNodeCheck.push(id);\n }\n var childNodes = this.getChildNodes(this.treeData, id);\n for (var i = 0; i < childNodes.length; i++) {\n var childId = childNodes[i][this.fields.id] ? childNodes[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n if (count === childNodes.length && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n }\n var preElement = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper.id, 'equal', id, true));\n this.getCheckedNodeDetails(mapper, preElement);\n }\n else if (parentEle) {\n var check = select('.' + CHECK, parentEle);\n if (!check) {\n this.changeState(parentEle, 'indeterminate', null, true, true);\n }\n }\n };\n /**\n * Update the checkedNodes and parent state when all the child Nodes are in checkedstate at initial rendering\n */\n TreeView.prototype.updateParentCheckState = function () {\n var indeterminate = selectAll('.' + INDETERMINATE, this.element);\n var childCheckedElement;\n for (var i = 0; i < indeterminate.length; i++) {\n var node = closest(indeterminate[i], '.' + LISTITEM);\n var nodeId = node.getAttribute('data-uid').toString();\n if (this.dataType === 1) {\n childCheckedElement = new DataManager(this.treeData).\n executeLocal(new Query().where(this.fields.parentID, 'equal', nodeId, true));\n }\n else {\n childCheckedElement = this.getChildNodes(this.treeData, nodeId);\n }\n var count = 0;\n if (childCheckedElement) {\n for (var j = 0; j < childCheckedElement.length; j++) {\n var childId = childCheckedElement[j][this.fields.id].toString();\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n if (count === childCheckedElement.length) {\n var nodeCheck = node.getAttribute('data-uid');\n if (this.checkedNodes.indexOf(nodeCheck) === -1) {\n this.checkedNodes.push(nodeCheck);\n }\n this.changeState(node, 'check', null, true, true);\n }\n else if (count === 0 && this.checkedNodes.length === 0) {\n this.changeState(node, 'uncheck', null, true, true);\n }\n }\n }\n };\n /**\n * Change the parent to indeterminate state whenever the child is in checked state which is not rendered in DOM\n */\n TreeView.prototype.checkIndeterminateState = function (data) {\n var element;\n if (this.dataType === 1) {\n element = this.element.querySelector('[data-uid=\"' + data[this.fields.parentID] + '\"]');\n }\n else {\n element = this.element.querySelector('[data-uid=\"' + data[this.fields.id] + '\"]');\n }\n if (element) {\n var ariaChecked = element.querySelector('.' + CHECKBOXWRAP).getAttribute('aria-checked');\n if (ariaChecked !== 'true') {\n this.changeState(element, 'indeterminate', null, true, true);\n }\n }\n else if (this.dataType === 2) {\n var len = this.parentNodeCheck.length;\n if (this.parentNodeCheck.indexOf(data[this.fields.id].toString()) === -1) {\n this.parentNodeCheck.push(data[this.fields.id].toString());\n }\n }\n };\n /**\n * Update the checkedNodes for child and subchild from datasource (hierarchical datasource) at initial rendering\n */\n TreeView.prototype.updateChildCheckState = function (childItems, treeData) {\n var count = 0;\n var checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : '';\n for (var index = 0; index < childItems.length; index++) {\n var checkedChild = childItems[index][this.fields.id] ? childItems[index][this.fields.id].toString() : '';\n if (childItems[index][this.fields.isChecked] && !(this.isLoaded) && this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n }\n if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1 && this.autoCheck) {\n this.checkedNodes.push(checkedChild);\n }\n if (this.checkedNodes.indexOf(checkedChild) !== -1 && this.autoCheck) {\n count++;\n }\n var subChildItems = getValue(this.fields.child.toString(), childItems[index]);\n if (subChildItems) {\n this.parentCheckData.push(treeData);\n this.updateChildCheckState(subChildItems, childItems[index]);\n }\n if (count === childItems.length && this.autoCheck && this.checkedNodes.indexOf(checkedParent) === -1) {\n this.checkedNodes.push(checkedParent);\n }\n }\n if (count !== 0 && this.autoCheck) {\n this.checkIndeterminateState(treeData);\n for (var len = 0; len < this.parentCheckData.length; len++) {\n if ((treeData !== this.parentCheckData[len]) && (this.parentCheckData[len])) {\n this.checkIndeterminateState(this.parentCheckData[len]);\n }\n }\n }\n this.parentCheckData = [];\n };\n TreeView.prototype.beforeNodeCreate = function (e) {\n if (this.showCheckBox) {\n var checkboxEle = createCheckBox(this.createElement, true, { cssClass: this.touchClass });\n checkboxEle.setAttribute('role', 'checkbox');\n var icon = select('div.' + ICON, e.item);\n var id = e.item.getAttribute('data-uid');\n e.item.childNodes[0].insertBefore(checkboxEle, e.item.childNodes[0].childNodes[isNOU(icon) ? 0 : 1]);\n var checkValue = getValue(e.fields.isChecked, e.curData);\n if (this.checkedNodes.indexOf(id) > -1) {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else if (!isNOU(checkValue) && checkValue.toString() === 'true') {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else {\n checkboxEle.setAttribute('aria-checked', 'false');\n }\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n EventHandler.add(frame, 'mousedown', this.frameMouseHandler, this);\n EventHandler.add(frame, 'mouseup', this.frameMouseHandler, this);\n }\n if (this.fullRowSelect) {\n this.createFullRow(e.item);\n }\n if (this.allowMultiSelection && !e.item.classList.contains(SELECTED)) {\n e.item.setAttribute('aria-selected', 'false');\n }\n var fields = e.fields;\n this.addActionClass(e, fields.selected, SELECTED);\n this.addActionClass(e, fields.expanded, EXPANDED);\n if (!isNOU(this.nodeTemplateFn)) {\n var textEle = e.item.querySelector('.' + LISTTEXT);\n var dataId = e.item.getAttribute('data-uid');\n textEle.innerHTML = '';\n this.renderNodeTemplate(e.curData, textEle, dataId);\n }\n var eventArgs = {\n node: e.item,\n nodeData: e.curData,\n text: e.text,\n };\n if (!this.isRefreshed) {\n this.trigger('drawNode', eventArgs);\n }\n };\n TreeView.prototype.frameMouseHandler = function (e) {\n var rippleSpan = select('.' + CHECKBOXRIPPLE, e.target.parentElement);\n rippleMouseHandler(e, rippleSpan);\n };\n TreeView.prototype.addActionClass = function (e, action, cssClass) {\n var data = e.curData;\n var actionValue = getValue(action, data);\n if (!isNOU(actionValue) && actionValue.toString() !== 'false') {\n e.item.classList.add(cssClass);\n }\n };\n TreeView.prototype.getDataType = function (ds, mapper) {\n if (this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n for (var i = 0; i < ds.length; i++) {\n if (this.isOffline) {\n if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i])) && !isNOU(getValue(mapper.parentID, ds[i]))) {\n return 1;\n }\n }\n else if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i]))) {\n return 1;\n }\n }\n return 2;\n }\n for (var i = 0, len = ds.length; i < len; i++) {\n if ((typeof mapper.child === 'string') && !isNOU(getValue(mapper.child, ds[i]))) {\n return 2;\n }\n if (!isNOU(getValue(mapper.parentID, ds[i])) || !isNOU(getValue(mapper.hasChildren, ds[i]))) {\n return 1;\n }\n }\n return 1;\n };\n TreeView.prototype.getGroupedData = function (dataSource, groupBy) {\n var cusQuery = new Query().group(groupBy);\n var ds = ListBase.getDataSource(dataSource, cusQuery);\n var grpItem = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n grpItem.push(itemObj);\n }\n return grpItem;\n };\n TreeView.prototype.getSortedData = function (list) {\n if (list && this.sortOrder !== 'None') {\n list = ListBase.getDataSource(list, ListBase.addSorting(this.sortOrder, this.fields.text));\n }\n return list;\n };\n TreeView.prototype.finalizeNode = function (element) {\n var iNodes = selectAll('.' + IMAGE, element);\n for (var k = 0; k < iNodes.length; k++) {\n iNodes[k].setAttribute('alt', IMAGE);\n }\n if (this.isLoaded) {\n var sNodes = selectAll('.' + SELECTED, element);\n for (var i = 0; i < sNodes.length; i++) {\n this.selectNode(sNodes[i], null);\n break;\n }\n removeClass(sNodes, SELECTED);\n }\n var cNodes = selectAll('.' + LISTITEM + ':not(.' + EXPANDED + ')', element);\n for (var j = 0; j < cNodes.length; j++) {\n var icon = select('div.' + ICON, cNodes[j]);\n if (icon && icon.classList.contains(EXPANDABLE)) {\n this.disableExpandAttr(cNodes[j]);\n }\n }\n var eNodes = selectAll('.' + EXPANDED, element);\n if (!this.isInitalExpand) {\n for (var i = 0; i < eNodes.length; i++) {\n this.renderChildNodes(eNodes[i]);\n }\n }\n removeClass(eNodes, EXPANDED);\n this.updateList();\n if (this.isLoaded) {\n this.updateCheckedProp();\n }\n };\n TreeView.prototype.updateCheckedProp = function () {\n if (this.showCheckBox) {\n var nodes = [].concat([], this.checkedNodes);\n this.setProperties({ checkedNodes: nodes }, true);\n }\n };\n TreeView.prototype.ensureIndeterminate = function () {\n if (this.autoCheck) {\n var liElement = selectAll('li', this.element);\n var ulElement = void 0;\n for (var i = 0; i < liElement.length; i++) {\n if (liElement[i].classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, liElement[i]);\n if (ulElement) {\n this.ensureParentCheckState(liElement[i]);\n }\n else {\n this.ensureChildCheckState(liElement[i]);\n }\n }\n }\n }\n else {\n var indeterminate = selectAll('.' + INDETERMINATE, this.element);\n for (var i = 0; i < indeterminate.length; i++) {\n indeterminate[i].classList.remove(INDETERMINATE);\n }\n }\n };\n TreeView.prototype.ensureParentCheckState = function (element) {\n if (!isNOU(element)) {\n if (element.classList.contains(ROOT)) {\n return;\n }\n var ulElement = element;\n if (element.classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, element);\n }\n var checkedNodes = selectAll('.' + CHECK, ulElement);\n var indeterminateNodes = selectAll('.' + INDETERMINATE, ulElement);\n var nodes = selectAll('.' + LISTITEM, ulElement);\n var checkBoxEle = element.getElementsByClassName(CHECKBOXWRAP)[0];\n if (nodes.length === checkedNodes.length) {\n this.changeState(checkBoxEle, 'check', null, true, true);\n }\n else if (checkedNodes.length > 0 || indeterminateNodes.length > 0) {\n this.changeState(checkBoxEle, 'indeterminate', null, true, true);\n }\n else if (checkedNodes.length === 0) {\n this.changeState(checkBoxEle, 'uncheck', null, true, true);\n }\n var parentUL = closest(element, '.' + PARENTITEM);\n if (!isNOU(parentUL)) {\n var currentParent = closest(parentUL, '.' + LISTITEM);\n this.ensureParentCheckState(currentParent);\n }\n }\n };\n TreeView.prototype.ensureChildCheckState = function (element, e) {\n if (!isNOU(element)) {\n var childElement = select('.' + PARENTITEM, element);\n var checkBoxes = void 0;\n if (!isNOU(childElement)) {\n checkBoxes = selectAll('.' + CHECKBOXWRAP, childElement);\n var isChecked = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n var parentCheck = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(INDETERMINATE);\n var childCheck = childElement.querySelectorAll('li');\n var expandState = childElement.parentElement.getAttribute('aria-expanded');\n var checkedState = void 0;\n for (var index = 0; index < checkBoxes.length; index++) {\n var childId = childCheck[index].getAttribute('data-uid');\n if (!isNOU(this.currentLoadData) && !isNOU(getValue(this.fields.isChecked, this.currentLoadData[index]))) {\n checkedState = getValue(this.fields.isChecked, this.currentLoadData[index]) ? 'check' : 'uncheck';\n if (this.ele !== -1) {\n checkedState = isChecked ? 'check' : 'uncheck';\n }\n if ((checkedState === 'uncheck') && (!isUndefined(this.parentNodeCheck) && this.autoCheck\n && this.parentNodeCheck.indexOf(childId) !== -1)) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n checkedState = 'indeterminate';\n }\n }\n else {\n var isNodeChecked = checkBoxes[index].getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n if (isChecked) {\n checkedState = 'check';\n }\n else if (isNodeChecked && !this.isLoaded) {\n checkedState = 'check';\n }\n else if (this.checkedNodes.indexOf(childId) !== -1 && this.isLoaded && (parentCheck || isChecked)) {\n checkedState = 'check';\n }\n else if (childCheck[index].classList.contains(CHILD) && (!isUndefined(this.parentNodeCheck) && this.autoCheck\n && (isChecked || parentCheck) && this.parentNodeCheck.indexOf(childId) !== -1)) {\n checkedState = 'indeterminate';\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n }\n else if (this.dataType === 1 && (!isUndefined(this.parentNodeCheck) && this.autoCheck &&\n (isChecked || parentCheck) && this.parentNodeCheck.indexOf(childId) !== -1)) {\n checkedState = 'indeterminate';\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n }\n else {\n checkedState = 'uncheck';\n }\n }\n this.changeState(checkBoxes[index], checkedState, e, true, true);\n }\n }\n if (this.autoCheck && this.isLoaded) {\n this.updateParentCheckState();\n }\n }\n };\n TreeView.prototype.doCheckBoxAction = function (nodes, doCheck) {\n var li = selectAll('.' + LISTITEM, this.element);\n if (!isNOU(nodes)) {\n for (var len = nodes.length; len >= 0; len--) {\n var liEle = void 0;\n if (nodes.length === 1) {\n liEle = this.getElement(nodes[len - 1]);\n }\n else {\n liEle = this.getElement(nodes[len]);\n }\n if (isNOU(liEle)) {\n var node = void 0;\n node = nodes[len - nodes.length] ? nodes[len - nodes.length].toString() : nodes[len] ? nodes[len].toString() : null;\n if (node !== '' && doCheck && node) {\n this.setValidCheckedNode(node);\n this.dynamicCheckState(node, doCheck);\n }\n else if (this.checkedNodes.indexOf(node) !== -1 && node !== '' && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(node), 1);\n var childItems = this.getChildNodes(this.treeData, node);\n if (childItems) {\n for (var i = 0; i < childItems.length; i++) {\n var id = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(id) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(id), 1);\n }\n }\n if (this.parentNodeCheck.indexOf(node) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(node), 1);\n }\n }\n if (node) {\n this.dynamicCheckState(node, doCheck);\n }\n this.updateField(this.treeData, this.fields, node, 'isChecked', null);\n }\n continue;\n }\n var checkBox = select('.' + PARENTITEM + ' .' + CHECKBOXWRAP, liEle);\n this.validateCheckNode(checkBox, !doCheck, liEle, null);\n }\n }\n else {\n var checkBoxes = selectAll('.' + CHECKBOXWRAP, this.element);\n if (this.loadOnDemand) {\n for (var index = 0; index < checkBoxes.length; index++) {\n this.updateFieldChecked(checkBoxes[index], doCheck);\n this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck', null, null, null, doCheck);\n }\n }\n else {\n for (var index = 0; index < checkBoxes.length; index++) {\n this.updateFieldChecked(checkBoxes[index], doCheck);\n this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck');\n }\n }\n }\n if (nodes) {\n for (var j = 0; j < nodes.length; j++) {\n var node = nodes[j] ? nodes[j].toString() : '';\n if (!doCheck) {\n this.updateField(this.treeData, this.fields, node, 'isChecked', null);\n }\n }\n }\n if (this.autoCheck) {\n this.updateParentCheckState();\n }\n };\n TreeView.prototype.updateFieldChecked = function (checkbox, doCheck) {\n var currLi = closest(checkbox, '.' + LISTITEM);\n var id = currLi.getAttribute('data-uid');\n var nodeDetails = this.getNodeData(currLi);\n if (nodeDetails.isChecked === 'true' && !doCheck) {\n this.updateField(this.treeData, this.fields, id, 'isChecked', null);\n }\n };\n /**\n * Changes the parent and child check state while changing the checkedNodes via setmodel\n */\n TreeView.prototype.dynamicCheckState = function (node, doCheck) {\n if (this.dataType === 1) {\n var count = 0;\n var resultId = new DataManager(this.treeData).executeLocal(new Query().where(this.fields.id, 'equal', node, true));\n if (resultId[0]) {\n var id = resultId[0][this.fields.id] ? resultId[0][this.fields.id].toString() : null;\n var parent_1 = resultId[0][this.fields.parentID] ? resultId[0][this.fields.parentID].toString() : null;\n var parentElement = this.element.querySelector('[data-uid=\"' + parent_1 + '\"]');\n var indeterminate = parentElement ? select('.' + INDETERMINATE, parentElement) : null;\n var check = parentElement ? select('.' + CHECK, parentElement) : null;\n var element = this.element.querySelector('[data-uid=\"' + id + '\"]');\n var childNodes = this.getChildNodes(this.treeData, parent_1);\n if (childNodes) {\n for (var i = 0; i < childNodes.length; i++) {\n var childId = childNodes[i][this.fields.id] ? childNodes[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n }\n if (this.checkedNodes.indexOf(node) !== -1 && parentElement && (id === node) && this.autoCheck) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && element && (id === node) && !doCheck) {\n this.changeState(element, 'uncheck', null);\n }\n else if (this.checkedNodes.indexOf(node) !== -1 && element && (id === node) && doCheck) {\n this.changeState(element, 'check', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && !element && parentElement && (id === node) && this.autoCheck\n && count !== 0) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && !element && parentElement && (id === node) && this.autoCheck\n && count === 0) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else if (!element && !parentElement && (id === node) && this.autoCheck) {\n this.updateIndeterminate(node, doCheck);\n }\n }\n }\n else if (this.dataType === 2 || (this.fields.dataSource instanceof DataManager &&\n this.isOffline)) {\n var id = void 0;\n var parentElement = void 0;\n var check = void 0;\n for (var i = 0; i < this.treeData.length; i++) {\n id = this.treeData[i][this.fields.id] ? this.treeData[i][this.fields.id].toString() : '';\n parentElement = this.element.querySelector('[data-uid=\"' + id + '\"]');\n check = parentElement ? select('.' + CHECK, parentElement) : null;\n if (this.checkedNodes.indexOf(id) === -1 && parentElement && check && !doCheck) {\n this.changeState(parentElement, 'uncheck', null);\n }\n var subChild = getValue(this.fields.child.toString(), this.treeData[i]);\n if (subChild) {\n this.updateChildIndeterminate(subChild, id, node, doCheck, id);\n }\n }\n }\n };\n /**\n * updates the parent and child check state while changing the checkedNodes via setmodel for listData\n */\n TreeView.prototype.updateIndeterminate = function (node, doCheck) {\n var indeterminateData = this.getTreeData(node);\n var count = 0;\n var parent;\n if (this.dataType === 1) {\n parent = indeterminateData[0][this.fields.parentID] ? indeterminateData[0][this.fields.parentID].toString() : null;\n }\n var childNodes = this.getChildNodes(this.treeData, parent);\n if (childNodes) {\n for (var i = 0; i < childNodes.length; i++) {\n var childId = childNodes[i][this.fields.id] ? childNodes[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n }\n var parentElement = this.element.querySelector('[data-uid=\"' + parent + '\"]');\n if (parentElement && doCheck) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (!doCheck && parentElement && this.parentNodeCheck.indexOf(parent) === -1 && count !== 0) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (!doCheck && parentElement && this.parentNodeCheck.indexOf(parent) === -1 && count === 0) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else if (!parentElement) {\n if (!doCheck && this.checkedNodes.indexOf(parent) === -1 && this.parentNodeCheck.indexOf(parent) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(parent), 1);\n }\n else if (doCheck && this.checkedNodes.indexOf(parent) === -1 && this.parentNodeCheck.indexOf(parent) === -1) {\n this.parentNodeCheck.push(parent);\n }\n else if (!doCheck && this.checkedNodes.indexOf(parent) !== -1 && this.parentNodeCheck.indexOf(parent) === -1\n && count !== 0) {\n this.parentNodeCheck.push(parent);\n }\n this.updateIndeterminate(parent, doCheck);\n if (this.checkedNodes.indexOf(parent) !== -1 && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(parent), 1);\n }\n }\n };\n /**\n * updates the parent and child check state while changing the checkedNodes via setmodel for hierarchical data\n */\n TreeView.prototype.updateChildIndeterminate = function (subChild, parent, node, doCheck, child) {\n var count = 0;\n for (var j = 0; j < subChild.length; j++) {\n var subId = subChild[j][this.fields.id] ? subChild[j][this.fields.id].toString() : '';\n if (this.checkedNodes.indexOf(subId) !== -1) {\n count++;\n }\n var parentElement = this.element.querySelector('[data-uid=\"' + parent + '\"]');\n var indeterminate = parentElement ? select('.' + INDETERMINATE, parentElement) : null;\n var check = parentElement ? select('.' + CHECK, parentElement) : null;\n var element = this.element.querySelector('[data-uid=\"' + subId + '\"]');\n var childElementCheck = element ? select('.' + CHECK, element) : null;\n if (this.checkedNodes.indexOf(node) !== -1 && parentElement && (subId === node) && this.autoCheck) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && parentElement && !element && (subId === node) && !doCheck) {\n if (this.autoCheck) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else {\n if (count !== 0) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else {\n this.changeState(parentElement, 'uncheck', null);\n }\n }\n }\n else if (this.checkedNodes.indexOf(node) === -1 && element && (subId === node) && !doCheck) {\n this.changeState(element, 'uncheck', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && indeterminate && (subId === node) && this.autoCheck && count === 0\n && !doCheck) {\n indeterminate.classList.remove(INDETERMINATE);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && !element && check && (subId === node) && count === 0) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else if (this.checkedNodes.indexOf(subId) === -1 && element && childElementCheck && count === 0) {\n this.changeState(element, 'uncheck', null);\n }\n else if (!element && !parentElement && (subId === node) || (this.parentNodeCheck.indexOf(parent) !== -1) && this.autoCheck) {\n var childElement = this.element.querySelector('[data-uid=\"' + child + '\"]');\n if (doCheck && count !== 0) {\n this.changeState(childElement, 'indeterminate', null);\n }\n else if (doCheck && count === subChild.length && this.checkedNodes.indexOf(parent) === -1) {\n this.checkedNodes.push(parent);\n }\n else if (!doCheck && count === 0 && this.parentNodeCheck.indexOf(parent) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(parent));\n }\n if (this.parentNodeCheck.indexOf(parent) === -1) {\n this.parentNodeCheck.push(parent);\n }\n }\n var innerChild = getValue(this.fields.child.toString(), subChild[j]);\n if (innerChild) {\n this.updateChildIndeterminate(innerChild, subId, node, doCheck, child);\n }\n }\n };\n TreeView.prototype.changeState = function (wrapper, state, e, isPrevent, isAdd, doCheck) {\n var _this = this;\n var eventArgs;\n var currLi = closest(wrapper, '.' + LISTITEM);\n if (!isPrevent) {\n this.checkActionNodes = [];\n eventArgs = this.getCheckEvent(currLi, state, e);\n this.trigger('nodeChecking', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.nodeCheckAction(wrapper, state, currLi, observedArgs, e, isPrevent, isAdd, doCheck);\n }\n });\n }\n else {\n this.nodeCheckAction(wrapper, state, currLi, eventArgs, e, isPrevent, isAdd, doCheck);\n }\n };\n TreeView.prototype.nodeCheckAction = function (wrapper, state, currLi, eventArgs, e, isPrevent, isAdd, doCheck) {\n var ariaState;\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n this.addCheck(currLi);\n ariaState = 'true';\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n this.removeCheck(currLi);\n ariaState = 'false';\n }\n else if (state === 'indeterminate' && this.autoCheck) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n this.removeCheck(currLi);\n ariaState = 'mixed';\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n if (isAdd) {\n var data = [].concat([], this.checkActionNodes);\n eventArgs = this.getCheckEvent(currLi, state, e);\n if (isUndefined(isPrevent)) {\n eventArgs.data = data;\n }\n }\n if (doCheck !== undefined) {\n this.ensureStateChange(currLi, doCheck);\n }\n if (!isPrevent) {\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n this.allowServerDataBinding = true;\n this.updateServerProperties(\"check\");\n this.allowServerDataBinding = false;\n eventArgs.data[0].checked = ariaState;\n this.trigger('nodeChecked', eventArgs);\n this.checkActionNodes = [];\n }\n }\n };\n TreeView.prototype.addCheck = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n };\n TreeView.prototype.removeCheck = function (liEle) {\n var index = this.checkedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.checkedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.getCheckEvent = function (currLi, action, e) {\n this.checkActionNodes.push(this.getNodeData(currLi));\n var nodeData = this.checkActionNodes;\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, data: nodeData };\n };\n TreeView.prototype.finalize = function () {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (!isNullOrUndefined(firstUl)) {\n firstUl.setAttribute('role', treeAriaAttr.treeRole);\n this.setMultiSelect(this.allowMultiSelection);\n var firstNode = select('.' + LISTITEM, this.element);\n if (firstNode) {\n addClass([firstNode], FOCUS);\n this.updateIdAttr(null, firstNode);\n }\n this.renderReactTemplates();\n this.hasPid = this.rootData[0] ? this.rootData[0].hasOwnProperty(this.fields.parentID) : false;\n this.doExpandAction();\n }\n };\n TreeView.prototype.doExpandAction = function () {\n var eUids = this.expandedNodes;\n if (this.isInitalExpand && eUids.length > 0) {\n this.setProperties({ expandedNodes: [] }, true);\n if (this.isBlazorPlatform && !this.initialRender) {\n return;\n }\n // tslint:disable\n if (this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n this.expandGivenNodes(eUids);\n }\n else {\n for (var i = 0; i < eUids.length; i++) {\n var eNode = select('[data-uid=\"' + eUids[i] + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null);\n }\n }\n else {\n if (eUids[i] && this.expandChildren.indexOf(eUids[i]) === -1) {\n this.expandChildren.push(eUids[i].toString());\n }\n continue;\n }\n }\n this.afterFinalized();\n }\n }\n else {\n this.afterFinalized();\n }\n };\n TreeView.prototype.expandGivenNodes = function (arr) {\n var proxy = this;\n this.expandCallback(arr[this.index], function () {\n proxy.index++;\n if (proxy.index < arr.length) {\n proxy.expandGivenNodes(arr);\n }\n else {\n proxy.afterFinalized();\n }\n });\n };\n TreeView.prototype.expandCallback = function (eUid, callback) {\n var eNode = select('[data-uid=\"' + eUid + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null, false, callback);\n }\n else {\n callback();\n }\n }\n else {\n callback();\n }\n };\n TreeView.prototype.afterFinalized = function () {\n if (!this.isBlazorPlatform || (this.isBlazorPlatform && !this.initialRender)) {\n this.doSelectionAction();\n }\n this.updateCheckedProp();\n if (this.isBlazorPlatform) {\n if (this.initialRender) {\n this.setCheckedNodes(this.checkedNodes);\n }\n this.updateInstance();\n this.initialRender = false;\n }\n this.isAnimate = true;\n this.isInitalExpand = false;\n if (!this.isLoaded || this.isFieldChange) {\n var eventArgs = { data: this.treeData };\n this.trigger('dataBound', eventArgs);\n }\n this.isLoaded = true;\n };\n TreeView.prototype.doSelectionAction = function () {\n var sNodes = selectAll('.' + SELECTED, this.element);\n var sUids = this.selectedNodes;\n if (sUids.length > 0) {\n this.setProperties({ selectedNodes: [] }, true);\n for (var i = 0; i < sUids.length; i++) {\n var sNode = select('[data-uid=\"' + sUids[i] + '\"]', this.element);\n if (sNode && !(sNode.classList.contains('e-active'))) {\n this.selectNode(sNode, null, true);\n }\n else {\n this.selectedNodes.push(sUids[i]);\n }\n if (!this.allowMultiSelection) {\n break;\n }\n }\n }\n else {\n this.selectGivenNodes(sNodes);\n }\n removeClass(sNodes, SELECTED);\n };\n TreeView.prototype.selectGivenNodes = function (sNodes) {\n for (var i = 0; i < sNodes.length; i++) {\n if (!sNodes[i].classList.contains('e-disable')) {\n this.selectNode(sNodes[i], null, true);\n }\n if (!this.allowMultiSelection) {\n break;\n }\n }\n };\n TreeView.prototype.clickHandler = function (event) {\n var target = event.originalEvent.target;\n EventHandler.remove(this.element, 'contextmenu', this.preventContextMenu);\n if (!target || this.dragStartAction) {\n return;\n }\n else {\n var classList = target.classList;\n var li = closest(target, '.' + LISTITEM);\n if (!li) {\n return;\n }\n else if (event.originalEvent.which !== 3) {\n var rippleElement = select('.' + RIPPLEELMENT, li);\n var rippleIcons = select('.' + ICON, li);\n this.removeHover();\n this.setFocusElement(li);\n if (this.showCheckBox && !li.classList.contains('e-disable')) {\n var checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNOU(checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, checkWrapper);\n this.validateCheckNode(checkWrapper, checkElement.classList.contains(CHECK), li, event.originalEvent);\n this.triggerClickEvent(event.originalEvent, li);\n return;\n }\n }\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(li, target, event);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, target, event);\n }\n else if (rippleElement && rippleIcons) {\n if (rippleIcons.classList.contains(RIPPLE) && rippleIcons.classList.contains(EXPANDABLE)) {\n this.expandAction(li, rippleIcons, event);\n }\n else if (rippleIcons.classList.contains(RIPPLE) && rippleIcons.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, rippleIcons, event);\n }\n else if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n else {\n if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n }\n this.triggerClickEvent(event.originalEvent, li);\n }\n };\n TreeView.prototype.nodeCheckedEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n var eventArgs = this.getCheckEvent(wrapper, isCheck ? 'uncheck' : 'check', e);\n eventArgs.data = eventArgs.data.splice(0, eventArgs.data.length - 1);\n this.trigger('nodeChecked', eventArgs);\n };\n TreeView.prototype.triggerClickEvent = function (e, li) {\n var eventArgs = {\n event: e,\n node: li,\n };\n this.trigger('nodeClicked', eventArgs);\n };\n TreeView.prototype.expandNode = function (currLi, icon, loaded) {\n var _this = this;\n this.renderReactTemplates();\n if (icon.classList.contains(LOAD)) {\n this.hideSpinner(icon);\n }\n if (!this.initialRender) {\n icon.classList.add('interaction');\n }\n if (loaded !== true || (loaded === true && currLi.classList.contains('e-expanded'))) {\n if (this.preventExpand !== true) {\n removeClass([icon], EXPANDABLE);\n addClass([icon], COLLAPSIBLE);\n var start_1 = 0;\n var end_1 = 0;\n var proxy_1 = this;\n var ul_1 = select('.' + PARENTITEM, currLi);\n var liEle_1 = currLi;\n this.setHeight(liEle_1, ul_1);\n var activeElement_1 = select('.' + LISTITEM + '.' + ACTIVE, currLi);\n if (this.isAnimate && !this.isRefreshed) {\n this.aniObj.animate(ul_1, {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing,\n begin: function (args) {\n liEle_1.style.overflow = 'hidden';\n if (!isNullOrUndefined(activeElement_1) && activeElement_1 instanceof HTMLElement) {\n activeElement_1.classList.add(ITEM_ANIMATION_ACTIVE);\n }\n start_1 = liEle_1.offsetHeight;\n end_1 = select('.' + TEXTWRAP, currLi).offsetHeight;\n },\n progress: function (args) {\n args.element.style.display = 'block';\n proxy_1.animateHeight(args, start_1, end_1);\n },\n end: function (args) {\n args.element.style.display = 'block';\n if (!isNullOrUndefined(activeElement_1) && activeElement_1 instanceof HTMLElement) {\n activeElement_1.classList.remove(ITEM_ANIMATION_ACTIVE);\n }\n _this.expandedNode(liEle_1, ul_1, icon);\n }\n });\n }\n else {\n this.expandedNode(liEle_1, ul_1, icon);\n }\n }\n }\n else {\n var ul = select('.' + PARENTITEM, currLi);\n ul.style.display = 'none';\n if (this.fields.dataSource instanceof DataManager === true) {\n this.preventExpand = false;\n }\n }\n if (this.initialRender) {\n icon.classList.add('interaction');\n }\n };\n TreeView.prototype.expandedNode = function (currLi, ul, icon) {\n ul.style.display = 'block';\n currLi.style.display = 'block';\n currLi.style.overflow = '';\n currLi.style.height = '';\n removeClass([icon], PROCESS);\n this.addExpand(currLi);\n this.allowServerDataBinding = true;\n this.updateServerProperties(\"expand\");\n this.allowServerDataBinding = false;\n if (this.isLoaded && this.expandArgs && !this.isRefreshed) {\n this.expandArgs = this.getExpandEvent(currLi, null);\n this.trigger('nodeExpanded', this.expandArgs);\n }\n };\n TreeView.prototype.addExpand = function (liEle) {\n liEle.setAttribute('aria-expanded', 'true');\n removeClass([liEle], NODECOLLAPSED);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.expandedNodes.indexOf(id) === -1) {\n this.expandedNodes.push(id);\n }\n };\n TreeView.prototype.collapseNode = function (currLi, icon, e) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n var colArgs;\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeCollapsing', colArgs, function (observedArgs) {\n if (observedArgs.cancel) {\n removeClass([icon], PROCESS);\n }\n else {\n _this.nodeCollapseAction(currLi, icon, observedArgs);\n }\n });\n }\n else {\n this.nodeCollapseAction(currLi, icon, colArgs);\n }\n };\n TreeView.prototype.nodeCollapseAction = function (currLi, icon, colArgs) {\n var _this = this;\n removeClass([icon], COLLAPSIBLE);\n addClass([icon], EXPANDABLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n var activeElement = select('.' + LISTITEM + '.' + ACTIVE, currLi);\n if (this.isAnimate) {\n this.aniObj.animate(ul, {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n if (!isNullOrUndefined(activeElement) && activeElement instanceof HTMLElement) {\n activeElement.classList.add(ITEM_ANIMATION_ACTIVE);\n }\n start = select('.' + TEXTWRAP, currLi).offsetHeight;\n end = liEle.offsetHeight;\n },\n progress: function (args) {\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n args.element.style.display = 'none';\n if (!isNullOrUndefined(activeElement) && activeElement instanceof HTMLElement) {\n activeElement.classList.remove(ITEM_ANIMATION_ACTIVE);\n }\n _this.collapsedNode(liEle, ul, icon, colArgs);\n }\n });\n }\n else {\n this.collapsedNode(liEle, ul, icon, colArgs);\n }\n };\n TreeView.prototype.collapsedNode = function (liEle, ul, icon, colArgs) {\n ul.style.display = 'none';\n liEle.style.overflow = '';\n liEle.style.height = '';\n removeClass([icon], PROCESS);\n this.allowServerDataBinding = true;\n this.updateServerProperties(\"expand\");\n this.allowServerDataBinding = false;\n this.removeExpand(liEle);\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(liEle, null);\n this.trigger('nodeCollapsed', colArgs);\n }\n };\n TreeView.prototype.removeExpand = function (liEle, toRemove) {\n if (toRemove) {\n liEle.removeAttribute('aria-expanded');\n }\n else {\n this.disableExpandAttr(liEle);\n }\n var index = this.expandedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.expandedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.disableExpandAttr = function (liEle) {\n liEle.setAttribute('aria-expanded', 'false');\n addClass([liEle], NODECOLLAPSED);\n };\n TreeView.prototype.setHeight = function (currLi, ul) {\n ul.style.display = 'block';\n ul.style.visibility = 'hidden';\n currLi.style.height = currLi.offsetHeight + 'px';\n ul.style.display = 'none';\n ul.style.visibility = '';\n };\n TreeView.prototype.animateHeight = function (args, start, end) {\n var remaining = (args.duration - args.timeStamp) / args.duration;\n var currentHeight = (end - start) * remaining + start;\n args.element.parentElement.style.height = currentHeight + 'px';\n };\n TreeView.prototype.renderChildNodes = function (parentLi, expandChild, callback, loaded) {\n var _this = this;\n var eicon = select('div.' + ICON, parentLi);\n if (isNOU(eicon)) {\n return;\n }\n this.showSpinner(eicon);\n var childItems;\n // tslint:disable\n if (this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n var level = this.parents(parentLi, '.' + PARENTITEM).length;\n var mapper_2 = this.getChildFields(this.fields, level, 1);\n if (isNOU(mapper_2) || isNOU(mapper_2.dataSource)) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n return;\n }\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager && this.isOffline) {\n this.treeList.pop();\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.loadChild(childItems, mapper_2, eicon, parentLi, expandChild, callback, loaded);\n this.updateTemplateForBlazor();\n }\n else {\n mapper_2.dataSource.executeQuery(this.getQuery(mapper_2, parentLi.getAttribute('data-uid'))).then(function (e) {\n _this.treeList.pop();\n childItems = e.result;\n if (_this.dataType === 1) {\n _this.dataType = 2;\n }\n _this.loadChild(childItems, mapper_2, eicon, parentLi, expandChild, callback, loaded);\n _this.updateTemplateForBlazor();\n }).catch(function (e) {\n _this.trigger('actionFailure', { error: e });\n });\n }\n }\n else {\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.currentLoadData = this.getSortedData(childItems);\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n return;\n }\n else {\n if (!this.isBlazorPlatform || !this.initialRender) {\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, this.currentLoadData, this.listBaseOption));\n }\n this.expandNode(parentLi, eicon, loaded);\n this.setSelectionForChildNodes(childItems);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n if (this.loadOnDemand && this.nodeTemplate && this.isBlazorPlatform && !this.isStringTemplate) {\n this.updateBlazorTemplate();\n }\n this.disableTreeNodes(childItems);\n this.renderSubChild(parentLi, expandChild, loaded);\n }\n }\n };\n TreeView.prototype.loadChild = function (childItems, mapper, eicon, parentLi, expandChild, callback, loaded) {\n this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n }\n else {\n this.updateListProp(mapper);\n if (this.fields.dataSource instanceof DataManager && !this.isOffline) {\n var id = parentLi.getAttribute('data-uid');\n var nodeData = this.getNodeObject(id);\n setValue('child', childItems, nodeData);\n }\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, childItems, this.listBaseOption));\n this.expandNode(parentLi, eicon, loaded);\n this.setSelectionForChildNodes(childItems);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.disableTreeNodes(childItems);\n this.renderSubChild(parentLi, expandChild, loaded);\n }\n if (callback) {\n callback();\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.disableTreeNodes = function (childItems) {\n var i = 0;\n while (i < childItems.length) {\n var id = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : null;\n if (this.disableNode !== undefined && this.disableNode.indexOf(id) !== -1) {\n this.doDisableAction([id]);\n }\n i++;\n }\n };\n /**\n * Sets the child Item in selectedState while rendering the child node\n */\n TreeView.prototype.setSelectionForChildNodes = function (nodes) {\n var i;\n for (i = 0; i < nodes.length; i++) {\n var id = nodes[i][this.fields.id] ? nodes[i][this.fields.id].toString() : null;\n if (this.selectedNodes !== undefined && this.selectedNodes.indexOf(id) !== -1) {\n this.doSelectionAction();\n }\n }\n };\n TreeView.prototype.ensureCheckNode = function (element) {\n if (this.showCheckBox) {\n this.ele = (this.checkedElement) ? this.checkedElement.indexOf(element.getAttribute('data-uid')) : null;\n if (this.autoCheck) {\n this.ensureChildCheckState(element);\n this.ensureParentCheckState(element);\n }\n }\n this.currentLoadData = null;\n };\n TreeView.prototype.getFields = function (mapper, nodeLevel, dataLevel) {\n if (nodeLevel === dataLevel) {\n return mapper;\n }\n else {\n return this.getFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildFields = function (mapper, nodeLevel, dataLevel) {\n var childData;\n if (nodeLevel === dataLevel) {\n return this.getChildMapper(mapper);\n }\n else {\n return this.getChildFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildMapper = function (mapper) {\n return (typeof mapper.child === 'string' || isNOU(mapper.child)) ? mapper : mapper.child;\n };\n TreeView.prototype.getChildNodes = function (obj, parentId, isRoot) {\n if (isRoot === void 0) { isRoot = false; }\n var childNodes;\n if (isNOU(obj)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n return this.getChildGroup(this.groupedData, parentId, isRoot);\n }\n else {\n if (typeof this.fields.child === 'string') {\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, obj[i]);\n if (dataId && dataId.toString() === parentId) {\n return getValue(this.fields.child, obj[i]);\n }\n else if (!isNOU(getValue(this.fields.child, obj[i]))) {\n childNodes = this.getChildNodes(getValue(this.fields.child, obj[i]), parentId);\n if (childNodes !== undefined) {\n break;\n }\n }\n }\n }\n }\n return childNodes;\n };\n TreeView.prototype.getChildGroup = function (data, parentId, isRoot) {\n var childNodes;\n if (isNOU(data)) {\n return childNodes;\n }\n for (var i = 0, objlen = data.length; i < objlen; i++) {\n if (!isNOU(data[i][0]) && !isNOU(getValue(this.fields.parentID, data[i][0]))) {\n if (getValue(this.fields.parentID, data[i][0]).toString() === parentId) {\n return data[i];\n }\n }\n else if (isRoot) {\n return data[i];\n }\n else {\n return [];\n }\n }\n return childNodes;\n };\n TreeView.prototype.renderSubChild = function (element, expandChild, loaded) {\n if (expandChild) {\n var cIcons = selectAll('.' + EXPANDABLE, element);\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n if (element.querySelector('.e-icons') !== cIcons[i]) {\n var curLi = closest(icon, '.' + LISTITEM);\n this.expandArgs = this.getExpandEvent(curLi, null);\n if (loaded !== true) {\n this.trigger('nodeExpanding', this.expandArgs);\n }\n this.renderChildNodes(curLi, expandChild, null, loaded);\n }\n }\n }\n };\n TreeView.prototype.toggleSelect = function (li, e, multiSelect) {\n if (!li.classList.contains('e-disable')) {\n if (this.allowMultiSelection && ((e && e.ctrlKey) || multiSelect) && this.isActive(li)) {\n this.unselectNode(li, e);\n }\n else {\n this.selectNode(li, e, multiSelect);\n }\n }\n };\n TreeView.prototype.isActive = function (li) {\n return li.classList.contains(ACTIVE) ? true : false;\n };\n TreeView.prototype.selectNode = function (li, e, multiSelect) {\n var _this = this;\n if (isNOU(li) || (!this.allowMultiSelection && this.isActive(li) && !isNOU(e))) {\n this.setFocusElement(li);\n return;\n }\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'select', e);\n this.trigger('nodeSelecting', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.nodeSelectAction(li, e, observedArgs, multiSelect);\n }\n });\n }\n else {\n this.nodeSelectAction(li, e, eventArgs, multiSelect);\n }\n };\n TreeView.prototype.nodeSelectAction = function (li, e, eventArgs, multiSelect) {\n if (!this.allowMultiSelection || (!multiSelect && (!e || (e && !e.ctrlKey)))) {\n this.removeSelectAll();\n }\n if (this.allowMultiSelection && e && e.shiftKey) {\n if (!this.startNode) {\n this.startNode = li;\n }\n var startIndex = this.liList.indexOf(this.startNode);\n var endIndex = this.liList.indexOf(li);\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex; i <= endIndex; i++) {\n var currNode = this.liList[i];\n if (isVisible(currNode) && !currNode.classList.contains('e-disable')) {\n this.addSelect(currNode);\n }\n }\n }\n else {\n this.startNode = li;\n this.addSelect(li);\n }\n this.setFocusElement(li);\n if (this.isLoaded) {\n this.allowServerDataBinding = true;\n this.updateServerProperties(\"select\");\n this.allowServerDataBinding = false;\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.unselectNode = function (li, e) {\n var _this = this;\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'un-select', e);\n this.trigger('nodeSelecting', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.allowServerDataBinding = true;\n _this.updateServerProperties(\"select\");\n _this.allowServerDataBinding = false;\n _this.nodeUnselectAction(li, observedArgs);\n }\n });\n }\n else {\n this.nodeUnselectAction(li, eventArgs);\n }\n };\n TreeView.prototype.nodeUnselectAction = function (li, eventArgs) {\n this.removeSelect(li);\n this.setFocusElement(li);\n if (this.isLoaded) {\n this.allowServerDataBinding = true;\n this.updateServerProperties(\"select\");\n this.allowServerDataBinding = false;\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.setFocusElement = function (li) {\n if (!isNOU(li)) {\n var focusedNode = this.getFocusedNode();\n if (focusedNode) {\n removeClass([focusedNode], FOCUS);\n }\n addClass([li], FOCUS);\n this.updateIdAttr(focusedNode, li);\n }\n };\n TreeView.prototype.addSelect = function (liEle) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n this.selectedNodes.push(id);\n }\n };\n TreeView.prototype.removeSelect = function (liEle) {\n if (this.allowMultiSelection) {\n liEle.setAttribute('aria-selected', 'false');\n }\n else {\n liEle.removeAttribute('aria-selected');\n }\n removeClass([liEle], ACTIVE);\n var index = this.selectedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.selectedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.removeSelectAll = function () {\n var selectedLI = this.element.querySelectorAll('.' + ACTIVE);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.allowMultiSelection) {\n ele.setAttribute('aria-selected', 'false');\n }\n else {\n ele.removeAttribute('aria-selected');\n }\n }\n removeClass(selectedLI, ACTIVE);\n this.setProperties({ selectedNodes: [] }, true);\n };\n TreeView.prototype.getSelectEvent = function (currLi, action, e) {\n var nodeData = this.getNodeData(currLi);\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData };\n };\n TreeView.prototype.setExpandOnType = function () {\n this.expandOnType = (this.expandOn === 'Auto') ? (Browser.isDevice ? 'Click' : 'DblClick') : this.expandOn;\n };\n TreeView.prototype.expandHandler = function (e) {\n var target = e.originalEvent.target;\n if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n return;\n }\n else {\n this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n }\n };\n TreeView.prototype.expandCollapseAction = function (currLi, e) {\n var icon = select('div.' + ICON, currLi);\n if (!icon || icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n var classList = icon.classList;\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(currLi, icon, e);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(currLi, icon, e);\n }\n }\n };\n TreeView.prototype.expandAction = function (currLi, icon, e, expandChild, callback) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n if (this.isLoaded && !this.isRefreshed) {\n this.expandArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeExpanding', this.expandArgs, function (observedArgs) {\n if (observedArgs.cancel) {\n removeClass([icon], PROCESS);\n }\n else {\n _this.nodeExpandAction(currLi, icon, expandChild, callback);\n }\n });\n }\n else {\n this.nodeExpandAction(currLi, icon, expandChild, callback);\n }\n };\n TreeView.prototype.nodeExpandAction = function (currLi, icon, expandChild, callback) {\n var ul = select('.' + PARENTITEM, currLi);\n if (ul && ul.nodeName === 'UL') {\n this.expandNode(currLi, icon);\n }\n else {\n this.renderChildNodes(currLi, expandChild, callback);\n var liEles = selectAll('.' + LISTITEM, currLi);\n for (var i = 0; i < liEles.length; i++) {\n var id = this.getId(liEles[i]);\n if (this.expandChildren.indexOf(id) !== -1 && this.expandChildren !== undefined) {\n var icon_1 = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEles[i]));\n if (!isNOU(icon_1)) {\n this.expandAction(liEles[i], icon_1, null);\n }\n this.expandChildren.splice(this.expandChildren.indexOf(id), 1);\n }\n }\n }\n };\n TreeView.prototype.keyActionHandler = function (e) {\n var _this = this;\n var target = e.target;\n var focusedNode = this.getFocusedNode();\n if (target && target.classList.contains(INPUT)) {\n var inpEle = target;\n if (e.action === 'enter') {\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n else if (e.action === 'escape') {\n inpEle.value = this.oldText;\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n return;\n }\n e.preventDefault();\n var eventArgs = {\n cancel: false,\n event: e,\n node: focusedNode,\n };\n this.trigger('keyPress', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n switch (e.action) {\n case 'space':\n if (_this.showCheckBox) {\n _this.checkNode(e);\n }\n break;\n case 'moveRight':\n _this.openNode(_this.enableRtl ? false : true, e);\n break;\n case 'moveLeft':\n _this.openNode(_this.enableRtl ? true : false, e);\n break;\n case 'shiftDown':\n _this.shiftKeySelect(true, e);\n break;\n case 'moveDown':\n case 'ctrlDown':\n case 'csDown':\n _this.navigateNode(true);\n break;\n case 'shiftUp':\n _this.shiftKeySelect(false, e);\n break;\n case 'moveUp':\n case 'ctrlUp':\n case 'csUp':\n _this.navigateNode(false);\n break;\n case 'home':\n case 'shiftHome':\n case 'ctrlHome':\n case 'csHome':\n _this.navigateRootNode(true);\n break;\n case 'end':\n case 'shiftEnd':\n case 'ctrlEnd':\n case 'csEnd':\n _this.navigateRootNode(false);\n break;\n case 'enter':\n case 'ctrlEnter':\n case 'shiftEnter':\n case 'csEnter':\n _this.toggleSelect(focusedNode, e);\n break;\n case 'f2':\n if (_this.allowEditing && !focusedNode.classList.contains('e-disable')) {\n _this.createTextbox(focusedNode, e);\n }\n break;\n case 'ctrlA':\n if (_this.allowMultiSelection) {\n var sNodes = selectAll('.' + LISTITEM + ':not(.' + ACTIVE + ')', _this.element);\n _this.selectGivenNodes(sNodes);\n }\n break;\n }\n }\n });\n };\n TreeView.prototype.navigateToFocus = function (isUp) {\n var focusNode = this.getFocusedNode().querySelector('.' + TEXTWRAP);\n var pos = focusNode.getBoundingClientRect();\n var parent = this.getScrollParent(this.element);\n if (!isNOU(parent)) {\n var parentPos = parent.getBoundingClientRect();\n if (pos.bottom > parentPos.bottom) {\n parent.scrollTop += pos.bottom - parentPos.bottom;\n }\n else if (pos.top < parentPos.top) {\n parent.scrollTop -= parentPos.top - pos.top;\n }\n }\n var isVisible = this.isVisibleInViewport(focusNode);\n if (!isVisible) {\n focusNode.scrollIntoView(isUp);\n }\n };\n TreeView.prototype.isVisibleInViewport = function (txtWrap) {\n var pos = txtWrap.getBoundingClientRect();\n return (pos.top >= 0 && pos.left >= 0 && pos.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n pos.right <= (window.innerWidth || document.documentElement.clientWidth));\n };\n TreeView.prototype.getScrollParent = function (node) {\n if (isNOU(node)) {\n return null;\n }\n return (node.scrollHeight > node.clientHeight) ? node : this.getScrollParent(node.parentElement);\n };\n TreeView.prototype.shiftKeySelect = function (isTowards, e) {\n if (this.allowMultiSelection) {\n var focusedNode = this.getFocusedNode();\n var nextNode = isTowards ? this.getNextNode(focusedNode) : this.getPrevNode(focusedNode);\n this.removeHover();\n this.setFocusElement(nextNode);\n this.toggleSelect(nextNode, e, false);\n this.navigateToFocus(!isTowards);\n }\n else {\n this.navigateNode(isTowards);\n }\n };\n TreeView.prototype.checkNode = function (e) {\n var focusedNode = this.getFocusedNode();\n var checkWrap = select('.' + CHECKBOXWRAP, focusedNode);\n var isChecked = select(' .' + CHECKBOXFRAME, checkWrap).classList.contains(CHECK);\n if (!focusedNode.classList.contains('e-disable')) {\n if (focusedNode.getElementsByClassName(\"e-checkbox-disabled\").length == 0) {\n this.validateCheckNode(checkWrap, isChecked, focusedNode, e);\n }\n }\n };\n TreeView.prototype.validateCheckNode = function (checkWrap, isCheck, li, e) {\n var _this = this;\n var currLi = closest(checkWrap, '.' + LISTITEM);\n this.checkActionNodes = [];\n var ariaState = !isCheck ? 'true' : 'false';\n if (!isNOU(ariaState)) {\n checkWrap.setAttribute('aria-checked', ariaState);\n }\n var eventArgs = this.getCheckEvent(currLi, isCheck ? 'uncheck' : 'check', e);\n this.trigger('nodeChecking', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.nodeCheckingAction(checkWrap, isCheck, li, observedArgs, e);\n }\n });\n };\n TreeView.prototype.nodeCheckingAction = function (checkWrap, isCheck, li, eventArgs, e) {\n if (this.checkedElement.indexOf(li.getAttribute('data-uid')) === -1) {\n this.checkedElement.push(li.getAttribute('data-uid'));\n var child = this.getChildNodes(this.treeData, li.getAttribute('data-uid'));\n (child !== null) ? this.allCheckNode(child, this.checkedElement, null, null, false) : child = null;\n }\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n if (this.autoCheck) {\n this.ensureChildCheckState(li);\n this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n var doCheck = void 0;\n if (eventArgs.action === 'check') {\n doCheck = true;\n }\n else if (eventArgs.action === 'uncheck') {\n doCheck = false;\n }\n this.ensureStateChange(li, doCheck);\n }\n this.allowServerDataBinding = true;\n this.updateServerProperties(\"check\");\n this.allowServerDataBinding = false;\n this.nodeCheckedEvent(checkWrap, isCheck, e);\n };\n /**\n * Update checkedNodes when UI interaction happens before the child node renders in DOM\n */\n TreeView.prototype.ensureStateChange = function (li, doCheck) {\n var childElement = select('.' + PARENTITEM, li);\n var parentIndex = li.getAttribute('data-uid');\n var mapper = this.fields;\n if (this.dataType === 1 && this.autoCheck) {\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.parentID, 'equal', parentIndex, true));\n for (var i = 0; i < resultData.length; i++) {\n var resultId = resultData[i][this.fields.id] ? resultData[i][this.fields.id].toString() : null;\n var isCheck = resultData[i][this.fields.isChecked] ? resultData[i][this.fields.isChecked].toString() : null;\n if (this.checkedNodes.indexOf(parentIndex) !== -1 && this.checkedNodes.indexOf(resultId) === -1) {\n this.checkedNodes.push(resultId);\n var childItems = this.getChildNodes(this.treeData, resultId);\n this.getChildItems(childItems, doCheck);\n if (this.parentNodeCheck.indexOf(resultId) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(resultId), 1);\n }\n }\n else if (this.checkedNodes.indexOf(parentIndex) === -1 && childElement === null &&\n this.checkedNodes.indexOf(resultId) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(resultId), 1);\n if (isCheck === 'true') {\n this.updateField(this.treeData, this.fields, resultId, 'isChecked', null);\n }\n if (this.checkedNodes.indexOf(parentIndex) === -1 && childElement === null ||\n this.parentNodeCheck.indexOf(resultId) !== -1) {\n var childNodes = this.getChildNodes(this.treeData, resultId);\n this.getChildItems(childNodes, doCheck);\n if (this.parentNodeCheck.indexOf(resultId) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(resultId), 1);\n }\n }\n }\n else {\n var childItems = this.getChildNodes(this.treeData, resultId);\n this.getChildItems(childItems, doCheck);\n }\n }\n }\n else if (this.dataType === 1 && !this.autoCheck) {\n if (!doCheck) {\n var checkedData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.isChecked, 'equal', true, false));\n for (var i = 0; i < checkedData.length; i++) {\n var id = checkedData[i][this.fields.id] ? checkedData[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(id) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(id), 1);\n }\n this.updateField(this.treeData, this.fields, id, 'isChecked', null);\n }\n this.checkedNodes = [];\n }\n else {\n for (var i = 0; i < this.treeData.length; i++) {\n var checkedId = this.treeData[i][this.fields.id] ? this.treeData[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(checkedId) === -1) {\n this.checkedNodes.push(checkedId);\n }\n }\n }\n }\n else {\n var childItems = this.getChildNodes(this.treeData, parentIndex);\n if (childItems) {\n this.childStateChange(childItems, parentIndex, childElement, doCheck);\n }\n }\n };\n TreeView.prototype.getChildItems = function (childItems, doCheck) {\n for (var i = 0; i < childItems.length; i++) {\n var childId = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : null;\n var childIsCheck = childItems[i][this.fields.isChecked] ? childItems[i][this.fields.isChecked].toString() :\n null;\n if (this.checkedNodes.indexOf(childId) !== -1 && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(childId), 1);\n }\n if (this.checkedNodes.indexOf(childId) === -1 && doCheck) {\n this.checkedNodes.push(childId);\n }\n if (childIsCheck === 'true' && !doCheck) {\n this.updateField(this.treeData, this.fields, childId, 'isChecked', null);\n }\n var subChildItems = this.getChildNodes(this.treeData, childId);\n if (subChildItems.length > 0) {\n this.getChildItems(subChildItems, doCheck);\n }\n }\n };\n /**\n * Update checkedNodes when UI interaction happens before the child node renders in DOM for hierarchical DS\n */\n TreeView.prototype.childStateChange = function (childItems, parent, childElement, doCheck) {\n for (var i = 0; i < childItems.length; i++) {\n var checkedChild = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : '';\n var isCheck = childItems[i][this.fields.isChecked] ? childItems[i][this.fields.isChecked].toString() : null;\n if (this.autoCheck) {\n if (this.checkedNodes.indexOf(parent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n if (this.parentNodeCheck.indexOf(checkedChild) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(checkedChild), 1);\n }\n }\n else if (this.checkedNodes.indexOf(parent) === -1 && this.checkedNodes.indexOf(checkedChild) !== -1 && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(checkedChild), 1);\n if (isCheck === 'true') {\n this.updateField(this.treeData, this.fields, checkedChild, 'isChecked', null);\n }\n }\n }\n else if (!this.autoCheck) {\n if (!doCheck) {\n if (this.checkedNodes.indexOf(checkedChild) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(checkedChild), 1);\n }\n this.updateField(this.treeData, this.fields, checkedChild, 'isChecked', null);\n this.checkedNodes = [];\n }\n else {\n if (this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n }\n }\n }\n var subChild = this.getChildNodes([childItems[i]], checkedChild);\n if (subChild) {\n this.childStateChange(subChild, parent, childElement, doCheck);\n }\n }\n };\n //This method can be used to get all child nodes of a parent by passing the children of a parent along with 'validateCheck' set to false\n TreeView.prototype.allCheckNode = function (child, newCheck, checked, childCheck, validateCheck) {\n if (child) {\n for (var length_1 = 0; length_1 < child.length; length_1++) {\n var childId = getValue(this.fields.id, child[length_1]);\n var check = this.element.querySelector('[data-uid=\"' + childId + '\"]');\n //Validates isChecked case while no UI interaction has been performed on the node or it's parent\n if (validateCheck !== false && this.checkedElement.indexOf(childId.toString()) === -1) {\n if (((check === null && !isNOU(child[length_1][this.fields.isChecked]) && newCheck.indexOf(childId.toString()) === -1)\n || childCheck === 0 || checked === 2)) {\n (child[length_1][this.fields.isChecked] !== false || checked === 2) ? newCheck.push(childId.toString())\n : childCheck = null;\n childCheck = (child[length_1][this.fields.isChecked] !== false || checked === 2) ? 0 : null;\n }\n }\n //Pushes child checked node done thro' UI interaction\n if (newCheck.indexOf(childId.toString()) === -1 && isNOU(checked)) {\n newCheck.push(childId.toString());\n }\n //Gets if any next level children are available for child nodes\n if (getValue(this.fields.hasChildren, child[length_1]) === true ||\n getValue(this.fields.child.toString(), child[length_1])) {\n var id = getValue(this.fields.id, child[length_1]);\n var childId_1 = this.getChildNodes(this.treeData, id.toString());\n if (childId_1) {\n (isNOU(validateCheck)) ? this.allCheckNode(childId_1, newCheck, checked, childCheck) :\n this.allCheckNode(childId_1, newCheck, checked, childCheck, validateCheck);\n childCheck = null;\n }\n }\n childCheck = null;\n }\n }\n };\n TreeView.prototype.openNode = function (toBeOpened, e) {\n var focusedNode = this.getFocusedNode();\n var icon = select('div.' + ICON, focusedNode);\n if (toBeOpened) {\n if (!icon) {\n return;\n }\n else if (icon.classList.contains(EXPANDABLE)) {\n this.expandAction(focusedNode, icon, e);\n }\n else {\n this.focusNextNode(focusedNode, true);\n }\n }\n else {\n if (icon && icon.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(focusedNode, icon, e);\n }\n else {\n var parentLi = closest(closest(focusedNode, '.' + PARENTITEM), '.' + LISTITEM);\n if (!parentLi) {\n return;\n }\n else {\n if (!parentLi.classList.contains('e-disable')) {\n this.setFocus(focusedNode, parentLi);\n this.navigateToFocus(true);\n }\n }\n }\n }\n };\n TreeView.prototype.navigateNode = function (isTowards) {\n var focusedNode = this.getFocusedNode();\n this.focusNextNode(focusedNode, isTowards);\n };\n TreeView.prototype.navigateRootNode = function (isBackwards) {\n var focusedNode = this.getFocusedNode();\n var rootNode = isBackwards ? this.getRootNode() : this.getEndNode();\n if (!rootNode.classList.contains('e-disable')) {\n this.setFocus(focusedNode, rootNode);\n this.navigateToFocus(isBackwards);\n }\n };\n TreeView.prototype.getFocusedNode = function () {\n var selectedItem;\n var fNode = select('.' + LISTITEM + '.' + FOCUS, this.element);\n if (isNOU(fNode)) {\n selectedItem = select('.' + LISTITEM, this.element);\n }\n return isNOU(fNode) ? (isNOU(selectedItem) ? this.element.firstElementChild : selectedItem) : fNode;\n };\n TreeView.prototype.focusNextNode = function (li, isTowards) {\n var nextNode = isTowards ? this.getNextNode(li) : this.getPrevNode(li);\n this.setFocus(li, nextNode);\n this.navigateToFocus(!isTowards);\n if (nextNode.classList.contains('e-disable')) {\n var lastChild = nextNode.lastChild;\n if (nextNode.previousSibling == null && nextNode.classList.contains('e-level-1')) {\n this.focusNextNode(nextNode, true);\n }\n else if (nextNode.nextSibling == null && nextNode.classList.contains('e-node-collapsed')) {\n this.focusNextNode(nextNode, false);\n }\n else if (nextNode.nextSibling == null && lastChild.classList.contains('e-text-content')) {\n this.focusNextNode(nextNode, false);\n }\n else {\n this.focusNextNode(nextNode, isTowards);\n }\n }\n };\n TreeView.prototype.getNextNode = function (li) {\n var index = this.liList.indexOf(li);\n var nextNode;\n do {\n index++;\n nextNode = this.liList[index];\n if (isNOU(nextNode)) {\n return li;\n }\n } while (!isVisible(nextNode));\n return nextNode;\n };\n TreeView.prototype.getPrevNode = function (li) {\n var index = this.liList.indexOf(li);\n var prevNode;\n do {\n index--;\n prevNode = this.liList[index];\n if (isNOU(prevNode)) {\n return li;\n }\n } while (!isVisible(prevNode));\n return prevNode;\n };\n TreeView.prototype.getRootNode = function () {\n var index = 0;\n var rootNode;\n do {\n rootNode = this.liList[index];\n index++;\n } while (!isVisible(rootNode));\n return rootNode;\n };\n TreeView.prototype.getEndNode = function () {\n var index = this.liList.length - 1;\n var endNode;\n do {\n endNode = this.liList[index];\n index--;\n } while (!isVisible(endNode));\n return endNode;\n };\n TreeView.prototype.setFocus = function (preNode, nextNode) {\n removeClass([preNode], [HOVER, FOCUS]);\n if (!nextNode.classList.contains('e-disable')) {\n addClass([nextNode], [HOVER, FOCUS]);\n this.updateIdAttr(preNode, nextNode);\n }\n };\n TreeView.prototype.updateIdAttr = function (preNode, nextNode) {\n this.element.removeAttribute('aria-activedescendant');\n if (preNode) {\n preNode.removeAttribute('id');\n }\n nextNode.setAttribute('id', this.element.id + '_active');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n };\n TreeView.prototype.focusIn = function () {\n if (!this.mouseDownStatus) {\n addClass([this.getFocusedNode()], HOVER);\n }\n this.mouseDownStatus = false;\n };\n TreeView.prototype.focusOut = function () {\n removeClass([this.getFocusedNode()], HOVER);\n };\n TreeView.prototype.onMouseOver = function (e) {\n var target = e.target;\n var classList = target.classList;\n var currentLi = closest(target, '.' + LISTITEM);\n if (!currentLi || classList.contains(PARENTITEM) || classList.contains(LISTITEM)) {\n this.removeHover();\n return;\n }\n else {\n if (currentLi && !currentLi.classList.contains('e-disable')) {\n this.setHover(currentLi);\n }\n }\n };\n TreeView.prototype.setHover = function (li) {\n if (!li.classList.contains(HOVER)) {\n this.removeHover();\n addClass([li], HOVER);\n }\n };\n ;\n TreeView.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n TreeView.prototype.removeHover = function () {\n var hoveredNode = selectAll('.' + HOVER, this.element);\n if (hoveredNode && hoveredNode.length) {\n removeClass(hoveredNode, HOVER);\n }\n };\n ;\n TreeView.prototype.getNodeData = function (currLi, fromDS) {\n if (!isNOU(currLi) && currLi.classList.contains(LISTITEM) &&\n !isNOU(closest(currLi, '.' + CONTROL)) && closest(currLi, '.' + CONTROL).classList.contains(ROOT)) {\n var id = currLi.getAttribute('data-uid');\n var text = this.getText(currLi, fromDS);\n var pNode = closest(currLi.parentNode, '.' + LISTITEM);\n var pid = pNode ? pNode.getAttribute('data-uid') : null;\n var selected = currLi.classList.contains(ACTIVE);\n var expanded = (currLi.getAttribute('aria-expanded') === 'true') ? true : false;\n var hasChildren = (currLi.getAttribute('aria-expanded') === null) ? false : true;\n if (this.isBlazorPlatform) {\n hasChildren = currLi.getAttribute('aria-expanded') === 'true' ? true : (currLi.querySelector('.e-icon-expandable') || currLi.querySelector('.e-icon-collapsible')) != null ? true : false;\n }\n var checked = null;\n if (this.showCheckBox) {\n checked = select('.' + CHECKBOXWRAP, currLi).getAttribute('aria-checked');\n }\n return {\n id: id, text: text, parentID: pid, selected: selected, expanded: expanded,\n isChecked: checked, hasChildren: hasChildren\n };\n }\n return { id: '', text: '', parentID: '', selected: false, expanded: false, isChecked: '', hasChildren: false };\n };\n TreeView.prototype.getText = function (currLi, fromDS) {\n if (fromDS) {\n var nodeData = this.getNodeObject(currLi.getAttribute('data-uid'));\n var level = parseFloat(currLi.getAttribute('aria-level'));\n var nodeFields = this.getFields(this.fields, level, 1);\n return getValue(nodeFields.text, nodeData);\n }\n return select('.' + LISTTEXT, currLi).textContent;\n };\n TreeView.prototype.getExpandEvent = function (currLi, e) {\n var nodeData = this.getNodeData(currLi);\n return { cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData, event: e };\n };\n TreeView.prototype.renderNodeTemplate = function (data, textEle, dataId) {\n var tempArr = this.nodeTemplateFn(data, this, 'nodeTemplate' + dataId, this.element.id + 'nodeTemplate', this.isStringTemplate, undefined, textEle);\n if (tempArr) {\n tempArr = Array.prototype.slice.call(tempArr);\n append(tempArr, textEle);\n }\n };\n TreeView.prototype.destroyTemplate = function (liEle) {\n this.clearTemplate(['nodeTemplate' + liEle.getAttribute('data-uid')]);\n };\n TreeView.prototype.reRenderNodes = function () {\n this.updateListProp(this.fields);\n resetBlazorTemplate(this.element.id + 'nodeTemplate', 'NodeTemplate');\n if (this.isBlazorPlatform) {\n this.ulElement = this.element.querySelector('.e-list-parent.e-ul');\n this.ulElement.parentElement.removeChild(this.ulElement);\n }\n else {\n this.element.innerHTML = '';\n }\n if (!isNOU(this.nodeTemplateFn)) {\n this.clearTemplate();\n }\n this.setTouchClass();\n this.setProperties({ selectedNodes: [], checkedNodes: [], expandedNodes: [] }, true);\n this.checkedElement = [];\n this.isLoaded = false;\n this.setDataBinding(true);\n };\n TreeView.prototype.setCssClass = function (oldClass, newClass) {\n if (!isNOU(oldClass) && oldClass !== '') {\n removeClass([this.element], oldClass.split(' '));\n }\n if (!isNOU(newClass) && newClass !== '') {\n addClass([this.element], newClass.split(' '));\n }\n };\n TreeView.prototype.editingHandler = function (e) {\n var target = e.target;\n if (!target || target.classList.contains(ROOT) || target.classList.contains(PARENTITEM) ||\n target.classList.contains(LISTITEM) || target.classList.contains(ICON) ||\n target.classList.contains(INPUT) || target.classList.contains(INPUTGROUP)) {\n return;\n }\n else {\n var liEle = closest(target, '.' + LISTITEM);\n this.createTextbox(liEle, e);\n }\n };\n TreeView.prototype.createTextbox = function (liEle, e) {\n var _this = this;\n var oldInpEle = select('.' + TREEINPUT, this.element);\n if (oldInpEle) {\n oldInpEle.blur();\n }\n var textEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var innerEle = this.createElement('input', { className: TREEINPUT, attrs: { value: this.oldText } });\n var eventArgs = this.getEditEvent(liEle, null, innerEle.outerHTML);\n this.trigger('nodeEditing', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n var inpWidth = textEle.offsetWidth + 5;\n var style = 'width:' + inpWidth + 'px';\n addClass([liEle], EDITING);\n if (!isNOU(_this.nodeTemplateFn)) {\n _this.destroyTemplate(liEle);\n }\n textEle.innerHTML = eventArgs.innerHtml;\n var inpEle = select('.' + TREEINPUT, textEle);\n _this.inputObj = Input.createInput({\n element: inpEle,\n properties: {\n enableRtl: _this.enableRtl,\n }\n }, _this.createElement);\n _this.inputObj.container.setAttribute('style', style);\n inpEle.focus();\n var inputEle = inpEle;\n inputEle.setSelectionRange(0, inputEle.value.length);\n _this.wireInputEvents(inpEle);\n }\n });\n };\n TreeView.prototype.updateOldText = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n this.editData = this.getNodeObject(id);\n var level = parseFloat(liEle.getAttribute('aria-level'));\n this.editFields = this.getFields(this.fields, level, 1);\n this.oldText = getValue(this.editFields.text, this.editData);\n };\n TreeView.prototype.inputFocusOut = function (e) {\n if (!select('.' + TREEINPUT, this.element)) {\n return;\n }\n var target = e.target;\n var newText = target.value;\n var txtEle = closest(target, '.' + LISTTEXT);\n var liEle = closest(target, '.' + LISTITEM);\n detach(this.inputObj.container);\n if (this.fields.dataSource instanceof DataManager && !this.isOffline && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n this.crudOperation('update', null, liEle, newText, null, null, true);\n }\n else {\n this.appendNewText(liEle, txtEle, newText, true);\n }\n };\n TreeView.prototype.appendNewText = function (liEle, txtEle, newText, isInput) {\n var _this = this;\n var eventArgs = this.getEditEvent(liEle, newText, null);\n this.trigger('nodeEdited', eventArgs, function (observedArgs) {\n newText = observedArgs.cancel ? observedArgs.oldText : observedArgs.newText;\n _this.updateText(liEle, txtEle, newText, isInput);\n if (observedArgs.oldText !== newText) {\n _this.triggerEvent();\n }\n });\n };\n TreeView.prototype.updateText = function (liEle, txtEle, newText, isInput) {\n var newData = setValue(this.editFields.text, newText, this.editData);\n if (!isNOU(this.nodeTemplateFn)) {\n txtEle.innerText = '';\n var dataId = liEle.getAttribute('data-uid');\n this.renderNodeTemplate(newData, txtEle, dataId);\n this.updateBlazorTemplate();\n this.renderReactTemplates();\n }\n else {\n txtEle.innerText = newText;\n }\n if (isInput) {\n removeClass([liEle], EDITING);\n txtEle.focus();\n }\n };\n TreeView.prototype.getElement = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return this.element.querySelector('[data-uid=\"' + ele + '\"]');\n }\n else if (typeof ele === 'object') {\n return getElement(ele);\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getId = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return ele;\n }\n else if (typeof ele === 'object') {\n return (getElement(ele)).getAttribute('data-uid');\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getEditEvent = function (liEle, newText, inpEle) {\n var data = this.getNodeData(liEle);\n return { cancel: false, newText: newText, node: liEle, nodeData: data, oldText: this.oldText, innerHtml: inpEle };\n };\n TreeView.prototype.getNodeObject = function (id) {\n var childNodes;\n if (isNOU(id)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n for (var i = 0, objlen = this.treeData.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, this.treeData[i]);\n if (!isNOU(this.treeData[i]) && !isNOU(dataId) && dataId.toString() === id) {\n return this.treeData[i];\n }\n }\n }\n else {\n return this.getChildNodeObject(this.treeData, this.fields, id);\n }\n return childNodes;\n };\n TreeView.prototype.getChildNodeObject = function (obj, mapper, id) {\n var newList;\n if (isNOU(obj)) {\n return newList;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(mapper.id, obj[i]);\n if (obj[i] && dataId && dataId.toString() === id) {\n return obj[i];\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var child = 'child';\n newList = this.getChildNodeObject(getValue(child, obj[i]), this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n }\n return newList;\n };\n TreeView.prototype.setDragAndDrop = function (toBind) {\n if (toBind && !this.disabled) {\n this.initializeDrag();\n }\n else {\n this.destroyDrag();\n }\n };\n // tslint:disable-next-line:max-func-body-length\n TreeView.prototype.initializeDrag = function () {\n var _this = this;\n var virtualEle;\n var proxy = this;\n this.dragObj = new Draggable(this.element, {\n enableTailMode: true, enableAutoScroll: true,\n dragArea: this.dragArea,\n dragTarget: '.' + TEXTWRAP,\n helper: function (e) {\n _this.dragTarget = e.sender.target;\n var dragRoot = closest(_this.dragTarget, '.' + ROOT);\n var dragWrap = closest(_this.dragTarget, '.' + TEXTWRAP);\n _this.dragLi = closest(_this.dragTarget, '.' + LISTITEM);\n if (_this.fullRowSelect && !dragWrap && _this.dragTarget.classList.contains(FULLROW)) {\n dragWrap = _this.dragTarget.nextElementSibling;\n }\n if (!_this.dragTarget || !e.element.isSameNode(dragRoot) || !dragWrap ||\n _this.dragTarget.classList.contains(ROOT) || _this.dragTarget.classList.contains(PARENTITEM) ||\n _this.dragTarget.classList.contains(LISTITEM) || _this.dragLi.classList.contains('e-disable')) {\n return false;\n }\n var cloneEle = (dragWrap.cloneNode(true));\n if (isNOU(select('div.' + ICON, cloneEle))) {\n var icon = proxy.createElement('div', { className: ICON + ' ' + EXPANDABLE });\n cloneEle.insertBefore(icon, cloneEle.children[0]);\n }\n var cssClass = DRAGITEM + ' ' + ROOT + ' ' + _this.cssClass + ' ' + (_this.enableRtl ? RTL : '');\n virtualEle = proxy.createElement('div', { className: cssClass });\n virtualEle.appendChild(cloneEle);\n var nLen = _this.selectedNodes.length;\n if (nLen > 1 && _this.allowMultiSelection && _this.dragLi.classList.contains(ACTIVE)) {\n var cNode = proxy.createElement('span', { className: DROPCOUNT, innerHTML: '' + nLen });\n virtualEle.appendChild(cNode);\n }\n document.body.appendChild(virtualEle);\n document.body.style.cursor = '';\n _this.dragData = _this.getNodeData(_this.dragLi);\n return virtualEle;\n },\n dragStart: function (e) {\n addClass([_this.element], DRAGGING);\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, null, e.target, null, virtualEle, level);\n if (eventArgs.draggedNode.classList.contains(EDITING)) {\n _this.dragObj.intDestroy(e.event);\n _this.dragCancelAction(virtualEle);\n }\n else {\n _this.trigger('nodeDragStart', eventArgs, function (observedArgs) {\n if (observedArgs.cancel) {\n _this.dragObj.intDestroy(e.event);\n _this.dragCancelAction(virtualEle);\n }\n else {\n _this.dragStartAction = true;\n }\n if (isBlazor()) {\n e.bindEvents(getElement(e.dragElement));\n }\n });\n }\n },\n drag: function (e) {\n _this.dragObj.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20 } });\n _this.dragAction(e, virtualEle);\n },\n dragStop: function (e) {\n removeClass([_this.element], DRAGGING);\n _this.removeVirtualEle();\n var dropTarget = e.target;\n var preventTargetExpand = false;\n var dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n var isHelperElement = true;\n if (!dropTarget || !dropRoot) {\n detach(e.helper);\n document.body.style.cursor = '';\n isHelperElement = false;\n }\n var listItem = closest(dropTarget, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget, null, e.helper, level);\n eventArgs.preventTargetExpand = preventTargetExpand;\n if ((_this.isBlazorPlatform && _this.dragStartAction) || !_this.isBlazorPlatform) {\n _this.trigger('nodeDragStop', eventArgs, function (observedArgs) {\n _this.dragParent = observedArgs.draggedParentNode;\n _this.preventExpand = observedArgs.preventTargetExpand;\n if (observedArgs.cancel) {\n if (e.helper.parentNode) {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n isHelperElement = false;\n }\n _this.dragStartAction = false;\n if (_this.isBlazorPlatform && isHelperElement) {\n _this.dropAction(e, true);\n }\n });\n }\n }\n });\n this.dropObj = new Droppable(this.element, {\n out: function (e) {\n if (!isNOU(e) && !e.target.classList.contains(SIBLING)) {\n document.body.style.cursor = 'not-allowed';\n }\n },\n over: function (e) {\n document.body.style.cursor = '';\n },\n drop: function (e) {\n if (!_this.isBlazorPlatform) {\n _this.dropAction(e);\n }\n }\n });\n };\n TreeView.prototype.dragCancelAction = function (virtualEle) {\n detach(virtualEle);\n removeClass([this.element], DRAGGING);\n this.dragStartAction = false;\n };\n TreeView.prototype.dragAction = function (e, virtualEle) {\n var dropRoot = closest(e.target, '.' + DROPPABLE);\n var dropWrap = closest(e.target, '.' + TEXTWRAP);\n var icon = select('div.' + ICON, virtualEle);\n removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n this.removeVirtualEle();\n document.body.style.cursor = '';\n var classList = e.target.classList;\n if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n dropWrap = e.target.nextElementSibling;\n }\n if (dropRoot) {\n var dropLi = closest(e.target, '.' + LISTITEM);\n var checkWrapper = closest(e.target, '.' + CHECKBOXWRAP);\n var collapse = closest(e.target, '.' + COLLAPSIBLE);\n var expand = closest(e.target, '.' + EXPANDABLE);\n if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n if ((dropLi && e && (!expand && !collapse) && (e.event.offsetY < 7) && !checkWrapper) || (((expand && e.event.offsetY < 5) || (collapse && e.event.offsetX < 3)))) {\n addClass([icon], DROPNEXT);\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (1) : (0);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else if ((dropLi && e && (!expand && !collapse) && (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10)) && !checkWrapper) || (((expand && e.event.offsetY > 19) || (collapse && e.event.offsetX > 19)))) {\n addClass([icon], DROPNEXT);\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (2) : (1);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else {\n addClass([icon], DROPIN);\n }\n }\n else if (e.target.nodeName === 'LI' && (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi))) {\n addClass([icon], DROPNEXT);\n this.renderVirtualEle(e);\n }\n else if (e.target.classList.contains(SIBLING)) {\n addClass([icon], DROPNEXT);\n }\n else {\n addClass([icon], DROPOUT);\n }\n }\n else {\n addClass([icon], NODROP);\n document.body.style.cursor = 'not-allowed';\n }\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = this.getDragEvent(e.event, this, e.target, e.target, null, virtualEle, level);\n if (eventArgs.dropIndicator) {\n removeClass([icon], eventArgs.dropIndicator);\n }\n this.trigger('nodeDragging', eventArgs);\n if (eventArgs.dropIndicator) {\n addClass([icon], eventArgs.dropIndicator);\n }\n };\n // tslint:disable\n TreeView.prototype.dropAction = function (e, isBlazorDrop) {\n var offsetY = e.event.offsetY;\n var dropTarget = e.target;\n var dragObj;\n var level;\n var drop = false;\n var dragInstance;\n if (!isBlazorDrop) {\n dragInstance = e.dragData.draggable;\n }\n else {\n dragInstance = e.element;\n }\n for (var i = 0; i < dragInstance.ej2_instances.length; i++) {\n if (dragInstance.ej2_instances[i] instanceof TreeView_1) {\n dragObj = dragInstance.ej2_instances[i];\n break;\n }\n }\n if (dragObj && dragObj.dragTarget) {\n var dragTarget = dragObj.dragTarget;\n var dragLi = (closest(dragTarget, '.' + LISTITEM));\n var dropLi = (closest(dropTarget, '.' + LISTITEM));\n if (dropLi == null && dropTarget.classList.contains(ROOT)) {\n dropLi = dropTarget.firstElementChild;\n }\n if (!isBlazorDrop) {\n detach(e.droppedElement);\n }\n else {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n if (!dropLi || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n return;\n }\n if (dragObj.allowMultiSelection && dragLi.classList.contains(ACTIVE)) {\n var sNodes = selectAll('.' + ACTIVE, dragObj.element);\n if (e.target.offsetHeight <= 33 && offsetY > e.target.offsetHeight - 10 && offsetY > 6) {\n for (var i = sNodes.length - 1; i >= 0; i--) {\n if (dropLi.isSameNode(sNodes[i]) || this.isDescendant(sNodes[i], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[i], dropLi, e, dragObj, offsetY);\n }\n }\n else {\n for (var i = 0; i < sNodes.length; i++) {\n if (dropLi.isSameNode(sNodes[i]) || this.isDescendant(sNodes[i], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[i], dropLi, e, dragObj, offsetY);\n }\n }\n }\n else {\n this.appendNode(dropTarget, dragLi, dropLi, e, dragObj, offsetY);\n }\n level = parseInt(dragLi.getAttribute('aria-level'), 10);\n drop = true;\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n if (!isBlazorDrop) {\n this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.dragData.draggedElement, null, level, drop));\n }\n else {\n this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.element, null, level, drop));\n }\n this.triggerEvent();\n };\n TreeView.prototype.appendNode = function (dropTarget, dragLi, dropLi, e, dragObj, offsetY) {\n var checkWrapper = closest(dropTarget, '.' + CHECKBOXWRAP);\n var collapse = closest(e.target, '.' + COLLAPSIBLE);\n var expand = closest(e.target, '.' + EXPANDABLE);\n if (!dragLi.classList.contains('e-disable') && !checkWrapper && ((expand && e.event.offsetY < 5) || (collapse && e.event.offsetX < 3) || (expand && e.event.offsetY > 19) || (collapse && e.event.offsetX > 19) || (!expand && !collapse))) {\n if (dropTarget.nodeName === 'LI') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else if (dropTarget.firstElementChild && dropTarget.classList.contains(ROOT)) {\n if (dropTarget.firstElementChild.nodeName === 'UL') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n }\n else if ((dropTarget.classList.contains('e-icon-collapsible')) || (dropTarget.classList.contains('e-icon-expandable'))) {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY);\n }\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY, true);\n }\n };\n TreeView.prototype.dropAsSiblingNode = function (dragLi, dropLi, e, dragObj) {\n var dropUl = closest(dropLi, '.' + PARENTITEM);\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var pre;\n if (e.target.offsetHeight > 0 && e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n else if (e.target.classList.contains('e-icon-expandable') || (e.target.classList.contains('e-icon-collapsible'))) {\n if ((e.event.offsetY < 5) || (e.event.offsetX < 3)) {\n pre = true;\n }\n else if ((e.event.offsetY > 15) || (e.event.offsetX > 17)) {\n pre = false;\n }\n }\n if ((e.target.classList.contains('e-icon-expandable')) || (e.target.classList.contains('e-icon-collapsible'))) {\n var target = e.target.closest('li');\n dropUl.insertBefore(dragLi, pre ? target : target.nextElementSibling);\n }\n else {\n dropUl.insertBefore(dragLi, pre ? e.target : e.target.nextElementSibling);\n }\n this.moveData(dragLi, dropLi, dropUl, pre, dragObj);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.dropAsChildNode = function (dragLi, dropLi, dragObj, index, e, pos, isCheck) {\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var dropParentUl = closest(dropLi, '.' + PARENTITEM);\n if (e && (pos < 7) && !isCheck) {\n dropParentUl.insertBefore(dragLi, dropLi);\n this.moveData(dragLi, dropLi, dropParentUl, true, dragObj);\n }\n else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10)) && !isCheck) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n this.moveData(dragLi, dropLi, dropParentUl, false, dragObj);\n }\n else {\n var dropUl = this.expandParent(dropLi);\n var childLi = dropUl.childNodes[index];\n dropUl.insertBefore(dragLi, childLi);\n this.moveData(dragLi, childLi, dropUl, true, dragObj);\n }\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.moveData = function (dragLi, dropLi, dropUl, pre, dragObj) {\n var dropParentLi = closest(dropUl, '.' + LISTITEM);\n var id = this.getId(dragLi);\n var removedData = dragObj.updateChildField(dragObj.treeData, dragObj.fields, id, null, null, true);\n var refId = this.getId(dropLi);\n var index = this.getDataPos(this.treeData, this.fields, refId);\n var parentId = this.getId(dropParentLi);\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', true);\n var pos = isNOU(index) ? this.treeData.length : (pre ? index : index + 1);\n if (isNOU(parentId) && !this.hasPid) {\n delete removedData[0][this.fields.parentID];\n }\n else {\n var currPid = this.isNumberTypeId ? parseFloat(parentId) : parentId;\n setValue(this.fields.parentID, currPid, removedData[0]);\n }\n this.treeData.splice(pos, 0, removedData[0]);\n if (dragObj.element.id !== this.element.id) {\n var childData = dragObj.removeChildNodes(id);\n pos++;\n for (var i = 0, len = childData.length; i < len; i++) {\n this.treeData.splice(pos, 0, childData[i]);\n pos++;\n }\n dragObj.groupedData = dragObj.getGroupedData(dragObj.treeData, dragObj.fields.parentID);\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n else {\n this.addChildData(this.treeData, this.fields, parentId, removedData, pre ? index : index + 1);\n }\n };\n TreeView.prototype.expandParent = function (dropLi) {\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && this.preventExpand !== true) {\n this.expandAction(dropLi, dropIcon, null);\n }\n var dropUl = select('.' + PARENTITEM, dropLi);\n if (this.preventExpand === true && !dropUl && dropIcon) {\n this.renderChildNodes(dropLi);\n }\n dropUl = select('.' + PARENTITEM, dropLi);\n if (!isNOU(dropUl) && this.preventExpand === true) {\n dropUl.style.display = 'none';\n }\n if (!isNOU(dropUl) && this.preventExpand === false) {\n dropUl.style.display = 'block';\n }\n if (isNOU(dropUl) && this.preventExpand === true) {\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n if (icon) {\n icon.classList.add('e-icon-expandable');\n }\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n if (icon) {\n removeClass([icon], COLLAPSIBLE);\n }\n else {\n ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n }\n dropLi.setAttribute('aria-expanded', 'false');\n dropUl.style.display = 'none';\n }\n if (isNOU(dropUl)) {\n this.trigger('nodeExpanding', this.getExpandEvent(dropLi, null));\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n if (icon) {\n removeClass([icon], EXPANDABLE);\n }\n else {\n ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n icon = select('div.' + ICON, dropLi);\n removeClass([icon], EXPANDABLE);\n }\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n this.addExpand(dropLi);\n this.trigger('nodeExpanded', this.getExpandEvent(dropLi, null));\n }\n return dropUl;\n };\n TreeView.prototype.updateElement = function (dragParentUl, dragParentLi) {\n if (dragParentLi && dragParentUl.childElementCount === 0) {\n var dragIcon = select('div.' + ICON, dragParentLi);\n detach(dragParentUl);\n detach(dragIcon);\n var parentId = this.getId(dragParentLi);\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', false);\n this.removeExpand(dragParentLi, true);\n }\n };\n TreeView.prototype.updateAriaLevel = function (dragLi) {\n var level = this.parents(dragLi, '.' + PARENTITEM).length;\n dragLi.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, dragLi), level + 1);\n };\n TreeView.prototype.updateChildAriaLevel = function (element, level) {\n if (!isNOU(element)) {\n var cNodes = element.childNodes;\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n liEle.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, liEle), level + 1);\n }\n }\n };\n TreeView.prototype.renderVirtualEle = function (e) {\n var pre;\n if (e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (pre ? 1 : 2) : (pre ? 0 : 1);\n e.target.insertBefore(virEle, e.target.children[index]);\n };\n TreeView.prototype.removeVirtualEle = function () {\n var sibEle = select('.' + SIBLING);\n if (sibEle) {\n detach(sibEle);\n }\n };\n TreeView.prototype.destroyDrag = function () {\n if (this.dragObj && this.dropObj) {\n this.dragObj.destroy();\n this.dropObj.destroy();\n }\n };\n TreeView.prototype.getDragEvent = function (event, obj, dropTarget, target, dragNode, cloneEle, level, drop) {\n var dropLi = dropTarget ? closest(dropTarget, '.' + LISTITEM) : null;\n var dropData = dropLi ? this.getNodeData(dropLi) : null;\n var draggedNode = obj ? obj.dragLi : dragNode;\n var draggedNodeData = obj ? obj.dragData : null;\n var newParent = dropTarget ? this.parents(dropTarget, '.' + LISTITEM) : null;\n var dragLiParent = obj.dragLi.parentElement;\n var dragParent = obj.dragLi ? closest(dragLiParent, '.' + LISTITEM) : null;\n var targetParent = null;\n var indexValue = null;\n var iconCss = [DROPNEXT, DROPIN, DROPOUT, NODROP];\n var iconClass = null;\n var node = (drop === true) ? draggedNode : dropLi;\n var index = node ? closest(node, '.e-list-parent') : null;\n var i = 0;\n var position = null;\n dragParent = (obj.dragLi && dragParent === null) ? closest(dragLiParent, '.' + ROOT) : dragParent;\n dragParent = (drop === true) ? this.dragParent : dragParent;\n if (cloneEle) {\n while (i < 4) {\n if (select('.' + ICON, cloneEle).classList.contains(iconCss[i])) {\n iconClass = iconCss[i];\n break;\n }\n i++;\n }\n }\n if (index) {\n var dropTar = 0;\n for (i = 0; i < index.childElementCount; i++) {\n dropTar = (drop !== true && index.children[i] === draggedNode && dropLi !== draggedNode) ? ++dropTar : dropTar;\n if ((drop !== true && index.children[i].classList.contains('e-hover'))) {\n indexValue = (event.offsetY >= 23) ? i + 1 : i;\n break;\n }\n else if (index.children[i] === node) {\n indexValue = (event.offsetY >= 23) ? i : i;\n break;\n }\n }\n indexValue = (dropTar !== 0) ? --indexValue : indexValue;\n position = (iconClass == \"e-drop-in\") ? \"Inside\" : ((event.offsetY < 7) ? \"Before\" : \"After\");\n }\n if (dropTarget) {\n if (newParent.length === 0) {\n targetParent = null;\n }\n else if (dropTarget.classList.contains(LISTITEM)) {\n targetParent = newParent[0];\n }\n else {\n targetParent = newParent[1];\n }\n }\n if (dropLi === draggedNode) {\n targetParent = dropLi;\n }\n if (dropTarget && target.offsetHeight <= 33 && event.offsetY < target.offsetHeight - 10 && event.offsetY > 6) {\n targetParent = dropLi;\n if (drop !== true) {\n level = ++level;\n var parent_2 = targetParent ? select('.e-list-parent', targetParent) : null;\n indexValue = (parent_2) ? parent_2.children.length : 0;\n if (!(this.fields.dataSource instanceof DataManager) && parent_2 === null && targetParent) {\n var parent_3 = targetParent.hasAttribute('data-uid') ?\n this.getChildNodes(this.fields.dataSource, targetParent.getAttribute('data-uid').toString()) : null;\n indexValue = (parent_3) ? parent_3.length : 0;\n }\n }\n }\n return {\n cancel: false,\n clonedNode: cloneEle,\n event: event,\n draggedNode: draggedNode,\n draggedNodeData: draggedNodeData,\n droppedNode: dropLi,\n droppedNodeData: dropData,\n dropIndex: indexValue,\n dropLevel: level,\n draggedParentNode: dragParent,\n dropTarget: targetParent,\n dropIndicator: iconClass,\n target: target,\n position: position,\n };\n };\n TreeView.prototype.addFullRow = function (toAdd) {\n var len = this.liList.length;\n if (toAdd) {\n for (var i = 0; i < len; i++) {\n this.createFullRow(this.liList[i]);\n }\n }\n else {\n for (var i = 0; i < len; i++) {\n var rowDiv = select('.' + FULLROW, this.liList[i]);\n detach(rowDiv);\n }\n }\n };\n TreeView.prototype.createFullRow = function (item) {\n var rowDiv = this.createElement('div', { className: FULLROW });\n item.insertBefore(rowDiv, item.childNodes[0]);\n };\n TreeView.prototype.addMultiSelect = function (toAdd) {\n if (toAdd) {\n var liEles = selectAll('.' + LISTITEM + ':not([aria-selected=\"true\"])', this.element);\n for (var _i = 0, liEles_1 = liEles; _i < liEles_1.length; _i++) {\n var ele = liEles_1[_i];\n ele.setAttribute('aria-selected', 'false');\n }\n }\n else {\n var liEles = selectAll('.' + LISTITEM + '[aria-selected=\"false\"]', this.element);\n for (var _a = 0, liEles_2 = liEles; _a < liEles_2.length; _a++) {\n var ele = liEles_2[_a];\n ele.removeAttribute('aria-selected');\n }\n }\n };\n TreeView.prototype.collapseByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var cNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n var icon = select('.' + COLLAPSIBLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.collapseNode(liEle, icon, null);\n }\n this.collapseByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.collapseAllNodes = function (excludeHiddenNodes) {\n var cIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + COLLAPSIBLE, this.element));\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.collapseNode(liEle, icon, null);\n }\n };\n TreeView.prototype.expandByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var eNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n var liEle = eNodes[i];\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.expandAction(liEle, icon, null);\n }\n this.expandByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.expandAllNodes = function (excludeHiddenNodes) {\n var eIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + EXPANDABLE, this.element));\n for (var i = 0, len = eIcons.length; i < len; i++) {\n var icon = eIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.expandAction(liEle, icon, null, true);\n }\n };\n TreeView.prototype.getVisibleNodes = function (excludeHiddenNodes, nodes) {\n var vNodes = Array.prototype.slice.call(nodes);\n if (excludeHiddenNodes) {\n for (var i = 0; i < vNodes.length; i++) {\n if (!isVisible(vNodes[i])) {\n vNodes.splice(i, 1);\n i--;\n }\n }\n }\n return vNodes;\n };\n TreeView.prototype.removeNode = function (node) {\n var dragParentUl = closest(node, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n if (!isNOU(this.nodeTemplateFn)) {\n this.destroyTemplate(node);\n }\n detach(node);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateInstance();\n this.removeData(node);\n };\n TreeView.prototype.updateInstance = function () {\n this.updateList();\n this.updateSelectedNodes();\n this.updateExpandedNodes();\n this.allowServerDataBinding = false;\n this.updateServerProperties(\"expand\");\n this.updateServerProperties(\"check\");\n this.updateServerProperties(\"select\");\n this.allowServerDataBinding = true;\n };\n TreeView.prototype.updateServerProperties = function (action) {\n if (this.isBlazorPlatform) {\n if (action == \"expand\") {\n this.isBlazorExpandedNodes = this.expandedNodes;\n this.setProperties({ expandedNodes: [] }, true);\n }\n else if (action == \"check\") {\n this.setProperties({ checkedNodes: this.checkedNodes }, true);\n }\n else {\n this.setProperties({ selectedNodes: this.selectedNodes }, true);\n }\n }\n };\n TreeView.prototype.updateList = function () {\n this.liList = Array.prototype.slice.call(selectAll('.' + LISTITEM, this.element));\n };\n TreeView.prototype.updateSelectedNodes = function () {\n if (!this.isBlazorPlatform || (this.isBlazorPlatform && !this.initialRender)) {\n this.setProperties({ selectedNodes: [] }, true);\n var sNodes = selectAll('.' + ACTIVE, this.element);\n this.selectGivenNodes(sNodes);\n }\n else if (this.isBlazorPlatform && this.initialRender) {\n var sNodes = selectAll('.' + ACTIVE, this.element);\n for (var a = 0; a < sNodes.length; a++) {\n var id = sNodes[a].getAttribute(\"data-uid\").toString();\n if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n this.selectedNodes.push(id);\n }\n }\n }\n };\n TreeView.prototype.updateExpandedNodes = function () {\n if (!this.isBlazorPlatform || (this.isBlazorPlatform && !this.initialRender)) {\n this.setProperties({ expandedNodes: [] }, true);\n var eNodes = selectAll('[aria-expanded=\"true\"]', this.element);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n this.addExpand(eNodes[i]);\n }\n }\n else if (this.isBlazorPlatform && this.initialRender) {\n var eNodes = selectAll('[aria-expanded=\"true\"]', this.element);\n for (var a = 0; a < eNodes.length; a++) {\n var id = eNodes[a].getAttribute(\"data-uid\").toString();\n if (!isNOU(id) && this.expandedNodes.indexOf(id) === -1) {\n this.expandedNodes.push(id);\n }\n }\n }\n };\n TreeView.prototype.removeData = function (node) {\n if (this.dataType === 1) {\n var dm = new DataManager(this.treeData);\n var id = this.getId(node);\n var data = {};\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = newId;\n dm.remove(this.fields.id, data);\n this.removeChildNodes(id);\n }\n else {\n var id = this.getId(node);\n this.updateChildField(this.treeData, this.fields, id, null, null, true);\n }\n };\n TreeView.prototype.removeChildNodes = function (parentId) {\n var cNodes = this.getChildGroup(this.groupedData, parentId, false);\n var childData = [];\n if (cNodes) {\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var dm = new DataManager(this.treeData);\n var id = getValue(this.fields.id, cNodes[i]).toString();\n var data = {};\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = currId;\n var nodeData = dm.remove(this.fields.id, data);\n childData.push(nodeData[0]);\n this.removeChildNodes(id);\n }\n }\n return childData;\n };\n TreeView.prototype.doGivenAction = function (nodes, selector, toExpand) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var icon = select('.' + selector, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n toExpand ? this.expandAction(liEle, icon, null) : this.collapseNode(liEle, icon, null);\n }\n }\n };\n TreeView.prototype.addGivenNodes = function (nodes, dropLi, index, isRemote, dropEle) {\n if (nodes.length === 0) {\n return;\n }\n var sNodes = this.getSortedData(nodes);\n var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n if (isRemote) {\n this.updateMapper(level);\n }\n var li = ListBase.createListItemFromJson(this.createElement, sNodes, this.listBaseOption, level);\n var dropUl;\n if (!dropEle) {\n dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n }\n else {\n dropUl = dropEle;\n }\n var refNode = dropUl.childNodes[index];\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[i], refNode);\n }\n if (this.nodeTemplate && this.isBlazorPlatform && !this.isStringTemplate) {\n this.updateBlazorTemplate();\n }\n var id = this.getId(dropLi);\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, id, 'hasChildren', true);\n var refId = this.getId(refNode);\n var pos = isNOU(refId) ? this.treeData.length : this.getDataPos(this.treeData, this.fields, refId);\n for (var j = 0; j < nodes.length; j++) {\n if (!isNOU(id)) {\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n setValue(this.fields.parentID, currId, nodes[j]);\n }\n this.treeData.splice(pos, 0, nodes[j]);\n pos++;\n }\n }\n else {\n this.addChildData(this.treeData, this.fields, id, nodes, index);\n }\n this.finalizeNode(dropUl);\n };\n TreeView.prototype.updateMapper = function (level) {\n var mapper = (level === 1) ? this.fields : this.getChildFields(this.fields, level - 1, 1);\n this.updateListProp(mapper);\n };\n TreeView.prototype.updateListProp = function (mapper) {\n var prop = this.getActualProperties(mapper);\n this.listBaseOption.fields = prop;\n this.listBaseOption.fields.url = prop.hasOwnProperty('navigateUrl') ? prop.navigateUrl : 'navigateUrl';\n };\n TreeView.prototype.getDataPos = function (obj, mapper, id) {\n var pos = null;\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n return i;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var data = getValue(mapper.child, obj[i]);\n pos = this.getDataPos(data, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var items = getValue('child', obj[i]);\n pos = this.getDataPos(items, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n }\n return pos;\n };\n TreeView.prototype.addChildData = function (obj, mapper, id, data, index) {\n var updated;\n if (isNOU(id)) {\n index = isNOU(index) ? obj.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n obj.splice(index, 0, data[k]);\n index++;\n }\n return updated;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n if ((typeof mapper.child === 'string' && (obj[i].hasOwnProperty(mapper.child) && obj[i][mapper.child] !== null)) ||\n ((this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) && obj[i].hasOwnProperty('child'))) {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n var childData = getValue(key, obj[i]);\n if (isNOU(childData)) {\n childData = [];\n }\n index = isNOU(index) ? childData.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n childData.splice(index, 0, data[k]);\n index++;\n }\n }\n else {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n obj[i][key] = data;\n }\n return true;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childObj = getValue(mapper.child, obj[i]);\n updated = this.addChildData(childObj, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n else if ((this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) && !isNOU(getValue('child', obj[i]))) {\n var childData = getValue('child', obj[i]);\n updated = this.addChildData(childData, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n }\n return updated;\n };\n TreeView.prototype.doDisableAction = function (nodes) {\n var validNodes = this.nodeType(nodes);\n var validID = this.checkValidId(validNodes);\n this.validArr = [];\n for (var i = 0, len = validID.length; i < len; i++) {\n var id = validID[i][this.fields.id].toString();\n if (id && this.disableNode.indexOf(id) === -1) {\n this.disableNode.push(id);\n }\n var liEle = this.getElement(id);\n if (liEle) {\n liEle.setAttribute('aria-disabled', 'true');\n addClass([liEle], DISABLE);\n }\n }\n };\n TreeView.prototype.doEnableAction = function (nodes) {\n var strNodes = this.nodeType(nodes);\n for (var i = 0, len = strNodes.length; i < len; i++) {\n var liEle = this.getElement(strNodes[i]);\n var id = strNodes[i];\n if (id && this.disableNode.indexOf(id) !== -1) {\n this.disableNode.splice(this.disableNode.indexOf(id), 1);\n }\n if (liEle) {\n liEle.removeAttribute('aria-disabled');\n removeClass([liEle], DISABLE);\n }\n }\n };\n TreeView.prototype.nodeType = function (nodes) {\n var validID = [];\n for (var i = 0, len = nodes.length; i < len; i++) {\n var id = void 0;\n if (typeof nodes[i] == \"string\") {\n id = (nodes[i]) ? nodes[i].toString() : null;\n }\n else if (typeof nodes[i] === \"object\") {\n id = nodes[i] ? nodes[i].getAttribute(\"data-uid\").toString() : null;\n }\n if (validID.indexOf(id) == -1) {\n validID.push(id);\n }\n }\n return validID;\n };\n TreeView.prototype.checkValidId = function (node) {\n var _this = this;\n if (this.dataType === 1) {\n this.validArr = this.treeData.filter(function (data) {\n return node.indexOf(data[_this.fields.id] ? data[_this.fields.id].toString() : null) !== -1;\n });\n }\n else if (this.dataType === 2) {\n for (var k = 0; k < this.treeData.length; k++) {\n var id = this.treeData[k][this.fields.id] ? this.treeData[k][this.fields.id].toString() : null;\n if (node.indexOf(id) !== -1) {\n this.validArr.push(this.treeData[k]);\n }\n var childItems = getValue(this.fields.child.toString(), this.treeData[k]);\n if (childItems) {\n this.filterNestedChild(childItems, node);\n }\n }\n }\n return this.validArr;\n };\n TreeView.prototype.filterNestedChild = function (treeData, nodes) {\n for (var k = 0; k < treeData.length; k++) {\n var id = treeData[k][this.fields.id] ? treeData[k][this.fields.id].toString() : null;\n if (nodes.indexOf(id) !== -1) {\n this.validArr.push(treeData[k]);\n }\n var childItems = getValue(this.fields.child.toString(), treeData[k]);\n if (childItems) {\n this.filterNestedChild(childItems, nodes);\n }\n }\n };\n TreeView.prototype.setTouchClass = function () {\n var ele = closest(this.element, '.' + BIGGER);\n this.touchClass = isNOU(ele) ? '' : SMALL;\n };\n TreeView.prototype.updatePersistProp = function () {\n this.removeField(this.treeData, this.fields, ['selected', 'expanded']);\n var sleNodes = this.selectedNodes;\n for (var l = 0, slelen = sleNodes.length; l < slelen; l++) {\n this.updateField(this.treeData, this.fields, sleNodes[l], 'selected', true);\n }\n var enodes = this.expandedNodes;\n if (this.isBlazorPlatform) {\n enodes = this.isBlazorExpandedNodes;\n }\n for (var k = 0, nodelen = enodes.length; k < nodelen; k++) {\n this.updateField(this.treeData, this.fields, enodes[k], 'expanded', true);\n }\n if (this.showCheckBox) {\n this.removeField(this.treeData, this.fields, ['isChecked']);\n var cnodes = this.checkedNodes;\n for (var m = 0, nodelen = cnodes.length; m < nodelen; m++) {\n this.updateField(this.treeData, this.fields, cnodes[m], 'isChecked', true);\n }\n }\n };\n TreeView.prototype.removeField = function (obj, mapper, names) {\n if (isNOU(obj) || isNOU(mapper)) {\n return;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n for (var j = 0; j < names.length; j++) {\n var field = this.getMapperProp(mapper, names[j]);\n if (!isNOU(obj[i][field])) {\n delete obj[i][field];\n }\n }\n if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n this.removeField(getValue(mapper.child, obj[i]), this.getChildMapper(mapper), names);\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n this.removeField(getValue('child', obj[i]), this.getChildMapper(mapper), names);\n }\n }\n };\n TreeView.prototype.getMapperProp = function (mapper, fieldName) {\n switch (fieldName) {\n case 'selected':\n return !isNOU(mapper.selected) ? mapper.selected : 'selected';\n case 'expanded':\n return !isNOU(mapper.expanded) ? mapper.expanded : 'expanded';\n case 'isChecked':\n return !isNOU(mapper.isChecked) ? mapper.isChecked : 'isChecked';\n case 'hasChildren':\n return !isNOU(mapper.hasChildren) ? mapper.hasChildren : 'hasChildren';\n default:\n return fieldName;\n }\n };\n TreeView.prototype.updateField = function (obj, mapper, id, key, value) {\n var childNodes;\n if (isNOU(id)) {\n return;\n }\n else if (this.dataType === 1) {\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', newId, false));\n setValue(this.getMapperProp(mapper, key), value, resultData[0]);\n }\n else {\n this.updateChildField(obj, mapper, id, key, value);\n }\n };\n TreeView.prototype.updateChildField = function (obj, mapper, id, key, value, remove) {\n var removedData;\n if (isNOU(obj)) {\n return removedData;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n if (remove) {\n removedData = obj.splice(i, 1);\n }\n else {\n setValue(this.getMapperProp(mapper, key), value, obj[i]);\n removedData = [];\n }\n return removedData;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n removedData = this.updateChildField(childData, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var childItems = getValue('child', obj[i]);\n removedData = this.updateChildField(childItems, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n }\n return removedData;\n };\n TreeView.prototype.triggerEvent = function () {\n this.updateTemplateForBlazor();\n this.renderReactTemplates();\n var eventArgs = { data: this.treeData };\n this.trigger('dataSourceChanged', eventArgs);\n };\n TreeView.prototype.updateBlazorTemplate = function () {\n updateBlazorTemplate(this.element.id + 'nodeTemplate', 'NodeTemplate', this, false);\n };\n TreeView.prototype.clientUpdateInitial = function () {\n this.blazorInitialRender = true;\n };\n TreeView.prototype.wireInputEvents = function (inpEle) {\n EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n };\n TreeView.prototype.wireEditingEvents = function (toBind) {\n var _this = this;\n if (toBind && !this.disabled) {\n var proxy_2 = this;\n this.touchEditObj = new Touch(this.element, {\n tap: function (e) {\n if (_this.isDoubleTapped(e) && e.tapCount === 2) {\n e.originalEvent.preventDefault();\n proxy_2.editingHandler(e.originalEvent);\n }\n }\n });\n }\n else {\n if (this.touchEditObj) {\n this.touchEditObj.destroy();\n }\n }\n };\n TreeView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n var proxy_3 = this;\n this.touchClickObj = new Touch(this.element, {\n tap: function (e) {\n proxy_3.clickHandler(e);\n }\n });\n }\n else {\n if (this.touchClickObj) {\n this.touchClickObj.destroy();\n }\n }\n };\n TreeView.prototype.wireExpandOnEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var proxy_4 = this;\n this.touchExpandObj = new Touch(this.element, {\n tap: function (e) {\n if ((_this.expandOnType === 'Click' || (_this.expandOnType === 'DblClick' && _this.isDoubleTapped(e) && e.tapCount === 2))\n && e.originalEvent.which !== 3) {\n proxy_4.expandHandler(e);\n }\n }\n });\n }\n else {\n if (this.touchExpandObj) {\n this.touchExpandObj.destroy();\n }\n }\n };\n TreeView.prototype.mouseDownHandler = function (e) {\n this.mouseDownStatus = true;\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (e.ctrlKey && this.allowMultiSelection) {\n EventHandler.add(this.element, 'contextmenu', this.preventContextMenu, this);\n }\n };\n ;\n TreeView.prototype.preventContextMenu = function (e) {\n e.preventDefault();\n };\n TreeView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'mousedown', this.mouseDownHandler, this);\n this.wireClickEvent(true);\n if (this.expandOnType !== 'None') {\n this.wireExpandOnEvent(true);\n }\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.element, 'mouseout', this.onMouseLeave, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n };\n TreeView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'mousedown', this.mouseDownHandler);\n this.wireClickEvent(false);\n this.wireExpandOnEvent(false);\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.element, 'mouseout', this.onMouseLeave);\n if (!this.disabled) {\n this.keyboardModule.destroy();\n }\n };\n TreeView.prototype.parents = function (element, selector) {\n var matched = [];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, selector)) {\n matched.push(el);\n }\n el = el.parentNode;\n }\n return matched;\n };\n TreeView.prototype.isDoubleTapped = function (e) {\n var target = e.originalEvent.target;\n var secondTap;\n if (target && e.tapCount) {\n if (e.tapCount === 1) {\n this.firstTap = closest(target, '.' + LISTITEM);\n }\n else if (e.tapCount === 2) {\n secondTap = closest(target, '.' + LISTITEM);\n }\n }\n return (this.firstTap === secondTap);\n };\n TreeView.prototype.isDescendant = function (parent, child) {\n var node = child.parentNode;\n while (!isNOU(node)) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n TreeView.prototype.showSpinner = function (element) {\n addClass([element], LOAD);\n createSpinner({\n target: element,\n width: Browser.isDevice ? 16 : 14\n }, this.createElement);\n showSpinner(element);\n };\n TreeView.prototype.hideSpinner = function (element) {\n hideSpinner(element);\n element.innerHTML = '';\n removeClass([element], LOAD);\n };\n TreeView.prototype.setCheckedNodes = function (nodes) {\n nodes = JSON.parse(JSON.stringify(nodes));\n this.uncheckAll(this.checkedNodes);\n this.setIndeterminate(nodes);\n if (nodes.length > 0) {\n this.checkAll(nodes);\n }\n };\n /**\n * Checks whether the checkedNodes entered are valid and sets the valid checkedNodes while changing via setmodel\n */\n TreeView.prototype.setValidCheckedNode = function (node) {\n if (this.dataType === 1) {\n var mapper = this.fields;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', node, true));\n if (resultData[0]) {\n this.setChildCheckState(resultData, node, resultData[0]);\n if (this.autoCheck) {\n var parent_4 = resultData[0][this.fields.parentID] ? resultData[0][this.fields.parentID].toString() : null;\n var childNodes = this.getChildNodes(this.treeData, parent_4);\n var count = 0;\n for (var len = 0; len < childNodes.length; len++) {\n var childId = childNodes[len][this.fields.id].toString();\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n if (count === childNodes.length && this.checkedNodes.indexOf(parent_4) === -1 && parent_4) {\n this.checkedNodes.push(parent_4);\n }\n }\n }\n }\n else if (this.dataType === 2) {\n for (var a = 0; a < this.treeData.length; a++) {\n var index = this.treeData[a][this.fields.id] ? this.treeData[a][this.fields.id].toString() : '';\n if (index === node && this.checkedNodes.indexOf(node) === -1) {\n this.checkedNodes.push(node);\n break;\n }\n var childItems = getValue(this.fields.child.toString(), this.treeData[a]);\n if (childItems) {\n this.setChildCheckState(childItems, node, this.treeData[a]);\n }\n }\n }\n };\n /**\n * Checks whether the checkedNodes entered are valid and sets the valid checkedNodes while changing via setmodel(for hierarchical DS)\n */\n TreeView.prototype.setChildCheckState = function (childItems, node, treeData) {\n var checkedParent;\n var count = 0;\n if (this.dataType === 1) {\n if (treeData) {\n checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : null;\n }\n for (var index = 0; index < childItems.length; index++) {\n var checkNode = childItems[index][this.fields.id] ? childItems[index][this.fields.id].toString() : null;\n if (treeData && checkedParent && this.autoCheck) {\n if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkNode) === -1) {\n this.checkedNodes.push(checkNode);\n }\n }\n if (checkNode === node && this.checkedNodes.indexOf(node) === -1) {\n this.checkedNodes.push(node);\n }\n var subChildItems = this.getChildNodes(this.treeData, checkNode);\n if (subChildItems) {\n this.setChildCheckState(subChildItems, node, treeData);\n }\n }\n }\n else {\n if (treeData) {\n checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : '';\n }\n for (var index = 0; index < childItems.length; index++) {\n var checkedChild = childItems[index][this.fields.id] ? childItems[index][this.fields.id].toString() : '';\n if (treeData && checkedParent && this.autoCheck) {\n if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n }\n }\n if (checkedChild === node && this.checkedNodes.indexOf(node) === -1) {\n this.checkedNodes.push(node);\n }\n var subChildItems = getValue(this.fields.child.toString(), childItems[index]);\n if (subChildItems) {\n this.setChildCheckState(subChildItems, node, childItems[index]);\n }\n if (this.checkedNodes.indexOf(checkedChild) !== -1 && this.autoCheck) {\n count++;\n }\n if (count === childItems.length && this.checkedNodes.indexOf(checkedParent) === -1 && this.autoCheck) {\n this.checkedNodes.push(checkedParent);\n }\n }\n }\n };\n TreeView.prototype.setIndeterminate = function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n this.setValidCheckedNode(nodes[i]);\n }\n };\n TreeView.prototype.updatePosition = function (id, newData, isRefreshChild, childValue) {\n if (this.dataType === 1) {\n var pos = this.getDataPos(this.treeData, this.fields, id);\n this.treeData.splice(pos, 1, newData);\n if (isRefreshChild) {\n this.removeChildNodes(id);\n for (var j = 0; j < childValue.length; j++) {\n this.treeData.splice(pos, 0, childValue[j]);\n pos++;\n }\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n else {\n this.updateChildPosition(this.treeData, this.fields, id, [newData], undefined);\n }\n };\n TreeView.prototype.updateChildPosition = function (treeData, mapper, currID, newData, index) {\n var found;\n for (var i = 0, objlen = treeData.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, treeData[i]);\n if (treeData[i] && nodeId && nodeId.toString() === currID) {\n treeData[i] = newData[0];\n return true;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, treeData[i]))) {\n var childObj = getValue(mapper.child, treeData[i]);\n found = this.updateChildPosition(childObj, this.getChildMapper(mapper), currID, newData, index);\n if (found !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', treeData[i]))) {\n var childData = getValue('child', treeData[i]);\n found = this.updateChildPosition(childData, this.getChildMapper(mapper), currID, newData, index);\n if (found !== undefined) {\n break;\n }\n }\n }\n return found;\n };\n TreeView.prototype.dynamicState = function () {\n this.setDragAndDrop(this.allowDragAndDrop);\n this.wireEditingEvents(this.allowEditing);\n if (!this.disabled) {\n this.wireEvents();\n this.setRipple();\n }\n else {\n this.unWireEvents();\n this.rippleFn();\n this.rippleIconFn();\n }\n };\n TreeView.prototype.crudOperation = function (operation, nodes, target, newText, newNode, index, prevent) {\n var _this = this;\n var data = this.fields.dataSource;\n var matchedArr = [];\n var query = this.getQuery(this.fields);\n var key = this.fields.id;\n var crud;\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n var nodesID = [];\n if (nodes) {\n nodesID = this.nodeType(nodes);\n }\n else if (target) {\n if (typeof target == \"string\") {\n nodesID[0] = target.toString();\n }\n else if (typeof target === \"object\") {\n nodesID[0] = target.getAttribute(\"data-uid\").toString();\n }\n }\n for (var i = 0, len = nodesID.length; i < len; i++) {\n var liEle = this.getElement(nodesID[i]);\n if (isNullOrUndefined(liEle)) {\n continue;\n }\n var removedData = this.getNodeObject(nodesID[i]);\n matchedArr.push(removedData);\n }\n switch (operation) {\n case 'delete':\n if (nodes.length == 1) {\n crud = data.remove(key, matchedArr[0], query.fromTable, query);\n }\n else {\n changes.deletedRecords = matchedArr;\n crud = data.saveChanges(changes, key, query.fromTable, query);\n }\n crud.then(function (e) { return _this.deleteSuccess(nodesID); })\n .catch(function (e) { return _this.dmFailure(e); });\n break;\n case 'update':\n matchedArr[0][this.fields.text] = newText;\n crud = data.update(key, matchedArr[0], query.fromTable, query);\n crud.then(function (e) { return _this.editSucess(target, newText, prevent); })\n .catch(function (e) { return _this.dmFailure(e, target, prevent); });\n break;\n case 'insert':\n if (newNode.length == 1) {\n crud = data.insert(newNode[0], query.fromTable, query);\n }\n else {\n var arr = [];\n for (var i = 0, len = newNode.length; i < len; i++) {\n arr.push(newNode[i]);\n }\n changes.addedRecords = arr;\n crud = data.saveChanges(changes, key, query.fromTable, query);\n }\n crud.then(function (e) {\n var dropLi = _this.getElement(target);\n _this.addSuccess(newNode, dropLi, index);\n _this.preventExpand = false;\n }).catch(function (e) { return _this.dmFailure(e); });\n break;\n }\n };\n TreeView.prototype.deleteSuccess = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n this.removeNode(liEle);\n }\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n this.triggerEvent();\n };\n TreeView.prototype.editSucess = function (target, newText, prevent) {\n var liEle = this.getElement(target);\n var txtEle = select('.' + LISTTEXT, liEle);\n this.appendNewText(liEle, txtEle, newText, prevent);\n };\n TreeView.prototype.addSuccess = function (nodes, dropLi, index) {\n var dropUl;\n var icon = dropLi ? dropLi.querySelector('.' + ICON) : null;\n var proxy = this;\n if (dropLi && icon && icon.classList.contains(EXPANDABLE) &&\n dropLi.querySelector('.' + PARENTITEM) === null) {\n proxy.renderChildNodes(dropLi, null, function () {\n dropUl = dropLi.querySelector('.' + PARENTITEM);\n proxy.addGivenNodes(nodes, dropLi, index, true, dropUl);\n proxy.triggerEvent();\n });\n }\n else {\n this.addGivenNodes(nodes, dropLi, index, true);\n this.triggerEvent();\n }\n };\n TreeView.prototype.dmFailure = function (e, target, prevent) {\n if (target) {\n this.updatePreviousText(target, prevent);\n }\n this.trigger('actionFailure', { error: e });\n };\n TreeView.prototype.updatePreviousText = function (target, prevent) {\n var liEle = this.getElement(target);\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateText(liEle, txtEle, this.oldText, prevent);\n };\n /**\n * Called internally if any of the property value changed.\n * @param {TreeView} newProp\n * @param {TreeView} oldProp\n * @returns void\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n TreeView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.setDragAndDrop(this.allowDragAndDrop);\n break;\n case 'dragArea':\n if (this.allowDragAndDrop) {\n this.dragObj.dragArea = this.dragArea;\n }\n break;\n case 'allowEditing':\n this.wireEditingEvents(this.allowEditing);\n break;\n case 'allowMultiSelection':\n if (this.selectedNodes.length > 1) {\n var sNode = this.getElement(this.selectedNodes[0]);\n this.isLoaded = false;\n this.removeSelectAll();\n this.selectNode(sNode, null);\n this.isLoaded = true;\n }\n this.setMultiSelect(this.allowMultiSelection);\n this.addMultiSelect(this.allowMultiSelection);\n break;\n case 'checkedNodes':\n if (this.showCheckBox) {\n this.checkedNodes = oldProp.checkedNodes;\n this.setCheckedNodes(newProp.checkedNodes);\n }\n break;\n case 'autoCheck':\n if (this.showCheckBox) {\n this.autoCheck = newProp.autoCheck;\n this.ensureIndeterminate();\n }\n break;\n case 'cssClass':\n this.setCssClass(oldProp.cssClass, newProp.cssClass);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'expandedNodes':\n this.isAnimate = false;\n if (!this.isBlazorPlatform) {\n this.setProperties({ expandedNodes: [] }, true);\n }\n this.collapseAll();\n this.isInitalExpand = true;\n if (!this.isBlazorPlatform) {\n this.setProperties({ expandedNodes: isNOU(newProp.expandedNodes) ? [] : newProp.expandedNodes }, true);\n }\n this.doExpandAction();\n this.isInitalExpand = false;\n this.isAnimate = true;\n break;\n case 'expandOn':\n this.wireExpandOnEvent(false);\n this.setExpandOnType();\n if (this.expandOnType !== 'None' && !this.disabled) {\n this.wireExpandOnEvent(true);\n }\n break;\n case 'disabled':\n this.setDisabledMode();\n this.dynamicState();\n break;\n case 'fields':\n this.isAnimate = false;\n this.isFieldChange = true;\n this.initialRender = true;\n if (!this.blazorInitialRender) {\n this.reRenderNodes();\n }\n this.blazorInitialRender = false;\n this.initialRender = false;\n this.isAnimate = true;\n this.isFieldChange = false;\n break;\n case 'fullRowSelect':\n this.setFullRow(this.fullRowSelect);\n this.addFullRow(this.fullRowSelect);\n break;\n case 'loadOnDemand':\n if (this.loadOnDemand === false && !this.onLoaded) {\n var nodes = this.element.querySelectorAll('li');\n var i = 0;\n while (i < nodes.length) {\n if (nodes[i].getAttribute('aria-expanded') !== 'true') {\n this.renderChildNodes(nodes[i], true, null, true);\n }\n i++;\n }\n this.onLoaded = true;\n }\n break;\n case 'nodeTemplate':\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n this.reRenderNodes();\n break;\n case 'selectedNodes':\n this.removeSelectAll();\n this.setProperties({ selectedNodes: newProp.selectedNodes }, true);\n this.doSelectionAction();\n break;\n case 'showCheckBox':\n this.reRenderNodes();\n break;\n case 'sortOrder':\n this.reRenderNodes();\n break;\n case 'fullRowNavigable':\n this.setProperties({ fullRowNavigable: newProp.fullRowNavigable }, true);\n this.listBaseOption.itemNavigable = newProp.fullRowNavigable;\n this.reRenderNodes();\n break;\n }\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n */\n TreeView.prototype.destroy = function () {\n resetBlazorTemplate(this.element.id + 'nodeTemplate', 'NodeTemplate');\n this.clearTemplate();\n this.element.removeAttribute('aria-activedescendant');\n this.element.removeAttribute('tabindex');\n this.unWireEvents();\n this.wireEditingEvents(false);\n if (!this.disabled) {\n this.rippleFn();\n this.rippleIconFn();\n }\n this.setCssClass(this.cssClass, null);\n this.setDragAndDrop(false);\n this.setFullRow(false);\n if (this.isBlazorPlatform) {\n this.ulElement = this.element.querySelector('.e-list-parent.e-ul');\n }\n if (this.ulElement && this.ulElement.parentElement) {\n this.ulElement.parentElement.removeChild(this.ulElement);\n }\n if (!this.isBlazorPlatform) {\n _super.prototype.destroy.call(this);\n }\n };\n /**\n * Adds the collection of TreeView nodes based on target and index position. If target node is not specified,\n * then the nodes are added as children of the given parentID or in the root level of TreeView.\n * @param { { [key: string]: Object }[] } nodes - Specifies the array of JSON data that has to be added.\n * @param { string | Element } target - Specifies ID of TreeView node/TreeView node as target element.\n * @param { number } index - Specifies the index to place the newly added nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n */\n TreeView.prototype.addNodes = function (nodes, target, index, preventTargetExpand) {\n if (isNOU(nodes)) {\n return;\n }\n nodes = JSON.parse(JSON.stringify(nodes));\n var dropLi = this.getElement(target);\n this.preventExpand = preventTargetExpand;\n if (this.fields.dataSource instanceof DataManager && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n if (!this.isOffline) {\n this.crudOperation('insert', null, target, null, nodes, index, this.preventExpand);\n }\n else {\n this.addSuccess(nodes, dropLi, index);\n }\n }\n else if (this.dataType === 2) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n if (dropLi) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n nodes = this.getSortedData(nodes);\n for (var i = 0; i < nodes.length; i++) {\n var pid = getValue(this.fields.parentID, nodes[i]);\n dropLi = pid ? this.getElement(pid.toString()) : pid;\n this.addGivenNodes([nodes[i]], dropLi, index);\n }\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n this.updateCheckedStateFromDS();\n if (this.showCheckBox && dropLi) {\n this.ensureParentCheckState(dropLi);\n }\n if ((this.fields.dataSource instanceof DataManager === false) || (this.fields.dataSource instanceof DataManager) && (this.fields.dataSource.adaptorName === 'BlazorAdaptor')) {\n this.preventExpand = false;\n this.triggerEvent();\n }\n };\n /**\n * Instead of clicking on the TreeView node for editing, we can enable it by using\n * `beginEdit` property. On passing the node ID or element through this property, the edit textBox\n * will be created for the particular node thus allowing us to edit it.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.beginEdit = function (node) {\n var ele = this.getElement(node);\n if (isNOU(ele) || this.disabled) {\n return;\n }\n this.createTextbox(ele, null);\n };\n /**\n * Checks all the unchecked nodes. You can also check specific nodes by passing array of unchecked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.checkAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, true);\n }\n };\n /**\n * Collapses all the expanded TreeView nodes. You can collapse specific nodes by passing array of nodes as argument to this method.\n * You can also collapse all the nodes excluding the hidden nodes by setting **excludeHiddenNodes** to true. If you want to collapse\n * a specific level of nodes, set **level** as argument to collapseAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/ array of TreeView node.\n * @param {number} level - TreeView nodes will collapse up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes of TreeView when collapsing all nodes.\n */\n TreeView.prototype.collapseAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, COLLAPSIBLE, false);\n }\n else {\n if (level > 0) {\n this.collapseByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.collapseAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Disables the collection of nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.disableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doDisableAction(nodes);\n }\n };\n /**\n * Enables the collection of disabled nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.enableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doEnableAction(nodes);\n }\n };\n /**\n * Ensures visibility of the TreeView node by using node ID or node element.\n * When many TreeView nodes are present and we need to find a particular node, `ensureVisible` property\n * helps bring the node to visibility by expanding the TreeView and scrolling to the specific node.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView nodes.\n */\n TreeView.prototype.ensureVisible = function (node) {\n var liEle = this.getElement(node);\n if (isNOU(liEle)) {\n return;\n }\n var parents = this.parents(liEle, '.' + LISTITEM);\n this.expandAll(parents);\n setTimeout(function () { liEle.scrollIntoView(true); }, 450);\n };\n /**\n * Expands all the collapsed TreeView nodes. You can expand the specific nodes by passing the array of collapsed nodes\n * as argument to this method. You can also expand all the collapsed nodes by excluding the hidden nodes by setting\n * **excludeHiddenNodes** to true to this method. To expand a specific level of nodes, set **level** as argument to expandAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @param {number} level - TreeView nodes will expand up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes when expanding all nodes.\n */\n TreeView.prototype.expandAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, EXPANDABLE, true);\n }\n else {\n if (level > 0) {\n this.expandByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.expandAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Gets all the checked nodes including child, whether it is loaded or not.\n */\n TreeView.prototype.getAllCheckedNodes = function () {\n var checkNodes = this.checkedNodes;\n return checkNodes;\n };\n /**\n * Gets all the disabled nodes including child, whether it is loaded or not.\n */\n TreeView.prototype.getDisabledNodes = function () {\n var disabledNodes = this.disableNode;\n return disabledNodes;\n };\n /**\n * Get the node's data such as id, text, parentID, selected, isChecked, and expanded by passing the node element or it's ID.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n * @BlazorType NodeData\n */\n TreeView.prototype.getNode = function (node) {\n var ele = this.getElement(node);\n return this.getNodeData(ele, true);\n };\n /**\n * To get the updated data source of TreeView after performing some operation like drag and drop, node editing,\n * node selecting/unSelecting, node expanding/collapsing, node checking/unChecking, adding and removing node.\n * * If you pass the ID of TreeView node as arguments for this method then it will return the updated data source\n * of the corresponding node otherwise it will return the entire updated data source of TreeView.\n * * The updated data source also contains custom attributes if you specified in data source.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n * @isGenericType true\n */\n TreeView.prototype.getTreeData = function (node) {\n var id = this.getId(node);\n this.updatePersistProp();\n if (isNOU(id)) {\n return this.treeData;\n }\n else {\n var data = this.getNodeObject(id);\n return isNOU(data) ? [] : [data];\n }\n };\n /**\n * Moves the collection of nodes within the same TreeView based on target or its index position.\n * @param {string[] | Element[]} sourceNodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {number} index - Specifies the index to place the moved nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n */\n TreeView.prototype.moveNodes = function (sourceNodes, target, index, preventTargetExpand) {\n var dropLi = this.getElement(target);\n if (isNOU(dropLi)) {\n return;\n }\n for (var i = 0; i < sourceNodes.length; i++) {\n var dragLi = this.getElement(sourceNodes[i]);\n if (isNOU(dragLi) || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n continue;\n }\n this.preventExpand = preventTargetExpand;\n this.dropAsChildNode(dragLi, dropLi, this, index);\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n this.triggerEvent();\n };\n /**\n * Refreshes a particular node of the TreeView.\n * @param {string | Element} target - Specifies the ID of TreeView node or TreeView node as target element.\n * @param {{ [key: string]: Object }[]} newData - Specifies the new data of TreeView node.\n */\n TreeView.prototype.refreshNode = function (target, newData) {\n if (isNOU(target) || isNOU(newData)) {\n return;\n }\n var id;\n var isRefreshChild = false;\n if (this.dataType == 1 && newData.length > 1) {\n isRefreshChild = true;\n }\n else if (this.dataType == 2 && newData.length === 1) {\n var updatedChildValue = getValue(this.fields.child.toString(), newData[0]);\n if (!isNOU(updatedChildValue)) {\n isRefreshChild = true;\n }\n }\n var liEle = this.getElement(target);\n id = liEle ? liEle.getAttribute('data-uid') : ((target) ? target.toString() : null);\n this.refreshData = this.getNodeObject(id);\n newData = JSON.parse(JSON.stringify(newData));\n // tslint:disable\n var newNodeData;\n var parentData;\n if (this.dataType == 1 && isRefreshChild) {\n for (var k = 0; k < newData.length; k++) {\n if (isNOU(newData[k][this.fields.parentID])) {\n parentData = newData[k];\n newData.splice(k, 1);\n break;\n }\n }\n newNodeData = extend({}, this.refreshData, parentData);\n }\n else {\n newNodeData = extend({}, this.refreshData, newData[0]);\n }\n if (isNOU(liEle)) {\n this.updatePosition(id, newNodeData, isRefreshChild, newData);\n return;\n }\n this.isRefreshed = true;\n var level = parseFloat(liEle.getAttribute('aria-level'));\n var newliEle = ListBase.createListItemFromJson(this.createElement, [newNodeData], this.listBaseOption, level);\n var ul = select('.' + PARENTITEM, liEle);\n var childItems = getValue(this.fields.child.toString(), newNodeData);\n if ((isRefreshChild && ul) || (isRefreshChild && !isNOU(childItems))) {\n var parentEle = liEle.parentElement;\n var index = Array.prototype.indexOf.call(parentEle.childNodes, liEle);\n remove(liEle);\n parentEle.insertBefore(newliEle[0], parentEle.childNodes[index]);\n this.updatePosition(id, newNodeData, isRefreshChild, newData);\n if (isRefreshChild && ul) {\n this.expandAll([id]);\n }\n }\n else {\n var txtEle = select('.' + TEXTWRAP, liEle);\n var newTextEle = select('.' + TEXTWRAP, newliEle[0]);\n var icon = select('div.' + ICON, txtEle);\n var newIcon = select('div.' + ICON, newTextEle);\n if (icon && newIcon) {\n if (newIcon.classList.contains(EXPANDABLE) && icon.classList.contains(COLLAPSIBLE)) {\n removeClass([newIcon], EXPANDABLE);\n addClass([newIcon], COLLAPSIBLE);\n }\n else if (newIcon.classList.contains(COLLAPSIBLE) && icon.classList.contains(EXPANDABLE)) {\n removeClass([newIcon], COLLAPSIBLE);\n addClass([newIcon], EXPANDABLE);\n }\n else if (icon.classList.contains('interaction')) {\n addClass([newIcon], 'interaction');\n }\n }\n remove(txtEle);\n var fullEle = select('.' + FULLROW, liEle);\n fullEle.parentNode.insertBefore(newTextEle, fullEle.nextSibling);\n this.updatePosition(id, newNodeData, isRefreshChild, newData);\n }\n liEle = this.getElement(target);\n if (newNodeData[this.fields.tooltip]) {\n liEle.setAttribute(\"title\", newNodeData[this.fields.tooltip]);\n }\n if (newNodeData.hasOwnProperty(this.fields.htmlAttributes) && newNodeData[this.fields.htmlAttributes]) {\n var attr = {};\n merge(attr, newNodeData[this.fields.htmlAttributes]);\n if (attr.class) {\n addClass([liEle], attr.class.split(' '));\n delete attr.class;\n }\n else {\n attributes(liEle, attr);\n }\n }\n if (this.selectedNodes.indexOf(id) !== -1) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n }\n this.isRefreshed = false;\n this.triggerEvent();\n };\n /**\n * Removes the collection of TreeView nodes by passing the array of node details as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.removeNodes = function (nodes) {\n if (!isNOU(nodes)) {\n if (this.fields.dataSource instanceof DataManager && !this.isOffline && (this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n this.crudOperation('delete', nodes);\n }\n else {\n this.deleteSuccess(nodes);\n }\n }\n };\n /**\n * Replaces the text of the TreeView node with the given text.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {string} newText - Specifies the new text of TreeView node.\n */\n TreeView.prototype.updateNode = function (target, newText) {\n var _this = this;\n if (isNOU(target) || isNOU(newText) || !this.allowEditing) {\n return;\n }\n var liEle = this.getElement(target);\n if (isNOU(liEle)) {\n return;\n }\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var eventArgs = this.getEditEvent(liEle, null, null);\n this.trigger('nodeEditing', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n if (_this.fields.dataSource instanceof DataManager && !_this.isOffline && (_this.fields.dataSource.adaptorName !== 'BlazorAdaptor')) {\n _this.crudOperation('update', null, target, newText, null, null, false);\n }\n else {\n _this.appendNewText(liEle, txtEle, newText, false);\n }\n }\n });\n };\n /**\n * Unchecks all the checked nodes. You can also uncheck the specific nodes by passing array of checked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.uncheckAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, false);\n }\n };\n var TreeView_1;\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Complex({}, NodeAnimationSettings)\n ], TreeView.prototype, \"animation\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"checkedNodes\", void 0);\n __decorate([\n Property('')\n ], TreeView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"disabled\", void 0);\n __decorate([\n Property(null)\n ], TreeView.prototype, \"dragArea\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"expandedNodes\", void 0);\n __decorate([\n Property('Auto')\n ], TreeView.prototype, \"expandOn\", void 0);\n __decorate([\n Complex({}, FieldsSettings)\n ], TreeView.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"fullRowSelect\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"loadOnDemand\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"locale\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"nodeTemplate\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"selectedNodes\", void 0);\n __decorate([\n Property('None')\n ], TreeView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"autoCheck\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"fullRowNavigable\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"drawNode\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"keyPress\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecking\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeClicked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragging\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStart\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStop\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDropped\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEdited\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEditing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanded\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanding\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelected\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelecting\", void 0);\n TreeView = TreeView_1 = __decorate([\n NotifyPropertyChanges\n ], TreeView);\n return TreeView;\n}(Component));\nexport { TreeView };\n","/**\n * @module ol/geom/flat/reverse\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nexport function coordinates(flatCoordinates, offset, end, stride) {\n while (offset < end - stride) {\n for (var i = 0; i < stride; ++i) {\n var tmp = flatCoordinates[offset + i];\n flatCoordinates[offset + i] = flatCoordinates[end - stride + i];\n flatCoordinates[end - stride + i] = tmp;\n }\n offset += stride;\n end -= stride;\n }\n}\n//# sourceMappingURL=reverse.js.map","/**\n * @module ol/geom/flat/orient\n */\nimport { coordinates as reverseCoordinates } from './reverse.js';\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // http://tinyurl.com/clockwise-method\n // https://github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrlinearring.cpp\n var edge = 0;\n var x1 = flatCoordinates[end - stride];\n var y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n var x2 = flatCoordinates[offset];\n var y2 = flatCoordinates[offset + 1];\n edge += (x2 - x1) * (y2 + y1);\n x1 = x2;\n y1 = y2;\n }\n return edge === 0 ? undefined : edge > 0;\n}\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(flatCoordinates, offset, ends, stride, opt_right) {\n var right = opt_right !== undefined ? opt_right : false;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n var isClockwise = linearRingIsClockwise(flatCoordinates, offset, end, stride);\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n }\n else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\n}\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(flatCoordinates, offset, endss, stride, opt_right) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, opt_right)) {\n return false;\n }\n if (ends.length) {\n offset = ends[ends.length - 1];\n }\n }\n return true;\n}\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(flatCoordinates, offset, ends, stride, opt_right) {\n var right = opt_right !== undefined ? opt_right : false;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n var isClockwise = linearRingIsClockwise(flatCoordinates, offset, end, stride);\n var reverse = i === 0\n ? (right && isClockwise) || (!right && !isClockwise)\n : (right && !isClockwise) || (!right && isClockwise);\n if (reverse) {\n reverseCoordinates(flatCoordinates, offset, end, stride);\n }\n offset = end;\n }\n return offset;\n}\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(flatCoordinates, offset, endss, stride, opt_right) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(flatCoordinates, offset, endss[i], stride, opt_right);\n }\n return offset;\n}\n//# sourceMappingURL=orient.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/Layer\n */\nimport EventType from '../events/EventType.js';\nimport ImageState from '../ImageState.js';\nimport Observable from '../Observable.js';\nimport SourceState from '../source/State.js';\nimport { abstract } from '../util.js';\n/**\n * @template {import(\"../layer/Layer.js\").default} LayerType\n */\nvar LayerRenderer = /** @class */ (function (_super) {\n __extends(LayerRenderer, _super);\n /**\n * @param {LayerType} layer Layer.\n */\n function LayerRenderer(layer) {\n var _this = _super.call(this) || this;\n /** @private */\n _this.boundHandleImageChange_ = _this.handleImageChange_.bind(_this);\n /**\n * @protected\n * @type {LayerType}\n */\n _this.layer_ = layer;\n /**\n * @type {import(\"../render/canvas/ExecutorGroup\").default}\n */\n _this.declutterExecutorGroup = null;\n return _this;\n }\n /**\n * Asynchronous layer level hit detection.\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @return {Promise<Array<import(\"../Feature\").default>>} Promise that resolves with\n * an array of features.\n */\n LayerRenderer.prototype.getFeatures = function (pixel) {\n return abstract();\n };\n /**\n * Determine whether render should be called.\n * @abstract\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n */\n LayerRenderer.prototype.prepareFrame = function (frameState) {\n return abstract();\n };\n /**\n * Render the layer.\n * @abstract\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target that may be used to render content to.\n * @return {HTMLElement} The rendered element.\n */\n LayerRenderer.prototype.renderFrame = function (frameState, target) {\n return abstract();\n };\n /**\n * @param {Object<number, Object<string, import(\"../Tile.js\").default>>} tiles Lookup of loaded tiles by zoom level.\n * @param {number} zoom Zoom level.\n * @param {import(\"../Tile.js\").default} tile Tile.\n * @return {boolean|void} If `false`, the tile will not be considered loaded.\n */\n LayerRenderer.prototype.loadedTileCallback = function (tiles, zoom, tile) {\n if (!tiles[zoom]) {\n tiles[zoom] = {};\n }\n tiles[zoom][tile.tileCoord.toString()] = tile;\n return undefined;\n };\n /**\n * Create a function that adds loaded tiles to the tile lookup.\n * @param {import(\"../source/Tile.js\").default} source Tile source.\n * @param {import(\"../proj/Projection.js\").default} projection Projection of the tiles.\n * @param {Object<number, Object<string, import(\"../Tile.js\").default>>} tiles Lookup of loaded tiles by zoom level.\n * @return {function(number, import(\"../TileRange.js\").default):boolean} A function that can be\n * called with a zoom level and a tile range to add loaded tiles to the lookup.\n * @protected\n */\n LayerRenderer.prototype.createLoadedTileFinder = function (source, projection, tiles) {\n return (\n /**\n * @param {number} zoom Zoom level.\n * @param {import(\"../TileRange.js\").default} tileRange Tile range.\n * @return {boolean} The tile range is fully loaded.\n * @this {LayerRenderer}\n */\n function (zoom, tileRange) {\n var callback = this.loadedTileCallback.bind(this, tiles, zoom);\n return source.forEachLoadedTile(projection, zoom, tileRange, callback);\n }.bind(this));\n };\n /**\n * @abstract\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {import(\"./vector.js\").FeatureCallback<T>} callback Feature callback.\n * @param {Array<import(\"./Map.js\").HitMatch<T>>} matches The hit detected matches with tolerance.\n * @return {T|undefined} Callback result.\n * @template T\n */\n LayerRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, callback, matches) {\n return undefined;\n };\n /**\n * @abstract\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @return {Uint8ClampedArray|Uint8Array} The result. If there is no data at the pixel\n * location, null will be returned. If there is data, but pixel values cannot be\n * returned, and empty array will be returned.\n */\n LayerRenderer.prototype.getDataAtPixel = function (pixel, frameState, hitTolerance) {\n return abstract();\n };\n /**\n * @return {LayerType} Layer.\n */\n LayerRenderer.prototype.getLayer = function () {\n return this.layer_;\n };\n /**\n * Perform action necessary to get the layer rendered after new fonts have loaded\n * @abstract\n */\n LayerRenderer.prototype.handleFontsChanged = function () { };\n /**\n * Handle changes in image state.\n * @param {import(\"../events/Event.js\").default} event Image change event.\n * @private\n */\n LayerRenderer.prototype.handleImageChange_ = function (event) {\n var image = /** @type {import(\"../Image.js\").default} */ (event.target);\n if (image.getState() === ImageState.LOADED) {\n this.renderIfReadyAndVisible();\n }\n };\n /**\n * Load the image if not already loaded, and register the image change\n * listener if needed.\n * @param {import(\"../ImageBase.js\").default} image Image.\n * @return {boolean} `true` if the image is already loaded, `false` otherwise.\n * @protected\n */\n LayerRenderer.prototype.loadImage = function (image) {\n var imageState = image.getState();\n if (imageState != ImageState.LOADED && imageState != ImageState.ERROR) {\n image.addEventListener(EventType.CHANGE, this.boundHandleImageChange_);\n }\n if (imageState == ImageState.IDLE) {\n image.load();\n imageState = image.getState();\n }\n return imageState == ImageState.LOADED;\n };\n /**\n * @protected\n */\n LayerRenderer.prototype.renderIfReadyAndVisible = function () {\n var layer = this.getLayer();\n if (layer.getVisible() && layer.getSourceState() == SourceState.READY) {\n layer.changed();\n }\n };\n return LayerRenderer;\n}(Observable));\nexport default LayerRenderer;\n//# sourceMappingURL=Layer.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/canvas/Layer\n */\nimport LayerRenderer from '../Layer.js';\nimport RenderEvent from '../../render/Event.js';\nimport RenderEventType from '../../render/EventType.js';\nimport { apply as applyTransform, compose as composeTransform, create as createTransform, } from '../../transform.js';\nimport { containsCoordinate, getBottomLeft, getBottomRight, getTopLeft, getTopRight, } from '../../extent.js';\nimport { createCanvasContext2D } from '../../dom.js';\nimport { rotateAtOffset } from '../../render/canvas.js';\n/**\n * @abstract\n * @template {import(\"../../layer/Layer.js\").default} LayerType\n */\nvar CanvasLayerRenderer = /** @class */ (function (_super) {\n __extends(CanvasLayerRenderer, _super);\n /**\n * @param {LayerType} layer Layer.\n */\n function CanvasLayerRenderer(layer) {\n var _this = _super.call(this, layer) || this;\n /**\n * @protected\n * @type {HTMLElement}\n */\n _this.container = null;\n /**\n * @protected\n * @type {number}\n */\n _this.renderedResolution;\n /**\n * A temporary transform. The values in this transform should only be used in a\n * function that sets the values.\n * @protected\n * @type {import(\"../../transform.js\").Transform}\n */\n _this.tempTransform = createTransform();\n /**\n * The transform for rendered pixels to viewport CSS pixels. This transform must\n * be set when rendering a frame and may be used by other functions after rendering.\n * @protected\n * @type {import(\"../../transform.js\").Transform}\n */\n _this.pixelTransform = createTransform();\n /**\n * The transform for viewport CSS pixels to rendered pixels. This transform must\n * be set when rendering a frame and may be used by other functions after rendering.\n * @protected\n * @type {import(\"../../transform.js\").Transform}\n */\n _this.inversePixelTransform = createTransform();\n /**\n * @type {CanvasRenderingContext2D}\n */\n _this.context = null;\n /**\n * @type {boolean}\n */\n _this.containerReused = false;\n return _this;\n }\n /**\n * Get a rendering container from an existing target, if compatible.\n * @param {HTMLElement} target Potential render target.\n * @param {string} transform CSS Transform.\n * @param {number} opacity Opacity.\n */\n CanvasLayerRenderer.prototype.useContainer = function (target, transform, opacity) {\n var layerClassName = this.getLayer().getClassName();\n var container, context;\n if (target &&\n target.style.opacity === '' &&\n target.className === layerClassName) {\n var canvas = target.firstElementChild;\n if (canvas instanceof HTMLCanvasElement) {\n context = canvas.getContext('2d');\n }\n }\n if (context &&\n (context.canvas.width === 0 ||\n context.canvas.style.transform === transform)) {\n // Container of the previous layer renderer can be used.\n this.container = target;\n this.context = context;\n this.containerReused = true;\n }\n else if (this.containerReused) {\n // Previously reused container cannot be used any more.\n this.container = null;\n this.context = null;\n this.containerReused = false;\n }\n if (!this.container) {\n container = document.createElement('div');\n container.className = layerClassName;\n var style = container.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n context = createCanvasContext2D();\n var canvas = context.canvas;\n container.appendChild(canvas);\n style = canvas.style;\n style.position = 'absolute';\n style.left = '0';\n style.transformOrigin = 'top left';\n this.container = container;\n this.context = context;\n }\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {import(\"../../extent.js\").Extent} extent Clip extent.\n * @protected\n */\n CanvasLayerRenderer.prototype.clip = function (context, frameState, extent) {\n var pixelRatio = frameState.pixelRatio;\n var halfWidth = (frameState.size[0] * pixelRatio) / 2;\n var halfHeight = (frameState.size[1] * pixelRatio) / 2;\n var rotation = frameState.viewState.rotation;\n var topLeft = getTopLeft(extent);\n var topRight = getTopRight(extent);\n var bottomRight = getBottomRight(extent);\n var bottomLeft = getBottomLeft(extent);\n applyTransform(frameState.coordinateToPixelTransform, topLeft);\n applyTransform(frameState.coordinateToPixelTransform, topRight);\n applyTransform(frameState.coordinateToPixelTransform, bottomRight);\n applyTransform(frameState.coordinateToPixelTransform, bottomLeft);\n context.save();\n rotateAtOffset(context, -rotation, halfWidth, halfHeight);\n context.beginPath();\n context.moveTo(topLeft[0] * pixelRatio, topLeft[1] * pixelRatio);\n context.lineTo(topRight[0] * pixelRatio, topRight[1] * pixelRatio);\n context.lineTo(bottomRight[0] * pixelRatio, bottomRight[1] * pixelRatio);\n context.lineTo(bottomLeft[0] * pixelRatio, bottomLeft[1] * pixelRatio);\n context.clip();\n rotateAtOffset(context, rotation, halfWidth, halfHeight);\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {import(\"../../extent.js\").Extent} extent Clip extent.\n * @protected\n */\n CanvasLayerRenderer.prototype.clipUnrotated = function (context, frameState, extent) {\n var topLeft = getTopLeft(extent);\n var topRight = getTopRight(extent);\n var bottomRight = getBottomRight(extent);\n var bottomLeft = getBottomLeft(extent);\n applyTransform(frameState.coordinateToPixelTransform, topLeft);\n applyTransform(frameState.coordinateToPixelTransform, topRight);\n applyTransform(frameState.coordinateToPixelTransform, bottomRight);\n applyTransform(frameState.coordinateToPixelTransform, bottomLeft);\n var inverted = this.inversePixelTransform;\n applyTransform(inverted, topLeft);\n applyTransform(inverted, topRight);\n applyTransform(inverted, bottomRight);\n applyTransform(inverted, bottomLeft);\n context.save();\n context.beginPath();\n context.moveTo(Math.round(topLeft[0]), Math.round(topLeft[1]));\n context.lineTo(Math.round(topRight[0]), Math.round(topRight[1]));\n context.lineTo(Math.round(bottomRight[0]), Math.round(bottomRight[1]));\n context.lineTo(Math.round(bottomLeft[0]), Math.round(bottomLeft[1]));\n context.clip();\n };\n /**\n * @param {import(\"../../render/EventType.js\").default} type Event type.\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @private\n */\n CanvasLayerRenderer.prototype.dispatchRenderEvent_ = function (type, context, frameState) {\n var layer = this.getLayer();\n if (layer.hasListener(type)) {\n var event_1 = new RenderEvent(type, this.inversePixelTransform, frameState, context);\n layer.dispatchEvent(event_1);\n }\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @protected\n */\n CanvasLayerRenderer.prototype.preRender = function (context, frameState) {\n this.dispatchRenderEvent_(RenderEventType.PRERENDER, context, frameState);\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @protected\n */\n CanvasLayerRenderer.prototype.postRender = function (context, frameState) {\n this.dispatchRenderEvent_(RenderEventType.POSTRENDER, context, frameState);\n };\n /**\n * Creates a transform for rendering to an element that will be rotated after rendering.\n * @param {import(\"../../coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} width Width of the rendered element (in pixels).\n * @param {number} height Height of the rendered element (in pixels).\n * @param {number} offsetX Offset on the x-axis in view coordinates.\n * @protected\n * @return {!import(\"../../transform.js\").Transform} Transform.\n */\n CanvasLayerRenderer.prototype.getRenderTransform = function (center, resolution, rotation, pixelRatio, width, height, offsetX) {\n var dx1 = width / 2;\n var dy1 = height / 2;\n var sx = pixelRatio / resolution;\n var sy = -sx;\n var dx2 = -center[0] + offsetX;\n var dy2 = -center[1];\n return composeTransform(this.tempTransform, dx1, dy1, sx, sy, -rotation, dx2, dy2);\n };\n /**\n * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @return {Uint8ClampedArray|Uint8Array} The result. If there is no data at the pixel\n * location, null will be returned. If there is data, but pixel values cannot be\n * returned, and empty array will be returned.\n */\n CanvasLayerRenderer.prototype.getDataAtPixel = function (pixel, frameState, hitTolerance) {\n var renderPixel = applyTransform(this.inversePixelTransform, pixel.slice());\n var context = this.context;\n var layer = this.getLayer();\n var layerExtent = layer.getExtent();\n if (layerExtent) {\n var renderCoordinate = applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n /** get only data inside of the layer extent */\n if (!containsCoordinate(layerExtent, renderCoordinate)) {\n return null;\n }\n }\n var data;\n try {\n var x = Math.round(renderPixel[0]);\n var y = Math.round(renderPixel[1]);\n var newCanvas = document.createElement('canvas');\n var newContext = newCanvas.getContext('2d');\n newCanvas.width = 1;\n newCanvas.height = 1;\n newContext.clearRect(0, 0, 1, 1);\n newContext.drawImage(context.canvas, x, y, 1, 1, 0, 0, 1, 1);\n data = newContext.getImageData(0, 0, 1, 1).data;\n }\n catch (err) {\n if (err.name === 'SecurityError') {\n // tainted canvas, we assume there is data at the given pixel (although there might not be)\n return new Uint8Array();\n }\n return data;\n }\n if (data[3] === 0) {\n return null;\n }\n return data;\n };\n return CanvasLayerRenderer;\n}(LayerRenderer));\nexport default CanvasLayerRenderer;\n//# sourceMappingURL=Layer.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/AssertionError\n */\nimport { VERSION } from './util.js';\n/**\n * Error object thrown when an assertion failed. This is an ECMA-262 Error,\n * extended with a `code` property.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error.\n */\nvar AssertionError = /** @class */ (function (_super) {\n __extends(AssertionError, _super);\n /**\n * @param {number} code Error code.\n */\n function AssertionError(code) {\n var _this = this;\n var path = VERSION === 'latest' ? VERSION : 'v' + VERSION.split('-')[0];\n var message = 'Assertion failed. See https://openlayers.org/en/' +\n path +\n '/doc/errors/#' +\n code +\n ' for details.';\n _this = _super.call(this, message) || this;\n /**\n * Error code. The meaning of the code can be found on\n * https://openlayers.org/en/latest/doc/errors/ (replace `latest` with\n * the version found in the OpenLayers script's header comment if a version\n * other than the latest is used).\n * @type {number}\n * @api\n */\n _this.code = code;\n /**\n * @type {string}\n */\n _this.name = 'AssertionError';\n // Re-assign message, see https://github.com/Rich-Harris/buble/issues/40\n _this.message = message;\n return _this;\n }\n return AssertionError;\n}(Error));\nexport default AssertionError;\n//# sourceMappingURL=AssertionError.js.map","/**\n * @module ol/layer/Property\n */\n/**\n * @enum {string}\n */\nexport default {\n OPACITY: 'opacity',\n VISIBLE: 'visible',\n EXTENT: 'extent',\n Z_INDEX: 'zIndex',\n MAX_RESOLUTION: 'maxResolution',\n MIN_RESOLUTION: 'minResolution',\n MAX_ZOOM: 'maxZoom',\n MIN_ZOOM: 'minZoom',\n SOURCE: 'source',\n};\n//# sourceMappingURL=Property.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/Base\n */\nimport BaseObject from '../Object.js';\nimport LayerProperty from './Property.js';\nimport { abstract } from '../util.js';\nimport { assert } from '../asserts.js';\nimport { assign } from '../obj.js';\nimport { clamp } from '../math.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Note that with {@link module:ol/layer/Base} and all its subclasses, any property set in\n * the options is set as a {@link module:ol/Object} property on the layer object, so\n * is observable, and has get/set accessors.\n *\n * @api\n */\nvar BaseLayer = /** @class */ (function (_super) {\n __extends(BaseLayer, _super);\n /**\n * @param {Options} options Layer options.\n */\n function BaseLayer(options) {\n var _this = _super.call(this) || this;\n /**\n * @type {Object<string, *>}\n */\n var properties = assign({}, options);\n properties[LayerProperty.OPACITY] =\n options.opacity !== undefined ? options.opacity : 1;\n assert(typeof properties[LayerProperty.OPACITY] === 'number', 64); // Layer opacity must be a number\n properties[LayerProperty.VISIBLE] =\n options.visible !== undefined ? options.visible : true;\n properties[LayerProperty.Z_INDEX] = options.zIndex;\n properties[LayerProperty.MAX_RESOLUTION] =\n options.maxResolution !== undefined ? options.maxResolution : Infinity;\n properties[LayerProperty.MIN_RESOLUTION] =\n options.minResolution !== undefined ? options.minResolution : 0;\n properties[LayerProperty.MIN_ZOOM] =\n options.minZoom !== undefined ? options.minZoom : -Infinity;\n properties[LayerProperty.MAX_ZOOM] =\n options.maxZoom !== undefined ? options.maxZoom : Infinity;\n /**\n * @type {string}\n * @private\n */\n _this.className_ =\n properties.className !== undefined ? options.className : 'ol-layer';\n delete properties.className;\n _this.setProperties(properties);\n /**\n * @type {import(\"./Layer.js\").State}\n * @private\n */\n _this.state_ = null;\n return _this;\n }\n /**\n * @return {string} CSS class name.\n */\n BaseLayer.prototype.getClassName = function () {\n return this.className_;\n };\n /**\n * This method is not meant to be called by layers or layer renderers because the state\n * is incorrect if the layer is included in a layer group.\n *\n * @param {boolean=} opt_managed Layer is managed.\n * @return {import(\"./Layer.js\").State} Layer state.\n */\n BaseLayer.prototype.getLayerState = function (opt_managed) {\n /** @type {import(\"./Layer.js\").State} */\n var state = this.state_ ||\n /** @type {?} */ ({\n layer: this,\n managed: opt_managed === undefined ? true : opt_managed,\n });\n var zIndex = this.getZIndex();\n state.opacity = clamp(Math.round(this.getOpacity() * 100) / 100, 0, 1);\n state.sourceState = this.getSourceState();\n state.visible = this.getVisible();\n state.extent = this.getExtent();\n state.zIndex =\n zIndex !== undefined ? zIndex : state.managed === false ? Infinity : 0;\n state.maxResolution = this.getMaxResolution();\n state.minResolution = Math.max(this.getMinResolution(), 0);\n state.minZoom = this.getMinZoom();\n state.maxZoom = this.getMaxZoom();\n this.state_ = state;\n return state;\n };\n /**\n * @abstract\n * @param {Array<import(\"./Layer.js\").default>=} opt_array Array of layers (to be\n * modified in place).\n * @return {Array<import(\"./Layer.js\").default>} Array of layers.\n */\n BaseLayer.prototype.getLayersArray = function (opt_array) {\n return abstract();\n };\n /**\n * @abstract\n * @param {Array<import(\"./Layer.js\").State>=} opt_states Optional list of layer\n * states (to be modified in place).\n * @return {Array<import(\"./Layer.js\").State>} List of layer states.\n */\n BaseLayer.prototype.getLayerStatesArray = function (opt_states) {\n return abstract();\n };\n /**\n * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it\n * will be visible regardless of extent.\n * @return {import(\"../extent.js\").Extent|undefined} The layer extent.\n * @observable\n * @api\n */\n BaseLayer.prototype.getExtent = function () {\n return /** @type {import(\"../extent.js\").Extent|undefined} */ (this.get(LayerProperty.EXTENT));\n };\n /**\n * Return the maximum resolution of the layer.\n * @return {number} The maximum resolution of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.getMaxResolution = function () {\n return /** @type {number} */ (this.get(LayerProperty.MAX_RESOLUTION));\n };\n /**\n * Return the minimum resolution of the layer.\n * @return {number} The minimum resolution of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.getMinResolution = function () {\n return /** @type {number} */ (this.get(LayerProperty.MIN_RESOLUTION));\n };\n /**\n * Return the minimum zoom level of the layer.\n * @return {number} The minimum zoom level of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.getMinZoom = function () {\n return /** @type {number} */ (this.get(LayerProperty.MIN_ZOOM));\n };\n /**\n * Return the maximum zoom level of the layer.\n * @return {number} The maximum zoom level of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.getMaxZoom = function () {\n return /** @type {number} */ (this.get(LayerProperty.MAX_ZOOM));\n };\n /**\n * Return the opacity of the layer (between 0 and 1).\n * @return {number} The opacity of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.getOpacity = function () {\n return /** @type {number} */ (this.get(LayerProperty.OPACITY));\n };\n /**\n * @abstract\n * @return {import(\"../source/State.js\").default} Source state.\n */\n BaseLayer.prototype.getSourceState = function () {\n return abstract();\n };\n /**\n * Return the visibility of the layer (`true` or `false`).\n * @return {boolean} The visibility of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.getVisible = function () {\n return /** @type {boolean} */ (this.get(LayerProperty.VISIBLE));\n };\n /**\n * Return the Z-index of the layer, which is used to order layers before\n * rendering. The default Z-index is 0.\n * @return {number} The Z-index of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.getZIndex = function () {\n return /** @type {number} */ (this.get(LayerProperty.Z_INDEX));\n };\n /**\n * Set the extent at which the layer is visible. If `undefined`, the layer\n * will be visible at all extents.\n * @param {import(\"../extent.js\").Extent|undefined} extent The extent of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.setExtent = function (extent) {\n this.set(LayerProperty.EXTENT, extent);\n };\n /**\n * Set the maximum resolution at which the layer is visible.\n * @param {number} maxResolution The maximum resolution of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.setMaxResolution = function (maxResolution) {\n this.set(LayerProperty.MAX_RESOLUTION, maxResolution);\n };\n /**\n * Set the minimum resolution at which the layer is visible.\n * @param {number} minResolution The minimum resolution of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.setMinResolution = function (minResolution) {\n this.set(LayerProperty.MIN_RESOLUTION, minResolution);\n };\n /**\n * Set the maximum zoom (exclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} maxZoom The maximum zoom of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.setMaxZoom = function (maxZoom) {\n this.set(LayerProperty.MAX_ZOOM, maxZoom);\n };\n /**\n * Set the minimum zoom (inclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} minZoom The minimum zoom of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.setMinZoom = function (minZoom) {\n this.set(LayerProperty.MIN_ZOOM, minZoom);\n };\n /**\n * Set the opacity of the layer, allowed values range from 0 to 1.\n * @param {number} opacity The opacity of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.setOpacity = function (opacity) {\n assert(typeof opacity === 'number', 64); // Layer opacity must be a number\n this.set(LayerProperty.OPACITY, opacity);\n };\n /**\n * Set the visibility of the layer (`true` or `false`).\n * @param {boolean} visible The visibility of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.setVisible = function (visible) {\n this.set(LayerProperty.VISIBLE, visible);\n };\n /**\n * Set Z-index of the layer, which is used to order layers before rendering.\n * The default Z-index is 0.\n * @param {number} zindex The z-index of the layer.\n * @observable\n * @api\n */\n BaseLayer.prototype.setZIndex = function (zindex) {\n this.set(LayerProperty.Z_INDEX, zindex);\n };\n /**\n * Clean up.\n */\n BaseLayer.prototype.disposeInternal = function () {\n if (this.state_) {\n this.state_.layer = null;\n this.state_ = null;\n }\n _super.prototype.disposeInternal.call(this);\n };\n return BaseLayer;\n}(BaseObject));\nexport default BaseLayer;\n//# sourceMappingURL=Base.js.map","/**\n * @module ol/interaction/Property\n */\n/**\n * @enum {string}\n */\nexport default {\n ACTIVE: 'active',\n};\n//# sourceMappingURL=Property.js.map","/**\n * @module ol/extent/Relationship\n */\n/**\n * Relationship to an extent.\n * @enum {number}\n */\nexport default {\n UNKNOWN: 0,\n INTERSECTING: 1,\n ABOVE: 2,\n RIGHT: 4,\n BELOW: 8,\n LEFT: 16,\n};\n//# sourceMappingURL=Relationship.js.map","/**\n * @module ol/extent/Corner\n */\n/**\n * Extent corner.\n * @enum {string}\n */\nexport default {\n BOTTOM_LEFT: 'bottom-left',\n BOTTOM_RIGHT: 'bottom-right',\n TOP_LEFT: 'top-left',\n TOP_RIGHT: 'top-right',\n};\n//# sourceMappingURL=Corner.js.map","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport { linearRingsContainsXY } from './contains.js';\nimport { numberSafeCompareFunction } from '../../array.js';\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {Array<number>} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array<number>=} opt_dest Destination.\n * @return {Array<number>} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(flatCoordinates, offset, ends, stride, flatCenters, flatCentersOffset, opt_dest) {\n var i, ii, x, x1, x2, y1, y2;\n var y = flatCenters[flatCentersOffset + 1];\n /** @type {Array<number>} */\n var intersections = [];\n // Calculate intersections with the horizontal line\n for (var r = 0, rr = ends.length; r < rr; ++r) {\n var end = ends[r];\n x1 = flatCoordinates[end - stride];\n y1 = flatCoordinates[end - stride + 1];\n for (i = offset; i < end; i += stride) {\n x2 = flatCoordinates[i];\n y2 = flatCoordinates[i + 1];\n if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n intersections.push(x);\n }\n x1 = x2;\n y1 = y2;\n }\n }\n // Find the longest segment of the horizontal line that has its center point\n // inside the linear ring.\n var pointX = NaN;\n var maxSegmentLength = -Infinity;\n intersections.sort(numberSafeCompareFunction);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n var segmentLength = Math.abs(x2 - x1);\n if (segmentLength > maxSegmentLength) {\n x = (x1 + x2) / 2;\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n pointX = x;\n maxSegmentLength = segmentLength;\n }\n }\n x1 = x2;\n }\n if (isNaN(pointX)) {\n // There is no horizontal line that has its center point inside the linear\n // ring. Use the center of the the linear ring's extent.\n pointX = flatCenters[flatCentersOffset];\n }\n if (opt_dest) {\n opt_dest.push(pointX, y, maxSegmentLength);\n return opt_dest;\n }\n else {\n return [pointX, y, maxSegmentLength];\n }\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array<number>} flatCenters Flat centers.\n * @return {Array<number>} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(flatCoordinates, offset, endss, stride, flatCenters) {\n var interiorPoints = [];\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n interiorPoints = getInteriorPointOfArray(flatCoordinates, offset, ends, stride, flatCenters, 2 * i, interiorPoints);\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n//# sourceMappingURL=interiorpoint.js.map","/**\n * @module ol/sphere\n */\nimport GeometryType from './geom/GeometryType.js';\nimport { toDegrees, toRadians } from './math.js';\n/**\n * Object literal with options for the {@link getLength} or {@link getArea}\n * functions.\n * @typedef {Object} SphereMetricOptions\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857']\n * Projection of the geometry. By default, the geometry is assumed to be in\n * Web Mercator.\n * @property {number} [radius=6371008.8] Sphere radius. By default, the\n * [mean Earth radius](https://en.wikipedia.org/wiki/Earth_radius#Mean_radius)\n * for the WGS84 ellipsoid is used.\n */\n/**\n * The mean Earth radius (1/3 * (2a + b)) for the WGS84 ellipsoid.\n * https://en.wikipedia.org/wiki/Earth_radius#Mean_radius\n * @type {number}\n */\nexport var DEFAULT_RADIUS = 6371008.8;\n/**\n * Get the great circle distance (in meters) between two geographic coordinates.\n * @param {Array} c1 Starting coordinate.\n * @param {Array} c2 Ending coordinate.\n * @param {number=} opt_radius The sphere radius to use. Defaults to the Earth's\n * mean radius using the WGS84 ellipsoid.\n * @return {number} The great circle distance between the points (in meters).\n * @api\n */\nexport function getDistance(c1, c2, opt_radius) {\n var radius = opt_radius || DEFAULT_RADIUS;\n var lat1 = toRadians(c1[1]);\n var lat2 = toRadians(c2[1]);\n var deltaLatBy2 = (lat2 - lat1) / 2;\n var deltaLonBy2 = toRadians(c2[0] - c1[0]) / 2;\n var a = Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) +\n Math.sin(deltaLonBy2) *\n Math.sin(deltaLonBy2) *\n Math.cos(lat1) *\n Math.cos(lat2);\n return 2 * radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n}\n/**\n * Get the cumulative great circle length of linestring coordinates (geographic).\n * @param {Array} coordinates Linestring coordinates.\n * @param {number} radius The sphere radius to use.\n * @return {number} The length (in meters).\n */\nfunction getLengthInternal(coordinates, radius) {\n var length = 0;\n for (var i = 0, ii = coordinates.length; i < ii - 1; ++i) {\n length += getDistance(coordinates[i], coordinates[i + 1], radius);\n }\n return length;\n}\n/**\n * Get the spherical length of a geometry. This length is the sum of the\n * great circle distances between coordinates. For polygons, the length is\n * the sum of all rings. For points, the length is zero. For multi-part\n * geometries, the length is the sum of the length of each part.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions=} opt_options Options for the\n * length calculation. By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical length (in meters).\n * @api\n */\nexport function getLength(geometry, opt_options) {\n var options = opt_options || {};\n var radius = options.radius || DEFAULT_RADIUS;\n var projection = options.projection || 'EPSG:3857';\n var type = geometry.getType();\n if (type !== GeometryType.GEOMETRY_COLLECTION) {\n geometry = geometry.clone().transform(projection, 'EPSG:4326');\n }\n var length = 0;\n var coordinates, coords, i, ii, j, jj;\n switch (type) {\n case GeometryType.POINT:\n case GeometryType.MULTI_POINT: {\n break;\n }\n case GeometryType.LINE_STRING:\n case GeometryType.LINEAR_RING: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n length = getLengthInternal(coordinates, radius);\n break;\n }\n case GeometryType.MULTI_LINE_STRING:\n case GeometryType.POLYGON: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n length += getLengthInternal(coordinates[i], radius);\n }\n break;\n }\n case GeometryType.MULTI_POLYGON: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n coords = coordinates[i];\n for (j = 0, jj = coords.length; j < jj; ++j) {\n length += getLengthInternal(coords[j], radius);\n }\n }\n break;\n }\n case GeometryType.GEOMETRY_COLLECTION: {\n var geometries = /** @type {import(\"./geom/GeometryCollection.js\").default} */ (geometry).getGeometries();\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n length += getLength(geometries[i], opt_options);\n }\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return length;\n}\n/**\n * Returns the spherical area for a list of coordinates.\n *\n * [Reference](https://trs-new.jpl.nasa.gov/handle/2014/40409)\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for\n * Polygons on a Sphere\", JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007\n *\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates List of coordinates of a linear\n * ring. If the ring is oriented clockwise, the area will be positive,\n * otherwise it will be negative.\n * @param {number} radius The sphere radius.\n * @return {number} Area (in square meters).\n */\nfunction getAreaInternal(coordinates, radius) {\n var area = 0;\n var len = coordinates.length;\n var x1 = coordinates[len - 1][0];\n var y1 = coordinates[len - 1][1];\n for (var i = 0; i < len; i++) {\n var x2 = coordinates[i][0];\n var y2 = coordinates[i][1];\n area +=\n toRadians(x2 - x1) *\n (2 + Math.sin(toRadians(y1)) + Math.sin(toRadians(y2)));\n x1 = x2;\n y1 = y2;\n }\n return (area * radius * radius) / 2.0;\n}\n/**\n * Get the spherical area of a geometry. This is the area (in meters) assuming\n * that polygon edges are segments of great circles on a sphere.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions=} opt_options Options for the area\n * calculation. By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical area (in square meters).\n * @api\n */\nexport function getArea(geometry, opt_options) {\n var options = opt_options || {};\n var radius = options.radius || DEFAULT_RADIUS;\n var projection = options.projection || 'EPSG:3857';\n var type = geometry.getType();\n if (type !== GeometryType.GEOMETRY_COLLECTION) {\n geometry = geometry.clone().transform(projection, 'EPSG:4326');\n }\n var area = 0;\n var coordinates, coords, i, ii, j, jj;\n switch (type) {\n case GeometryType.POINT:\n case GeometryType.MULTI_POINT:\n case GeometryType.LINE_STRING:\n case GeometryType.MULTI_LINE_STRING:\n case GeometryType.LINEAR_RING: {\n break;\n }\n case GeometryType.POLYGON: {\n coordinates = /** @type {import(\"./geom/Polygon.js\").default} */ (geometry).getCoordinates();\n area = Math.abs(getAreaInternal(coordinates[0], radius));\n for (i = 1, ii = coordinates.length; i < ii; ++i) {\n area -= Math.abs(getAreaInternal(coordinates[i], radius));\n }\n break;\n }\n case GeometryType.MULTI_POLYGON: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n coords = coordinates[i];\n area += Math.abs(getAreaInternal(coords[0], radius));\n for (j = 1, jj = coords.length; j < jj; ++j) {\n area -= Math.abs(getAreaInternal(coords[j], radius));\n }\n }\n break;\n }\n case GeometryType.GEOMETRY_COLLECTION: {\n var geometries = /** @type {import(\"./geom/GeometryCollection.js\").default} */ (geometry).getGeometries();\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n area += getArea(geometries[i], opt_options);\n }\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return area;\n}\n/**\n * Returns the coordinate at the given distance and bearing from `c1`.\n *\n * @param {import(\"./coordinate.js\").Coordinate} c1 The origin point (`[lon, lat]` in degrees).\n * @param {number} distance The great-circle distance between the origin\n * point and the target point.\n * @param {number} bearing The bearing (in radians).\n * @param {number=} opt_radius The sphere radius to use. Defaults to the Earth's\n * mean radius using the WGS84 ellipsoid.\n * @return {import(\"./coordinate.js\").Coordinate} The target point.\n */\nexport function offset(c1, distance, bearing, opt_radius) {\n var radius = opt_radius || DEFAULT_RADIUS;\n var lat1 = toRadians(c1[1]);\n var lon1 = toRadians(c1[0]);\n var dByR = distance / radius;\n var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) +\n Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));\n var lon = lon1 +\n Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));\n return [toDegrees(lon), toDegrees(lat)];\n}\n//# sourceMappingURL=sphere.js.map","/**\n * @module ol/geom/flat/segments\n */\n/**\n * This function calls `callback` for each segment of the flat coordinates\n * array. If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {function(import(\"../../coordinate.js\").Coordinate, import(\"../../coordinate.js\").Coordinate): T} callback Function\n * called for each segment.\n * @return {T|boolean} Value.\n * @template T\n */\nexport function forEach(flatCoordinates, offset, end, stride, callback) {\n var point1 = [flatCoordinates[offset], flatCoordinates[offset + 1]];\n var point2 = [];\n var ret;\n for (; offset + stride < end; offset += stride) {\n point2[0] = flatCoordinates[offset + stride];\n point2[1] = flatCoordinates[offset + stride + 1];\n ret = callback(point1, point2);\n if (ret) {\n return ret;\n }\n point1[0] = point2[0];\n point1[1] = point2[1];\n }\n return false;\n}\n//# sourceMappingURL=segments.js.map","/**\n * @module ol/render/Event\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Event from '../events/Event.js';\nvar RenderEvent = /** @class */ (function (_super) {\n __extends(RenderEvent, _super);\n /**\n * @param {import(\"./EventType.js\").default} type Type.\n * @param {import(\"../transform.js\").Transform=} opt_inversePixelTransform Transform for\n * CSS pixels to rendered pixels.\n * @param {import(\"../PluggableMap.js\").FrameState=} opt_frameState Frame state.\n * @param {?CanvasRenderingContext2D=} opt_context Context.\n */\n function RenderEvent(type, opt_inversePixelTransform, opt_frameState, opt_context) {\n var _this = _super.call(this, type) || this;\n /**\n * Transform from CSS pixels (relative to the top-left corner of the map viewport)\n * to rendered pixels on this event's `context`. Only available when a Canvas renderer is used, null otherwise.\n * @type {import(\"../transform.js\").Transform|undefined}\n * @api\n */\n _this.inversePixelTransform = opt_inversePixelTransform;\n /**\n * An object representing the current render frame state.\n * @type {import(\"../PluggableMap.js\").FrameState|undefined}\n * @api\n */\n _this.frameState = opt_frameState;\n /**\n * Canvas context. Not available when the event is dispatched by the map. Only available\n * when a Canvas renderer is used, null otherwise.\n * @type {CanvasRenderingContext2D|null|undefined}\n * @api\n */\n _this.context = opt_context;\n return _this;\n }\n return RenderEvent;\n}(Event));\nexport default RenderEvent;\n//# sourceMappingURL=Event.js.map","/**\n * @module ol/style/IconImageCache\n */\nimport { asString } from '../color.js';\n/**\n * @classdesc\n * Singleton class. Available through {@link module:ol/style/IconImageCache~shared}.\n */\nvar IconImageCache = /** @class */ (function () {\n function IconImageCache() {\n /**\n * @type {!Object<string, import(\"./IconImage.js\").default>}\n * @private\n */\n this.cache_ = {};\n /**\n * @type {number}\n * @private\n */\n this.cacheSize_ = 0;\n /**\n * @type {number}\n * @private\n */\n this.maxCacheSize_ = 32;\n }\n /**\n * FIXME empty description for jsdoc\n */\n IconImageCache.prototype.clear = function () {\n this.cache_ = {};\n this.cacheSize_ = 0;\n };\n /**\n * @return {boolean} Can expire cache.\n */\n IconImageCache.prototype.canExpireCache = function () {\n return this.cacheSize_ > this.maxCacheSize_;\n };\n /**\n * FIXME empty description for jsdoc\n */\n IconImageCache.prototype.expire = function () {\n if (this.canExpireCache()) {\n var i = 0;\n for (var key in this.cache_) {\n var iconImage = this.cache_[key];\n if ((i++ & 3) === 0 && !iconImage.hasListener()) {\n delete this.cache_[key];\n --this.cacheSize_;\n }\n }\n }\n };\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {import(\"./IconImage.js\").default} Icon image.\n */\n IconImageCache.prototype.get = function (src, crossOrigin, color) {\n var key = getKey(src, crossOrigin, color);\n return key in this.cache_ ? this.cache_[key] : null;\n };\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @param {import(\"./IconImage.js\").default} iconImage Icon image.\n */\n IconImageCache.prototype.set = function (src, crossOrigin, color, iconImage) {\n var key = getKey(src, crossOrigin, color);\n this.cache_[key] = iconImage;\n ++this.cacheSize_;\n };\n /**\n * Set the cache size of the icon cache. Default is `32`. Change this value when\n * your map uses more than 32 different icon images and you are not caching icon\n * styles on the application level.\n * @param {number} maxCacheSize Cache max size.\n * @api\n */\n IconImageCache.prototype.setSize = function (maxCacheSize) {\n this.maxCacheSize_ = maxCacheSize;\n this.expire();\n };\n return IconImageCache;\n}());\n/**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {string} Cache key.\n */\nfunction getKey(src, crossOrigin, color) {\n var colorString = color ? asString(color) : 'null';\n return crossOrigin + ':' + src + ':' + colorString;\n}\nexport default IconImageCache;\n/**\n * The {@link module:ol/style/IconImageCache~IconImageCache} for\n * {@link module:ol/style/Icon~Icon} images.\n * @api\n */\nexport var shared = new IconImageCache();\n//# sourceMappingURL=IconImageCache.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/MapEvent\n */\nimport Event from './events/Event.js';\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map event.\n */\nvar MapEvent = /** @class */ (function (_super) {\n __extends(MapEvent, _super);\n /**\n * @param {string} type Event type.\n * @param {import(\"./PluggableMap.js\").default} map Map.\n * @param {?import(\"./PluggableMap.js\").FrameState=} opt_frameState Frame state.\n */\n function MapEvent(type, map, opt_frameState) {\n var _this = _super.call(this, type) || this;\n /**\n * The map where the event occurred.\n * @type {import(\"./PluggableMap.js\").default}\n * @api\n */\n _this.map = map;\n /**\n * The frame state at the time of the event.\n * @type {?import(\"./PluggableMap.js\").FrameState}\n * @api\n */\n _this.frameState = opt_frameState !== undefined ? opt_frameState : null;\n return _this;\n }\n return MapEvent;\n}(Event));\nexport default MapEvent;\n//# sourceMappingURL=MapEvent.js.map","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","define([\"./kernel\", \"./lang\", \"./array\", \"./config\"], function(dojo, lang, ArrayUtil, config){\n\n\tvar Color = dojo.Color = function(/*Array|String|Object*/ color){\n\t\t// summary:\n\t\t//\t\tTakes a named string, hex string, array of rgb or rgba values,\n\t\t//\t\tan object with r, g, b, and a properties, or another `Color` object\n\t\t//\t\tand creates a new Color instance to work from.\n\t\t//\n\t\t// example:\n\t\t//\t\tWork with a Color instance:\n\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t//\t|\t\tvar c = new Color();\n\t\t//\t|\t\tc.setColor([0,0,0]); // black\n\t\t//\t|\t\tvar hex = c.toHex(); // #000000\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tWork with a node's color:\n\t\t//\t| \n\t\t//\t|\trequire([\"dojo/_base/color\", \"dojo/dom-style\"], function(Color, domStyle){\n\t\t//\t|\t\tvar color = domStyle(\"someNode\", \"backgroundColor\");\n\t\t//\t|\t\tvar n = new Color(color);\n\t\t//\t|\t\t// adjust the color some\n\t\t//\t|\t\tn.r *= .5;\n\t\t//\t|\t\tconsole.log(n.toString()); // rgb(128, 255, 255);\n\t\t//\t|\t});\n\t\tif(color){ this.setColor(color); }\n\t};\n\n\t// FIXME:\n\t// there's got to be a more space-efficient way to encode or discover\n\t// these!! Use hex?\n\tColor.named = {\n\t\t// summary:\n\t\t//\t\tDictionary list of all CSS named colors, by name. Values are 3-item arrays with corresponding RG and B values.\n\t\t\"black\": [0,0,0],\n\t\t\"silver\": [192,192,192],\n\t\t\"gray\":\t [128,128,128],\n\t\t\"white\": [255,255,255],\n\t\t\"maroon\": [128,0,0],\n\t\t\"red\":\t [255,0,0],\n\t\t\"purple\": [128,0,128],\n\t\t\"fuchsia\":[255,0,255],\n\t\t\"green\": [0,128,0],\n\t\t\"lime\":\t [0,255,0],\n\t\t\"olive\": [128,128,0],\n\t\t\"yellow\": [255,255,0],\n\t\t\"navy\":\t [0,0,128],\n\t\t\"blue\":\t [0,0,255],\n\t\t\"teal\":\t [0,128,128],\n\t\t\"aqua\":\t [0,255,255],\n\t\t\"transparent\": config.transparentColor || [0,0,0,0]\n\t};\n\n\tlang.extend(Color, {\n\t\tr: 255, g: 255, b: 255, a: 1,\n\t\t_set: function(r, g, b, a){\n\t\t\tvar t = this; t.r = r; t.g = g; t.b = b; t.a = a;\n\t\t},\n\t\tsetColor: function(/*Array|String|Object*/ color){\n\t\t\t// summary:\n\t\t\t//\t\tTakes a named string, hex string, array of rgb or rgba values,\n\t\t\t//\t\tan object with r, g, b, and a properties, or another `Color` object\n\t\t\t//\t\tand sets this color instance to that value.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t\t//\t|\t\tvar c = new Color(); // no color\n\t\t\t//\t|\t\tc.setColor(\"#ededed\"); // greyish\n\t\t\t//\t|\t});\n\t\t\tif(lang.isString(color)){\n\t\t\t\tColor.fromString(color, this);\n\t\t\t}else if(lang.isArray(color)){\n\t\t\t\tColor.fromArray(color, this);\n\t\t\t}else{\n\t\t\t\tthis._set(color.r, color.g, color.b, color.a);\n\t\t\t\tif(!(color instanceof Color)){ this.sanitize(); }\n\t\t\t}\n\t\t\treturn this;\t// Color\n\t\t},\n\t\tsanitize: function(){\n\t\t\t// summary:\n\t\t\t//\t\tEnsures the object has correct attributes\n\t\t\t// description:\n\t\t\t//\t\tthe default implementation does nothing, include dojo.colors to\n\t\t\t//\t\taugment it with real checks\n\t\t\treturn this;\t// Color\n\t\t},\n\t\ttoRgb: function(){\n\t\t\t// summary:\n\t\t\t//\t\tReturns 3 component array of rgb values\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t\t//\t|\t\tvar c = new Color(\"#000000\");\n\t\t\t//\t|\t\tconsole.log(c.toRgb()); // [0,0,0]\n\t\t\t//\t|\t});\n\t\t\tvar t = this;\n\t\t\treturn [t.r, t.g, t.b]; // Array\n\t\t},\n\t\ttoRgba: function(){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a 4 component array of rgba values from the color\n\t\t\t//\t\trepresented by this object.\n\t\t\tvar t = this;\n\t\t\treturn [t.r, t.g, t.b, t.a];\t// Array\n\t\t},\n\t\ttoHex: function(){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a CSS color string in hexadecimal representation\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t\t//\t|\t\tconsole.log(new Color([0,0,0]).toHex()); // #000000\n\t\t\t//\t|\t});\n\t\t\tvar arr = ArrayUtil.map([\"r\", \"g\", \"b\"], function(x){\n\t\t\t\tvar s = this[x].toString(16);\n\t\t\t\treturn s.length < 2 ? \"0\" + s : s;\n\t\t\t}, this);\n\t\t\treturn \"#\" + arr.join(\"\");\t// String\n\t\t},\n\t\ttoCss: function(/*Boolean?*/ includeAlpha){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a css color string in rgb(a) representation\n\t\t\t// example:\n\t\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t\t//\t|\t\tvar c = new Color(\"#FFF\").toCss();\n\t\t\t//\t|\t\tconsole.log(c); // rgb('255','255','255')\n\t\t\t//\t|\t});\n\t\t\tvar t = this, rgb = t.r + \", \" + t.g + \", \" + t.b;\n\t\t\treturn (includeAlpha ? \"rgba(\" + rgb + \", \" + t.a : \"rgb(\" + rgb) + \")\";\t// String\n\t\t},\n\t\ttoString: function(){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a visual representation of the color\n\t\t\treturn this.toCss(true); // String\n\t\t}\n\t});\n\n\tColor.blendColors = dojo.blendColors = function(\n\t\t/*Color*/ start,\n\t\t/*Color*/ end,\n\t\t/*Number*/ weight,\n\t\t/*Color?*/ obj\n\t){\n\t\t// summary:\n\t\t//\t\tBlend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend,\n\t\t//\t\tcan reuse a previously allocated Color object for the result\n\t\tvar t = obj || new Color();\n\t\tt.r = Math.round(start.r + (end.r - start.r) * weight);\n\t\tt.g = Math.round(start.g + (end.g - start.g) * weight);\n\t\tt.b = Math.round(start.b + (end.b - start.b) * weight);\n\t\tt.a = start.a + (end.a - start.a) * weight;\n\t\treturn t.sanitize();\t// Color\n\t};\n\n\tColor.fromRgb = dojo.colorFromRgb = function(/*String*/ color, /*Color?*/ obj){\n\t\t// summary:\n\t\t//\t\tReturns a `Color` instance from a string of the form\n\t\t//\t\t\"rgb(...)\" or \"rgba(...)\". Optionally accepts a `Color`\n\t\t//\t\tobject to update with the parsed value and return instead of\n\t\t//\t\tcreating a new object.\n\t\t// returns:\n\t\t//\t\tA Color object. If obj is passed, it will be the return value.\n\t\tvar m = color.toLowerCase().match(/^rgba?\\(([\\s\\.,0-9]+)\\)/);\n\t\treturn m && Color.fromArray(m[1].split(/\\s*,\\s*/), obj);\t// Color\n\t};\n\n\tColor.fromHex = dojo.colorFromHex = function(/*String*/ color, /*Color?*/ obj){\n\t\t// summary:\n\t\t//\t\tConverts a hex string with a '#' prefix to a color object.\n\t\t//\t\tSupports 12-bit #rgb shorthand. Optionally accepts a\n\t\t//\t\t`Color` object to update with the parsed value.\n\t\t//\n\t\t// returns:\n\t\t//\t\tA Color object. If obj is passed, it will be the return value.\n\t\t//\n\t\t// example:\n\t\t//\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t//\t|\t\tvar thing = new Color().fromHex(\"#ededed\"); // grey, longhand\n\t\t//\t|\t\tvar thing2 = new Color().fromHex(\"#000\"); // black, shorthand\n\t\t//\t|\t});\n\t\tvar t = obj || new Color(),\n\t\t\tbits = (color.length == 4) ? 4 : 8,\n\t\t\tmask = (1 << bits) - 1;\n\t\tcolor = Number(\"0x\" + color.substr(1));\n\t\tif(isNaN(color)){\n\t\t\treturn null; // Color\n\t\t}\n\t\tArrayUtil.forEach([\"b\", \"g\", \"r\"], function(x){\n\t\t\tvar c = color & mask;\n\t\t\tcolor >>= bits;\n\t\t\tt[x] = bits == 4 ? 17 * c : c;\n\t\t});\n\t\tt.a = 1;\n\t\treturn t;\t// Color\n\t};\n\n\tColor.fromArray = dojo.colorFromArray = function(/*Array*/ a, /*Color?*/ obj){\n\t\t// summary:\n\t\t//\t\tBuilds a `Color` from a 3 or 4 element array, mapping each\n\t\t//\t\telement in sequence to the rgb(a) values of the color.\n\t\t// example:\n\t\t//\t\t|\trequire([\"dojo/_base/color\"], function(Color){\n\t\t//\t\t|\t\tvar myColor = new Color().fromArray([237,237,237,0.5]); // grey, 50% alpha\n\t\t//\t\t|\t});\n\t\t// returns:\n\t\t//\t\tA Color object. If obj is passed, it will be the return value.\n\t\tvar t = obj || new Color();\n\t\tt._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3]));\n\t\tif(isNaN(t.a)){ t.a = 1; }\n\t\treturn t.sanitize();\t// Color\n\t};\n\n\tColor.fromString = dojo.colorFromString = function(/*String*/ str, /*Color?*/ obj){\n\t\t// summary:\n\t\t//\t\tParses `str` for a color value. Accepts hex, rgb, and rgba\n\t\t//\t\tstyle color values.\n\t\t// description:\n\t\t//\t\tAcceptable input values for str may include arrays of any form\n\t\t//\t\taccepted by dojo.colorFromArray, hex strings such as \"#aaaaaa\", or\n\t\t//\t\trgb or rgba strings such as \"rgb(133, 200, 16)\" or \"rgba(10, 10,\n\t\t//\t\t10, 50)\"\n\t\t// returns:\n\t\t//\t\tA Color object. If obj is passed, it will be the return value.\n\t\tvar a = Color.named[str];\n\t\treturn a && Color.fromArray(a, obj) || Color.fromRgb(str, obj) || Color.fromHex(str, obj);\t// Color\n\t};\n\n\treturn Color;\n});\n","/**\n * @module ol/style/IconAnchorUnits\n */\n/**\n * Icon anchor units. One of 'fraction', 'pixels'.\n * @enum {string}\n */\nexport default {\n /**\n * Anchor is a fraction\n * @api\n */\n FRACTION: 'fraction',\n /**\n * Anchor is in pixels\n * @api\n */\n PIXELS: 'pixels',\n};\n//# sourceMappingURL=IconAnchorUnits.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/ImageBase\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport { abstract } from './util.js';\n/**\n * @abstract\n */\nvar ImageBase = /** @class */ (function (_super) {\n __extends(ImageBase, _super);\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|undefined} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./ImageState.js\").default} state State.\n */\n function ImageBase(extent, resolution, pixelRatio, state) {\n var _this = _super.call(this) || this;\n /**\n * @protected\n * @type {import(\"./extent.js\").Extent}\n */\n _this.extent = extent;\n /**\n * @private\n * @type {number}\n */\n _this.pixelRatio_ = pixelRatio;\n /**\n * @protected\n * @type {number|undefined}\n */\n _this.resolution = resolution;\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n _this.state = state;\n return _this;\n }\n /**\n * @protected\n */\n ImageBase.prototype.changed = function () {\n this.dispatchEvent(EventType.CHANGE);\n };\n /**\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n ImageBase.prototype.getExtent = function () {\n return this.extent;\n };\n /**\n * @abstract\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n */\n ImageBase.prototype.getImage = function () {\n return abstract();\n };\n /**\n * @return {number} PixelRatio.\n */\n ImageBase.prototype.getPixelRatio = function () {\n return this.pixelRatio_;\n };\n /**\n * @return {number} Resolution.\n */\n ImageBase.prototype.getResolution = function () {\n return /** @type {number} */ (this.resolution);\n };\n /**\n * @return {import(\"./ImageState.js\").default} State.\n */\n ImageBase.prototype.getState = function () {\n return this.state;\n };\n /**\n * Load not yet loaded URI.\n * @abstract\n */\n ImageBase.prototype.load = function () {\n abstract();\n };\n return ImageBase;\n}(EventTarget));\nexport default ImageBase;\n//# sourceMappingURL=ImageBase.js.map","/**\n * @module ol/style/Image\n */\nimport { abstract } from '../util.js';\nimport { toSize } from '../size.js';\n/**\n * @typedef {Object} Options\n * @property {number} opacity\n * @property {boolean} rotateWithView\n * @property {number} rotation\n * @property {number|import(\"../size.js\").Size} scale\n * @property {Array<number>} displacement\n */\n/**\n * @classdesc\n * A base class used for creating subclasses and not instantiated in\n * apps. Base class for {@link module:ol/style/Icon~Icon}, {@link module:ol/style/Circle~CircleStyle} and\n * {@link module:ol/style/RegularShape~RegularShape}.\n * @abstract\n * @api\n */\nvar ImageStyle = /** @class */ (function () {\n /**\n * @param {Options} options Options.\n */\n function ImageStyle(options) {\n /**\n * @private\n * @type {number}\n */\n this.opacity_ = options.opacity;\n /**\n * @private\n * @type {boolean}\n */\n this.rotateWithView_ = options.rotateWithView;\n /**\n * @private\n * @type {number}\n */\n this.rotation_ = options.rotation;\n /**\n * @private\n * @type {number|import(\"../size.js\").Size}\n */\n this.scale_ = options.scale;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.scaleArray_ = toSize(options.scale);\n /**\n * @private\n * @type {Array<number>}\n */\n this.displacement_ = options.displacement;\n }\n /**\n * Clones the style.\n * @return {ImageStyle} The cloned style.\n * @api\n */\n ImageStyle.prototype.clone = function () {\n var scale = this.getScale();\n return new ImageStyle({\n opacity: this.getOpacity(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n displacement: this.getDisplacement().slice(),\n });\n };\n /**\n * Get the symbolizer opacity.\n * @return {number} Opacity.\n * @api\n */\n ImageStyle.prototype.getOpacity = function () {\n return this.opacity_;\n };\n /**\n * Determine whether the symbolizer rotates with the map.\n * @return {boolean} Rotate with map.\n * @api\n */\n ImageStyle.prototype.getRotateWithView = function () {\n return this.rotateWithView_;\n };\n /**\n * Get the symoblizer rotation.\n * @return {number} Rotation.\n * @api\n */\n ImageStyle.prototype.getRotation = function () {\n return this.rotation_;\n };\n /**\n * Get the symbolizer scale.\n * @return {number|import(\"../size.js\").Size} Scale.\n * @api\n */\n ImageStyle.prototype.getScale = function () {\n return this.scale_;\n };\n /**\n * Get the symbolizer scale array.\n * @return {import(\"../size.js\").Size} Scale array.\n */\n ImageStyle.prototype.getScaleArray = function () {\n return this.scaleArray_;\n };\n /**\n * Get the displacement of the shape\n * @return {Array<number>} Shape's center displacement\n * @api\n */\n ImageStyle.prototype.getDisplacement = function () {\n return this.displacement_;\n };\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @abstract\n * @return {Array<number>} Anchor.\n */\n ImageStyle.prototype.getAnchor = function () {\n return abstract();\n };\n /**\n * Get the image element for the symbolizer.\n * @abstract\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n */\n ImageStyle.prototype.getImage = function (pixelRatio) {\n return abstract();\n };\n /**\n * @abstract\n * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n */\n ImageStyle.prototype.getHitDetectionImage = function () {\n return abstract();\n };\n /*\n * Get the image pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * */\n ImageStyle.prototype.getPixelRatio = function (pixelRatio) {\n return 1;\n };\n /**\n * @abstract\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n ImageStyle.prototype.getImageState = function () {\n return abstract();\n };\n /**\n * @abstract\n * @return {import(\"../size.js\").Size} Image size.\n */\n ImageStyle.prototype.getImageSize = function () {\n return abstract();\n };\n /**\n * @abstract\n * @return {import(\"../size.js\").Size} Size of the hit-detection image.\n */\n ImageStyle.prototype.getHitDetectionImageSize = function () {\n return abstract();\n };\n /**\n * Get the origin of the symbolizer.\n * @abstract\n * @return {Array<number>} Origin.\n */\n ImageStyle.prototype.getOrigin = function () {\n return abstract();\n };\n /**\n * Get the size of the symbolizer (in pixels).\n * @abstract\n * @return {import(\"../size.js\").Size} Size.\n */\n ImageStyle.prototype.getSize = function () {\n return abstract();\n };\n /**\n * Set the opacity.\n *\n * @param {number} opacity Opacity.\n * @api\n */\n ImageStyle.prototype.setOpacity = function (opacity) {\n this.opacity_ = opacity;\n };\n /**\n * Set whether to rotate the style with the view.\n *\n * @param {boolean} rotateWithView Rotate with map.\n * @api\n */\n ImageStyle.prototype.setRotateWithView = function (rotateWithView) {\n this.rotateWithView_ = rotateWithView;\n };\n /**\n * Set the rotation.\n *\n * @param {number} rotation Rotation.\n * @api\n */\n ImageStyle.prototype.setRotation = function (rotation) {\n this.rotation_ = rotation;\n };\n /**\n * Set the scale.\n *\n * @param {number|import(\"../size.js\").Size} scale Scale.\n * @api\n */\n ImageStyle.prototype.setScale = function (scale) {\n this.scale_ = scale;\n this.scaleArray_ = toSize(scale);\n };\n /**\n * @abstract\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n ImageStyle.prototype.listenImageChange = function (listener) {\n abstract();\n };\n /**\n * Load not yet loaded URI.\n * @abstract\n */\n ImageStyle.prototype.load = function () {\n abstract();\n };\n /**\n * @abstract\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n ImageStyle.prototype.unlistenImageChange = function (listener) {\n abstract();\n };\n return ImageStyle;\n}());\nexport default ImageStyle;\n//# sourceMappingURL=Image.js.map","/**\n * @module ol/style/TextPlacement\n */\n/**\n * Text placement. One of `'point'`, `'line'`. Default is `'point'`. Note that\n * `'line'` requires the underlying geometry to be a {@link module:ol/geom/LineString~LineString},\n * {@link module:ol/geom/Polygon~Polygon}, {@link module:ol/geom/MultiLineString~MultiLineString} or\n * {@link module:ol/geom/MultiPolygon~MultiPolygon}.\n * @enum {string}\n */\nexport default {\n POINT: 'point',\n LINE: 'line',\n};\n//# sourceMappingURL=TextPlacement.js.map","/**\n * @module ol/geom/flat/length\n */\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Length.\n */\nexport function lineStringLength(flatCoordinates, offset, end, stride) {\n var x1 = flatCoordinates[offset];\n var y1 = flatCoordinates[offset + 1];\n var length = 0;\n for (var i = offset + stride; i < end; i += stride) {\n var x2 = flatCoordinates[i];\n var y2 = flatCoordinates[i + 1];\n length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n x1 = x2;\n y1 = y2;\n }\n return length;\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Perimeter.\n */\nexport function linearRingLength(flatCoordinates, offset, end, stride) {\n var perimeter = lineStringLength(flatCoordinates, offset, end, stride);\n var dx = flatCoordinates[end - stride] - flatCoordinates[offset];\n var dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1];\n perimeter += Math.sqrt(dx * dx + dy * dy);\n return perimeter;\n}\n//# sourceMappingURL=length.js.map","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){\"use strict\";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d<x;){for(i(n,d,x),d++,x--;h(n[d],p)<0;)d++;for(;h(n[x],p)>0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return t<i?-1:t>i?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r<i.length;r++)if(n(t,i[r]))return r;return-1}function a(t,i){h(t,0,t.children.length,i,t)}function h(t,i,n,r,e){e||(e=p(null)),e.minX=1/0,e.minY=1/0,e.maxX=-1/0,e.maxY=-1/0;for(var a=i;a<n;a++){var h=t.children[a];o(e,t.leaf?r(h):h)}return e}function o(t,i){return t.minX=Math.min(t.minX,i.minX),t.minY=Math.min(t.minY,i.minY),t.maxX=Math.max(t.maxX,i.maxX),t.maxY=Math.max(t.maxY,i.maxY),t}function s(t,i){return t.minX-i.minX}function l(t,i){return t.minY-i.minY}function f(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function u(t){return t.maxX-t.minX+(t.maxY-t.minY)}function m(t,i){return t.minX<=i.minX&&t.minY<=i.minY&&i.maxX<=t.maxX&&i.maxY<=t.maxY}function c(t,i){return i.minX<=t.maxX&&i.minY<=t.maxY&&i.maxX>=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a<i.children.length;a++){var h=i.children[a],o=i.leaf?r(h):h;c(t,o)&&(i.leaf?n.push(h):m(t,o)?this._all(h,n):e.push(h))}i=e.pop()}return n},r.prototype.collides=function(t){var i=this.data;if(!c(t,i))return!1;for(var n=[];i;){for(var r=0;r<i.children.length;r++){var e=i.children[r],a=i.leaf?this.toBBox(e):e;if(c(t,a)){if(i.leaf||m(t,a))return!0;n.push(e)}}i=n.pop()}return!1},r.prototype.load=function(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(var i=0;i<t.length;i++)this.insert(t[i]);return this}var n=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){var r=this.data;this.data=n,n=r}this._insert(n,this.data.height-n.height-1,!0)}else this.data=n;return this},r.prototype.insert=function(t){return t&&this._insert(t,this.data.height-1),this},r.prototype.clear=function(){return this.data=p([]),this},r.prototype.remove=function(t,i){if(!t)return this;for(var n,r,a,h=this.data,o=this.toBBox(t),s=[],l=[];h||s.length;){if(h||(h=s.pop(),r=s[s.length-1],n=l.pop(),a=!0),h.leaf){var f=e(t,h.children,i);if(-1!==f)return h.children.splice(f,1),s.push(h),this._condense(s),this}a||h.leaf||!m(h,o)?r?(n++,h=r.children[n],a=!1):h=null:(s.push(h),l.push(n),n=0,r=h,h=h.children[0])}return this},r.prototype.toBBox=function(t){return t},r.prototype.compareMinX=function(t,i){return t.minX-i.minX},r.prototype.compareMinY=function(t,i){return t.minY-i.minY},r.prototype.toJSON=function(){return this.data},r.prototype.fromJSON=function(t){return this.data=t,this},r.prototype._all=function(t,i){for(var n=[];t;)t.leaf?i.push.apply(i,t.children):n.push.apply(n,t.children),t=n.pop();return i},r.prototype._build=function(t,i,n,r){var e,h=n-i+1,o=this._maxEntries;if(h<=o)return a(e=p(t.slice(i,n+1)),this.toBBox),e;r||(r=Math.ceil(Math.log(h)/Math.log(o)),o=Math.ceil(h/Math.pow(o,r-1))),(e=p([])).leaf=!1,e.height=r;var s=Math.ceil(h/o),l=s*Math.ceil(Math.sqrt(o));d(t,i,n,l,this.compareMinX);for(var f=i;f<=n;f+=l){var u=Math.min(f+l-1,n);d(t,f,u,s,this.compareMinY);for(var m=f;m<=u;m+=s){var c=Math.min(m+s-1,u);e.children.push(this._build(t,m,c,r-1))}}return a(e,this.toBBox),e},r.prototype._chooseSubtree=function(t,i,n,r){for(;r.push(i),!i.leaf&&r.length-1!==n;){for(var e=1/0,a=1/0,h=void 0,o=0;o<i.children.length;o++){var s=i.children[o],l=f(s),u=(m=t,c=s,(Math.max(c.maxX,m.maxX)-Math.min(c.minX,m.minX))*(Math.max(c.maxY,m.maxY)-Math.min(c.minY,m.minY))-l);u<a?(a=u,e=l<e?l:e,h=s):u===a&&l<e&&(e=l,h=s)}i=h||i.children[0]}var m,c;return i},r.prototype._insert=function(t,i,n){var r=n?t:this.toBBox(t),e=[],a=this._chooseSubtree(r,this.data,i,e);for(a.children.push(t),o(a,r);i>=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v<m?(m=v,r=p,c=M<c?M:c):v===m&&M<c&&(c=M,r=p)}return r||n-i},r.prototype._chooseSplitAxis=function(t,i,n){var r=t.leaf?this.compareMinX:s,e=t.leaf?this.compareMinY:l;this._allDistMargin(t,i,n,r)<this._allDistMargin(t,i,n,e)&&t.children.sort(r)},r.prototype._allDistMargin=function(t,i,n,r){t.children.sort(r);for(var e=this.toBBox,a=h(t,0,i,e),s=h(t,n-i,n,e),l=u(a)+u(s),f=i;f<n-i;f++){var m=t.children[f];o(a,t.leaf?e(m):m),l+=u(a)}for(var c=n-i-1;c>=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});\n","/**\n * @module ol/format/FormatType\n */\n/**\n * @enum {string}\n */\nexport default {\n ARRAY_BUFFER: 'arraybuffer',\n JSON: 'json',\n TEXT: 'text',\n XML: 'xml',\n};\n//# sourceMappingURL=FormatType.js.map","/**\n * @module ol/TileRange\n */\n/**\n * A representation of a contiguous block of tiles. A tile range is specified\n * by its min/max tile coordinates and is inclusive of coordinates.\n */\nvar TileRange = /** @class */ (function () {\n /**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n */\n function TileRange(minX, maxX, minY, maxY) {\n /**\n * @type {number}\n */\n this.minX = minX;\n /**\n * @type {number}\n */\n this.maxX = maxX;\n /**\n * @type {number}\n */\n this.minY = minY;\n /**\n * @type {number}\n */\n this.maxY = maxY;\n }\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @return {boolean} Contains tile coordinate.\n */\n TileRange.prototype.contains = function (tileCoord) {\n return this.containsXY(tileCoord[1], tileCoord[2]);\n };\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Contains.\n */\n TileRange.prototype.containsTileRange = function (tileRange) {\n return (this.minX <= tileRange.minX &&\n tileRange.maxX <= this.maxX &&\n this.minY <= tileRange.minY &&\n tileRange.maxY <= this.maxY);\n };\n /**\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @return {boolean} Contains coordinate.\n */\n TileRange.prototype.containsXY = function (x, y) {\n return this.minX <= x && x <= this.maxX && this.minY <= y && y <= this.maxY;\n };\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Equals.\n */\n TileRange.prototype.equals = function (tileRange) {\n return (this.minX == tileRange.minX &&\n this.minY == tileRange.minY &&\n this.maxX == tileRange.maxX &&\n this.maxY == tileRange.maxY);\n };\n /**\n * @param {TileRange} tileRange Tile range.\n */\n TileRange.prototype.extend = function (tileRange) {\n if (tileRange.minX < this.minX) {\n this.minX = tileRange.minX;\n }\n if (tileRange.maxX > this.maxX) {\n this.maxX = tileRange.maxX;\n }\n if (tileRange.minY < this.minY) {\n this.minY = tileRange.minY;\n }\n if (tileRange.maxY > this.maxY) {\n this.maxY = tileRange.maxY;\n }\n };\n /**\n * @return {number} Height.\n */\n TileRange.prototype.getHeight = function () {\n return this.maxY - this.minY + 1;\n };\n /**\n * @return {import(\"./size.js\").Size} Size.\n */\n TileRange.prototype.getSize = function () {\n return [this.getWidth(), this.getHeight()];\n };\n /**\n * @return {number} Width.\n */\n TileRange.prototype.getWidth = function () {\n return this.maxX - this.minX + 1;\n };\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Intersects.\n */\n TileRange.prototype.intersects = function (tileRange) {\n return (this.minX <= tileRange.maxX &&\n this.maxX >= tileRange.minX &&\n this.minY <= tileRange.maxY &&\n this.maxY >= tileRange.minY);\n };\n return TileRange;\n}());\n/**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n * @param {TileRange=} tileRange TileRange.\n * @return {TileRange} Tile range.\n */\nexport function createOrUpdate(minX, maxX, minY, maxY, tileRange) {\n if (tileRange !== undefined) {\n tileRange.minX = minX;\n tileRange.maxX = maxX;\n tileRange.minY = minY;\n tileRange.maxY = maxY;\n return tileRange;\n }\n else {\n return new TileRange(minX, maxX, minY, maxY);\n }\n}\nexport default TileRange;\n//# sourceMappingURL=TileRange.js.map","/**\n * @module ol/reproj\n */\nimport { IMAGE_SMOOTHING_DISABLED } from './source/common.js';\nimport { assign } from './obj.js';\nimport { containsCoordinate, createEmpty, extend, forEachCorner, getCenter, getHeight, getTopLeft, getWidth, } from './extent.js';\nimport { createCanvasContext2D } from './dom.js';\nimport { getPointResolution, transform } from './proj.js';\nimport { solveLinearSystem } from './math.js';\nvar brokenDiagonalRendering_;\n/**\n * This draws a small triangle into a canvas by setting the triangle as the clip region\n * and then drawing a (too large) rectangle\n *\n * @param {CanvasRenderingContext2D} ctx The context in which to draw the triangle\n * @param {number} u1 The x-coordinate of the second point. The first point is 0,0.\n * @param {number} v1 The y-coordinate of the second point.\n * @param {number} u2 The x-coordinate of the third point.\n * @param {number} v2 The y-coordinate of the third point.\n */\nfunction drawTestTriangle(ctx, u1, v1, u2, v2) {\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(u1, v1);\n ctx.lineTo(u2, v2);\n ctx.closePath();\n ctx.save();\n ctx.clip();\n ctx.fillRect(0, 0, Math.max(u1, u2) + 1, Math.max(v1, v2));\n ctx.restore();\n}\n/**\n * Given the data from getImageData, see if the right values appear at the provided offset.\n * Returns true if either the color or transparency is off\n *\n * @param {Uint8ClampedArray} data The data returned from getImageData\n * @param {number} offset The pixel offset from the start of data.\n * @return {boolean} true if the diagonal rendering is broken\n */\nfunction verifyBrokenDiagonalRendering(data, offset) {\n // the values ought to be close to the rgba(210, 0, 0, 0.75)\n return (Math.abs(data[offset * 4] - 210) > 2 ||\n Math.abs(data[offset * 4 + 3] - 0.75 * 255) > 2);\n}\n/**\n * Determines if the current browser configuration can render triangular clip regions correctly.\n * This value is cached so the function is only expensive the first time called.\n * Firefox on Windows (as of now) does not if HWA is enabled. See https://bugzilla.mozilla.org/show_bug.cgi?id=1606976\n * IE also doesn't. Chrome works, and everything seems to work on OSX and Android. This function caches the\n * result. I suppose that it is conceivably possible that a browser might flip modes while the app is\n * running, but lets hope not.\n *\n * @return {boolean} true if the Diagonal Rendering is broken.\n */\nfunction isBrokenDiagonalRendering() {\n if (brokenDiagonalRendering_ === undefined) {\n var ctx = document.createElement('canvas').getContext('2d');\n ctx.globalCompositeOperation = 'lighter';\n ctx.fillStyle = 'rgba(210, 0, 0, 0.75)';\n drawTestTriangle(ctx, 4, 5, 4, 0);\n drawTestTriangle(ctx, 4, 5, 0, 5);\n var data = ctx.getImageData(0, 0, 3, 3).data;\n brokenDiagonalRendering_ =\n verifyBrokenDiagonalRendering(data, 0) ||\n verifyBrokenDiagonalRendering(data, 4) ||\n verifyBrokenDiagonalRendering(data, 8);\n }\n return brokenDiagonalRendering_;\n}\n/**\n * Calculates ideal resolution to use from the source in order to achieve\n * pixel mapping as close as possible to 1:1 during reprojection.\n * The resolution is calculated regardless of what resolutions\n * are actually available in the dataset (TileGrid, Image, ...).\n *\n * @param {import(\"./proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"./proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"./coordinate.js\").Coordinate} targetCenter Target center.\n * @param {number} targetResolution Target resolution.\n * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.\n */\nexport function calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution) {\n var sourceCenter = transform(targetCenter, targetProj, sourceProj);\n // calculate the ideal resolution of the source data\n var sourceResolution = getPointResolution(targetProj, targetResolution, targetCenter);\n var targetMetersPerUnit = targetProj.getMetersPerUnit();\n if (targetMetersPerUnit !== undefined) {\n sourceResolution *= targetMetersPerUnit;\n }\n var sourceMetersPerUnit = sourceProj.getMetersPerUnit();\n if (sourceMetersPerUnit !== undefined) {\n sourceResolution /= sourceMetersPerUnit;\n }\n // Based on the projection properties, the point resolution at the specified\n // coordinates may be slightly different. We need to reverse-compensate this\n // in order to achieve optimal results.\n var sourceExtent = sourceProj.getExtent();\n if (!sourceExtent || containsCoordinate(sourceExtent, sourceCenter)) {\n var compensationFactor = getPointResolution(sourceProj, sourceResolution, sourceCenter) /\n sourceResolution;\n if (isFinite(compensationFactor) && compensationFactor > 0) {\n sourceResolution /= compensationFactor;\n }\n }\n return sourceResolution;\n}\n/**\n * Calculates ideal resolution to use from the source in order to achieve\n * pixel mapping as close as possible to 1:1 during reprojection.\n * The resolution is calculated regardless of what resolutions\n * are actually available in the dataset (TileGrid, Image, ...).\n *\n * @param {import(\"./proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"./proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"./extent.js\").Extent} targetExtent Target extent\n * @param {number} targetResolution Target resolution.\n * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.\n */\nexport function calculateSourceExtentResolution(sourceProj, targetProj, targetExtent, targetResolution) {\n var targetCenter = getCenter(targetExtent);\n var sourceResolution = calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution);\n if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n forEachCorner(targetExtent, function (corner) {\n sourceResolution = calculateSourceResolution(sourceProj, targetProj, corner, targetResolution);\n return isFinite(sourceResolution) && sourceResolution > 0;\n });\n }\n return sourceResolution;\n}\n/**\n * Renders the source data into new canvas based on the triangulation.\n *\n * @param {number} width Width of the canvas.\n * @param {number} height Height of the canvas.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} sourceResolution Source resolution.\n * @param {import(\"./extent.js\").Extent} sourceExtent Extent of the data source.\n * @param {number} targetResolution Target resolution.\n * @param {import(\"./extent.js\").Extent} targetExtent Target extent.\n * @param {import(\"./reproj/Triangulation.js\").default} triangulation\n * Calculated triangulation.\n * @param {Array<{extent: import(\"./extent.js\").Extent,\n * image: (HTMLCanvasElement|HTMLImageElement|HTMLVideoElement)}>} sources\n * Array of sources.\n * @param {number} gutter Gutter of the sources.\n * @param {boolean=} opt_renderEdges Render reprojection edges.\n * @param {object=} opt_contextOptions Properties to set on the canvas context.\n * @return {HTMLCanvasElement} Canvas with reprojected data.\n */\nexport function render(width, height, pixelRatio, sourceResolution, sourceExtent, targetResolution, targetExtent, triangulation, sources, gutter, opt_renderEdges, opt_contextOptions) {\n var context = createCanvasContext2D(Math.round(pixelRatio * width), Math.round(pixelRatio * height));\n assign(context, opt_contextOptions);\n if (sources.length === 0) {\n return context.canvas;\n }\n context.scale(pixelRatio, pixelRatio);\n function pixelRound(value) {\n return Math.round(value * pixelRatio) / pixelRatio;\n }\n context.globalCompositeOperation = 'lighter';\n var sourceDataExtent = createEmpty();\n sources.forEach(function (src, i, arr) {\n extend(sourceDataExtent, src.extent);\n });\n var canvasWidthInUnits = getWidth(sourceDataExtent);\n var canvasHeightInUnits = getHeight(sourceDataExtent);\n var stitchContext = createCanvasContext2D(Math.round((pixelRatio * canvasWidthInUnits) / sourceResolution), Math.round((pixelRatio * canvasHeightInUnits) / sourceResolution));\n assign(stitchContext, opt_contextOptions);\n var stitchScale = pixelRatio / sourceResolution;\n sources.forEach(function (src, i, arr) {\n var xPos = src.extent[0] - sourceDataExtent[0];\n var yPos = -(src.extent[3] - sourceDataExtent[3]);\n var srcWidth = getWidth(src.extent);\n var srcHeight = getHeight(src.extent);\n // This test should never fail -- but it does. Need to find a fix the upstream condition\n if (src.image.width > 0 && src.image.height > 0) {\n stitchContext.drawImage(src.image, gutter, gutter, src.image.width - 2 * gutter, src.image.height - 2 * gutter, xPos * stitchScale, yPos * stitchScale, srcWidth * stitchScale, srcHeight * stitchScale);\n }\n });\n var targetTopLeft = getTopLeft(targetExtent);\n triangulation.getTriangles().forEach(function (triangle, i, arr) {\n /* Calculate affine transform (src -> dst)\n * Resulting matrix can be used to transform coordinate\n * from `sourceProjection` to destination pixels.\n *\n * To optimize number of context calls and increase numerical stability,\n * we also do the following operations:\n * trans(-topLeftExtentCorner), scale(1 / targetResolution), scale(1, -1)\n * here before solving the linear system so [ui, vi] are pixel coordinates.\n *\n * Src points: xi, yi\n * Dst points: ui, vi\n * Affine coefficients: aij\n *\n * | x0 y0 1 0 0 0 | |a00| |u0|\n * | x1 y1 1 0 0 0 | |a01| |u1|\n * | x2 y2 1 0 0 0 | x |a02| = |u2|\n * | 0 0 0 x0 y0 1 | |a10| |v0|\n * | 0 0 0 x1 y1 1 | |a11| |v1|\n * | 0 0 0 x2 y2 1 | |a12| |v2|\n */\n var source = triangle.source;\n var target = triangle.target;\n var x0 = source[0][0], y0 = source[0][1];\n var x1 = source[1][0], y1 = source[1][1];\n var x2 = source[2][0], y2 = source[2][1];\n // Make sure that everything is on pixel boundaries\n var u0 = pixelRound((target[0][0] - targetTopLeft[0]) / targetResolution);\n var v0 = pixelRound(-(target[0][1] - targetTopLeft[1]) / targetResolution);\n var u1 = pixelRound((target[1][0] - targetTopLeft[0]) / targetResolution);\n var v1 = pixelRound(-(target[1][1] - targetTopLeft[1]) / targetResolution);\n var u2 = pixelRound((target[2][0] - targetTopLeft[0]) / targetResolution);\n var v2 = pixelRound(-(target[2][1] - targetTopLeft[1]) / targetResolution);\n // Shift all the source points to improve numerical stability\n // of all the subsequent calculations. The [x0, y0] is used here.\n // This is also used to simplify the linear system.\n var sourceNumericalShiftX = x0;\n var sourceNumericalShiftY = y0;\n x0 = 0;\n y0 = 0;\n x1 -= sourceNumericalShiftX;\n y1 -= sourceNumericalShiftY;\n x2 -= sourceNumericalShiftX;\n y2 -= sourceNumericalShiftY;\n var augmentedMatrix = [\n [x1, y1, 0, 0, u1 - u0],\n [x2, y2, 0, 0, u2 - u0],\n [0, 0, x1, y1, v1 - v0],\n [0, 0, x2, y2, v2 - v0],\n ];\n var affineCoefs = solveLinearSystem(augmentedMatrix);\n if (!affineCoefs) {\n return;\n }\n context.save();\n context.beginPath();\n if (isBrokenDiagonalRendering() ||\n opt_contextOptions === IMAGE_SMOOTHING_DISABLED) {\n // Make sure that all lines are horizontal or vertical\n context.moveTo(u1, v1);\n // This is the diagonal line. Do it in 4 steps\n var steps = 4;\n var ud = u0 - u1;\n var vd = v0 - v1;\n for (var step = 0; step < steps; step++) {\n // Go horizontally\n context.lineTo(u1 + pixelRound(((step + 1) * ud) / steps), v1 + pixelRound((step * vd) / (steps - 1)));\n // Go vertically\n if (step != steps - 1) {\n context.lineTo(u1 + pixelRound(((step + 1) * ud) / steps), v1 + pixelRound(((step + 1) * vd) / (steps - 1)));\n }\n }\n // We are almost at u0r, v0r\n context.lineTo(u2, v2);\n }\n else {\n context.moveTo(u1, v1);\n context.lineTo(u0, v0);\n context.lineTo(u2, v2);\n }\n context.clip();\n context.transform(affineCoefs[0], affineCoefs[2], affineCoefs[1], affineCoefs[3], u0, v0);\n context.translate(sourceDataExtent[0] - sourceNumericalShiftX, sourceDataExtent[3] - sourceNumericalShiftY);\n context.scale(sourceResolution / pixelRatio, -sourceResolution / pixelRatio);\n context.drawImage(stitchContext.canvas, 0, 0);\n context.restore();\n });\n if (opt_renderEdges) {\n context.save();\n context.globalCompositeOperation = 'source-over';\n context.strokeStyle = 'black';\n context.lineWidth = 1;\n triangulation.getTriangles().forEach(function (triangle, i, arr) {\n var target = triangle.target;\n var u0 = (target[0][0] - targetTopLeft[0]) / targetResolution;\n var v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;\n var u1 = (target[1][0] - targetTopLeft[0]) / targetResolution;\n var v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;\n var u2 = (target[2][0] - targetTopLeft[0]) / targetResolution;\n var v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;\n context.beginPath();\n context.moveTo(u1, v1);\n context.lineTo(u0, v0);\n context.lineTo(u2, v2);\n context.closePath();\n context.stroke();\n });\n context.restore();\n }\n return context.canvas;\n}\n//# sourceMappingURL=reproj.js.map","/**\n * @module ol/reproj/Triangulation\n */\nimport { boundingExtent, createEmpty, extendCoordinate, getArea, getBottomLeft, getBottomRight, getTopLeft, getTopRight, getWidth, intersects, } from '../extent.js';\nimport { getTransform } from '../proj.js';\nimport { log2, modulo } from '../math.js';\n/**\n * Single triangle; consists of 3 source points and 3 target points.\n * @typedef {Object} Triangle\n * @property {Array<import(\"../coordinate.js\").Coordinate>} source\n * @property {Array<import(\"../coordinate.js\").Coordinate>} target\n */\n/**\n * Maximum number of subdivision steps during raster reprojection triangulation.\n * Prevents high memory usage and large number of proj4 calls (for certain\n * transformations and areas). At most `2*(2^this)` triangles are created for\n * each triangulated extent (tile/image).\n * @type {number}\n */\nvar MAX_SUBDIVISION = 10;\n/**\n * Maximum allowed size of triangle relative to world width. When transforming\n * corners of world extent between certain projections, the resulting\n * triangulation seems to have zero error and no subdivision is performed. If\n * the triangle width is more than this (relative to world width; 0-1),\n * subdivison is forced (up to `MAX_SUBDIVISION`). Default is `0.25`.\n * @type {number}\n */\nvar MAX_TRIANGLE_WIDTH = 0.25;\n/**\n * @classdesc\n * Class containing triangulation of the given target extent.\n * Used for determining source data and the reprojection itself.\n */\nvar Triangulation = /** @class */ (function () {\n /**\n * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"../extent.js\").Extent} targetExtent Target extent to triangulate.\n * @param {import(\"../extent.js\").Extent} maxSourceExtent Maximal source extent that can be used.\n * @param {number} errorThreshold Acceptable error (in source units).\n * @param {?number} opt_destinationResolution The (optional) resolution of the destination.\n */\n function Triangulation(sourceProj, targetProj, targetExtent, maxSourceExtent, errorThreshold, opt_destinationResolution) {\n /**\n * @type {import(\"../proj/Projection.js\").default}\n * @private\n */\n this.sourceProj_ = sourceProj;\n /**\n * @type {import(\"../proj/Projection.js\").default}\n * @private\n */\n this.targetProj_ = targetProj;\n /** @type {!Object<string, import(\"../coordinate.js\").Coordinate>} */\n var transformInvCache = {};\n var transformInv = getTransform(this.targetProj_, this.sourceProj_);\n /**\n * @param {import(\"../coordinate.js\").Coordinate} c A coordinate.\n * @return {import(\"../coordinate.js\").Coordinate} Transformed coordinate.\n * @private\n */\n this.transformInv_ = function (c) {\n var key = c[0] + '/' + c[1];\n if (!transformInvCache[key]) {\n transformInvCache[key] = transformInv(c);\n }\n return transformInvCache[key];\n };\n /**\n * @type {import(\"../extent.js\").Extent}\n * @private\n */\n this.maxSourceExtent_ = maxSourceExtent;\n /**\n * @type {number}\n * @private\n */\n this.errorThresholdSquared_ = errorThreshold * errorThreshold;\n /**\n * @type {Array<Triangle>}\n * @private\n */\n this.triangles_ = [];\n /**\n * Indicates that the triangulation crosses edge of the source projection.\n * @type {boolean}\n * @private\n */\n this.wrapsXInSource_ = false;\n /**\n * @type {boolean}\n * @private\n */\n this.canWrapXInSource_ =\n this.sourceProj_.canWrapX() &&\n !!maxSourceExtent &&\n !!this.sourceProj_.getExtent() &&\n getWidth(maxSourceExtent) == getWidth(this.sourceProj_.getExtent());\n /**\n * @type {?number}\n * @private\n */\n this.sourceWorldWidth_ = this.sourceProj_.getExtent()\n ? getWidth(this.sourceProj_.getExtent())\n : null;\n /**\n * @type {?number}\n * @private\n */\n this.targetWorldWidth_ = this.targetProj_.getExtent()\n ? getWidth(this.targetProj_.getExtent())\n : null;\n var destinationTopLeft = getTopLeft(targetExtent);\n var destinationTopRight = getTopRight(targetExtent);\n var destinationBottomRight = getBottomRight(targetExtent);\n var destinationBottomLeft = getBottomLeft(targetExtent);\n var sourceTopLeft = this.transformInv_(destinationTopLeft);\n var sourceTopRight = this.transformInv_(destinationTopRight);\n var sourceBottomRight = this.transformInv_(destinationBottomRight);\n var sourceBottomLeft = this.transformInv_(destinationBottomLeft);\n /*\n * The maxSubdivision controls how many splittings of the target area can\n * be done. The idea here is to do a linear mapping of the target areas\n * but the actual overal reprojection (can be) extremely non-linear. The\n * default value of MAX_SUBDIVISION was chosen based on mapping a 256x256\n * tile size. However this function is also called to remap canvas rendered\n * layers which can be much larger. This calculation increases the maxSubdivision\n * value by the right factor so that each 256x256 pixel area has\n * MAX_SUBDIVISION divisions.\n */\n var maxSubdivision = MAX_SUBDIVISION +\n (opt_destinationResolution\n ? Math.max(0, Math.ceil(log2(getArea(targetExtent) /\n (opt_destinationResolution *\n opt_destinationResolution *\n 256 *\n 256))))\n : 0);\n this.addQuad_(destinationTopLeft, destinationTopRight, destinationBottomRight, destinationBottomLeft, sourceTopLeft, sourceTopRight, sourceBottomRight, sourceBottomLeft, maxSubdivision);\n if (this.wrapsXInSource_) {\n var leftBound_1 = Infinity;\n this.triangles_.forEach(function (triangle, i, arr) {\n leftBound_1 = Math.min(leftBound_1, triangle.source[0][0], triangle.source[1][0], triangle.source[2][0]);\n });\n // Shift triangles to be as close to `leftBound` as possible\n // (if the distance is more than `worldWidth / 2` it can be closer.\n this.triangles_.forEach(function (triangle) {\n if (Math.max(triangle.source[0][0], triangle.source[1][0], triangle.source[2][0]) -\n leftBound_1 >\n this.sourceWorldWidth_ / 2) {\n var newTriangle = [\n [triangle.source[0][0], triangle.source[0][1]],\n [triangle.source[1][0], triangle.source[1][1]],\n [triangle.source[2][0], triangle.source[2][1]],\n ];\n if (newTriangle[0][0] - leftBound_1 > this.sourceWorldWidth_ / 2) {\n newTriangle[0][0] -= this.sourceWorldWidth_;\n }\n if (newTriangle[1][0] - leftBound_1 > this.sourceWorldWidth_ / 2) {\n newTriangle[1][0] -= this.sourceWorldWidth_;\n }\n if (newTriangle[2][0] - leftBound_1 > this.sourceWorldWidth_ / 2) {\n newTriangle[2][0] -= this.sourceWorldWidth_;\n }\n // Rarely (if the extent contains both the dateline and prime meridian)\n // the shift can in turn break some triangles.\n // Detect this here and don't shift in such cases.\n var minX = Math.min(newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);\n var maxX = Math.max(newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);\n if (maxX - minX < this.sourceWorldWidth_ / 2) {\n triangle.source = newTriangle;\n }\n }\n }.bind(this));\n }\n transformInvCache = {};\n }\n /**\n * Adds triangle to the triangulation.\n * @param {import(\"../coordinate.js\").Coordinate} a The target a coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} b The target b coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} c The target c coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} aSrc The source a coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} bSrc The source b coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} cSrc The source c coordinate.\n * @private\n */\n Triangulation.prototype.addTriangle_ = function (a, b, c, aSrc, bSrc, cSrc) {\n this.triangles_.push({\n source: [aSrc, bSrc, cSrc],\n target: [a, b, c],\n });\n };\n /**\n * Adds quad (points in clock-wise order) to the triangulation\n * (and reprojects the vertices) if valid.\n * Performs quad subdivision if needed to increase precision.\n *\n * @param {import(\"../coordinate.js\").Coordinate} a The target a coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} b The target b coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} c The target c coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} d The target d coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} aSrc The source a coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} bSrc The source b coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} cSrc The source c coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} dSrc The source d coordinate.\n * @param {number} maxSubdivision Maximal allowed subdivision of the quad.\n * @private\n */\n Triangulation.prototype.addQuad_ = function (a, b, c, d, aSrc, bSrc, cSrc, dSrc, maxSubdivision) {\n var sourceQuadExtent = boundingExtent([aSrc, bSrc, cSrc, dSrc]);\n var sourceCoverageX = this.sourceWorldWidth_\n ? getWidth(sourceQuadExtent) / this.sourceWorldWidth_\n : null;\n var sourceWorldWidth = /** @type {number} */ (this.sourceWorldWidth_);\n // when the quad is wrapped in the source projection\n // it covers most of the projection extent, but not fully\n var wrapsX = this.sourceProj_.canWrapX() &&\n sourceCoverageX > 0.5 &&\n sourceCoverageX < 1;\n var needsSubdivision = false;\n if (maxSubdivision > 0) {\n if (this.targetProj_.isGlobal() && this.targetWorldWidth_) {\n var targetQuadExtent = boundingExtent([a, b, c, d]);\n var targetCoverageX = getWidth(targetQuadExtent) / this.targetWorldWidth_;\n needsSubdivision =\n targetCoverageX > MAX_TRIANGLE_WIDTH || needsSubdivision;\n }\n if (!wrapsX && this.sourceProj_.isGlobal() && sourceCoverageX) {\n needsSubdivision =\n sourceCoverageX > MAX_TRIANGLE_WIDTH || needsSubdivision;\n }\n }\n if (!needsSubdivision && this.maxSourceExtent_) {\n if (isFinite(sourceQuadExtent[0]) &&\n isFinite(sourceQuadExtent[1]) &&\n isFinite(sourceQuadExtent[2]) &&\n isFinite(sourceQuadExtent[3])) {\n if (!intersects(sourceQuadExtent, this.maxSourceExtent_)) {\n // whole quad outside source projection extent -> ignore\n return;\n }\n }\n }\n var isNotFinite = 0;\n if (!needsSubdivision) {\n if (!isFinite(aSrc[0]) ||\n !isFinite(aSrc[1]) ||\n !isFinite(bSrc[0]) ||\n !isFinite(bSrc[1]) ||\n !isFinite(cSrc[0]) ||\n !isFinite(cSrc[1]) ||\n !isFinite(dSrc[0]) ||\n !isFinite(dSrc[1])) {\n if (maxSubdivision > 0) {\n needsSubdivision = true;\n }\n else {\n // It might be the case that only 1 of the points is infinite. In this case\n // we can draw a single triangle with the other three points\n isNotFinite =\n (!isFinite(aSrc[0]) || !isFinite(aSrc[1]) ? 8 : 0) +\n (!isFinite(bSrc[0]) || !isFinite(bSrc[1]) ? 4 : 0) +\n (!isFinite(cSrc[0]) || !isFinite(cSrc[1]) ? 2 : 0) +\n (!isFinite(dSrc[0]) || !isFinite(dSrc[1]) ? 1 : 0);\n if (isNotFinite != 1 &&\n isNotFinite != 2 &&\n isNotFinite != 4 &&\n isNotFinite != 8) {\n return;\n }\n }\n }\n }\n if (maxSubdivision > 0) {\n if (!needsSubdivision) {\n var center = [(a[0] + c[0]) / 2, (a[1] + c[1]) / 2];\n var centerSrc = this.transformInv_(center);\n var dx = void 0;\n if (wrapsX) {\n var centerSrcEstimX = (modulo(aSrc[0], sourceWorldWidth) +\n modulo(cSrc[0], sourceWorldWidth)) /\n 2;\n dx = centerSrcEstimX - modulo(centerSrc[0], sourceWorldWidth);\n }\n else {\n dx = (aSrc[0] + cSrc[0]) / 2 - centerSrc[0];\n }\n var dy = (aSrc[1] + cSrc[1]) / 2 - centerSrc[1];\n var centerSrcErrorSquared = dx * dx + dy * dy;\n needsSubdivision = centerSrcErrorSquared > this.errorThresholdSquared_;\n }\n if (needsSubdivision) {\n if (Math.abs(a[0] - c[0]) <= Math.abs(a[1] - c[1])) {\n // split horizontally (top & bottom)\n var bc = [(b[0] + c[0]) / 2, (b[1] + c[1]) / 2];\n var bcSrc = this.transformInv_(bc);\n var da = [(d[0] + a[0]) / 2, (d[1] + a[1]) / 2];\n var daSrc = this.transformInv_(da);\n this.addQuad_(a, b, bc, da, aSrc, bSrc, bcSrc, daSrc, maxSubdivision - 1);\n this.addQuad_(da, bc, c, d, daSrc, bcSrc, cSrc, dSrc, maxSubdivision - 1);\n }\n else {\n // split vertically (left & right)\n var ab = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];\n var abSrc = this.transformInv_(ab);\n var cd = [(c[0] + d[0]) / 2, (c[1] + d[1]) / 2];\n var cdSrc = this.transformInv_(cd);\n this.addQuad_(a, ab, cd, d, aSrc, abSrc, cdSrc, dSrc, maxSubdivision - 1);\n this.addQuad_(ab, b, c, cd, abSrc, bSrc, cSrc, cdSrc, maxSubdivision - 1);\n }\n return;\n }\n }\n if (wrapsX) {\n if (!this.canWrapXInSource_) {\n return;\n }\n this.wrapsXInSource_ = true;\n }\n // Exactly zero or one of *Src is not finite\n // The triangles must have the diagonal line as the first side\n // This is to allow easy code in reproj.s to make it straight for broken\n // browsers that can't handle diagonal clipping\n if ((isNotFinite & 0xb) == 0) {\n this.addTriangle_(a, c, d, aSrc, cSrc, dSrc);\n }\n if ((isNotFinite & 0xe) == 0) {\n this.addTriangle_(a, c, b, aSrc, cSrc, bSrc);\n }\n if (isNotFinite) {\n // Try the other two triangles\n if ((isNotFinite & 0xd) == 0) {\n this.addTriangle_(b, d, a, bSrc, dSrc, aSrc);\n }\n if ((isNotFinite & 0x7) == 0) {\n this.addTriangle_(b, d, c, bSrc, dSrc, cSrc);\n }\n }\n };\n /**\n * Calculates extent of the 'source' coordinates from all the triangles.\n *\n * @return {import(\"../extent.js\").Extent} Calculated extent.\n */\n Triangulation.prototype.calculateSourceExtent = function () {\n var extent = createEmpty();\n this.triangles_.forEach(function (triangle, i, arr) {\n var src = triangle.source;\n extendCoordinate(extent, src[0]);\n extendCoordinate(extent, src[1]);\n extendCoordinate(extent, src[2]);\n });\n return extent;\n };\n /**\n * @return {Array<Triangle>} Array of the calculated triangles.\n */\n Triangulation.prototype.getTriangles = function () {\n return this.triangles_;\n };\n return Triangulation;\n}());\nexport default Triangulation;\n//# sourceMappingURL=Triangulation.js.map","/**\n * Collision module.\n */\nimport { calculatePosition } from './position';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar parentDocument;\nvar targetContainer;\nexport function fit(element, viewPortElement, axis, position) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: false, Y: false }; }\n if (!axis.Y && !axis.X) {\n return { left: 0, top: 0 };\n }\n var elemData = element.getBoundingClientRect();\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n if (!position) {\n position = calculatePosition(element, 'left', 'top');\n }\n if (axis.X) {\n var containerWidth = targetContainer ? getTargetContainerWidth() : getViewPortWidth();\n var containerLeft = ContainerLeft();\n var containerRight = ContainerRight();\n var overLeft = containerLeft - position.left;\n var overRight = position.left + elemData.width - containerRight;\n if (elemData.width > containerWidth) {\n if (overLeft > 0 && overRight <= 0) {\n position.left = containerRight - elemData.width;\n }\n else if (overRight > 0 && overLeft <= 0) {\n position.left = containerLeft;\n }\n else {\n position.left = overLeft > overRight ? (containerRight - elemData.width) : containerLeft;\n }\n }\n else if (overLeft > 0) {\n position.left += overLeft;\n }\n else if (overRight > 0) {\n position.left -= overRight;\n }\n }\n if (axis.Y) {\n var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n var containerTop = ContainerTop();\n var containerBottom = ContainerBottom();\n var overTop = containerTop - position.top;\n var overBottom = position.top + elemData.height - containerBottom;\n if (elemData.height > containerHeight) {\n if (overTop > 0 && overBottom <= 0) {\n position.top = containerBottom - elemData.height;\n }\n else if (overBottom > 0 && overTop <= 0) {\n position.top = containerTop;\n }\n else {\n position.top = overTop > overBottom ? (containerBottom - elemData.height) : containerTop;\n }\n }\n else if (overTop > 0) {\n position.top += overTop;\n }\n else if (overBottom > 0) {\n position.top -= overBottom;\n }\n }\n return position;\n}\nexport function isCollide(element, viewPortElement, x, y) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n var elemOffset = calculatePosition(element, 'left', 'top');\n if (x) {\n elemOffset.left = x;\n }\n if (y) {\n elemOffset.top = y;\n }\n var data = [];\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n var elementRect = element.getBoundingClientRect();\n var top = elemOffset.top;\n var left = elemOffset.left;\n var right = elemOffset.left + elementRect.width;\n var bottom = elemOffset.top + elementRect.height;\n var topData = '';\n var leftData = '';\n var yAxis = topCollideCheck(top, bottom);\n var xAxis = leftCollideCheck(left, right);\n if (yAxis.topSide) {\n data.push('top');\n }\n if (xAxis.rightSide) {\n data.push('right');\n }\n if (xAxis.leftSide) {\n data.push('left');\n }\n if (yAxis.bottomSide) {\n data.push('bottom');\n }\n return data;\n}\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, axis, fixedParent) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: true, Y: true }; }\n if (!target || !element || !positionX || !positionY || (!axis.X && !axis.Y)) {\n return;\n }\n var tEdge = { TL: null,\n TR: null,\n BL: null,\n BR: null };\n var eEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n };\n var oldVisibility = element.style.visibility;\n element.style.visibility = 'hidden';\n element.style.display = 'block';\n var elementRect = element.getBoundingClientRect();\n element.style.removeProperty('display');\n element.style.visibility = oldVisibility;\n var pos = {\n posX: positionX, posY: positionY, offsetX: offsetX, offsetY: offsetY, position: { left: 0, top: 0 }\n };\n targetContainer = viewPortElement;\n parentDocument = target.ownerDocument;\n updateElementData(target, tEdge, pos, fixedParent, elementRect);\n setPosition(eEdge, pos, elementRect);\n if (axis.X) {\n leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n if (axis.Y && tEdge.TL.top > -1) {\n topFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n setPopup(element, pos, elementRect);\n}\nfunction setPopup(element, pos, elementRect) {\n var left = 0;\n var top = 0;\n if (element.offsetParent != null\n && (getComputedStyle(element.offsetParent).position === 'absolute' ||\n getComputedStyle(element.offsetParent).position === 'relative')) {\n var data = calculatePosition(element.offsetParent, 'left', 'top', false, elementRect);\n left = data.left;\n top = data.top;\n }\n element.style.top = (pos.position.top + pos.offsetY - (top)) + 'px';\n element.style.left = (pos.position.left + pos.offsetX - (left)) + 'px';\n}\nfunction updateElementData(target, edge, pos, fixedParent, elementRect) {\n pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent, elementRect);\n edge.TL = calculatePosition(target, 'left', 'top', fixedParent, elementRect);\n edge.TR = calculatePosition(target, 'right', 'top', fixedParent, elementRect);\n edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent, elementRect);\n edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent, elementRect);\n}\nfunction setPosition(eStatus, pos, elementRect) {\n eStatus.TL = { top: pos.position.top + pos.offsetY, left: pos.position.left + pos.offsetX };\n eStatus.TR = { top: eStatus.TL.top, left: eStatus.TL.left + elementRect.width };\n eStatus.BL = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left };\n eStatus.BR = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left + elementRect.width };\n}\nfunction leftCollideCheck(left, right) {\n var leftSide = false;\n var rightSide = false;\n if (((left - getBodyScrollLeft()) < ContainerLeft())) {\n leftSide = true;\n }\n if (right > ContainerRight()) {\n rightSide = true;\n }\n return { leftSide: leftSide, rightSide: rightSide };\n}\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n if ((tEdge.TL.left - getBodyScrollLeft()) <= ContainerLeft()) {\n collideSide.leftSide = false;\n }\n if (tEdge.TR.left >= ContainerRight()) {\n collideSide.rightSide = false;\n }\n if ((collideSide.leftSide && !collideSide.rightSide) || (!collideSide.leftSide && collideSide.rightSide)) {\n if (pos.posX === 'right') {\n pos.posX = 'left';\n }\n else {\n pos.posX = 'right';\n }\n pos.offsetX = pos.offsetX + elementRect.width;\n pos.offsetX = -1 * pos.offsetX;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n leftFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n if ((tEdge.TL.top - getBodyScrollTop()) <= ContainerTop()) {\n collideSide.topSide = false;\n }\n if (tEdge.BL.top >= ContainerBottom() && target.getBoundingClientRect().bottom < window.innerHeight) {\n collideSide.bottomSide = false;\n }\n if ((collideSide.topSide && !collideSide.bottomSide) || (!collideSide.topSide && collideSide.bottomSide)) {\n if (pos.posY === 'top') {\n pos.posY = 'bottom';\n }\n else {\n pos.posY = 'top';\n }\n pos.offsetY = pos.offsetY + elementRect.height;\n pos.offsetY = -1 * pos.offsetY;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false, elementRect);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n topFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topCollideCheck(top, bottom) {\n var topSide = false;\n var bottomSide = false;\n if ((top - getBodyScrollTop()) < ContainerTop()) {\n topSide = true;\n }\n if (bottom > ContainerBottom()) {\n bottomSide = true;\n }\n return { topSide: topSide, bottomSide: bottomSide };\n}\nfunction getTargetContainerWidth() {\n return targetContainer.getBoundingClientRect().width;\n}\nfunction getTargetContainerHeight() {\n return targetContainer.getBoundingClientRect().height;\n}\nfunction getTargetContainerLeft() {\n return targetContainer.getBoundingClientRect().left;\n}\nfunction getTargetContainerTop() {\n return targetContainer.getBoundingClientRect().top;\n}\nfunction ContainerTop() {\n if (targetContainer) {\n return getTargetContainerTop();\n }\n return 0;\n}\nfunction ContainerLeft() {\n if (targetContainer) {\n return getTargetContainerLeft();\n }\n return 0;\n}\nfunction ContainerRight() {\n if (targetContainer) {\n return (getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth());\n }\n return (getBodyScrollLeft() + getViewPortWidth());\n}\nfunction ContainerBottom() {\n if (targetContainer) {\n return (getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight());\n }\n return (getBodyScrollTop() + getViewPortHeight());\n}\nfunction getBodyScrollTop() {\n // if(targetContainer)\n // return targetContainer.scrollTop;\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\nfunction getBodyScrollLeft() {\n // if(targetContainer)\n // return targetContainer.scrollLeft;\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\nfunction getViewPortHeight() {\n return window.innerHeight;\n}\nfunction getViewPortWidth() {\n var windowWidth = window.innerWidth;\n var offsetWidth = (isNullOrUndefined(document.documentElement)) ? 0 : document.documentElement.offsetWidth;\n return windowWidth - (windowWidth - offsetWidth);\n}\n","import { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n TEXTAREA: 'e-multi-line-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n var floatType;\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n * @param args\n */\n function createInput(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n floatType = args.floatLabelType;\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n bindInitialEvent(args);\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) &&\n args.properties.showClearButton && args.element.tagName !== 'TEXTAREA') {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n inputObject.clearButton.setAttribute('role', 'button');\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons) && args.element.tagName !== 'TEXTAREA') {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n }\n validateInputType(inputObject.container, args.element);\n inputObject = setPropertyValue(args, inputObject);\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n });\n args.element.addEventListener('input', function () {\n checkInputValue(floatType, args.element);\n });\n }\n Input.bindInitialEvent = bindInitialEvent;\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n if (inputValue !== '' && !isNullOrUndefined(inputValue) && inputElement.parentElement) {\n inputElement.parentElement.classList.add('e-valid-input');\n }\n else if (floatLabelType !== 'Always' && inputElement.parentElement) {\n inputElement.parentElement.classList.remove('e-valid-input');\n }\n }\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if ((parent.getElementsByTagName('textarea')[0]) ? parent.getElementsByTagName('textarea')[0].value === '' :\n parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n Input.wireFloatingEvents = wireFloatingEvents;\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputElement;\n var floatLinelement;\n var floatLabelElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n }\n if (!floatLabelElement.innerText) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n if (inputObject.container.classList.contains('e-float-icon-left')) {\n var inputWrap = inputObject.container.querySelector('.e-input-in-wrap');\n inputWrap.appendChild(args.element);\n inputWrap.appendChild(floatLinelement);\n inputWrap.appendChild(floatLabelElement);\n }\n else {\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n }\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function checkFloatLabelType(type, container) {\n if (type === 'Always' && container.classList.contains('e-outline')) {\n container.classList.add('e-valid-input');\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n checkFloatLabelType(args.floatLabelType, inputObject.container);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = isNullOrUndefined(element.parentNode) ? element\n : element.parentNode;\n if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n parentNode = parentNode.parentNode;\n }\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n function wireClearBtnEvents(element, button, container) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('blur', function (event) {\n setTimeout(function () { addClass([button], CLASSNAMES.CLEARICONHIDE); }, 200);\n });\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n function encodePlaceHolder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanEle = document.createElement('span');\n spanEle.innerHTML = '<input placeholder=\"' + placeholder + '\"/>';\n var hiddenInput = (spanEle.children[0]);\n result = hiddenInput.placeholder;\n }\n return result;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n * @param value - Specify the value of the input element.\n * @param element - The element on which the specified value is updated.\n * @param floatLabelType - Specify the float label type of the input element.\n * @param clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n if (!isNullOrUndefined(parentElement)) {\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (!isNullOrUndefined(button)) {\n if (element.value && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n }\n checkInputValue(floatLabelType, element);\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n * @param cssClass - Css class names which are needed to add.\n * @param elements - The elements which are needed to add / remove classes.\n * @param oldClass - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the width to the wrapper of input element.\n * ```\n * E.g : Input.setWidth('200px', container);\n * ```\n * @param width - Width value which is need to add.\n * @param container - The element on which the width is need to add.\n */\n function setWidth(width, container) {\n if (typeof width === 'number') {\n container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n Input.setWidth = setWidth;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n * @param placeholder - Placeholder value which is need to add.\n * @param element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n var parentElement;\n placeholder = encodePlaceHolder(placeholder);\n parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n * @param isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n * @param isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n * @param isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n remove(inputObject.clearButton);\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n * @param attrs\n * - Array of attributes which are need to removed from the element.\n * @param element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n * @param attrs\n * - Array of attributes which is added to element.\n * @param element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') :\n container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton && inputEle.tagName === 'INPUT') {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n floatType = type;\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type, customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n var isPrependIcon = container.classList.contains('e-float-icon-left');\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n var inputWrap = container.querySelector('.e-input-in-wrap');\n iconEle = inputWrap.querySelector('.e-input-group-icon');\n }\n else {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n var wrapper = isPrependIcon ? container.querySelector('.e-input-in-wrap') : container;\n wrapper.insertBefore(input, iconEle);\n wrapper.insertBefore(floatLine, iconEle);\n wrapper.insertBefore(floatText, iconEle);\n }\n }\n checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n * @param isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param inputObject\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[i].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n var ele = this;\n setTimeout(function () { ele.classList.remove('e-input-btn-ripple'); }, 500);\n }\n function createIconEle(iconClass, makeElement) {\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n return button;\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.addIcon('append', 'e-icon-spin', inputObj.container, inputElement);\n * ```\n * @param position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param container - The container on which created span element is going to append.\n * @param inputElement - The inputElement on which created span element is going to prepend.\n */\n // tslint:disable\n function addIcon(position, icons, container, input, internalCreate) {\n // tslint:enable\n var result = typeof (icons) === 'string' ? icons.split(',')\n : icons;\n if (position.toLowerCase() === 'append') {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var icon = result_1[_i];\n appendSpan(icon, container, internalCreate);\n }\n }\n else {\n for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n var icon = result_2[_a];\n prependSpan(icon, container, input, internalCreate);\n }\n }\n }\n Input.addIcon = addIcon;\n /**\n * Creates a new span element with the given icons added and prepend it in input element.\n * ```\n * E.g : Input.prependSpan('e-icon-spin', inputObj.container, inputElement);\n * ```\n * @param iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param container - The container on which created span element is going to append.\n * @param inputElement - The inputElement on which created span element is going to prepend.\n */\n // tslint:disable\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n // tslint:enable\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n container.classList.add('e-float-icon-left');\n var innerWrapper = container.querySelector('.e-input-in-wrap');\n if (isNullOrUndefined(innerWrapper)) {\n innerWrapper = makeElement('span', { className: 'e-input-in-wrap' });\n inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n innerWrapper.appendChild(inputElement);\n for (var i = 0; i < result.length; i++) {\n innerWrapper.appendChild(result[i]);\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n _internalRipple(true, container, button);\n return button;\n }\n Input.prependSpan = prependSpan;\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n * @param iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n var wrap = (container.classList.contains('e-float-icon-left')) ? container.querySelector('.e-input-in-wrap') :\n container;\n wrap.appendChild(button);\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n function validateInputType(containerElement, input) {\n if (input.type === 'hidden') {\n containerElement.classList.add('e-hidden');\n }\n else if (containerElement.classList.contains('e-hidden')) {\n containerElement.classList.remove('e-hidden');\n }\n }\n Input.validateInputType = validateInputType;\n})(Input || (Input = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Tile\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport TileState from './TileState.js';\nimport { abstract } from './util.js';\nimport { easeIn } from './easing.js';\n/**\n * A function that takes an {@link module:ol/Tile} for the tile and a\n * `{string}` for the url as arguments. The default is\n * ```js\n * source.setTileLoadFunction(function(tile, src) {\n * tile.getImage().src = src;\n * });\n * ```\n * For more fine grained control, the load function can use fetch or XMLHttpRequest and involve\n * error handling:\n *\n * ```js\n * import TileState from 'ol/TileState';\n *\n * source.setTileLoadFunction(function(tile, src) {\n * var xhr = new XMLHttpRequest();\n * xhr.responseType = 'blob';\n * xhr.addEventListener('loadend', function (evt) {\n * var data = this.response;\n * if (data !== undefined) {\n * tile.getImage().src = URL.createObjectURL(data);\n * } else {\n * tile.setState(TileState.ERROR);\n * }\n * });\n * xhr.addEventListener('error', function () {\n * tile.setState(TileState.ERROR);\n * });\n * xhr.open('GET', src);\n * xhr.send();\n * });\n * ```\n *\n * @typedef {function(Tile, string): void} LoadFunction\n * @api\n */\n/**\n * {@link module:ol/source/Tile~Tile} sources use a function of this type to get\n * the url that provides a tile for a given tile coordinate.\n *\n * This function takes an {@link module:ol/tilecoord~TileCoord} for the tile\n * coordinate, a `{number}` representing the pixel ratio and a\n * {@link module:ol/proj/Projection} for the projection as arguments\n * and returns a `{string}` representing the tile URL, or undefined if no tile\n * should be requested for the passed tile coordinate.\n *\n * @typedef {function(import(\"./tilecoord.js\").TileCoord, number,\n * import(\"./proj/Projection.js\").default): (string|undefined)} UrlFunction\n * @api\n */\n/**\n * @typedef {Object} Options\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @api\n */\n/**\n * @classdesc\n * Base class for tiles.\n *\n * @abstract\n */\nvar Tile = /** @class */ (function (_super) {\n __extends(Tile, _super);\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {Options=} opt_options Tile options.\n */\n function Tile(tileCoord, state, opt_options) {\n var _this = _super.call(this) || this;\n var options = opt_options ? opt_options : {};\n /**\n * @type {import(\"./tilecoord.js\").TileCoord}\n */\n _this.tileCoord = tileCoord;\n /**\n * @protected\n * @type {import(\"./TileState.js\").default}\n */\n _this.state = state;\n /**\n * An \"interim\" tile for this tile. The interim tile may be used while this\n * one is loading, for \"smooth\" transitions when changing params/dimensions\n * on the source.\n * @type {Tile}\n */\n _this.interimTile = null;\n /**\n * The tile is available at the highest possible resolution. Subclasses can\n * set this to `false` initially. Tile load listeners will not be\n * unregistered before this is set to `true` and a `#changed()` is called.\n * @type {boolean}\n */\n _this.hifi = true;\n /**\n * A key assigned to the tile. This is used by the tile source to determine\n * if this tile can effectively be used, or if a new tile should be created\n * and this one be used as an interim tile for this new tile.\n * @type {string}\n */\n _this.key = '';\n /**\n * The duration for the opacity transition.\n * @type {number}\n */\n _this.transition_ =\n options.transition === undefined ? 250 : options.transition;\n /**\n * Lookup of start times for rendering transitions. If the start time is\n * equal to -1, the transition is complete.\n * @type {Object<string, number>}\n */\n _this.transitionStarts_ = {};\n return _this;\n }\n /**\n * @protected\n */\n Tile.prototype.changed = function () {\n this.dispatchEvent(EventType.CHANGE);\n };\n /**\n * Called by the tile cache when the tile is removed from the cache due to expiry\n */\n Tile.prototype.release = function () { };\n /**\n * @return {string} Key.\n */\n Tile.prototype.getKey = function () {\n return this.key + '/' + this.tileCoord;\n };\n /**\n * Get the interim tile most suitable for rendering using the chain of interim\n * tiles. This corresponds to the most recent tile that has been loaded, if no\n * such tile exists, the original tile is returned.\n * @return {!Tile} Best tile for rendering.\n */\n Tile.prototype.getInterimTile = function () {\n if (!this.interimTile) {\n //empty chain\n return this;\n }\n var tile = this.interimTile;\n // find the first loaded tile and return it. Since the chain is sorted in\n // decreasing order of creation time, there is no need to search the remainder\n // of the list (all those tiles correspond to older requests and will be\n // cleaned up by refreshInterimChain)\n do {\n if (tile.getState() == TileState.LOADED) {\n // Show tile immediately instead of fading it in after loading, because\n // the interim tile is in place already\n this.transition_ = 0;\n return tile;\n }\n tile = tile.interimTile;\n } while (tile);\n // we can not find a better tile\n return this;\n };\n /**\n * Goes through the chain of interim tiles and discards sections of the chain\n * that are no longer relevant.\n */\n Tile.prototype.refreshInterimChain = function () {\n if (!this.interimTile) {\n return;\n }\n var tile = this.interimTile;\n var prev = /** @type {Tile} */ (this);\n do {\n if (tile.getState() == TileState.LOADED) {\n //we have a loaded tile, we can discard the rest of the list\n //we would could abort any LOADING tile request\n //older than this tile (i.e. any LOADING tile following this entry in the chain)\n tile.interimTile = null;\n break;\n }\n else if (tile.getState() == TileState.LOADING) {\n //keep this LOADING tile any loaded tiles later in the chain are\n //older than this tile, so we're still interested in the request\n prev = tile;\n }\n else if (tile.getState() == TileState.IDLE) {\n //the head of the list is the most current tile, we don't need\n //to start any other requests for this chain\n prev.interimTile = tile.interimTile;\n }\n else {\n prev = tile;\n }\n tile = prev.interimTile;\n } while (tile);\n };\n /**\n * Get the tile coordinate for this tile.\n * @return {import(\"./tilecoord.js\").TileCoord} The tile coordinate.\n * @api\n */\n Tile.prototype.getTileCoord = function () {\n return this.tileCoord;\n };\n /**\n * @return {import(\"./TileState.js\").default} State.\n */\n Tile.prototype.getState = function () {\n return this.state;\n };\n /**\n * Sets the state of this tile. If you write your own {@link module:ol/Tile~LoadFunction tileLoadFunction} ,\n * it is important to set the state correctly to {@link module:ol/TileState~ERROR}\n * when the tile cannot be loaded. Otherwise the tile cannot be removed from\n * the tile queue and will block other requests.\n * @param {import(\"./TileState.js\").default} state State.\n * @api\n */\n Tile.prototype.setState = function (state) {\n if (this.state !== TileState.ERROR && this.state > state) {\n throw new Error('Tile load sequence violation');\n }\n this.state = state;\n this.changed();\n };\n /**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n * @abstract\n * @api\n */\n Tile.prototype.load = function () {\n abstract();\n };\n /**\n * Get the alpha value for rendering.\n * @param {string} id An id for the renderer.\n * @param {number} time The render frame time.\n * @return {number} A number between 0 and 1.\n */\n Tile.prototype.getAlpha = function (id, time) {\n if (!this.transition_) {\n return 1;\n }\n var start = this.transitionStarts_[id];\n if (!start) {\n start = time;\n this.transitionStarts_[id] = start;\n }\n else if (start === -1) {\n return 1;\n }\n var delta = time - start + 1000 / 60; // avoid rendering at 0\n if (delta >= this.transition_) {\n return 1;\n }\n return easeIn(delta / this.transition_);\n };\n /**\n * Determine if a tile is in an alpha transition. A tile is considered in\n * transition if tile.getAlpha() has not yet been called or has been called\n * and returned 1.\n * @param {string} id An id for the renderer.\n * @return {boolean} The tile is in transition.\n */\n Tile.prototype.inTransition = function (id) {\n if (!this.transition_) {\n return false;\n }\n return this.transitionStarts_[id] !== -1;\n };\n /**\n * Mark a transition as complete.\n * @param {string} id An id for the renderer.\n */\n Tile.prototype.endTransition = function (id) {\n if (this.transition_) {\n this.transitionStarts_[id] = -1;\n }\n };\n return Tile;\n}(EventTarget));\nexport default Tile;\n//# sourceMappingURL=Tile.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/ImageTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\nimport { createCanvasContext2D } from './dom.js';\nimport { listenImage } from './Image.js';\nvar ImageTile = /** @class */ (function (_super) {\n __extends(ImageTile, _super);\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"./Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n * @param {import(\"./Tile.js\").Options=} opt_options Tile options.\n */\n function ImageTile(tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) {\n var _this = _super.call(this, tileCoord, state, opt_options) || this;\n /**\n * @private\n * @type {?string}\n */\n _this.crossOrigin_ = crossOrigin;\n /**\n * Image URI\n *\n * @private\n * @type {string}\n */\n _this.src_ = src;\n _this.key = src;\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n _this.image_ = new Image();\n if (crossOrigin !== null) {\n _this.image_.crossOrigin = crossOrigin;\n }\n /**\n * @private\n * @type {?function():void}\n */\n _this.unlisten_ = null;\n /**\n * @private\n * @type {import(\"./Tile.js\").LoadFunction}\n */\n _this.tileLoadFunction_ = tileLoadFunction;\n return _this;\n }\n /**\n * Get the HTML image element for this tile (may be a Canvas, Image, or Video).\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @api\n */\n ImageTile.prototype.getImage = function () {\n return this.image_;\n };\n /**\n * Tracks loading or read errors.\n *\n * @private\n */\n ImageTile.prototype.handleImageError_ = function () {\n this.state = TileState.ERROR;\n this.unlistenImage_();\n this.image_ = getBlankImage();\n this.changed();\n };\n /**\n * Tracks successful image load.\n *\n * @private\n */\n ImageTile.prototype.handleImageLoad_ = function () {\n var image = /** @type {HTMLImageElement} */ (this.image_);\n if (image.naturalWidth && image.naturalHeight) {\n this.state = TileState.LOADED;\n }\n else {\n this.state = TileState.EMPTY;\n }\n this.unlistenImage_();\n this.changed();\n };\n /**\n * Load not yet loaded URI.\n * @api\n */\n ImageTile.prototype.load = function () {\n if (this.state == TileState.ERROR) {\n this.state = TileState.IDLE;\n this.image_ = new Image();\n if (this.crossOrigin_ !== null) {\n this.image_.crossOrigin = this.crossOrigin_;\n }\n }\n if (this.state == TileState.IDLE) {\n this.state = TileState.LOADING;\n this.changed();\n this.tileLoadFunction_(this, this.src_);\n this.unlisten_ = listenImage(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this));\n }\n };\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n ImageTile.prototype.unlistenImage_ = function () {\n if (this.unlisten_) {\n this.unlisten_();\n this.unlisten_ = null;\n }\n };\n return ImageTile;\n}(Tile));\n/**\n * Get a 1-pixel blank image.\n * @return {HTMLCanvasElement} Blank image.\n */\nfunction getBlankImage() {\n var ctx = createCanvasContext2D(1, 1);\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return ctx.canvas;\n}\nexport default ImageTile;\n//# sourceMappingURL=ImageTile.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/reproj/Tile\n */\nimport { ERROR_THRESHOLD } from './common.js';\nimport EventType from '../events/EventType.js';\nimport Tile from '../Tile.js';\nimport TileState from '../TileState.js';\nimport Triangulation from './Triangulation.js';\nimport { calculateSourceExtentResolution, render as renderReprojected, } from '../reproj.js';\nimport { clamp } from '../math.js';\nimport { getArea, getIntersection } from '../extent.js';\nimport { listen, unlistenByKey } from '../events.js';\n/**\n * @typedef {function(number, number, number, number) : import(\"../Tile.js\").default} FunctionType\n */\n/**\n * @classdesc\n * Class encapsulating single reprojected tile.\n * See {@link module:ol/source/TileImage~TileImage}.\n *\n */\nvar ReprojTile = /** @class */ (function (_super) {\n __extends(ReprojTile, _super);\n /**\n * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"../tilegrid/TileGrid.js\").default} sourceTileGrid Source tile grid.\n * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"../tilegrid/TileGrid.js\").default} targetTileGrid Target tile grid.\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Coordinate of the tile.\n * @param {import(\"../tilecoord.js\").TileCoord} wrappedTileCoord Coordinate of the tile wrapped in X.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} gutter Gutter of the source tiles.\n * @param {FunctionType} getTileFunction\n * Function returning source tiles (z, x, y, pixelRatio).\n * @param {number=} opt_errorThreshold Acceptable reprojection error (in px).\n * @param {boolean=} opt_renderEdges Render reprojection edges.\n * @param {object=} opt_contextOptions Properties to set on the canvas context.\n */\n function ReprojTile(sourceProj, sourceTileGrid, targetProj, targetTileGrid, tileCoord, wrappedTileCoord, pixelRatio, gutter, getTileFunction, opt_errorThreshold, opt_renderEdges, opt_contextOptions) {\n var _this = _super.call(this, tileCoord, TileState.IDLE) || this;\n /**\n * @private\n * @type {boolean}\n */\n _this.renderEdges_ = opt_renderEdges !== undefined ? opt_renderEdges : false;\n /**\n * @private\n * @type {object}\n */\n _this.contextOptions_ = opt_contextOptions;\n /**\n * @private\n * @type {number}\n */\n _this.pixelRatio_ = pixelRatio;\n /**\n * @private\n * @type {number}\n */\n _this.gutter_ = gutter;\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n _this.canvas_ = null;\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n _this.sourceTileGrid_ = sourceTileGrid;\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n _this.targetTileGrid_ = targetTileGrid;\n /**\n * @private\n * @type {import(\"../tilecoord.js\").TileCoord}\n */\n _this.wrappedTileCoord_ = wrappedTileCoord ? wrappedTileCoord : tileCoord;\n /**\n * @private\n * @type {!Array<import(\"../Tile.js\").default>}\n */\n _this.sourceTiles_ = [];\n /**\n * @private\n * @type {?Array<import(\"../events.js\").EventsKey>}\n */\n _this.sourcesListenerKeys_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.sourceZ_ = 0;\n var targetExtent = targetTileGrid.getTileCoordExtent(_this.wrappedTileCoord_);\n var maxTargetExtent = _this.targetTileGrid_.getExtent();\n var maxSourceExtent = _this.sourceTileGrid_.getExtent();\n var limitedTargetExtent = maxTargetExtent\n ? getIntersection(targetExtent, maxTargetExtent)\n : targetExtent;\n if (getArea(limitedTargetExtent) === 0) {\n // Tile is completely outside range -> EMPTY\n // TODO: is it actually correct that the source even creates the tile ?\n _this.state = TileState.EMPTY;\n return _this;\n }\n var sourceProjExtent = sourceProj.getExtent();\n if (sourceProjExtent) {\n if (!maxSourceExtent) {\n maxSourceExtent = sourceProjExtent;\n }\n else {\n maxSourceExtent = getIntersection(maxSourceExtent, sourceProjExtent);\n }\n }\n var targetResolution = targetTileGrid.getResolution(_this.wrappedTileCoord_[0]);\n var sourceResolution = calculateSourceExtentResolution(sourceProj, targetProj, limitedTargetExtent, targetResolution);\n if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n // invalid sourceResolution -> EMPTY\n // probably edges of the projections when no extent is defined\n _this.state = TileState.EMPTY;\n return _this;\n }\n var errorThresholdInPixels = opt_errorThreshold !== undefined ? opt_errorThreshold : ERROR_THRESHOLD;\n /**\n * @private\n * @type {!import(\"./Triangulation.js\").default}\n */\n _this.triangulation_ = new Triangulation(sourceProj, targetProj, limitedTargetExtent, maxSourceExtent, sourceResolution * errorThresholdInPixels, targetResolution);\n if (_this.triangulation_.getTriangles().length === 0) {\n // no valid triangles -> EMPTY\n _this.state = TileState.EMPTY;\n return _this;\n }\n _this.sourceZ_ = sourceTileGrid.getZForResolution(sourceResolution);\n var sourceExtent = _this.triangulation_.calculateSourceExtent();\n if (maxSourceExtent) {\n if (sourceProj.canWrapX()) {\n sourceExtent[1] = clamp(sourceExtent[1], maxSourceExtent[1], maxSourceExtent[3]);\n sourceExtent[3] = clamp(sourceExtent[3], maxSourceExtent[1], maxSourceExtent[3]);\n }\n else {\n sourceExtent = getIntersection(sourceExtent, maxSourceExtent);\n }\n }\n if (!getArea(sourceExtent)) {\n _this.state = TileState.EMPTY;\n }\n else {\n var sourceRange = sourceTileGrid.getTileRangeForExtentAndZ(sourceExtent, _this.sourceZ_);\n for (var srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {\n for (var srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {\n var tile = getTileFunction(_this.sourceZ_, srcX, srcY, pixelRatio);\n if (tile) {\n _this.sourceTiles_.push(tile);\n }\n }\n }\n if (_this.sourceTiles_.length === 0) {\n _this.state = TileState.EMPTY;\n }\n }\n return _this;\n }\n /**\n * Get the HTML Canvas element for this tile.\n * @return {HTMLCanvasElement} Canvas.\n */\n ReprojTile.prototype.getImage = function () {\n return this.canvas_;\n };\n /**\n * @private\n */\n ReprojTile.prototype.reproject_ = function () {\n var sources = [];\n this.sourceTiles_.forEach(function (tile, i, arr) {\n if (tile && tile.getState() == TileState.LOADED) {\n sources.push({\n extent: this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord),\n image: tile.getImage(),\n });\n }\n }.bind(this));\n this.sourceTiles_.length = 0;\n if (sources.length === 0) {\n this.state = TileState.ERROR;\n }\n else {\n var z = this.wrappedTileCoord_[0];\n var size = this.targetTileGrid_.getTileSize(z);\n var width = typeof size === 'number' ? size : size[0];\n var height = typeof size === 'number' ? size : size[1];\n var targetResolution = this.targetTileGrid_.getResolution(z);\n var sourceResolution = this.sourceTileGrid_.getResolution(this.sourceZ_);\n var targetExtent = this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);\n this.canvas_ = renderReprojected(width, height, this.pixelRatio_, sourceResolution, this.sourceTileGrid_.getExtent(), targetResolution, targetExtent, this.triangulation_, sources, this.gutter_, this.renderEdges_, this.contextOptions_);\n this.state = TileState.LOADED;\n }\n this.changed();\n };\n /**\n * Load not yet loaded URI.\n */\n ReprojTile.prototype.load = function () {\n if (this.state == TileState.IDLE) {\n this.state = TileState.LOADING;\n this.changed();\n var leftToLoad_1 = 0;\n this.sourcesListenerKeys_ = [];\n this.sourceTiles_.forEach(function (tile, i, arr) {\n var state = tile.getState();\n if (state == TileState.IDLE || state == TileState.LOADING) {\n leftToLoad_1++;\n var sourceListenKey_1 = listen(tile, EventType.CHANGE, function (e) {\n var state = tile.getState();\n if (state == TileState.LOADED ||\n state == TileState.ERROR ||\n state == TileState.EMPTY) {\n unlistenByKey(sourceListenKey_1);\n leftToLoad_1--;\n if (leftToLoad_1 === 0) {\n this.unlistenSources_();\n this.reproject_();\n }\n }\n }, this);\n this.sourcesListenerKeys_.push(sourceListenKey_1);\n }\n }.bind(this));\n this.sourceTiles_.forEach(function (tile, i, arr) {\n var state = tile.getState();\n if (state == TileState.IDLE) {\n tile.load();\n }\n });\n if (leftToLoad_1 === 0) {\n setTimeout(this.reproject_.bind(this), 0);\n }\n }\n };\n /**\n * @private\n */\n ReprojTile.prototype.unlistenSources_ = function () {\n this.sourcesListenerKeys_.forEach(unlistenByKey);\n this.sourcesListenerKeys_ = null;\n };\n return ReprojTile;\n}(Tile));\nexport default ReprojTile;\n//# sourceMappingURL=Tile.js.map","/**\n * @module ol/structs/LRUCache\n */\nimport { assert } from '../asserts.js';\n/**\n * @typedef {Object} Entry\n * @property {string} key_\n * @property {Object} newer\n * @property {Object} older\n * @property {*} value_\n */\n/**\n * @classdesc\n * Implements a Least-Recently-Used cache where the keys do not conflict with\n * Object's properties (e.g. 'hasOwnProperty' is not allowed as a key). Expiring\n * items from the cache is the responsibility of the user.\n *\n * @fires import(\"../events/Event.js\").default\n * @template T\n */\nvar LRUCache = /** @class */ (function () {\n /**\n * @param {number=} opt_highWaterMark High water mark.\n */\n function LRUCache(opt_highWaterMark) {\n /**\n * Desired max cache size after expireCache(). If set to 0, no cache entries\n * will be pruned at all.\n * @type {number}\n */\n this.highWaterMark =\n opt_highWaterMark !== undefined ? opt_highWaterMark : 2048;\n /**\n * @private\n * @type {number}\n */\n this.count_ = 0;\n /**\n * @private\n * @type {!Object<string, Entry>}\n */\n this.entries_ = {};\n /**\n * @private\n * @type {?Entry}\n */\n this.oldest_ = null;\n /**\n * @private\n * @type {?Entry}\n */\n this.newest_ = null;\n }\n /**\n * @return {boolean} Can expire cache.\n */\n LRUCache.prototype.canExpireCache = function () {\n return this.highWaterMark > 0 && this.getCount() > this.highWaterMark;\n };\n /**\n * FIXME empty description for jsdoc\n */\n LRUCache.prototype.clear = function () {\n this.count_ = 0;\n this.entries_ = {};\n this.oldest_ = null;\n this.newest_ = null;\n };\n /**\n * @param {string} key Key.\n * @return {boolean} Contains key.\n */\n LRUCache.prototype.containsKey = function (key) {\n return this.entries_.hasOwnProperty(key);\n };\n /**\n * @param {function(T, string, LRUCache<T>): ?} f The function\n * to call for every entry from the oldest to the newer. This function takes\n * 3 arguments (the entry value, the entry key and the LRUCache object).\n * The return value is ignored.\n */\n LRUCache.prototype.forEach = function (f) {\n var entry = this.oldest_;\n while (entry) {\n f(entry.value_, entry.key_, this);\n entry = entry.newer;\n }\n };\n /**\n * @param {string} key Key.\n * @param {*=} opt_options Options (reserverd for subclasses).\n * @return {T} Value.\n */\n LRUCache.prototype.get = function (key, opt_options) {\n var entry = this.entries_[key];\n assert(entry !== undefined, 15); // Tried to get a value for a key that does not exist in the cache\n if (entry === this.newest_) {\n return entry.value_;\n }\n else if (entry === this.oldest_) {\n this.oldest_ = /** @type {Entry} */ (this.oldest_.newer);\n this.oldest_.older = null;\n }\n else {\n entry.newer.older = entry.older;\n entry.older.newer = entry.newer;\n }\n entry.newer = null;\n entry.older = this.newest_;\n this.newest_.newer = entry;\n this.newest_ = entry;\n return entry.value_;\n };\n /**\n * Remove an entry from the cache.\n * @param {string} key The entry key.\n * @return {T} The removed entry.\n */\n LRUCache.prototype.remove = function (key) {\n var entry = this.entries_[key];\n assert(entry !== undefined, 15); // Tried to get a value for a key that does not exist in the cache\n if (entry === this.newest_) {\n this.newest_ = /** @type {Entry} */ (entry.older);\n if (this.newest_) {\n this.newest_.newer = null;\n }\n }\n else if (entry === this.oldest_) {\n this.oldest_ = /** @type {Entry} */ (entry.newer);\n if (this.oldest_) {\n this.oldest_.older = null;\n }\n }\n else {\n entry.newer.older = entry.older;\n entry.older.newer = entry.newer;\n }\n delete this.entries_[key];\n --this.count_;\n return entry.value_;\n };\n /**\n * @return {number} Count.\n */\n LRUCache.prototype.getCount = function () {\n return this.count_;\n };\n /**\n * @return {Array<string>} Keys.\n */\n LRUCache.prototype.getKeys = function () {\n var keys = new Array(this.count_);\n var i = 0;\n var entry;\n for (entry = this.newest_; entry; entry = entry.older) {\n keys[i++] = entry.key_;\n }\n return keys;\n };\n /**\n * @return {Array<T>} Values.\n */\n LRUCache.prototype.getValues = function () {\n var values = new Array(this.count_);\n var i = 0;\n var entry;\n for (entry = this.newest_; entry; entry = entry.older) {\n values[i++] = entry.value_;\n }\n return values;\n };\n /**\n * @return {T} Last value.\n */\n LRUCache.prototype.peekLast = function () {\n return this.oldest_.value_;\n };\n /**\n * @return {string} Last key.\n */\n LRUCache.prototype.peekLastKey = function () {\n return this.oldest_.key_;\n };\n /**\n * Get the key of the newest item in the cache. Throws if the cache is empty.\n * @return {string} The newest key.\n */\n LRUCache.prototype.peekFirstKey = function () {\n return this.newest_.key_;\n };\n /**\n * @return {T} value Value.\n */\n LRUCache.prototype.pop = function () {\n var entry = this.oldest_;\n delete this.entries_[entry.key_];\n if (entry.newer) {\n entry.newer.older = null;\n }\n this.oldest_ = /** @type {Entry} */ (entry.newer);\n if (!this.oldest_) {\n this.newest_ = null;\n }\n --this.count_;\n return entry.value_;\n };\n /**\n * @param {string} key Key.\n * @param {T} value Value.\n */\n LRUCache.prototype.replace = function (key, value) {\n this.get(key); // update `newest_`\n this.entries_[key].value_ = value;\n };\n /**\n * @param {string} key Key.\n * @param {T} value Value.\n */\n LRUCache.prototype.set = function (key, value) {\n assert(!(key in this.entries_), 16); // Tried to set a value for a key that is used already\n var entry = {\n key_: key,\n newer: null,\n older: this.newest_,\n value_: value,\n };\n if (!this.newest_) {\n this.oldest_ = entry;\n }\n else {\n this.newest_.newer = entry;\n }\n this.newest_ = entry;\n this.entries_[key] = entry;\n ++this.count_;\n };\n /**\n * Set a maximum number of entries for the cache.\n * @param {number} size Cache size.\n * @api\n */\n LRUCache.prototype.setSize = function (size) {\n this.highWaterMark = size;\n };\n return LRUCache;\n}());\nexport default LRUCache;\n//# sourceMappingURL=LRUCache.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/TileCache\n */\nimport LRUCache from './structs/LRUCache.js';\nimport { fromKey, getKey } from './tilecoord.js';\nvar TileCache = /** @class */ (function (_super) {\n __extends(TileCache, _super);\n function TileCache() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {!Object<string, boolean>} usedTiles Used tiles.\n */\n TileCache.prototype.expireCache = function (usedTiles) {\n while (this.canExpireCache()) {\n var tile = this.peekLast();\n if (tile.getKey() in usedTiles) {\n break;\n }\n else {\n this.pop().release();\n }\n }\n };\n /**\n * Prune all tiles from the cache that don't have the same z as the newest tile.\n */\n TileCache.prototype.pruneExceptNewestZ = function () {\n if (this.getCount() === 0) {\n return;\n }\n var key = this.peekFirstKey();\n var tileCoord = fromKey(key);\n var z = tileCoord[0];\n this.forEach(function (tile) {\n if (tile.tileCoord[0] !== z) {\n this.remove(getKey(tile.tileCoord));\n tile.release();\n }\n }.bind(this));\n };\n return TileCache;\n}(LRUCache));\nexport default TileCache;\n//# sourceMappingURL=TileCache.js.map","/**\n * @module ol/source/TileEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a tile starts loading.\n * @event module:ol/source/Tile.TileSourceEvent#tileloadstart\n * @api\n */\n TILELOADSTART: 'tileloadstart',\n /**\n * Triggered when a tile finishes loading, either when its data is loaded,\n * or when loading was aborted because the tile is no longer needed.\n * @event module:ol/source/Tile.TileSourceEvent#tileloadend\n * @api\n */\n TILELOADEND: 'tileloadend',\n /**\n * Triggered if tile loading results in an error.\n * @event module:ol/source/Tile.TileSourceEvent#tileloaderror\n * @api\n */\n TILELOADERROR: 'tileloaderror',\n};\n//# sourceMappingURL=TileEventType.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/source/Tile\n */\nimport Event from '../events/Event.js';\nimport Source from './Source.js';\nimport TileCache from '../TileCache.js';\nimport TileState from '../TileState.js';\nimport { abstract } from '../util.js';\nimport { assert } from '../asserts.js';\nimport { equivalent } from '../proj.js';\nimport { getKeyZXY, withinExtentAndZ } from '../tilecoord.js';\nimport { getForProjection as getTileGridForProjection, wrapX, } from '../tilegrid.js';\nimport { scale as scaleSize, toSize } from '../size.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions]\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize]\n * @property {boolean} [opaque=false] Whether the layer is opaque.\n * @property {number} [tilePixelRatio]\n * @property {import(\"../proj.js\").ProjectionLike} [projection]\n * @property {import(\"./State.js\").default} [state]\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid]\n * @property {boolean} [wrapX=true]\n * @property {number} [transition]\n * @property {string} [key]\n * @property {number} [zDirection=0]\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for sources providing images divided into a tile grid.\n * @abstract\n * @api\n */\nvar TileSource = /** @class */ (function (_super) {\n __extends(TileSource, _super);\n /**\n * @param {Options} options SourceTile source options.\n */\n function TileSource(options) {\n var _this = _super.call(this, {\n attributions: options.attributions,\n attributionsCollapsible: options.attributionsCollapsible,\n projection: options.projection,\n state: options.state,\n wrapX: options.wrapX,\n }) || this;\n /**\n * @private\n * @type {boolean}\n */\n _this.opaque_ = options.opaque !== undefined ? options.opaque : false;\n /**\n * @private\n * @type {number}\n */\n _this.tilePixelRatio_ =\n options.tilePixelRatio !== undefined ? options.tilePixelRatio : 1;\n /**\n * @protected\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n _this.tileGrid = options.tileGrid !== undefined ? options.tileGrid : null;\n var tileSize = [256, 256];\n var tileGrid = options.tileGrid;\n if (tileGrid) {\n toSize(tileGrid.getTileSize(tileGrid.getMinZoom()), tileSize);\n }\n /**\n * @protected\n * @type {import(\"../TileCache.js\").default}\n */\n _this.tileCache = new TileCache(options.cacheSize || 0);\n /**\n * @protected\n * @type {import(\"../size.js\").Size}\n */\n _this.tmpSize = [0, 0];\n /**\n * @private\n * @type {string}\n */\n _this.key_ = options.key || '';\n /**\n * @protected\n * @type {import(\"../Tile.js\").Options}\n */\n _this.tileOptions = { transition: options.transition };\n /**\n * zDirection hint, read by the renderer. Indicates which resolution should be used\n * by a renderer if the views resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @type {number}\n */\n _this.zDirection = options.zDirection ? options.zDirection : 0;\n return _this;\n }\n /**\n * @return {boolean} Can expire cache.\n */\n TileSource.prototype.canExpireCache = function () {\n return this.tileCache.canExpireCache();\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @param {!Object<string, boolean>} usedTiles Used tiles.\n */\n TileSource.prototype.expireCache = function (projection, usedTiles) {\n var tileCache = this.getTileCacheForProjection(projection);\n if (tileCache) {\n tileCache.expireCache(usedTiles);\n }\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @param {number} z Zoom level.\n * @param {import(\"../TileRange.js\").default} tileRange Tile range.\n * @param {function(import(\"../Tile.js\").default):(boolean|void)} callback Called with each\n * loaded tile. If the callback returns `false`, the tile will not be\n * considered loaded.\n * @return {boolean} The tile range is fully covered with loaded tiles.\n */\n TileSource.prototype.forEachLoadedTile = function (projection, z, tileRange, callback) {\n var tileCache = this.getTileCacheForProjection(projection);\n if (!tileCache) {\n return false;\n }\n var covered = true;\n var tile, tileCoordKey, loaded;\n for (var x = tileRange.minX; x <= tileRange.maxX; ++x) {\n for (var y = tileRange.minY; y <= tileRange.maxY; ++y) {\n tileCoordKey = getKeyZXY(z, x, y);\n loaded = false;\n if (tileCache.containsKey(tileCoordKey)) {\n tile = /** @type {!import(\"../Tile.js\").default} */ (tileCache.get(tileCoordKey));\n loaded = tile.getState() === TileState.LOADED;\n if (loaded) {\n loaded = callback(tile) !== false;\n }\n }\n if (!loaded) {\n covered = false;\n }\n }\n }\n return covered;\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {number} Gutter.\n */\n TileSource.prototype.getGutterForProjection = function (projection) {\n return 0;\n };\n /**\n * Return the key to be used for all tiles in the source.\n * @return {string} The key for all tiles.\n * @protected\n */\n TileSource.prototype.getKey = function () {\n return this.key_;\n };\n /**\n * Set the value to be used as the key for all tiles in the source.\n * @param {string} key The key for tiles.\n * @protected\n */\n TileSource.prototype.setKey = function (key) {\n if (this.key_ !== key) {\n this.key_ = key;\n this.changed();\n }\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {boolean} Opaque.\n */\n TileSource.prototype.getOpaque = function (projection) {\n return this.opaque_;\n };\n /**\n * @return {Array<number>} Resolutions.\n */\n TileSource.prototype.getResolutions = function () {\n return this.tileGrid.getResolutions();\n };\n /**\n * @abstract\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {!import(\"../Tile.js\").default} Tile.\n */\n TileSource.prototype.getTile = function (z, x, y, pixelRatio, projection) {\n return abstract();\n };\n /**\n * Return the tile grid of the tile source.\n * @return {import(\"../tilegrid/TileGrid.js\").default} Tile grid.\n * @api\n */\n TileSource.prototype.getTileGrid = function () {\n return this.tileGrid;\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {!import(\"../tilegrid/TileGrid.js\").default} Tile grid.\n */\n TileSource.prototype.getTileGridForProjection = function (projection) {\n if (!this.tileGrid) {\n return getTileGridForProjection(projection);\n }\n else {\n return this.tileGrid;\n }\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {import(\"../TileCache.js\").default} Tile cache.\n * @protected\n */\n TileSource.prototype.getTileCacheForProjection = function (projection) {\n assert(equivalent(this.getProjection(), projection), 68 // A VectorTile source can only be rendered if it has a projection compatible with the view projection.\n );\n return this.tileCache;\n };\n /**\n * Get the tile pixel ratio for this source. Subclasses may override this\n * method, which is meant to return a supported pixel ratio that matches the\n * provided `pixelRatio` as close as possible.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Tile pixel ratio.\n */\n TileSource.prototype.getTilePixelRatio = function (pixelRatio) {\n return this.tilePixelRatio_;\n };\n /**\n * @param {number} z Z.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {import(\"../size.js\").Size} Tile size.\n */\n TileSource.prototype.getTilePixelSize = function (z, pixelRatio, projection) {\n var tileGrid = this.getTileGridForProjection(projection);\n var tilePixelRatio = this.getTilePixelRatio(pixelRatio);\n var tileSize = toSize(tileGrid.getTileSize(z), this.tmpSize);\n if (tilePixelRatio == 1) {\n return tileSize;\n }\n else {\n return scaleSize(tileSize, tilePixelRatio, this.tmpSize);\n }\n };\n /**\n * Returns a tile coordinate wrapped around the x-axis. When the tile coordinate\n * is outside the resolution and extent range of the tile grid, `null` will be\n * returned.\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"../proj/Projection.js\").default=} opt_projection Projection.\n * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate to be passed to the tileUrlFunction or\n * null if no tile URL should be created for the passed `tileCoord`.\n */\n TileSource.prototype.getTileCoordForTileUrlFunction = function (tileCoord, opt_projection) {\n var projection = opt_projection !== undefined ? opt_projection : this.getProjection();\n var tileGrid = this.getTileGridForProjection(projection);\n if (this.getWrapX() && projection.isGlobal()) {\n tileCoord = wrapX(tileGrid, tileCoord, projection);\n }\n return withinExtentAndZ(tileCoord, tileGrid) ? tileCoord : null;\n };\n /**\n * Remove all cached tiles from the source. The next render cycle will fetch new tiles.\n * @api\n */\n TileSource.prototype.clear = function () {\n this.tileCache.clear();\n };\n TileSource.prototype.refresh = function () {\n this.clear();\n _super.prototype.refresh.call(this);\n };\n /**\n * Increases the cache size if needed\n * @param {number} tileCount Minimum number of tiles needed.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n */\n TileSource.prototype.updateCacheSize = function (tileCount, projection) {\n var tileCache = this.getTileCacheForProjection(projection);\n if (tileCount > tileCache.highWaterMark) {\n tileCache.highWaterMark = tileCount;\n }\n };\n /**\n * Marks a tile coord as being used, without triggering a load.\n * @abstract\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n */\n TileSource.prototype.useTile = function (z, x, y, projection) { };\n return TileSource;\n}(Source));\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Tile~TileSource} instances are instances of this\n * type.\n */\nvar TileSourceEvent = /** @class */ (function (_super) {\n __extends(TileSourceEvent, _super);\n /**\n * @param {string} type Type.\n * @param {import(\"../Tile.js\").default} tile The tile.\n */\n function TileSourceEvent(type, tile) {\n var _this = _super.call(this, type) || this;\n /**\n * The tile related to the event.\n * @type {import(\"../Tile.js\").default}\n * @api\n */\n _this.tile = tile;\n return _this;\n }\n return TileSourceEvent;\n}(Event));\nexport { TileSourceEvent };\nexport default TileSource;\n//# sourceMappingURL=Tile.js.map","/**\n * @module ol/tileurlfunction\n */\nimport { assert } from './asserts.js';\nimport { modulo } from './math.js';\nimport { hash as tileCoordHash } from './tilecoord.js';\n/**\n * @param {string} template Template.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTemplate(template, tileGrid) {\n var zRegEx = /\\{z\\}/g;\n var xRegEx = /\\{x\\}/g;\n var yRegEx = /\\{y\\}/g;\n var dashYRegEx = /\\{-y\\}/g;\n return (\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile Coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {string|undefined} Tile URL.\n */\n function (tileCoord, pixelRatio, projection) {\n if (!tileCoord) {\n return undefined;\n }\n else {\n return template\n .replace(zRegEx, tileCoord[0].toString())\n .replace(xRegEx, tileCoord[1].toString())\n .replace(yRegEx, tileCoord[2].toString())\n .replace(dashYRegEx, function () {\n var z = tileCoord[0];\n var range = tileGrid.getFullTileRange(z);\n assert(range, 55); // The {-y} placeholder requires a tile grid with extent\n var y = range.getHeight() - tileCoord[2] - 1;\n return y.toString();\n });\n }\n });\n}\n/**\n * @param {Array<string>} templates Templates.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTemplates(templates, tileGrid) {\n var len = templates.length;\n var tileUrlFunctions = new Array(len);\n for (var i = 0; i < len; ++i) {\n tileUrlFunctions[i] = createFromTemplate(templates[i], tileGrid);\n }\n return createFromTileUrlFunctions(tileUrlFunctions);\n}\n/**\n * @param {Array<import(\"./Tile.js\").UrlFunction>} tileUrlFunctions Tile URL Functions.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTileUrlFunctions(tileUrlFunctions) {\n if (tileUrlFunctions.length === 1) {\n return tileUrlFunctions[0];\n }\n return (\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile Coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {string|undefined} Tile URL.\n */\n function (tileCoord, pixelRatio, projection) {\n if (!tileCoord) {\n return undefined;\n }\n else {\n var h = tileCoordHash(tileCoord);\n var index = modulo(h, tileUrlFunctions.length);\n return tileUrlFunctions[index](tileCoord, pixelRatio, projection);\n }\n });\n}\n/**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {string|undefined} Tile URL.\n */\nexport function nullTileUrlFunction(tileCoord, pixelRatio, projection) {\n return undefined;\n}\n/**\n * @param {string} url URL.\n * @return {Array<string>} Array of urls.\n */\nexport function expandUrl(url) {\n var urls = [];\n var match = /\\{([a-z])-([a-z])\\}/.exec(url);\n if (match) {\n // char range\n var startCharCode = match[1].charCodeAt(0);\n var stopCharCode = match[2].charCodeAt(0);\n var charCode = void 0;\n for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {\n urls.push(url.replace(match[0], String.fromCharCode(charCode)));\n }\n return urls;\n }\n match = /\\{(\\d+)-(\\d+)\\}/.exec(url);\n if (match) {\n // number range\n var stop_1 = parseInt(match[2], 10);\n for (var i = parseInt(match[1], 10); i <= stop_1; i++) {\n urls.push(url.replace(match[0], i.toString()));\n }\n return urls;\n }\n urls.push(url);\n return urls;\n}\n//# sourceMappingURL=tileurlfunction.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/source/UrlTile\n */\nimport TileEventType from './TileEventType.js';\nimport TileSource, { TileSourceEvent } from './Tile.js';\nimport TileState from '../TileState.js';\nimport { createFromTemplates, expandUrl } from '../tileurlfunction.js';\nimport { getKeyZXY } from '../tilecoord.js';\nimport { getUid } from '../util.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions]\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize]\n * @property {boolean} [opaque=false] Whether the layer is opaque.\n * @property {import(\"../proj.js\").ProjectionLike} [projection]\n * @property {import(\"./State.js\").default} [state]\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid]\n * @property {import(\"../Tile.js\").LoadFunction} tileLoadFunction\n * @property {number} [tilePixelRatio]\n * @property {import(\"../Tile.js\").UrlFunction} [tileUrlFunction]\n * @property {string} [url]\n * @property {Array<string>} [urls]\n * @property {boolean} [wrapX=true]\n * @property {number} [transition]\n * @property {string} [key]\n * @property {number} [zDirection=0]\n */\n/**\n * @classdesc\n * Base class for sources providing tiles divided into a tile grid over http.\n *\n * @fires import(\"./Tile.js\").TileSourceEvent\n */\nvar UrlTile = /** @class */ (function (_super) {\n __extends(UrlTile, _super);\n /**\n * @param {Options} options Image tile options.\n */\n function UrlTile(options) {\n var _this = _super.call(this, {\n attributions: options.attributions,\n cacheSize: options.cacheSize,\n opaque: options.opaque,\n projection: options.projection,\n state: options.state,\n tileGrid: options.tileGrid,\n tilePixelRatio: options.tilePixelRatio,\n wrapX: options.wrapX,\n transition: options.transition,\n key: options.key,\n attributionsCollapsible: options.attributionsCollapsible,\n zDirection: options.zDirection,\n }) || this;\n /**\n * @private\n * @type {boolean}\n */\n _this.generateTileUrlFunction_ =\n _this.tileUrlFunction === UrlTile.prototype.tileUrlFunction;\n /**\n * @protected\n * @type {import(\"../Tile.js\").LoadFunction}\n */\n _this.tileLoadFunction = options.tileLoadFunction;\n if (options.tileUrlFunction) {\n _this.tileUrlFunction = options.tileUrlFunction;\n }\n /**\n * @protected\n * @type {!Array<string>|null}\n */\n _this.urls = null;\n if (options.urls) {\n _this.setUrls(options.urls);\n }\n else if (options.url) {\n _this.setUrl(options.url);\n }\n /**\n * @private\n * @type {!Object<string, boolean>}\n */\n _this.tileLoadingKeys_ = {};\n return _this;\n }\n /**\n * Return the tile load function of the source.\n * @return {import(\"../Tile.js\").LoadFunction} TileLoadFunction\n * @api\n */\n UrlTile.prototype.getTileLoadFunction = function () {\n return this.tileLoadFunction;\n };\n /**\n * Return the tile URL function of the source.\n * @return {import(\"../Tile.js\").UrlFunction} TileUrlFunction\n * @api\n */\n UrlTile.prototype.getTileUrlFunction = function () {\n return Object.getPrototypeOf(this).tileUrlFunction === this.tileUrlFunction\n ? this.tileUrlFunction.bind(this)\n : this.tileUrlFunction;\n };\n /**\n * Return the URLs used for this source.\n * When a tileUrlFunction is used instead of url or urls,\n * null will be returned.\n * @return {!Array<string>|null} URLs.\n * @api\n */\n UrlTile.prototype.getUrls = function () {\n return this.urls;\n };\n /**\n * Handle tile change events.\n * @param {import(\"../events/Event.js\").default} event Event.\n * @protected\n */\n UrlTile.prototype.handleTileChange = function (event) {\n var tile = /** @type {import(\"../Tile.js\").default} */ (event.target);\n var uid = getUid(tile);\n var tileState = tile.getState();\n var type;\n if (tileState == TileState.LOADING) {\n this.tileLoadingKeys_[uid] = true;\n type = TileEventType.TILELOADSTART;\n }\n else if (uid in this.tileLoadingKeys_) {\n delete this.tileLoadingKeys_[uid];\n type =\n tileState == TileState.ERROR\n ? TileEventType.TILELOADERROR\n : tileState == TileState.LOADED\n ? TileEventType.TILELOADEND\n : undefined;\n }\n if (type != undefined) {\n this.dispatchEvent(new TileSourceEvent(type, tile));\n }\n };\n /**\n * Set the tile load function of the source.\n * @param {import(\"../Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n * @api\n */\n UrlTile.prototype.setTileLoadFunction = function (tileLoadFunction) {\n this.tileCache.clear();\n this.tileLoadFunction = tileLoadFunction;\n this.changed();\n };\n /**\n * Set the tile URL function of the source.\n * @param {import(\"../Tile.js\").UrlFunction} tileUrlFunction Tile URL function.\n * @param {string=} key Optional new tile key for the source.\n * @api\n */\n UrlTile.prototype.setTileUrlFunction = function (tileUrlFunction, key) {\n this.tileUrlFunction = tileUrlFunction;\n this.tileCache.pruneExceptNewestZ();\n if (typeof key !== 'undefined') {\n this.setKey(key);\n }\n else {\n this.changed();\n }\n };\n /**\n * Set the URL to use for requests.\n * @param {string} url URL.\n * @api\n */\n UrlTile.prototype.setUrl = function (url) {\n var urls = expandUrl(url);\n this.urls = urls;\n this.setUrls(urls);\n };\n /**\n * Set the URLs to use for requests.\n * @param {Array<string>} urls URLs.\n * @api\n */\n UrlTile.prototype.setUrls = function (urls) {\n this.urls = urls;\n var key = urls.join('\\n');\n if (this.generateTileUrlFunction_) {\n this.setTileUrlFunction(createFromTemplates(urls, this.tileGrid), key);\n }\n else {\n this.setKey(key);\n }\n };\n /**\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {string|undefined} Tile URL.\n */\n UrlTile.prototype.tileUrlFunction = function (tileCoord, pixelRatio, projection) {\n return undefined;\n };\n /**\n * Marks a tile coord as being used, without triggering a load.\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n */\n UrlTile.prototype.useTile = function (z, x, y) {\n var tileCoordKey = getKeyZXY(z, x, y);\n if (this.tileCache.containsKey(tileCoordKey)) {\n this.tileCache.get(tileCoordKey);\n }\n };\n return UrlTile;\n}(TileSource));\nexport default UrlTile;\n//# sourceMappingURL=UrlTile.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/source/TileImage\n */\nimport EventType from '../events/EventType.js';\nimport ImageTile from '../ImageTile.js';\nimport ReprojTile from '../reproj/Tile.js';\nimport TileCache from '../TileCache.js';\nimport TileState from '../TileState.js';\nimport UrlTile from './UrlTile.js';\nimport { ENABLE_RASTER_REPROJECTION } from '../reproj/common.js';\nimport { IMAGE_SMOOTHING_DISABLED } from './common.js';\nimport { equivalent, get as getProjection } from '../proj.js';\nimport { getKey, getKeyZXY } from '../tilecoord.js';\nimport { getForProjection as getTileGridForProjection } from '../tilegrid.js';\nimport { getUid } from '../util.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Initial tile cache size. Will auto-grow to hold at least the number of tiles in the viewport.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [imageSmoothing=true] Enable image smoothing.\n * @property {boolean} [opaque=false] Whether the layer is opaque.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {import(\"./State.js\").default} [state] Source state.\n * @property {typeof import(\"../ImageTile.js\").default} [tileClass] Class used to instantiate image tiles.\n * Default is {@link module:ol/ImageTile~ImageTile}.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] Tile grid.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n * imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service. For example, if the tile\n * service advertizes 256px by 256px tiles but actually sends 512px\n * by 512px images (for retina/hidpi devices) then `tilePixelRatio`\n * should be set to `2`.\n * @property {import(\"../Tile.js\").UrlFunction} [tileUrlFunction] Optional function to get tile URL given a tile coordinate and the projection.\n * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.\n * A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`, may be\n * used instead of defining each one separately in the `urls` option.\n * @property {Array<string>} [urls] An array of URL templates.\n * @property {boolean} [wrapX] Whether to wrap the world horizontally. The default, is to\n * request out-of-bounds tiles from the server. When set to `false`, only one\n * world will be rendered. When set to `true`, tiles will be requested for one\n * world only, but they will be wrapped horizontally to render multiple worlds.\n * @property {number} [transition] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {string} [key] Optional tile key for proper cache fetching\n * @property {number} [zDirection=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n */\n/**\n * @classdesc\n * Base class for sources providing images divided into a tile grid.\n *\n * @fires import(\"./Tile.js\").TileSourceEvent\n * @api\n */\nvar TileImage = /** @class */ (function (_super) {\n __extends(TileImage, _super);\n /**\n * @param {!Options} options Image tile options.\n */\n function TileImage(options) {\n var _this = _super.call(this, {\n attributions: options.attributions,\n cacheSize: options.cacheSize,\n opaque: options.opaque,\n projection: options.projection,\n state: options.state,\n tileGrid: options.tileGrid,\n tileLoadFunction: options.tileLoadFunction\n ? options.tileLoadFunction\n : defaultTileLoadFunction,\n tilePixelRatio: options.tilePixelRatio,\n tileUrlFunction: options.tileUrlFunction,\n url: options.url,\n urls: options.urls,\n wrapX: options.wrapX,\n transition: options.transition,\n key: options.key,\n attributionsCollapsible: options.attributionsCollapsible,\n zDirection: options.zDirection,\n }) || this;\n /**\n * @protected\n * @type {?string}\n */\n _this.crossOrigin =\n options.crossOrigin !== undefined ? options.crossOrigin : null;\n /**\n * @protected\n * @type {typeof ImageTile}\n */\n _this.tileClass =\n options.tileClass !== undefined ? options.tileClass : ImageTile;\n /**\n * @protected\n * @type {!Object<string, TileCache>}\n */\n _this.tileCacheForProjection = {};\n /**\n * @protected\n * @type {!Object<string, import(\"../tilegrid/TileGrid.js\").default>}\n */\n _this.tileGridForProjection = {};\n /**\n * @private\n * @type {number|undefined}\n */\n _this.reprojectionErrorThreshold_ = options.reprojectionErrorThreshold;\n /**\n * @private\n * @type {object|undefined}\n */\n _this.contextOptions_ =\n options.imageSmoothing === false ? IMAGE_SMOOTHING_DISABLED : undefined;\n /**\n * @private\n * @type {boolean}\n */\n _this.renderReprojectionEdges_ = false;\n return _this;\n }\n /**\n * @return {boolean} Can expire cache.\n */\n TileImage.prototype.canExpireCache = function () {\n if (!ENABLE_RASTER_REPROJECTION) {\n return _super.prototype.canExpireCache.call(this);\n }\n if (this.tileCache.canExpireCache()) {\n return true;\n }\n else {\n for (var key in this.tileCacheForProjection) {\n if (this.tileCacheForProjection[key].canExpireCache()) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @param {!Object<string, boolean>} usedTiles Used tiles.\n */\n TileImage.prototype.expireCache = function (projection, usedTiles) {\n if (!ENABLE_RASTER_REPROJECTION) {\n _super.prototype.expireCache.call(this, projection, usedTiles);\n return;\n }\n var usedTileCache = this.getTileCacheForProjection(projection);\n this.tileCache.expireCache(this.tileCache == usedTileCache ? usedTiles : {});\n for (var id in this.tileCacheForProjection) {\n var tileCache = this.tileCacheForProjection[id];\n tileCache.expireCache(tileCache == usedTileCache ? usedTiles : {});\n }\n };\n /**\n * @return {Object|undefined} Context options.\n */\n TileImage.prototype.getContextOptions = function () {\n return this.contextOptions_;\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {number} Gutter.\n */\n TileImage.prototype.getGutterForProjection = function (projection) {\n if (ENABLE_RASTER_REPROJECTION &&\n this.getProjection() &&\n projection &&\n !equivalent(this.getProjection(), projection)) {\n return 0;\n }\n else {\n return this.getGutter();\n }\n };\n /**\n * @return {number} Gutter.\n */\n TileImage.prototype.getGutter = function () {\n return 0;\n };\n /**\n * Return the key to be used for all tiles in the source.\n * @return {string} The key for all tiles.\n * @protected\n */\n TileImage.prototype.getKey = function () {\n return (_super.prototype.getKey.call(this) +\n (this.contextOptions_ ? '\\n' + JSON.stringify(this.contextOptions_) : ''));\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {boolean} Opaque.\n */\n TileImage.prototype.getOpaque = function (projection) {\n if (ENABLE_RASTER_REPROJECTION &&\n this.getProjection() &&\n projection &&\n !equivalent(this.getProjection(), projection)) {\n return false;\n }\n else {\n return _super.prototype.getOpaque.call(this, projection);\n }\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {!import(\"../tilegrid/TileGrid.js\").default} Tile grid.\n */\n TileImage.prototype.getTileGridForProjection = function (projection) {\n if (!ENABLE_RASTER_REPROJECTION) {\n return _super.prototype.getTileGridForProjection.call(this, projection);\n }\n var thisProj = this.getProjection();\n if (this.tileGrid && (!thisProj || equivalent(thisProj, projection))) {\n return this.tileGrid;\n }\n else {\n var projKey = getUid(projection);\n if (!(projKey in this.tileGridForProjection)) {\n this.tileGridForProjection[projKey] = getTileGridForProjection(projection);\n }\n return this.tileGridForProjection[projKey];\n }\n };\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {import(\"../TileCache.js\").default} Tile cache.\n */\n TileImage.prototype.getTileCacheForProjection = function (projection) {\n if (!ENABLE_RASTER_REPROJECTION) {\n return _super.prototype.getTileCacheForProjection.call(this, projection);\n }\n var thisProj = this.getProjection();\n if (!thisProj || equivalent(thisProj, projection)) {\n return this.tileCache;\n }\n else {\n var projKey = getUid(projection);\n if (!(projKey in this.tileCacheForProjection)) {\n this.tileCacheForProjection[projKey] = new TileCache(this.tileCache.highWaterMark);\n }\n return this.tileCacheForProjection[projKey];\n }\n };\n /**\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @param {string} key The key set on the tile.\n * @return {!import(\"../Tile.js\").default} Tile.\n * @private\n */\n TileImage.prototype.createTile_ = function (z, x, y, pixelRatio, projection, key) {\n var tileCoord = [z, x, y];\n var urlTileCoord = this.getTileCoordForTileUrlFunction(tileCoord, projection);\n var tileUrl = urlTileCoord\n ? this.tileUrlFunction(urlTileCoord, pixelRatio, projection)\n : undefined;\n var tile = new this.tileClass(tileCoord, tileUrl !== undefined ? TileState.IDLE : TileState.EMPTY, tileUrl !== undefined ? tileUrl : '', this.crossOrigin, this.tileLoadFunction, this.tileOptions);\n tile.key = key;\n tile.addEventListener(EventType.CHANGE, this.handleTileChange.bind(this));\n return tile;\n };\n /**\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {!import(\"../Tile.js\").default} Tile.\n */\n TileImage.prototype.getTile = function (z, x, y, pixelRatio, projection) {\n var sourceProjection = this.getProjection();\n if (!ENABLE_RASTER_REPROJECTION ||\n !sourceProjection ||\n !projection ||\n equivalent(sourceProjection, projection)) {\n return this.getTileInternal(z, x, y, pixelRatio, sourceProjection || projection);\n }\n else {\n var cache = this.getTileCacheForProjection(projection);\n var tileCoord = [z, x, y];\n var tile = void 0;\n var tileCoordKey = getKey(tileCoord);\n if (cache.containsKey(tileCoordKey)) {\n tile = cache.get(tileCoordKey);\n }\n var key = this.getKey();\n if (tile && tile.key == key) {\n return tile;\n }\n else {\n var sourceTileGrid = this.getTileGridForProjection(sourceProjection);\n var targetTileGrid = this.getTileGridForProjection(projection);\n var wrappedTileCoord = this.getTileCoordForTileUrlFunction(tileCoord, projection);\n var newTile = new ReprojTile(sourceProjection, sourceTileGrid, projection, targetTileGrid, tileCoord, wrappedTileCoord, this.getTilePixelRatio(pixelRatio), this.getGutter(), function (z, x, y, pixelRatio) {\n return this.getTileInternal(z, x, y, pixelRatio, sourceProjection);\n }.bind(this), this.reprojectionErrorThreshold_, this.renderReprojectionEdges_, this.contextOptions_);\n newTile.key = key;\n if (tile) {\n newTile.interimTile = tile;\n newTile.refreshInterimChain();\n cache.replace(tileCoordKey, newTile);\n }\n else {\n cache.set(tileCoordKey, newTile);\n }\n return newTile;\n }\n }\n };\n /**\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {number} pixelRatio Pixel ratio.\n * @param {!import(\"../proj/Projection.js\").default} projection Projection.\n * @return {!import(\"../Tile.js\").default} Tile.\n * @protected\n */\n TileImage.prototype.getTileInternal = function (z, x, y, pixelRatio, projection) {\n var tile = null;\n var tileCoordKey = getKeyZXY(z, x, y);\n var key = this.getKey();\n if (!this.tileCache.containsKey(tileCoordKey)) {\n tile = this.createTile_(z, x, y, pixelRatio, projection, key);\n this.tileCache.set(tileCoordKey, tile);\n }\n else {\n tile = this.tileCache.get(tileCoordKey);\n if (tile.key != key) {\n // The source's params changed. If the tile has an interim tile and if we\n // can use it then we use it. Otherwise we create a new tile. In both\n // cases we attempt to assign an interim tile to the new tile.\n var interimTile = tile;\n tile = this.createTile_(z, x, y, pixelRatio, projection, key);\n //make the new tile the head of the list,\n if (interimTile.getState() == TileState.IDLE) {\n //the old tile hasn't begun loading yet, and is now outdated, so we can simply discard it\n tile.interimTile = interimTile.interimTile;\n }\n else {\n tile.interimTile = interimTile;\n }\n tile.refreshInterimChain();\n this.tileCache.replace(tileCoordKey, tile);\n }\n }\n return tile;\n };\n /**\n * Sets whether to render reprojection edges or not (usually for debugging).\n * @param {boolean} render Render the edges.\n * @api\n */\n TileImage.prototype.setRenderReprojectionEdges = function (render) {\n if (!ENABLE_RASTER_REPROJECTION ||\n this.renderReprojectionEdges_ == render) {\n return;\n }\n this.renderReprojectionEdges_ = render;\n for (var id in this.tileCacheForProjection) {\n this.tileCacheForProjection[id].clear();\n }\n this.changed();\n };\n /**\n * Sets the tile grid to use when reprojecting the tiles to the given\n * projection instead of the default tile grid for the projection.\n *\n * This can be useful when the default tile grid cannot be created\n * (e.g. projection has no extent defined) or\n * for optimization reasons (custom tile size, resolutions, ...).\n *\n * @param {import(\"../proj.js\").ProjectionLike} projection Projection.\n * @param {import(\"../tilegrid/TileGrid.js\").default} tilegrid Tile grid to use for the projection.\n * @api\n */\n TileImage.prototype.setTileGridForProjection = function (projection, tilegrid) {\n if (ENABLE_RASTER_REPROJECTION) {\n var proj = getProjection(projection);\n if (proj) {\n var projKey = getUid(proj);\n if (!(projKey in this.tileGridForProjection)) {\n this.tileGridForProjection[projKey] = tilegrid;\n }\n }\n }\n };\n return TileImage;\n}(UrlTile));\n/**\n * @param {ImageTile} imageTile Image tile.\n * @param {string} src Source.\n */\nfunction defaultTileLoadFunction(imageTile, src) {\n /** @type {HTMLImageElement|HTMLVideoElement} */ (imageTile.getImage()).src = src;\n}\nexport default TileImage;\n//# sourceMappingURL=TileImage.js.map","/**\n * @module ol/source/XYZ\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport TileImage from './TileImage.js';\nimport { createXYZ, extentFromProjection } from '../tilegrid.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Initial tile cache size. Will auto-grow to hold at least the number of tiles in the viewport.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [imageSmoothing=true] Enable image smoothing.\n * @property {boolean} [opaque=false] Whether the layer is opaque.\n * @property {import(\"../proj.js\").ProjectionLike} [projection='EPSG:3857'] Projection.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {number} [maxZoom=42] Optional max zoom level. Not used if `tileGrid` is provided.\n * @property {number} [minZoom=0] Optional min zoom level. Not used if `tileGrid` is provided.\n * @property {number} [maxResolution] Optional tile grid resolution at level zero. Not used if `tileGrid` is provided.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] Tile grid.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n * imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service.\n * For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px\n * by 512px images (for retina/hidpi devices) then `tilePixelRatio`\n * should be set to `2`.\n * @property {number|import(\"../size.js\").Size} [tileSize=[256, 256]] The tile size used by the tile service.\n * Not used if `tileGrid` is provided.\n * @property {import(\"../Tile.js\").UrlFunction} [tileUrlFunction] Optional function to get\n * tile URL given a tile coordinate and the projection.\n * Required if `url` or `urls` are not provided.\n * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`,\n * and `{z}` placeholders. A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`,\n * may be used instead of defining each one separately in the `urls` option.\n * @property {Array<string>} [urls] An array of URL templates.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n * @property {number} [transition=250] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {number} [zDirection=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n */\n/**\n * @classdesc\n * Layer source for tile data with URLs in a set XYZ format that are\n * defined in a URL template. By default, this follows the widely-used\n * Google grid where `x` 0 and `y` 0 are in the top left. Grids like\n * TMS where `x` 0 and `y` 0 are in the bottom left can be used by\n * using the `{-y}` placeholder in the URL template, so long as the\n * source does not have a custom tile grid. In this case\n * a `tileUrlFunction` can be used, such as:\n * ```js\n * tileUrlFunction: function(coordinate) {\n * return 'http://mapserver.com/' + coordinate[0] + '/' +\n * coordinate[1] + '/' + (-coordinate[2] - 1) + '.png';\n * }\n * ```\n * @api\n */\nvar XYZ = /** @class */ (function (_super) {\n __extends(XYZ, _super);\n /**\n * @param {Options=} opt_options XYZ options.\n */\n function XYZ(opt_options) {\n var _this = this;\n var options = opt_options || {};\n var projection = options.projection !== undefined ? options.projection : 'EPSG:3857';\n var tileGrid = options.tileGrid !== undefined\n ? options.tileGrid\n : createXYZ({\n extent: extentFromProjection(projection),\n maxResolution: options.maxResolution,\n maxZoom: options.maxZoom,\n minZoom: options.minZoom,\n tileSize: options.tileSize,\n });\n _this = _super.call(this, {\n attributions: options.attributions,\n cacheSize: options.cacheSize,\n crossOrigin: options.crossOrigin,\n imageSmoothing: options.imageSmoothing,\n opaque: options.opaque,\n projection: projection,\n reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n tileGrid: tileGrid,\n tileLoadFunction: options.tileLoadFunction,\n tilePixelRatio: options.tilePixelRatio,\n tileUrlFunction: options.tileUrlFunction,\n url: options.url,\n urls: options.urls,\n wrapX: options.wrapX !== undefined ? options.wrapX : true,\n transition: options.transition,\n attributionsCollapsible: options.attributionsCollapsible,\n zDirection: options.zDirection,\n }) || this;\n return _this;\n }\n return XYZ;\n}(TileImage));\nexport default XYZ;\n//# sourceMappingURL=XYZ.js.map","/**\n * @module ol/ViewProperty\n */\n/**\n * @enum {string}\n */\nexport default {\n CENTER: 'center',\n RESOLUTION: 'resolution',\n ROTATION: 'rotation',\n};\n//# sourceMappingURL=ViewProperty.js.map","/**\n * @module ol/centerconstraint\n */\nimport { clamp } from './math.js';\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array<number>=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n return (\n /**\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n * @param {number} resolution Resolution.\n * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n * @param {Array<number>=} opt_centerShift Shift between map center and viewport center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\n function (center, resolution, size, opt_isMoving, opt_centerShift) {\n if (center) {\n var viewWidth = onlyCenter ? 0 : size[0] * resolution;\n var viewHeight = onlyCenter ? 0 : size[1] * resolution;\n var shiftX = opt_centerShift ? opt_centerShift[0] : 0;\n var shiftY = opt_centerShift ? opt_centerShift[1] : 0;\n var minX = extent[0] + viewWidth / 2 + shiftX;\n var maxX = extent[2] - viewWidth / 2 + shiftX;\n var minY = extent[1] + viewHeight / 2 + shiftY;\n var maxY = extent[3] - viewHeight / 2 + shiftY;\n // note: when zooming out of bounds, min and max values for x and y may\n // end up inverted (min > max); this has to be accounted for\n if (minX > maxX) {\n minX = (maxX + minX) / 2;\n maxX = minX;\n }\n if (minY > maxY) {\n minY = (maxY + minY) / 2;\n maxY = minY;\n }\n var x = clamp(center[0], minX, maxX);\n var y = clamp(center[1], minY, maxY);\n var ratio = 30 * resolution;\n // during an interaction, allow some overscroll\n if (opt_isMoving && smooth) {\n x +=\n -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n y +=\n -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n }\n return [x, y];\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate=} center Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n return center;\n}\n//# sourceMappingURL=centerconstraint.js.map","/**\n * @module ol/resolutionconstraint\n */\nimport { clamp } from './math.js';\nimport { getHeight, getWidth } from './extent.js';\nimport { linearFindNearest } from './array.js';\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(resolution, maxExtent, viewportSize, showFullExtent) {\n var xResolution = getWidth(maxExtent) / viewportSize[0];\n var yResolution = getHeight(maxExtent) / viewportSize[1];\n if (showFullExtent) {\n return Math.min(resolution, Math.max(xResolution, yResolution));\n }\n return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n * - at 1, ln(x) is 0\n * - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n var result = Math.min(resolution, maxResolution);\n var ratio = 50;\n result *=\n Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n 1;\n if (minResolution) {\n result = Math.max(result, minResolution);\n result /=\n Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n ratio +\n 1;\n }\n return clamp(result, minResolution / 2, maxResolution * 2);\n}\n/**\n * @param {Array<number>} resolutions Resolutions.\n * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent=} opt_maxExtent Maximum allowed extent.\n * @param {boolean=} opt_showFullExtent If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n var maxResolution = resolutions[0];\n var minResolution = resolutions[resolutions.length - 1];\n var cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n : maxResolution;\n // during interacting or animating, allow intermediary values\n if (opt_isMoving) {\n var smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n }\n var capped = Math.min(cappedMaxRes, resolution);\n var z = Math.floor(linearFindNearest(resolutions, capped, direction));\n if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n return resolutions[z + 1];\n }\n return resolutions[z];\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number=} opt_minResolution Minimum resolution.\n * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent=} opt_maxExtent Maximum allowed extent.\n * @param {boolean=} opt_showFullExtent If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n var cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n : maxResolution;\n var minResolution = opt_minResolution !== undefined ? opt_minResolution : 0;\n // during interacting or animating, allow intermediary values\n if (opt_isMoving) {\n var smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n }\n var tolerance = 1e-9;\n var minZoomLevel = Math.ceil(Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance);\n var offset = -direction * (0.5 - tolerance) + 0.5;\n var capped = Math.min(cappedMaxRes, resolution);\n var cappedZoomLevel = Math.floor(Math.log(maxResolution / capped) / Math.log(power) + offset);\n var zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n var newResolution = maxResolution / Math.pow(power, zoomLevel);\n return clamp(newResolution, minResolution, cappedMaxRes);\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent=} opt_maxExtent Maximum allowed extent.\n * @param {boolean=} opt_showFullExtent If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n var cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n : maxResolution;\n var smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth || !opt_isMoving) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n }\n else {\n return undefined;\n }\n });\n}\n//# sourceMappingURL=resolutionconstraint.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/View\n */\nimport BaseObject from './Object.js';\nimport GeometryType from './geom/GeometryType.js';\nimport Units from './proj/Units.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport { DEFAULT_TILE_SIZE } from './tilegrid/common.js';\nimport { METERS_PER_UNIT, createProjection, fromUserCoordinate, fromUserExtent, getUserProjection, toUserCoordinate, toUserExtent, } from './proj.js';\nimport { VOID } from './functions.js';\nimport { add as addCoordinate, equals as coordinatesEqual, rotate as rotateCoordinate, } from './coordinate.js';\nimport { assert } from './asserts.js';\nimport { assign } from './obj.js';\nimport { none as centerNone, createExtent } from './centerconstraint.js';\nimport { clamp, modulo } from './math.js';\nimport { createMinMaxResolution } from './resolutionconstraint.js';\nimport { createSnapToN, createSnapToZero, disable, none as rotationNone, } from './rotationconstraint.js';\nimport { createSnapToPower, createSnapToResolutions, } from './resolutionconstraint.js';\nimport { easeOut } from './easing.js';\nimport { equals } from './coordinate.js';\nimport { getCenter, getForViewAndSize, getHeight, getWidth, isEmpty, } from './extent.js';\nimport { inAndOut } from './easing.js';\nimport { linearFindNearest } from './array.js';\nimport { fromExtent as polygonFromExtent } from './geom/Polygon.js';\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter]\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter]\n * @property {number} [sourceResolution]\n * @property {number} [targetResolution]\n * @property {number} [sourceRotation]\n * @property {number} [targetRotation]\n * @property {import(\"./coordinate.js\").Coordinate} [anchor]\n * @property {number} start\n * @property {number} duration\n * @property {boolean} complete\n * @property {function(number):number} easing\n * @property {function(boolean):void} callback\n */\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center\n * @property {import(\"./resolutionconstraint.js\").Type} resolution\n * @property {import(\"./rotationconstraint.js\").Type} rotation\n */\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to fit\n * the extent into. Default is the current size of the first map in the DOM that\n * uses this view, or `[100, 100]` if no such map is found.\n * @property {!Array<number>} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing~inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint. It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`. If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`. Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`. Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge. If `true` the map\n * may show multiple worlds at low zoom levels. Only used if the `projection` is\n * global. Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array<number>} [resolutions] Resolutions to determine the\n * resolution constraint. If set the `maxResolution`, `minResolution`,\n * `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array<number>} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation. If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing~inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center\n * @property {import(\"./proj/Projection.js\").default} projection\n * @property {number} resolution\n * @property {number} rotation\n * @property {number} zoom\n */\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nvar DEFAULT_MIN_ZOOM = 0;\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Spherical Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `opt_anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nvar View = /** @class */ (function (_super) {\n __extends(View, _super);\n /**\n * @param {ViewOptions=} opt_options View options.\n */\n function View(opt_options) {\n var _this = _super.call(this) || this;\n var options = assign({}, opt_options);\n /**\n * @private\n * @type {Array<number>}\n */\n _this.hints_ = [0, 0];\n /**\n * @private\n * @type {Array<Array<Animation>>}\n */\n _this.animations_ = [];\n /**\n * @private\n * @type {number|undefined}\n */\n _this.updateAnimationKey_;\n /**\n * @private\n * @const\n * @type {import(\"./proj/Projection.js\").default}\n */\n _this.projection_ = createProjection(options.projection, 'EPSG:3857');\n /**\n * @private\n * @type {import(\"./size.js\").Size}\n */\n _this.viewportSize_ = [100, 100];\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n _this.targetCenter_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.targetResolution_;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.targetRotation_;\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n _this.cancelAnchor_ = undefined;\n if (options.center) {\n options.center = fromUserCoordinate(options.center, _this.projection_);\n }\n if (options.extent) {\n options.extent = fromUserExtent(options.extent, _this.projection_);\n }\n _this.applyOptions_(options);\n return _this;\n }\n /**\n * Set up the view with the given options.\n * @param {ViewOptions} options View options.\n */\n View.prototype.applyOptions_ = function (options) {\n /**\n * @type {Object<string, *>}\n */\n var properties = {};\n var resolutionConstraintInfo = createResolutionConstraint(options);\n /**\n * @private\n * @type {number}\n */\n this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n /**\n * @private\n * @type {number}\n */\n this.minResolution_ = resolutionConstraintInfo.minResolution;\n /**\n * @private\n * @type {number}\n */\n this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n /**\n * @private\n * @type {Array<number>|undefined}\n */\n this.resolutions_ = options.resolutions;\n /**\n * Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from that\n * content. The order of the values in the array is top, right, bottom, left.\n * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n * @type {Array<number>|undefined}\n * @api\n */\n this.padding = options.padding;\n /**\n * @private\n * @type {number}\n */\n this.minZoom_ = resolutionConstraintInfo.minZoom;\n var centerConstraint = createCenterConstraint(options);\n var resolutionConstraint = resolutionConstraintInfo.constraint;\n var rotationConstraint = createRotationConstraint(options);\n /**\n * @private\n * @type {Constraints}\n */\n this.constraints_ = {\n center: centerConstraint,\n resolution: resolutionConstraint,\n rotation: rotationConstraint,\n };\n this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n this.setCenterInternal(options.center !== undefined ? options.center : null);\n if (options.resolution !== undefined) {\n this.setResolution(options.resolution);\n }\n else if (options.zoom !== undefined) {\n this.setZoom(options.zoom);\n }\n this.setProperties(properties);\n /**\n * @private\n * @type {ViewOptions}\n */\n this.options_ = options;\n };\n /**\n * Get an updated version of the view options used to construct the view. The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options. The provided options can be used to apply new min/max zoom or\n * resolution limits.\n * @param {ViewOptions} newOptions New options to be applied.\n * @return {ViewOptions} New options updated with the current view state.\n */\n View.prototype.getUpdatedOptions_ = function (newOptions) {\n var options = assign({}, this.options_);\n // preserve resolution (or zoom)\n if (options.resolution !== undefined) {\n options.resolution = this.getResolution();\n }\n else {\n options.zoom = this.getZoom();\n }\n // preserve center\n options.center = this.getCenterInternal();\n // preserve rotation\n options.rotation = this.getRotation();\n return assign({}, options, newOptions);\n };\n /**\n * Animate the view. The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states. For example,\n * to animate the view to a new zoom level:\n *\n * view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing. You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link module:ol/easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects. For example, to first zoom and then pan:\n *\n * view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series. The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n * options. Multiple animations can be run in series by passing multiple\n * options objects. To run multiple animations in parallel, call the method\n * multiple times. An optional callback can be provided as a final\n * argument. The callback will be called with a boolean indicating whether\n * the animation completed without being cancelled.\n * @api\n */\n View.prototype.animate = function (var_args) {\n if (this.isDef() && !this.getAnimating()) {\n this.resolveConstraints(0);\n }\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n var options = arguments[i];\n if (options.center) {\n options = assign({}, options);\n options.center = fromUserCoordinate(options.center, this.getProjection());\n }\n if (options.anchor) {\n options = assign({}, options);\n options.anchor = fromUserCoordinate(options.anchor, this.getProjection());\n }\n args[i] = options;\n }\n this.animateInternal.apply(this, args);\n };\n /**\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n */\n View.prototype.animateInternal = function (var_args) {\n var animationCount = arguments.length;\n var callback;\n if (animationCount > 1 &&\n typeof arguments[animationCount - 1] === 'function') {\n callback = arguments[animationCount - 1];\n --animationCount;\n }\n if (!this.isDef()) {\n // if view properties are not yet set, shortcut to the final state\n var state = arguments[animationCount - 1];\n if (state.center) {\n this.setCenterInternal(state.center);\n }\n if (state.zoom !== undefined) {\n this.setZoom(state.zoom);\n }\n if (state.rotation !== undefined) {\n this.setRotation(state.rotation);\n }\n if (callback) {\n animationCallback(callback, true);\n }\n return;\n }\n var start = Date.now();\n var center = this.targetCenter_.slice();\n var resolution = this.targetResolution_;\n var rotation = this.targetRotation_;\n var series = [];\n for (var i = 0; i < animationCount; ++i) {\n var options = /** @type {AnimationOptions} */ (arguments[i]);\n var animation = {\n start: start,\n complete: false,\n anchor: options.anchor,\n duration: options.duration !== undefined ? options.duration : 1000,\n easing: options.easing || inAndOut,\n callback: callback,\n };\n if (options.center) {\n animation.sourceCenter = center;\n animation.targetCenter = options.center.slice();\n center = animation.targetCenter;\n }\n if (options.zoom !== undefined) {\n animation.sourceResolution = resolution;\n animation.targetResolution = this.getResolutionForZoom(options.zoom);\n resolution = animation.targetResolution;\n }\n else if (options.resolution) {\n animation.sourceResolution = resolution;\n animation.targetResolution = options.resolution;\n resolution = animation.targetResolution;\n }\n if (options.rotation !== undefined) {\n animation.sourceRotation = rotation;\n var delta = modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n animation.targetRotation = rotation + delta;\n rotation = animation.targetRotation;\n }\n // check if animation is a no-op\n if (isNoopAnimation(animation)) {\n animation.complete = true;\n // we still push it onto the series for callback handling\n }\n else {\n start += animation.duration;\n }\n series.push(animation);\n }\n this.animations_.push(series);\n this.setHint(ViewHint.ANIMATING, 1);\n this.updateAnimations_();\n };\n /**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\n View.prototype.getAnimating = function () {\n return this.hints_[ViewHint.ANIMATING] > 0;\n };\n /**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\n View.prototype.getInteracting = function () {\n return this.hints_[ViewHint.INTERACTING] > 0;\n };\n /**\n * Cancel any ongoing animations.\n * @api\n */\n View.prototype.cancelAnimations = function () {\n this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n var anchor;\n for (var i = 0, ii = this.animations_.length; i < ii; ++i) {\n var series = this.animations_[i];\n if (series[0].callback) {\n animationCallback(series[0].callback, false);\n }\n if (!anchor) {\n for (var j = 0, jj = series.length; j < jj; ++j) {\n var animation = series[j];\n if (!animation.complete) {\n anchor = animation.anchor;\n break;\n }\n }\n }\n }\n this.animations_.length = 0;\n this.cancelAnchor_ = anchor;\n };\n /**\n * Update all animations.\n */\n View.prototype.updateAnimations_ = function () {\n if (this.updateAnimationKey_ !== undefined) {\n cancelAnimationFrame(this.updateAnimationKey_);\n this.updateAnimationKey_ = undefined;\n }\n if (!this.getAnimating()) {\n return;\n }\n var now = Date.now();\n var more = false;\n for (var i = this.animations_.length - 1; i >= 0; --i) {\n var series = this.animations_[i];\n var seriesComplete = true;\n for (var j = 0, jj = series.length; j < jj; ++j) {\n var animation = series[j];\n if (animation.complete) {\n continue;\n }\n var elapsed = now - animation.start;\n var fraction = animation.duration > 0 ? elapsed / animation.duration : 1;\n if (fraction >= 1) {\n animation.complete = true;\n fraction = 1;\n }\n else {\n seriesComplete = false;\n }\n var progress = animation.easing(fraction);\n if (animation.sourceCenter) {\n var x0 = animation.sourceCenter[0];\n var y0 = animation.sourceCenter[1];\n var x1 = animation.targetCenter[0];\n var y1 = animation.targetCenter[1];\n var x = x0 + progress * (x1 - x0);\n var y = y0 + progress * (y1 - y0);\n this.targetCenter_ = [x, y];\n }\n if (animation.sourceResolution && animation.targetResolution) {\n var resolution = progress === 1\n ? animation.targetResolution\n : animation.sourceResolution +\n progress *\n (animation.targetResolution - animation.sourceResolution);\n if (animation.anchor) {\n var size = this.getViewportSize_(this.getRotation());\n var constrainedResolution = this.constraints_.resolution(resolution, 0, size, true);\n this.targetCenter_ = this.calculateCenterZoom(constrainedResolution, animation.anchor);\n }\n this.targetResolution_ = resolution;\n this.applyTargetState_(true);\n }\n if (animation.sourceRotation !== undefined &&\n animation.targetRotation !== undefined) {\n var rotation = progress === 1\n ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n Math.PI\n : animation.sourceRotation +\n progress *\n (animation.targetRotation - animation.sourceRotation);\n if (animation.anchor) {\n var constrainedRotation = this.constraints_.rotation(rotation, true);\n this.targetCenter_ = this.calculateCenterRotate(constrainedRotation, animation.anchor);\n }\n this.targetRotation_ = rotation;\n }\n this.applyTargetState_(true);\n more = true;\n if (!animation.complete) {\n break;\n }\n }\n if (seriesComplete) {\n this.animations_[i] = null;\n this.setHint(ViewHint.ANIMATING, -1);\n var callback = series[0].callback;\n if (callback) {\n animationCallback(callback, true);\n }\n }\n }\n // prune completed series\n this.animations_ = this.animations_.filter(Boolean);\n if (more && this.updateAnimationKey_ === undefined) {\n this.updateAnimationKey_ = requestAnimationFrame(this.updateAnimations_.bind(this));\n }\n };\n /**\n * @param {number} rotation Target rotation.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n */\n View.prototype.calculateCenterRotate = function (rotation, anchor) {\n var center;\n var currentCenter = this.getCenterInternal();\n if (currentCenter !== undefined) {\n center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n rotateCoordinate(center, rotation - this.getRotation());\n addCoordinate(center, anchor);\n }\n return center;\n };\n /**\n * @param {number} resolution Target resolution.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n */\n View.prototype.calculateCenterZoom = function (resolution, anchor) {\n var center;\n var currentCenter = this.getCenterInternal();\n var currentResolution = this.getResolution();\n if (currentCenter !== undefined && currentResolution !== undefined) {\n var x = anchor[0] -\n (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n var y = anchor[1] -\n (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n center = [x, y];\n }\n return center;\n };\n /**\n * Returns the current viewport size.\n * @private\n * @param {number=} opt_rotation Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n */\n View.prototype.getViewportSize_ = function (opt_rotation) {\n var size = this.viewportSize_;\n if (opt_rotation) {\n var w = size[0];\n var h = size[1];\n return [\n Math.abs(w * Math.cos(opt_rotation)) +\n Math.abs(h * Math.sin(opt_rotation)),\n Math.abs(w * Math.sin(opt_rotation)) +\n Math.abs(h * Math.cos(opt_rotation)),\n ];\n }\n else {\n return size;\n }\n };\n /**\n * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n * to avoid performance hit and layout reflow.\n * This should be done on map size change.\n * Note: the constraints are not resolved during an animation to avoid stopping it\n * @param {import(\"./size.js\").Size=} opt_size Viewport size; if undefined, [100, 100] is assumed\n */\n View.prototype.setViewportSize = function (opt_size) {\n this.viewportSize_ = Array.isArray(opt_size)\n ? opt_size.slice()\n : [100, 100];\n if (!this.getAnimating()) {\n this.resolveConstraints(0);\n }\n };\n /**\n * Get the view center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\n View.prototype.getCenter = function () {\n var center = this.getCenterInternal();\n if (!center) {\n return center;\n }\n return toUserCoordinate(center, this.getProjection());\n };\n /**\n * Get the view center without transforming to user projection.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n */\n View.prototype.getCenterInternal = function () {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (this.get(ViewProperty.CENTER));\n };\n /**\n * @return {Constraints} Constraints.\n */\n View.prototype.getConstraints = function () {\n return this.constraints_;\n };\n /**\n * @return {boolean} Resolution constraint is set\n */\n View.prototype.getConstrainResolution = function () {\n return this.options_.constrainResolution;\n };\n /**\n * @param {Array<number>=} opt_hints Destination array.\n * @return {Array<number>} Hint.\n */\n View.prototype.getHints = function (opt_hints) {\n if (opt_hints !== undefined) {\n opt_hints[0] = this.hints_[0];\n opt_hints[1] = this.hints_[1];\n return opt_hints;\n }\n else {\n return this.hints_.slice();\n }\n };\n /**\n * Calculate the extent for the current view state and the passed size.\n * The size is the pixel dimensions of the box into which the calculated extent\n * should fit. In most cases you want to get the extent of the entire map,\n * that is `map.getSize()`.\n * @param {import(\"./size.js\").Size=} opt_size Box pixel size. If not provided, the size\n * of the map that uses this view will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n * @api\n */\n View.prototype.calculateExtent = function (opt_size) {\n var extent = this.calculateExtentInternal(opt_size);\n return toUserExtent(extent, this.getProjection());\n };\n /**\n * @param {import(\"./size.js\").Size=} opt_size Box pixel size. If not provided,\n * the map's last known viewport size will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n View.prototype.calculateExtentInternal = function (opt_size) {\n var size = opt_size || this.getViewportSize_();\n var center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (this.getCenterInternal());\n assert(center, 1); // The view center is not defined\n var resolution = /** @type {!number} */ (this.getResolution());\n assert(resolution !== undefined, 2); // The view resolution is not defined\n var rotation = /** @type {!number} */ (this.getRotation());\n assert(rotation !== undefined, 3); // The view rotation is not defined\n return getForViewAndSize(center, resolution, rotation, size);\n };\n /**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\n View.prototype.getMaxResolution = function () {\n return this.maxResolution_;\n };\n /**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\n View.prototype.getMinResolution = function () {\n return this.minResolution_;\n };\n /**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\n View.prototype.getMaxZoom = function () {\n return /** @type {number} */ (this.getZoomForResolution(this.minResolution_));\n };\n /**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\n View.prototype.setMaxZoom = function (zoom) {\n this.applyOptions_(this.getUpdatedOptions_({ maxZoom: zoom }));\n };\n /**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\n View.prototype.getMinZoom = function () {\n return /** @type {number} */ (this.getZoomForResolution(this.maxResolution_));\n };\n /**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\n View.prototype.setMinZoom = function (zoom) {\n this.applyOptions_(this.getUpdatedOptions_({ minZoom: zoom }));\n };\n /**\n * Set whether the view shoud allow intermediary zoom levels.\n * @param {boolean} enabled Whether the resolution is constrained.\n * @api\n */\n View.prototype.setConstrainResolution = function (enabled) {\n this.applyOptions_(this.getUpdatedOptions_({ constrainResolution: enabled }));\n };\n /**\n * Get the view projection.\n * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n * @api\n */\n View.prototype.getProjection = function () {\n return this.projection_;\n };\n /**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\n View.prototype.getResolution = function () {\n return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n };\n /**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the View, or undefined if none were given.\n * @return {Array<number>|undefined} The resolutions of the view.\n * @api\n */\n View.prototype.getResolutions = function () {\n return this.resolutions_;\n };\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size=} opt_size Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n * @api\n */\n View.prototype.getResolutionForExtent = function (extent, opt_size) {\n return this.getResolutionForExtentInternal(fromUserExtent(extent, this.getProjection()), opt_size);\n };\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size=} opt_size Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n */\n View.prototype.getResolutionForExtentInternal = function (extent, opt_size) {\n var size = opt_size || this.getViewportSize_();\n var xResolution = getWidth(extent) / size[0];\n var yResolution = getHeight(extent) / size[1];\n return Math.max(xResolution, yResolution);\n };\n /**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number=} opt_power Power.\n * @return {function(number): number} Resolution for value function.\n */\n View.prototype.getResolutionForValueFunction = function (opt_power) {\n var power = opt_power || 2;\n var maxResolution = this.getConstrainedResolution(this.maxResolution_);\n var minResolution = this.minResolution_;\n var max = Math.log(maxResolution / minResolution) / Math.log(power);\n return (\n /**\n * @param {number} value Value.\n * @return {number} Resolution.\n */\n function (value) {\n var resolution = maxResolution / Math.pow(power, value * max);\n return resolution;\n });\n };\n /**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\n View.prototype.getRotation = function () {\n return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n };\n /**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number=} opt_power Power.\n * @return {function(number): number} Value for resolution function.\n */\n View.prototype.getValueForResolutionFunction = function (opt_power) {\n var logPower = Math.log(opt_power || 2);\n var maxResolution = this.getConstrainedResolution(this.maxResolution_);\n var minResolution = this.minResolution_;\n var max = Math.log(maxResolution / minResolution) / logPower;\n return (\n /**\n * @param {number} resolution Resolution.\n * @return {number} Value.\n */\n function (resolution) {\n var value = Math.log(maxResolution / resolution) / logPower / max;\n return value;\n });\n };\n /**\n * Returns the size of the viewport minus padding.\n * @private\n * @param {number=} opt_rotation Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n */\n View.prototype.getViewportSizeMinusPadding_ = function (opt_rotation) {\n var size = this.getViewportSize_(opt_rotation);\n var padding = this.padding;\n if (padding) {\n size = [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ];\n }\n return size;\n };\n /**\n * @return {State} View state.\n */\n View.prototype.getState = function () {\n var projection = this.getProjection();\n var resolution = /** @type {number} */ (this.getResolution());\n var rotation = this.getRotation();\n var center = /** @type {import(\"./coordinate.js\").Coordinate} */ (this.getCenterInternal());\n var padding = this.padding;\n if (padding) {\n var reducedSize = this.getViewportSizeMinusPadding_();\n center = calculateCenterOn(center, this.getViewportSize_(), [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]], resolution, rotation);\n }\n return {\n center: center.slice(0),\n projection: projection !== undefined ? projection : null,\n resolution: resolution,\n rotation: rotation,\n zoom: this.getZoom(),\n };\n };\n /**\n * Get the current zoom level. This method may return non-integer zoom levels\n * if the view does not constrain the resolution, or if an interaction or\n * animation is underway.\n * @return {number|undefined} Zoom.\n * @api\n */\n View.prototype.getZoom = function () {\n var zoom;\n var resolution = this.getResolution();\n if (resolution !== undefined) {\n zoom = this.getZoomForResolution(resolution);\n }\n return zoom;\n };\n /**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\n View.prototype.getZoomForResolution = function (resolution) {\n var offset = this.minZoom_ || 0;\n var max, zoomFactor;\n if (this.resolutions_) {\n var nearest = linearFindNearest(this.resolutions_, resolution, 1);\n offset = nearest;\n max = this.resolutions_[nearest];\n if (nearest == this.resolutions_.length - 1) {\n zoomFactor = 2;\n }\n else {\n zoomFactor = max / this.resolutions_[nearest + 1];\n }\n }\n else {\n max = this.maxResolution_;\n zoomFactor = this.zoomFactor_;\n }\n return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n };\n /**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\n View.prototype.getResolutionForZoom = function (zoom) {\n if (this.resolutions_) {\n if (this.resolutions_.length <= 1) {\n return 0;\n }\n var baseLevel = clamp(Math.floor(zoom), 0, this.resolutions_.length - 2);\n var zoomFactor = this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n return (this.resolutions_[baseLevel] /\n Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1)));\n }\n else {\n return (this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_));\n }\n };\n /**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n * extent to fit the view to.\n * @param {FitOptions=} opt_options Options.\n * @api\n */\n View.prototype.fit = function (geometryOrExtent, opt_options) {\n /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n var geometry;\n assert(Array.isArray(geometryOrExtent) ||\n typeof ( /** @type {?} */(geometryOrExtent).getSimplifiedGeometry) ===\n 'function', 24); // Invalid extent or geometry provided as `geometry`\n if (Array.isArray(geometryOrExtent)) {\n assert(!isEmpty(geometryOrExtent), 25); // Cannot fit empty extent provided as `geometry`\n var extent = fromUserExtent(geometryOrExtent, this.getProjection());\n geometry = polygonFromExtent(extent);\n }\n else if (geometryOrExtent.getType() === GeometryType.CIRCLE) {\n var extent = fromUserExtent(geometryOrExtent.getExtent(), this.getProjection());\n geometry = polygonFromExtent(extent);\n geometry.rotate(this.getRotation(), getCenter(extent));\n }\n else {\n var userProjection = getUserProjection();\n if (userProjection) {\n geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometryOrExtent\n .clone()\n .transform(userProjection, this.getProjection()));\n }\n else {\n geometry = geometryOrExtent;\n }\n }\n this.fitInternal(geometry, opt_options);\n };\n /**\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @param {FitOptions=} opt_options Options.\n */\n View.prototype.fitInternal = function (geometry, opt_options) {\n var options = opt_options || {};\n var size = options.size;\n if (!size) {\n size = this.getViewportSizeMinusPadding_();\n }\n var padding = options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n var nearest = options.nearest !== undefined ? options.nearest : false;\n var minResolution;\n if (options.minResolution !== undefined) {\n minResolution = options.minResolution;\n }\n else if (options.maxZoom !== undefined) {\n minResolution = this.getResolutionForZoom(options.maxZoom);\n }\n else {\n minResolution = 0;\n }\n var coords = geometry.getFlatCoordinates();\n // calculate rotated extent\n var rotation = this.getRotation();\n var cosAngle = Math.cos(-rotation);\n var sinAngle = Math.sin(-rotation);\n var minRotX = +Infinity;\n var minRotY = +Infinity;\n var maxRotX = -Infinity;\n var maxRotY = -Infinity;\n var stride = geometry.getStride();\n for (var i = 0, ii = coords.length; i < ii; i += stride) {\n var rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n var rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n minRotX = Math.min(minRotX, rotX);\n minRotY = Math.min(minRotY, rotY);\n maxRotX = Math.max(maxRotX, rotX);\n maxRotY = Math.max(maxRotY, rotY);\n }\n // calculate resolution\n var resolution = this.getResolutionForExtentInternal([minRotX, minRotY, maxRotX, maxRotY], [size[0] - padding[1] - padding[3], size[1] - padding[0] - padding[2]]);\n resolution = isNaN(resolution)\n ? minResolution\n : Math.max(resolution, minResolution);\n resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n // calculate center\n sinAngle = -sinAngle; // go back to original rotation\n var centerRotX = (minRotX + maxRotX) / 2;\n var centerRotY = (minRotY + maxRotY) / 2;\n centerRotX += ((padding[1] - padding[3]) / 2) * resolution;\n centerRotY += ((padding[0] - padding[2]) / 2) * resolution;\n var centerX = centerRotX * cosAngle - centerRotY * sinAngle;\n var centerY = centerRotY * cosAngle + centerRotX * sinAngle;\n var center = this.getConstrainedCenter([centerX, centerY], resolution);\n var callback = options.callback ? options.callback : VOID;\n if (options.duration !== undefined) {\n this.animateInternal({\n resolution: resolution,\n center: center,\n duration: options.duration,\n easing: options.easing,\n }, callback);\n }\n else {\n this.targetResolution_ = resolution;\n this.targetCenter_ = center;\n this.applyTargetState_(false, true);\n animationCallback(callback, true);\n }\n };\n /**\n * Center on coordinate and view position.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @api\n */\n View.prototype.centerOn = function (coordinate, size, position) {\n this.centerOnInternal(fromUserCoordinate(coordinate, this.getProjection()), size, position);\n };\n /**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n */\n View.prototype.centerOnInternal = function (coordinate, size, position) {\n this.setCenterInternal(calculateCenterOn(coordinate, size, position, this.getResolution(), this.getRotation()));\n };\n /**\n * Calculates the shift between map and viewport center.\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array<number>|undefined} Center shift.\n */\n View.prototype.calculateCenterShift = function (center, resolution, rotation, size) {\n var centerShift;\n var padding = this.padding;\n if (padding && center) {\n var reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n var shiftedCenter = calculateCenterOn(center, size, [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]], resolution, rotation);\n centerShift = [\n center[0] - shiftedCenter[0],\n center[1] - shiftedCenter[1],\n ];\n }\n return centerShift;\n };\n /**\n * @return {boolean} Is defined.\n */\n View.prototype.isDef = function () {\n return !!this.getCenterInternal() && this.getResolution() !== undefined;\n };\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n * @api\n */\n View.prototype.adjustCenter = function (deltaCoordinates) {\n var center = toUserCoordinate(this.targetCenter_, this.getProjection());\n this.setCenter([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n };\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n */\n View.prototype.adjustCenterInternal = function (deltaCoordinates) {\n var center = this.targetCenter_;\n this.setCenterInternal([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n };\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n * @api\n */\n View.prototype.adjustResolution = function (ratio, opt_anchor) {\n var anchor = opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n this.adjustResolutionInternal(ratio, anchor);\n };\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n */\n View.prototype.adjustResolutionInternal = function (ratio, opt_anchor) {\n var isMoving = this.getAnimating() || this.getInteracting();\n var size = this.getViewportSize_(this.getRotation());\n var newResolution = this.constraints_.resolution(this.targetResolution_ * ratio, 0, size, isMoving);\n if (opt_anchor) {\n this.targetCenter_ = this.calculateCenterZoom(newResolution, opt_anchor);\n }\n this.targetResolution_ *= ratio;\n this.applyTargetState_();\n };\n /**\n * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom level.\n * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n * @api\n */\n View.prototype.adjustZoom = function (delta, opt_anchor) {\n this.adjustResolution(Math.pow(this.zoomFactor_, -delta), opt_anchor);\n };\n /**\n * Adds a value to the view rotation, optionally using an anchor. Any rotation\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The rotation center.\n * @api\n */\n View.prototype.adjustRotation = function (delta, opt_anchor) {\n if (opt_anchor) {\n opt_anchor = fromUserCoordinate(opt_anchor, this.getProjection());\n }\n this.adjustRotationInternal(delta, opt_anchor);\n };\n /**\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The rotation center.\n */\n View.prototype.adjustRotationInternal = function (delta, opt_anchor) {\n var isMoving = this.getAnimating() || this.getInteracting();\n var newRotation = this.constraints_.rotation(this.targetRotation_ + delta, isMoving);\n if (opt_anchor) {\n this.targetCenter_ = this.calculateCenterRotate(newRotation, opt_anchor);\n }\n this.targetRotation_ += delta;\n this.applyTargetState_();\n };\n /**\n * Set the center of the current view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\n View.prototype.setCenter = function (center) {\n this.setCenterInternal(fromUserCoordinate(center, this.getProjection()));\n };\n /**\n * Set the center using the view projection (not the user projection).\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n */\n View.prototype.setCenterInternal = function (center) {\n this.targetCenter_ = center;\n this.applyTargetState_();\n };\n /**\n * @param {import(\"./ViewHint.js\").default} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\n View.prototype.setHint = function (hint, delta) {\n this.hints_[hint] += delta;\n this.changed();\n return this.hints_[hint];\n };\n /**\n * Set the resolution for this view. Any resolution constraint will apply.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\n View.prototype.setResolution = function (resolution) {\n this.targetResolution_ = resolution;\n this.applyTargetState_();\n };\n /**\n * Set the rotation for this view. Any rotation constraint will apply.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\n View.prototype.setRotation = function (rotation) {\n this.targetRotation_ = rotation;\n this.applyTargetState_();\n };\n /**\n * Zoom to a specific zoom level. Any resolution constrain will apply.\n * @param {number} zoom Zoom level.\n * @api\n */\n View.prototype.setZoom = function (zoom) {\n this.setResolution(this.getResolutionForZoom(zoom));\n };\n /**\n * Recompute rotation/resolution/center based on target values.\n * Note: we have to compute rotation first, then resolution and center considering that\n * parameters can influence one another in case a view extent constraint is present.\n * @param {boolean=} opt_doNotCancelAnims Do not cancel animations.\n * @param {boolean=} opt_forceMoving Apply constraints as if the view is moving.\n * @private\n */\n View.prototype.applyTargetState_ = function (opt_doNotCancelAnims, opt_forceMoving) {\n var isMoving = this.getAnimating() || this.getInteracting() || opt_forceMoving;\n // compute rotation\n var newRotation = this.constraints_.rotation(this.targetRotation_, isMoving);\n var size = this.getViewportSize_(newRotation);\n var newResolution = this.constraints_.resolution(this.targetResolution_, 0, size, isMoving);\n var newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, isMoving, this.calculateCenterShift(this.targetCenter_, newResolution, newRotation, size));\n if (this.get(ViewProperty.ROTATION) !== newRotation) {\n this.set(ViewProperty.ROTATION, newRotation);\n }\n if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n this.set(ViewProperty.RESOLUTION, newResolution);\n }\n if (!this.get(ViewProperty.CENTER) ||\n !equals(this.get(ViewProperty.CENTER), newCenter)) {\n this.set(ViewProperty.CENTER, newCenter);\n }\n if (this.getAnimating() && !opt_doNotCancelAnims) {\n this.cancelAnimations();\n }\n this.cancelAnchor_ = undefined;\n };\n /**\n * If any constraints need to be applied, an animation will be triggered.\n * This is typically done on interaction end.\n * Note: calling this with a duration of 0 will apply the constrained values straight away,\n * without animation.\n * @param {number=} opt_duration The animation duration in ms.\n * @param {number=} opt_resolutionDirection Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n */\n View.prototype.resolveConstraints = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n var duration = opt_duration !== undefined ? opt_duration : 200;\n var direction = opt_resolutionDirection || 0;\n var newRotation = this.constraints_.rotation(this.targetRotation_);\n var size = this.getViewportSize_(newRotation);\n var newResolution = this.constraints_.resolution(this.targetResolution_, direction, size);\n var newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, false, this.calculateCenterShift(this.targetCenter_, newResolution, newRotation, size));\n if (duration === 0 && !this.cancelAnchor_) {\n this.targetResolution_ = newResolution;\n this.targetRotation_ = newRotation;\n this.targetCenter_ = newCenter;\n this.applyTargetState_();\n return;\n }\n var anchor = opt_anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n this.cancelAnchor_ = undefined;\n if (this.getResolution() !== newResolution ||\n this.getRotation() !== newRotation ||\n !this.getCenterInternal() ||\n !equals(this.getCenterInternal(), newCenter)) {\n if (this.getAnimating()) {\n this.cancelAnimations();\n }\n this.animateInternal({\n rotation: newRotation,\n center: newCenter,\n resolution: newResolution,\n duration: duration,\n easing: easeOut,\n anchor: anchor,\n });\n }\n };\n /**\n * Notify the View that an interaction has started.\n * The view state will be resolved to a stable one if needed\n * (depending on its constraints).\n * @api\n */\n View.prototype.beginInteraction = function () {\n this.resolveConstraints(0);\n this.setHint(ViewHint.INTERACTING, 1);\n };\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number=} opt_duration Animation duration in ms.\n * @param {number=} opt_resolutionDirection Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n * @api\n */\n View.prototype.endInteraction = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n var anchor = opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n this.endInteractionInternal(opt_duration, opt_resolutionDirection, anchor);\n };\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number=} opt_duration Animation duration in ms.\n * @param {number=} opt_resolutionDirection Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate=} opt_anchor The origin of the transformation.\n */\n View.prototype.endInteractionInternal = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n this.setHint(ViewHint.INTERACTING, -1);\n this.resolveConstraints(opt_duration, opt_resolutionDirection, opt_anchor);\n };\n /**\n * Get a valid position for the view center according to the current constraints.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n * @param {number=} opt_targetResolution Target resolution. If not supplied, the current one will be used.\n * This is useful to guess a valid center position at a different zoom level.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n */\n View.prototype.getConstrainedCenter = function (targetCenter, opt_targetResolution) {\n var size = this.getViewportSize_(this.getRotation());\n return this.constraints_.center(targetCenter, opt_targetResolution || this.getResolution(), size);\n };\n /**\n * Get a valid zoom level according to the current view constraints.\n * @param {number|undefined} targetZoom Target zoom.\n * @param {number=} [opt_direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid zoom level.\n */\n View.prototype.getConstrainedZoom = function (targetZoom, opt_direction) {\n var targetRes = this.getResolutionForZoom(targetZoom);\n return this.getZoomForResolution(this.getConstrainedResolution(targetRes, opt_direction));\n };\n /**\n * Get a valid resolution according to the current view constraints.\n * @param {number|undefined} targetResolution Target resolution.\n * @param {number=} [opt_direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid resolution.\n */\n View.prototype.getConstrainedResolution = function (targetResolution, opt_direction) {\n var direction = opt_direction || 0;\n var size = this.getViewportSize_(this.getRotation());\n return this.constraints_.resolution(targetResolution, direction, size);\n };\n return View;\n}(BaseObject));\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n setTimeout(function () {\n callback(returnValue);\n }, 0);\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n if (options.extent !== undefined) {\n var smooth = options.smoothExtentConstraint !== undefined\n ? options.smoothExtentConstraint\n : true;\n return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n }\n var projection = createProjection(options.projection, 'EPSG:3857');\n if (options.multiWorld !== true && projection.isGlobal()) {\n var extent = projection.getExtent().slice();\n extent[0] = -Infinity;\n extent[2] = Infinity;\n return createExtent(extent, false, false);\n }\n return centerNone;\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n * minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n var resolutionConstraint;\n var maxResolution;\n var minResolution;\n // TODO: move these to be ol constants\n // see https://github.com/openlayers/openlayers/issues/2076\n var defaultMaxZoom = 28;\n var defaultZoomFactor = 2;\n var minZoom = options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n var maxZoom = options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n var zoomFactor = options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n var multiWorld = options.multiWorld !== undefined ? options.multiWorld : false;\n var smooth = options.smoothResolutionConstraint !== undefined\n ? options.smoothResolutionConstraint\n : true;\n var showFullExtent = options.showFullExtent !== undefined ? options.showFullExtent : false;\n var projection = createProjection(options.projection, 'EPSG:3857');\n var projExtent = projection.getExtent();\n var constrainOnlyCenter = options.constrainOnlyCenter;\n var extent = options.extent;\n if (!multiWorld && !extent && projection.isGlobal()) {\n constrainOnlyCenter = false;\n extent = projExtent;\n }\n if (options.resolutions !== undefined) {\n var resolutions = options.resolutions;\n maxResolution = resolutions[minZoom];\n minResolution =\n resolutions[maxZoom] !== undefined\n ? resolutions[maxZoom]\n : resolutions[resolutions.length - 1];\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToResolutions(resolutions, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n else {\n resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n }\n else {\n // calculate the default min and max resolution\n var size = !projExtent\n ? // use an extent that can fit the whole world if need be\n (360 * METERS_PER_UNIT[Units.DEGREES]) / projection.getMetersPerUnit()\n : Math.max(getWidth(projExtent), getHeight(projExtent));\n var defaultMaxResolution = size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n var defaultMinResolution = defaultMaxResolution /\n Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n // user provided maxResolution takes precedence\n maxResolution = options.maxResolution;\n if (maxResolution !== undefined) {\n minZoom = 0;\n }\n else {\n maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n }\n // user provided minResolution takes precedence\n minResolution = options.minResolution;\n if (minResolution === undefined) {\n if (options.maxZoom !== undefined) {\n if (options.maxResolution !== undefined) {\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n }\n else {\n minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n }\n }\n else {\n minResolution = defaultMinResolution;\n }\n }\n // given discrete zoom levels, minResolution may be different than provided\n maxZoom =\n minZoom +\n Math.floor(Math.log(maxResolution / minResolution) / Math.log(zoomFactor));\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToPower(zoomFactor, maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n else {\n resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n }\n return {\n constraint: resolutionConstraint,\n maxResolution: maxResolution,\n minResolution: minResolution,\n minZoom: minZoom,\n zoomFactor: zoomFactor,\n };\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n var enableRotation = options.enableRotation !== undefined ? options.enableRotation : true;\n if (enableRotation) {\n var constrainRotation = options.constrainRotation;\n if (constrainRotation === undefined || constrainRotation === true) {\n return createSnapToZero();\n }\n else if (constrainRotation === false) {\n return rotationNone;\n }\n else if (typeof constrainRotation === 'number') {\n return createSnapToN(constrainRotation);\n }\n else {\n return rotationNone;\n }\n }\n else {\n return disable;\n }\n}\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n if (animation.sourceCenter && animation.targetCenter) {\n if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n return false;\n }\n }\n if (animation.sourceResolution !== animation.targetResolution) {\n return false;\n }\n if (animation.sourceRotation !== animation.targetRotation) {\n return false;\n }\n return true;\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n // calculate rotated position\n var cosAngle = Math.cos(-rotation);\n var sinAngle = Math.sin(-rotation);\n var rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n var rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n rotX += (size[0] / 2 - position[0]) * resolution;\n rotY += (position[1] - size[1] / 2) * resolution;\n // go back to original angle\n sinAngle = -sinAngle; // go back to original rotation\n var centerX = rotX * cosAngle - rotY * sinAngle;\n var centerY = rotY * cosAngle + rotX * sinAngle;\n return [centerX, centerY];\n}\nexport default View;\n//# sourceMappingURL=View.js.map","var api = require(\"!../style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../mini-css-extract-plugin/dist/loader.js!../css-loader/dist/cjs.js??ref--5-2!../postcss-loader/src/index.js??ref--5-3!../less-loader/dist/cjs.js??ref--5-4!./ol.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","define([\n\t\"./tracer\",\n\t\"../has\",\n\t\"../_base/lang\",\n\t\"../_base/array\"\n], function(tracer, has, lang, arrayUtil){\n\thas.add(\"config-useDeferredInstrumentation\", \"report-unhandled-rejections\");\n\n\tfunction logError(error, rejection, deferred){\n\t\tif(error && error.log === false){\n\t\t\treturn;\n\t\t}\n\t\tvar stack = \"\";\n\t\tif(error && error.stack){\n\t\t\tstack += error.stack;\n\t\t}\n\t\tif(rejection && rejection.stack){\n\t\t\tstack += \"\\n ----------------------------------------\\n rejected\" + rejection.stack.split(\"\\n\").slice(1).join(\"\\n\").replace(/^\\s+/, \" \");\n\t\t}\n\t\tif(deferred && deferred.stack){\n\t\t\tstack += \"\\n ----------------------------------------\\n\" + deferred.stack;\n\t\t}\n\t\tconsole.error(error, stack);\n\t}\n\n\tfunction reportRejections(error, handled, rejection, deferred){\n\t\tif(!handled){\n\t\t\tlogError(error, rejection, deferred);\n\t\t}\n\t}\n\n\tvar errors = [];\n\tvar activeTimeout = false;\n\tvar unhandledWait = 1000;\n\tfunction trackUnhandledRejections(error, handled, rejection, deferred){\n\t\t// try to find the existing tracking object\n\t\tif(!arrayUtil.some(errors, function(obj){\n\t\t\tif(obj.error === error){\n\t\t\t\t// found the tracking object for this error\n\t\t\t\tif(handled){\n\t\t\t\t\t// if handled, update the state\n\t\t\t\t\tobj.handled = true;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t})){\n\t\t\t// no tracking object has been setup, create one\n\t\t\terrors.push({\n\t\t\t\terror: error,\n\t\t\t\trejection: rejection,\n\t\t\t\thandled: handled,\n\t\t\t\tdeferred: deferred,\n\t\t\t\ttimestamp: new Date().getTime()\n\t\t\t});\n\t\t}\n\n\t\tif(!activeTimeout){\n\t\t\tactiveTimeout = setTimeout(logRejected, unhandledWait);\n\t\t}\n\t}\n\n\tfunction logRejected(){\n\t\tvar now = new Date().getTime();\n\t\tvar reportBefore = now - unhandledWait;\n\t\terrors = arrayUtil.filter(errors, function(obj){\n\t\t\t// only report the error if we have waited long enough and\n\t\t\t// it hasn't been handled\n\t\t\tif(obj.timestamp < reportBefore){\n\t\t\t\tif(!obj.handled){\n\t\t\t\t\tlogError(obj.error, obj.rejection, obj.deferred);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tif(errors.length){\n\t\t\tactiveTimeout = setTimeout(logRejected, errors[0].timestamp + unhandledWait - now);\n\t\t}else{\n\t\t\tactiveTimeout = false;\n\t\t}\n\t}\n\n\treturn function(Deferred){\n\t\t// summary:\n\t\t//\t\tInitialize instrumentation for the Deferred class.\n\t\t// description:\n\t\t//\t\tInitialize instrumentation for the Deferred class.\n\t\t//\t\tDone automatically by `dojo/Deferred` if the\n\t\t//\t\t`deferredInstrumentation` and `useDeferredInstrumentation`\n\t\t//\t\tconfig options are set.\n\t\t//\n\t\t//\t\tSets up `dojo/promise/tracer` to log to the console.\n\t\t//\n\t\t//\t\tSets up instrumentation of rejected deferreds so unhandled\n\t\t//\t\terrors are logged to the console.\n\n\t\tvar usage = has(\"config-useDeferredInstrumentation\");\n\t\tif(usage){\n\t\t\ttracer.on(\"resolved\", lang.hitch(console, \"log\", \"resolved\"));\n\t\t\ttracer.on(\"rejected\", lang.hitch(console, \"log\", \"rejected\"));\n\t\t\ttracer.on(\"progress\", lang.hitch(console, \"log\", \"progress\"));\n\n\t\t\tvar args = [];\n\t\t\tif(typeof usage === \"string\"){\n\t\t\t\targs = usage.split(\",\");\n\t\t\t\tusage = args.shift();\n\t\t\t}\n\t\t\tif(usage === \"report-rejections\"){\n\t\t\t\tDeferred.instrumentRejected = reportRejections;\n\t\t\t}else if(usage === \"report-unhandled-rejections\" || usage === true || usage === 1){\n\t\t\t\tDeferred.instrumentRejected = trackUnhandledRejections;\n\t\t\t\tunhandledWait = parseInt(args[0], 10) || unhandledWait;\n\t\t\t}else{\n\t\t\t\tthrow new Error(\"Unsupported instrumentation usage <\" + usage + \">\");\n\t\t\t}\n\t\t}\n\t};\n});\n","define([\n\t\"../_base/lang\",\n\t\"./Promise\",\n\t\"../Evented\"\n], function(lang, Promise, Evented){\n\t\"use strict\";\n\n\t// module:\n\t//\t\tdojo/promise/tracer\n\n\t/*=====\n\treturn {\n\t\t// summary:\n\t\t//\t\tTrace promise fulfillment.\n\t\t// description:\n\t\t//\t\tTrace promise fulfillment. Calling `.trace()` or `.traceError()` on a\n\t\t//\t\tpromise enables tracing. Will emit `resolved`, `rejected` or `progress`\n\t\t//\t\tevents.\n\n\t\ton: function(type, listener){\n\t\t\t// summary:\n\t\t\t//\t\tSubscribe to traces.\n\t\t\t// description:\n\t\t\t//\t\tSee `dojo/Evented#on()`.\n\t\t\t// type: String\n\t\t\t//\t\t`resolved`, `rejected`, or `progress`\n\t\t\t// listener: Function\n\t\t\t//\t\tThe listener is passed the traced value and any arguments\n\t\t\t//\t\tthat were used with the `.trace()` call.\n\t\t}\n\t};\n\t=====*/\n\n\tvar evented = new Evented;\n\tvar emit = evented.emit;\n\tevented.emit = null;\n\t// Emit events asynchronously since they should not change the promise state.\n\tfunction emitAsync(args){\n\t\tsetTimeout(function(){\n\t\t\temit.apply(evented, args);\n\t\t}, 0);\n\t}\n\n\tPromise.prototype.trace = function(){\n\t\t// summary:\n\t\t//\t\tTrace the promise.\n\t\t// description:\n\t\t//\t\tTracing allows you to transparently log progress,\n\t\t//\t\tresolution and rejection of promises, without affecting the\n\t\t//\t\tpromise itself. Any arguments passed to `trace()` are\n\t\t//\t\temitted in trace events. See `dojo/promise/tracer` on how\n\t\t//\t\tto handle traces.\n\t\t// returns: dojo/promise/Promise\n\t\t//\t\tThe promise instance `trace()` is called on.\n\n\t\tvar args = lang._toArray(arguments);\n\t\tthis.then(\n\t\t\tfunction(value){ emitAsync([\"resolved\", value].concat(args)); },\n\t\t\tfunction(error){ emitAsync([\"rejected\", error].concat(args)); },\n\t\t\tfunction(update){ emitAsync([\"progress\", update].concat(args)); }\n\t\t);\n\t\treturn this;\n\t};\n\n\tPromise.prototype.traceRejected = function(){\n\t\t// summary:\n\t\t//\t\tTrace rejection of the promise.\n\t\t// description:\n\t\t//\t\tTracing allows you to transparently log progress,\n\t\t//\t\tresolution and rejection of promises, without affecting the\n\t\t//\t\tpromise itself. Any arguments passed to `trace()` are\n\t\t//\t\temitted in trace events. See `dojo/promise/tracer` on how\n\t\t//\t\tto handle traces.\n\t\t// returns: dojo/promise/Promise\n\t\t//\t\tThe promise instance `traceRejected()` is called on.\n\n\t\tvar args = lang._toArray(arguments);\n\t\tthis.otherwise(function(error){\n\t\t\temitAsync([\"rejected\", error].concat(args));\n\t\t});\n\t\treturn this;\n\t};\n\n\treturn evented;\n});\n","define(['./create', './RequestError'], function(create, RequestError){\n\t// module:\n\t//\t\tdojo/errors/RequestTimeoutError\n\n\t/*=====\n\t return function(){\n\t\t // summary:\n\t\t //\t\tTODOC\n\t };\n\t =====*/\n\n\treturn create(\"RequestTimeoutError\", null, RequestError, {\n\t\tdojoType: \"timeout\"\n\t});\n});\n","define([\n\t'../json',\n\t'../_base/kernel',\n\t'../_base/array',\n\t'../has',\n\t'../has!dom?../selector/_loader' // only included for has() qsa tests\n], function(JSON, kernel, array, has){\n\thas.add('activex', typeof ActiveXObject !== 'undefined');\n\thas.add('dom-parser', function(global){\n\t\treturn 'DOMParser' in global;\n\t});\n\n\tvar handleXML;\n\tif(has('activex')){\n\t\t// GUIDs obtained from http://msdn.microsoft.com/en-us/library/ms757837(VS.85).aspx\n\t\tvar dp = [\n\t\t\t'Msxml2.DOMDocument.6.0',\n\t\t\t'Msxml2.DOMDocument.4.0',\n\t\t\t'MSXML2.DOMDocument.3.0',\n\t\t\t'MSXML.DOMDocument' // 2.0\n\t\t];\n\t\tvar lastParser;\n\n\t\thandleXML = function(response){\n\t\t\tvar result = response.data;\n\t\t\tvar text = response.text;\n\n\t\t\tif(result && has('dom-qsa2.1') && !result.querySelectorAll && has('dom-parser')){\n\t\t\t\t// http://bugs.dojotoolkit.org/ticket/15631\n\t\t\t\t// IE9 supports a CSS3 querySelectorAll implementation, but the DOM implementation\n\t\t\t\t// returned by IE9 xhr.responseXML does not. Manually create the XML DOM to gain\n\t\t\t\t// the fuller-featured implementation and avoid bugs caused by the inconsistency\n\t\t\t\tresult = new DOMParser().parseFromString(text, 'application/xml');\n\t\t\t}\n\n\t\t\tfunction createDocument(p) {\n\t\t\t\t\ttry{\n\t\t\t\t\t\tvar dom = new ActiveXObject(p);\n\t\t\t\t\t\tdom.async = false;\n\t\t\t\t\t\tdom.loadXML(text);\n\t\t\t\t\t\tresult = dom;\n\t\t\t\t\t\tlastParser = p;\n\t\t\t\t\t}catch(e){ return false; }\n\t\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif(!result || !result.documentElement){\n\t\t\t\t// The creation of an ActiveX object is expensive, so we cache the\n\t\t\t\t// parser type to avoid trying all parser types each time we handle a\n\t\t\t\t// document. There is some concern that some parser types might fail\n\t\t\t\t// depending on the document being parsed. If parsing using the cached\n\t\t\t\t// parser type fails, we do the more expensive operation of finding one\n\t\t\t\t// that works for the given document.\n\t\t\t\t// https://bugs.dojotoolkit.org/ticket/15246\n\t\t\t\tif(!lastParser || !createDocument(lastParser)) {\n\t\t\t\t\tarray.some(dp, createDocument);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tvar handleNativeResponse = function(response) {\n\t\tif(!has('native-xhr2-blob') && response.options.handleAs === 'blob' && typeof Blob !== 'undefined'){\n\t\t\treturn new Blob([ response.xhr.response ], { type: response.xhr.getResponseHeader('Content-Type') });\n\t\t}\n\n\t\treturn response.xhr.response;\n\t}\n\n\tvar handlers = {\n\t\t'javascript': function(response){\n\t\t\treturn kernel.eval(response.text || '');\n\t\t},\n\t\t'json': function(response){\n\t\t\treturn JSON.parse(response.text || null);\n\t\t},\n\t\t'xml': handleXML,\n\t\t'blob': handleNativeResponse,\n\t\t'arraybuffer': handleNativeResponse,\n\t\t'document': handleNativeResponse\n\t};\n\n\tfunction handle(response){\n\t\tvar handler = handlers[response.options.handleAs];\n\n\t\tresponse.data = handler ? handler(response) : (response.data || response.text);\n\n\t\treturn response;\n\t}\n\n\thandle.register = function(name, handler){\n\t\thandlers[name] = handler;\n\t};\n\n\treturn handle;\n});\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isPrimitive } from '../lib/parts.js';\nimport { directive, NodePart } from '../lit-html.js';\n// For each part, remember the value that was last rendered to the part by the\n// unsafeHTML directive, and the DocumentFragment that was last set as a value.\n// The DocumentFragment is used as a unique key to check if the last value\n// rendered to the part was with unsafeHTML. If not, we'll always re-render the\n// value passed to unsafeHTML.\nconst previousValues = new WeakMap();\n/**\n * Renders the result as HTML, rather than text.\n *\n * Note, this is unsafe to use with any user-provided input that hasn't been\n * sanitized or escaped, as it may lead to cross-site-scripting\n * vulnerabilities.\n */\nexport const unsafeHTML = directive((value) => (part) => {\n if (!(part instanceof NodePart)) {\n throw new Error('unsafeHTML can only be used in text bindings');\n }\n const previousValue = previousValues.get(part);\n if (previousValue !== undefined && isPrimitive(value) &&\n value === previousValue.value && part.value === previousValue.fragment) {\n return;\n }\n const template = document.createElement('template');\n template.innerHTML = value; // innerHTML casts to string internally\n const fragment = document.importNode(template.content, true);\n part.setValue(fragment);\n previousValues.set(part, { value, fragment });\n});\n//# sourceMappingURL=unsafe-html.js.map","/**\n * @module ol/source/OSM\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport XYZ from './XYZ.js';\n/**\n * The attribution containing a link to the OpenStreetMap Copyright and License\n * page.\n * @const\n * @type {string}\n * @api\n */\nexport var ATTRIBUTION = '© ' +\n '<a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> ' +\n 'contributors.';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {number} [cacheSize] Initial tile cache size. Will auto-grow to hold at least the number of tiles in the viewport.\n * @property {null|string} [crossOrigin='anonymous'] The `crossOrigin` attribute for loaded images. Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [imageSmoothing=true] Enable image smoothing.\n * @property {number} [maxZoom=19] Max zoom.\n * @property {boolean} [opaque=true] Whether the layer is opaque.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n * imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [transition=250] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {string} [url='https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'] URL template.\n * Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n */\n/**\n * @classdesc\n * Layer source for the OpenStreetMap tile server.\n * @api\n */\nvar OSM = /** @class */ (function (_super) {\n __extends(OSM, _super);\n /**\n * @param {Options=} [opt_options] Open Street Map options.\n */\n function OSM(opt_options) {\n var _this = this;\n var options = opt_options || {};\n var attributions;\n if (options.attributions !== undefined) {\n attributions = options.attributions;\n }\n else {\n attributions = [ATTRIBUTION];\n }\n var crossOrigin = options.crossOrigin !== undefined ? options.crossOrigin : 'anonymous';\n var url = options.url !== undefined\n ? options.url\n : 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n _this = _super.call(this, {\n attributions: attributions,\n attributionsCollapsible: false,\n cacheSize: options.cacheSize,\n crossOrigin: crossOrigin,\n imageSmoothing: options.imageSmoothing,\n maxZoom: options.maxZoom !== undefined ? options.maxZoom : 19,\n opaque: options.opaque !== undefined ? options.opaque : true,\n reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n tileLoadFunction: options.tileLoadFunction,\n transition: options.transition,\n url: url,\n wrapX: options.wrapX,\n }) || this;\n return _this;\n }\n return OSM;\n}(XYZ));\nexport default OSM;\n//# sourceMappingURL=OSM.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = max;\n\nvar _index = _interopRequireDefault(require(\"../toDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `max` function now accepts an array of dates rather than spread arguments.\n *\n * ```javascript\n * // Before v2.0.0\n * var date1 = new Date(1989, 6, 10)\n * var date2 = new Date(1987, 1, 11)\n * var maxDate = max(date1, date2)\n *\n * // v2.0.0 onward:\n * var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n * var maxDate = max(dates)\n * ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * var result = max([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nfunction max(dirtyDatesArray) {\n (0, _index2.default)(1, arguments);\n var datesArray; // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n\n if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray; // If `dirtyDatesArray` is Array-like Object, convert to Array.\n } else if (typeof dirtyDatesArray === 'object' && dirtyDatesArray !== null) {\n datesArray = Array.prototype.slice.call(dirtyDatesArray);\n } else {\n // `dirtyDatesArray` is non-iterable, return Invalid Date\n return new Date(NaN);\n }\n\n var result;\n datesArray.forEach(function (dirtyDate) {\n var currentDate = (0, _index.default)(dirtyDate);\n\n if (result === undefined || result < currentDate || isNaN(currentDate)) {\n result = currentDate;\n }\n });\n return result || new Date(NaN);\n}\n\nmodule.exports = exports.default;","define([\"./_base/kernel\", \"./regexp\"], function(dojo, regexp){\n\n// module:\n//\t\tdojo/cookie\n\n/*=====\nvar __cookieProps = {\n\t// expires: Date|String|Number?\n\t//\t\tIf a number, the number of days from today at which the cookie\n\t//\t\twill expire. If a date, the date past which the cookie will expire.\n\t//\t\tIf expires is in the past, the cookie will be deleted.\n\t//\t\tIf expires is omitted or is 0, the cookie will expire when the browser closes.\n\t// path: String?\n\t//\t\tThe path to use for the cookie.\n\t// domain: String?\n\t//\t\tThe domain to use for the cookie.\n\t// secure: Boolean?\n\t//\t\tWhether to only send the cookie on secure connections\n};\n=====*/\n\n\ndojo.cookie = function(/*String*/name, /*String?*/ value, /*__cookieProps?*/ props){\n\t// summary:\n\t//\t\tGet or set a cookie.\n\t// description:\n\t//\t\tIf one argument is passed, returns the value of the cookie\n\t//\t\tFor two or more arguments, acts as a setter.\n\t// name:\n\t//\t\tName of the cookie\n\t// value:\n\t//\t\tValue for the cookie\n\t// props:\n\t//\t\tProperties for the cookie\n\t// example:\n\t//\t\tset a cookie with the JSON-serialized contents of an object which\n\t//\t\twill expire 5 days from now:\n\t//\t|\trequire([\"dojo/cookie\", \"dojo/json\"], function(cookie, json){\n\t//\t|\t\tcookie(\"configObj\", json.stringify(config, {expires: 5 }));\n\t//\t|\t});\n\t//\n\t// example:\n\t//\t\tde-serialize a cookie back into a JavaScript object:\n\t//\t|\trequire([\"dojo/cookie\", \"dojo/json\"], function(cookie, json){\n\t//\t|\t\tconfig = json.parse(cookie(\"configObj\"));\n\t//\t|\t});\n\t//\n\t// example:\n\t//\t\tdelete a cookie:\n\t//\t|\trequire([\"dojo/cookie\"], function(cookie){\n\t//\t|\t\tcookie(\"configObj\", null, {expires: -1});\n\t//\t|\t});\n\tvar c = document.cookie, ret;\n\tif(arguments.length == 1){\n\t\tvar matches = c.match(new RegExp(\"(?:^|; )\" + regexp.escapeString(name) + \"=([^;]*)\"));\n\t\tret = matches ? decodeURIComponent(matches[1]) : undefined; \n\t}else{\n\t\tprops = props || {};\n// FIXME: expires=0 seems to disappear right away, not on close? (FF3) Change docs?\n\t\tvar exp = props.expires;\n\t\tif(typeof exp == \"number\"){\n\t\t\tvar d = new Date();\n\t\t\td.setTime(d.getTime() + exp*24*60*60*1000);\n\t\t\texp = props.expires = d;\n\t\t}\n\t\tif(exp && exp.toUTCString){ props.expires = exp.toUTCString(); }\n\n\t\tvalue = encodeURIComponent(value);\n\t\tvar updatedCookie = name + \"=\" + value, propName;\n\t\tfor(propName in props){\n\t\t\tupdatedCookie += \"; \" + propName;\n\t\t\tvar propValue = props[propName];\n\t\t\tif(propValue !== true){ updatedCookie += \"=\" + propValue; }\n\t\t}\n\t\tdocument.cookie = updatedCookie;\n\t}\n\treturn ret; // String|undefined\n};\n\ndojo.cookie.isSupported = function(){\n\t// summary:\n\t//\t\tUse to determine if the current browser supports cookies or not.\n\t//\n\t//\t\tReturns true if user allows cookies.\n\t//\t\tReturns false if user doesn't allow cookies.\n\n\tif(!(\"cookieEnabled\" in navigator)){\n\t\tthis(\"__djCookieTest__\", \"CookiesAllowed\");\n\t\tnavigator.cookieEnabled = this(\"__djCookieTest__\") == \"CookiesAllowed\";\n\t\tif(navigator.cookieEnabled){\n\t\t\tthis(\"__djCookieTest__\", \"\", {expires: -1});\n\t\t}\n\t}\n\treturn navigator.cookieEnabled;\n};\n\nreturn dojo.cookie;\n});\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { setStyleAttribute, addClass, removeClass, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { calculatePosition, calculateRelativeBasedPosition } from '../common/position';\nimport { Animation, Property, Event, Component } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { flip, fit, isCollide } from '../common/collision';\n/**\n * Specifies the offset position values.\n */\nvar PositionData = /** @class */ (function (_super) {\n __extends(PositionData, _super);\n function PositionData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('left')\n ], PositionData.prototype, \"X\", void 0);\n __decorate([\n Property('top')\n ], PositionData.prototype, \"Y\", void 0);\n return PositionData;\n}(ChildProperty));\nexport { PositionData };\n// don't use space in classNames\nvar CLASSNAMES = {\n ROOT: 'e-popup',\n RTL: 'e-rtl',\n OPEN: 'e-popup-open',\n CLOSE: 'e-popup-close'\n};\n/**\n * Represents the Popup Component\n * ```html\n * <div id=\"popup\" style=\"position:absolute;height:100px;width:100px;\">\n * <div style=\"margin:35px 25px;\">Popup Content</div></div>\n * ```\n * ```typescript\n * <script>\n * var popupObj = new Popup();\n * popupObj.appendTo(\"#popup\");\n * </script>\n * ```\n */\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup(element, options) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Popup.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'zIndex':\n setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'position':\n case 'relateTo':\n this.refreshPosition();\n break;\n case 'offsetX':\n var x = newProp.offsetX - oldProp.offsetX;\n this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n break;\n case 'offsetY':\n var y = newProp.offsetY - oldProp.offsetY;\n this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n break;\n case 'content':\n this.setContent();\n break;\n case 'actionOnScroll':\n if (newProp.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n else {\n this.unwireScrollEvents();\n }\n break;\n }\n }\n };\n /**\n * gets the Component module name.\n * @private\n */\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * To resolve if any collision occurs.\n */\n Popup.prototype.resolveCollision = function () {\n this.checkCollision();\n };\n /**\n * gets the persisted state properties of the Component.\n */\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\n */\n Popup.prototype.destroy = function () {\n this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL, CLASSNAMES.OPEN, CLASSNAMES.CLOSE);\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Popup.prototype.render = function () {\n this.element.classList.add(CLASSNAMES.ROOT);\n var styles = {};\n if (this.zIndex !== 1000) {\n styles.zIndex = this.zIndex;\n }\n if (this.width !== 'auto') {\n styles.width = formatUnit(this.width);\n }\n if (this.height !== 'auto') {\n styles.height = formatUnit(this.height);\n }\n setStyleAttribute(this.element, styles);\n this.fixedParent = false;\n this.setEnableRtl();\n this.setContent();\n };\n Popup.prototype.wireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n }\n if (this.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n };\n Popup.prototype.wireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n }\n }\n };\n Popup.prototype.unwireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n }\n if (this.actionOnScroll !== 'none') {\n this.unwireScrollEvents();\n }\n };\n Popup.prototype.unwireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n }\n }\n };\n Popup.prototype.getRelateToElement = function () {\n var relateToElement = this.relateTo === '' || isNullOrUndefined(this.relateTo) ?\n document.body : this.relateTo;\n this.setProperties({ relateTo: relateToElement }, true);\n return ((typeof this.relateTo) === 'string') ?\n document.querySelector(this.relateTo) : this.relateTo;\n };\n Popup.prototype.scrollRefresh = function (e) {\n if (this.actionOnScroll === 'reposition') {\n if (!(this.element.offsetParent === e.target ||\n (this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' &&\n e.target.parentElement == null))) {\n this.refreshPosition();\n }\n }\n else if (this.actionOnScroll === 'hide') {\n this.hide();\n }\n if (this.actionOnScroll !== 'none') {\n if (this.getRelateToElement()) {\n var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n if (!targetVisible && !this.targetInvisibleStatus) {\n this.trigger('targetExitViewport');\n this.targetInvisibleStatus = true;\n }\n else if (targetVisible) {\n this.targetInvisibleStatus = false;\n }\n }\n }\n };\n /**\n * This method is to get the element visibility on viewport when scroll\n * the page. This method will returns true even though 1 px of element\n * part is in visible.\n */\n Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n var scrollParents = this.getScrollableParent(relateToElement);\n for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n continue;\n }\n else {\n return false;\n }\n }\n return true;\n };\n Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n var rect = this.checkGetBoundingClientRect(relateToElement);\n if (!rect.height || !rect.width) {\n return false;\n }\n if (!isNullOrUndefined(this.checkGetBoundingClientRect(scrollElement))) {\n var parent_4 = scrollElement.getBoundingClientRect();\n return !(rect.bottom < parent_4.top) &&\n (!(rect.bottom > parent_4.bottom) &&\n (!(rect.right > parent_4.right) &&\n !(rect.left < parent_4.left)));\n }\n else {\n var win = window;\n var windowView = {\n top: win.scrollY,\n left: win.scrollX,\n right: win.scrollX + win.outerWidth,\n bottom: win.scrollY + win.outerHeight\n };\n var off = calculatePosition(relateToElement);\n var ele = {\n top: off.top,\n left: off.left,\n right: off.left + rect.width,\n bottom: off.top + rect.height\n };\n var elementView = {\n top: windowView.bottom - ele.top,\n left: windowView.right - ele.left,\n bottom: ele.bottom - windowView.top,\n right: ele.right - windowView.left\n };\n return elementView.top > 0\n && elementView.left > 0\n && elementView.right > 0\n && elementView.bottom > 0;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Popup.prototype.preRender = function () {\n //There is no event handler\n };\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\n this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n };\n Popup.prototype.setContent = function () {\n if (!isNullOrUndefined(this.content)) {\n this.element.innerHTML = '';\n if (typeof (this.content) === 'string') {\n this.element.textContent = this.content;\n }\n else {\n this.element.appendChild(this.content);\n }\n }\n };\n Popup.prototype.orientationOnChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.refreshPosition();\n }, 200);\n };\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n */\n Popup.prototype.refreshPosition = function (target, collision) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n if (!collision) {\n this.checkCollision();\n }\n };\n Popup.prototype.reposition = function () {\n var pos;\n var position;\n var relateToElement = this.getRelateToElement();\n if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n pos = { left: this.position.X, top: this.position.Y };\n }\n else if ((typeof this.position.X === 'string' && typeof this.position.Y === 'number') ||\n (typeof this.position.X === 'number' && typeof this.position.Y === 'string')) {\n var display = this.element.style.display;\n var parentDisplay = void 0;\n this.element.style.display = 'block';\n if (this.element.classList.contains('e-dlg-modal')) {\n parentDisplay = this.element.parentElement.style.display;\n this.element.parentElement.style.display = 'block';\n }\n position = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n if (typeof this.position.X === 'string') {\n pos = { left: position.left, top: this.position.Y };\n }\n else {\n pos = { left: this.position.X, top: position.top };\n }\n this.element.style.display = display;\n if (this.element.classList.contains('e-dlg-modal')) {\n this.element.parentElement.style.display = parentDisplay;\n }\n }\n else if (relateToElement) {\n var display = this.element.style.display;\n this.element.style.display = 'block';\n pos = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n this.element.style.display = display;\n }\n else {\n pos = { left: 0, top: 0 };\n }\n if (!isNullOrUndefined(pos)) {\n this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n }\n };\n Popup.prototype.checkGetBoundingClientRect = function (ele) {\n var eleRect;\n try {\n eleRect = ele.getBoundingClientRect();\n return eleRect;\n }\n catch (error) {\n return null;\n }\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n var eleRect = this.checkGetBoundingClientRect(ele);\n var anchorRect = this.checkGetBoundingClientRect(anchorEle);\n if (isNullOrUndefined(eleRect) || isNullOrUndefined(anchorRect)) {\n return null;\n }\n var anchor = anchorEle;\n var anchorPos = { left: 0, top: 0 };\n if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n anchorPos = calculatePosition(anchorEle);\n }\n else {\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName !== 'BODY')) {\n ele = ele.parentElement;\n }\n anchorPos = calculateRelativeBasedPosition(anchor, ele);\n }\n switch (position.X) {\n default:\n case 'left':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth / 2 - eleRect.width / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width / 2 - eleRect.width / 2);\n }\n else {\n anchorPos.left += (anchorRect.width / 2);\n }\n break;\n case 'right':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth - eleRect.width);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width - eleRect.width);\n }\n else {\n anchorPos.left += (anchorRect.width);\n }\n break;\n }\n switch (position.Y) {\n default:\n case 'top':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight / 2 - eleRect.height / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height / 2 - eleRect.height / 2);\n }\n else {\n anchorPos.top += (anchorRect.height / 2);\n }\n break;\n case 'bottom':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight - eleRect.height);\n }\n else if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height - eleRect.height);\n }\n else {\n anchorPos.top += (anchorRect.height);\n }\n break;\n }\n anchorPos.left += offsetX;\n anchorPos.top += offsetY;\n return anchorPos;\n };\n Popup.prototype.callFlip = function (param) {\n var relateToElement = this.getRelateToElement();\n flip(this.element, relateToElement, this.offsetX, this.offsetY, this.position.X, this.position.Y, this.viewPortElement, param, this.fixedParent);\n };\n Popup.prototype.callFit = function (param) {\n if (isCollide(this.element, this.viewPortElement).length !== 0) {\n if (isNullOrUndefined(this.viewPortElement)) {\n var data = fit(this.element, this.viewPortElement, param);\n if (param.X) {\n this.element.style.left = data.left + 'px';\n }\n if (param.Y) {\n this.element.style.top = data.top + 'px';\n }\n }\n else {\n var elementRect = this.checkGetBoundingClientRect(this.element);\n var viewPortRect = this.checkGetBoundingClientRect(this.viewPortElement);\n if (isNullOrUndefined(elementRect) || isNullOrUndefined(viewPortRect)) {\n return null;\n }\n if (param && param.Y === true) {\n if (viewPortRect.top > elementRect.top) {\n this.element.style.top = '0px';\n }\n else if (viewPortRect.bottom < elementRect.bottom) {\n this.element.style.top = parseInt(this.element.style.top, 10) - (elementRect.bottom - viewPortRect.bottom) + 'px';\n }\n }\n if (param && param.X === true) {\n if (viewPortRect.right < elementRect.right) {\n this.element.style.left = parseInt(this.element.style.left, 10) - (elementRect.right - viewPortRect.right) + 'px';\n }\n else if (viewPortRect.left > elementRect.left) {\n this.element.style.left = parseInt(this.element.style.left, 10) + (viewPortRect.left - elementRect.left) + 'px';\n }\n }\n }\n }\n };\n Popup.prototype.checkCollision = function () {\n var horz = this.collision.X;\n var vert = this.collision.Y;\n if (horz === 'none' && vert === 'none') {\n return;\n }\n if (horz === 'flip' && vert === 'flip') {\n this.callFlip({ X: true, Y: true });\n }\n else if (horz === 'fit' && vert === 'fit') {\n this.callFit({ X: true, Y: true });\n }\n else {\n if (horz === 'flip') {\n this.callFlip({ X: true, Y: false });\n }\n else if (vert === 'flip') {\n this.callFlip({ Y: true, X: false });\n }\n if (horz === 'fit') {\n this.callFit({ X: true, Y: false });\n }\n else if (vert === 'fit') {\n this.callFit({ X: false, Y: true });\n }\n }\n };\n /**\n * Shows the popup element from screen.\n * @param { AnimationModel | Function } collisionOrAnimationOptions? - To pass animation options or collision function.\n * @param { Function } collision? - To pass the collision function.\n * @param { HTMLElement } relativeElement? - To calculate the zIndex value dynamically.\n */\n Popup.prototype.show = function (animationOptions, relativeElement) {\n var _this = this;\n this.wireEvents();\n if (this.zIndex === 1000 || !isNullOrUndefined(relativeElement)) {\n var zIndexElement = (isNullOrUndefined(relativeElement)) ? this.element : relativeElement;\n this.zIndex = getZindexPartial(zIndexElement);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n }\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.showAnimation;\n if (this.collision.X !== 'none' || this.collision.Y !== 'none') {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.checkCollision();\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n }\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.begin = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.CLOSE);\n addClass([_this.element], CLASSNAMES.OPEN);\n }\n };\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n _this.trigger('open');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.trigger('open');\n }\n };\n /**\n * Hides the popup element from screen.\n * @param { AnimationModel } animationOptions? - To give the animation options.\n */\n Popup.prototype.hide = function (animationOptions) {\n var _this = this;\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.hideAnimation;\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.OPEN);\n addClass([_this.element], CLASSNAMES.CLOSE);\n _this.trigger('close');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n this.trigger('close');\n }\n this.unwireEvents();\n };\n /**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n */\n Popup.prototype.getScrollableParent = function (element) {\n this.checkFixedParent(element);\n return getScrollableParent(element, this.fixedParent);\n };\n Popup.prototype.checkFixedParent = function (element) {\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (parentStyle.position === 'fixed' && this.element.offsetParent && this.element.offsetParent.tagName === 'BODY') {\n this.element.style.position = 'fixed';\n this.fixedParent = true;\n }\n parent = parent.parentElement;\n if (isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed'\n && this.element.style.position === 'fixed') {\n this.fixedParent = true;\n }\n }\n };\n __decorate([\n Property('auto')\n ], Popup.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Popup.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"content\", void 0);\n __decorate([\n Property('container')\n ], Popup.prototype, \"targetType\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"viewPortElement\", void 0);\n __decorate([\n Property({ X: 'none', Y: 'none' })\n ], Popup.prototype, \"collision\", void 0);\n __decorate([\n Property('')\n ], Popup.prototype, \"relateTo\", void 0);\n __decorate([\n Complex({}, PositionData)\n ], Popup.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetY\", void 0);\n __decorate([\n Property(1000)\n ], Popup.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Popup.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('reposition')\n ], Popup.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"showAnimation\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"hideAnimation\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"targetExitViewport\", void 0);\n Popup = __decorate([\n NotifyPropertyChanges\n ], Popup);\n return Popup;\n}(Component));\nexport { Popup };\n/**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @private\n */\nexport function getScrollableParent(element, fixedParent) {\n var eleStyle = getComputedStyle(element);\n var scrollParents = [];\n var overflowRegex = /(auto|scroll)/;\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static')\n && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n if (!fixedParent) {\n scrollParents.push(document);\n }\n return scrollParents;\n}\n/**\n * Gets the maximum z-index of the given element.\n * @param { HTMLElement } element - Specify the element to get the maximum z-index of it.\n * @private\n */\nexport function getZindexPartial(element) {\n // upto body traversal\n var parent = element.parentElement;\n var parentZindex = [];\n while (parent) {\n if (parent.tagName !== 'BODY') {\n var index = document.defaultView.getComputedStyle(parent, null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(parent, null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n parentZindex.push(index);\n }\n parent = parent.parentElement;\n }\n else {\n break;\n }\n }\n //Body direct children element traversal\n var childrenZindex = [];\n for (var i = 0; i < document.body.children.length; i++) {\n if (!element.isEqualNode(document.body.children[i])) {\n var index = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n childrenZindex.push(index);\n }\n }\n }\n childrenZindex.push('999');\n var siblingsZindex = [];\n if (!isNullOrUndefined(element.parentElement) && element.parentElement.tagName !== 'BODY') {\n var childNodes = [].slice.call(element.parentElement.children);\n for (var i = 0; i < childNodes.length; i++) {\n var index = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n siblingsZindex.push(index);\n }\n }\n }\n var finalValue = parentZindex.concat(childrenZindex, siblingsZindex);\n var currentZindexValue = Math.max.apply(Math, finalValue) + 1;\n // Checking the max-zindex value\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n/**\n * Gets the maximum z-index of the page.\n * @param { HTMLElement } tagName - Specify the tagName to get the maximum z-index of it.\n * @private\n */\nexport function getMaxZindex(tagName) {\n if (tagName === void 0) { tagName = ['*']; }\n var maxZindex = [];\n for (var i = 0; i < tagName.length; i++) {\n var elements = document.getElementsByTagName(tagName[i]);\n for (var i_1 = 0; i_1 < elements.length; i_1++) {\n var index = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n maxZindex.push(index);\n }\n }\n }\n var currentZindexValue = Math.max.apply(Math, maxZindex) + 1;\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport { TRUE } from '../functions.js';\nimport { abstract } from '../util.js';\nimport { compose as composeTransform, makeInverse } from '../transform.js';\nimport { getWidth } from '../extent.js';\nimport { shared as iconImageCache } from '../style/IconImageCache.js';\nimport { inView } from '../layer/Layer.js';\nimport { wrapX } from '../coordinate.js';\n/**\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature\n * @property {import(\"../layer/Layer.js\").default} layer\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry\n * @property {number} distanceSq\n * @property {import(\"./vector.js\").FeatureCallback<T>} callback\n * @template T\n */\n/**\n * @abstract\n */\nvar MapRenderer = /** @class */ (function (_super) {\n __extends(MapRenderer, _super);\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n function MapRenderer(map) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n _this.map_ = map;\n return _this;\n }\n /**\n * @abstract\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n MapRenderer.prototype.dispatchRenderEvent = function (type, frameState) {\n abstract();\n };\n /**\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @protected\n */\n MapRenderer.prototype.calculateMatrices2D = function (frameState) {\n var viewState = frameState.viewState;\n var coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n var pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n composeTransform(coordinateToPixelTransform, frameState.size[0] / 2, frameState.size[1] / 2, 1 / viewState.resolution, -1 / viewState.resolution, -viewState.rotation, -viewState.center[0], -viewState.center[1]);\n makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n };\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {import(\"./vector.js\").FeatureCallback<T>} callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\n MapRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, checkWrapped, callback, thisArg, layerFilter, thisArg2) {\n var result;\n var viewState = frameState.viewState;\n /**\n * @param {boolean} managed Managed layer.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n return callback.call(thisArg, feature, managed ? layer : null, geometry);\n }\n var projection = viewState.projection;\n var translatedCoordinate = wrapX(coordinate.slice(), projection);\n var offsets = [[0, 0]];\n if (projection.canWrapX() && checkWrapped) {\n var projectionExtent = projection.getExtent();\n var worldWidth = getWidth(projectionExtent);\n offsets.push([-worldWidth, 0], [worldWidth, 0]);\n }\n var layerStates = frameState.layerStatesArray;\n var numLayers = layerStates.length;\n var matches = /** @type {Array<HitMatch<T>>} */ ([]);\n var tmpCoord = [];\n for (var i = 0; i < offsets.length; i++) {\n for (var j = numLayers - 1; j >= 0; --j) {\n var layerState = layerStates[j];\n var layer = layerState.layer;\n if (layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter.call(thisArg2, layer)) {\n var layerRenderer = layer.getRenderer();\n var source = layer.getSource();\n if (layerRenderer && source) {\n var coordinates = source.getWrapX()\n ? translatedCoordinate\n : coordinate;\n var callback_1 = forEachFeatureAtCoordinate.bind(null, layerState.managed);\n tmpCoord[0] = coordinates[0] + offsets[i][0];\n tmpCoord[1] = coordinates[1] + offsets[i][1];\n result = layerRenderer.forEachFeatureAtCoordinate(tmpCoord, frameState, hitTolerance, callback_1, matches);\n }\n if (result) {\n return result;\n }\n }\n }\n }\n if (matches.length === 0) {\n return undefined;\n }\n var order = 1 / matches.length;\n matches.forEach(function (m, i) { return (m.distanceSq += i * order); });\n matches.sort(function (a, b) { return a.distanceSq - b.distanceSq; });\n matches.some(function (m) {\n return (result = m.callback(m.feature, m.layer, m.geometry));\n });\n return result;\n };\n /**\n * @abstract\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n * callback.\n * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @return {T|undefined} Callback result.\n * @template T\n */\n MapRenderer.prototype.forEachLayerAtPixel = function (pixel, frameState, hitTolerance, callback, layerFilter) {\n return abstract();\n };\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n * @return {boolean} Is there a feature at the given coordinate?\n * @template U\n */\n MapRenderer.prototype.hasFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, checkWrapped, layerFilter, thisArg) {\n var hasFeature = this.forEachFeatureAtCoordinate(coordinate, frameState, hitTolerance, checkWrapped, TRUE, this, layerFilter, thisArg);\n return hasFeature !== undefined;\n };\n /**\n * @return {import(\"../PluggableMap.js\").default} Map.\n */\n MapRenderer.prototype.getMap = function () {\n return this.map_;\n };\n /**\n * Render.\n * @abstract\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n MapRenderer.prototype.renderFrame = function (frameState) {\n abstract();\n };\n /**\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @protected\n */\n MapRenderer.prototype.scheduleExpireIconCache = function (frameState) {\n if (iconImageCache.canExpireCache()) {\n frameState.postRenderFunctions.push(expireIconCache);\n }\n };\n return MapRenderer;\n}(Disposable));\n/**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n iconImageCache.expire();\n}\nexport default MapRenderer;\n//# sourceMappingURL=Map.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/Composite\n */\nimport MapRenderer from './Map.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport SourceState from '../source/State.js';\nimport { CLASS_UNSELECTABLE } from '../css.js';\nimport { checkedFonts } from '../render/canvas.js';\nimport { inView } from '../layer/Layer.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { replaceChildren } from '../dom.js';\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nvar CompositeMapRenderer = /** @class */ (function (_super) {\n __extends(CompositeMapRenderer, _super);\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n function CompositeMapRenderer(map) {\n var _this = _super.call(this, map) || this;\n /**\n * @type {import(\"../events.js\").EventsKey}\n */\n _this.fontChangeListenerKey_ = listen(checkedFonts, ObjectEventType.PROPERTYCHANGE, map.redrawText.bind(map));\n /**\n * @private\n * @type {HTMLDivElement}\n */\n _this.element_ = document.createElement('div');\n var style = _this.element_.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n style.zIndex = '0';\n _this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n var container = map.getViewport();\n container.insertBefore(_this.element_, container.firstChild || null);\n /**\n * @private\n * @type {Array<HTMLElement>}\n */\n _this.children_ = [];\n /**\n * @private\n * @type {boolean}\n */\n _this.renderedVisible_ = true;\n return _this;\n }\n /**\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n CompositeMapRenderer.prototype.dispatchRenderEvent = function (type, frameState) {\n var map = this.getMap();\n if (map.hasListener(type)) {\n var event_1 = new RenderEvent(type, undefined, frameState);\n map.dispatchEvent(event_1);\n }\n };\n CompositeMapRenderer.prototype.disposeInternal = function () {\n unlistenByKey(this.fontChangeListenerKey_);\n this.element_.parentNode.removeChild(this.element_);\n _super.prototype.disposeInternal.call(this);\n };\n /**\n * Render.\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n CompositeMapRenderer.prototype.renderFrame = function (frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element_.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n this.calculateMatrices2D(frameState);\n this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n var layerStatesArray = frameState.layerStatesArray.sort(function (a, b) {\n return a.zIndex - b.zIndex;\n });\n var viewState = frameState.viewState;\n this.children_.length = 0;\n /**\n * @type {Array<import(\"../layer/BaseVector.js\").default>}\n */\n var declutterLayers = [];\n var previousElement = null;\n for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n var layerState = layerStatesArray[i];\n frameState.layerIndex = i;\n if (!inView(layerState, viewState) ||\n (layerState.sourceState != SourceState.READY &&\n layerState.sourceState != SourceState.UNDEFINED)) {\n continue;\n }\n var layer = layerState.layer;\n var element = layer.render(frameState, previousElement);\n if (!element) {\n continue;\n }\n if (element !== previousElement) {\n this.children_.push(element);\n previousElement = element;\n }\n if ('getDeclutter' in layer) {\n declutterLayers.push(layer);\n }\n }\n for (var i = declutterLayers.length - 1; i >= 0; --i) {\n declutterLayers[i].renderDeclutter(frameState);\n }\n replaceChildren(this.element_, this.children_);\n this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n if (!this.renderedVisible_) {\n this.element_.style.display = '';\n this.renderedVisible_ = true;\n }\n this.scheduleExpireIconCache(frameState);\n };\n /**\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n * callback.\n * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @return {T|undefined} Callback result.\n * @template T\n */\n CompositeMapRenderer.prototype.forEachLayerAtPixel = function (pixel, frameState, hitTolerance, callback, layerFilter) {\n var viewState = frameState.viewState;\n var layerStates = frameState.layerStatesArray;\n var numLayers = layerStates.length;\n for (var i = numLayers - 1; i >= 0; --i) {\n var layerState = layerStates[i];\n var layer = layerState.layer;\n if (layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter(layer)) {\n var layerRenderer = layer.getRenderer();\n var data = layerRenderer.getDataAtPixel(pixel, frameState, hitTolerance);\n if (data) {\n var result = callback(layer, data);\n if (result) {\n return result;\n }\n }\n }\n }\n return undefined;\n };\n return CompositeMapRenderer;\n}(MapRenderer));\nexport default CompositeMapRenderer;\n//# sourceMappingURL=Composite.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/Group\n */\nimport BaseLayer from './Base.js';\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport EventType from '../events/EventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport SourceState from '../source/State.js';\nimport { assert } from '../asserts.js';\nimport { assign, clear } from '../obj.js';\nimport { getChangeEventType } from '../Object.js';\nimport { getIntersection } from '../extent.js';\nimport { getUid } from '../util.js';\nimport { listen, unlistenByKey } from '../events.js';\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array<import(\"./Base.js\").default>|import(\"../Collection.js\").default<import(\"./Base.js\").default>} [layers] Child layers.\n */\n/**\n * @enum {string}\n * @private\n */\nvar Property = {\n LAYERS: 'layers',\n};\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @api\n */\nvar LayerGroup = /** @class */ (function (_super) {\n __extends(LayerGroup, _super);\n /**\n * @param {Options=} opt_options Layer options.\n */\n function LayerGroup(opt_options) {\n var _this = this;\n var options = opt_options || {};\n var baseOptions = /** @type {Options} */ (assign({}, options));\n delete baseOptions.layers;\n var layers = options.layers;\n _this = _super.call(this, baseOptions) || this;\n /**\n * @private\n * @type {Array<import(\"../events.js\").EventsKey>}\n */\n _this.layersListenerKeys_ = [];\n /**\n * @private\n * @type {Object<string, Array<import(\"../events.js\").EventsKey>>}\n */\n _this.listenerKeys_ = {};\n _this.addEventListener(getChangeEventType(Property.LAYERS), _this.handleLayersChanged_);\n if (layers) {\n if (Array.isArray(layers)) {\n layers = new Collection(layers.slice(), { unique: true });\n }\n else {\n assert(typeof ( /** @type {?} */(layers).getArray) === 'function', 43); // Expected `layers` to be an array or a `Collection`\n }\n }\n else {\n layers = new Collection(undefined, { unique: true });\n }\n _this.setLayers(layers);\n return _this;\n }\n /**\n * @private\n */\n LayerGroup.prototype.handleLayerChange_ = function () {\n this.changed();\n };\n /**\n * @private\n */\n LayerGroup.prototype.handleLayersChanged_ = function () {\n this.layersListenerKeys_.forEach(unlistenByKey);\n this.layersListenerKeys_.length = 0;\n var layers = this.getLayers();\n this.layersListenerKeys_.push(listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this), listen(layers, CollectionEventType.REMOVE, this.handleLayersRemove_, this));\n for (var id in this.listenerKeys_) {\n this.listenerKeys_[id].forEach(unlistenByKey);\n }\n clear(this.listenerKeys_);\n var layersArray = layers.getArray();\n for (var i = 0, ii = layersArray.length; i < ii; i++) {\n var layer = layersArray[i];\n this.listenerKeys_[getUid(layer)] = [\n listen(layer, ObjectEventType.PROPERTYCHANGE, this.handleLayerChange_, this),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n ];\n }\n this.changed();\n };\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n LayerGroup.prototype.handleLayersAdd_ = function (collectionEvent) {\n var layer = /** @type {import(\"./Base.js\").default} */ (collectionEvent.element);\n this.listenerKeys_[getUid(layer)] = [\n listen(layer, ObjectEventType.PROPERTYCHANGE, this.handleLayerChange_, this),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n ];\n this.changed();\n };\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n LayerGroup.prototype.handleLayersRemove_ = function (collectionEvent) {\n var layer = /** @type {import(\"./Base.js\").default} */ (collectionEvent.element);\n var key = getUid(layer);\n this.listenerKeys_[key].forEach(unlistenByKey);\n delete this.listenerKeys_[key];\n this.changed();\n };\n /**\n * Returns the {@link module:ol/Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @return {!import(\"../Collection.js\").default<import(\"./Base.js\").default>} Collection of\n * {@link module:ol/layer/Base layers} that are part of this group.\n * @observable\n * @api\n */\n LayerGroup.prototype.getLayers = function () {\n return /** @type {!import(\"../Collection.js\").default<import(\"./Base.js\").default>} */ (this.get(Property.LAYERS));\n };\n /**\n * Set the {@link module:ol/Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @param {!import(\"../Collection.js\").default<import(\"./Base.js\").default>} layers Collection of\n * {@link module:ol/layer/Base layers} that are part of this group.\n * @observable\n * @api\n */\n LayerGroup.prototype.setLayers = function (layers) {\n this.set(Property.LAYERS, layers);\n };\n /**\n * @param {Array<import(\"./Layer.js\").default>=} opt_array Array of layers (to be modified in place).\n * @return {Array<import(\"./Layer.js\").default>} Array of layers.\n */\n LayerGroup.prototype.getLayersArray = function (opt_array) {\n var array = opt_array !== undefined ? opt_array : [];\n this.getLayers().forEach(function (layer) {\n layer.getLayersArray(array);\n });\n return array;\n };\n /**\n * @param {Array<import(\"./Layer.js\").State>=} opt_states Optional list of layer states (to be modified in place).\n * @return {Array<import(\"./Layer.js\").State>} List of layer states.\n */\n LayerGroup.prototype.getLayerStatesArray = function (opt_states) {\n var states = opt_states !== undefined ? opt_states : [];\n var pos = states.length;\n this.getLayers().forEach(function (layer) {\n layer.getLayerStatesArray(states);\n });\n var ownLayerState = this.getLayerState();\n for (var i = pos, ii = states.length; i < ii; i++) {\n var layerState = states[i];\n layerState.opacity *= ownLayerState.opacity;\n layerState.visible = layerState.visible && ownLayerState.visible;\n layerState.maxResolution = Math.min(layerState.maxResolution, ownLayerState.maxResolution);\n layerState.minResolution = Math.max(layerState.minResolution, ownLayerState.minResolution);\n layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);\n layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);\n if (ownLayerState.extent !== undefined) {\n if (layerState.extent !== undefined) {\n layerState.extent = getIntersection(layerState.extent, ownLayerState.extent);\n }\n else {\n layerState.extent = ownLayerState.extent;\n }\n }\n }\n return states;\n };\n /**\n * @return {import(\"../source/State.js\").default} Source state.\n */\n LayerGroup.prototype.getSourceState = function () {\n return SourceState.READY;\n };\n return LayerGroup;\n}(BaseLayer));\nexport default LayerGroup;\n//# sourceMappingURL=Group.js.map","/**\n * @module ol/pointer/EventType\n */\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n//# sourceMappingURL=EventType.js.map","/**\n * @module ol/MapBrowserEventHandler\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport { DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS } from './has.js';\nimport { listen, unlistenByKey } from './events.js';\nvar MapBrowserEventHandler = /** @class */ (function (_super) {\n __extends(MapBrowserEventHandler, _super);\n /**\n * @param {import(\"./PluggableMap.js\").default} map The map with the viewport to listen to events on.\n * @param {number=} moveTolerance The minimal distance the pointer must travel to trigger a move.\n */\n function MapBrowserEventHandler(map, moveTolerance) {\n var _this = _super.call(this, map) || this;\n /**\n * This is the element that we will listen to the real events on.\n * @type {import(\"./PluggableMap.js\").default}\n * @private\n */\n _this.map_ = map;\n /**\n * @type {any}\n * @private\n */\n _this.clickTimeoutId_;\n /**\n * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n * @type {boolean}\n */\n _this.emulateClicks_ = false;\n /**\n * @type {boolean}\n * @private\n */\n _this.dragging_ = false;\n /**\n * @type {!Array<import(\"./events.js\").EventsKey>}\n * @private\n */\n _this.dragListenerKeys_ = [];\n /**\n * @type {number}\n * @private\n */\n _this.moveTolerance_ = moveTolerance\n ? moveTolerance * DEVICE_PIXEL_RATIO\n : DEVICE_PIXEL_RATIO;\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {PointerEvent}\n * @private\n */\n _this.down_ = null;\n var element = _this.map_.getViewport();\n /**\n * @type {number}\n * @private\n */\n _this.activePointers_ = 0;\n /**\n * @type {!Object<number, boolean>}\n * @private\n */\n _this.trackedTouches_ = {};\n _this.element_ = element;\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n _this.pointerdownListenerKey_ = listen(element, PointerEventType.POINTERDOWN, _this.handlePointerDown_, _this);\n /**\n * @type {PointerEvent}\n * @private\n */\n _this.originalPointerMoveEvent_;\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n _this.relayedListenerKey_ = listen(element, PointerEventType.POINTERMOVE, _this.relayEvent_, _this);\n /**\n * @private\n */\n _this.boundHandleTouchMove_ = _this.handleTouchMove_.bind(_this);\n _this.element_.addEventListener(EventType.TOUCHMOVE, _this.boundHandleTouchMove_, PASSIVE_EVENT_LISTENERS ? { passive: false } : false);\n return _this;\n }\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.emulateClick_ = function (pointerEvent) {\n var newEvent = new MapBrowserEvent(MapBrowserEventType.CLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== undefined) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = undefined;\n newEvent = new MapBrowserEvent(MapBrowserEventType.DBLCLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n }\n else {\n // click\n this.clickTimeoutId_ = setTimeout(\n /** @this {MapBrowserEventHandler} */\n function () {\n this.clickTimeoutId_ = undefined;\n var newEvent = new MapBrowserEvent(MapBrowserEventType.SINGLECLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n }.bind(this), 250);\n }\n };\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.updateActivePointers_ = function (pointerEvent) {\n var event = pointerEvent;\n if (event.type == MapBrowserEventType.POINTERUP ||\n event.type == MapBrowserEventType.POINTERCANCEL) {\n delete this.trackedTouches_[event.pointerId];\n }\n else if (event.type == MapBrowserEventType.POINTERDOWN) {\n this.trackedTouches_[event.pointerId] = true;\n }\n this.activePointers_ = Object.keys(this.trackedTouches_).length;\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.handlePointerUp_ = function (pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERUP, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.stopPropagation() or event.preventDefault().\n if (this.emulateClicks_ &&\n !newEvent.propagationStopped &&\n !this.dragging_ &&\n this.isMouseActionButton_(pointerEvent)) {\n this.emulateClick_(this.down_);\n }\n if (this.activePointers_ === 0) {\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n }\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n MapBrowserEventHandler.prototype.isMouseActionButton_ = function (pointerEvent) {\n return pointerEvent.button === 0;\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.handlePointerDown_ = function (pointerEvent) {\n this.emulateClicks_ = this.activePointers_ === 0;\n this.updateActivePointers_(pointerEvent);\n var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERDOWN, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n this.down_ = pointerEvent;\n if (this.dragListenerKeys_.length === 0) {\n var doc = this.map_.getOwnerDocument();\n this.dragListenerKeys_.push(listen(doc, MapBrowserEventType.POINTERMOVE, this.handlePointerMove_, this), listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this), \n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n listen(this.element_, MapBrowserEventType.POINTERCANCEL, this.handlePointerUp_, this));\n if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n this.dragListenerKeys_.push(listen(this.element_.getRootNode(), MapBrowserEventType.POINTERUP, this.handlePointerUp_, this));\n }\n }\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.handlePointerMove_ = function (pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.dragging_ = true;\n var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERDRAG, this.map_, pointerEvent, this.dragging_);\n this.dispatchEvent(newEvent);\n }\n };\n /**\n * Wrap and relay a pointer event. Note that this requires that the type\n * string for the MapBrowserEvent matches the PointerEvent type.\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.relayEvent_ = function (pointerEvent) {\n this.originalPointerMoveEvent_ = pointerEvent;\n var dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(new MapBrowserEvent(pointerEvent.type, this.map_, pointerEvent, dragging));\n };\n /**\n * Flexible handling of a `touch-action: none` css equivalent: because calling\n * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n * when an interaction (currently `DragPan` handles the event.\n * @param {TouchEvent} event Event.\n * @private\n */\n MapBrowserEventHandler.prototype.handleTouchMove_ = function (event) {\n // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n // may not be initialized yet when we get here on a platform without native pointer events.\n if (!this.originalPointerMoveEvent_ ||\n this.originalPointerMoveEvent_.defaultPrevented) {\n event.preventDefault();\n }\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n MapBrowserEventHandler.prototype.isMoving_ = function (pointerEvent) {\n return (this.dragging_ ||\n Math.abs(pointerEvent.clientX - this.down_.clientX) >\n this.moveTolerance_ ||\n Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_);\n };\n /**\n * Clean up.\n */\n MapBrowserEventHandler.prototype.disposeInternal = function () {\n if (this.relayedListenerKey_) {\n unlistenByKey(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n this.element_.removeEventListener(EventType.TOUCHMOVE, this.boundHandleTouchMove_);\n if (this.pointerdownListenerKey_) {\n unlistenByKey(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.element_ = null;\n _super.prototype.disposeInternal.call(this);\n };\n return MapBrowserEventHandler;\n}(EventTarget));\nexport default MapBrowserEventHandler;\n//# sourceMappingURL=MapBrowserEventHandler.js.map","/**\n * @module ol/MapProperty\n */\n/**\n * @enum {string}\n */\nexport default {\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view',\n};\n//# sourceMappingURL=MapProperty.js.map","/**\n * @module ol/structs/PriorityQueue\n */\nimport { assert } from '../asserts.js';\nimport { clear } from '../obj.js';\n/**\n * @type {number}\n */\nexport var DROP = Infinity;\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See http://closure-library.googlecode.com/svn/docs/closure_goog_structs_heap.js.source.html\n * and http://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nvar PriorityQueue = /** @class */ (function () {\n /**\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n */\n function PriorityQueue(priorityFunction, keyFunction) {\n /**\n * @type {function(T): number}\n * @private\n */\n this.priorityFunction_ = priorityFunction;\n /**\n * @type {function(T): string}\n * @private\n */\n this.keyFunction_ = keyFunction;\n /**\n * @type {Array<T>}\n * @private\n */\n this.elements_ = [];\n /**\n * @type {Array<number>}\n * @private\n */\n this.priorities_ = [];\n /**\n * @type {!Object<string, boolean>}\n * @private\n */\n this.queuedElements_ = {};\n }\n /**\n * FIXME empty description for jsdoc\n */\n PriorityQueue.prototype.clear = function () {\n this.elements_.length = 0;\n this.priorities_.length = 0;\n clear(this.queuedElements_);\n };\n /**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\n PriorityQueue.prototype.dequeue = function () {\n var elements = this.elements_;\n var priorities = this.priorities_;\n var element = elements[0];\n if (elements.length == 1) {\n elements.length = 0;\n priorities.length = 0;\n }\n else {\n elements[0] = elements.pop();\n priorities[0] = priorities.pop();\n this.siftUp_(0);\n }\n var elementKey = this.keyFunction_(element);\n delete this.queuedElements_[elementKey];\n return element;\n };\n /**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\n PriorityQueue.prototype.enqueue = function (element) {\n assert(!(this.keyFunction_(element) in this.queuedElements_), 31); // Tried to enqueue an `element` that was already added to the queue\n var priority = this.priorityFunction_(element);\n if (priority != DROP) {\n this.elements_.push(element);\n this.priorities_.push(priority);\n this.queuedElements_[this.keyFunction_(element)] = true;\n this.siftDown_(0, this.elements_.length - 1);\n return true;\n }\n return false;\n };\n /**\n * @return {number} Count.\n */\n PriorityQueue.prototype.getCount = function () {\n return this.elements_.length;\n };\n /**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\n PriorityQueue.prototype.getLeftChildIndex_ = function (index) {\n return index * 2 + 1;\n };\n /**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\n PriorityQueue.prototype.getRightChildIndex_ = function (index) {\n return index * 2 + 2;\n };\n /**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\n PriorityQueue.prototype.getParentIndex_ = function (index) {\n return (index - 1) >> 1;\n };\n /**\n * Make this a heap. O(N).\n * @private\n */\n PriorityQueue.prototype.heapify_ = function () {\n var i;\n for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n this.siftUp_(i);\n }\n };\n /**\n * @return {boolean} Is empty.\n */\n PriorityQueue.prototype.isEmpty = function () {\n return this.elements_.length === 0;\n };\n /**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\n PriorityQueue.prototype.isKeyQueued = function (key) {\n return key in this.queuedElements_;\n };\n /**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\n PriorityQueue.prototype.isQueued = function (element) {\n return this.isKeyQueued(this.keyFunction_(element));\n };\n /**\n * @param {number} index The index of the node to move down.\n * @private\n */\n PriorityQueue.prototype.siftUp_ = function (index) {\n var elements = this.elements_;\n var priorities = this.priorities_;\n var count = elements.length;\n var element = elements[index];\n var priority = priorities[index];\n var startIndex = index;\n while (index < count >> 1) {\n var lIndex = this.getLeftChildIndex_(index);\n var rIndex = this.getRightChildIndex_(index);\n var smallerChildIndex = rIndex < count && priorities[rIndex] < priorities[lIndex]\n ? rIndex\n : lIndex;\n elements[index] = elements[smallerChildIndex];\n priorities[index] = priorities[smallerChildIndex];\n index = smallerChildIndex;\n }\n elements[index] = element;\n priorities[index] = priority;\n this.siftDown_(startIndex, index);\n };\n /**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\n PriorityQueue.prototype.siftDown_ = function (startIndex, index) {\n var elements = this.elements_;\n var priorities = this.priorities_;\n var element = elements[index];\n var priority = priorities[index];\n while (index > startIndex) {\n var parentIndex = this.getParentIndex_(index);\n if (priorities[parentIndex] > priority) {\n elements[index] = elements[parentIndex];\n priorities[index] = priorities[parentIndex];\n index = parentIndex;\n }\n else {\n break;\n }\n }\n elements[index] = element;\n priorities[index] = priority;\n };\n /**\n * FIXME empty description for jsdoc\n */\n PriorityQueue.prototype.reprioritize = function () {\n var priorityFunction = this.priorityFunction_;\n var elements = this.elements_;\n var priorities = this.priorities_;\n var index = 0;\n var n = elements.length;\n var element, i, priority;\n for (i = 0; i < n; ++i) {\n element = elements[i];\n priority = priorityFunction(element);\n if (priority == DROP) {\n delete this.queuedElements_[this.keyFunction_(element)];\n }\n else {\n priorities[index] = priority;\n elements[index++] = element;\n }\n }\n elements.length = index;\n priorities.length = index;\n this.heapify_();\n };\n return PriorityQueue;\n}());\nexport default PriorityQueue;\n//# sourceMappingURL=PriorityQueue.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/TileQueue\n */\nimport EventType from './events/EventType.js';\nimport PriorityQueue, { DROP } from './structs/PriorityQueue.js';\nimport TileState from './TileState.js';\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import(\"./coordinate.js\").Coordinate, number): number} PriorityFunction\n */\nvar TileQueue = /** @class */ (function (_super) {\n __extends(TileQueue, _super);\n /**\n * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n function TileQueue(tilePriorityFunction, tileChangeCallback) {\n var _this = _super.call(this, \n /**\n * @param {Array} element Element.\n * @return {number} Priority.\n */\n function (element) {\n return tilePriorityFunction.apply(null, element);\n }, \n /**\n * @param {Array} element Element.\n * @return {string} Key.\n */\n function (element) {\n return /** @type {import(\"./Tile.js\").default} */ (element[0]).getKey();\n }) || this;\n /** @private */\n _this.boundHandleTileChange_ = _this.handleTileChange.bind(_this);\n /**\n * @private\n * @type {function(): ?}\n */\n _this.tileChangeCallback_ = tileChangeCallback;\n /**\n * @private\n * @type {number}\n */\n _this.tilesLoading_ = 0;\n /**\n * @private\n * @type {!Object<string,boolean>}\n */\n _this.tilesLoadingKeys_ = {};\n return _this;\n }\n /**\n * @param {Array} element Element.\n * @return {boolean} The element was added to the queue.\n */\n TileQueue.prototype.enqueue = function (element) {\n var added = _super.prototype.enqueue.call(this, element);\n if (added) {\n var tile = element[0];\n tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n return added;\n };\n /**\n * @return {number} Number of tiles loading.\n */\n TileQueue.prototype.getTilesLoading = function () {\n return this.tilesLoading_;\n };\n /**\n * @param {import(\"./events/Event.js\").default} event Event.\n * @protected\n */\n TileQueue.prototype.handleTileChange = function (event) {\n var tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n var state = tile.getState();\n if ((tile.hifi && state === TileState.LOADED) ||\n state === TileState.ERROR ||\n state === TileState.EMPTY) {\n tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n var tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n };\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n TileQueue.prototype.loadMoreTiles = function (maxTotalLoading, maxNewLoads) {\n var newLoads = 0;\n var state, tile, tileKey;\n while (this.tilesLoading_ < maxTotalLoading &&\n newLoads < maxNewLoads &&\n this.getCount() > 0) {\n tile = /** @type {import(\"./Tile.js\").default} */ (this.dequeue()[0]);\n tileKey = tile.getKey();\n state = tile.getState();\n if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n };\n return TileQueue;\n}(PriorityQueue));\nexport default TileQueue;\n/**\n * @param {import('./PluggableMap.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(frameState, tile, tileSourceKey, tileCenter, tileResolution) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels between\n // the center of the tile and the center of the viewport. The factor of 65536\n // means that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n var center = frameState.viewState.center;\n var deltaX = tileCenter[0] - center[0];\n var deltaY = tileCenter[1] - center[1];\n return (65536 * Math.log(tileResolution) +\n Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution);\n}\n//# sourceMappingURL=TileQueue.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/PluggableMap\n */\nimport BaseObject, { getChangeEventType } from './Object.js';\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport EventType from './events/EventType.js';\nimport LayerGroup from './layer/Group.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport RenderEventType from './render/EventType.js';\nimport TileQueue, { getTilePriority } from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport { DEVICE_PIXEL_RATIO, IMAGE_DECODE, PASSIVE_EVENT_LISTENERS, } from './has.js';\nimport { TRUE } from './functions.js';\nimport { apply as applyTransform, create as createTransform, } from './transform.js';\nimport { assert } from './asserts.js';\nimport { clone, createOrUpdateEmpty, equals, getForViewAndSize, isEmpty, } from './extent.js';\nimport { fromUserCoordinate, toUserCoordinate } from './proj.js';\nimport { hasArea } from './size.js';\nimport { listen, unlistenByKey } from './events.js';\nimport { removeNode } from './dom.js';\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform\n * @property {import(\"rbush\").default} declutterTree\n * @property {null|import(\"./extent.js\").Extent} extent\n * @property {number} index\n * @property {Array<import(\"./layer/Layer.js\").State>} layerStatesArray\n * @property {number} layerIndex\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform\n * @property {Array<PostRenderFunction>} postRenderFunctions\n * @property {import(\"./size.js\").Size} size\n * @property {TileQueue} tileQueue\n * @property {!Object<string, Object<string, boolean>>} usedTiles\n * @property {Array<number>} viewHints\n * @property {!Object<string, Object<string, boolean>>} wantedTiles\n */\n/**\n * @typedef {function(PluggableMap, ?FrameState): any} PostRenderFunction\n */\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for for wrapped geometries inside the range of\n * +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection<import(\"./control/Control.js\").default>} [controls]\n * @property {Collection<import(\"./interaction/Interaction.js\").default>} [interactions]\n * @property {HTMLElement|Document} keyboardEventTarget\n * @property {Collection<import(\"./Overlay.js\").default>} overlays\n * @property {Object<string, *>} values\n */\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection<import(\"./control/Control.js\").default>|Array<import(\"./control/Control.js\").default>} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control~defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection<import(\"./interaction/Interaction.js\").default>|Array<import(\"./interaction/Interaction.js\").default>} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction~defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array<import(\"./layer/Base.js\").default>|Collection<import(\"./layer/Base.js\").default>|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection<import(\"./Overlay.js\").default>|Array<import(\"./Overlay.js\").default>} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * @property {View} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n/**\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nvar PluggableMap = /** @class */ (function (_super) {\n __extends(PluggableMap, _super);\n /**\n * @param {MapOptions} options Map options.\n */\n function PluggableMap(options) {\n var _this = _super.call(this) || this;\n var optionsInternal = createOptionsInternal(options);\n /** @private */\n _this.boundHandleBrowserEvent_ = _this.handleBrowserEvent.bind(_this);\n /**\n * @type {number}\n * @private\n */\n _this.maxTilesLoading_ =\n options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n /**\n * @private\n * @type {number}\n */\n _this.pixelRatio_ =\n options.pixelRatio !== undefined\n ? options.pixelRatio\n : DEVICE_PIXEL_RATIO;\n /**\n * @private\n * @type {*}\n */\n _this.postRenderTimeoutHandle_;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.animationDelayKey_;\n /**\n * @private\n */\n _this.animationDelay_ = /** @this {PluggableMap} */ function () {\n this.animationDelayKey_ = undefined;\n this.renderFrame_(Date.now());\n }.bind(_this);\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n _this.coordinateToPixelTransform_ = createTransform();\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n _this.pixelToCoordinateTransform_ = createTransform();\n /**\n * @private\n * @type {number}\n */\n _this.frameIndex_ = 0;\n /**\n * @private\n * @type {?FrameState}\n */\n _this.frameState_ = null;\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {import(\"./extent.js\").Extent}\n */\n _this.previousExtent_ = null;\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n _this.viewPropertyListenerKey_ = null;\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n _this.viewChangeListenerKey_ = null;\n /**\n * @private\n * @type {?Array<import(\"./events.js\").EventsKey>}\n */\n _this.layerGroupPropertyListenerKeys_ = null;\n /**\n * @private\n * @type {!HTMLElement}\n */\n _this.viewport_ = document.createElement('div');\n _this.viewport_.className =\n 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n _this.viewport_.style.position = 'relative';\n _this.viewport_.style.overflow = 'hidden';\n _this.viewport_.style.width = '100%';\n _this.viewport_.style.height = '100%';\n /**\n * @private\n * @type {!HTMLElement}\n */\n _this.overlayContainer_ = document.createElement('div');\n _this.overlayContainer_.style.position = 'absolute';\n _this.overlayContainer_.style.zIndex = '0';\n _this.overlayContainer_.style.width = '100%';\n _this.overlayContainer_.style.height = '100%';\n _this.overlayContainer_.style.pointerEvents = 'none';\n _this.overlayContainer_.className = 'ol-overlaycontainer';\n _this.viewport_.appendChild(_this.overlayContainer_);\n /**\n * @private\n * @type {!HTMLElement}\n */\n _this.overlayContainerStopEvent_ = document.createElement('div');\n _this.overlayContainerStopEvent_.style.position = 'absolute';\n _this.overlayContainerStopEvent_.style.zIndex = '0';\n _this.overlayContainerStopEvent_.style.width = '100%';\n _this.overlayContainerStopEvent_.style.height = '100%';\n _this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n _this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n _this.viewport_.appendChild(_this.overlayContainerStopEvent_);\n /**\n * @private\n * @type {MapBrowserEventHandler}\n */\n _this.mapBrowserEventHandler_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.moveTolerance_ = options.moveTolerance;\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n _this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n /**\n * @private\n * @type {?Array<import(\"./events.js\").EventsKey>}\n */\n _this.keyHandlerKeys_ = null;\n /**\n * @type {Collection<import(\"./control/Control.js\").default>}\n * @protected\n */\n _this.controls = optionsInternal.controls || new Collection();\n /**\n * @type {Collection<import(\"./interaction/Interaction.js\").default>}\n * @protected\n */\n _this.interactions = optionsInternal.interactions || new Collection();\n /**\n * @type {Collection<import(\"./Overlay.js\").default>}\n * @private\n */\n _this.overlays_ = optionsInternal.overlays;\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object<string, import(\"./Overlay.js\").default>}\n */\n _this.overlayIdIndex_ = {};\n /**\n * @type {import(\"./renderer/Map.js\").default}\n * @private\n */\n _this.renderer_ = null;\n /**\n * @type {undefined|function(Event): void}\n * @private\n */\n _this.handleResize_;\n /**\n * @private\n * @type {!Array<PostRenderFunction>}\n */\n _this.postRenderFunctions_ = [];\n /**\n * @private\n * @type {TileQueue}\n */\n _this.tileQueue_ = new TileQueue(_this.getTilePriority.bind(_this), _this.handleTileChange_.bind(_this));\n _this.addEventListener(getChangeEventType(MapProperty.LAYERGROUP), _this.handleLayerGroupChanged_);\n _this.addEventListener(getChangeEventType(MapProperty.VIEW), _this.handleViewChanged_);\n _this.addEventListener(getChangeEventType(MapProperty.SIZE), _this.handleSizeChanged_);\n _this.addEventListener(getChangeEventType(MapProperty.TARGET), _this.handleTargetChanged_);\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n _this.setProperties(optionsInternal.values);\n _this.controls.forEach(\n /**\n * @param {import(\"./control/Control.js\").default} control Control.\n * @this {PluggableMap}\n */\n function (control) {\n control.setMap(this);\n }.bind(_this));\n _this.controls.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(_this));\n _this.controls.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(_this));\n _this.interactions.forEach(\n /**\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n * @this {PluggableMap}\n */\n function (interaction) {\n interaction.setMap(this);\n }.bind(_this));\n _this.interactions.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(_this));\n _this.interactions.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(_this));\n _this.overlays_.forEach(_this.addOverlayInternal_.bind(_this));\n _this.overlays_.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n this.addOverlayInternal_(\n /** @type {import(\"./Overlay.js\").default} */ (event.element));\n }.bind(_this));\n _this.overlays_.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n var overlay = /** @type {import(\"./Overlay.js\").default} */ (event.element);\n var id = overlay.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n }.bind(_this));\n return _this;\n }\n /**\n * @abstract\n * @return {import(\"./renderer/Map.js\").default} The map renderer\n */\n PluggableMap.prototype.createRenderer = function () {\n throw new Error('Use a map type that has a createRenderer method');\n };\n /**\n * Add the given control to the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @api\n */\n PluggableMap.prototype.addControl = function (control) {\n this.getControls().push(control);\n };\n /**\n * Add the given interaction to the map. If you want to add an interaction\n * at another point of the collection use `getInteraction()` and the methods\n * available on {@link module:ol/Collection~Collection}. This can be used to\n * stop the event propagation from the handleEvent function. The interactions\n * get to handle the events in the reverse order of this collection.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n * @api\n */\n PluggableMap.prototype.addInteraction = function (interaction) {\n this.getInteractions().push(interaction);\n };\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @api\n */\n PluggableMap.prototype.addLayer = function (layer) {\n var layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n };\n /**\n * Add the given overlay to the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @api\n */\n PluggableMap.prototype.addOverlay = function (overlay) {\n this.getOverlays().push(overlay);\n };\n /**\n * This deals with map's overlay collection changes.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @private\n */\n PluggableMap.prototype.addOverlayInternal_ = function (overlay) {\n var id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n };\n /**\n *\n * Clean up.\n */\n PluggableMap.prototype.disposeInternal = function () {\n this.setTarget(null);\n _super.prototype.disposeInternal.call(this);\n };\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `opt_options`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature feature} or\n * {@link module:ol/render/Feature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {AtPixelOptions=} opt_options Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template S,T\n * @api\n */\n PluggableMap.prototype.forEachFeatureAtPixel = function (pixel, callback, opt_options) {\n if (!this.frameState_) {\n return;\n }\n var coordinate = this.getCoordinateFromPixelInternal(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n var hitTolerance = opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n var layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n var checkWrapped = opt_options.checkWrapped !== false;\n return this.renderer_.forEachFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, callback, null, layerFilter, null);\n };\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions=} opt_options Optional options.\n * @return {Array<import(\"./Feature.js\").FeatureLike>} The detected features or\n * an empty array if none were found.\n * @api\n */\n PluggableMap.prototype.getFeaturesAtPixel = function (pixel, opt_options) {\n var features = [];\n this.forEachFeatureAtPixel(pixel, function (feature) {\n features.push(feature);\n }, opt_options);\n return features;\n };\n /**\n * Detect layers that have a color value at a pixel on the viewport, and\n * execute a callback with each matching layer. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n *\n * Note: this may give false positives unless the map layers have had different `className`\n * properties assigned to them.\n *\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(this: S, import(\"./layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback\n * Layer callback. This callback will receive two arguments: first is the\n * {@link module:ol/layer/Layer layer}, second argument is an array representing\n * [R, G, B, A] pixel values (0 - 255) and will be `null` for layer types\n * that do not currently support this argument. To stop detection, callback\n * functions can return a truthy value.\n * @param {AtPixelOptions=} opt_options Configuration options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template S,T\n * @api\n */\n PluggableMap.prototype.forEachLayerAtPixel = function (pixel, callback, opt_options) {\n if (!this.frameState_) {\n return;\n }\n var options = opt_options || {};\n var hitTolerance = options.hitTolerance !== undefined ? options.hitTolerance : 0;\n var layerFilter = options.layerFilter || TRUE;\n return this.renderer_.forEachLayerAtPixel(pixel, this.frameState_, hitTolerance, callback, layerFilter);\n };\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions=} opt_options Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @api\n */\n PluggableMap.prototype.hasFeatureAtPixel = function (pixel, opt_options) {\n if (!this.frameState_) {\n return false;\n }\n var coordinate = this.getCoordinateFromPixelInternal(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n var layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n var hitTolerance = opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n var checkWrapped = opt_options.checkWrapped !== false;\n return this.renderer_.hasFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, layerFilter, null);\n };\n /**\n * Returns the coordinate in user projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n PluggableMap.prototype.getEventCoordinate = function (event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n };\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n */\n PluggableMap.prototype.getEventCoordinateInternal = function (event) {\n return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n };\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {UIEvent} event Event.\n * @return {import(\"./pixel.js\").Pixel} Pixel.\n * @api\n */\n PluggableMap.prototype.getEventPixel = function (event) {\n var viewportPosition = this.viewport_.getBoundingClientRect();\n var eventPosition = \n //FIXME Are we really calling this with a TouchEvent anywhere?\n 'changedTouches' in event\n ? /** @type {TouchEvent} */ (event).changedTouches[0]\n : /** @type {MouseEvent} */ (event);\n return [\n eventPosition.clientX - viewportPosition.left,\n eventPosition.clientY - viewportPosition.top,\n ];\n };\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n PluggableMap.prototype.getTarget = function () {\n return /** @type {HTMLElement|string|undefined} */ (this.get(MapProperty.TARGET));\n };\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n PluggableMap.prototype.getTargetElement = function () {\n var target = this.getTarget();\n if (target !== undefined) {\n return typeof target === 'string'\n ? document.getElementById(target)\n : target;\n }\n else {\n return null;\n }\n };\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * user projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n * @api\n */\n PluggableMap.prototype.getCoordinateFromPixel = function (pixel) {\n return toUserCoordinate(this.getCoordinateFromPixelInternal(pixel), this.getView().getProjection());\n };\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n */\n PluggableMap.prototype.getCoordinateFromPixelInternal = function (pixel) {\n var frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n else {\n return applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n }\n };\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {Collection<import(\"./control/Control.js\").default>} Controls.\n * @api\n */\n PluggableMap.prototype.getControls = function () {\n return this.controls;\n };\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {Collection<import(\"./Overlay.js\").default>} Overlays.\n * @api\n */\n PluggableMap.prototype.getOverlays = function () {\n return this.overlays_;\n };\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {import(\"./Overlay.js\").default} Overlay.\n * @api\n */\n PluggableMap.prototype.getOverlayById = function (id) {\n var overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n };\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {Collection<import(\"./interaction/Interaction.js\").default>} Interactions.\n * @api\n */\n PluggableMap.prototype.getInteractions = function () {\n return this.interactions;\n };\n /**\n * Get the layergroup associated with this map.\n * @return {LayerGroup} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n PluggableMap.prototype.getLayerGroup = function () {\n return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n };\n /**\n * Get the collection of layers associated with this map.\n * @return {!Collection<import(\"./layer/Base.js\").default>} Layers.\n * @api\n */\n PluggableMap.prototype.getLayers = function () {\n var layers = this.getLayerGroup().getLayers();\n return layers;\n };\n /**\n * @return {boolean} Layers have sources that are still loading.\n */\n PluggableMap.prototype.getLoading = function () {\n var layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n var layer = layerStatesArray[i].layer;\n var source = /** @type {import(\"./layer/Layer.js\").default} */ (layer).getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n };\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the user\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n * @api\n */\n PluggableMap.prototype.getPixelFromCoordinate = function (coordinate) {\n var viewCoordinate = fromUserCoordinate(coordinate, this.getView().getProjection());\n return this.getPixelFromCoordinateInternal(viewCoordinate);\n };\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n */\n PluggableMap.prototype.getPixelFromCoordinateInternal = function (coordinate) {\n var frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n else {\n return applyTransform(frameState.coordinateToPixelTransform, coordinate.slice(0, 2));\n }\n };\n /**\n * Get the map renderer.\n * @return {import(\"./renderer/Map.js\").default} Renderer\n */\n PluggableMap.prototype.getRenderer = function () {\n return this.renderer_;\n };\n /**\n * Get the size of this map.\n * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n PluggableMap.prototype.getSize = function () {\n return /** @type {import(\"./size.js\").Size|undefined} */ (this.get(MapProperty.SIZE));\n };\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {View} The view that controls this map.\n * @observable\n * @api\n */\n PluggableMap.prototype.getView = function () {\n return /** @type {View} */ (this.get(MapProperty.VIEW));\n };\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n PluggableMap.prototype.getViewport = function () {\n return this.viewport_;\n };\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n PluggableMap.prototype.getOverlayContainer = function () {\n return this.overlayContainer_;\n };\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n PluggableMap.prototype.getOverlayContainerStopEvent = function () {\n return this.overlayContainerStopEvent_;\n };\n /**\n * @return {!Document} The document where the map is displayed.\n */\n PluggableMap.prototype.getOwnerDocument = function () {\n return this.getTargetElement()\n ? this.getTargetElement().ownerDocument\n : document;\n };\n /**\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n PluggableMap.prototype.getTilePriority = function (tile, tileSourceKey, tileCenter, tileResolution) {\n return getTilePriority(this.frameState_, tile, tileSourceKey, tileCenter, tileResolution);\n };\n /**\n * @param {UIEvent} browserEvent Browser event.\n * @param {string=} opt_type Type.\n */\n PluggableMap.prototype.handleBrowserEvent = function (browserEvent, opt_type) {\n var type = opt_type || browserEvent.type;\n var mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n };\n /**\n * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n PluggableMap.prototype.handleMapBrowserEvent = function (mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n var originalEvent = /** @type {PointerEvent} */ (mapBrowserEvent.originalEvent);\n var eventType = originalEvent.type;\n if (eventType === PointerEventType.POINTERDOWN ||\n eventType === EventType.WHEEL ||\n eventType === EventType.KEYDOWN) {\n var doc = this.getOwnerDocument();\n var rootNode = this.viewport_.getRootNode\n ? this.viewport_.getRootNode()\n : doc;\n var target = 'host' in rootNode // ShadowRoot\n ? /** @type {ShadowRoot} */ (rootNode).elementFromPoint(originalEvent.clientX, originalEvent.clientY)\n : /** @type {Node} */ (originalEvent.target);\n if (\n // Abort if the target is a child of the container for elements whose events are not meant\n // to be handled by map interactions.\n this.overlayContainerStopEvent_.contains(target) ||\n // Abort if the event target is a child of the container that is no longer in the page.\n // It's possible for the target to no longer be in the page if it has been removed in an\n // event listener, this might happen in a Control that recreates it's content based on\n // user interaction either manually or via a render in something like https://reactjs.org/\n !(rootNode === doc ? doc.documentElement : rootNode).contains(target)) {\n return;\n }\n }\n mapBrowserEvent.frameState = this.frameState_;\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n var interactionsArray = this.getInteractions().getArray().slice();\n for (var i = interactionsArray.length - 1; i >= 0; i--) {\n var interaction = interactionsArray[i];\n if (interaction.getMap() !== this ||\n !interaction.getActive() ||\n !this.getTargetElement()) {\n continue;\n }\n var cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont || mapBrowserEvent.propagationStopped) {\n break;\n }\n }\n }\n };\n /**\n * @protected\n */\n PluggableMap.prototype.handlePostRender = function () {\n var frameState = this.frameState_;\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n var tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n var maxTotalLoading = this.maxTilesLoading_;\n var maxNewLoads = maxTotalLoading;\n if (frameState) {\n var hints = frameState.viewHints;\n if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) {\n var lowOnFrameBudget = !IMAGE_DECODE && Date.now() - frameState.time > 8;\n maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n maxNewLoads = lowOnFrameBudget ? 0 : 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n if (frameState &&\n this.hasListener(RenderEventType.RENDERCOMPLETE) &&\n !frameState.animate &&\n !this.tileQueue_.getTilesLoading() &&\n !this.getLoading()) {\n this.renderer_.dispatchRenderEvent(RenderEventType.RENDERCOMPLETE, frameState);\n }\n var postRenderFunctions = this.postRenderFunctions_;\n for (var i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n postRenderFunctions.length = 0;\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleSizeChanged_ = function () {\n if (this.getView() && !this.getView().getAnimating()) {\n this.getView().resolveConstraints(0);\n }\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleTargetChanged_ = function () {\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n var targetElement;\n if (this.getTarget()) {\n targetElement = this.getTargetElement();\n }\n if (this.mapBrowserEventHandler_) {\n for (var i = 0, ii = this.keyHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.keyHandlerKeys_[i]);\n }\n this.keyHandlerKeys_ = null;\n this.viewport_.removeEventListener(EventType.CONTEXTMENU, this.boundHandleBrowserEvent_);\n this.viewport_.removeEventListener(EventType.WHEEL, this.boundHandleBrowserEvent_);\n if (this.handleResize_ !== undefined) {\n removeEventListener(EventType.RESIZE, this.handleResize_, false);\n this.handleResize_ = undefined;\n }\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n removeNode(this.viewport_);\n }\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n }\n else {\n targetElement.appendChild(this.viewport_);\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n this.mapBrowserEventHandler_ = new MapBrowserEventHandler(this, this.moveTolerance_);\n for (var key in MapBrowserEventType) {\n this.mapBrowserEventHandler_.addEventListener(MapBrowserEventType[key], this.handleMapBrowserEvent.bind(this));\n }\n this.viewport_.addEventListener(EventType.CONTEXTMENU, this.boundHandleBrowserEvent_, false);\n this.viewport_.addEventListener(EventType.WHEEL, this.boundHandleBrowserEvent_, PASSIVE_EVENT_LISTENERS ? { passive: false } : false);\n var keyboardEventTarget = !this.keyboardEventTarget_\n ? targetElement\n : this.keyboardEventTarget_;\n this.keyHandlerKeys_ = [\n listen(keyboardEventTarget, EventType.KEYDOWN, this.handleBrowserEvent, this),\n listen(keyboardEventTarget, EventType.KEYPRESS, this.handleBrowserEvent, this),\n ];\n if (!this.handleResize_) {\n this.handleResize_ = this.updateSize.bind(this);\n window.addEventListener(EventType.RESIZE, this.handleResize_, false);\n }\n }\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleTileChange_ = function () {\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleViewPropertyChanged_ = function () {\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleViewChanged_ = function () {\n if (this.viewPropertyListenerKey_) {\n unlistenByKey(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n unlistenByKey(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n var view = this.getView();\n if (view) {\n this.updateViewportSize_();\n this.viewPropertyListenerKey_ = listen(view, ObjectEventType.PROPERTYCHANGE, this.handleViewPropertyChanged_, this);\n this.viewChangeListenerKey_ = listen(view, EventType.CHANGE, this.handleViewPropertyChanged_, this);\n view.resolveConstraints(0);\n }\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleLayerGroupChanged_ = function () {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n var layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.layerGroupPropertyListenerKeys_ = [\n listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n listen(layerGroup, EventType.CHANGE, this.render, this),\n ];\n }\n this.render();\n };\n /**\n * @return {boolean} Is rendered.\n */\n PluggableMap.prototype.isRendered = function () {\n return !!this.frameState_;\n };\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n PluggableMap.prototype.renderSync = function () {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n };\n /**\n * Redraws all text after new fonts have loaded\n */\n PluggableMap.prototype.redrawText = function () {\n var layerStates = this.getLayerGroup().getLayerStatesArray();\n for (var i = 0, ii = layerStates.length; i < ii; ++i) {\n var layer = layerStates[i].layer;\n if (layer.hasRenderer()) {\n layer.getRenderer().handleFontsChanged();\n }\n }\n };\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n PluggableMap.prototype.render = function () {\n if (this.renderer_ && this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n };\n /**\n * Remove the given control from the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n PluggableMap.prototype.removeControl = function (control) {\n return this.getControls().remove(control);\n };\n /**\n * Remove the given interaction from the map.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n PluggableMap.prototype.removeInteraction = function (interaction) {\n return this.getInteractions().remove(interaction);\n };\n /**\n * Removes the given layer from the map.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n PluggableMap.prototype.removeLayer = function (layer) {\n var layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n };\n /**\n * Remove the given overlay from the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n PluggableMap.prototype.removeOverlay = function (overlay) {\n return this.getOverlays().remove(overlay);\n };\n /**\n * @param {number} time Time.\n * @private\n */\n PluggableMap.prototype.renderFrame_ = function (time) {\n var _this = this;\n var size = this.getSize();\n var view = this.getView();\n var previousFrameState = this.frameState_;\n /** @type {?FrameState} */\n var frameState = null;\n if (size !== undefined && hasArea(size) && view && view.isDef()) {\n var viewHints = view.getHints(this.frameState_ ? this.frameState_.viewHints : undefined);\n var viewState = view.getState();\n frameState = {\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n declutterTree: null,\n extent: getForViewAndSize(viewState.center, viewState.resolution, viewState.rotation, size),\n index: this.frameIndex_++,\n layerIndex: 0,\n layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {},\n };\n }\n this.frameState_ = frameState;\n this.renderer_.renderFrame(frameState);\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(this.postRenderFunctions_, frameState.postRenderFunctions);\n if (previousFrameState) {\n var moveStart = !this.previousExtent_ ||\n (!isEmpty(this.previousExtent_) &&\n !equals(frameState.extent, this.previousExtent_));\n if (moveStart) {\n this.dispatchEvent(new MapEvent(MapEventType.MOVESTART, this, previousFrameState));\n this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n }\n }\n var idle = this.previousExtent_ &&\n !frameState.viewHints[ViewHint.ANIMATING] &&\n !frameState.viewHints[ViewHint.INTERACTING] &&\n !equals(frameState.extent, this.previousExtent_);\n if (idle) {\n this.dispatchEvent(new MapEvent(MapEventType.MOVEEND, this, frameState));\n clone(frameState.extent, this.previousExtent_);\n }\n }\n this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n if (!this.postRenderTimeoutHandle_) {\n this.postRenderTimeoutHandle_ = setTimeout(function () {\n _this.postRenderTimeoutHandle_ = undefined;\n _this.handlePostRender();\n }, 0);\n }\n };\n /**\n * Sets the layergroup of this map.\n * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n PluggableMap.prototype.setLayerGroup = function (layerGroup) {\n this.set(MapProperty.LAYERGROUP, layerGroup);\n };\n /**\n * Set the size of this map.\n * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n PluggableMap.prototype.setSize = function (size) {\n this.set(MapProperty.SIZE, size);\n };\n /**\n * Set the target element to render this map into.\n * @param {HTMLElement|string|undefined} target The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n PluggableMap.prototype.setTarget = function (target) {\n this.set(MapProperty.TARGET, target);\n };\n /**\n * Set the view for this map.\n * @param {View} view The view that controls this map.\n * @observable\n * @api\n */\n PluggableMap.prototype.setView = function (view) {\n this.set(MapProperty.VIEW, view);\n };\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n PluggableMap.prototype.updateSize = function () {\n var targetElement = this.getTargetElement();\n if (!targetElement) {\n this.setSize(undefined);\n }\n else {\n var computedStyle = getComputedStyle(targetElement);\n this.setSize([\n targetElement.offsetWidth -\n parseFloat(computedStyle['borderLeftWidth']) -\n parseFloat(computedStyle['paddingLeft']) -\n parseFloat(computedStyle['paddingRight']) -\n parseFloat(computedStyle['borderRightWidth']),\n targetElement.offsetHeight -\n parseFloat(computedStyle['borderTopWidth']) -\n parseFloat(computedStyle['paddingTop']) -\n parseFloat(computedStyle['paddingBottom']) -\n parseFloat(computedStyle['borderBottomWidth']),\n ]);\n }\n this.updateViewportSize_();\n };\n /**\n * Recomputes the viewport size and save it on the view object (if any)\n * @private\n */\n PluggableMap.prototype.updateViewportSize_ = function () {\n var view = this.getView();\n if (view) {\n var size = undefined;\n var computedStyle = getComputedStyle(this.viewport_);\n if (computedStyle.width && computedStyle.height) {\n size = [\n parseInt(computedStyle.width, 10),\n parseInt(computedStyle.height, 10),\n ];\n }\n view.setViewportSize(size);\n }\n };\n return PluggableMap;\n}(BaseObject));\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n /**\n * @type {HTMLElement|Document}\n */\n var keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget =\n typeof options.keyboardEventTarget === 'string'\n ? document.getElementById(options.keyboardEventTarget)\n : options.keyboardEventTarget;\n }\n /**\n * @type {Object<string, *>}\n */\n var values = {};\n var layerGroup = options.layers &&\n typeof ( /** @type {?} */(options.layers).getLayers) === 'function'\n ? /** @type {LayerGroup} */ (options.layers)\n : new LayerGroup({ layers: /** @type {Collection} */ (options.layers) });\n values[MapProperty.LAYERGROUP] = layerGroup;\n values[MapProperty.TARGET] = options.target;\n values[MapProperty.VIEW] =\n options.view !== undefined ? options.view : new View();\n var controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new Collection(options.controls.slice());\n }\n else {\n assert(typeof ( /** @type {?} */(options.controls).getArray) === 'function', 47); // Expected `controls` to be an array or an `import(\"./Collection.js\").Collection`\n controls = /** @type {Collection} */ (options.controls);\n }\n }\n var interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new Collection(options.interactions.slice());\n }\n else {\n assert(typeof ( /** @type {?} */(options.interactions).getArray) ===\n 'function', 48); // Expected `interactions` to be an array or an `import(\"./Collection.js\").Collection`\n interactions = /** @type {Collection} */ (options.interactions);\n }\n }\n var overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new Collection(options.overlays.slice());\n }\n else {\n assert(typeof ( /** @type {?} */(options.overlays).getArray) === 'function', 49); // Expected `overlays` to be an array or an `import(\"./Collection.js\").Collection`\n overlays = options.overlays;\n }\n }\n else {\n overlays = new Collection();\n }\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values,\n };\n}\nexport default PluggableMap;\n//# sourceMappingURL=PluggableMap.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Control\n */\nimport BaseObject from '../Object.js';\nimport MapEventType from '../MapEventType.js';\nimport { VOID } from '../functions.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { removeNode } from '../dom.js';\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * var myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nvar Control = /** @class */ (function (_super) {\n __extends(Control, _super);\n /**\n * @param {Options} options Control options.\n */\n function Control(options) {\n var _this = _super.call(this) || this;\n var element = options.element;\n if (element && !options.target && !element.style.pointerEvents) {\n element.style.pointerEvents = 'auto';\n }\n /**\n * @protected\n * @type {HTMLElement}\n */\n _this.element = element ? element : null;\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.target_ = null;\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n _this.map_ = null;\n /**\n * @protected\n * @type {!Array<import(\"../events.js\").EventsKey>}\n */\n _this.listenerKeys = [];\n if (options.render) {\n _this.render = options.render;\n }\n if (options.target) {\n _this.setTarget(options.target);\n }\n return _this;\n }\n /**\n * Clean up.\n */\n Control.prototype.disposeInternal = function () {\n removeNode(this.element);\n _super.prototype.disposeInternal.call(this);\n };\n /**\n * Get the map associated with this control.\n * @return {import(\"../PluggableMap.js\").default} Map.\n * @api\n */\n Control.prototype.getMap = function () {\n return this.map_;\n };\n /**\n * Remove the control from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default} map Map.\n * @api\n */\n Control.prototype.setMap = function (map) {\n if (this.map_) {\n removeNode(this.element);\n }\n for (var i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (this.map_) {\n var target = this.target_\n ? this.target_\n : map.getOverlayContainerStopEvent();\n target.appendChild(this.element);\n if (this.render !== VOID) {\n this.listenerKeys.push(listen(map, MapEventType.POSTRENDER, this.render, this));\n }\n map.render();\n }\n };\n /**\n * Renders the control.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @api\n */\n Control.prototype.render = function (mapEvent) { };\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n Control.prototype.setTarget = function (target) {\n this.target_ =\n typeof target === 'string' ? document.getElementById(target) : target;\n };\n return Control;\n}(BaseObject));\nexport default Control;\n//# sourceMappingURL=Control.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Attribution\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE } from '../css.js';\nimport { equals } from '../array.js';\nimport { inView } from '../layer/Layer.js';\nimport { removeChildren, replaceNode } from '../dom.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='»'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n */\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nvar Attribution = /** @class */ (function (_super) {\n __extends(Attribution, _super);\n /**\n * @param {Options=} opt_options Attribution options.\n */\n function Attribution(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n }) || this;\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.ulElement_ = document.createElement('ul');\n /**\n * @private\n * @type {boolean}\n */\n _this.collapsed_ =\n options.collapsed !== undefined ? options.collapsed : true;\n /**\n * @private\n * @type {boolean}\n */\n _this.userCollapsed_ = _this.collapsed_;\n /**\n * @private\n * @type {boolean}\n */\n _this.overrideCollapsible_ = options.collapsible !== undefined;\n /**\n * @private\n * @type {boolean}\n */\n _this.collapsible_ =\n options.collapsible !== undefined ? options.collapsible : true;\n if (!_this.collapsible_) {\n _this.collapsed_ = false;\n }\n var className = options.className !== undefined ? options.className : 'ol-attribution';\n var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n var expandClassName = options.expandClassName !== undefined\n ? options.expandClassName\n : className + '-expand';\n var collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\\u00BB';\n var collapseClassName = options.collapseClassName !== undefined\n ? options.collapseClassName\n : className + '-collpase';\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.collapseLabel_ = document.createElement('span');\n _this.collapseLabel_.textContent = collapseLabel;\n _this.collapseLabel_.className = collapseClassName;\n }\n else {\n _this.collapseLabel_ = collapseLabel;\n }\n var label = options.label !== undefined ? options.label : 'i';\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.label_ = document.createElement('span');\n _this.label_.textContent = label;\n _this.label_.className = expandClassName;\n }\n else {\n _this.label_ = label;\n }\n var activeLabel = _this.collapsible_ && !_this.collapsed_ ? _this.collapseLabel_ : _this.label_;\n var button = document.createElement('button');\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(activeLabel);\n button.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this), false);\n var cssClasses = className +\n ' ' +\n CLASS_UNSELECTABLE +\n ' ' +\n CLASS_CONTROL +\n (_this.collapsed_ && _this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (_this.collapsible_ ? '' : ' ol-uncollapsible');\n var element = _this.element;\n element.className = cssClasses;\n element.appendChild(_this.ulElement_);\n element.appendChild(button);\n /**\n * A list of currently rendered resolutions.\n * @type {Array<string>}\n * @private\n */\n _this.renderedAttributions_ = [];\n /**\n * @private\n * @type {boolean}\n */\n _this.renderedVisible_ = true;\n return _this;\n }\n /**\n * Collect a list of visible attributions and set the collapsible state.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {Array<string>} Attributions.\n * @private\n */\n Attribution.prototype.collectSourceAttributions_ = function (frameState) {\n /**\n * Used to determine if an attribution already exists.\n * @type {!Object<string, boolean>}\n */\n var lookup = {};\n /**\n * A list of visible attributions.\n * @type {Array<string>}\n */\n var visibleAttributions = [];\n var collapsible = true;\n var layerStatesArray = frameState.layerStatesArray;\n for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n var layerState = layerStatesArray[i];\n if (!inView(layerState, frameState.viewState)) {\n continue;\n }\n var source = /** @type {import(\"../layer/Layer.js\").default} */ (layerState.layer).getSource();\n if (!source) {\n continue;\n }\n var attributionGetter = source.getAttributions();\n if (!attributionGetter) {\n continue;\n }\n var attributions = attributionGetter(frameState);\n if (!attributions) {\n continue;\n }\n collapsible =\n collapsible && source.getAttributionsCollapsible() !== false;\n if (Array.isArray(attributions)) {\n for (var j = 0, jj = attributions.length; j < jj; ++j) {\n if (!(attributions[j] in lookup)) {\n visibleAttributions.push(attributions[j]);\n lookup[attributions[j]] = true;\n }\n }\n }\n else {\n if (!(attributions in lookup)) {\n visibleAttributions.push(attributions);\n lookup[attributions] = true;\n }\n }\n }\n if (!this.overrideCollapsible_) {\n this.setCollapsible(collapsible);\n }\n return visibleAttributions;\n };\n /**\n * @private\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n Attribution.prototype.updateElement_ = function (frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n var attributions = this.collectSourceAttributions_(frameState);\n var visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n if (equals(attributions, this.renderedAttributions_)) {\n return;\n }\n removeChildren(this.ulElement_);\n // append the attributions\n for (var i = 0, ii = attributions.length; i < ii; ++i) {\n var element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n this.renderedAttributions_ = attributions;\n };\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n Attribution.prototype.handleClick_ = function (event) {\n event.preventDefault();\n this.handleToggle_();\n this.userCollapsed_ = this.collapsed_;\n };\n /**\n * @private\n */\n Attribution.prototype.handleToggle_ = function () {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n }\n else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n };\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n Attribution.prototype.getCollapsible = function () {\n return this.collapsible_;\n };\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n Attribution.prototype.setCollapsible = function (collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (this.userCollapsed_) {\n this.handleToggle_();\n }\n };\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n Attribution.prototype.setCollapsed = function (collapsed) {\n this.userCollapsed_ = collapsed;\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n };\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n Attribution.prototype.getCollapsed = function () {\n return this.collapsed_;\n };\n /**\n * Update the attribution element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n Attribution.prototype.render = function (mapEvent) {\n this.updateElement_(mapEvent.frameState);\n };\n return Attribution;\n}(Control));\nexport default Attribution;\n//# sourceMappingURL=Attribution.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Rotate\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE } from '../css.js';\nimport { easeOut } from '../easing.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nvar Rotate = /** @class */ (function (_super) {\n __extends(Rotate, _super);\n /**\n * @param {Options=} opt_options Rotate options.\n */\n function Rotate(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n }) || this;\n var className = options.className !== undefined ? options.className : 'ol-rotate';\n var label = options.label !== undefined ? options.label : '\\u21E7';\n var compassClassName = options.compassClassName !== undefined\n ? options.compassClassName\n : 'ol-compass';\n /**\n * @type {HTMLElement}\n * @private\n */\n _this.label_ = null;\n if (typeof label === 'string') {\n _this.label_ = document.createElement('span');\n _this.label_.className = compassClassName;\n _this.label_.textContent = label;\n }\n else {\n _this.label_ = label;\n _this.label_.classList.add(compassClassName);\n }\n var tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n var button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(_this.label_);\n button.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this), false);\n var cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n var element = _this.element;\n element.className = cssClasses;\n element.appendChild(button);\n _this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n /**\n * @type {number}\n * @private\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n /**\n * @type {boolean}\n * @private\n */\n _this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.rotation_ = undefined;\n if (_this.autoHide_) {\n _this.element.classList.add(CLASS_HIDDEN);\n }\n return _this;\n }\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n Rotate.prototype.handleClick_ = function (event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n }\n else {\n this.resetNorth_();\n }\n };\n /**\n * @private\n */\n Rotate.prototype.resetNorth_ = function () {\n var map = this.getMap();\n var view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n var rotation = view.getRotation();\n if (rotation !== undefined) {\n if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: easeOut,\n });\n }\n else {\n view.setRotation(0);\n }\n }\n };\n /**\n * Update the rotate control element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n Rotate.prototype.render = function (mapEvent) {\n var frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n var rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n var transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n var contains = this.element.classList.contains(CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(CLASS_HIDDEN);\n }\n else if (contains && rotation !== 0) {\n this.element.classList.remove(CLASS_HIDDEN);\n }\n }\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n };\n return Rotate;\n}(Control));\nexport default Rotate;\n//# sourceMappingURL=Rotate.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Zoom\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_CONTROL, CLASS_UNSELECTABLE } from '../css.js';\nimport { easeOut } from '../easing.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='-'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nvar Zoom = /** @class */ (function (_super) {\n __extends(Zoom, _super);\n /**\n * @param {Options=} opt_options Zoom options.\n */\n function Zoom(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n element: document.createElement('div'),\n target: options.target,\n }) || this;\n var className = options.className !== undefined ? options.className : 'ol-zoom';\n var delta = options.delta !== undefined ? options.delta : 1;\n var zoomInClassName = options.zoomInClassName !== undefined\n ? options.zoomInClassName\n : className + '-in';\n var zoomOutClassName = options.zoomOutClassName !== undefined\n ? options.zoomOutClassName\n : className + '-out';\n var zoomInLabel = options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n var zoomOutLabel = options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2212';\n var zoomInTipLabel = options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n var zoomOutTipLabel = options.zoomOutTipLabel !== undefined\n ? options.zoomOutTipLabel\n : 'Zoom out';\n var inElement = document.createElement('button');\n inElement.className = zoomInClassName;\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(typeof zoomInLabel === 'string'\n ? document.createTextNode(zoomInLabel)\n : zoomInLabel);\n inElement.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this, delta), false);\n var outElement = document.createElement('button');\n outElement.className = zoomOutClassName;\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(typeof zoomOutLabel === 'string'\n ? document.createTextNode(zoomOutLabel)\n : zoomOutLabel);\n outElement.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this, -delta), false);\n var cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n var element = _this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n /**\n * @type {number}\n * @private\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n return _this;\n }\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n Zoom.prototype.handleClick_ = function (delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n };\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n Zoom.prototype.zoomByDelta_ = function (delta) {\n var map = this.getMap();\n var view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n var currentZoom = view.getZoom();\n if (currentZoom !== undefined) {\n var newZoom = view.getConstrainedZoom(currentZoom + delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n zoom: newZoom,\n duration: this.duration_,\n easing: easeOut,\n });\n }\n else {\n view.setZoom(newZoom);\n }\n }\n };\n return Zoom;\n}(Control));\nexport default Zoom;\n//# sourceMappingURL=Zoom.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport Interaction, { zoomByDelta } from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nvar DoubleClickZoom = /** @class */ (function (_super) {\n __extends(DoubleClickZoom, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function DoubleClickZoom(opt_options) {\n var _this = _super.call(this) || this;\n var options = opt_options ? opt_options : {};\n /**\n * @private\n * @type {number}\n */\n _this.delta_ = options.delta ? options.delta : 1;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n return _this;\n }\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n */\n DoubleClickZoom.prototype.handleEvent = function (mapBrowserEvent) {\n var stopEvent = false;\n if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n var browserEvent = /** @type {MouseEvent} */ (mapBrowserEvent.originalEvent);\n var map = mapBrowserEvent.map;\n var anchor = mapBrowserEvent.coordinate;\n var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n var view = map.getView();\n zoomByDelta(view, delta, anchor, this.duration_);\n browserEvent.preventDefault();\n stopEvent = true;\n }\n return !stopEvent;\n };\n return DoubleClickZoom;\n}(Interaction));\nexport default DoubleClickZoom;\n//# sourceMappingURL=DoubleClickZoom.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DragPan\n */\nimport PointerInteraction, { centroid as centroidFromPointers, } from './Pointer.js';\nimport { FALSE } from '../functions.js';\nimport { all, focusWithTabindex, noModifierKeys, primaryAction, } from '../events/condition.js';\nimport { easeOut } from '../easing.js';\nimport { rotate as rotateCoordinate, scale as scaleCoordinate, } from '../coordinate.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition~noModifierKeys} and {@link module:ol/events/condition~primaryAction}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {import(\"../Kinetic.js\").default} [kinetic] Kinetic inertia to apply to the pan.\n */\n/**\n * @classdesc\n * Allows the user to pan the map by dragging the map.\n * @api\n */\nvar DragPan = /** @class */ (function (_super) {\n __extends(DragPan, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function DragPan(opt_options) {\n var _this = _super.call(this, {\n stopDown: FALSE,\n }) || this;\n var options = opt_options ? opt_options : {};\n /**\n * @private\n * @type {import(\"../Kinetic.js\").default|undefined}\n */\n _this.kinetic_ = options.kinetic;\n /**\n * @type {import(\"../pixel.js\").Pixel}\n */\n _this.lastCentroid = null;\n /**\n * @type {number}\n */\n _this.lastPointersCount_;\n /**\n * @type {boolean}\n */\n _this.panning_ = false;\n var condition = options.condition\n ? options.condition\n : all(noModifierKeys, primaryAction);\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n /**\n * @private\n * @type {boolean}\n */\n _this.noKinetic_ = false;\n return _this;\n }\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n DragPan.prototype.handleDragEvent = function (mapBrowserEvent) {\n if (!this.panning_) {\n this.panning_ = true;\n this.getMap().getView().beginInteraction();\n }\n var targetPointers = this.targetPointers;\n var centroid = centroidFromPointers(targetPointers);\n if (targetPointers.length == this.lastPointersCount_) {\n if (this.kinetic_) {\n this.kinetic_.update(centroid[0], centroid[1]);\n }\n if (this.lastCentroid) {\n var delta = [\n this.lastCentroid[0] - centroid[0],\n centroid[1] - this.lastCentroid[1],\n ];\n var map = mapBrowserEvent.map;\n var view = map.getView();\n scaleCoordinate(delta, view.getResolution());\n rotateCoordinate(delta, view.getRotation());\n view.adjustCenterInternal(delta);\n }\n }\n else if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger down, tiny drag, second finger down\n this.kinetic_.begin();\n }\n this.lastCentroid = centroid;\n this.lastPointersCount_ = targetPointers.length;\n mapBrowserEvent.originalEvent.preventDefault();\n };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragPan.prototype.handleUpEvent = function (mapBrowserEvent) {\n var map = mapBrowserEvent.map;\n var view = map.getView();\n if (this.targetPointers.length === 0) {\n if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {\n var distance = this.kinetic_.getDistance();\n var angle = this.kinetic_.getAngle();\n var center = view.getCenterInternal();\n var centerpx = map.getPixelFromCoordinateInternal(center);\n var dest = map.getCoordinateFromPixelInternal([\n centerpx[0] - distance * Math.cos(angle),\n centerpx[1] - distance * Math.sin(angle),\n ]);\n view.animateInternal({\n center: view.getConstrainedCenter(dest),\n duration: 500,\n easing: easeOut,\n });\n }\n if (this.panning_) {\n this.panning_ = false;\n view.endInteraction();\n }\n return false;\n }\n else {\n if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger up, tiny drag, second finger up\n this.kinetic_.begin();\n }\n this.lastCentroid = null;\n return true;\n }\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragPan.prototype.handleDownEvent = function (mapBrowserEvent) {\n if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {\n var map = mapBrowserEvent.map;\n var view = map.getView();\n this.lastCentroid = null;\n // stop any current animation\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n if (this.kinetic_) {\n this.kinetic_.begin();\n }\n // No kinetic as soon as more than one pointer on the screen is\n // detected. This is to prevent nasty pans after pinch.\n this.noKinetic_ = this.targetPointers.length > 1;\n return true;\n }\n else {\n return false;\n }\n };\n return DragPan;\n}(PointerInteraction));\nexport default DragPan;\n//# sourceMappingURL=DragPan.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DragRotate\n */\nimport PointerInteraction from './Pointer.js';\nimport { FALSE } from '../functions.js';\nimport { altShiftKeysOnly, mouseActionButton, mouseOnly, } from '../events/condition.js';\nimport { disable } from '../rotationconstraint.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an\n * {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition~altShiftKeysOnly}.\n * @property {number} [duration=250] Animation duration in milliseconds.\n */\n/**\n * @classdesc\n * Allows the user to rotate the map by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when the alt and shift keys are held down.\n *\n * This interaction is only supported for mouse devices.\n * @api\n */\nvar DragRotate = /** @class */ (function (_super) {\n __extends(DragRotate, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function DragRotate(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n stopDown: FALSE,\n }) || this;\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ = options.condition ? options.condition : altShiftKeysOnly;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.lastAngle_ = undefined;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n return _this;\n }\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n DragRotate.prototype.handleDragEvent = function (mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return;\n }\n var map = mapBrowserEvent.map;\n var view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n var size = map.getSize();\n var offset = mapBrowserEvent.pixel;\n var theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);\n if (this.lastAngle_ !== undefined) {\n var delta = theta - this.lastAngle_;\n view.adjustRotationInternal(-delta);\n }\n this.lastAngle_ = theta;\n };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragRotate.prototype.handleUpEvent = function (mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return true;\n }\n var map = mapBrowserEvent.map;\n var view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragRotate.prototype.handleDownEvent = function (mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return false;\n }\n if (mouseActionButton(mapBrowserEvent) &&\n this.condition_(mapBrowserEvent)) {\n var map = mapBrowserEvent.map;\n map.getView().beginInteraction();\n this.lastAngle_ = undefined;\n return true;\n }\n else {\n return false;\n }\n };\n return DragRotate;\n}(PointerInteraction));\nexport default DragRotate;\n//# sourceMappingURL=DragRotate.js.map","/**\n * @module ol/render/Box\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Disposable from '../Disposable.js';\nimport Polygon from '../geom/Polygon.js';\nvar RenderBox = /** @class */ (function (_super) {\n __extends(RenderBox, _super);\n /**\n * @param {string} className CSS class name.\n */\n function RenderBox(className) {\n var _this = _super.call(this) || this;\n /**\n * @type {import(\"../geom/Polygon.js\").default}\n * @private\n */\n _this.geometry_ = null;\n /**\n * @type {HTMLDivElement}\n * @private\n */\n _this.element_ = document.createElement('div');\n _this.element_.style.position = 'absolute';\n _this.element_.style.pointerEvents = 'auto';\n _this.element_.className = 'ol-box ' + className;\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n _this.map_ = null;\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n _this.startPixel_ = null;\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n _this.endPixel_ = null;\n return _this;\n }\n /**\n * Clean up.\n */\n RenderBox.prototype.disposeInternal = function () {\n this.setMap(null);\n };\n /**\n * @private\n */\n RenderBox.prototype.render_ = function () {\n var startPixel = this.startPixel_;\n var endPixel = this.endPixel_;\n var px = 'px';\n var style = this.element_.style;\n style.left = Math.min(startPixel[0], endPixel[0]) + px;\n style.top = Math.min(startPixel[1], endPixel[1]) + px;\n style.width = Math.abs(endPixel[0] - startPixel[0]) + px;\n style.height = Math.abs(endPixel[1] - startPixel[1]) + px;\n };\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n RenderBox.prototype.setMap = function (map) {\n if (this.map_) {\n this.map_.getOverlayContainer().removeChild(this.element_);\n var style = this.element_.style;\n style.left = 'inherit';\n style.top = 'inherit';\n style.width = 'inherit';\n style.height = 'inherit';\n }\n this.map_ = map;\n if (this.map_) {\n this.map_.getOverlayContainer().appendChild(this.element_);\n }\n };\n /**\n * @param {import(\"../pixel.js\").Pixel} startPixel Start pixel.\n * @param {import(\"../pixel.js\").Pixel} endPixel End pixel.\n */\n RenderBox.prototype.setPixels = function (startPixel, endPixel) {\n this.startPixel_ = startPixel;\n this.endPixel_ = endPixel;\n this.createOrUpdateGeometry();\n this.render_();\n };\n /**\n * Creates or updates the cached geometry.\n */\n RenderBox.prototype.createOrUpdateGeometry = function () {\n var startPixel = this.startPixel_;\n var endPixel = this.endPixel_;\n var pixels = [\n startPixel,\n [startPixel[0], endPixel[1]],\n endPixel,\n [endPixel[0], startPixel[1]],\n ];\n var coordinates = pixels.map(this.map_.getCoordinateFromPixelInternal, this.map_);\n // close the polygon\n coordinates[4] = coordinates[0].slice();\n if (!this.geometry_) {\n this.geometry_ = new Polygon([coordinates]);\n }\n else {\n this.geometry_.setCoordinates([coordinates]);\n }\n };\n /**\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n */\n RenderBox.prototype.getGeometry = function () {\n return this.geometry_;\n };\n return RenderBox;\n}(Disposable));\nexport default RenderBox;\n//# sourceMappingURL=Box.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DragBox\n */\n// FIXME draw drag box\nimport Event from '../events/Event.js';\nimport PointerInteraction from './Pointer.js';\nimport RenderBox from '../render/Box.js';\nimport { mouseActionButton } from '../events/condition.js';\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s and returns a `{boolean}`. If the condition is met,\n * true should be returned.\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default, import(\"../pixel.js\").Pixel, import(\"../pixel.js\").Pixel):boolean} EndCondition\n */\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragbox'] CSS class name for styling the box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link ol/events/condition~mouseActionButton}.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the default\n * `boxEndCondition` function.\n * @property {EndCondition} [boxEndCondition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s to indicate whether a `boxend` event should be fired.\n * Default is `true` if the area of the box is bigger than the `minArea` option.\n * @property {function(this:DragBox, import(\"../MapBrowserEvent.js\").default):void} [onBoxEnd] Code to execute just\n * before `boxend` is fired.\n */\n/**\n * @enum {string}\n */\nvar DragBoxEventType = {\n /**\n * Triggered upon drag box start.\n * @event DragBoxEvent#boxstart\n * @api\n */\n BOXSTART: 'boxstart',\n /**\n * Triggered on drag when box is active.\n * @event DragBoxEvent#boxdrag\n * @api\n */\n BOXDRAG: 'boxdrag',\n /**\n * Triggered upon drag box end.\n * @event DragBoxEvent#boxend\n * @api\n */\n BOXEND: 'boxend',\n /**\n * Triggered upon drag box canceled.\n * @event DragBoxEvent#boxcancel\n * @api\n */\n BOXCANCEL: 'boxcancel',\n};\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/DragBox~DragBox} instances are instances of\n * this type.\n */\nvar DragBoxEvent = /** @class */ (function (_super) {\n __extends(DragBoxEvent, _super);\n /**\n * @param {string} type The event type.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The event coordinate.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Originating event.\n */\n function DragBoxEvent(type, coordinate, mapBrowserEvent) {\n var _this = _super.call(this, type) || this;\n /**\n * The coordinate of the drag event.\n * @const\n * @type {import(\"../coordinate.js\").Coordinate}\n * @api\n */\n _this.coordinate = coordinate;\n /**\n * @const\n * @type {import(\"../MapBrowserEvent.js\").default}\n * @api\n */\n _this.mapBrowserEvent = mapBrowserEvent;\n return _this;\n }\n return DragBoxEvent;\n}(Event));\nexport { DragBoxEvent };\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when the shift or other key is held down. This is used, for example,\n * for zooming to a specific area of the map\n * (see {@link module:ol/interaction/DragZoom~DragZoom} and\n * {@link module:ol/interaction/DragRotateAndZoom}).\n *\n * @fires DragBoxEvent\n * @api\n */\nvar DragBox = /** @class */ (function (_super) {\n __extends(DragBox, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function DragBox(opt_options) {\n var _this = _super.call(this) || this;\n var options = opt_options ? opt_options : {};\n /**\n * @type {import(\"../render/Box.js\").default}\n * @private\n */\n _this.box_ = new RenderBox(options.className || 'ol-dragbox');\n /**\n * @type {number}\n * @private\n */\n _this.minArea_ = options.minArea !== undefined ? options.minArea : 64;\n if (options.onBoxEnd) {\n _this.onBoxEnd = options.onBoxEnd;\n }\n /**\n * @type {import(\"../pixel.js\").Pixel}\n * @private\n */\n _this.startPixel_ = null;\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ = options.condition ? options.condition : mouseActionButton;\n /**\n * @private\n * @type {EndCondition}\n */\n _this.boxEndCondition_ = options.boxEndCondition\n ? options.boxEndCondition\n : _this.defaultBoxEndCondition;\n return _this;\n }\n /**\n * The default condition for determining whether the boxend event\n * should fire.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent The originating MapBrowserEvent\n * leading to the box end.\n * @param {import(\"../pixel.js\").Pixel} startPixel The starting pixel of the box.\n * @param {import(\"../pixel.js\").Pixel} endPixel The end pixel of the box.\n * @return {boolean} Whether or not the boxend condition should be fired.\n */\n DragBox.prototype.defaultBoxEndCondition = function (mapBrowserEvent, startPixel, endPixel) {\n var width = endPixel[0] - startPixel[0];\n var height = endPixel[1] - startPixel[1];\n return width * width + height * height >= this.minArea_;\n };\n /**\n * Returns geometry of last drawn box.\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n * @api\n */\n DragBox.prototype.getGeometry = function () {\n return this.box_.getGeometry();\n };\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n DragBox.prototype.handleDragEvent = function (mapBrowserEvent) {\n this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);\n this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXDRAG, mapBrowserEvent.coordinate, mapBrowserEvent));\n };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragBox.prototype.handleUpEvent = function (mapBrowserEvent) {\n this.box_.setMap(null);\n var completeBox = this.boxEndCondition_(mapBrowserEvent, this.startPixel_, mapBrowserEvent.pixel);\n if (completeBox) {\n this.onBoxEnd(mapBrowserEvent);\n }\n this.dispatchEvent(new DragBoxEvent(completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL, mapBrowserEvent.coordinate, mapBrowserEvent));\n return false;\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragBox.prototype.handleDownEvent = function (mapBrowserEvent) {\n if (this.condition_(mapBrowserEvent)) {\n this.startPixel_ = mapBrowserEvent.pixel;\n this.box_.setMap(mapBrowserEvent.map);\n this.box_.setPixels(this.startPixel_, this.startPixel_);\n this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXSTART, mapBrowserEvent.coordinate, mapBrowserEvent));\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n DragBox.prototype.onBoxEnd = function (event) { };\n return DragBox;\n}(PointerInteraction));\nexport default DragBox;\n//# sourceMappingURL=DragBox.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DragZoom\n */\nimport DragBox from './DragBox.js';\nimport { createOrUpdateFromCoordinates, getBottomLeft, getCenter, getTopRight, scaleFromCenter, } from '../extent.js';\nimport { easeOut } from '../easing.js';\nimport { shiftKeyOnly } from '../events/condition.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragzoom'] CSS class name for styling the\n * box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition~shiftKeyOnly}.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {boolean} [out=false] Use interaction for zooming out.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the parent default\n * `boxEndCondition` function.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when a key, shift by default, is held down.\n *\n * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or\n * your custom one configured with `className`.\n * @api\n */\nvar DragZoom = /** @class */ (function (_super) {\n __extends(DragZoom, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function DragZoom(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n var condition = options.condition ? options.condition : shiftKeyOnly;\n _this = _super.call(this, {\n condition: condition,\n className: options.className || 'ol-dragzoom',\n minArea: options.minArea,\n }) || this;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 200;\n /**\n * @private\n * @type {boolean}\n */\n _this.out_ = options.out !== undefined ? options.out : false;\n return _this;\n }\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n DragZoom.prototype.onBoxEnd = function (event) {\n var map = this.getMap();\n var view = /** @type {!import(\"../View.js\").default} */ (map.getView());\n var size = /** @type {!import(\"../size.js\").Size} */ (map.getSize());\n var extent = this.getGeometry().getExtent();\n if (this.out_) {\n var mapExtent = view.calculateExtentInternal(size);\n var boxPixelExtent = createOrUpdateFromCoordinates([\n map.getPixelFromCoordinateInternal(getBottomLeft(extent)),\n map.getPixelFromCoordinateInternal(getTopRight(extent)),\n ]);\n var factor = view.getResolutionForExtentInternal(boxPixelExtent, size);\n scaleFromCenter(mapExtent, 1 / factor);\n extent = mapExtent;\n }\n var resolution = view.getConstrainedResolution(view.getResolutionForExtentInternal(extent, size));\n var center = view.getConstrainedCenter(getCenter(extent), resolution);\n view.animateInternal({\n resolution: resolution,\n center: center,\n duration: this.duration_,\n easing: easeOut,\n });\n };\n return DragZoom;\n}(DragBox));\nexport default DragZoom;\n//# sourceMappingURL=DragZoom.js.map","/**\n * @module ol/events/KeyCode\n */\n/**\n * @enum {number}\n * @const\n */\nexport default {\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n};\n//# sourceMappingURL=KeyCode.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/KeyboardPan\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, { pan } from './Interaction.js';\nimport KeyCode from '../events/KeyCode.js';\nimport { noModifierKeys, targetNotEditable } from '../events/condition.js';\nimport { rotate as rotateCoordinate } from '../coordinate.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition~noModifierKeys} and\n * {@link module:ol/events/condition~targetNotEditable}.\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {number} [pixelDelta=128] The amount of pixels to pan on each key\n * press.\n */\n/**\n * @classdesc\n * Allows the user to pan the map using keyboard arrows.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}.\n * @api\n */\nvar KeyboardPan = /** @class */ (function (_super) {\n __extends(KeyboardPan, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function KeyboardPan(opt_options) {\n var _this = _super.call(this) || this;\n var options = opt_options || {};\n /**\n * @private\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Browser event.\n * @return {boolean} Combined condition result.\n */\n _this.defaultCondition_ = function (mapBrowserEvent) {\n return (noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent));\n };\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ =\n options.condition !== undefined\n ? options.condition\n : _this.defaultCondition_;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 100;\n /**\n * @private\n * @type {number}\n */\n _this.pixelDelta_ =\n options.pixelDelta !== undefined ? options.pixelDelta : 128;\n return _this;\n }\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides the direction to pan to (if an arrow key was\n * pressed).\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {KeyboardPan}\n */\n KeyboardPan.prototype.handleEvent = function (mapBrowserEvent) {\n var stopEvent = false;\n if (mapBrowserEvent.type == EventType.KEYDOWN) {\n var keyEvent = /** @type {KeyboardEvent} */ (mapBrowserEvent.originalEvent);\n var keyCode = keyEvent.keyCode;\n if (this.condition_(mapBrowserEvent) &&\n (keyCode == KeyCode.DOWN ||\n keyCode == KeyCode.LEFT ||\n keyCode == KeyCode.RIGHT ||\n keyCode == KeyCode.UP)) {\n var map = mapBrowserEvent.map;\n var view = map.getView();\n var mapUnitsDelta = view.getResolution() * this.pixelDelta_;\n var deltaX = 0, deltaY = 0;\n if (keyCode == KeyCode.DOWN) {\n deltaY = -mapUnitsDelta;\n }\n else if (keyCode == KeyCode.LEFT) {\n deltaX = -mapUnitsDelta;\n }\n else if (keyCode == KeyCode.RIGHT) {\n deltaX = mapUnitsDelta;\n }\n else {\n deltaY = mapUnitsDelta;\n }\n var delta = [deltaX, deltaY];\n rotateCoordinate(delta, view.getRotation());\n pan(view, delta, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n };\n return KeyboardPan;\n}(Interaction));\nexport default KeyboardPan;\n//# sourceMappingURL=KeyboardPan.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/KeyboardZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, { zoomByDelta } from './Interaction.js';\nimport { targetNotEditable } from '../events/condition.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition~targetNotEditable}.\n * @property {number} [delta=1] The zoom level delta on each key press.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map using keyboard + and -.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardPan~KeyboardPan}.\n * @api\n */\nvar KeyboardZoom = /** @class */ (function (_super) {\n __extends(KeyboardZoom, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function KeyboardZoom(opt_options) {\n var _this = _super.call(this) || this;\n var options = opt_options ? opt_options : {};\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ = options.condition ? options.condition : targetNotEditable;\n /**\n * @private\n * @type {number}\n */\n _this.delta_ = options.delta ? options.delta : 1;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 100;\n return _this;\n }\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides whether to zoom in or out (depending on whether the\n * key pressed was '+' or '-').\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {KeyboardZoom}\n */\n KeyboardZoom.prototype.handleEvent = function (mapBrowserEvent) {\n var stopEvent = false;\n if (mapBrowserEvent.type == EventType.KEYDOWN ||\n mapBrowserEvent.type == EventType.KEYPRESS) {\n var keyEvent = /** @type {KeyboardEvent} */ (mapBrowserEvent.originalEvent);\n var charCode = keyEvent.charCode;\n if (this.condition_(mapBrowserEvent) &&\n (charCode == '+'.charCodeAt(0) || charCode == '-'.charCodeAt(0))) {\n var map = mapBrowserEvent.map;\n var delta = charCode == '+'.charCodeAt(0) ? this.delta_ : -this.delta_;\n var view = map.getView();\n zoomByDelta(view, delta, undefined, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n };\n return KeyboardZoom;\n}(Interaction));\nexport default KeyboardZoom;\n//# sourceMappingURL=KeyboardZoom.js.map","/**\n * @module ol/Kinetic\n */\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nvar Kinetic = /** @class */ (function () {\n /**\n * @param {number} decay Rate of decay (must be negative).\n * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n * @param {number} delay Delay to consider to calculate the kinetic\n * initial values (milliseconds).\n */\n function Kinetic(decay, minVelocity, delay) {\n /**\n * @private\n * @type {number}\n */\n this.decay_ = decay;\n /**\n * @private\n * @type {number}\n */\n this.minVelocity_ = minVelocity;\n /**\n * @private\n * @type {number}\n */\n this.delay_ = delay;\n /**\n * @private\n * @type {Array<number>}\n */\n this.points_ = [];\n /**\n * @private\n * @type {number}\n */\n this.angle_ = 0;\n /**\n * @private\n * @type {number}\n */\n this.initialVelocity_ = 0;\n }\n /**\n * FIXME empty description for jsdoc\n */\n Kinetic.prototype.begin = function () {\n this.points_.length = 0;\n this.angle_ = 0;\n this.initialVelocity_ = 0;\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n */\n Kinetic.prototype.update = function (x, y) {\n this.points_.push(x, y, Date.now());\n };\n /**\n * @return {boolean} Whether we should do kinetic animation.\n */\n Kinetic.prototype.end = function () {\n if (this.points_.length < 6) {\n // at least 2 points are required (i.e. there must be at least 6 elements\n // in the array)\n return false;\n }\n var delay = Date.now() - this.delay_;\n var lastIndex = this.points_.length - 3;\n if (this.points_[lastIndex + 2] < delay) {\n // the last tracked point is too old, which means that the user stopped\n // panning before releasing the map\n return false;\n }\n // get the first point which still falls into the delay time\n var firstIndex = lastIndex - 3;\n while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n firstIndex -= 3;\n }\n var duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n // we don't want a duration of 0 (divide by zero)\n // we also make sure the user panned for a duration of at least one frame\n // (1/60s) to compute sane displacement values\n if (duration < 1000 / 60) {\n return false;\n }\n var dx = this.points_[lastIndex] - this.points_[firstIndex];\n var dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n this.angle_ = Math.atan2(dy, dx);\n this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n return this.initialVelocity_ > this.minVelocity_;\n };\n /**\n * @return {number} Total distance travelled (pixels).\n */\n Kinetic.prototype.getDistance = function () {\n return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n };\n /**\n * @return {number} Angle of the kinetic panning animation (radians).\n */\n Kinetic.prototype.getAngle = function () {\n return this.angle_;\n };\n return Kinetic;\n}());\nexport default Kinetic;\n//# sourceMappingURL=Kinetic.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/MouseWheelZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, { zoomByDelta } from './Interaction.js';\nimport { DEVICE_PIXEL_RATIO, FIREFOX } from '../has.js';\nimport { all, always, focusWithTabindex } from '../events/condition.js';\nimport { clamp } from '../math.js';\n/**\n * @enum {string}\n */\nexport var Mode = {\n TRACKPAD: 'trackpad',\n WHEEL: 'wheel',\n};\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition~always}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {number} [maxDelta=1] Maximum mouse wheel delta.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [timeout=80] Mouse wheel timeout duration in milliseconds.\n * @property {boolean} [useAnchor=true] Enable zooming using the mouse's\n * location as the anchor. When set to `false`, zooming in and out will zoom to\n * the center of the screen instead of zooming on the mouse's location.\n * @property {boolean} [constrainResolution=false] If true, the mouse wheel zoom\n * event will always animate to the closest zoom level after an interaction;\n * false means intermediary zoom levels are allowed.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map by scrolling the mouse wheel.\n * @api\n */\nvar MouseWheelZoom = /** @class */ (function (_super) {\n __extends(MouseWheelZoom, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function MouseWheelZoom(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, \n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)) || this;\n /**\n * @private\n * @type {number}\n */\n _this.totalDelta_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.lastDelta_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.maxDelta_ = options.maxDelta !== undefined ? options.maxDelta : 1;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n /**\n * @private\n * @type {number}\n */\n _this.timeout_ = options.timeout !== undefined ? options.timeout : 80;\n /**\n * @private\n * @type {boolean}\n */\n _this.useAnchor_ =\n options.useAnchor !== undefined ? options.useAnchor : true;\n /**\n * @private\n * @type {boolean}\n */\n _this.constrainResolution_ =\n options.constrainResolution !== undefined\n ? options.constrainResolution\n : false;\n var condition = options.condition ? options.condition : always;\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n /**\n * @private\n * @type {?import(\"../coordinate.js\").Coordinate}\n */\n _this.lastAnchor_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.startTime_ = undefined;\n /**\n * @private\n * @type {?}\n */\n _this.timeoutId_;\n /**\n * @private\n * @type {Mode|undefined}\n */\n _this.mode_ = undefined;\n /**\n * Trackpad events separated by this delay will be considered separate\n * interactions.\n * @type {number}\n */\n _this.trackpadEventGap_ = 400;\n /**\n * @type {?}\n */\n _this.trackpadTimeoutId_;\n /**\n * The number of delta values per zoom level\n * @private\n * @type {number}\n */\n _this.deltaPerZoom_ = 300;\n return _this;\n }\n /**\n * @private\n */\n MouseWheelZoom.prototype.endInteraction_ = function () {\n this.trackpadTimeoutId_ = undefined;\n var view = this.getMap().getView();\n view.endInteraction(undefined, this.lastDelta_ ? (this.lastDelta_ > 0 ? 1 : -1) : 0, this.lastAnchor_);\n };\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually\n * zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n */\n MouseWheelZoom.prototype.handleEvent = function (mapBrowserEvent) {\n if (!this.condition_(mapBrowserEvent)) {\n return true;\n }\n var type = mapBrowserEvent.type;\n if (type !== EventType.WHEEL) {\n return true;\n }\n var map = mapBrowserEvent.map;\n var wheelEvent = /** @type {WheelEvent} */ (mapBrowserEvent.originalEvent);\n wheelEvent.preventDefault();\n if (this.useAnchor_) {\n this.lastAnchor_ = mapBrowserEvent.coordinate;\n }\n // Delta normalisation inspired by\n // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js\n var delta;\n if (mapBrowserEvent.type == EventType.WHEEL) {\n delta = wheelEvent.deltaY;\n if (FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= DEVICE_PIXEL_RATIO;\n }\n if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta *= 40;\n }\n }\n if (delta === 0) {\n return false;\n }\n else {\n this.lastDelta_ = delta;\n }\n var now = Date.now();\n if (this.startTime_ === undefined) {\n this.startTime_ = now;\n }\n if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {\n this.mode_ = Math.abs(delta) < 4 ? Mode.TRACKPAD : Mode.WHEEL;\n }\n var view = map.getView();\n if (this.mode_ === Mode.TRACKPAD &&\n !(view.getConstrainResolution() || this.constrainResolution_)) {\n if (this.trackpadTimeoutId_) {\n clearTimeout(this.trackpadTimeoutId_);\n }\n else {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.beginInteraction();\n }\n this.trackpadTimeoutId_ = setTimeout(this.endInteraction_.bind(this), this.timeout_);\n view.adjustZoom(-delta / this.deltaPerZoom_, this.lastAnchor_);\n this.startTime_ = now;\n return false;\n }\n this.totalDelta_ += delta;\n var timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);\n clearTimeout(this.timeoutId_);\n this.timeoutId_ = setTimeout(this.handleWheelZoom_.bind(this, map), timeLeft);\n return false;\n };\n /**\n * @private\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n MouseWheelZoom.prototype.handleWheelZoom_ = function (map) {\n var view = map.getView();\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n var delta = -clamp(this.totalDelta_, -this.maxDelta_ * this.deltaPerZoom_, this.maxDelta_ * this.deltaPerZoom_) / this.deltaPerZoom_;\n if (view.getConstrainResolution() || this.constrainResolution_) {\n // view has a zoom constraint, zoom by 1\n delta = delta ? (delta > 0 ? 1 : -1) : 0;\n }\n zoomByDelta(view, delta, this.lastAnchor_, this.duration_);\n this.mode_ = undefined;\n this.totalDelta_ = 0;\n this.lastAnchor_ = null;\n this.startTime_ = undefined;\n this.timeoutId_ = undefined;\n };\n /**\n * Enable or disable using the mouse's location as an anchor when zooming\n * @param {boolean} useAnchor true to zoom to the mouse's location, false\n * to zoom to the center of the map\n * @api\n */\n MouseWheelZoom.prototype.setMouseAnchor = function (useAnchor) {\n this.useAnchor_ = useAnchor;\n if (!useAnchor) {\n this.lastAnchor_ = null;\n }\n };\n return MouseWheelZoom;\n}(Interaction));\nexport default MouseWheelZoom;\n//# sourceMappingURL=MouseWheelZoom.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/PinchRotate\n */\nimport PointerInteraction, { centroid as centroidFromPointers, } from './Pointer.js';\nimport { FALSE } from '../functions.js';\nimport { disable } from '../rotationconstraint.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] The duration of the animation in\n * milliseconds.\n * @property {number} [threshold=0.3] Minimal angle in radians to start a rotation.\n */\n/**\n * @classdesc\n * Allows the user to rotate the map by twisting with two fingers\n * on a touch screen.\n * @api\n */\nvar PinchRotate = /** @class */ (function (_super) {\n __extends(PinchRotate, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function PinchRotate(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n var pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (options);\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n _this = _super.call(this, pointerOptions) || this;\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n _this.anchor_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.lastAngle_ = undefined;\n /**\n * @private\n * @type {boolean}\n */\n _this.rotating_ = false;\n /**\n * @private\n * @type {number}\n */\n _this.rotationDelta_ = 0.0;\n /**\n * @private\n * @type {number}\n */\n _this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n return _this;\n }\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n PinchRotate.prototype.handleDragEvent = function (mapBrowserEvent) {\n var rotationDelta = 0.0;\n var touch0 = this.targetPointers[0];\n var touch1 = this.targetPointers[1];\n // angle between touches\n var angle = Math.atan2(touch1.clientY - touch0.clientY, touch1.clientX - touch0.clientX);\n if (this.lastAngle_ !== undefined) {\n var delta = angle - this.lastAngle_;\n this.rotationDelta_ += delta;\n if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {\n this.rotating_ = true;\n }\n rotationDelta = delta;\n }\n this.lastAngle_ = angle;\n var map = mapBrowserEvent.map;\n var view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n // rotate anchor point.\n // FIXME: should be the intersection point between the lines:\n // touch0,touch1 and previousTouch0,previousTouch1\n var viewportPosition = map.getViewport().getBoundingClientRect();\n var centroid = centroidFromPointers(this.targetPointers);\n centroid[0] -= viewportPosition.left;\n centroid[1] -= viewportPosition.top;\n this.anchor_ = map.getCoordinateFromPixelInternal(centroid);\n // rotate\n if (this.rotating_) {\n map.render();\n view.adjustRotationInternal(rotationDelta, this.anchor_);\n }\n };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n PinchRotate.prototype.handleUpEvent = function (mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n var map = mapBrowserEvent.map;\n var view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n }\n else {\n return true;\n }\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n PinchRotate.prototype.handleDownEvent = function (mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n var map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastAngle_ = undefined;\n this.rotating_ = false;\n this.rotationDelta_ = 0.0;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n }\n else {\n return false;\n }\n };\n return PinchRotate;\n}(PointerInteraction));\nexport default PinchRotate;\n//# sourceMappingURL=PinchRotate.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/PinchZoom\n */\nimport PointerInteraction, { centroid as centroidFromPointers, } from './Pointer.js';\nimport { FALSE } from '../functions.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=400] Animation duration in milliseconds.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map by pinching with two fingers\n * on a touch screen.\n * @api\n */\nvar PinchZoom = /** @class */ (function (_super) {\n __extends(PinchZoom, _super);\n /**\n * @param {Options=} opt_options Options.\n */\n function PinchZoom(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n var pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (options);\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n _this = _super.call(this, pointerOptions) || this;\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n _this.anchor_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 400;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.lastDistance_ = undefined;\n /**\n * @private\n * @type {number}\n */\n _this.lastScaleDelta_ = 1;\n return _this;\n }\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n PinchZoom.prototype.handleDragEvent = function (mapBrowserEvent) {\n var scaleDelta = 1.0;\n var touch0 = this.targetPointers[0];\n var touch1 = this.targetPointers[1];\n var dx = touch0.clientX - touch1.clientX;\n var dy = touch0.clientY - touch1.clientY;\n // distance between touches\n var distance = Math.sqrt(dx * dx + dy * dy);\n if (this.lastDistance_ !== undefined) {\n scaleDelta = this.lastDistance_ / distance;\n }\n this.lastDistance_ = distance;\n var map = mapBrowserEvent.map;\n var view = map.getView();\n if (scaleDelta != 1.0) {\n this.lastScaleDelta_ = scaleDelta;\n }\n // scale anchor point.\n var viewportPosition = map.getViewport().getBoundingClientRect();\n var centroid = centroidFromPointers(this.targetPointers);\n centroid[0] -= viewportPosition.left;\n centroid[1] -= viewportPosition.top;\n this.anchor_ = map.getCoordinateFromPixelInternal(centroid);\n // scale, bypass the resolution constraint\n map.render();\n view.adjustResolutionInternal(scaleDelta, this.anchor_);\n };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n PinchZoom.prototype.handleUpEvent = function (mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n var map = mapBrowserEvent.map;\n var view = map.getView();\n var direction = this.lastScaleDelta_ > 1 ? 1 : -1;\n view.endInteraction(this.duration_, direction);\n return false;\n }\n else {\n return true;\n }\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n PinchZoom.prototype.handleDownEvent = function (mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n var map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastDistance_ = undefined;\n this.lastScaleDelta_ = 1;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n }\n else {\n return false;\n }\n };\n return PinchZoom;\n}(PointerInteraction));\nexport default PinchZoom;\n//# sourceMappingURL=PinchZoom.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Map\n */\nimport CompositeMapRenderer from './renderer/Composite.js';\nimport PluggableMap from './PluggableMap.js';\nimport { assign } from './obj.js';\nimport { defaults as defaultControls } from './control.js';\nimport { defaults as defaultInteractions } from './interaction.js';\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n * import Map from 'ol/Map';\n * import View from 'ol/View';\n * import TileLayer from 'ol/layer/Tile';\n * import OSM from 'ol/source/OSM';\n *\n * var map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1\n * }),\n * layers: [\n * new TileLayer({\n * source: new OSM()\n * })\n * ],\n * target: 'map'\n * });\n *\n * The above snippet creates a map using a {@link module:ol/layer/Tile} to\n * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM\n * element with the id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link module:ol/Overlay~Overlay} for the difference). The map\n * itself is placed in a further element within the viewport.\n *\n * Layers are stored as a {@link module:ol/Collection~Collection} in\n * layerGroups. A top-level group is provided by the library. This is what is\n * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the\n * options are added to this group, and `addLayer` and `removeLayer` change the\n * layer collection in the group. `getLayers` is a convenience function for\n * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~Group}\n * is a subclass of {@link module:ol/layer/Base}, so layers entered in the\n * options or added with `addLayer` can be groups, which can contain further\n * groups, and so on.\n *\n * @api\n */\nvar Map = /** @class */ (function (_super) {\n __extends(Map, _super);\n /**\n * @param {import(\"./PluggableMap.js\").MapOptions} options Map options.\n */\n function Map(options) {\n var _this = this;\n options = assign({}, options);\n if (!options.controls) {\n options.controls = defaultControls();\n }\n if (!options.interactions) {\n options.interactions = defaultInteractions({\n onFocusOnly: true,\n });\n }\n _this = _super.call(this, options) || this;\n return _this;\n }\n Map.prototype.createRenderer = function () {\n return new CompositeMapRenderer(this);\n };\n return Map;\n}(PluggableMap));\nexport default Map;\n//# sourceMappingURL=Map.js.map","/**\n * @module ol/control\n */\nimport Attribution from './control/Attribution.js';\nimport Collection from './Collection.js';\nimport Rotate from './control/Rotate.js';\nimport Zoom from './control/Zoom.js';\nexport { default as Attribution } from './control/Attribution.js';\nexport { default as Control } from './control/Control.js';\nexport { default as FullScreen } from './control/FullScreen.js';\nexport { default as MousePosition } from './control/MousePosition.js';\nexport { default as OverviewMap } from './control/OverviewMap.js';\nexport { default as Rotate } from './control/Rotate.js';\nexport { default as ScaleLine } from './control/ScaleLine.js';\nexport { default as Zoom } from './control/Zoom.js';\nexport { default as ZoomSlider } from './control/ZoomSlider.js';\nexport { default as ZoomToExtent } from './control/ZoomToExtent.js';\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./control/Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./control/Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./control/Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n * @api\n */\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * * {@link module:ol/control/Zoom~Zoom}\n * * {@link module:ol/control/Rotate~Rotate}\n * * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions=} opt_options\n * Defaults options.\n * @return {Collection<import(\"./control/Control.js\").default>}\n * Controls.\n * @api\n */\nexport function defaults(opt_options) {\n var options = opt_options ? opt_options : {};\n var controls = new Collection();\n var zoomControl = options.zoom !== undefined ? options.zoom : true;\n if (zoomControl) {\n controls.push(new Zoom(options.zoomOptions));\n }\n var rotateControl = options.rotate !== undefined ? options.rotate : true;\n if (rotateControl) {\n controls.push(new Rotate(options.rotateOptions));\n }\n var attributionControl = options.attribution !== undefined ? options.attribution : true;\n if (attributionControl) {\n controls.push(new Attribution(options.attributionOptions));\n }\n return controls;\n}\n//# sourceMappingURL=control.js.map","/**\n * @module ol/interaction\n */\nimport Collection from './Collection.js';\nimport DoubleClickZoom from './interaction/DoubleClickZoom.js';\nimport DragPan from './interaction/DragPan.js';\nimport DragRotate from './interaction/DragRotate.js';\nimport DragZoom from './interaction/DragZoom.js';\nimport KeyboardPan from './interaction/KeyboardPan.js';\nimport KeyboardZoom from './interaction/KeyboardZoom.js';\nimport Kinetic from './Kinetic.js';\nimport MouseWheelZoom from './interaction/MouseWheelZoom.js';\nimport PinchRotate from './interaction/PinchRotate.js';\nimport PinchZoom from './interaction/PinchZoom.js';\nexport { default as DoubleClickZoom } from './interaction/DoubleClickZoom.js';\nexport { default as DragAndDrop } from './interaction/DragAndDrop.js';\nexport { default as DragBox } from './interaction/DragBox.js';\nexport { default as DragPan } from './interaction/DragPan.js';\nexport { default as DragRotate } from './interaction/DragRotate.js';\nexport { default as DragRotateAndZoom } from './interaction/DragRotateAndZoom.js';\nexport { default as DragZoom } from './interaction/DragZoom.js';\nexport { default as Draw } from './interaction/Draw.js';\nexport { default as Extent } from './interaction/Extent.js';\nexport { default as Interaction } from './interaction/Interaction.js';\nexport { default as KeyboardPan } from './interaction/KeyboardPan.js';\nexport { default as KeyboardZoom } from './interaction/KeyboardZoom.js';\nexport { default as Modify } from './interaction/Modify.js';\nexport { default as MouseWheelZoom } from './interaction/MouseWheelZoom.js';\nexport { default as PinchRotate } from './interaction/PinchRotate.js';\nexport { default as PinchZoom } from './interaction/PinchZoom.js';\nexport { default as Pointer } from './interaction/Pointer.js';\nexport { default as Select } from './interaction/Select.js';\nexport { default as Snap } from './interaction/Snap.js';\nexport { default as Translate } from './interaction/Translate.js';\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [altShiftDragRotate=true] Whether Alt-Shift-drag rotate is\n * desired.\n * @property {boolean} [onFocusOnly=false] Interact only when the map has the\n * focus. This affects the `MouseWheelZoom` and `DragPan` interactions and is\n * useful when page scroll is desired for maps that do not have the browser's\n * focus.\n * @property {boolean} [doubleClickZoom=true] Whether double click zoom is\n * desired.\n * @property {boolean} [keyboard=true] Whether keyboard interaction is desired.\n * @property {boolean} [mouseWheelZoom=true] Whether mousewheel zoom is desired.\n * @property {boolean} [shiftDragZoom=true] Whether Shift-drag zoom is desired.\n * @property {boolean} [dragPan=true] Whether drag pan is desired.\n * @property {boolean} [pinchRotate=true] Whether pinch rotate is desired.\n * @property {boolean} [pinchZoom=true] Whether pinch zoom is desired.\n * @property {number} [zoomDelta] Zoom level delta when using keyboard or double click zoom.\n * @property {number} [zoomDuration] Duration of the zoom animation in\n * milliseconds.\n */\n/**\n * Set of interactions included in maps by default. Specific interactions can be\n * excluded by setting the appropriate option to false in the constructor\n * options, but the order of the interactions is fixed. If you want to specify\n * a different order for interactions, you will need to create your own\n * {@link module:ol/interaction/Interaction} instances and insert\n * them into a {@link module:ol/Collection} in the order you want\n * before creating your {@link module:ol/Map~Map} instance. Changing the order can\n * be of interest if the event propagation needs to be stopped at a point.\n * The default set of interactions, in sequence, is:\n * * {@link module:ol/interaction/DragRotate~DragRotate}\n * * {@link module:ol/interaction/DoubleClickZoom~DoubleClickZoom}\n * * {@link module:ol/interaction/DragPan~DragPan}\n * * {@link module:ol/interaction/PinchRotate~PinchRotate}\n * * {@link module:ol/interaction/PinchZoom~PinchZoom}\n * * {@link module:ol/interaction/KeyboardPan~KeyboardPan}\n * * {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}\n * * {@link module:ol/interaction/MouseWheelZoom~MouseWheelZoom}\n * * {@link module:ol/interaction/DragZoom~DragZoom}\n *\n * @param {DefaultsOptions=} opt_options Defaults options.\n * @return {import(\"./Collection.js\").default<import(\"./interaction/Interaction.js\").default>}\n * A collection of interactions to be used with the {@link module:ol/Map~Map}\n * constructor's `interactions` option.\n * @api\n */\nexport function defaults(opt_options) {\n var options = opt_options ? opt_options : {};\n var interactions = new Collection();\n var kinetic = new Kinetic(-0.005, 0.05, 100);\n var altShiftDragRotate = options.altShiftDragRotate !== undefined\n ? options.altShiftDragRotate\n : true;\n if (altShiftDragRotate) {\n interactions.push(new DragRotate());\n }\n var doubleClickZoom = options.doubleClickZoom !== undefined ? options.doubleClickZoom : true;\n if (doubleClickZoom) {\n interactions.push(new DoubleClickZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n }));\n }\n var dragPan = options.dragPan !== undefined ? options.dragPan : true;\n if (dragPan) {\n interactions.push(new DragPan({\n onFocusOnly: options.onFocusOnly,\n kinetic: kinetic,\n }));\n }\n var pinchRotate = options.pinchRotate !== undefined ? options.pinchRotate : true;\n if (pinchRotate) {\n interactions.push(new PinchRotate());\n }\n var pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;\n if (pinchZoom) {\n interactions.push(new PinchZoom({\n duration: options.zoomDuration,\n }));\n }\n var keyboard = options.keyboard !== undefined ? options.keyboard : true;\n if (keyboard) {\n interactions.push(new KeyboardPan());\n interactions.push(new KeyboardZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n }));\n }\n var mouseWheelZoom = options.mouseWheelZoom !== undefined ? options.mouseWheelZoom : true;\n if (mouseWheelZoom) {\n interactions.push(new MouseWheelZoom({\n onFocusOnly: options.onFocusOnly,\n duration: options.zoomDuration,\n }));\n }\n var shiftDragZoom = options.shiftDragZoom !== undefined ? options.shiftDragZoom : true;\n if (shiftDragZoom) {\n interactions.push(new DragZoom({\n duration: options.zoomDuration,\n }));\n }\n return interactions;\n}\n//# sourceMappingURL=interaction.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isTemplatePartActive } from './template.js';\nconst walkerNodeFilter = 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */;\n/**\n * Removes the list of nodes from a Template safely. In addition to removing\n * nodes from the Template, the Template part indices are updated to match\n * the mutated Template DOM.\n *\n * As the template is walked the removal state is tracked and\n * part indices are adjusted as needed.\n *\n * div\n * div#1 (remove) <-- start removing (removing node is div#1)\n * div\n * div#2 (remove) <-- continue removing (removing node is still div#1)\n * div\n * div <-- stop removing since previous sibling is the removing node (div#1,\n * removed 4 nodes)\n */\nexport function removeNodesFromTemplate(template, nodesToRemove) {\n const { element: { content }, parts } = template;\n const walker = document.createTreeWalker(content, walkerNodeFilter, null, false);\n let partIndex = nextActiveIndexInTemplateParts(parts);\n let part = parts[partIndex];\n let nodeIndex = -1;\n let removeCount = 0;\n const nodesToRemoveInTemplate = [];\n let currentRemovingNode = null;\n while (walker.nextNode()) {\n nodeIndex++;\n const node = walker.currentNode;\n // End removal if stepped past the removing node\n if (node.previousSibling === currentRemovingNode) {\n currentRemovingNode = null;\n }\n // A node to remove was found in the template\n if (nodesToRemove.has(node)) {\n nodesToRemoveInTemplate.push(node);\n // Track node we're removing\n if (currentRemovingNode === null) {\n currentRemovingNode = node;\n }\n }\n // When removing, increment count by which to adjust subsequent part indices\n if (currentRemovingNode !== null) {\n removeCount++;\n }\n while (part !== undefined && part.index === nodeIndex) {\n // If part is in a removed node deactivate it by setting index to -1 or\n // adjust the index as needed.\n part.index = currentRemovingNode !== null ? -1 : part.index - removeCount;\n // go to the next active part.\n partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n part = parts[partIndex];\n }\n }\n nodesToRemoveInTemplate.forEach((n) => n.parentNode.removeChild(n));\n}\nconst countNodes = (node) => {\n let count = (node.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */) ? 0 : 1;\n const walker = document.createTreeWalker(node, walkerNodeFilter, null, false);\n while (walker.nextNode()) {\n count++;\n }\n return count;\n};\nconst nextActiveIndexInTemplateParts = (parts, startIndex = -1) => {\n for (let i = startIndex + 1; i < parts.length; i++) {\n const part = parts[i];\n if (isTemplatePartActive(part)) {\n return i;\n }\n }\n return -1;\n};\n/**\n * Inserts the given node into the Template, optionally before the given\n * refNode. In addition to inserting the node into the Template, the Template\n * part indices are updated to match the mutated Template DOM.\n */\nexport function insertNodeIntoTemplate(template, node, refNode = null) {\n const { element: { content }, parts } = template;\n // If there's no refNode, then put node at end of template.\n // No part indices need to be shifted in this case.\n if (refNode === null || refNode === undefined) {\n content.appendChild(node);\n return;\n }\n const walker = document.createTreeWalker(content, walkerNodeFilter, null, false);\n let partIndex = nextActiveIndexInTemplateParts(parts);\n let insertCount = 0;\n let walkerIndex = -1;\n while (walker.nextNode()) {\n walkerIndex++;\n const walkerNode = walker.currentNode;\n if (walkerNode === refNode) {\n insertCount = countNodes(node);\n refNode.parentNode.insertBefore(node, refNode);\n }\n while (partIndex !== -1 && parts[partIndex].index === walkerIndex) {\n // If we've inserted the node, simply adjust all subsequent parts\n if (insertCount > 0) {\n while (partIndex !== -1) {\n parts[partIndex].index += insertCount;\n partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n }\n return;\n }\n partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n }\n }\n}\n//# sourceMappingURL=modify-template.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * Module to add shady DOM/shady CSS polyfill support to lit-html template\n * rendering. See the [[render]] method for details.\n *\n * @packageDocumentation\n */\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport { removeNodes } from './dom.js';\nimport { insertNodeIntoTemplate, removeNodesFromTemplate } from './modify-template.js';\nimport { parts, render as litRender } from './render.js';\nimport { templateCaches } from './template-factory.js';\nimport { TemplateInstance } from './template-instance.js';\nimport { marker, Template } from './template.js';\nexport { html, svg, TemplateResult } from '../lit-html.js';\n// Get a key to lookup in `templateCaches`.\nconst getTemplateCacheKey = (type, scopeName) => `${type}--${scopeName}`;\nlet compatibleShadyCSSVersion = true;\nif (typeof window.ShadyCSS === 'undefined') {\n compatibleShadyCSSVersion = false;\n}\nelse if (typeof window.ShadyCSS.prepareTemplateDom === 'undefined') {\n console.warn(`Incompatible ShadyCSS version detected. ` +\n `Please update to at least @webcomponents/webcomponentsjs@2.0.2 and ` +\n `@webcomponents/shadycss@1.3.1.`);\n compatibleShadyCSSVersion = false;\n}\n/**\n * Template factory which scopes template DOM using ShadyCSS.\n * @param scopeName {string}\n */\nexport const shadyTemplateFactory = (scopeName) => (result) => {\n const cacheKey = getTemplateCacheKey(result.type, scopeName);\n let templateCache = templateCaches.get(cacheKey);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap(),\n keyString: new Map()\n };\n templateCaches.set(cacheKey, templateCache);\n }\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n const key = result.strings.join(marker);\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n const element = result.getTemplateElement();\n if (compatibleShadyCSSVersion) {\n window.ShadyCSS.prepareTemplateDom(element, scopeName);\n }\n template = new Template(result, element);\n templateCache.keyString.set(key, template);\n }\n templateCache.stringsArray.set(result.strings, template);\n return template;\n};\nconst TEMPLATE_TYPES = ['html', 'svg'];\n/**\n * Removes all style elements from Templates for the given scopeName.\n */\nconst removeStylesFromLitTemplates = (scopeName) => {\n TEMPLATE_TYPES.forEach((type) => {\n const templates = templateCaches.get(getTemplateCacheKey(type, scopeName));\n if (templates !== undefined) {\n templates.keyString.forEach((template) => {\n const { element: { content } } = template;\n // IE 11 doesn't support the iterable param Set constructor\n const styles = new Set();\n Array.from(content.querySelectorAll('style')).forEach((s) => {\n styles.add(s);\n });\n removeNodesFromTemplate(template, styles);\n });\n }\n });\n};\nconst shadyRenderSet = new Set();\n/**\n * For the given scope name, ensures that ShadyCSS style scoping is performed.\n * This is done just once per scope name so the fragment and template cannot\n * be modified.\n * (1) extracts styles from the rendered fragment and hands them to ShadyCSS\n * to be scoped and appended to the document\n * (2) removes style elements from all lit-html Templates for this scope name.\n *\n * Note, <style> elements can only be placed into templates for the\n * initial rendering of the scope. If <style> elements are included in templates\n * dynamically rendered to the scope (after the first scope render), they will\n * not be scoped and the <style> will be left in the template and rendered\n * output.\n */\nconst prepareTemplateStyles = (scopeName, renderedDOM, template) => {\n shadyRenderSet.add(scopeName);\n // If `renderedDOM` is stamped from a Template, then we need to edit that\n // Template's underlying template element. Otherwise, we create one here\n // to give to ShadyCSS, which still requires one while scoping.\n const templateElement = !!template ? template.element : document.createElement('template');\n // Move styles out of rendered DOM and store.\n const styles = renderedDOM.querySelectorAll('style');\n const { length } = styles;\n // If there are no styles, skip unnecessary work\n if (length === 0) {\n // Ensure prepareTemplateStyles is called to support adding\n // styles via `prepareAdoptedCssText` since that requires that\n // `prepareTemplateStyles` is called.\n //\n // ShadyCSS will only update styles containing @apply in the template\n // given to `prepareTemplateStyles`. If no lit Template was given,\n // ShadyCSS will not be able to update uses of @apply in any relevant\n // template. However, this is not a problem because we only create the\n // template for the purpose of supporting `prepareAdoptedCssText`,\n // which doesn't support @apply at all.\n window.ShadyCSS.prepareTemplateStyles(templateElement, scopeName);\n return;\n }\n const condensedStyle = document.createElement('style');\n // Collect styles into a single style. This helps us make sure ShadyCSS\n // manipulations will not prevent us from being able to fix up template\n // part indices.\n // NOTE: collecting styles is inefficient for browsers but ShadyCSS\n // currently does this anyway. When it does not, this should be changed.\n for (let i = 0; i < length; i++) {\n const style = styles[i];\n style.parentNode.removeChild(style);\n condensedStyle.textContent += style.textContent;\n }\n // Remove styles from nested templates in this scope.\n removeStylesFromLitTemplates(scopeName);\n // And then put the condensed style into the \"root\" template passed in as\n // `template`.\n const content = templateElement.content;\n if (!!template) {\n insertNodeIntoTemplate(template, condensedStyle, content.firstChild);\n }\n else {\n content.insertBefore(condensedStyle, content.firstChild);\n }\n // Note, it's important that ShadyCSS gets the template that `lit-html`\n // will actually render so that it can update the style inside when\n // needed (e.g. @apply native Shadow DOM case).\n window.ShadyCSS.prepareTemplateStyles(templateElement, scopeName);\n const style = content.querySelector('style');\n if (window.ShadyCSS.nativeShadow && style !== null) {\n // When in native Shadow DOM, ensure the style created by ShadyCSS is\n // included in initially rendered output (`renderedDOM`).\n renderedDOM.insertBefore(style.cloneNode(true), renderedDOM.firstChild);\n }\n else if (!!template) {\n // When no style is left in the template, parts will be broken as a\n // result. To fix this, we put back the style node ShadyCSS removed\n // and then tell lit to remove that node from the template.\n // There can be no style in the template in 2 cases (1) when Shady DOM\n // is in use, ShadyCSS removes all styles, (2) when native Shadow DOM\n // is in use ShadyCSS removes the style if it contains no content.\n // NOTE, ShadyCSS creates its own style so we can safely add/remove\n // `condensedStyle` here.\n content.insertBefore(condensedStyle, content.firstChild);\n const removes = new Set();\n removes.add(condensedStyle);\n removeNodesFromTemplate(template, removes);\n }\n};\n/**\n * Extension to the standard `render` method which supports rendering\n * to ShadowRoots when the ShadyDOM (https://github.com/webcomponents/shadydom)\n * and ShadyCSS (https://github.com/webcomponents/shadycss) polyfills are used\n * or when the webcomponentsjs\n * (https://github.com/webcomponents/webcomponentsjs) polyfill is used.\n *\n * Adds a `scopeName` option which is used to scope element DOM and stylesheets\n * when native ShadowDOM is unavailable. The `scopeName` will be added to\n * the class attribute of all rendered DOM. In addition, any style elements will\n * be automatically re-written with this `scopeName` selector and moved out\n * of the rendered DOM and into the document `<head>`.\n *\n * It is common to use this render method in conjunction with a custom element\n * which renders a shadowRoot. When this is done, typically the element's\n * `localName` should be used as the `scopeName`.\n *\n * In addition to DOM scoping, ShadyCSS also supports a basic shim for css\n * custom properties (needed only on older browsers like IE11) and a shim for\n * a deprecated feature called `@apply` that supports applying a set of css\n * custom properties to a given location.\n *\n * Usage considerations:\n *\n * * Part values in `<style>` elements are only applied the first time a given\n * `scopeName` renders. Subsequent changes to parts in style elements will have\n * no effect. Because of this, parts in style elements should only be used for\n * values that will never change, for example parts that set scope-wide theme\n * values or parts which render shared style elements.\n *\n * * Note, due to a limitation of the ShadyDOM polyfill, rendering in a\n * custom element's `constructor` is not supported. Instead rendering should\n * either done asynchronously, for example at microtask timing (for example\n * `Promise.resolve()`), or be deferred until the first time the element's\n * `connectedCallback` runs.\n *\n * Usage considerations when using shimmed custom properties or `@apply`:\n *\n * * Whenever any dynamic changes are made which affect\n * css custom properties, `ShadyCSS.styleElement(element)` must be called\n * to update the element. There are two cases when this is needed:\n * (1) the element is connected to a new parent, (2) a class is added to the\n * element that causes it to match different custom properties.\n * To address the first case when rendering a custom element, `styleElement`\n * should be called in the element's `connectedCallback`.\n *\n * * Shimmed custom properties may only be defined either for an entire\n * shadowRoot (for example, in a `:host` rule) or via a rule that directly\n * matches an element with a shadowRoot. In other words, instead of flowing from\n * parent to child as do native css custom properties, shimmed custom properties\n * flow only from shadowRoots to nested shadowRoots.\n *\n * * When using `@apply` mixing css shorthand property names with\n * non-shorthand names (for example `border` and `border-width`) is not\n * supported.\n */\nexport const render = (result, container, options) => {\n if (!options || typeof options !== 'object' || !options.scopeName) {\n throw new Error('The `scopeName` option is required.');\n }\n const scopeName = options.scopeName;\n const hasRendered = parts.has(container);\n const needsScoping = compatibleShadyCSSVersion &&\n container.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */ &&\n !!container.host;\n // Handle first render to a scope specially...\n const firstScopeRender = needsScoping && !shadyRenderSet.has(scopeName);\n // On first scope render, render into a fragment; this cannot be a single\n // fragment that is reused since nested renders can occur synchronously.\n const renderContainer = firstScopeRender ? document.createDocumentFragment() : container;\n litRender(result, renderContainer, Object.assign({ templateFactory: shadyTemplateFactory(scopeName) }, options));\n // When performing first scope render,\n // (1) We've rendered into a fragment so that there's a chance to\n // `prepareTemplateStyles` before sub-elements hit the DOM\n // (which might cause them to render based on a common pattern of\n // rendering in a custom element's `connectedCallback`);\n // (2) Scope the template with ShadyCSS one time only for this scope.\n // (3) Render the fragment into the container and make sure the\n // container knows its `part` is the one we just rendered. This ensures\n // DOM will be re-used on subsequent renders.\n if (firstScopeRender) {\n const part = parts.get(renderContainer);\n parts.delete(renderContainer);\n // ShadyCSS might have style sheets (e.g. from `prepareAdoptedCssText`)\n // that should apply to `renderContainer` even if the rendered value is\n // not a TemplateInstance. However, it will only insert scoped styles\n // into the document if `prepareTemplateStyles` has already been called\n // for the given scope name.\n const template = part.value instanceof TemplateInstance ?\n part.value.template :\n undefined;\n prepareTemplateStyles(scopeName, renderContainer, template);\n removeNodes(container, container.firstChild);\n container.appendChild(renderContainer);\n parts.set(container, part);\n }\n // After elements have hit the DOM, update styling if this is the\n // initial render to this container.\n // This is needed whenever dynamic changes are made so it would be\n // safest to do every render; however, this would regress performance\n // so we leave it up to the user to call `ShadyCSS.styleElement`\n // for dynamic changes.\n if (!hasRendered && needsScoping) {\n window.ShadyCSS.styleElement(container.host);\n }\n};\n//# sourceMappingURL=shady-render.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nvar _a;\n/**\n * Use this module if you want to create your own base class extending\n * [[UpdatingElement]].\n * @packageDocumentation\n */\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\nwindow.JSCompiler_renameProperty =\n (prop, _obj) => prop;\nexport const defaultConverter = {\n toAttribute(value, type) {\n switch (type) {\n case Boolean:\n return value ? '' : null;\n case Object:\n case Array:\n // if the value is `null` or `undefined` pass this through\n // to allow removing/no change behavior.\n return value == null ? value : JSON.stringify(value);\n }\n return value;\n },\n fromAttribute(value, type) {\n switch (type) {\n case Boolean:\n return value !== null;\n case Number:\n return value === null ? null : Number(value);\n case Object:\n case Array:\n return JSON.parse(value);\n }\n return value;\n }\n};\n/**\n * Change function that returns true if `value` is different from `oldValue`.\n * This method is used as the default for a property's `hasChanged` function.\n */\nexport const notEqual = (value, old) => {\n // This ensures (old==NaN, value==NaN) always returns false\n return old !== value && (old === old || value === value);\n};\nconst defaultPropertyDeclaration = {\n attribute: true,\n type: String,\n converter: defaultConverter,\n reflect: false,\n hasChanged: notEqual\n};\nconst STATE_HAS_UPDATED = 1;\nconst STATE_UPDATE_REQUESTED = 1 << 2;\nconst STATE_IS_REFLECTING_TO_ATTRIBUTE = 1 << 3;\nconst STATE_IS_REFLECTING_TO_PROPERTY = 1 << 4;\n/**\n * The Closure JS Compiler doesn't currently have good support for static\n * property semantics where \"this\" is dynamic (e.g.\n * https://github.com/google/closure-compiler/issues/3177 and others) so we use\n * this hack to bypass any rewriting by the compiler.\n */\nconst finalized = 'finalized';\n/**\n * Base element class which manages element properties and attributes. When\n * properties change, the `update` method is asynchronously called. This method\n * should be supplied by subclassers to render updates as desired.\n * @noInheritDoc\n */\nexport class UpdatingElement extends HTMLElement {\n constructor() {\n super();\n this.initialize();\n }\n /**\n * Returns a list of attributes corresponding to the registered properties.\n * @nocollapse\n */\n static get observedAttributes() {\n // note: piggy backing on this to ensure we're finalized.\n this.finalize();\n const attributes = [];\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n this._classProperties.forEach((v, p) => {\n const attr = this._attributeNameForProperty(p, v);\n if (attr !== undefined) {\n this._attributeToPropertyMap.set(attr, p);\n attributes.push(attr);\n }\n });\n return attributes;\n }\n /**\n * Ensures the private `_classProperties` property metadata is created.\n * In addition to `finalize` this is also called in `createProperty` to\n * ensure the `@property` decorator can add property metadata.\n */\n /** @nocollapse */\n static _ensureClassProperties() {\n // ensure private storage for property declarations.\n if (!this.hasOwnProperty(JSCompiler_renameProperty('_classProperties', this))) {\n this._classProperties = new Map();\n // NOTE: Workaround IE11 not supporting Map constructor argument.\n const superProperties = Object.getPrototypeOf(this)._classProperties;\n if (superProperties !== undefined) {\n superProperties.forEach((v, k) => this._classProperties.set(k, v));\n }\n }\n }\n /**\n * Creates a property accessor on the element prototype if one does not exist\n * and stores a PropertyDeclaration for the property with the given options.\n * The property setter calls the property's `hasChanged` property option\n * or uses a strict identity check to determine whether or not to request\n * an update.\n *\n * This method may be overridden to customize properties; however,\n * when doing so, it's important to call `super.createProperty` to ensure\n * the property is setup correctly. This method calls\n * `getPropertyDescriptor` internally to get a descriptor to install.\n * To customize what properties do when they are get or set, override\n * `getPropertyDescriptor`. To customize the options for a property,\n * implement `createProperty` like this:\n *\n * static createProperty(name, options) {\n * options = Object.assign(options, {myOption: true});\n * super.createProperty(name, options);\n * }\n *\n * @nocollapse\n */\n static createProperty(name, options = defaultPropertyDeclaration) {\n // Note, since this can be called by the `@property` decorator which\n // is called before `finalize`, we ensure storage exists for property\n // metadata.\n this._ensureClassProperties();\n this._classProperties.set(name, options);\n // Do not generate an accessor if the prototype already has one, since\n // it would be lost otherwise and that would never be the user's intention;\n // Instead, we expect users to call `requestUpdate` themselves from\n // user-defined accessors. Note that if the super has an accessor we will\n // still overwrite it\n if (options.noAccessor || this.prototype.hasOwnProperty(name)) {\n return;\n }\n const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n const descriptor = this.getPropertyDescriptor(name, key, options);\n if (descriptor !== undefined) {\n Object.defineProperty(this.prototype, name, descriptor);\n }\n }\n /**\n * Returns a property descriptor to be defined on the given named property.\n * If no descriptor is returned, the property will not become an accessor.\n * For example,\n *\n * class MyElement extends LitElement {\n * static getPropertyDescriptor(name, key, options) {\n * const defaultDescriptor =\n * super.getPropertyDescriptor(name, key, options);\n * const setter = defaultDescriptor.set;\n * return {\n * get: defaultDescriptor.get,\n * set(value) {\n * setter.call(this, value);\n * // custom action.\n * },\n * configurable: true,\n * enumerable: true\n * }\n * }\n * }\n *\n * @nocollapse\n */\n static getPropertyDescriptor(name, key, options) {\n return {\n // tslint:disable-next-line:no-any no symbol in index\n get() {\n return this[key];\n },\n set(value) {\n const oldValue = this[name];\n this[key] = value;\n this\n .requestUpdateInternal(name, oldValue, options);\n },\n configurable: true,\n enumerable: true\n };\n }\n /**\n * Returns the property options associated with the given property.\n * These options are defined with a PropertyDeclaration via the `properties`\n * object or the `@property` decorator and are registered in\n * `createProperty(...)`.\n *\n * Note, this method should be considered \"final\" and not overridden. To\n * customize the options for a given property, override `createProperty`.\n *\n * @nocollapse\n * @final\n */\n static getPropertyOptions(name) {\n return this._classProperties && this._classProperties.get(name) ||\n defaultPropertyDeclaration;\n }\n /**\n * Creates property accessors for registered properties and ensures\n * any superclasses are also finalized.\n * @nocollapse\n */\n static finalize() {\n // finalize any superclasses\n const superCtor = Object.getPrototypeOf(this);\n if (!superCtor.hasOwnProperty(finalized)) {\n superCtor.finalize();\n }\n this[finalized] = true;\n this._ensureClassProperties();\n // initialize Map populated in observedAttributes\n this._attributeToPropertyMap = new Map();\n // make any properties\n // Note, only process \"own\" properties since this element will inherit\n // any properties defined on the superClass, and finalization ensures\n // the entire prototype chain is finalized.\n if (this.hasOwnProperty(JSCompiler_renameProperty('properties', this))) {\n const props = this.properties;\n // support symbols in properties (IE11 does not support this)\n const propKeys = [\n ...Object.getOwnPropertyNames(props),\n ...(typeof Object.getOwnPropertySymbols === 'function') ?\n Object.getOwnPropertySymbols(props) :\n []\n ];\n // This for/of is ok because propKeys is an array\n for (const p of propKeys) {\n // note, use of `any` is due to TypeSript lack of support for symbol in\n // index types\n // tslint:disable-next-line:no-any no symbol in index\n this.createProperty(p, props[p]);\n }\n }\n }\n /**\n * Returns the property name for the given attribute `name`.\n * @nocollapse\n */\n static _attributeNameForProperty(name, options) {\n const attribute = options.attribute;\n return attribute === false ?\n undefined :\n (typeof attribute === 'string' ?\n attribute :\n (typeof name === 'string' ? name.toLowerCase() : undefined));\n }\n /**\n * Returns true if a property should request an update.\n * Called when a property value is set and uses the `hasChanged`\n * option for the property if present or a strict identity check.\n * @nocollapse\n */\n static _valueHasChanged(value, old, hasChanged = notEqual) {\n return hasChanged(value, old);\n }\n /**\n * Returns the property value for the given attribute value.\n * Called via the `attributeChangedCallback` and uses the property's\n * `converter` or `converter.fromAttribute` property option.\n * @nocollapse\n */\n static _propertyValueFromAttribute(value, options) {\n const type = options.type;\n const converter = options.converter || defaultConverter;\n const fromAttribute = (typeof converter === 'function' ? converter : converter.fromAttribute);\n return fromAttribute ? fromAttribute(value, type) : value;\n }\n /**\n * Returns the attribute value for the given property value. If this\n * returns undefined, the property will *not* be reflected to an attribute.\n * If this returns null, the attribute will be removed, otherwise the\n * attribute will be set to the value.\n * This uses the property's `reflect` and `type.toAttribute` property options.\n * @nocollapse\n */\n static _propertyValueToAttribute(value, options) {\n if (options.reflect === undefined) {\n return;\n }\n const type = options.type;\n const converter = options.converter;\n const toAttribute = converter && converter.toAttribute ||\n defaultConverter.toAttribute;\n return toAttribute(value, type);\n }\n /**\n * Performs element initialization. By default captures any pre-set values for\n * registered properties.\n */\n initialize() {\n this._updateState = 0;\n this._updatePromise =\n new Promise((res) => this._enableUpdatingResolver = res);\n this._changedProperties = new Map();\n this._saveInstanceProperties();\n // ensures first update will be caught by an early access of\n // `updateComplete`\n this.requestUpdateInternal();\n }\n /**\n * Fixes any properties set on the instance before upgrade time.\n * Otherwise these would shadow the accessor and break these properties.\n * The properties are stored in a Map which is played back after the\n * constructor runs. Note, on very old versions of Safari (<=9) or Chrome\n * (<=41), properties created for native platform properties like (`id` or\n * `name`) may not have default values set in the element constructor. On\n * these browsers native properties appear on instances and therefore their\n * default value will overwrite any element default (e.g. if the element sets\n * this.id = 'id' in the constructor, the 'id' will become '' since this is\n * the native platform default).\n */\n _saveInstanceProperties() {\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n this.constructor\n ._classProperties.forEach((_v, p) => {\n if (this.hasOwnProperty(p)) {\n const value = this[p];\n delete this[p];\n if (!this._instanceProperties) {\n this._instanceProperties = new Map();\n }\n this._instanceProperties.set(p, value);\n }\n });\n }\n /**\n * Applies previously saved instance properties.\n */\n _applyInstanceProperties() {\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n // tslint:disable-next-line:no-any\n this._instanceProperties.forEach((v, p) => this[p] = v);\n this._instanceProperties = undefined;\n }\n connectedCallback() {\n // Ensure first connection completes an update. Updates cannot complete\n // before connection.\n this.enableUpdating();\n }\n enableUpdating() {\n if (this._enableUpdatingResolver !== undefined) {\n this._enableUpdatingResolver();\n this._enableUpdatingResolver = undefined;\n }\n }\n /**\n * Allows for `super.disconnectedCallback()` in extensions while\n * reserving the possibility of making non-breaking feature additions\n * when disconnecting at some point in the future.\n */\n disconnectedCallback() {\n }\n /**\n * Synchronizes property values when attributes change.\n */\n attributeChangedCallback(name, old, value) {\n if (old !== value) {\n this._attributeToProperty(name, value);\n }\n }\n _propertyToAttribute(name, value, options = defaultPropertyDeclaration) {\n const ctor = this.constructor;\n const attr = ctor._attributeNameForProperty(name, options);\n if (attr !== undefined) {\n const attrValue = ctor._propertyValueToAttribute(value, options);\n // an undefined value does not change the attribute.\n if (attrValue === undefined) {\n return;\n }\n // Track if the property is being reflected to avoid\n // setting the property again via `attributeChangedCallback`. Note:\n // 1. this takes advantage of the fact that the callback is synchronous.\n // 2. will behave incorrectly if multiple attributes are in the reaction\n // stack at time of calling. However, since we process attributes\n // in `update` this should not be possible (or an extreme corner case\n // that we'd like to discover).\n // mark state reflecting\n this._updateState = this._updateState | STATE_IS_REFLECTING_TO_ATTRIBUTE;\n if (attrValue == null) {\n this.removeAttribute(attr);\n }\n else {\n this.setAttribute(attr, attrValue);\n }\n // mark state not reflecting\n this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_ATTRIBUTE;\n }\n }\n _attributeToProperty(name, value) {\n // Use tracking info to avoid deserializing attribute value if it was\n // just set from a property setter.\n if (this._updateState & STATE_IS_REFLECTING_TO_ATTRIBUTE) {\n return;\n }\n const ctor = this.constructor;\n // Note, hint this as an `AttributeMap` so closure clearly understands\n // the type; it has issues with tracking types through statics\n // tslint:disable-next-line:no-unnecessary-type-assertion\n const propName = ctor._attributeToPropertyMap.get(name);\n if (propName !== undefined) {\n const options = ctor.getPropertyOptions(propName);\n // mark state reflecting\n this._updateState = this._updateState | STATE_IS_REFLECTING_TO_PROPERTY;\n this[propName] =\n // tslint:disable-next-line:no-any\n ctor._propertyValueFromAttribute(value, options);\n // mark state not reflecting\n this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_PROPERTY;\n }\n }\n /**\n * This protected version of `requestUpdate` does not access or return the\n * `updateComplete` promise. This promise can be overridden and is therefore\n * not free to access.\n */\n requestUpdateInternal(name, oldValue, options) {\n let shouldRequestUpdate = true;\n // If we have a property key, perform property update steps.\n if (name !== undefined) {\n const ctor = this.constructor;\n options = options || ctor.getPropertyOptions(name);\n if (ctor._valueHasChanged(this[name], oldValue, options.hasChanged)) {\n if (!this._changedProperties.has(name)) {\n this._changedProperties.set(name, oldValue);\n }\n // Add to reflecting properties set.\n // Note, it's important that every change has a chance to add the\n // property to `_reflectingProperties`. This ensures setting\n // attribute + property reflects correctly.\n if (options.reflect === true &&\n !(this._updateState & STATE_IS_REFLECTING_TO_PROPERTY)) {\n if (this._reflectingProperties === undefined) {\n this._reflectingProperties = new Map();\n }\n this._reflectingProperties.set(name, options);\n }\n }\n else {\n // Abort the request if the property should not be considered changed.\n shouldRequestUpdate = false;\n }\n }\n if (!this._hasRequestedUpdate && shouldRequestUpdate) {\n this._updatePromise = this._enqueueUpdate();\n }\n }\n /**\n * Requests an update which is processed asynchronously. This should\n * be called when an element should update based on some state not triggered\n * by setting a property. In this case, pass no arguments. It should also be\n * called when manually implementing a property setter. In this case, pass the\n * property `name` and `oldValue` to ensure that any configured property\n * options are honored. Returns the `updateComplete` Promise which is resolved\n * when the update completes.\n *\n * @param name {PropertyKey} (optional) name of requesting property\n * @param oldValue {any} (optional) old value of requesting property\n * @returns {Promise} A Promise that is resolved when the update completes.\n */\n requestUpdate(name, oldValue) {\n this.requestUpdateInternal(name, oldValue);\n return this.updateComplete;\n }\n /**\n * Sets up the element to asynchronously update.\n */\n async _enqueueUpdate() {\n this._updateState = this._updateState | STATE_UPDATE_REQUESTED;\n try {\n // Ensure any previous update has resolved before updating.\n // This `await` also ensures that property changes are batched.\n await this._updatePromise;\n }\n catch (e) {\n // Ignore any previous errors. We only care that the previous cycle is\n // done. Any error should have been handled in the previous update.\n }\n const result = this.performUpdate();\n // If `performUpdate` returns a Promise, we await it. This is done to\n // enable coordinating updates with a scheduler. Note, the result is\n // checked to avoid delaying an additional microtask unless we need to.\n if (result != null) {\n await result;\n }\n return !this._hasRequestedUpdate;\n }\n get _hasRequestedUpdate() {\n return (this._updateState & STATE_UPDATE_REQUESTED);\n }\n get hasUpdated() {\n return (this._updateState & STATE_HAS_UPDATED);\n }\n /**\n * Performs an element update. Note, if an exception is thrown during the\n * update, `firstUpdated` and `updated` will not be called.\n *\n * You can override this method to change the timing of updates. If this\n * method is overridden, `super.performUpdate()` must be called.\n *\n * For instance, to schedule updates to occur just before the next frame:\n *\n * ```\n * protected async performUpdate(): Promise<unknown> {\n * await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n * super.performUpdate();\n * }\n * ```\n */\n performUpdate() {\n // Abort any update if one is not pending when this is called.\n // This can happen if `performUpdate` is called early to \"flush\"\n // the update.\n if (!this._hasRequestedUpdate) {\n return;\n }\n // Mixin instance properties once, if they exist.\n if (this._instanceProperties) {\n this._applyInstanceProperties();\n }\n let shouldUpdate = false;\n const changedProperties = this._changedProperties;\n try {\n shouldUpdate = this.shouldUpdate(changedProperties);\n if (shouldUpdate) {\n this.update(changedProperties);\n }\n else {\n this._markUpdated();\n }\n }\n catch (e) {\n // Prevent `firstUpdated` and `updated` from running when there's an\n // update exception.\n shouldUpdate = false;\n // Ensure element can accept additional updates after an exception.\n this._markUpdated();\n throw e;\n }\n if (shouldUpdate) {\n if (!(this._updateState & STATE_HAS_UPDATED)) {\n this._updateState = this._updateState | STATE_HAS_UPDATED;\n this.firstUpdated(changedProperties);\n }\n this.updated(changedProperties);\n }\n }\n _markUpdated() {\n this._changedProperties = new Map();\n this._updateState = this._updateState & ~STATE_UPDATE_REQUESTED;\n }\n /**\n * Returns a Promise that resolves when the element has completed updating.\n * The Promise value is a boolean that is `true` if the element completed the\n * update without triggering another update. The Promise result is `false` if\n * a property was set inside `updated()`. If the Promise is rejected, an\n * exception was thrown during the update.\n *\n * To await additional asynchronous work, override the `_getUpdateComplete`\n * method. For example, it is sometimes useful to await a rendered element\n * before fulfilling this Promise. To do this, first await\n * `super._getUpdateComplete()`, then any subsequent state.\n *\n * @returns {Promise} The Promise returns a boolean that indicates if the\n * update resolved without triggering another update.\n */\n get updateComplete() {\n return this._getUpdateComplete();\n }\n /**\n * Override point for the `updateComplete` promise.\n *\n * It is not safe to override the `updateComplete` getter directly due to a\n * limitation in TypeScript which means it is not possible to call a\n * superclass getter (e.g. `super.updateComplete.then(...)`) when the target\n * language is ES5 (https://github.com/microsoft/TypeScript/issues/338).\n * This method should be overridden instead. For example:\n *\n * class MyElement extends LitElement {\n * async _getUpdateComplete() {\n * await super._getUpdateComplete();\n * await this._myChild.updateComplete;\n * }\n * }\n */\n _getUpdateComplete() {\n return this._updatePromise;\n }\n /**\n * Controls whether or not `update` should be called when the element requests\n * an update. By default, this method always returns `true`, but this can be\n * customized to control when to update.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n shouldUpdate(_changedProperties) {\n return true;\n }\n /**\n * Updates the element. This method reflects property values to attributes.\n * It can be overridden to render and keep updated element DOM.\n * Setting properties inside this method will *not* trigger\n * another update.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n update(_changedProperties) {\n if (this._reflectingProperties !== undefined &&\n this._reflectingProperties.size > 0) {\n // Use forEach so this works even if for/of loops are compiled to for\n // loops expecting arrays\n this._reflectingProperties.forEach((v, k) => this._propertyToAttribute(k, this[k], v));\n this._reflectingProperties = undefined;\n }\n this._markUpdated();\n }\n /**\n * Invoked whenever the element is updated. Implement to perform\n * post-updating tasks via DOM APIs, for example, focusing an element.\n *\n * Setting properties inside this method will trigger the element to update\n * again after this update cycle completes.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n updated(_changedProperties) {\n }\n /**\n * Invoked when the element is first updated. Implement to perform one time\n * work on the element after update.\n *\n * Setting properties inside this method will trigger the element to update\n * again after this update cycle completes.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n firstUpdated(_changedProperties) {\n }\n}\n_a = finalized;\n/**\n * Marks class as having finished creating properties.\n */\nUpdatingElement[_a] = true;\n//# sourceMappingURL=updating-element.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst legacyCustomElement = (tagName, clazz) => {\n window.customElements.define(tagName, clazz);\n // Cast as any because TS doesn't recognize the return type as being a\n // subtype of the decorated class when clazz is typed as\n // `Constructor<HTMLElement>` for some reason.\n // `Constructor<HTMLElement>` is helpful to make sure the decorator is\n // applied to elements however.\n // tslint:disable-next-line:no-any\n return clazz;\n};\nconst standardCustomElement = (tagName, descriptor) => {\n const { kind, elements } = descriptor;\n return {\n kind,\n elements,\n // This callback is called once the class is otherwise fully defined\n finisher(clazz) {\n window.customElements.define(tagName, clazz);\n }\n };\n};\n/**\n * Class decorator factory that defines the decorated class as a custom element.\n *\n * ```\n * @customElement('my-element')\n * class MyElement {\n * render() {\n * return html``;\n * }\n * }\n * ```\n * @category Decorator\n * @param tagName The name of the custom element to define.\n */\nexport const customElement = (tagName) => (classOrDescriptor) => (typeof classOrDescriptor === 'function') ?\n legacyCustomElement(tagName, classOrDescriptor) :\n standardCustomElement(tagName, classOrDescriptor);\nconst standardProperty = (options, element) => {\n // When decorating an accessor, pass it through and add property metadata.\n // Note, the `hasOwnProperty` check in `createProperty` ensures we don't\n // stomp over the user's accessor.\n if (element.kind === 'method' && element.descriptor &&\n !('value' in element.descriptor)) {\n return Object.assign(Object.assign({}, element), { finisher(clazz) {\n clazz.createProperty(element.key, options);\n } });\n }\n else {\n // createProperty() takes care of defining the property, but we still\n // must return some kind of descriptor, so return a descriptor for an\n // unused prototype field. The finisher calls createProperty().\n return {\n kind: 'field',\n key: Symbol(),\n placement: 'own',\n descriptor: {},\n // When @babel/plugin-proposal-decorators implements initializers,\n // do this instead of the initializer below. See:\n // https://github.com/babel/babel/issues/9260 extras: [\n // {\n // kind: 'initializer',\n // placement: 'own',\n // initializer: descriptor.initializer,\n // }\n // ],\n initializer() {\n if (typeof element.initializer === 'function') {\n this[element.key] = element.initializer.call(this);\n }\n },\n finisher(clazz) {\n clazz.createProperty(element.key, options);\n }\n };\n }\n};\nconst legacyProperty = (options, proto, name) => {\n proto.constructor\n .createProperty(name, options);\n};\n/**\n * A property decorator which creates a LitElement property which reflects a\n * corresponding attribute value. A [[`PropertyDeclaration`]] may optionally be\n * supplied to configure property features.\n *\n * This decorator should only be used for public fields. Private or protected\n * fields should use the [[`internalProperty`]] decorator.\n *\n * @example\n * ```ts\n * class MyElement {\n * @property({ type: Boolean })\n * clicked = false;\n * }\n * ```\n * @category Decorator\n * @ExportDecoratedItems\n */\nexport function property(options) {\n // tslint:disable-next-line:no-any decorator\n return (protoOrDescriptor, name) => (name !== undefined) ?\n legacyProperty(options, protoOrDescriptor, name) :\n standardProperty(options, protoOrDescriptor);\n}\n/**\n * Declares a private or protected property that still triggers updates to the\n * element when it changes.\n *\n * Properties declared this way must not be used from HTML or HTML templating\n * systems, they're solely for properties internal to the element. These\n * properties may be renamed by optimization tools like closure compiler.\n * @category Decorator\n */\nexport function internalProperty(options) {\n return property({ attribute: false, hasChanged: options === null || options === void 0 ? void 0 : options.hasChanged });\n}\n/**\n * A property decorator that converts a class property into a getter that\n * executes a querySelector on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n * @param cache An optional boolean which when true performs the DOM query only\n * once and caches the result.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n *\n * ```ts\n * class MyElement {\n * @query('#first')\n * first;\n *\n * render() {\n * return html`\n * <div id=\"first\"></div>\n * <div id=\"second\"></div>\n * `;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function query(selector, cache) {\n return (protoOrDescriptor, \n // tslint:disable-next-line:no-any decorator\n name) => {\n const descriptor = {\n get() {\n return this.renderRoot.querySelector(selector);\n },\n enumerable: true,\n configurable: true,\n };\n if (cache) {\n const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n descriptor.get = function () {\n if (this[key] === undefined) {\n (this[key] =\n this.renderRoot.querySelector(selector));\n }\n return this[key];\n };\n }\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor, name) :\n standardQuery(descriptor, protoOrDescriptor);\n };\n}\n// Note, in the future, we may extend this decorator to support the use case\n// where the queried element may need to do work to become ready to interact\n// with (e.g. load some implementation code). If so, we might elect to\n// add a second argument defining a function that can be run to make the\n// queried element loaded/updated/ready.\n/**\n * A property decorator that converts a class property into a getter that\n * returns a promise that resolves to the result of a querySelector on the\n * element's renderRoot done after the element's `updateComplete` promise\n * resolves. When the queried property may change with element state, this\n * decorator can be used instead of requiring users to await the\n * `updateComplete` before accessing the property.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n * ```ts\n * class MyElement {\n * @queryAsync('#first')\n * first;\n *\n * render() {\n * return html`\n * <div id=\"first\"></div>\n * <div id=\"second\"></div>\n * `;\n * }\n * }\n *\n * // external usage\n * async doSomethingWithFirst() {\n * (await aMyElement.first).doSomething();\n * }\n * ```\n * @category Decorator\n */\nexport function queryAsync(selector) {\n return (protoOrDescriptor, \n // tslint:disable-next-line:no-any decorator\n name) => {\n const descriptor = {\n async get() {\n await this.updateComplete;\n return this.renderRoot.querySelector(selector);\n },\n enumerable: true,\n configurable: true,\n };\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor, name) :\n standardQuery(descriptor, protoOrDescriptor);\n };\n}\n/**\n * A property decorator that converts a class property into a getter\n * that executes a querySelectorAll on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See:\n * https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll\n *\n * @example\n * ```ts\n * class MyElement {\n * @queryAll('div')\n * divs;\n *\n * render() {\n * return html`\n * <div id=\"first\"></div>\n * <div id=\"second\"></div>\n * `;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAll(selector) {\n return (protoOrDescriptor, \n // tslint:disable-next-line:no-any decorator\n name) => {\n const descriptor = {\n get() {\n return this.renderRoot.querySelectorAll(selector);\n },\n enumerable: true,\n configurable: true,\n };\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor, name) :\n standardQuery(descriptor, protoOrDescriptor);\n };\n}\nconst legacyQuery = (descriptor, proto, name) => {\n Object.defineProperty(proto, name, descriptor);\n};\nconst standardQuery = (descriptor, element) => ({\n kind: 'method',\n placement: 'prototype',\n key: element.key,\n descriptor,\n});\nconst standardEventOptions = (options, element) => {\n return Object.assign(Object.assign({}, element), { finisher(clazz) {\n Object.assign(clazz.prototype[element.key], options);\n } });\n};\nconst legacyEventOptions = \n// tslint:disable-next-line:no-any legacy decorator\n(options, proto, name) => {\n Object.assign(proto[name], options);\n};\n/**\n * Adds event listener options to a method used as an event listener in a\n * lit-html template.\n *\n * @param options An object that specifies event listener options as accepted by\n * `EventTarget#addEventListener` and `EventTarget#removeEventListener`.\n *\n * Current browsers support the `capture`, `passive`, and `once` options. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters\n *\n * @example\n * ```ts\n * class MyElement {\n * clicked = false;\n *\n * render() {\n * return html`\n * <div @click=${this._onClick}`>\n * <button></button>\n * </div>\n * `;\n * }\n *\n * @eventOptions({capture: true})\n * _onClick(e) {\n * this.clicked = true;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function eventOptions(options) {\n // Return value typed as any to prevent TypeScript from complaining that\n // standard decorator function signature does not match TypeScript decorator\n // signature\n // TODO(kschaaf): unclear why it was only failing on this decorator and not\n // the others\n return ((protoOrDescriptor, name) => (name !== undefined) ?\n legacyEventOptions(options, protoOrDescriptor, name) :\n standardEventOptions(options, protoOrDescriptor));\n}\n// x-browser support for matches\n// tslint:disable-next-line:no-any\nconst ElementProto = Element.prototype;\nconst legacyMatches = ElementProto.msMatchesSelector || ElementProto.webkitMatchesSelector;\n/**\n * A property decorator that converts a class property into a getter that\n * returns the `assignedNodes` of the given named `slot`. Note, the type of\n * this property should be annotated as `NodeListOf<HTMLElement>`.\n *\n * @param slotName A string name of the slot.\n * @param flatten A boolean which when true flattens the assigned nodes,\n * meaning any assigned nodes that are slot elements are replaced with their\n * assigned nodes.\n * @param selector A string which filters the results to elements that match\n * the given css selector.\n *\n * * @example\n * ```ts\n * class MyElement {\n * @queryAssignedNodes('list', true, '.item')\n * listItems;\n *\n * render() {\n * return html`\n * <slot name=\"list\"></slot>\n * `;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAssignedNodes(slotName = '', flatten = false, selector = '') {\n return (protoOrDescriptor, \n // tslint:disable-next-line:no-any decorator\n name) => {\n const descriptor = {\n get() {\n const slotSelector = `slot${slotName ? `[name=${slotName}]` : ':not([name])'}`;\n const slot = this.renderRoot.querySelector(slotSelector);\n let nodes = slot && slot.assignedNodes({ flatten });\n if (nodes && selector) {\n nodes = nodes.filter((node) => node.nodeType === Node.ELEMENT_NODE &&\n node.matches ?\n node.matches(selector) :\n legacyMatches.call(node, selector));\n }\n return nodes;\n },\n enumerable: true,\n configurable: true,\n };\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor, name) :\n standardQuery(descriptor, protoOrDescriptor);\n };\n}\n//# sourceMappingURL=decorators.js.map","/**\n@license\nCopyright (c) 2019 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\nexport const supportsAdoptingStyleSheets = (window.ShadowRoot) &&\n (window.ShadyCSS === undefined || window.ShadyCSS.nativeShadow) &&\n ('adoptedStyleSheets' in Document.prototype) &&\n ('replace' in CSSStyleSheet.prototype);\nconst constructionToken = Symbol();\nexport class CSSResult {\n constructor(cssText, safeToken) {\n if (safeToken !== constructionToken) {\n throw new Error('CSSResult is not constructable. Use `unsafeCSS` or `css` instead.');\n }\n this.cssText = cssText;\n }\n // Note, this is a getter so that it's lazy. In practice, this means\n // stylesheets are not created until the first element instance is made.\n get styleSheet() {\n if (this._styleSheet === undefined) {\n // Note, if `supportsAdoptingStyleSheets` is true then we assume\n // CSSStyleSheet is constructable.\n if (supportsAdoptingStyleSheets) {\n this._styleSheet = new CSSStyleSheet();\n this._styleSheet.replaceSync(this.cssText);\n }\n else {\n this._styleSheet = null;\n }\n }\n return this._styleSheet;\n }\n toString() {\n return this.cssText;\n }\n}\n/**\n * Wrap a value for interpolation in a [[`css`]] tagged template literal.\n *\n * This is unsafe because untrusted CSS text can be used to phone home\n * or exfiltrate data to an attacker controlled site. Take care to only use\n * this with trusted input.\n */\nexport const unsafeCSS = (value) => {\n return new CSSResult(String(value), constructionToken);\n};\nconst textFromCSSResult = (value) => {\n if (value instanceof CSSResult) {\n return value.cssText;\n }\n else if (typeof value === 'number') {\n return value;\n }\n else {\n throw new Error(`Value passed to 'css' function must be a 'css' function result: ${value}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`);\n }\n};\n/**\n * Template tag which which can be used with LitElement's [[LitElement.styles |\n * `styles`]] property to set element styles. For security reasons, only literal\n * string values may be used. To incorporate non-literal values [[`unsafeCSS`]]\n * may be used inside a template string part.\n */\nexport const css = (strings, ...values) => {\n const cssText = values.reduce((acc, v, idx) => acc + textFromCSSResult(v) + strings[idx + 1], strings[0]);\n return new CSSResult(cssText, constructionToken);\n};\n//# sourceMappingURL=css-tag.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * The main LitElement module, which defines the [[`LitElement`]] base class and\n * related APIs.\n *\n * LitElement components can define a template and a set of observed\n * properties. Changing an observed property triggers a re-render of the\n * element.\n *\n * Import [[`LitElement`]] and [[`html`]] from this module to create a\n * component:\n *\n * ```js\n * import {LitElement, html} from 'lit-element';\n *\n * class MyElement extends LitElement {\n *\n * // Declare observed properties\n * static get properties() {\n * return {\n * adjective: {}\n * }\n * }\n *\n * constructor() {\n * this.adjective = 'awesome';\n * }\n *\n * // Define the element's template\n * render() {\n * return html`<p>your ${adjective} template here</p>`;\n * }\n * }\n *\n * customElements.define('my-element', MyElement);\n * ```\n *\n * `LitElement` extends [[`UpdatingElement`]] and adds lit-html templating.\n * The `UpdatingElement` class is provided for users that want to build\n * their own custom element base classes that don't use lit-html.\n *\n * @packageDocumentation\n */\nimport { render } from 'lit-html/lib/shady-render.js';\nimport { UpdatingElement } from './lib/updating-element.js';\nexport * from './lib/updating-element.js';\nexport * from './lib/decorators.js';\nexport { html, svg, TemplateResult, SVGTemplateResult } from 'lit-html/lit-html.js';\nimport { supportsAdoptingStyleSheets, unsafeCSS } from './lib/css-tag.js';\nexport * from './lib/css-tag.js';\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for LitElement usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litElementVersions'] || (window['litElementVersions'] = []))\n .push('2.4.0');\n/**\n * Sentinal value used to avoid calling lit-html's render function when\n * subclasses do not implement `render`\n */\nconst renderNotImplemented = {};\n/**\n * Base element class that manages element properties and attributes, and\n * renders a lit-html template.\n *\n * To define a component, subclass `LitElement` and implement a\n * `render` method to provide the component's template. Define properties\n * using the [[`properties`]] property or the [[`property`]] decorator.\n */\nexport class LitElement extends UpdatingElement {\n /**\n * Return the array of styles to apply to the element.\n * Override this method to integrate into a style management system.\n *\n * @nocollapse\n */\n static getStyles() {\n return this.styles;\n }\n /** @nocollapse */\n static _getUniqueStyles() {\n // Only gather styles once per class\n if (this.hasOwnProperty(JSCompiler_renameProperty('_styles', this))) {\n return;\n }\n // Take care not to call `this.getStyles()` multiple times since this\n // generates new CSSResults each time.\n // TODO(sorvell): Since we do not cache CSSResults by input, any\n // shared styles will generate new stylesheet objects, which is wasteful.\n // This should be addressed when a browser ships constructable\n // stylesheets.\n const userStyles = this.getStyles();\n if (Array.isArray(userStyles)) {\n // De-duplicate styles preserving the _last_ instance in the set.\n // This is a performance optimization to avoid duplicated styles that can\n // occur especially when composing via subclassing.\n // The last item is kept to try to preserve the cascade order with the\n // assumption that it's most important that last added styles override\n // previous styles.\n const addStyles = (styles, set) => styles.reduceRight((set, s) => \n // Note: On IE set.add() does not return the set\n Array.isArray(s) ? addStyles(s, set) : (set.add(s), set), set);\n // Array.from does not work on Set in IE, otherwise return\n // Array.from(addStyles(userStyles, new Set<CSSResult>())).reverse()\n const set = addStyles(userStyles, new Set());\n const styles = [];\n set.forEach((v) => styles.unshift(v));\n this._styles = styles;\n }\n else {\n this._styles = userStyles === undefined ? [] : [userStyles];\n }\n // Ensure that there are no invalid CSSStyleSheet instances here. They are\n // invalid in two conditions.\n // (1) the sheet is non-constructible (`sheet` of a HTMLStyleElement), but\n // this is impossible to check except via .replaceSync or use\n // (2) the ShadyCSS polyfill is enabled (:. supportsAdoptingStyleSheets is\n // false)\n this._styles = this._styles.map((s) => {\n if (s instanceof CSSStyleSheet && !supportsAdoptingStyleSheets) {\n // Flatten the cssText from the passed constructible stylesheet (or\n // undetectable non-constructible stylesheet). The user might have\n // expected to update their stylesheets over time, but the alternative\n // is a crash.\n const cssText = Array.prototype.slice.call(s.cssRules)\n .reduce((css, rule) => css + rule.cssText, '');\n return unsafeCSS(cssText);\n }\n return s;\n });\n }\n /**\n * Performs element initialization. By default this calls\n * [[`createRenderRoot`]] to create the element [[`renderRoot`]] node and\n * captures any pre-set values for registered properties.\n */\n initialize() {\n super.initialize();\n this.constructor._getUniqueStyles();\n this.renderRoot = this.createRenderRoot();\n // Note, if renderRoot is not a shadowRoot, styles would/could apply to the\n // element's getRootNode(). While this could be done, we're choosing not to\n // support this now since it would require different logic around de-duping.\n if (window.ShadowRoot && this.renderRoot instanceof window.ShadowRoot) {\n this.adoptStyles();\n }\n }\n /**\n * Returns the node into which the element should render and by default\n * creates and returns an open shadowRoot. Implement to customize where the\n * element's DOM is rendered. For example, to render into the element's\n * childNodes, return `this`.\n * @returns {Element|DocumentFragment} Returns a node into which to render.\n */\n createRenderRoot() {\n return this.attachShadow({ mode: 'open' });\n }\n /**\n * Applies styling to the element shadowRoot using the [[`styles`]]\n * property. Styling will apply using `shadowRoot.adoptedStyleSheets` where\n * available and will fallback otherwise. When Shadow DOM is polyfilled,\n * ShadyCSS scopes styles and adds them to the document. When Shadow DOM\n * is available but `adoptedStyleSheets` is not, styles are appended to the\n * end of the `shadowRoot` to [mimic spec\n * behavior](https://wicg.github.io/construct-stylesheets/#using-constructed-stylesheets).\n */\n adoptStyles() {\n const styles = this.constructor._styles;\n if (styles.length === 0) {\n return;\n }\n // There are three separate cases here based on Shadow DOM support.\n // (1) shadowRoot polyfilled: use ShadyCSS\n // (2) shadowRoot.adoptedStyleSheets available: use it\n // (3) shadowRoot.adoptedStyleSheets polyfilled: append styles after\n // rendering\n if (window.ShadyCSS !== undefined && !window.ShadyCSS.nativeShadow) {\n window.ShadyCSS.ScopingShim.prepareAdoptedCssText(styles.map((s) => s.cssText), this.localName);\n }\n else if (supportsAdoptingStyleSheets) {\n this.renderRoot.adoptedStyleSheets =\n styles.map((s) => s instanceof CSSStyleSheet ? s : s.styleSheet);\n }\n else {\n // This must be done after rendering so the actual style insertion is done\n // in `update`.\n this._needsShimAdoptedStyleSheets = true;\n }\n }\n connectedCallback() {\n super.connectedCallback();\n // Note, first update/render handles styleElement so we only call this if\n // connected after first update.\n if (this.hasUpdated && window.ShadyCSS !== undefined) {\n window.ShadyCSS.styleElement(this);\n }\n }\n /**\n * Updates the element. This method reflects property values to attributes\n * and calls `render` to render DOM via lit-html. Setting properties inside\n * this method will *not* trigger another update.\n * @param _changedProperties Map of changed properties with old values\n */\n update(changedProperties) {\n // Setting properties in `render` should not trigger an update. Since\n // updates are allowed after super.update, it's important to call `render`\n // before that.\n const templateResult = this.render();\n super.update(changedProperties);\n // If render is not implemented by the component, don't call lit-html render\n if (templateResult !== renderNotImplemented) {\n this.constructor\n .render(templateResult, this.renderRoot, { scopeName: this.localName, eventContext: this });\n }\n // When native Shadow DOM is used but adoptedStyles are not supported,\n // insert styling after rendering to ensure adoptedStyles have highest\n // priority.\n if (this._needsShimAdoptedStyleSheets) {\n this._needsShimAdoptedStyleSheets = false;\n this.constructor._styles.forEach((s) => {\n const style = document.createElement('style');\n style.textContent = s.cssText;\n this.renderRoot.appendChild(style);\n });\n }\n }\n /**\n * Invoked on each update to perform rendering tasks. This method may return\n * any value renderable by lit-html's `NodePart` - typically a\n * `TemplateResult`. Setting properties inside this method will *not* trigger\n * the element to update.\n */\n render() {\n return renderNotImplemented;\n }\n}\n/**\n * Ensure this class is marked as `finalized` as an optimization ensuring\n * it will not needlessly try to `finalize`.\n *\n * Note this property name is a string to prevent breaking Closure JS Compiler\n * optimizations. See updating-element.ts for more information.\n */\nLitElement['finalized'] = true;\n/**\n * Reference to the underlying library method used to render the element's\n * DOM. By default, points to the `render` method from lit-html's shady-render\n * module.\n *\n * **Most users will never need to touch this property.**\n *\n * This property should not be confused with the `render` instance method,\n * which should be overridden to define a template for the element.\n *\n * Advanced users creating a new base class based on LitElement can override\n * this property to point to a custom render method with a signature that\n * matches [shady-render's `render`\n * method](https://lit-html.polymer-project.org/api/modules/shady_render.html#render).\n *\n * @nocollapse\n */\nLitElement.render = render;\n//# sourceMappingURL=lit-element.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/BaseTile\n */\nimport Layer from './Layer.js';\nimport TileProperty from './TileProperty.js';\nimport { assign } from '../obj.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {import(\"../source/Tile.js\").default} [source] Source for this layer.\n * @property {import(\"../PluggableMap.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link module:ol/Map#addLayer}.\n * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.\n */\n/**\n * @classdesc\n * For layer sources that provide pre-rendered, tiled images in grids that are\n * organized by zoom levels for specific resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @extends {Layer<import(\"../source/Tile.js\").default>}\n * @api\n */\nvar BaseTileLayer = /** @class */ (function (_super) {\n __extends(BaseTileLayer, _super);\n /**\n * @param {Options=} opt_options Tile layer options.\n */\n function BaseTileLayer(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n var baseOptions = assign({}, options);\n delete baseOptions.preload;\n delete baseOptions.useInterimTilesOnError;\n _this = _super.call(this, baseOptions) || this;\n _this.setPreload(options.preload !== undefined ? options.preload : 0);\n _this.setUseInterimTilesOnError(options.useInterimTilesOnError !== undefined\n ? options.useInterimTilesOnError\n : true);\n return _this;\n }\n /**\n * Return the level as number to which we will preload tiles up to.\n * @return {number} The level to preload tiles up to.\n * @observable\n * @api\n */\n BaseTileLayer.prototype.getPreload = function () {\n return /** @type {number} */ (this.get(TileProperty.PRELOAD));\n };\n /**\n * Set the level as number to which we will preload tiles up to.\n * @param {number} preload The level to preload tiles up to.\n * @observable\n * @api\n */\n BaseTileLayer.prototype.setPreload = function (preload) {\n this.set(TileProperty.PRELOAD, preload);\n };\n /**\n * Whether we use interim tiles on error.\n * @return {boolean} Use interim tiles on error.\n * @observable\n * @api\n */\n BaseTileLayer.prototype.getUseInterimTilesOnError = function () {\n return /** @type {boolean} */ (this.get(TileProperty.USE_INTERIM_TILES_ON_ERROR));\n };\n /**\n * Set whether we use interim tiles on error.\n * @param {boolean} useInterimTilesOnError Use interim tiles on error.\n * @observable\n * @api\n */\n BaseTileLayer.prototype.setUseInterimTilesOnError = function (useInterimTilesOnError) {\n this.set(TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);\n };\n return BaseTileLayer;\n}(Layer));\nexport default BaseTileLayer;\n//# sourceMappingURL=BaseTile.js.map","/**\n * @module ol/layer/TileProperty\n */\n/**\n * @enum {string}\n */\nexport default {\n PRELOAD: 'preload',\n USE_INTERIM_TILES_ON_ERROR: 'useInterimTilesOnError',\n};\n//# sourceMappingURL=TileProperty.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/canvas/TileLayer\n */\nimport CanvasLayerRenderer from './Layer.js';\nimport TileRange from '../../TileRange.js';\nimport TileState from '../../TileState.js';\nimport { apply as applyTransform, compose as composeTransform, makeInverse, } from '../../transform.js';\nimport { assign } from '../../obj.js';\nimport { createEmpty, equals, getIntersection, getTopLeft, } from '../../extent.js';\nimport { createTransformString } from '../../render/canvas.js';\nimport { fromUserExtent } from '../../proj.js';\nimport { getUid } from '../../util.js';\nimport { numberSafeCompareFunction } from '../../array.js';\n/**\n * @classdesc\n * Canvas renderer for tile layers.\n * @api\n */\nvar CanvasTileLayerRenderer = /** @class */ (function (_super) {\n __extends(CanvasTileLayerRenderer, _super);\n /**\n * @param {import(\"../../layer/Tile.js\").default|import(\"../../layer/VectorTile.js\").default} tileLayer Tile layer.\n */\n function CanvasTileLayerRenderer(tileLayer) {\n var _this = _super.call(this, tileLayer) || this;\n /**\n * Rendered extent has changed since the previous `renderFrame()` call\n * @type {boolean}\n */\n _this.extentChanged = true;\n /**\n * @private\n * @type {?import(\"../../extent.js\").Extent}\n */\n _this.renderedExtent_ = null;\n /**\n * @protected\n * @type {number}\n */\n _this.renderedPixelRatio;\n /**\n * @protected\n * @type {import(\"../../proj/Projection.js\").default}\n */\n _this.renderedProjection = null;\n /**\n * @protected\n * @type {number}\n */\n _this.renderedRevision;\n /**\n * @protected\n * @type {!Array<import(\"../../Tile.js\").default>}\n */\n _this.renderedTiles = [];\n /**\n * @private\n * @type {boolean}\n */\n _this.newTiles_ = false;\n /**\n * @protected\n * @type {import(\"../../extent.js\").Extent}\n */\n _this.tmpExtent = createEmpty();\n /**\n * @private\n * @type {import(\"../../TileRange.js\").default}\n */\n _this.tmpTileRange_ = new TileRange(0, 0, 0, 0);\n return _this;\n }\n /**\n * @protected\n * @param {import(\"../../Tile.js\").default} tile Tile.\n * @return {boolean} Tile is drawable.\n */\n CanvasTileLayerRenderer.prototype.isDrawableTile = function (tile) {\n var tileLayer = this.getLayer();\n var tileState = tile.getState();\n var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();\n return (tileState == TileState.LOADED ||\n tileState == TileState.EMPTY ||\n (tileState == TileState.ERROR && !useInterimTilesOnError));\n };\n /**\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {!import(\"../../Tile.js\").default} Tile.\n */\n CanvasTileLayerRenderer.prototype.getTile = function (z, x, y, frameState) {\n var pixelRatio = frameState.pixelRatio;\n var projection = frameState.viewState.projection;\n var tileLayer = this.getLayer();\n var tileSource = tileLayer.getSource();\n var tile = tileSource.getTile(z, x, y, pixelRatio, projection);\n if (tile.getState() == TileState.ERROR) {\n if (!tileLayer.getUseInterimTilesOnError()) {\n // When useInterimTilesOnError is false, we consider the error tile as loaded.\n tile.setState(TileState.LOADED);\n }\n else if (tileLayer.getPreload() > 0) {\n // Preloaded tiles for lower resolutions might have finished loading.\n this.newTiles_ = true;\n }\n }\n if (!this.isDrawableTile(tile)) {\n tile = tile.getInterimTile();\n }\n return tile;\n };\n /**\n * @param {Object<number, Object<string, import(\"../../Tile.js\").default>>} tiles Lookup of loaded tiles by zoom level.\n * @param {number} zoom Zoom level.\n * @param {import(\"../../Tile.js\").default} tile Tile.\n * @return {boolean|void} If `false`, the tile will not be considered loaded.\n */\n CanvasTileLayerRenderer.prototype.loadedTileCallback = function (tiles, zoom, tile) {\n if (this.isDrawableTile(tile)) {\n return _super.prototype.loadedTileCallback.call(this, tiles, zoom, tile);\n }\n return false;\n };\n /**\n * Determine whether render should be called.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n */\n CanvasTileLayerRenderer.prototype.prepareFrame = function (frameState) {\n return !!this.getLayer().getSource();\n };\n /**\n * Render the layer.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target that may be used to render content to.\n * @return {HTMLElement} The rendered element.\n */\n CanvasTileLayerRenderer.prototype.renderFrame = function (frameState, target) {\n var layerState = frameState.layerStatesArray[frameState.layerIndex];\n var viewState = frameState.viewState;\n var projection = viewState.projection;\n var viewResolution = viewState.resolution;\n var viewCenter = viewState.center;\n var rotation = viewState.rotation;\n var pixelRatio = frameState.pixelRatio;\n var tileLayer = this.getLayer();\n var tileSource = tileLayer.getSource();\n var sourceRevision = tileSource.getRevision();\n var tileGrid = tileSource.getTileGridForProjection(projection);\n var z = tileGrid.getZForResolution(viewResolution, tileSource.zDirection);\n var tileResolution = tileGrid.getResolution(z);\n var extent = frameState.extent;\n var layerExtent = layerState.extent && fromUserExtent(layerState.extent, projection);\n if (layerExtent) {\n extent = getIntersection(extent, fromUserExtent(layerState.extent, projection));\n }\n var tilePixelRatio = tileSource.getTilePixelRatio(pixelRatio);\n // desired dimensions of the canvas in pixels\n var width = Math.round(frameState.size[0] * tilePixelRatio);\n var height = Math.round(frameState.size[1] * tilePixelRatio);\n if (rotation) {\n var size = Math.round(Math.sqrt(width * width + height * height));\n width = size;\n height = size;\n }\n var dx = (tileResolution * width) / 2 / tilePixelRatio;\n var dy = (tileResolution * height) / 2 / tilePixelRatio;\n var canvasExtent = [\n viewCenter[0] - dx,\n viewCenter[1] - dy,\n viewCenter[0] + dx,\n viewCenter[1] + dy,\n ];\n var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);\n /**\n * @type {Object<number, Object<string, import(\"../../Tile.js\").default>>}\n */\n var tilesToDrawByZ = {};\n tilesToDrawByZ[z] = {};\n var findLoadedTiles = this.createLoadedTileFinder(tileSource, projection, tilesToDrawByZ);\n var tmpExtent = this.tmpExtent;\n var tmpTileRange = this.tmpTileRange_;\n this.newTiles_ = false;\n for (var x = tileRange.minX; x <= tileRange.maxX; ++x) {\n for (var y = tileRange.minY; y <= tileRange.maxY; ++y) {\n var tile = this.getTile(z, x, y, frameState);\n if (this.isDrawableTile(tile)) {\n var uid = getUid(this);\n if (tile.getState() == TileState.LOADED) {\n tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;\n var inTransition = tile.inTransition(uid);\n if (!this.newTiles_ &&\n (inTransition || this.renderedTiles.indexOf(tile) === -1)) {\n this.newTiles_ = true;\n }\n }\n if (tile.getAlpha(uid, frameState.time) === 1) {\n // don't look for alt tiles if alpha is 1\n continue;\n }\n }\n var childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent);\n var covered = false;\n if (childTileRange) {\n covered = findLoadedTiles(z + 1, childTileRange);\n }\n if (!covered) {\n tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, tmpTileRange, tmpExtent);\n }\n }\n }\n var canvasScale = tileResolution / viewResolution;\n // set forward and inverse pixel transforms\n composeTransform(this.pixelTransform, frameState.size[0] / 2, frameState.size[1] / 2, 1 / tilePixelRatio, 1 / tilePixelRatio, rotation, -width / 2, -height / 2);\n var canvasTransform = createTransformString(this.pixelTransform);\n this.useContainer(target, canvasTransform, layerState.opacity);\n var context = this.context;\n var canvas = context.canvas;\n makeInverse(this.inversePixelTransform, this.pixelTransform);\n // set scale transform for calculating tile positions on the canvas\n composeTransform(this.tempTransform, width / 2, height / 2, canvasScale, canvasScale, 0, -width / 2, -height / 2);\n if (canvas.width != width || canvas.height != height) {\n canvas.width = width;\n canvas.height = height;\n }\n else if (!this.containerReused) {\n context.clearRect(0, 0, width, height);\n }\n if (layerExtent) {\n this.clipUnrotated(context, frameState, layerExtent);\n }\n assign(context, tileSource.getContextOptions());\n this.preRender(context, frameState);\n this.renderedTiles.length = 0;\n /** @type {Array<number>} */\n var zs = Object.keys(tilesToDrawByZ).map(Number);\n zs.sort(numberSafeCompareFunction);\n var clips, clipZs, currentClip;\n if (layerState.opacity === 1 &&\n (!this.containerReused ||\n tileSource.getOpaque(frameState.viewState.projection))) {\n zs = zs.reverse();\n }\n else {\n clips = [];\n clipZs = [];\n }\n for (var i = zs.length - 1; i >= 0; --i) {\n var currentZ = zs[i];\n var currentTilePixelSize = tileSource.getTilePixelSize(currentZ, pixelRatio, projection);\n var currentResolution = tileGrid.getResolution(currentZ);\n var currentScale = currentResolution / tileResolution;\n var dx_1 = currentTilePixelSize[0] * currentScale * canvasScale;\n var dy_1 = currentTilePixelSize[1] * currentScale * canvasScale;\n var originTileCoord = tileGrid.getTileCoordForCoordAndZ(getTopLeft(canvasExtent), currentZ);\n var originTileExtent = tileGrid.getTileCoordExtent(originTileCoord);\n var origin_1 = applyTransform(this.tempTransform, [\n (tilePixelRatio * (originTileExtent[0] - canvasExtent[0])) /\n tileResolution,\n (tilePixelRatio * (canvasExtent[3] - originTileExtent[3])) /\n tileResolution,\n ]);\n var tileGutter = tilePixelRatio * tileSource.getGutterForProjection(projection);\n var tilesToDraw = tilesToDrawByZ[currentZ];\n for (var tileCoordKey in tilesToDraw) {\n var tile = /** @type {import(\"../../ImageTile.js\").default} */ (tilesToDraw[tileCoordKey]);\n var tileCoord = tile.tileCoord;\n // Calculate integer positions and sizes so that tiles align\n var floatX = origin_1[0] - (originTileCoord[1] - tileCoord[1]) * dx_1;\n var nextX = Math.round(floatX + dx_1);\n var floatY = origin_1[1] - (originTileCoord[2] - tileCoord[2]) * dy_1;\n var nextY = Math.round(floatY + dy_1);\n var x = Math.round(floatX);\n var y = Math.round(floatY);\n var w = nextX - x;\n var h = nextY - y;\n var transition = z === currentZ;\n var inTransition = transition && tile.getAlpha(getUid(this), frameState.time) !== 1;\n if (!inTransition) {\n if (clips) {\n // Clip mask for regions in this tile that already filled by a higher z tile\n context.save();\n currentClip = [x, y, x + w, y, x + w, y + h, x, y + h];\n for (var i_1 = 0, ii = clips.length; i_1 < ii; ++i_1) {\n if (z !== currentZ && currentZ < clipZs[i_1]) {\n var clip = clips[i_1];\n context.beginPath();\n // counter-clockwise (outer ring) for current tile\n context.moveTo(currentClip[0], currentClip[1]);\n context.lineTo(currentClip[2], currentClip[3]);\n context.lineTo(currentClip[4], currentClip[5]);\n context.lineTo(currentClip[6], currentClip[7]);\n // clockwise (inner ring) for higher z tile\n context.moveTo(clip[6], clip[7]);\n context.lineTo(clip[4], clip[5]);\n context.lineTo(clip[2], clip[3]);\n context.lineTo(clip[0], clip[1]);\n context.clip();\n }\n }\n clips.push(currentClip);\n clipZs.push(currentZ);\n }\n else {\n context.clearRect(x, y, w, h);\n }\n }\n this.drawTileImage(tile, frameState, x, y, w, h, tileGutter, transition, layerState.opacity);\n if (clips && !inTransition) {\n context.restore();\n }\n this.renderedTiles.push(tile);\n this.updateUsedTiles(frameState.usedTiles, tileSource, tile);\n }\n }\n this.renderedRevision = sourceRevision;\n this.renderedResolution = tileResolution;\n this.extentChanged =\n !this.renderedExtent_ || !equals(this.renderedExtent_, canvasExtent);\n this.renderedExtent_ = canvasExtent;\n this.renderedPixelRatio = pixelRatio;\n this.renderedProjection = projection;\n this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload());\n this.scheduleExpireCache(frameState, tileSource);\n this.postRender(context, frameState);\n if (layerState.extent) {\n context.restore();\n }\n if (canvasTransform !== canvas.style.transform) {\n canvas.style.transform = canvasTransform;\n }\n return this.container;\n };\n /**\n * @param {import(\"../../ImageTile.js\").default} tile Tile.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {number} x Left of the tile.\n * @param {number} y Top of the tile.\n * @param {number} w Width of the tile.\n * @param {number} h Height of the tile.\n * @param {number} gutter Tile gutter.\n * @param {boolean} transition Apply an alpha transition.\n * @param {number} opacity Opacity.\n */\n CanvasTileLayerRenderer.prototype.drawTileImage = function (tile, frameState, x, y, w, h, gutter, transition, opacity) {\n var image = this.getTileImage(tile);\n if (!image) {\n return;\n }\n var uid = getUid(this);\n var tileAlpha = transition ? tile.getAlpha(uid, frameState.time) : 1;\n var alpha = opacity * tileAlpha;\n var alphaChanged = alpha !== this.context.globalAlpha;\n if (alphaChanged) {\n this.context.save();\n this.context.globalAlpha = alpha;\n }\n this.context.drawImage(image, gutter, gutter, image.width - 2 * gutter, image.height - 2 * gutter, x, y, w, h);\n if (alphaChanged) {\n this.context.restore();\n }\n if (tileAlpha !== 1) {\n frameState.animate = true;\n }\n else if (transition) {\n tile.endTransition(uid);\n }\n };\n /**\n * @return {HTMLCanvasElement} Image\n */\n CanvasTileLayerRenderer.prototype.getImage = function () {\n var context = this.context;\n return context ? context.canvas : null;\n };\n /**\n * Get the image from a tile.\n * @param {import(\"../../ImageTile.js\").default} tile Tile.\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @protected\n */\n CanvasTileLayerRenderer.prototype.getTileImage = function (tile) {\n return tile.getImage();\n };\n /**\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {import(\"../../source/Tile.js\").default} tileSource Tile source.\n * @protected\n */\n CanvasTileLayerRenderer.prototype.scheduleExpireCache = function (frameState, tileSource) {\n if (tileSource.canExpireCache()) {\n /**\n * @param {import(\"../../source/Tile.js\").default} tileSource Tile source.\n * @param {import(\"../../PluggableMap.js\").default} map Map.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n */\n var postRenderFunction = function (tileSource, map, frameState) {\n var tileSourceKey = getUid(tileSource);\n if (tileSourceKey in frameState.usedTiles) {\n tileSource.expireCache(frameState.viewState.projection, frameState.usedTiles[tileSourceKey]);\n }\n }.bind(null, tileSource);\n frameState.postRenderFunctions.push(\n /** @type {import(\"../../PluggableMap.js\").PostRenderFunction} */ (postRenderFunction));\n }\n };\n /**\n * @param {!Object<string, !Object<string, boolean>>} usedTiles Used tiles.\n * @param {import(\"../../source/Tile.js\").default} tileSource Tile source.\n * @param {import('../../Tile.js').default} tile Tile.\n * @protected\n */\n CanvasTileLayerRenderer.prototype.updateUsedTiles = function (usedTiles, tileSource, tile) {\n // FIXME should we use tilesToDrawByZ instead?\n var tileSourceKey = getUid(tileSource);\n if (!(tileSourceKey in usedTiles)) {\n usedTiles[tileSourceKey] = {};\n }\n usedTiles[tileSourceKey][tile.getKey()] = true;\n };\n /**\n * Manage tile pyramid.\n * This function performs a number of functions related to the tiles at the\n * current zoom and lower zoom levels:\n * - registers idle tiles in frameState.wantedTiles so that they are not\n * discarded by the tile queue\n * - enqueues missing tiles\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {import(\"../../source/Tile.js\").default} tileSource Tile source.\n * @param {import(\"../../tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../../proj/Projection.js\").default} projection Projection.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @param {number} currentZ Current Z.\n * @param {number} preload Load low resolution tiles up to 'preload' levels.\n * @param {function(import(\"../../Tile.js\").default)=} opt_tileCallback Tile callback.\n * @protected\n */\n CanvasTileLayerRenderer.prototype.manageTilePyramid = function (frameState, tileSource, tileGrid, pixelRatio, projection, extent, currentZ, preload, opt_tileCallback) {\n var tileSourceKey = getUid(tileSource);\n if (!(tileSourceKey in frameState.wantedTiles)) {\n frameState.wantedTiles[tileSourceKey] = {};\n }\n var wantedTiles = frameState.wantedTiles[tileSourceKey];\n var tileQueue = frameState.tileQueue;\n var minZoom = tileGrid.getMinZoom();\n var tileCount = 0;\n var tile, tileRange, tileResolution, x, y, z;\n for (z = minZoom; z <= currentZ; ++z) {\n tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z, tileRange);\n tileResolution = tileGrid.getResolution(z);\n for (x = tileRange.minX; x <= tileRange.maxX; ++x) {\n for (y = tileRange.minY; y <= tileRange.maxY; ++y) {\n if (currentZ - z <= preload) {\n ++tileCount;\n tile = tileSource.getTile(z, x, y, pixelRatio, projection);\n if (tile.getState() == TileState.IDLE) {\n wantedTiles[tile.getKey()] = true;\n if (!tileQueue.isKeyQueued(tile.getKey())) {\n tileQueue.enqueue([\n tile,\n tileSourceKey,\n tileGrid.getTileCoordCenter(tile.tileCoord),\n tileResolution,\n ]);\n }\n }\n if (opt_tileCallback !== undefined) {\n opt_tileCallback(tile);\n }\n }\n else {\n tileSource.useTile(z, x, y, projection);\n }\n }\n }\n }\n tileSource.updateCacheSize(tileCount, projection);\n };\n return CanvasTileLayerRenderer;\n}(CanvasLayerRenderer));\n/**\n * @function\n * @return {import(\"../../layer/Tile.js\").default|import(\"../../layer/VectorTile.js\").default}\n */\nCanvasTileLayerRenderer.prototype.getLayer;\nexport default CanvasTileLayerRenderer;\n//# sourceMappingURL=TileLayer.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/Tile\n */\nimport BaseTileLayer from './BaseTile.js';\nimport CanvasTileLayerRenderer from '../renderer/canvas/TileLayer.js';\n/**\n * @classdesc\n * For layer sources that provide pre-rendered, tiled images in grids that are\n * organized by zoom levels for specific resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @api\n */\nvar TileLayer = /** @class */ (function (_super) {\n __extends(TileLayer, _super);\n /**\n * @param {import(\"./BaseTile.js\").Options=} opt_options Tile layer options.\n */\n function TileLayer(opt_options) {\n return _super.call(this, opt_options) || this;\n }\n /**\n * Create a renderer for this layer.\n * @return {import(\"../renderer/Layer.js\").default} A layer renderer.\n * @protected\n */\n TileLayer.prototype.createRenderer = function () {\n return new CanvasTileLayerRenderer(this);\n };\n return TileLayer;\n}(BaseTileLayer));\nexport default TileLayer;\n//# sourceMappingURL=Tile.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/reproj/Image\n */\nimport { ERROR_THRESHOLD } from './common.js';\nimport EventType from '../events/EventType.js';\nimport ImageBase from '../ImageBase.js';\nimport ImageState from '../ImageState.js';\nimport Triangulation from './Triangulation.js';\nimport { calculateSourceResolution, render as renderReprojected, } from '../reproj.js';\nimport { getCenter, getHeight, getIntersection, getWidth } from '../extent.js';\nimport { listen, unlistenByKey } from '../events.js';\n/**\n * @typedef {function(import(\"../extent.js\").Extent, number, number) : import(\"../ImageBase.js\").default} FunctionType\n */\n/**\n * @classdesc\n * Class encapsulating single reprojected image.\n * See {@link module:ol/source/Image~ImageSource}.\n */\nvar ReprojImage = /** @class */ (function (_super) {\n __extends(ReprojImage, _super);\n /**\n * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection (of the data).\n * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"../extent.js\").Extent} targetExtent Target extent.\n * @param {number} targetResolution Target resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {FunctionType} getImageFunction\n * Function returning source images (extent, resolution, pixelRatio).\n * @param {object=} opt_contextOptions Properties to set on the canvas context.\n */\n function ReprojImage(sourceProj, targetProj, targetExtent, targetResolution, pixelRatio, getImageFunction, opt_contextOptions) {\n var _this = this;\n var maxSourceExtent = sourceProj.getExtent();\n var maxTargetExtent = targetProj.getExtent();\n var limitedTargetExtent = maxTargetExtent\n ? getIntersection(targetExtent, maxTargetExtent)\n : targetExtent;\n var targetCenter = getCenter(limitedTargetExtent);\n var sourceResolution = calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution);\n var errorThresholdInPixels = ERROR_THRESHOLD;\n var triangulation = new Triangulation(sourceProj, targetProj, limitedTargetExtent, maxSourceExtent, sourceResolution * errorThresholdInPixels, targetResolution);\n var sourceExtent = triangulation.calculateSourceExtent();\n var sourceImage = getImageFunction(sourceExtent, sourceResolution, pixelRatio);\n var state = sourceImage ? ImageState.IDLE : ImageState.EMPTY;\n var sourcePixelRatio = sourceImage ? sourceImage.getPixelRatio() : 1;\n _this = _super.call(this, targetExtent, targetResolution, sourcePixelRatio, state) || this;\n /**\n * @private\n * @type {import(\"../proj/Projection.js\").default}\n */\n _this.targetProj_ = targetProj;\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n _this.maxSourceExtent_ = maxSourceExtent;\n /**\n * @private\n * @type {!import(\"./Triangulation.js\").default}\n */\n _this.triangulation_ = triangulation;\n /**\n * @private\n * @type {number}\n */\n _this.targetResolution_ = targetResolution;\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n _this.targetExtent_ = targetExtent;\n /**\n * @private\n * @type {import(\"../ImageBase.js\").default}\n */\n _this.sourceImage_ = sourceImage;\n /**\n * @private\n * @type {number}\n */\n _this.sourcePixelRatio_ = sourcePixelRatio;\n /**\n * @private\n * @type {object}\n */\n _this.contextOptions_ = opt_contextOptions;\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n _this.canvas_ = null;\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n _this.sourceListenerKey_ = null;\n return _this;\n }\n /**\n * Clean up.\n */\n ReprojImage.prototype.disposeInternal = function () {\n if (this.state == ImageState.LOADING) {\n this.unlistenSource_();\n }\n _super.prototype.disposeInternal.call(this);\n };\n /**\n * @return {HTMLCanvasElement} Image.\n */\n ReprojImage.prototype.getImage = function () {\n return this.canvas_;\n };\n /**\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n ReprojImage.prototype.getProjection = function () {\n return this.targetProj_;\n };\n /**\n * @private\n */\n ReprojImage.prototype.reproject_ = function () {\n var sourceState = this.sourceImage_.getState();\n if (sourceState == ImageState.LOADED) {\n var width = getWidth(this.targetExtent_) / this.targetResolution_;\n var height = getHeight(this.targetExtent_) / this.targetResolution_;\n this.canvas_ = renderReprojected(width, height, this.sourcePixelRatio_, this.sourceImage_.getResolution(), this.maxSourceExtent_, this.targetResolution_, this.targetExtent_, this.triangulation_, [\n {\n extent: this.sourceImage_.getExtent(),\n image: this.sourceImage_.getImage(),\n },\n ], 0, undefined, this.contextOptions_);\n }\n this.state = sourceState;\n this.changed();\n };\n /**\n * Load not yet loaded URI.\n */\n ReprojImage.prototype.load = function () {\n if (this.state == ImageState.IDLE) {\n this.state = ImageState.LOADING;\n this.changed();\n var sourceState = this.sourceImage_.getState();\n if (sourceState == ImageState.LOADED || sourceState == ImageState.ERROR) {\n this.reproject_();\n }\n else {\n this.sourceListenerKey_ = listen(this.sourceImage_, EventType.CHANGE, function (e) {\n var sourceState = this.sourceImage_.getState();\n if (sourceState == ImageState.LOADED ||\n sourceState == ImageState.ERROR) {\n this.unlistenSource_();\n this.reproject_();\n }\n }, this);\n this.sourceImage_.load();\n }\n }\n };\n /**\n * @private\n */\n ReprojImage.prototype.unlistenSource_ = function () {\n unlistenByKey(\n /** @type {!import(\"../events.js\").EventsKey} */ (this.sourceListenerKey_));\n this.sourceListenerKey_ = null;\n };\n return ReprojImage;\n}(ImageBase));\nexport default ReprojImage;\n//# sourceMappingURL=Image.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/source/Image\n */\nimport Event from '../events/Event.js';\nimport ImageState from '../ImageState.js';\nimport ReprojImage from '../reproj/Image.js';\nimport Source from './Source.js';\nimport { ENABLE_RASTER_REPROJECTION } from '../reproj/common.js';\nimport { IMAGE_SMOOTHING_DISABLED } from './common.js';\nimport { abstract } from '../util.js';\nimport { equals } from '../extent.js';\nimport { equivalent } from '../proj.js';\nimport { linearFindNearest } from '../array.js';\n/**\n * @enum {string}\n */\nexport var ImageSourceEventType = {\n /**\n * Triggered when an image starts loading.\n * @event module:ol/source/Image.ImageSourceEvent#imageloadstart\n * @api\n */\n IMAGELOADSTART: 'imageloadstart',\n /**\n * Triggered when an image finishes loading.\n * @event module:ol/source/Image.ImageSourceEvent#imageloadend\n * @api\n */\n IMAGELOADEND: 'imageloadend',\n /**\n * Triggered if image loading results in an error.\n * @event module:ol/source/Image.ImageSourceEvent#imageloaderror\n * @api\n */\n IMAGELOADERROR: 'imageloaderror',\n};\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Image~ImageSource} instances are instances of this\n * type.\n */\nvar ImageSourceEvent = /** @class */ (function (_super) {\n __extends(ImageSourceEvent, _super);\n /**\n * @param {string} type Type.\n * @param {import(\"../Image.js\").default} image The image.\n */\n function ImageSourceEvent(type, image) {\n var _this = _super.call(this, type) || this;\n /**\n * The image related to the event.\n * @type {import(\"../Image.js\").default}\n * @api\n */\n _this.image = image;\n return _this;\n }\n return ImageSourceEvent;\n}(Event));\nexport { ImageSourceEvent };\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions]\n * @property {boolean} [imageSmoothing=true] Enable image smoothing.\n * @property {import(\"../proj.js\").ProjectionLike} [projection]\n * @property {Array<number>} [resolutions]\n * @property {import(\"./State.js\").default} [state]\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for sources providing a single image.\n * @abstract\n * @fires module:ol/source/Image.ImageSourceEvent\n * @api\n */\nvar ImageSource = /** @class */ (function (_super) {\n __extends(ImageSource, _super);\n /**\n * @param {Options} options Single image source options.\n */\n function ImageSource(options) {\n var _this = _super.call(this, {\n attributions: options.attributions,\n projection: options.projection,\n state: options.state,\n }) || this;\n /**\n * @private\n * @type {Array<number>}\n */\n _this.resolutions_ =\n options.resolutions !== undefined ? options.resolutions : null;\n /**\n * @private\n * @type {import(\"../reproj/Image.js\").default}\n */\n _this.reprojectedImage_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.reprojectedRevision_ = 0;\n /**\n * @private\n * @type {object|undefined}\n */\n _this.contextOptions_ =\n options.imageSmoothing === false ? IMAGE_SMOOTHING_DISABLED : undefined;\n return _this;\n }\n /**\n * @return {Array<number>} Resolutions.\n */\n ImageSource.prototype.getResolutions = function () {\n return this.resolutions_;\n };\n /**\n * @return {Object|undefined} Context options.\n */\n ImageSource.prototype.getContextOptions = function () {\n return this.contextOptions_;\n };\n /**\n * @protected\n * @param {number} resolution Resolution.\n * @return {number} Resolution.\n */\n ImageSource.prototype.findNearestResolution = function (resolution) {\n if (this.resolutions_) {\n var idx = linearFindNearest(this.resolutions_, resolution, 0);\n resolution = this.resolutions_[idx];\n }\n return resolution;\n };\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {import(\"../ImageBase.js\").default} Single image.\n */\n ImageSource.prototype.getImage = function (extent, resolution, pixelRatio, projection) {\n var sourceProjection = this.getProjection();\n if (!ENABLE_RASTER_REPROJECTION ||\n !sourceProjection ||\n !projection ||\n equivalent(sourceProjection, projection)) {\n if (sourceProjection) {\n projection = sourceProjection;\n }\n return this.getImageInternal(extent, resolution, pixelRatio, projection);\n }\n else {\n if (this.reprojectedImage_) {\n if (this.reprojectedRevision_ == this.getRevision() &&\n equivalent(this.reprojectedImage_.getProjection(), projection) &&\n this.reprojectedImage_.getResolution() == resolution &&\n equals(this.reprojectedImage_.getExtent(), extent)) {\n return this.reprojectedImage_;\n }\n this.reprojectedImage_.dispose();\n this.reprojectedImage_ = null;\n }\n this.reprojectedImage_ = new ReprojImage(sourceProjection, projection, extent, resolution, pixelRatio, function (extent, resolution, pixelRatio) {\n return this.getImageInternal(extent, resolution, pixelRatio, sourceProjection);\n }.bind(this), this.contextOptions_);\n this.reprojectedRevision_ = this.getRevision();\n return this.reprojectedImage_;\n }\n };\n /**\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {import(\"../ImageBase.js\").default} Single image.\n * @protected\n */\n ImageSource.prototype.getImageInternal = function (extent, resolution, pixelRatio, projection) {\n return abstract();\n };\n /**\n * Handle image change events.\n * @param {import(\"../events/Event.js\").default} event Event.\n * @protected\n */\n ImageSource.prototype.handleImageChange = function (event) {\n var image = /** @type {import(\"../Image.js\").default} */ (event.target);\n switch (image.getState()) {\n case ImageState.LOADING:\n this.loading = true;\n this.dispatchEvent(new ImageSourceEvent(ImageSourceEventType.IMAGELOADSTART, image));\n break;\n case ImageState.LOADED:\n this.loading = false;\n this.dispatchEvent(new ImageSourceEvent(ImageSourceEventType.IMAGELOADEND, image));\n break;\n case ImageState.ERROR:\n this.loading = false;\n this.dispatchEvent(new ImageSourceEvent(ImageSourceEventType.IMAGELOADERROR, image));\n break;\n default:\n // pass\n }\n };\n return ImageSource;\n}(Source));\n/**\n * Default image load function for image sources that use import(\"../Image.js\").Image image\n * instances.\n * @param {import(\"../Image.js\").default} image Image.\n * @param {string} src Source.\n */\nexport function defaultImageLoadFunction(image, src) {\n /** @type {HTMLImageElement|HTMLVideoElement} */ (image.getImage()).src = src;\n}\nexport default ImageSource;\n//# sourceMappingURL=Image.js.map","/**\n * @module ol/source/ImageArcGISRest\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport EventType from '../events/EventType.js';\nimport ImageSource, { defaultImageLoadFunction } from './Image.js';\nimport ImageWrapper from '../Image.js';\nimport { appendParams } from '../uri.js';\nimport { assert } from '../asserts.js';\nimport { assign } from '../obj.js';\nimport { containsExtent, getHeight, getWidth } from '../extent.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [hidpi=true] Use the `ol/Map#pixelRatio` value when requesting the image from\n * the remote server.\n * @property {import(\"../Image.js\").LoadFunction} [imageLoadFunction] Optional function to load an image given\n * a URL.\n * @property {boolean} [imageSmoothing=true] Enable image smoothing.\n * @property {Object<string,*>} [params] ArcGIS Rest parameters. This field is optional. Service\n * defaults will be used for any fields not specified. `FORMAT` is `PNG32` by default. `F` is\n * `IMAGE` by default. `TRANSPARENT` is `true` by default. `BBOX`, `SIZE`, `BBOXSR`, and `IMAGESR`\n * will be set dynamically. Set `LAYERS` to override the default service layer visibility. See\n * {@link http://resources.arcgis.com/en/help/arcgis-rest-api/index.html#/Export_Map/02r3000000v7000000/}\n * for further reference.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {number} [ratio=1.5] Ratio. `1` means image requests are the size of the map viewport,\n * `2` means twice the size of the map viewport, and so on.\n * @property {Array<number>} [resolutions] Resolutions. If specified, requests will be made for\n * these resolutions only.\n * @property {string} [url] ArcGIS Rest service URL for a Map Service or Image Service. The url\n * should include /MapServer or /ImageServer.\n */\n/**\n * @classdesc\n * Source for data from ArcGIS Rest services providing single, untiled images.\n * Useful when underlying map service has labels.\n *\n * If underlying map service is not using labels,\n * take advantage of ol image caching and use\n * {@link module:ol/source/TileArcGISRest} data source.\n *\n * @fires module:ol/source/Image.ImageSourceEvent\n * @api\n */\nvar ImageArcGISRest = /** @class */ (function (_super) {\n __extends(ImageArcGISRest, _super);\n /**\n * @param {Options=} opt_options Image ArcGIS Rest Options.\n */\n function ImageArcGISRest(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n attributions: options.attributions,\n imageSmoothing: options.imageSmoothing,\n projection: options.projection,\n resolutions: options.resolutions,\n }) || this;\n /**\n * @private\n * @type {?string}\n */\n _this.crossOrigin_ =\n options.crossOrigin !== undefined ? options.crossOrigin : null;\n /**\n * @private\n * @type {boolean}\n */\n _this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;\n /**\n * @private\n * @type {string|undefined}\n */\n _this.url_ = options.url;\n /**\n * @private\n * @type {import(\"../Image.js\").LoadFunction}\n */\n _this.imageLoadFunction_ =\n options.imageLoadFunction !== undefined\n ? options.imageLoadFunction\n : defaultImageLoadFunction;\n /**\n * @private\n * @type {!Object}\n */\n _this.params_ = options.params || {};\n /**\n * @private\n * @type {import(\"../Image.js\").default}\n */\n _this.image_ = null;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n _this.imageSize_ = [0, 0];\n /**\n * @private\n * @type {number}\n */\n _this.renderedRevision_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.ratio_ = options.ratio !== undefined ? options.ratio : 1.5;\n return _this;\n }\n /**\n * Get the user-provided params, i.e. those passed to the constructor through\n * the \"params\" option, and possibly updated using the updateParams method.\n * @return {Object} Params.\n * @api\n */\n ImageArcGISRest.prototype.getParams = function () {\n return this.params_;\n };\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @return {import(\"../Image.js\").default} Single image.\n */\n ImageArcGISRest.prototype.getImageInternal = function (extent, resolution, pixelRatio, projection) {\n if (this.url_ === undefined) {\n return null;\n }\n resolution = this.findNearestResolution(resolution);\n pixelRatio = this.hidpi_ ? pixelRatio : 1;\n var image = this.image_;\n if (image &&\n this.renderedRevision_ == this.getRevision() &&\n image.getResolution() == resolution &&\n image.getPixelRatio() == pixelRatio &&\n containsExtent(image.getExtent(), extent)) {\n return image;\n }\n var params = {\n 'F': 'image',\n 'FORMAT': 'PNG32',\n 'TRANSPARENT': true,\n };\n assign(params, this.params_);\n extent = extent.slice();\n var centerX = (extent[0] + extent[2]) / 2;\n var centerY = (extent[1] + extent[3]) / 2;\n if (this.ratio_ != 1) {\n var halfWidth = (this.ratio_ * getWidth(extent)) / 2;\n var halfHeight = (this.ratio_ * getHeight(extent)) / 2;\n extent[0] = centerX - halfWidth;\n extent[1] = centerY - halfHeight;\n extent[2] = centerX + halfWidth;\n extent[3] = centerY + halfHeight;\n }\n var imageResolution = resolution / pixelRatio;\n // Compute an integer width and height.\n var width = Math.ceil(getWidth(extent) / imageResolution);\n var height = Math.ceil(getHeight(extent) / imageResolution);\n // Modify the extent to match the integer width and height.\n extent[0] = centerX - (imageResolution * width) / 2;\n extent[2] = centerX + (imageResolution * width) / 2;\n extent[1] = centerY - (imageResolution * height) / 2;\n extent[3] = centerY + (imageResolution * height) / 2;\n this.imageSize_[0] = width;\n this.imageSize_[1] = height;\n var url = this.getRequestUrl_(extent, this.imageSize_, pixelRatio, projection, params);\n this.image_ = new ImageWrapper(extent, resolution, pixelRatio, url, this.crossOrigin_, this.imageLoadFunction_);\n this.renderedRevision_ = this.getRevision();\n this.image_.addEventListener(EventType.CHANGE, this.handleImageChange.bind(this));\n return this.image_;\n };\n /**\n * Return the image load function of the source.\n * @return {import(\"../Image.js\").LoadFunction} The image load function.\n * @api\n */\n ImageArcGISRest.prototype.getImageLoadFunction = function () {\n return this.imageLoadFunction_;\n };\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {import(\"../size.js\").Size} size Size.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @param {Object} params Params.\n * @return {string} Request URL.\n * @private\n */\n ImageArcGISRest.prototype.getRequestUrl_ = function (extent, size, pixelRatio, projection, params) {\n // ArcGIS Server only wants the numeric portion of the projection ID.\n var srid = projection.getCode().split(':').pop();\n params['SIZE'] = size[0] + ',' + size[1];\n params['BBOX'] = extent.join(',');\n params['BBOXSR'] = srid;\n params['IMAGESR'] = srid;\n params['DPI'] = Math.round(90 * pixelRatio);\n var url = this.url_;\n var modifiedUrl = url\n .replace(/MapServer\\/?$/, 'MapServer/export')\n .replace(/ImageServer\\/?$/, 'ImageServer/exportImage');\n if (modifiedUrl == url) {\n assert(false, 50); // `options.featureTypes` should be an Array\n }\n return appendParams(modifiedUrl, params);\n };\n /**\n * Return the URL used for this ArcGIS source.\n * @return {string|undefined} URL.\n * @api\n */\n ImageArcGISRest.prototype.getUrl = function () {\n return this.url_;\n };\n /**\n * Set the image load function of the source.\n * @param {import(\"../Image.js\").LoadFunction} imageLoadFunction Image load function.\n * @api\n */\n ImageArcGISRest.prototype.setImageLoadFunction = function (imageLoadFunction) {\n this.image_ = null;\n this.imageLoadFunction_ = imageLoadFunction;\n this.changed();\n };\n /**\n * Set the URL to use for requests.\n * @param {string|undefined} url URL.\n * @api\n */\n ImageArcGISRest.prototype.setUrl = function (url) {\n if (url != this.url_) {\n this.url_ = url;\n this.image_ = null;\n this.changed();\n }\n };\n /**\n * Update the user-provided params.\n * @param {Object} params Params.\n * @api\n */\n ImageArcGISRest.prototype.updateParams = function (params) {\n assign(this.params_, params);\n this.image_ = null;\n this.changed();\n };\n return ImageArcGISRest;\n}(ImageSource));\nexport default ImageArcGISRest;\n//# sourceMappingURL=ImageArcGISRest.js.map","/**\n * @module ol/uri\n */\n/**\n * Appends query parameters to a URI.\n *\n * @param {string} uri The original URI, which may already have query data.\n * @param {!Object} params An object where keys are URI-encoded parameter keys,\n * and the values are arbitrary types or arrays.\n * @return {string} The new URI.\n */\nexport function appendParams(uri, params) {\n var keyParams = [];\n // Skip any null or undefined parameter values\n Object.keys(params).forEach(function (k) {\n if (params[k] !== null && params[k] !== undefined) {\n keyParams.push(k + '=' + encodeURIComponent(params[k]));\n }\n });\n var qs = keyParams.join('&');\n // remove any trailing ? or &\n uri = uri.replace(/[?&]$/, '');\n // append ? or & depending on whether uri has existing parameters\n uri = uri.indexOf('?') === -1 ? uri + '?' : uri + '&';\n return uri + qs;\n}\n//# sourceMappingURL=uri.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/BaseImage\n */\nimport Layer from './Layer.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"../PluggableMap.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link module:ol/Map#addLayer}.\n * @property {import(\"../source/Image.js\").default} [source] Source for this layer.\n */\n/**\n * @classdesc\n * Server-rendered images that are available for arbitrary extents and\n * resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @extends {Layer<import(\"../source/Image.js\").default>}\n * @api\n */\nvar BaseImageLayer = /** @class */ (function (_super) {\n __extends(BaseImageLayer, _super);\n /**\n * @param {Options=} opt_options Layer options.\n */\n function BaseImageLayer(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, options) || this;\n return _this;\n }\n return BaseImageLayer;\n}(Layer));\nexport default BaseImageLayer;\n//# sourceMappingURL=BaseImage.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/canvas/ImageLayer\n */\nimport CanvasLayerRenderer from './Layer.js';\nimport ViewHint from '../../ViewHint.js';\nimport { ENABLE_RASTER_REPROJECTION } from '../../reproj/common.js';\nimport { assign } from '../../obj.js';\nimport { compose as composeTransform, makeInverse } from '../../transform.js';\nimport { containsExtent, intersects } from '../../extent.js';\nimport { createTransformString } from '../../render/canvas.js';\nimport { fromUserExtent } from '../../proj.js';\nimport { getIntersection, isEmpty } from '../../extent.js';\n/**\n * @classdesc\n * Canvas renderer for image layers.\n * @api\n */\nvar CanvasImageLayerRenderer = /** @class */ (function (_super) {\n __extends(CanvasImageLayerRenderer, _super);\n /**\n * @param {import(\"../../layer/Image.js\").default} imageLayer Image layer.\n */\n function CanvasImageLayerRenderer(imageLayer) {\n var _this = _super.call(this, imageLayer) || this;\n /**\n * @protected\n * @type {?import(\"../../ImageBase.js\").default}\n */\n _this.image_ = null;\n return _this;\n }\n /**\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n */\n CanvasImageLayerRenderer.prototype.getImage = function () {\n return !this.image_ ? null : this.image_.getImage();\n };\n /**\n * Determine whether render should be called.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n */\n CanvasImageLayerRenderer.prototype.prepareFrame = function (frameState) {\n var layerState = frameState.layerStatesArray[frameState.layerIndex];\n var pixelRatio = frameState.pixelRatio;\n var viewState = frameState.viewState;\n var viewResolution = viewState.resolution;\n var imageSource = this.getLayer().getSource();\n var hints = frameState.viewHints;\n var renderedExtent = frameState.extent;\n if (layerState.extent !== undefined) {\n renderedExtent = getIntersection(renderedExtent, fromUserExtent(layerState.extent, viewState.projection));\n }\n if (!hints[ViewHint.ANIMATING] &&\n !hints[ViewHint.INTERACTING] &&\n !isEmpty(renderedExtent)) {\n if (imageSource) {\n var projection = viewState.projection;\n if (!ENABLE_RASTER_REPROJECTION) {\n var sourceProjection = imageSource.getProjection();\n if (sourceProjection) {\n projection = sourceProjection;\n }\n }\n var image = imageSource.getImage(renderedExtent, viewResolution, pixelRatio, projection);\n if (image && this.loadImage(image)) {\n this.image_ = image;\n }\n }\n else {\n this.image_ = null;\n }\n }\n return !!this.image_;\n };\n /**\n * Render the layer.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target that may be used to render content to.\n * @return {HTMLElement} The rendered element.\n */\n CanvasImageLayerRenderer.prototype.renderFrame = function (frameState, target) {\n var image = this.image_;\n var imageExtent = image.getExtent();\n var imageResolution = image.getResolution();\n var imagePixelRatio = image.getPixelRatio();\n var layerState = frameState.layerStatesArray[frameState.layerIndex];\n var pixelRatio = frameState.pixelRatio;\n var viewState = frameState.viewState;\n var viewCenter = viewState.center;\n var viewResolution = viewState.resolution;\n var size = frameState.size;\n var scale = (pixelRatio * imageResolution) / (viewResolution * imagePixelRatio);\n var width = Math.round(size[0] * pixelRatio);\n var height = Math.round(size[1] * pixelRatio);\n var rotation = viewState.rotation;\n if (rotation) {\n var size_1 = Math.round(Math.sqrt(width * width + height * height));\n width = size_1;\n height = size_1;\n }\n // set forward and inverse pixel transforms\n composeTransform(this.pixelTransform, frameState.size[0] / 2, frameState.size[1] / 2, 1 / pixelRatio, 1 / pixelRatio, rotation, -width / 2, -height / 2);\n makeInverse(this.inversePixelTransform, this.pixelTransform);\n var canvasTransform = createTransformString(this.pixelTransform);\n this.useContainer(target, canvasTransform, layerState.opacity);\n var context = this.context;\n var canvas = context.canvas;\n if (canvas.width != width || canvas.height != height) {\n canvas.width = width;\n canvas.height = height;\n }\n else if (!this.containerReused) {\n context.clearRect(0, 0, width, height);\n }\n // clipped rendering if layer extent is set\n var clipped = false;\n if (layerState.extent) {\n var layerExtent = fromUserExtent(layerState.extent, viewState.projection);\n clipped =\n !containsExtent(layerExtent, frameState.extent) &&\n intersects(layerExtent, frameState.extent);\n if (clipped) {\n this.clipUnrotated(context, frameState, layerExtent);\n }\n }\n var img = image.getImage();\n var transform = composeTransform(this.tempTransform, width / 2, height / 2, scale, scale, 0, (imagePixelRatio * (imageExtent[0] - viewCenter[0])) / imageResolution, (imagePixelRatio * (viewCenter[1] - imageExtent[3])) / imageResolution);\n this.renderedResolution = (imageResolution * pixelRatio) / imagePixelRatio;\n var dx = transform[4];\n var dy = transform[5];\n var dw = img.width * transform[0];\n var dh = img.height * transform[3];\n assign(context, this.getLayer().getSource().getContextOptions());\n this.preRender(context, frameState);\n if (dw >= 0.5 && dh >= 0.5) {\n var opacity = layerState.opacity;\n var previousAlpha = void 0;\n if (opacity !== 1) {\n previousAlpha = this.context.globalAlpha;\n this.context.globalAlpha = opacity;\n }\n this.context.drawImage(img, 0, 0, +img.width, +img.height, Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh));\n if (opacity !== 1) {\n this.context.globalAlpha = previousAlpha;\n }\n }\n this.postRender(context, frameState);\n if (clipped) {\n context.restore();\n }\n if (canvasTransform !== canvas.style.transform) {\n canvas.style.transform = canvasTransform;\n }\n return this.container;\n };\n return CanvasImageLayerRenderer;\n}(CanvasLayerRenderer));\nexport default CanvasImageLayerRenderer;\n//# sourceMappingURL=ImageLayer.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/Image\n */\nimport BaseImageLayer from './BaseImage.js';\nimport CanvasImageLayerRenderer from '../renderer/canvas/ImageLayer.js';\n/**\n * @classdesc\n * Server-rendered images that are available for arbitrary extents and\n * resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @api\n */\nvar ImageLayer = /** @class */ (function (_super) {\n __extends(ImageLayer, _super);\n /**\n * @param {import(\"./BaseImage.js\").Options=} opt_options Layer options.\n */\n function ImageLayer(opt_options) {\n return _super.call(this, opt_options) || this;\n }\n /**\n * Create a renderer for this layer.\n * @return {import(\"../renderer/Layer.js\").default} A layer renderer.\n */\n ImageLayer.prototype.createRenderer = function () {\n return new CanvasImageLayerRenderer(this);\n };\n return ImageLayer;\n}(BaseImageLayer));\nexport default ImageLayer;\n//# sourceMappingURL=Image.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { merge, extend, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query, Predicate } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Adaptors are specific data source type aware interfaces that are used by DataManager to communicate with DataSource.\n * This is the base adaptor class that other adaptors can extend.\n * @hidden\n */\nvar Adaptor = /** @class */ (function () {\n /**\n * Constructor for Adaptor class\n * @param {DataOptions} ds?\n * @hidden\n * @returns aggregates\n */\n function Adaptor(ds) {\n // common options for all the adaptors \n this.options = {\n from: 'table',\n requestType: 'json',\n sortBy: 'sorted',\n select: 'select',\n skip: 'skip',\n group: 'group',\n take: 'take',\n search: 'search',\n count: 'requiresCounts',\n where: 'where',\n aggregates: 'aggregates',\n expand: 'expand'\n };\n /**\n * Specifies the type of adaptor.\n * @default Adaptor\n */\n this.type = Adaptor;\n this.dataSource = ds;\n this.pvt = {};\n }\n /**\n * Returns the data from the query processing.\n * @param {Object} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @returns Object\n */\n Adaptor.prototype.processResponse = function (data, ds, query, xhr) {\n return data;\n };\n return Adaptor;\n}());\nexport { Adaptor };\n/**\n * JsonAdaptor is used to process JSON data. It contains methods to process the given JSON data based on the queries.\n * @hidden\n */\nvar JsonAdaptor = /** @class */ (function (_super) {\n __extends(JsonAdaptor, _super);\n function JsonAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the JSON data based on the provided queries.\n * @param {DataManager} dataManager\n * @param {Query} query\n * @returns Object\n */\n JsonAdaptor.prototype.processQuery = function (dataManager, query) {\n var result = dataManager.dataSource.json.slice(0);\n var count = result.length;\n var countFlg = true;\n var ret;\n var key;\n var lazyLoad = {};\n var keyCount = 0;\n var group = [];\n var page;\n for (var i = 0; i < query.lazyLoad.length; i++) {\n keyCount++;\n lazyLoad[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n }\n var agg = {};\n for (var i = 0; i < query.queries.length; i++) {\n key = query.queries[i];\n if ((key.fn === 'onPage' || key.fn === 'onGroup') && query.lazyLoad.length) {\n if (key.fn === 'onGroup') {\n group.push(key.e);\n }\n if (key.fn === 'onPage') {\n page = key.e;\n }\n continue;\n }\n ret = this[key.fn].call(this, result, key.e, query);\n if (key.fn === 'onAggregates') {\n agg[key.e.field + ' - ' + key.e.type] = ret;\n }\n else {\n result = ret !== undefined ? ret : result;\n }\n if (key.fn === 'onPage' || key.fn === 'onSkip' || key.fn === 'onTake' || key.fn === 'onRange') {\n countFlg = false;\n }\n if (countFlg) {\n count = result.length;\n }\n }\n if (keyCount) {\n var args = {\n query: query, lazyLoad: lazyLoad, result: result, group: group, page: page\n };\n var lazyLoadData = this.lazyLoadGroup(args);\n result = lazyLoadData.result;\n count = lazyLoadData.count;\n }\n if (query.isCountRequired) {\n result = {\n result: result,\n count: count,\n aggregates: agg\n };\n }\n return result;\n };\n /**\n * Perform lazy load grouping in JSON array based on the given query and lazy load details.\n * @param {LazyLoadGroupArgs} args\n */\n JsonAdaptor.prototype.lazyLoadGroup = function (args) {\n var count = 0;\n var agg = this.getAggregate(args.query);\n var result = args.result;\n if (!isNullOrUndefined(args.lazyLoad.onDemandGroupInfo)) {\n var req = args.lazyLoad.onDemandGroupInfo;\n for (var i = req.where.length - 1; i >= 0; i--) {\n result = this.onWhere(result, req.where[i]);\n }\n if (args.group.length !== req.level) {\n var field = args.group[req.level].fieldName;\n result = DataUtil.group(result, field, agg, null, null, args.group[0].comparer, true);\n }\n count = result.length;\n var data = result;\n result = result.slice(req.skip);\n result = result.slice(0, req.take);\n if (args.group.length !== req.level) {\n this.formGroupResult(result, data);\n }\n }\n else {\n var field = args.group[0].fieldName;\n result = DataUtil.group(result, field, agg, null, null, args.group[0].comparer, true);\n count = result.length;\n var data = result;\n if (args.page) {\n result = this.onPage(result, args.page, args.query);\n }\n this.formGroupResult(result, data);\n }\n return { result: result, count: count };\n };\n JsonAdaptor.prototype.formGroupResult = function (result, data) {\n if (result.length && data.length) {\n var uid = 'GroupGuid';\n var childLevel = 'childLevels';\n var level = 'level';\n var records = 'records';\n result[uid] = data[uid];\n result[childLevel] = data[childLevel];\n result[level] = data[level];\n result[records] = data[records];\n }\n return result;\n };\n /**\n * Separate the aggregate query from the given queries\n * @param {Query} query\n */\n JsonAdaptor.prototype.getAggregate = function (query) {\n var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n var agg = [];\n if (aggQuery.length) {\n var tmp = void 0;\n for (var i = 0; i < aggQuery.length; i++) {\n tmp = aggQuery[i].e;\n agg.push({ type: tmp.type, field: DataUtil.getValue(tmp.field, query) });\n }\n }\n return agg;\n };\n /**\n * Performs batch update in the JSON array which add, remove and update records.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n JsonAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var i;\n var deletedRecordsLen = changes.deletedRecords.length;\n for (i = 0; i < changes.addedRecords.length; i++) {\n this.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n this.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < deletedRecordsLen; i++) {\n this.remove(dm, e.key, changes.deletedRecords[i]);\n }\n return changes;\n };\n /**\n * Performs filter operation with the given data and where query.\n * @param {Object[]} ds\n * @param {{validate:Function}} e\n */\n JsonAdaptor.prototype.onWhere = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.filter(function (obj) {\n if (e) {\n return e.validate(obj);\n }\n });\n };\n /**\n * Returns aggregate function based on the aggregate type.\n * @param {Object[]} ds\n * @param {{field:string} e\n * @param {string}} type\n */\n JsonAdaptor.prototype.onAggregates = function (ds, e) {\n var fn = DataUtil.aggregates[e.type];\n if (!ds || !fn || ds.length === 0) {\n return null;\n }\n return fn(ds, e.field);\n };\n /**\n * Performs search operation based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n */\n JsonAdaptor.prototype.onSearch = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n if (e.fieldNames.length === 0) {\n DataUtil.getFieldList(ds[0], e.fieldNames);\n }\n return ds.filter(function (obj) {\n for (var j = 0; j < e.fieldNames.length; j++) {\n if (e.comparer.call(obj, DataUtil.getObject(e.fieldNames[j], obj), e.searchKey, e.ignoreCase, e.ignoreAccent)) {\n return true;\n }\n }\n return false;\n });\n };\n /**\n * Sort the data with given direction and field.\n * @param {Object[]} ds\n * @param {{comparer:(a:Object} e\n * @param {Object} b\n */\n JsonAdaptor.prototype.onSortBy = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var fnCompare;\n var field = DataUtil.getValue(e.fieldName, query);\n if (!field) {\n return ds.sort(e.comparer);\n }\n if (field instanceof Array) {\n field = field.slice(0);\n for (var i = field.length - 1; i >= 0; i--) {\n if (!field[i]) {\n continue;\n }\n fnCompare = e.comparer;\n if (DataUtil.endsWith(field[i], ' desc')) {\n fnCompare = DataUtil.fnSort('descending');\n field[i] = field[i].replace(' desc', '');\n }\n ds = DataUtil.sort(ds, field[i], fnCompare);\n }\n return ds;\n }\n return DataUtil.sort(ds, field, e.comparer);\n };\n /**\n * Group the data based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n * @param {Query} query\n */\n JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var agg = this.getAggregate(query);\n return DataUtil.group(ds, DataUtil.getValue(e.fieldName, query), agg, null, null, e.comparer);\n };\n /**\n * Retrieves records based on the given page index and size.\n * @param {Object[]} ds\n * @param {{pageSize:number} e\n * @param {number}} pageIndex\n * @param {Query} query\n */\n JsonAdaptor.prototype.onPage = function (ds, e, query) {\n var size = DataUtil.getValue(e.pageSize, query);\n var start = (DataUtil.getValue(e.pageIndex, query) - 1) * size;\n var end = start + size;\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(start, end);\n };\n /**\n * Retrieves records based on the given start and end index from query.\n * @param {Object[]} ds\n * @param {{start:number} e\n * @param {number}} end\n */\n JsonAdaptor.prototype.onRange = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.start), DataUtil.getValue(e.end));\n };\n /**\n * Picks the given count of records from the top of the datasource.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onTake = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(0, DataUtil.getValue(e.nos));\n };\n /**\n * Skips the given count of records from the data source.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onSkip = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.nos));\n };\n /**\n * Selects specified columns from the data source.\n * @param {Object[]} ds\n * @param {{fieldNames:string}} e\n */\n JsonAdaptor.prototype.onSelect = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n };\n /**\n * Inserts new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {number} position\n */\n JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n if (isNullOrUndefined(position)) {\n return dm.dataSource.json.push(data);\n }\n else {\n return dm.dataSource.json.splice(position, 0, data);\n }\n };\n /**\n * Remove the data from the dataSource based on the key field value.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n if (typeof value === 'object' && !(value instanceof Date)) {\n value = DataUtil.getObject(keyField, value);\n }\n for (i = 0; i < ds.length; i++) {\n if (DataUtil.getObject(keyField, ds[i]) === value) {\n break;\n }\n }\n return i !== ds.length ? ds.splice(i, 1) : null;\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n var key;\n if (!isNullOrUndefined(keyField)) {\n key = getValue(keyField, value);\n }\n for (i = 0; i < ds.length; i++) {\n if (!isNullOrUndefined(keyField) && (getValue(keyField, ds[i])) === key) {\n break;\n }\n }\n return i < ds.length ? merge(ds[i], value) : null;\n };\n return JsonAdaptor;\n}(Adaptor));\nexport { JsonAdaptor };\n/**\n * URL Adaptor of DataManager can be used when you are required to use remote service to retrieve data.\n * It interacts with server-side for all DataManager Queries and CRUD operations.\n * @hidden\n */\nvar UrlAdaptor = /** @class */ (function (_super) {\n __extends(UrlAdaptor, _super);\n function UrlAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the query to generate request body.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns p\n */\n // tslint:disable-next-line:max-func-body-length\n UrlAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var params = query.params;\n var url = dm.dataSource.url;\n var temp;\n var skip;\n var take = null;\n var options = this.options;\n var request = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n // calc Paging & Range\n if ('onPage' in singles) {\n temp = singles.onPage;\n skip = DataUtil.getValue(temp.pageIndex, query);\n take = DataUtil.getValue(temp.pageSize, query);\n skip = (skip - 1) * take;\n }\n else if ('onRange' in singles) {\n temp = singles.onRange;\n skip = temp.start;\n take = temp.end - temp.start;\n }\n // Sorting\n for (var i = 0; i < queries.sorts.length; i++) {\n temp = DataUtil.getValue(queries.sorts[i].e.fieldName, query);\n request.sorts.push(DataUtil.callAdaptorFunction(this, 'onEachSort', { name: temp, direction: queries.sorts[i].e.direction }, query));\n }\n // hierarchy\n if (hierarchyFilters) {\n temp = this.getFiltersFrom(hierarchyFilters, query);\n if (temp) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n }\n }\n // Filters\n for (var i = 0; i < queries.filters.length; i++) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query));\n var keys_3 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n for (var _i = 0, keys_1 = keys_3; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (DataUtil.isNull((request)[prop])) {\n delete request[prop];\n }\n }\n }\n // Searches\n for (var i = 0; i < queries.searches.length; i++) {\n temp = queries.searches[i].e;\n request.searches.push(DataUtil.callAdaptorFunction(this, 'onEachSearch', {\n fields: temp.fieldNames,\n operator: temp.operator,\n key: temp.searchKey,\n ignoreCase: temp.ignoreCase\n }, query));\n }\n // Grouping\n for (var i = 0; i < queries.groups.length; i++) {\n request.groups.push(DataUtil.getValue(queries.groups[i].e.fieldName, query));\n }\n // aggregates\n for (var i = 0; i < queries.aggregates.length; i++) {\n temp = queries.aggregates[i].e;\n request.aggregates.push({ type: temp.type, field: DataUtil.getValue(temp.field, query) });\n }\n var req = {};\n this.getRequestQuery(options, query, singles, request, req);\n // Params\n DataUtil.callAdaptorFunction(this, 'addParams', { dm: dm, query: query, params: params, reqParams: req });\n if (query.lazyLoad.length) {\n for (var i = 0; i < query.lazyLoad.length; i++) {\n req[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n }\n }\n // cleanup\n var keys = Object.keys(req);\n for (var _a = 0, keys_2 = keys; _a < keys_2.length; _a++) {\n var prop = keys_2[_a];\n if (DataUtil.isNull(req[prop]) || req[prop] === '' || req[prop].length === 0) {\n delete req[prop];\n }\n }\n if (!(options.skip in req && options.take in req) && take !== null) {\n req[options.skip] = DataUtil.callAdaptorFunction(this, 'onSkip', skip, query);\n req[options.take] = DataUtil.callAdaptorFunction(this, 'onTake', take, query);\n }\n var p = this.pvt;\n this.pvt = {};\n if (this.options.requestType === 'json') {\n return {\n data: JSON.stringify(req, DataUtil.parse.jsonDateReplacer),\n url: url,\n pvtData: p,\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n }\n temp = this.convertToQueryString(req, query, dm);\n temp = (dm.dataSource.url.indexOf('?') !== -1 ? '&' : '/') + temp;\n return {\n type: 'GET', url: temp.length ? url.replace(/\\/*$/, temp) : url, pvtData: p\n };\n };\n UrlAdaptor.prototype.getRequestQuery = function (options, query, singles, request, request1) {\n var param = 'param';\n var req = request1;\n req[options.from] = query.fromTable;\n if (options.apply && query.distincts.length) {\n req[options.apply] = 'onDistinct' in this ? DataUtil.callAdaptorFunction(this, 'onDistinct', query.distincts) : '';\n }\n if (!query.distincts.length && options.expand) {\n req[options.expand] = 'onExpand' in this && 'onSelect' in singles ?\n DataUtil.callAdaptorFunction(this, 'onExpand', { selects: DataUtil.getValue(singles.onSelect.fieldNames, query), expands: query.expands }, query) : query.expands;\n }\n req[options.select] = 'onSelect' in singles && !query.distincts.length ?\n DataUtil.callAdaptorFunction(this, 'onSelect', DataUtil.getValue(singles.onSelect.fieldNames, query), query) : '';\n req[options.count] = query.isCountRequired ? DataUtil.callAdaptorFunction(this, 'onCount', query.isCountRequired, query) : '';\n req[options.search] = request.searches.length ? DataUtil.callAdaptorFunction(this, 'onSearch', request.searches, query) : '';\n req[options.skip] = 'onSkip' in singles ?\n DataUtil.callAdaptorFunction(this, 'onSkip', DataUtil.getValue(singles.onSkip.nos, query), query) : '';\n req[options.take] = 'onTake' in singles ?\n DataUtil.callAdaptorFunction(this, 'onTake', DataUtil.getValue(singles.onTake.nos, query), query) : '';\n req[options.where] = request.filters.length || request.searches.length ?\n DataUtil.callAdaptorFunction(this, 'onWhere', request.filters, query) : '';\n req[options.sortBy] = request.sorts.length ? DataUtil.callAdaptorFunction(this, 'onSortBy', request.sorts, query) : '';\n req[options.group] = request.groups.length ? DataUtil.callAdaptorFunction(this, 'onGroup', request.groups, query) : '';\n req[options.aggregates] = request.aggregates.length ?\n DataUtil.callAdaptorFunction(this, 'onAggregates', request.aggregates, query) : '';\n req[param] = [];\n };\n /**\n * Convert the object from processQuery to string which can be added query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n */\n UrlAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n return '';\n // this needs to be overridden\n };\n /**\n * Return the data from the data manager processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Object} request?\n * @param {CrudOptions} changes?\n */\n UrlAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') &&\n xhr.getResponseHeader('Content-Type').indexOf('application/json') !== -1) {\n var handleTimeZone = DataUtil.timeZoneHandling;\n if (ds && !ds.timeZoneHandling) {\n DataUtil.timeZoneHandling = false;\n }\n data = DataUtil.parse.parseJson(data);\n DataUtil.timeZoneHandling = handleTimeZone;\n }\n var requests = request;\n var pvt = requests.pvtData || {};\n var groupDs = data ? data.groupDs : [];\n if (xhr && xhr.getResponseHeader('Content-Type') &&\n xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n var d = JSON.parse(requests.data);\n if (d && d.action === 'batch' && data && data.addedRecords) {\n changes.addedRecords = data.addedRecords;\n return changes;\n }\n if (data && data.d) {\n data = data.d;\n }\n var args = {};\n if (data && 'count' in data) {\n args.count = data.count;\n }\n args.result = data && data.result ? data.result : data;\n var isExpand = false;\n if (Array.isArray(data.result) && data.result.length) {\n var key = 'key';\n var val = 'value';\n var level = 'level';\n if (!isNullOrUndefined(data.result[0][key])) {\n args.result = this.formRemoteGroupedData(args.result, 1, pvt.groups.length - 1);\n }\n if (query && query.lazyLoad.length && pvt.groups.length) {\n for (var i = 0; i < query.lazyLoad.length; i++) {\n if (query.lazyLoad[i][key] === 'onDemandGroupInfo') {\n var value = query.lazyLoad[i][val][level];\n if (pvt.groups.length === value) {\n isExpand = true;\n }\n }\n }\n }\n }\n if (!isExpand) {\n this.getAggregateResult(pvt, data, args, groupDs, query);\n }\n return DataUtil.isNull(args.count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n UrlAdaptor.prototype.formRemoteGroupedData = function (data, level, childLevel) {\n for (var i = 0; i < data.length; i++) {\n if (data[i].items.length && Object.keys(data[i].items[0]).indexOf('key') > -1) {\n this.formRemoteGroupedData(data[i].items, level + 1, childLevel - 1);\n }\n }\n var uid = 'GroupGuid';\n var childLvl = 'childLevels';\n var lvl = 'level';\n var records = 'records';\n data[uid] = consts[uid];\n data[lvl] = level;\n data[childLvl] = childLevel;\n data[records] = data[0].items.length ? this.getGroupedRecords(data, !isNullOrUndefined(data[0].items[records])) : [];\n return data;\n };\n UrlAdaptor.prototype.getGroupedRecords = function (data, hasRecords) {\n var childGroupedRecords = [];\n var records = 'records';\n for (var i = 0; i < data.length; i++) {\n if (!hasRecords) {\n for (var j = 0; j < data[i].items.length; j++) {\n childGroupedRecords.push(data[i].items[j]);\n }\n }\n else {\n childGroupedRecords = childGroupedRecords.concat(data[i].items[records]);\n }\n }\n return childGroupedRecords;\n };\n /**\n * Add the group query to the adaptor`s option.\n * @param {Object[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return e;\n };\n /**\n * Add the aggregate query to the adaptor`s option.\n * @param {Aggregates[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n */\n UrlAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var url;\n var key;\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.removeUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify(extend({}, {\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e[url],\n key: e[key]\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @returns void\n */\n UrlAdaptor.prototype.beforeSend = function (dm, request) {\n // need to extend this method\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName\n */\n UrlAdaptor.prototype.insert = function (dm, data, tableName, query) {\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: data,\n table: tableName,\n action: 'insert'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number|string} value\n * @param {string} tableName\n */\n UrlAdaptor.prototype.remove = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n UrlAdaptor.prototype.update = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: DataUtil.getObject(keyField, value),\n table: tableName\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * To generate the predicate based on the filtered query.\n * @param {Object[]|string[]|number[]} data\n * @param {Query} query\n * @hidden\n */\n UrlAdaptor.prototype.getFiltersFrom = function (data, query) {\n var key = query.fKey;\n var value;\n var prop = key;\n var pKey = query.key;\n var predicats = [];\n if (typeof data[0] !== 'object') {\n prop = null;\n }\n for (var i = 0; i < data.length; i++) {\n if (typeof data[0] === 'object') {\n value = DataUtil.getObject(pKey || prop, data[i]);\n }\n else {\n value = data[i];\n }\n predicats.push(new Predicate(key, 'equal', value));\n }\n return Predicate.or(predicats);\n };\n UrlAdaptor.prototype.getAggregateResult = function (pvt, data, args, groupDs, query) {\n var pData = data;\n if (data && data.result) {\n pData = data.result;\n }\n if (pvt && pvt.aggregates && pvt.aggregates.length) {\n var agg = pvt.aggregates;\n var fn = void 0;\n var aggregateData = pData;\n var res = {};\n if (data.aggregate) {\n aggregateData = data.aggregate;\n }\n for (var i = 0; i < agg.length; i++) {\n fn = DataUtil.aggregates[agg[i].type];\n if (fn) {\n res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n }\n }\n args.aggregates = res;\n }\n var key = 'key';\n var isServerGrouping = Array.isArray(data.result) && data.result.length && !isNullOrUndefined(data.result[0][key]);\n if (pvt && pvt.groups && pvt.groups.length && !isServerGrouping) {\n var groups = pvt.groups;\n for (var i = 0; i < groups.length; i++) {\n var level = null;\n if (!isNullOrUndefined(groupDs)) {\n groupDs = DataUtil.group(groupDs, groups[i]);\n }\n var groupQuery = Query.filterQueries(query.queries, 'onGroup')[i].e;\n pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs, groupQuery.comparer);\n }\n args.result = pData;\n }\n return args;\n };\n UrlAdaptor.prototype.getQueryRequest = function (query) {\n var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n req.sorts = Query.filterQueries(query.queries, 'onSortBy');\n req.groups = Query.filterQueries(query.queries, 'onGroup');\n req.filters = Query.filterQueries(query.queries, 'onWhere');\n req.searches = Query.filterQueries(query.queries, 'onSearch');\n req.aggregates = Query.filterQueries(query.queries, 'onAggregates');\n return req;\n };\n UrlAdaptor.prototype.addParams = function (options) {\n var req = options.reqParams;\n if (options.params.length) {\n req.params = {};\n }\n for (var _i = 0, _a = options.params; _i < _a.length; _i++) {\n var tmp = _a[_i];\n if (req[tmp.key]) {\n throw new Error('Query() - addParams: Custom Param is conflicting other request arguments');\n }\n req[tmp.key] = tmp.value;\n if (tmp.fn) {\n req[tmp.key] = tmp.fn.call(options.query, tmp.key, options.query, options.dm);\n }\n req.params[tmp.key] = req[tmp.key];\n }\n };\n return UrlAdaptor;\n}(Adaptor));\nexport { UrlAdaptor };\n/**\n * OData Adaptor that is extended from URL Adaptor, is used for consuming data through OData Service.\n * @hidden\n */\nvar ODataAdaptor = /** @class */ (function (_super) {\n __extends(ODataAdaptor, _super);\n function ODataAdaptor(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json;odata=light;q=1,application/json;odata=verbose;q=0.5',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$inlinecount',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PUT'\n });\n extend(_this.options, props || {});\n return _this;\n }\n ODataAdaptor.prototype.getModuleName = function () {\n return 'ODataAdaptor';\n };\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var operator;\n var guid;\n var val = predicate.value;\n var type = typeof val;\n var field = predicate.field ? ODataAdaptor.getField(predicate.field) : null;\n if (val instanceof Date) {\n val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n }\n if (type === 'string') {\n val = encodeURIComponent(val);\n val = '\\'' + val + '\\'';\n if (requiresCast) {\n field = 'cast(' + field + ', \\'Edm.String\\')';\n }\n if (DataUtil.parse.isGuid(val)) {\n guid = 'guid';\n }\n if (predicate.ignoreCase) {\n if (!guid) {\n field = 'tolower(' + field + ')';\n }\n val = val.toLowerCase();\n }\n }\n operator = DataUtil.odBiOperator[predicate.operator];\n if (operator) {\n returnValue += field;\n returnValue += operator;\n if (guid) {\n returnValue += guid;\n }\n return returnValue + val;\n }\n if (!isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor') {\n operator = DataUtil.odv4UniOperator[predicate.operator];\n }\n else {\n operator = DataUtil.odUniOperator[predicate.operator];\n }\n if (operator === 'substringof') {\n var temp = val;\n val = field;\n field = temp;\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += val + ')';\n return returnValue;\n };\n ODataAdaptor.prototype.addParams = function (options) {\n _super.prototype.addParams.call(this, options);\n delete options.reqParams.params;\n };\n /**\n * Generate request string based on the multiple filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n var res = [];\n for (var i = 0; i < predicate.predicates.length; i++) {\n res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n }\n return res.join(' ' + predicate.condition + ' ');\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {Predicate} filter\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onEachWhere = function (filter, query, requiresCast) {\n return filter.isComplex ? this.onComplexPredicate(filter, query, requiresCast) : this.onPredicate(filter, query, requiresCast);\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {string[]} filters\n */\n ODataAdaptor.prototype.onWhere = function (filters) {\n if (this.pvt.search) {\n filters.push(this.onEachWhere(this.pvt.search, null, true));\n }\n return filters.join(' and ');\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataAdaptor.prototype.onEachSearch = function (e) {\n if (e.fields && e.fields.length === 0) {\n DataUtil.throwError('Query() - Search : oData search requires list of field names to search');\n }\n var filter = this.pvt.search || [];\n for (var i = 0; i < e.fields.length; i++) {\n filter.push(new Predicate(e.fields[i], e.operator, e.key, e.ignoreCase));\n }\n this.pvt.search = filter;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataAdaptor.prototype.onSearch = function (e) {\n this.pvt.search = Predicate.or(this.pvt.search);\n return '';\n };\n /**\n * Generate query string based on multiple sort criteria from query.\n * @param {QueryOptions} e\n */\n ODataAdaptor.prototype.onEachSort = function (e) {\n var res = [];\n if (e.name instanceof Array) {\n for (var i = 0; i < e.name.length; i++) {\n res.push(ODataAdaptor.getField(e.name[i]) + (e.direction === 'descending' ? ' desc' : ''));\n }\n }\n else {\n res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n }\n return res.join(',');\n };\n /**\n * Returns sort query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSortBy = function (e) {\n return e.reverse().join(',');\n };\n /**\n * Adds the group query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return [];\n };\n /**\n * Returns the select query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSelect = function (e) {\n for (var i = 0; i < e.length; i++) {\n e[i] = ODataAdaptor.getField(e[i]);\n }\n return e.join(',');\n };\n /**\n * Add the aggregate query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n return '';\n };\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataAdaptor.prototype.onCount = function (e) {\n return e === true ? 'allpages' : '';\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n ODataAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.options.multipartAccept);\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.overrideMimeType('text/plain; charset=x-user-defined');\n }\n else {\n request.setRequestHeader('Accept', this.options.accept);\n }\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.setRequestHeader('MaxDataServiceVersion', '2.0');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var metaCheck = 'odata.metadata';\n if ((request && request.type === 'GET') && !this.rootUrl && data[metaCheck]) {\n var dataUrls = data[metaCheck].split('/$metadata#');\n this.rootUrl = dataUrls[0];\n this.resourceTableName = dataUrls[1];\n }\n var pvtData = 'pvtData';\n if (!isNullOrUndefined(data.d)) {\n var dataCopy = ((query && query.isCountRequired) ? data.d.results : data.d);\n var metaData = '__metadata';\n if (!isNullOrUndefined(dataCopy)) {\n for (var i = 0; i < dataCopy.length; i++) {\n if (!isNullOrUndefined(dataCopy[i][metaData])) {\n delete dataCopy[i][metaData];\n }\n }\n }\n }\n var pvt = request && request[pvtData];\n var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var count = null;\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n var oDataCount = '__count';\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n if (data.d) {\n data = data.d;\n }\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n }\n if (version === 3 && data.value) {\n data = data.value;\n }\n if (data.d) {\n data = data.d;\n }\n if (version < 3 && data.results) {\n data = data.results;\n }\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Converts the request object to query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n * @returns tableName\n */\n ODataAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n var res = [];\n var table = 'table';\n var tableName = request[table] || '';\n var format = '$format';\n delete request[table];\n if (dm.dataSource.requiresFormat) {\n request[format] = 'json';\n }\n var keys = Object.keys(request);\n for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\n var prop = keys_4[_i];\n res.push(prop + '=' + request[prop]);\n }\n res = res.join('&');\n if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n return res;\n }\n return res.length ? tableName + '?' + res : tableName || '';\n };\n ODataAdaptor.prototype.localTimeReplacer = function (key, convertObj) {\n for (var _i = 0, _a = !isNullOrUndefined(convertObj) ? Object.keys(convertObj) : []; _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((convertObj[prop] instanceof Date)) {\n convertObj[prop] = DataUtil.dateParse.toLocalTime(convertObj[prop]);\n }\n }\n return convertObj;\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: (dm.dataSource.insertUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : ''),\n data: JSON.stringify(data, this.options.localTime ? this.localTimeReplacer : null)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var url;\n if (typeof value === 'string' && !DataUtil.parse.isGuid(value)) {\n url = \"('\" + value + \"')\";\n }\n else {\n url = \"(\" + value + \")\";\n }\n return {\n type: 'DELETE',\n url: (dm.dataSource.removeUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : '') + url\n };\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns this\n */\n ODataAdaptor.prototype.update = function (dm, keyField, value, tableName, query, original) {\n if (this.options.updateType === 'PATCH' && !isNullOrUndefined(original)) {\n value = this.compareAndRemove(value, original, keyField);\n }\n var url;\n if (typeof value[keyField] === 'string' && !DataUtil.parse.isGuid(value[keyField])) {\n url = \"('\" + value[keyField] + \"')\";\n }\n else {\n url = \"(\" + value[keyField] + \")\";\n }\n return {\n type: this.options.updateType,\n url: (dm.dataSource.updateUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : '') + url,\n data: JSON.stringify(value, this.options.localTime ? this.localTimeReplacer : null),\n accept: this.options.accept\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @returns {Object}\n */\n ODataAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = this.rootUrl ? this.rootUrl + '/' + this.options.batch :\n dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n e.url = this.resourceTableName ? this.resourceTableName : e.url;\n var args = {\n url: e.url,\n key: e.key,\n cid: 1,\n cSet: DataUtil.getGuid(this.options.changeSet)\n };\n var req = '--' + initialGuid + '\\n';\n req += 'Content-Type: multipart/mixed; boundary=' + args.cSet.replace('--', '') + '\\n';\n this.pvt.changeSet = 0;\n req += this.generateInsertRequest(changes.addedRecords, args, dm);\n req += this.generateUpdateRequest(changes.changedRecords, args, dm, original ? original.changedRecords : []);\n req += this.generateDeleteRequest(changes.deletedRecords, args, dm);\n req += args.cSet + '--\\n';\n req += '--' + initialGuid + '--';\n return {\n type: 'POST',\n url: url,\n dataType: 'json',\n contentType: 'multipart/mixed; charset=UTF-8;boundary=' + initialGuid,\n data: req\n };\n };\n /**\n * Generate the string content from the removed records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @returns this\n */\n ODataAdaptor.prototype.generateDeleteRequest = function (arr, e, dm) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'DELETE ',\n 'url': function (data, i, key) {\n var url = DataUtil.getObject(key, data[i]);\n if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n return '(' + url + ')';\n }\n else if (url instanceof Date) {\n var dateTime = data[i][key];\n return '(' + dateTime.toJSON() + ')';\n }\n else {\n return \"('\" + url + \"')\";\n }\n },\n 'data': function (data, i) { return ''; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req + '\\n';\n };\n /**\n * Generate the string content from the inserted records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n */\n ODataAdaptor.prototype.generateInsertRequest = function (arr, e, dm) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req;\n };\n /**\n * Generate the string content from the updated records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n */\n ODataAdaptor.prototype.generateUpdateRequest = function (arr, e, dm, org) {\n var _this = this;\n if (!arr) {\n return '';\n }\n var req = '';\n arr.forEach(function (change) { return change = _this.compareAndRemove(change, org.filter(function (o) { return DataUtil.getObject(e.key, o) === DataUtil.getObject(e.key, change); })[0], e.key); });\n var stat = {\n 'method': this.options.updateType + ' ',\n 'url': function (data, i, key) {\n if (typeof data[i][key] === 'number' || DataUtil.parse.isGuid(data[i][key])) {\n return '(' + data[i][key] + ')';\n }\n else if (data[i][key] instanceof Date) {\n var date = data[i][key];\n return '(' + date.toJSON() + ')';\n }\n else {\n return \"('\" + data[i][key] + \"')\";\n }\n },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req;\n };\n ODataAdaptor.getField = function (prop) {\n return prop.replace(/\\./g, '/');\n };\n ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat, dm) {\n var req = '';\n for (var i = 0; i < arr.length; i++) {\n req += '\\n' + e.cSet + '\\n';\n req += this.options.changeSetContent + '\\n\\n';\n req += stat.method;\n if (stat.method === 'POST ') {\n req += (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n else if (stat.method === 'PUT ' || stat.method === 'PATCH ') {\n req += (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n else if (stat.method === 'DELETE ') {\n req += (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n req += 'Accept: ' + this.options.accept + '\\n';\n req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n req += this.options.batchChangeSetContentType + '\\n';\n if (!isNullOrUndefined(arr[i]['@odata.etag'])) {\n req += 'If-Match: ' + arr[i]['@odata.etag'] + '\\n\\n';\n delete arr[i]['@odata.etag'];\n }\n else {\n req += '\\n';\n }\n req += stat.data(arr, i);\n }\n return req;\n };\n ODataAdaptor.prototype.processBatchResponse = function (data, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n if (request && this.options.batch && DataUtil.endsWith(request.url, this.options.batch) && request.type.toLowerCase() === 'post') {\n var guid = xhr.getResponseHeader('Content-Type');\n var cIdx = void 0;\n var jsonObj = void 0;\n var d = data + '';\n guid = guid.substring(guid.indexOf('=batchresponse') + 1);\n d = d.split(guid);\n if (d.length < 2) {\n return {};\n }\n d = d[1];\n var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n if (exVal) {\n d.replace(exVal[0], '');\n }\n var changeGuid = exVal ? exVal[1] : '';\n d = d.split(changeGuid);\n for (var i = d.length; i > -1; i--) {\n if (!/\\bContent-ID:/i.test(d[i]) || !/\\bHTTP.+201/.test(d[i])) {\n continue;\n }\n cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n if (changes.addedRecords[cIdx]) {\n jsonObj = DataUtil.parse.parseJson(/^\\{.+\\}/m.exec(d[i])[0]);\n extend({}, changes.addedRecords[cIdx], this.processResponse(jsonObj));\n }\n }\n return changes;\n }\n return null;\n };\n ODataAdaptor.prototype.compareAndRemove = function (data, original, key) {\n var _this = this;\n if (isNullOrUndefined(original)) {\n return data;\n }\n Object.keys(data).forEach(function (prop) {\n if (prop !== key && prop !== '@odata.etag') {\n if (DataUtil.isPlainObject(data[prop])) {\n _this.compareAndRemove(data[prop], original[prop]);\n var final = Object.keys(data[prop]).filter(function (data) { return data !== '@odata.etag'; });\n if (final.length === 0) {\n delete data[prop];\n }\n }\n else if (data[prop] === original[prop]) {\n delete data[prop];\n }\n else if (data[prop] && original[prop] && data[prop].valueOf() === original[prop].valueOf()) {\n delete data[prop];\n }\n }\n });\n return data;\n };\n return ODataAdaptor;\n}(UrlAdaptor));\nexport { ODataAdaptor };\n/**\n * The OData v4 is an improved version of OData protocols.\n * The DataManager uses the ODataV4Adaptor to consume OData v4 services.\n * @hidden\n */\nvar ODataV4Adaptor = /** @class */ (function (_super) {\n __extends(ODataV4Adaptor, _super);\n function ODataV4Adaptor(props) {\n var _this = _super.call(this, props) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json, text/javascript, */*; q=0.01',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$count',\n search: '$search',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PATCH',\n localTime: false,\n apply: '$apply'\n });\n extend(_this.options, props || {});\n return _this;\n }\n /**\n * @hidden\n */\n ODataV4Adaptor.prototype.getModuleName = function () {\n return 'ODataV4Adaptor';\n };\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataV4Adaptor.prototype.onCount = function (e) {\n return e === true ? 'true' : '';\n };\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var val = predicate.value;\n var isDate = val instanceof Date;\n if (query instanceof Query) {\n var queries = this.getQueryRequest(query);\n for (var i = 0; i < queries.filters.length; i++) {\n if (queries.filters[i].e.key === predicate.value) {\n requiresCast = true;\n }\n }\n }\n returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n if (isDate) {\n returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n }\n if (DataUtil.parse.isGuid(val)) {\n returnValue = returnValue.replace('guid', '').replace(/'/g, '');\n }\n return returnValue;\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataV4Adaptor.prototype.onEachSearch = function (e) {\n var search = this.pvt.searches || [];\n search.push(e.key);\n this.pvt.searches = search;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataV4Adaptor.prototype.onSearch = function (e) {\n return this.pvt.searches.join(' OR ');\n };\n /**\n * Returns the expand query string.\n * @param {string} e\n */\n ODataV4Adaptor.prototype.onExpand = function (e) {\n var _this = this;\n var selected = {};\n var expanded = {};\n var expands = e.expands.slice();\n var exArr = [];\n var selects = e.selects.filter(function (item) { return item.indexOf('.') > -1; });\n selects.forEach(function (select) {\n var splits = select.split('.');\n if (!(splits[0] in selected)) {\n selected[splits[0]] = [];\n }\n selected[splits[0]].push(splits[1]);\n });\n //Auto expand from select query\n Object.keys(selected).forEach(function (expand) {\n if ((expands.indexOf(expand) === -1)) {\n expands.push(expand);\n }\n });\n expands.forEach(function (expand) {\n expanded[expand] = expand in selected ? expand + \"(\" + _this.options.select + \"=\" + selected[expand].join(',') + \")\" : expand;\n });\n Object.keys(expanded).forEach(function (ex) { return exArr.push(expanded[ex]); });\n return exArr.join(',');\n };\n /**\n * Returns the groupby query string.\n * @param {string} e\n */\n ODataV4Adaptor.prototype.onDistinct = function (distinctFields) {\n var fields = distinctFields.map(function (field) { return ODataAdaptor.getField(field); }).join(',');\n return \"groupby((\" + fields + \"))\";\n };\n /**\n * Returns the select query string.\n * @param {string[]} e\n */\n ODataV4Adaptor.prototype.onSelect = function (e) {\n return _super.prototype.onSelect.call(this, e.filter(function (item) { return item.indexOf('.') === -1; }));\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n ODataV4Adaptor.prototype.beforeSend = function (dm, request, settings) {\n if (settings.type === 'POST' || settings.type === 'PUT' || settings.type === 'PATCH') {\n request.setRequestHeader('Prefer', 'return=representation');\n }\n request.setRequestHeader('Accept', this.options.accept);\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var metaName = '@odata.context';\n if ((request && request.type === 'GET') && !this.rootUrl && data[metaName]) {\n var dataUrl = data[metaName].split('/$metadata#');\n this.rootUrl = dataUrl[0];\n this.resourceTableName = dataUrl[1];\n }\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var count = null;\n var dataCount = '@odata.count';\n if (query && query.isCountRequired) {\n if (dataCount in data) {\n count = data[dataCount];\n }\n }\n data = !isNullOrUndefined(data.value) ? data.value : data;\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: count, aggregates: args.aggregates };\n };\n return ODataV4Adaptor;\n}(ODataAdaptor));\nexport { ODataV4Adaptor };\n/**\n * The Web API is a programmatic interface to define the request and response messages system that is mostly exposed in JSON or XML.\n * The DataManager uses the WebApiAdaptor to consume Web API.\n * Since this adaptor is targeted to interact with Web API created using OData endpoint, it is extended from ODataAdaptor\n * @hidden\n */\nvar WebApiAdaptor = /** @class */ (function (_super) {\n __extends(WebApiAdaptor, _super);\n function WebApiAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n WebApiAdaptor.prototype.getModuleName = function () {\n return 'WebApiAdaptor';\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.url,\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url + '/' + value,\n data: JSON.stringify(value)\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url,\n data: JSON.stringify(value)\n };\n };\n WebApiAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var _this = this;\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n e.url = this.resourceTableName ? this.resourceTableName : e.url;\n var req = [];\n var _loop_1 = function (i, x) {\n changes.addedRecords.forEach(function (j, d) {\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('POST ' + '/api/' + (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url)\n + stat.url(changes.addedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //insertion\n for (var i = 0, x = changes.addedRecords.length; i < x; i++) {\n _loop_1(i, x);\n }\n var _loop_2 = function (i, x) {\n changes.changedRecords.forEach(function (j, d) {\n var stat = {\n 'method': _this.options.updateType + ' ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('PUT ' + '/api/' + (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url)\n + stat.url(changes.changedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //updation \n for (var i = 0, x = changes.changedRecords.length; i < x; i++) {\n _loop_2(i, x);\n }\n var _loop_3 = function (i, x) {\n changes.deletedRecords.forEach(function (j, d) {\n var state = {\n 'mtd': 'DELETE ',\n 'url': function (data, i, key) {\n var url = DataUtil.getObject(key, data[i]);\n if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n return '/' + url;\n }\n else if (url instanceof Date) {\n var datTime = data[i][key];\n return '/' + datTime.toJSON();\n }\n else {\n return \"/'\" + url + \"'\";\n }\n },\n 'data': function (data, i) { return ''; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('DELETE ' + '/api/' + (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url)\n + state.url(changes.deletedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //deletion\n for (var i = 0, x = changes.deletedRecords.length; i < x; i++) {\n _loop_3(i, x);\n }\n req.push('--' + initialGuid + '--', '');\n return {\n type: 'POST',\n url: url,\n contentType: 'multipart/mixed; boundary=' + initialGuid,\n data: req.join('\\r\\n')\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n WebApiAdaptor.prototype.beforeSend = function (dm, request, settings) {\n request.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n WebApiAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var count = null;\n var args = {};\n if (request && request.type.toLowerCase() !== 'post') {\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n if (!DataUtil.isNull(data.Count)) {\n count = data.Count;\n }\n }\n if (version < 3 && data.Items) {\n data = data.Items;\n }\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n }\n args.result = args.result || data;\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n return WebApiAdaptor;\n}(ODataAdaptor));\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n * @hidden\n */\nvar WebMethodAdaptor = /** @class */ (function (_super) {\n __extends(WebMethodAdaptor, _super);\n function WebMethodAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare the request body based on the query.\n * The query information can be accessed at the WebMethod using variable named `value`.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns application\n */\n WebMethodAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var obj = new UrlAdaptor().processQuery(dm, query, hierarchyFilters);\n var getData = 'data';\n var data = DataUtil.parse.parseJson(obj[getData]);\n var result = {};\n var value = 'value';\n if (data.param) {\n for (var i = 0; i < data.param.length; i++) {\n var param = data.param[i];\n var key = Object.keys(param)[0];\n result[key] = param[key];\n }\n }\n result[value] = data;\n var pvtData = 'pvtData';\n var url = 'url';\n return {\n data: JSON.stringify(result),\n url: obj[url],\n pvtData: obj[pvtData],\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n };\n return WebMethodAdaptor;\n}(UrlAdaptor));\nexport { WebMethodAdaptor };\n/**\n * RemoteSaveAdaptor, extended from JsonAdaptor and it is used for binding local data and performs all DataManager queries in client-side.\n * It interacts with server-side only for CRUD operations.\n * @hidden\n */\nvar RemoteSaveAdaptor = /** @class */ (function (_super) {\n __extends(RemoteSaveAdaptor, _super);\n /**\n * @hidden\n */\n function RemoteSaveAdaptor() {\n var _this = _super.call(this) || this;\n setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n return _this;\n }\n RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n this.pvt.position = position;\n this.updateType = 'add';\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: data,\n table: tableName,\n action: 'insert'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.remove = function (dm, keyField, val, tableName, query) {\n _super.prototype.remove.call(this, dm, keyField, val);\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n key: val,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.update = function (dm, keyField, val, tableName, query) {\n this.updateType = 'update';\n this.updateKey = keyField;\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: val,\n action: 'update',\n keyColumn: keyField,\n key: val[keyField],\n table: tableName\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes, e) {\n var i;\n data = request ? JSON.parse(request.data) : data;\n if (this.updateType === 'add') {\n _super.prototype.insert.call(this, ds, data, null, null, this.pvt.position);\n }\n if (this.updateType === 'update') {\n _super.prototype.update.call(this, ds, this.updateKey, data);\n }\n this.updateType = undefined;\n if (data.added) {\n for (i = 0; i < data.added.length; i++) {\n _super.prototype.insert.call(this, ds, data.added[i]);\n }\n }\n if (data.changed) {\n for (i = 0; i < data.changed.length; i++) {\n _super.prototype.update.call(this, ds, e.key, data.changed[i]);\n }\n }\n if (data.deleted) {\n for (i = 0; i < data.deleted.length; i++) {\n _super.prototype.remove.call(this, ds, e.key, data.deleted[i]);\n }\n }\n return data;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * Also perform the changes in the locally cached data to sync with the remote data.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n RemoteSaveAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify(extend({}, {\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e.url,\n key: e.key\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.addParams = function (options) {\n var urlParams = new UrlAdaptor();\n urlParams.addParams(options);\n };\n return RemoteSaveAdaptor;\n}(JsonAdaptor));\nexport { RemoteSaveAdaptor };\n/**\n * Ajax Adaptor that is extended from URL Adaptor, is used for handle data operations with user defined functions.\n * @hidden\n */\nvar AjaxAdaptor = /** @class */ (function (_super) {\n __extends(AjaxAdaptor, _super);\n function AjaxAdaptor(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n getData: new Function(),\n addRecord: new Function(),\n updateRecord: new Function(),\n deleteRecord: new Function(),\n batchUpdate: new Function()\n });\n extend(_this.options, props || {});\n return _this;\n }\n AjaxAdaptor.prototype.getModuleName = function () {\n return 'AjaxAdaptor';\n };\n return AjaxAdaptor;\n}(UrlAdaptor));\nexport { AjaxAdaptor };\n/**\n * Cache Adaptor is used to cache the data of the visited pages. It prevents new requests for the previously visited pages.\n * You can configure cache page size and duration of caching by using cachingPageSize and timeTillExpiration properties of the DataManager\n * @hidden\n */\nvar CacheAdaptor = /** @class */ (function (_super) {\n __extends(CacheAdaptor, _super);\n /**\n * Constructor for CacheAdaptor class.\n * @param {CacheAdaptor} adaptor?\n * @param {number} timeStamp?\n * @param {number} pageSize?\n * @hidden\n */\n function CacheAdaptor(adaptor, timeStamp, pageSize) {\n var _this = _super.call(this) || this;\n _this.isCrudAction = false;\n _this.isInsertAction = false;\n if (!isNullOrUndefined(adaptor)) {\n _this.cacheAdaptor = adaptor;\n }\n _this.pageSize = pageSize;\n _this.guidId = DataUtil.getGuid('cacheAdaptor');\n var obj = { keys: [], results: [] };\n window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n var guid = _this.guidId;\n if (!isNullOrUndefined(timeStamp)) {\n setInterval(function () {\n var data;\n data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n var forDel = [];\n for (var i = 0; i < data.results.length; i++) {\n var currentTime = +new Date();\n var requestTime = +new Date(data.results[i].timeStamp);\n data.results[i].timeStamp = currentTime - requestTime;\n if (currentTime - requestTime > timeStamp) {\n forDel.push(i);\n }\n }\n for (var i = 0; i < forDel.length; i++) {\n data.results.splice(forDel[i], 1);\n data.keys.splice(forDel[i], 1);\n }\n window.localStorage.removeItem(guid);\n window.localStorage.setItem(guid, JSON.stringify(data));\n }, timeStamp);\n }\n return _this;\n }\n /**\n * It will generate the key based on the URL when we send a request to server.\n * @param {string} url\n * @param {Query} query?\n * @hidden\n */\n CacheAdaptor.prototype.generateKey = function (url, query) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var key = url;\n var page = 'onPage';\n if (page in singles) {\n key += singles[page].pageIndex;\n }\n queries.sorts.forEach(function (obj) {\n key += obj.e.direction + obj.e.fieldName;\n });\n queries.groups.forEach(function (obj) {\n key += obj.e.fieldName;\n });\n queries.searches.forEach(function (obj) {\n key += obj.e.searchKey;\n });\n for (var filter = 0; filter < queries.filters.length; filter++) {\n var currentFilter = queries.filters[filter];\n if (currentFilter.e.isComplex) {\n var newQuery = query.clone();\n newQuery.queries = [];\n for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter });\n }\n key += currentFilter.e.condition + this.generateKey(url, newQuery);\n }\n else {\n key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n }\n }\n return key;\n };\n /**\n * Process the query to generate request body.\n * If the data is already cached, it will return the cached data.\n * @param {DataManager} dm\n * @param {Query} query?\n * @param {Object[]} hierarchyFilters?\n */\n CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var key = this.generateKey(dm.dataSource.url, query);\n var cachedItems;\n cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n if (data != null && !this.isCrudAction && !this.isInsertAction) {\n return data;\n }\n this.isCrudAction = null;\n this.isInsertAction = null;\n return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n */\n CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (this.isInsertAction || (request && this.cacheAdaptor.options.batch &&\n DataUtil.endsWith(request.url, this.cacheAdaptor.options.batch) && request.type.toLowerCase() === 'post')) {\n return this.cacheAdaptor.processResponse(data, ds, query, xhr, request, changes);\n }\n data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n var key = query ? this.generateKey(ds.dataSource.url, query) : ds.dataSource.url;\n var obj = {};\n obj = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var index = obj.keys.indexOf(key);\n if (index !== -1) {\n obj.results.splice(index, 1);\n obj.keys.splice(index, 1);\n }\n obj.results[obj.keys.push(key) - 1] = { keys: key, result: data.result, timeStamp: new Date(), count: data.count };\n while (obj.results.length > this.pageSize) {\n obj.results.splice(0, 1);\n obj.keys.splice(0, 1);\n }\n window.localStorage.setItem(this.guidId, JSON.stringify(obj));\n return data;\n };\n /**\n * Method will trigger before send the request to server side. Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (!isNullOrUndefined(this.cacheAdaptor.options.batch) && DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch)\n && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.multipartAccept);\n }\n if (!dm.dataSource.crossDomain) {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.accept);\n }\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n CacheAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.update(dm, keyField, value, tableName);\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.insert = function (dm, data, tableName) {\n this.isInsertAction = true;\n return this.cacheAdaptor.insert(dm, data, tableName);\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.remove(dm, keyField, value, tableName);\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return this.cacheAdaptor.batchRequest(dm, changes, e);\n };\n return CacheAdaptor;\n}(UrlAdaptor));\nexport { CacheAdaptor };\n","import { Ajax } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor, AjaxAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\nvar DataManager = /** @class */ (function () {\n /**\n * Constructor for DataManager class\n * @param {DataOptions|JSON[]} dataSource?\n * @param {Query} query?\n * @param {AdaptorOptions|string} adaptor?\n * @hidden\n */\n function DataManager(dataSource, query, adaptor) {\n var _this = this;\n /** @hidden */\n this.dateParse = true;\n /** @hidden */\n this.timeZoneHandling = true;\n this.requests = [];\n if (!dataSource && !this.dataSource) {\n dataSource = [];\n }\n adaptor = adaptor || dataSource.adaptor;\n if (dataSource && dataSource.timeZoneHandling === false) {\n this.timeZoneHandling = dataSource.timeZoneHandling;\n }\n var data;\n if (dataSource instanceof Array) {\n data = {\n json: dataSource,\n offline: true\n };\n }\n else if (typeof dataSource === 'object') {\n if (!dataSource.json) {\n dataSource.json = [];\n }\n data = {\n url: dataSource.url,\n insertUrl: dataSource.insertUrl,\n removeUrl: dataSource.removeUrl,\n updateUrl: dataSource.updateUrl,\n crudUrl: dataSource.crudUrl,\n batchUrl: dataSource.batchUrl,\n json: dataSource.json,\n headers: dataSource.headers,\n accept: dataSource.accept,\n data: dataSource.data,\n timeTillExpiration: dataSource.timeTillExpiration,\n cachingPageSize: dataSource.cachingPageSize,\n enableCaching: dataSource.enableCaching,\n requestType: dataSource.requestType,\n key: dataSource.key,\n crossDomain: dataSource.crossDomain,\n jsonp: dataSource.jsonp,\n dataType: dataSource.dataType,\n offline: dataSource.offline !== undefined ? dataSource.offline\n : dataSource.adaptor instanceof RemoteSaveAdaptor || dataSource.adaptor instanceof AjaxAdaptor ?\n false : dataSource.url ? false : true,\n requiresFormat: dataSource.requiresFormat\n };\n }\n else {\n DataUtil.throwError('DataManager: Invalid arguments');\n }\n if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n }\n if (data.dataType === undefined) {\n data.dataType = 'json';\n }\n this.dataSource = data;\n this.defaultQuery = query;\n if (data.url && data.offline && !data.json.length) {\n this.isDataAvailable = false;\n this.adaptor = adaptor || new ODataAdaptor();\n this.dataSource.offline = false;\n this.ready = this.executeQuery(query || new Query());\n this.ready.then(function (e) {\n _this.dataSource.offline = true;\n _this.isDataAvailable = true;\n data.json = e.result;\n _this.adaptor = new JsonAdaptor();\n });\n }\n else {\n this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n }\n if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n data.jsonp = 'callback';\n }\n this.adaptor = adaptor || this.adaptor;\n if (data.enableCaching) {\n this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n }\n return this;\n }\n /**\n * Overrides DataManager's default query with given query.\n * @param {Query} query - Defines the new default query.\n */\n DataManager.prototype.setDefaultQuery = function (query) {\n this.defaultQuery = query;\n return this;\n };\n /**\n * Executes the given query with local data source.\n * @param {Query} query - Defines the query to retrieve data.\n */\n DataManager.prototype.executeLocal = function (query) {\n if (!this.defaultQuery && !(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeLocal() : A query is required to execute');\n }\n if (!this.dataSource.json) {\n DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n }\n query = query || this.defaultQuery;\n var result = this.adaptor.processQuery(this, query);\n if (query.subQuery) {\n var from = query.subQuery.fromTable;\n var lookup = query.subQuery.lookups;\n var res = query.isCountRequired ? result.result :\n result;\n if (lookup && lookup instanceof Array) {\n DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n }\n for (var j = 0; j < res.length; j++) {\n if (res[j][from] instanceof Array) {\n res[j] = extend({}, {}, res[j]);\n res[j][from] = this.adaptor.processResponse(query.subQuery.using(new DataManager(res[j][from].slice(0))).executeLocal(), this, query);\n }\n }\n }\n return this.adaptor.processResponse(result, this, query);\n };\n /**\n * Executes the given query with either local or remote data source.\n * It will be executed as asynchronously and returns Promise object which will be resolved or rejected after action completed.\n * @param {Query|Function} query - Defines the query to retrieve data.\n * @param {Function} done - Defines the callback function and triggers when the Promise is resolved.\n * @param {Function} fail - Defines the callback function and triggers when the Promise is rejected.\n * @param {Function} always - Defines the callback function and triggers when the Promise is resolved or rejected.\n */\n DataManager.prototype.executeQuery = function (query, done, fail, always) {\n var _this = this;\n var makeRequest = 'makeRequest';\n if (typeof query === 'function') {\n always = fail;\n fail = done;\n done = query;\n query = null;\n }\n if (!query) {\n query = this.defaultQuery;\n }\n if (!(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n }\n var deffered = new Deferred();\n var args = { query: query };\n if (!this.dataSource.offline && (this.dataSource.url !== undefined && this.dataSource.url !== '')\n || (!isNullOrUndefined(this.adaptor[makeRequest])) || this.isAjaxAdaptor(this.adaptor)) {\n var result = this.adaptor.processQuery(this, query);\n if (!isNullOrUndefined(this.adaptor[makeRequest])) {\n this.adaptor[makeRequest](result, deffered, args, query);\n }\n else if (!isNullOrUndefined(result.url) || this.isAjaxAdaptor(this.adaptor)) {\n this.makeRequest(result, deffered, args, query);\n }\n else {\n args = DataManager.getDeferedArgs(query, result, args);\n deffered.resolve(args);\n }\n }\n else {\n DataManager.nextTick(function () {\n var res = _this.executeLocal(query);\n args = DataManager.getDeferedArgs(query, res, args);\n deffered.resolve(args);\n });\n }\n if (done || fail) {\n deffered.promise.then(done, fail);\n }\n if (always) {\n deffered.promise.then(always, always);\n }\n return deffered.promise;\n };\n DataManager.getDeferedArgs = function (query, result, args) {\n if (query.isCountRequired) {\n args.result = result.result;\n args.count = result.count;\n args.aggregates = result.aggregates;\n }\n else {\n args.result = result;\n }\n return args;\n };\n DataManager.nextTick = function (fn) {\n (window.setImmediate || window.setTimeout)(fn, 0);\n };\n DataManager.prototype.extendRequest = function (url, fnSuccess, fnFail) {\n return extend({}, {\n type: 'GET',\n dataType: this.dataSource.dataType,\n crossDomain: this.dataSource.crossDomain,\n jsonp: this.dataSource.jsonp,\n cache: true,\n processData: false,\n onSuccess: fnSuccess,\n onFailure: fnFail\n }, url);\n };\n // tslint:disable-next-line:max-func-body-length\n DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n var _this = this;\n var isSelector = !!query.subQuerySelector;\n var fnFail = function (e) {\n args.error = e;\n deffered.reject(args);\n };\n var process = function (data, count, xhr, request, actual, aggregates, virtualSelectRecords) {\n args.xhr = xhr;\n args.count = count ? parseInt(count.toString(), 10) : 0;\n args.result = data;\n args.request = request;\n args.aggregates = aggregates;\n args.actual = actual;\n args.virtualSelectRecords = virtualSelectRecords;\n deffered.resolve(args);\n };\n var fnQueryChild = function (data, selector) {\n var subDeffer = new Deferred();\n var childArgs = { parent: args };\n query.subQuery.isChild = true;\n var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n if (!isSelector) {\n subDeffer.then(function (subData) {\n if (data) {\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, data, subData, query.subQuery.key);\n process(data, subData.count, subData.xhr);\n }\n }, fnFail);\n }\n return childReq;\n };\n var fnSuccess = function (data, request) {\n if (_this.isAjaxAdaptor(_this.adaptor)) {\n request = extend({}, _this.ajaxReqOption, request);\n }\n if (request.httpRequest.getResponseHeader('Content-Type').indexOf('xml') === -1 && _this.dateParse) {\n data = DataUtil.parse.parseJson(data);\n }\n var result = _this.adaptor.processResponse(data, _this, query, request.httpRequest, request);\n var count = 0;\n var aggregates = null;\n var virtualSelectRecords = 'virtualSelectRecords';\n var virtualRecords = data[virtualSelectRecords];\n if (query.isCountRequired) {\n count = result.count;\n aggregates = result.aggregates;\n result = result.result;\n }\n if (!query.subQuery) {\n process(result, count, request.httpRequest, request.type, data, aggregates, virtualRecords);\n return;\n }\n if (!isSelector) {\n fnQueryChild(result, request);\n }\n };\n var req = this.extendRequest(url, fnSuccess, fnFail);\n if (!this.isAjaxAdaptor(this.adaptor)) {\n var ajax_1 = new Ajax(req);\n ajax_1.beforeSend = function () {\n _this.beforeSend(ajax_1.httpRequest, ajax_1);\n };\n req = ajax_1.send();\n req.catch(function (e) { return true; }); // to handle failure remote requests. \n this.requests.push(ajax_1);\n }\n else {\n this.ajaxReqOption = req;\n var request = req;\n this.adaptor.options.getData({\n data: request.data,\n onSuccess: request.onSuccess, onFailure: request.onFailure\n });\n }\n if (isSelector) {\n var promise = void 0;\n var res = query.subQuerySelector.call(this, { query: query.subQuery, parent: query });\n if (res && res.length) {\n promise = Promise.all([req, fnQueryChild(null, res)]);\n promise.then(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = args[0];\n var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].httpRequest, _this.requests[0]);\n var count = 0;\n if (query.isCountRequired) {\n count = pResult.count;\n pResult = pResult.result;\n }\n var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].httpRequest, _this.requests[1]);\n count = 0;\n if (query.subQuery.isCountRequired) {\n count = cResult.count;\n cResult = cResult.result;\n }\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, pResult, cResult, query.subQuery.key);\n isSelector = false;\n process(pResult, count, _this.requests[0].httpRequest);\n });\n }\n else {\n isSelector = false;\n }\n }\n return req;\n };\n DataManager.prototype.beforeSend = function (request, settings) {\n this.adaptor.beforeSend(this, request, settings);\n var headers = this.dataSource.headers;\n var props;\n for (var i = 0; headers && i < headers.length; i++) {\n props = [];\n var keys = Object.keys(headers[i]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n props.push(prop);\n request.setRequestHeader(prop, headers[i][prop]);\n }\n }\n };\n /**\n * Save bulk changes to the given table name.\n * User can add a new record, edit an existing record, and delete a record at the same time.\n * If the datasource from remote, then updated in a single post.\n * @param {Object} changes - Defines the CrudOptions.\n * @param {string} key - Defines the column field.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.saveChanges = function (changes, key, tableName, query, original) {\n var _this = this;\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var args = {\n url: tableName,\n key: key || this.dataSource.key\n };\n var req = this.adaptor.batchRequest(this, changes, args, query || new Query(), original);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return req;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](req);\n }\n else if (!this.isAjaxAdaptor(this.adaptor)) {\n var deff_1 = new Deferred();\n var ajax_2 = new Ajax(req);\n ajax_2.beforeSend = function () {\n _this.beforeSend(ajax_2.httpRequest, ajax_2);\n };\n ajax_2.onSuccess = function (data, request) {\n deff_1.resolve(_this.adaptor.processResponse(data, _this, null, request.httpRequest, request, changes, args));\n };\n ajax_2.onFailure = function (e) {\n deff_1.reject([{ error: e }]);\n };\n ajax_2.send().catch(function (e) { return true; }); // to handle the failure requests. \n return deff_1.promise;\n }\n else {\n return this.doAjaxRequest(req, this.adaptor.options.batchUpdate);\n }\n };\n /**\n * Inserts new record in the given table.\n * @param {Object} data - Defines the data to insert.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.insert = function (data, tableName, query, position) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var req = this.adaptor.insert(this, data, tableName, query, position);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return req;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](req);\n }\n else {\n return this.doAjaxRequest(req, this.adaptor.options.addRecord);\n }\n };\n /**\n * Removes data from the table with the given key.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.remove = function (keyField, value, tableName, query) {\n if (typeof value === 'object') {\n value = DataUtil.getObject(keyField, value);\n }\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.remove(this, keyField, value, tableName, query);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return res;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](res);\n }\n else {\n var remove = this.adaptor.options.deleteRecord;\n return this.doAjaxRequest(res, remove);\n }\n };\n /**\n * Updates existing record in the given table.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.update = function (keyField, value, tableName, query, original) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.update(this, keyField, value, tableName, query, original);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return res;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](res);\n }\n else {\n var update = this.adaptor.options.updateRecord;\n return this.doAjaxRequest(res, update);\n }\n };\n DataManager.prototype.isAjaxAdaptor = function (dataSource) {\n return this.adaptor.getModuleName &&\n this.adaptor.getModuleName() === 'AjaxAdaptor';\n };\n DataManager.prototype.successFunc = function (record, request) {\n if (this.isAjaxAdaptor(this.adaptor)) {\n request = extend({}, this.ajaxReqOption, request);\n }\n try {\n DataUtil.parse.parseJson(record);\n }\n catch (e) {\n record = [];\n }\n record = this.adaptor.processResponse(DataUtil.parse.parseJson(record), this, null, request.httpRequest, request);\n this.ajaxDeffered.resolve(record);\n };\n ;\n DataManager.prototype.failureFunc = function (e) {\n this.ajaxDeffered.reject([{ error: e }]);\n };\n ;\n DataManager.prototype.doAjaxRequest = function (res, ajaxFunc) {\n var _this = this;\n res = extend({}, {\n type: 'POST',\n contentType: 'application/json; charset=utf-8',\n processData: false\n }, res);\n this.ajaxDeffered = new Deferred();\n if (!this.isAjaxAdaptor(this.adaptor)) {\n var ajax_3 = new Ajax(res);\n ajax_3.beforeSend = function () {\n _this.beforeSend(ajax_3.httpRequest, ajax_3);\n };\n ajax_3.onSuccess = this.successFunc.bind(this);\n ajax_3.onFailure = this.failureFunc.bind(this);\n ajax_3.send().catch(function (e) { return true; }); // to handle the failure requests.\n }\n else {\n this.ajaxReqOption = res;\n ajaxFunc.call(this, {\n data: res.data, onSuccess: this.successFunc.bind(this),\n onFailure: this.failureFunc.bind(this)\n });\n }\n return this.ajaxDeffered.promise;\n };\n return DataManager;\n}());\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, Event, append, compile, isBlazor } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove, updateBlazorTemplate, resetBlazorTemplate } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar POPUP_LIB = 'e-lib';\nvar HIDE_POPUP = 'e-hidden';\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n ], Animation.prototype, \"open\", void 0);\n __decorate([\n Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n ], Animation.prototype, \"close\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n * <div id=\"tooltip\">Show Tooltip</div>\n * ```\n * ```typescript\n * <script>\n * var tooltipObj = new Tooltip({ content: 'Tooltip text' });\n * tooltipObj.appendTo(\"#tooltip\");\n * </script>\n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the Tooltip Component\n */\n function Tooltip(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isBlazorTooltip = false;\n _this.contentTargetValue = null;\n _this.contentEvent = null;\n _this.contentAnimation = null;\n return _this;\n }\n Tooltip.prototype.initialize = function () {\n this.formatPosition();\n if (!(this.isServerRender())) {\n addClass([this.element], ROOT);\n }\n };\n Tooltip.prototype.isServerRender = function () {\n return isBlazor() && this.isServerRendered;\n };\n Tooltip.prototype.formatPosition = function () {\n var _a, _b;\n if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n }\n else {\n _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n }\n };\n Tooltip.prototype.renderArrow = function () {\n this.setTipClass(this.position);\n if (!(this.isServerRender())) {\n var tip = this.createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n this.tooltipEle.appendChild(tip);\n }\n else {\n var tip = this.tooltipEle.querySelector('.' + ARROW_TIP);\n addClass([tip.querySelector('.' + ARROW_TIP_OUTER)], this.tipClass);\n addClass([tip.querySelector('.' + ARROW_TIP_INNER)], this.tipClass);\n this.tooltipEle.appendChild(tip);\n }\n };\n Tooltip.prototype.setTipClass = function (position) {\n if (position.indexOf('Right') === 0) {\n this.tipClass = TIP_LEFT;\n }\n else if (position.indexOf('Bottom') === 0) {\n this.tipClass = TIP_TOP;\n }\n else if (position.indexOf('Left') === 0) {\n this.tipClass = TIP_RIGHT;\n }\n else {\n this.tipClass = TIP_BOTTOM;\n }\n };\n Tooltip.prototype.renderPopup = function (target) {\n var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n this.tooltipEle.classList.remove(POPUP_LIB);\n this.popupObj = new Popup(this.tooltipEle, {\n height: this.height,\n width: this.width,\n position: { X: elePos.left, Y: elePos.top },\n enableRtl: this.enableRtl,\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this)\n });\n };\n Tooltip.prototype.getTooltipPosition = function (target) {\n this.tooltipEle.style.display = 'block';\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\n var offsetPos = this.calculateTooltipOffset(this.position);\n var elePos = this.collisionFlipFit(target, pos.left + offsetPos.left, pos.top + offsetPos.top);\n this.tooltipEle.style.display = '';\n return elePos;\n };\n Tooltip.prototype.reposition = function (target) {\n var elePos = this.getTooltipPosition(target);\n this.popupObj.position = { X: elePos.left, Y: elePos.top };\n this.popupObj.dataBind();\n };\n Tooltip.prototype.openPopupHandler = function () {\n if (!this.mouseTrail && this.needTemplateReposition()) {\n this.reposition(this.findTarget());\n }\n this.trigger('afterOpen', this.tooltipEventArgs);\n };\n Tooltip.prototype.closePopupHandler = function () {\n resetBlazorTemplate(this.element.id + 'content', 'Content');\n this.clearTemplate(['content']);\n this.clear();\n this.trigger('afterClose', this.tooltipEventArgs);\n };\n Tooltip.prototype.calculateTooltipOffset = function (position) {\n var pos = { top: 0, left: 0 };\n var tooltipEleWidth = this.tooltipEle.offsetWidth;\n var tooltipEleHeight = this.tooltipEle.offsetHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n var tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n var tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n var tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n var tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n if (this.mouseTrail) {\n tipAdjust += MOUSE_TRAIL_GAP;\n }\n switch (position) {\n case 'RightTop':\n pos.left += tipWidth + tipAdjust;\n pos.top -= tooltipEleHeight - tipHeightAdjust;\n break;\n case 'RightCenter':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'RightBottom':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tipHeightAdjust);\n break;\n case 'BottomRight':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n case 'BottomCenter':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n case 'BottomLeft':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'LeftBottom':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tipHeightAdjust);\n break;\n case 'LeftCenter':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'LeftTop':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight - tipHeightAdjust);\n break;\n case 'TopLeft':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'TopRight':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n default:\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n }\n pos.left += this.offsetX;\n pos.top += this.offsetY;\n return pos;\n };\n Tooltip.prototype.updateTipPosition = function (position) {\n var selEle = this.tooltipEle.querySelectorAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER);\n var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n removeClass(selEle, removeList);\n this.setTipClass(position);\n addClass(selEle, this.tipClass);\n };\n Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n if (this.showTipPointer === false) {\n return;\n }\n this.updateTipPosition(position);\n var leftValue;\n var topValue;\n this.tooltipEle.style.display = 'block';\n var tooltipWidth = this.tooltipEle.clientWidth;\n var tooltipHeight = this.tooltipEle.clientHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n var tipWidth = arrowEle.offsetWidth;\n var tipHeight = arrowEle.offsetHeight;\n this.tooltipEle.style.display = '';\n if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n if (this.tipClass === TIP_BOTTOM) {\n topValue = '99.9%';\n // Arrow icon aligned -2px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n }\n else {\n topValue = -(tipHeight - 1) + 'px';\n // Arrow icon aligned -6px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n }\n if (target) {\n var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n leftValue = POINTER_ADJUST + 'px';\n }\n else {\n leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n }\n }\n }\n else {\n if (this.tipClass === TIP_RIGHT) {\n leftValue = '99.9%';\n // Arrow icon aligned -2px left from ArrowOuterTip div\n arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n }\n else {\n leftValue = -(tipWidth - 1) + 'px';\n // Arrow icon aligned -2px from ArrowOuterTip width\n arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n }\n var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n topValue = POINTER_ADJUST + 'px';\n }\n else {\n topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n }\n }\n arrowEle.style.top = topValue;\n arrowEle.style.left = leftValue;\n };\n Tooltip.prototype.renderContent = function (target) {\n var tooltipContent = this.tooltipEle.querySelector('.' + CONTENT);\n if (this.cssClass) {\n addClass([this.tooltipEle], this.cssClass.split(' '));\n }\n if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n target.setAttribute('data-content', target.getAttribute('title'));\n target.removeAttribute('title');\n }\n if (!isNullOrUndefined(this.content)) {\n if (this.isBlazorTooltip || !(this.isServerRender())) {\n tooltipContent.innerHTML = '';\n if (this.content instanceof HTMLElement) {\n tooltipContent.appendChild(this.content);\n }\n else if (typeof this.content === 'string' && this.content.indexOf('<div>Blazor') < 0) {\n if (this.enableHtmlSanitizer) {\n this.setProperties({ content: SanitizeHtmlHelper.sanitize(this.content) }, true);\n }\n tooltipContent[this.enableHtmlParse ? 'innerHTML' : 'textContent'] = this.content;\n }\n else {\n var templateFunction = compile(this.content);\n var tempArr = templateFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent);\n if (tempArr) {\n append(tempArr, tooltipContent);\n }\n this.renderReactTemplates();\n if (typeof this.content === 'string' && this.content.indexOf('<div>Blazor') >= 0) {\n this.isBlazorTemplate = true;\n updateBlazorTemplate(this.element.id + 'content', 'Content', this);\n }\n }\n }\n }\n else {\n if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n tooltipContent.innerHTML = target.getAttribute('data-content');\n }\n }\n };\n Tooltip.prototype.renderCloseIcon = function () {\n if (!this.isSticky) {\n return;\n }\n var tipClose = this.createElement('div', { className: ICON + ' ' + CLOSE });\n this.tooltipEle.appendChild(tipClose);\n EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n };\n Tooltip.prototype.addDescribedBy = function (target, id) {\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n if (describedby.indexOf(id) < 0) {\n describedby.push(id);\n }\n attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\n };\n Tooltip.prototype.removeDescribedBy = function (target) {\n var id = target.getAttribute('data-tooltip-id');\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n var index = describedby.indexOf(id);\n if (index !== -1) {\n describedby.splice(index, 1);\n }\n target.removeAttribute('data-tooltip-id');\n var orgdescribedby = describedby.join(' ').trim();\n if (orgdescribedby) {\n target.setAttribute('aria-describedby', orgdescribedby);\n }\n else {\n target.removeAttribute('aria-describedby');\n }\n };\n Tooltip.prototype.tapHoldHandler = function (evt) {\n clearTimeout(this.autoCloseTimer);\n this.targetHover(evt.originalEvent);\n };\n Tooltip.prototype.touchEndHandler = function (e) {\n var _this = this;\n if (this.isSticky) {\n return;\n }\n var close = function () {\n _this.close();\n };\n this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n };\n Tooltip.prototype.targetClick = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n if (target.getAttribute('data-tooltip-id') === null) {\n this.targetHover(e);\n }\n else if (!this.isSticky) {\n this.hideTooltip(this.animation.close, e, target);\n }\n };\n Tooltip.prototype.targetHover = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target) || (target.getAttribute('data-tooltip-id') !== null && this.closeDelay === 0)) {\n return;\n }\n var targetList = [].slice.call(document.querySelectorAll('[data-tooltip-id= ' + this.ctrlId + '_content]'));\n for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n var target_1 = targetList_1[_i];\n this.restoreElement(target_1);\n }\n this.showTooltip(target, this.animation.open, e);\n };\n Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n var _this = this;\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n var observeCallback = function (beforeRenderArgs) {\n _this.beforeRenderCallback(beforeRenderArgs, target, e, showAnimation);\n };\n this.trigger('beforeRender', this.tooltipEventArgs, observeCallback.bind(this));\n };\n Tooltip.prototype.beforeRenderCallback = function (beforeRenderArgs, target, e, showAnimation) {\n var isBlazorTooltipRendered = false;\n if (beforeRenderArgs.cancel) {\n this.isHidden = true;\n this.clear();\n }\n else {\n this.isHidden = false;\n if (isNullOrUndefined(this.tooltipEle)) {\n if (this.isServerRender()) {\n this.contentTargetValue = target;\n this.contentEvent = e;\n this.contentAnimation = showAnimation;\n var args = { 'enableTooltip': 'true' };\n // tslint:disable\n this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args);\n // tslint:enable\n isBlazorTooltipRendered = true;\n }\n else {\n this.ctrlId = this.element.getAttribute('id') ?\n getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n this.tooltipEle = this.createElement('div', {\n className: TOOLTIP_WRAP + ' ' + POPUP_ROOT + ' ' + POPUP_LIB, attrs: {\n role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n }, styles: 'width:' +\n formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n });\n this.beforeRenderBlazor(target, this);\n }\n if (!isBlazorTooltipRendered) {\n this.afterRenderBlazor(target, e, showAnimation, this);\n }\n }\n else {\n if (this.isServerRender()) {\n addClass([this.tooltipEle], POPUP_OPEN);\n document.body.appendChild(this.tooltipEle);\n this.renderCloseIcon();\n this.renderPopup(target);\n }\n if (target) {\n this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n PopupAnimation.stop(this.tooltipEle);\n this.reposition(target);\n this.afterRenderBlazor(target, e, showAnimation, this);\n }\n }\n }\n };\n ;\n Tooltip.prototype.contentUpdated = function (args) {\n if (isNullOrUndefined(this.tooltipEle)) {\n if (this.isServerRender()) {\n this.ctrlId = this.element.id;\n this.tooltipEle = document.querySelector('#' + this.ctrlId + '_content');\n if (this.tooltipEle) {\n this.tooltipEle.setAttribute('style', 'width:' + formatUnit(this.width) +\n ';height:' + formatUnit(this.height) + ';position:absolute;');\n this.beforeRenderBlazor(this.contentTargetValue, this);\n this.afterRenderBlazor(this.contentTargetValue, this.contentEvent, this.contentAnimation, this);\n this.contentTargetValue = this.contentEvent = this.contentAnimation = null;\n }\n }\n }\n };\n ;\n Tooltip.prototype.beforeRenderBlazor = function (target, ctrlObj) {\n if (target) {\n if (Browser.isDevice) {\n addClass([ctrlObj.tooltipEle], DEVICE);\n }\n if (ctrlObj.width !== 'auto') {\n ctrlObj.tooltipEle.style.maxWidth = formatUnit(ctrlObj.width);\n }\n if (!(this.isServerRender())) {\n ctrlObj.tooltipEle.appendChild(ctrlObj.createElement('div', { className: CONTENT }));\n }\n document.body.appendChild(ctrlObj.tooltipEle);\n removeClass([ctrlObj.tooltipEle], HIDE_POPUP);\n ctrlObj.addDescribedBy(target, ctrlObj.ctrlId + '_content');\n ctrlObj.renderContent(target);\n addClass([ctrlObj.tooltipEle], POPUP_OPEN);\n if (ctrlObj.showTipPointer) {\n ctrlObj.renderArrow();\n }\n ctrlObj.renderCloseIcon();\n ctrlObj.renderPopup(target);\n ctrlObj.adjustArrow(target, ctrlObj.position, ctrlObj.tooltipPositionX, ctrlObj.tooltipPositionY);\n PopupAnimation.stop(ctrlObj.tooltipEle);\n ctrlObj.reposition(target);\n }\n };\n Tooltip.prototype.afterRenderBlazor = function (target, e, showAnimation, ctrlObj) {\n if (target) {\n removeClass([ctrlObj.tooltipEle], POPUP_OPEN);\n addClass([ctrlObj.tooltipEle], POPUP_CLOSE);\n ctrlObj.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: ctrlObj.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n if (ctrlObj.needTemplateReposition() && !ctrlObj.mouseTrail) {\n ctrlObj.tooltipEle.style.display = 'none';\n }\n var observeCallback = function (observedArgs) {\n ctrlObj.beforeOpenCallback(observedArgs, target, showAnimation, e);\n };\n ctrlObj.trigger('beforeOpen', ctrlObj.tooltipEventArgs, observeCallback.bind(ctrlObj));\n }\n };\n Tooltip.prototype.beforeOpenCallback = function (observedArgs, target, showAnimation, e) {\n var _this = this;\n if (observedArgs.cancel) {\n this.isHidden = true;\n this.clear();\n this.restoreElement(target);\n }\n else {\n var openAnimation_1 = {\n name: showAnimation.effect,\n duration: showAnimation.duration,\n delay: showAnimation.delay,\n timingFunction: 'easeOut'\n };\n if (showAnimation.effect === 'None') {\n openAnimation_1 = undefined;\n }\n if (this.openDelay > 0) {\n var show = function () {\n if (_this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', _this.onMouseMove, _this);\n }\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation_1, target);\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n if (this.popupObj) {\n this.popupObj.show(openAnimation_1, target);\n }\n }\n }\n if (e) {\n this.wireMouseEvents(e, target);\n }\n };\n Tooltip.prototype.needTemplateReposition = function () {\n // tslint:disable-next-line:no-any\n var tooltip = this;\n return !isNullOrUndefined(tooltip.viewContainerRef)\n && typeof tooltip.viewContainerRef !== 'string'\n || (this.isServerRender()) && this.isBlazorTemplate;\n };\n Tooltip.prototype.checkCollision = function (target, x, y) {\n var elePos = {\n left: x, top: y, position: this.position,\n horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n };\n var affectedPos = isCollide(this.tooltipEle, this.checkCollideTarget(), x, y);\n if (affectedPos.length > 0) {\n elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n this.tooltipPositionX;\n elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n this.tooltipPositionY;\n }\n return elePos;\n };\n Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n var elePos = this.checkCollision(target, x, y);\n var newpos = elePos.position;\n if (this.tooltipPositionY !== elePos.vertical) {\n newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n }\n if (this.tooltipPositionX !== elePos.horizontal) {\n if (newpos.indexOf('Left') === 0) {\n elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Left');\n }\n if (newpos.indexOf('Right') === 0) {\n elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Right');\n }\n elePos.horizontal = this.tooltipPositionX;\n }\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null,\n element: this.tooltipEle, collidedPosition: newpos\n };\n this.trigger('beforeCollision', this.tooltipEventArgs);\n if (elePos.position !== newpos) {\n var pos = calculatePosition(target, elePos.horizontal, elePos.vertical);\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n var offsetPos = this.calculateTooltipOffset(newpos);\n offsetPos.top -= (('TopBottom'.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1) &&\n ('TopBottom'.indexOf(newpos.split(/(?=[A-Z])/)[0]) !== -1)) ? (2 * this.offsetY) : 0;\n offsetPos.left -= (('RightLeft'.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1) &&\n ('RightLeft'.indexOf(newpos.split(/(?=[A-Z])/)[0]) !== -1)) ? (2 * this.offsetX) : 0;\n elePos.position = newpos;\n elePos.left = pos.left + offsetPos.left;\n elePos.top = pos.top + offsetPos.top;\n }\n else {\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n }\n var eleOffset = { left: elePos.left, top: elePos.top };\n var left = fit(this.tooltipEle, this.checkCollideTarget(), { X: true, Y: false }, eleOffset).left;\n this.tooltipEle.style.display = 'block';\n if (this.showTipPointer && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowleft = parseInt(arrowEle.style.left, 10) - (left - elePos.left);\n if (arrowleft < 0) {\n arrowleft = 0;\n }\n else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n }\n arrowEle.style.left = arrowleft.toString() + 'px';\n }\n this.tooltipEle.style.display = '';\n eleOffset.left = left;\n return eleOffset;\n };\n Tooltip.prototype.checkCollideTarget = function () {\n return !this.windowCollision && this.target ? this.element : null;\n };\n Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n var _this = this;\n if (this.closeDelay > 0) {\n clearTimeout(this.hideTimer);\n clearTimeout(this.showTimer);\n var hide = function () {\n if (_this.closeDelay && _this.tooltipEle && _this.isTooltipOpen) {\n return;\n }\n _this.tooltipHide(hideAnimation, e, targetElement);\n };\n this.hideTimer = setTimeout(hide, this.closeDelay);\n }\n else {\n this.tooltipHide(hideAnimation, e, targetElement);\n }\n };\n Tooltip.prototype.tooltipHide = function (hideAnimation, e, targetElement) {\n var _this = this;\n var target;\n if (e) {\n target = this.target ? (targetElement || e.target) : this.element;\n }\n else {\n target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n }\n this.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n // this line commented for close the tooltip popup element even the target element destroyed in a page.\n //if (isNullOrUndefined(target)) { return; }\n this.trigger('beforeClose', this.tooltipEventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n if (_this.isServerRender()) {\n _this.blazorHide(hideAnimation, target);\n }\n else {\n _this.popupHide(hideAnimation, target);\n }\n }\n else {\n _this.isHidden = false;\n }\n });\n };\n /* istanbul ignore next */\n Tooltip.prototype.blazorHide = function (hideAnimation, target) {\n var proxy = this;\n var hide = function () {\n proxy.popupHide(hideAnimation, target);\n };\n if (this.popupObj) {\n this.popupHide(hideAnimation, target);\n }\n else {\n setTimeout(hide, 200);\n }\n };\n Tooltip.prototype.popupHide = function (hideAnimation, target) {\n if (target) {\n this.restoreElement(target);\n }\n this.isHidden = true;\n var closeAnimation = {\n name: hideAnimation.effect,\n duration: hideAnimation.duration,\n delay: hideAnimation.delay,\n timingFunction: 'easeIn'\n };\n if (hideAnimation.effect === 'None') {\n closeAnimation = undefined;\n }\n if (this.popupObj) {\n this.popupObj.hide(closeAnimation);\n }\n };\n Tooltip.prototype.restoreElement = function (target) {\n this.unwireMouseEvents(target);\n if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n target.setAttribute('title', target.getAttribute('data-content'));\n target.removeAttribute('data-content');\n }\n this.removeDescribedBy(target);\n };\n Tooltip.prototype.clear = function () {\n if (this.tooltipEle) {\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n }\n if (this.isHidden) {\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.isServerRender() && this.tooltipEle) {\n this.tooltipEle.style.display = 'none';\n var args = { 'enableTooltip': 'false' };\n // tslint:disable\n this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args);\n // tslint:enable\n remove(this.tooltipEle);\n }\n else if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n }\n };\n Tooltip.prototype.tooltipHover = function (e) {\n if (this.tooltipEle) {\n this.isTooltipOpen = true;\n }\n };\n Tooltip.prototype.tooltipMouseOut = function (e) {\n this.isTooltipOpen = false;\n this.hideTooltip(this.animation.close, e, this.findTarget());\n };\n Tooltip.prototype.onMouseOut = function (e) {\n var enteredElement = e.relatedTarget;\n // don't close the tooltip only if it is tooltip content element\n if (enteredElement && !this.mouseTrail) {\n var checkForTooltipElement = closest(enteredElement, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT);\n if (checkForTooltipElement) {\n EventHandler.add(checkForTooltipElement, 'mouseleave', this.tooltipElementMouseOut, this);\n }\n else {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n if (this.closeDelay === 0) {\n this.clear();\n }\n }\n }\n else {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n this.clear();\n }\n };\n Tooltip.prototype.tooltipElementMouseOut = function (e) {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n EventHandler.remove(this.element, 'mouseleave', this.tooltipElementMouseOut);\n this.clear();\n };\n Tooltip.prototype.onStickyClose = function (e) {\n this.close();\n };\n Tooltip.prototype.onMouseMove = function (event) {\n var eventPageX = 0;\n var eventPageY = 0;\n if (event.type.indexOf('touch') > -1) {\n event.preventDefault();\n eventPageX = event.touches[0].pageX;\n eventPageY = event.touches[0].pageY;\n }\n else {\n eventPageX = event.pageX;\n eventPageY = event.pageY;\n }\n PopupAnimation.stop(this.tooltipEle);\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n var pos = this.calculateTooltipOffset(this.position);\n var x = eventPageX + pos.left + this.offsetX;\n var y = eventPageY + pos.top + this.offsetY;\n var elePos = this.checkCollision(event.target, x, y);\n if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n elePos.position = newpos;\n this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n var colpos = this.calculateTooltipOffset(elePos.position);\n elePos.left = eventPageX + colpos.left - this.offsetX;\n elePos.top = eventPageY + colpos.top - this.offsetY;\n }\n this.tooltipEle.style.left = elePos.left + 'px';\n this.tooltipEle.style.top = elePos.top + 'px';\n };\n Tooltip.prototype.keyDown = function (event) {\n if (this.tooltipEle && event.keyCode === 27) {\n this.close();\n }\n };\n Tooltip.prototype.touchEnd = function (e) {\n if (this.tooltipEle && closest(e.target, '.' + ROOT) === null && !this.isSticky) {\n this.close();\n }\n };\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle) {\n if (!(closest(e.target, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT))) {\n this.close();\n }\n }\n };\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Tooltip.prototype.render = function () {\n this.initialize();\n this.wireEvents(this.opensOn);\n this.renderComplete();\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Tooltip.prototype.preRender = function () {\n this.tipClass = TIP_BOTTOM;\n this.tooltipPositionX = 'Center';\n this.tooltipPositionY = 'Top';\n this.isHidden = true;\n };\n /**\n * Binding events to the Tooltip element.\n * @hidden\n */\n Tooltip.prototype.wireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n var opensOn = triggerList_1[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.wireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n this.touchModule = new Touch(this.element, {\n tapHoldThreshold: TAPHOLD_THRESHOLD,\n tapHold: this.tapHoldHandler.bind(this)\n });\n EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n }\n else {\n EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n if (this.isServerRender() && !this.isSticky) {\n EventHandler.add(this.element, 'mouseleave', this.onMouseOut, this);\n }\n }\n }\n }\n EventHandler.add(document, 'touchend', this.touchEnd, this);\n EventHandler.add(document, 'scroll wheel', this.scrollHandler, this);\n EventHandler.add(document, 'keydown', this.keyDown, this);\n };\n Tooltip.prototype.getTriggerList = function (trigger) {\n if (trigger === 'Auto') {\n trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n }\n return trigger.split(' ');\n };\n Tooltip.prototype.wireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n var target = targetList_2[_i];\n EventHandler.add(target, 'focus', this.targetHover, this);\n }\n }\n else {\n EventHandler.add(this.element, 'focus', this.targetHover, this);\n }\n };\n Tooltip.prototype.wireMouseEvents = function (e, target) {\n if (this.tooltipEle) {\n if (!this.isSticky) {\n if (e.type === 'focus') {\n EventHandler.add(target, 'blur', this.onMouseOut, this);\n }\n if (e.type === 'mouseover') {\n if (!this.isServerRender()) {\n EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n }\n if (this.closeDelay) {\n EventHandler.add(this.tooltipEle, 'mouseenter', this.tooltipHover, this);\n EventHandler.add(this.tooltipEle, 'mouseleave', this.tooltipMouseOut, this);\n }\n }\n if (this.mouseTrail && this.openDelay === 0) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Tooltip.prototype.unwireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n var opensOn = triggerList_2[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.unwireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n if (this.touchModule) {\n this.touchModule.destroy();\n }\n EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n }\n else {\n EventHandler.remove(this.element, 'mouseover', this.targetHover);\n if (this.isServerRender() && !this.isSticky) {\n EventHandler.remove(this.element, 'mouseleave', this.onMouseOut);\n }\n }\n }\n }\n EventHandler.remove(document, 'touchend', this.touchEnd);\n EventHandler.remove(document, 'scroll wheel', this.scrollHandler);\n EventHandler.remove(document, 'keydown', this.keyDown);\n };\n Tooltip.prototype.unwireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n var target = targetList_3[_i];\n EventHandler.remove(target, 'focus', this.targetHover);\n }\n }\n else {\n EventHandler.remove(this.element, 'focus', this.targetHover);\n }\n };\n Tooltip.prototype.unwireMouseEvents = function (target) {\n if (!this.isSticky) {\n var triggerList = this.getTriggerList(this.opensOn);\n for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n var opensOn = triggerList_3[_i];\n if (opensOn === 'Focus') {\n EventHandler.remove(target, 'blur', this.onMouseOut);\n }\n if (opensOn === 'Hover' && !Browser.isDevice) {\n if (!this.isServerRender()) {\n EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\n }\n }\n if (this.closeDelay) {\n EventHandler.remove(target, 'mouseenter', this.tooltipHover);\n EventHandler.remove(target, 'mouseleave', this.tooltipMouseOut);\n }\n }\n if (this.mouseTrail) {\n EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n }\n };\n Tooltip.prototype.findTarget = function () {\n var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n return target;\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n var targetElement = this.findTarget();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.width = this.tooltipEle.style.maxWidth = formatUnit(newProp.width);\n this.reposition(targetElement);\n }\n break;\n case 'height':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n this.reposition(targetElement);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n if (this.isServerRender()) {\n this.isBlazorTooltip = true;\n }\n this.renderContent();\n }\n else if (this.isServerRender()) {\n var args = { 'content': newProp.content };\n // tslint:disable\n this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args);\n // tslint:enable\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n if (this.tooltipEle && targetElement) {\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n this.reposition(targetElement);\n }\n break;\n case 'tipPointerPosition':\n if (this.tooltipEle && targetElement) {\n this.reposition(targetElement);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n * @param element Target element where the Tooltip is to be displayed. (It is an optional parameter)\n * @param animation Sets the specific animation, while showing the Tooltip on the screen. (It is an optional parameter)\n * @return {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (isNullOrUndefined(animation)) {\n animation = this.animation.open;\n }\n if (isNullOrUndefined(element)) {\n element = this.element;\n }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n * @param animation Sets the specific animation when hiding Tooltip from the screen. (It is an optional parameter)\n * @return {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (!animation) {\n animation = this.animation.close;\n }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n * @param target Target element where the Tooltip content or position needs to be refreshed.\n * @return {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n };\n /**\n * It is used to destroy the Tooltip component.\n * @method destroy\n * @return {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n if (!this.isServerRender()) {\n _super.prototype.destroy.call(this);\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n }\n if (this.isServerRender() && this.tooltipEle) {\n var placeholder = document.querySelector('#' + this.ctrlId + '_content_placeholder');\n if (placeholder) {\n placeholder.appendChild(this.tooltipEle);\n }\n }\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n this.unwireMouseEvents(this.element);\n this.tooltipEle = null;\n this.popupObj = null;\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableHtmlParse\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"windowCollision\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","import { extend, merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n};\n/**\n * Base List Generator\n */\nexport var ListBase;\n(function (ListBase) {\n /**\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n enableHtmlSanitizer: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right',\n itemNavigable: false\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n * @param {{[key:string]:Object}[]|string[]} dataSource - Specifies an array of JSON or String data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, \n // tslint:disable-next-line\n options, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n }\n else {\n // tslint:disable-next-line\n return createListFromJson(createElement, dataSource, options, \n // tslint:disable-next-line\n ariaAttributes.level, isSingleLevel, componentInstance);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListFromArray(createElement, dataSource, \n // tslint:disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListItemFromArray(createElement, dataSource, \n // tslint:disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options, componentInstance);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n // tslint:disable-next-line:max-func-body-length\n // tslint:disable-next-line\n function createListItemFromJson(createElement, dataSource, \n // tslint:disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n var checkboxElement = [];\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n var anchorElement;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData[fields.id];\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n if (curOpt.itemNavigable && (fieldData[fields.url] || fieldData[fields.urlAttributes])) {\n checkboxElement.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n else {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n }\n if (isSingleLevel === true) {\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n && !curOpt.template) {\n var attr = { src: fieldData[fields.imageUrl] };\n merge(attr, fieldData[fields.imageAttributes]);\n var imageElemnt = createElement('img', { className: cssClass.image, attrs: attr });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', imageElemnt);\n }\n else {\n prepend([imageElemnt], li.firstElementChild);\n }\n }\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) &&\n !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n var iconElement = void 0;\n iconElement = createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', iconElement);\n }\n else {\n prepend([iconElement], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (anchorElement) {\n addClass([li], [cssClass.navigable]);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n checkboxElement = [];\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createListFromJson(createElement, dataSource, \n // tslint:disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel, componentInstance);\n return generateUL(createElement, li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]|NodeList} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n * @param {{[key:string]:Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder='None'} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var cusQuery = new Query().group(curFields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[curFields.text] = ds[j].key;\n grpItem[hdr] = true;\n var newtext = curFields.text;\n if (newtext === 'id') {\n newtext = 'text';\n grpItem[newtext] = ds[j].key;\n }\n grpItem._id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query=new Query()} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // tslint:disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n var attributes_1 = getAllAttributes(li);\n if (attributes_1.id) {\n json[fields.id] = attributes_1.id;\n delete attributes_1.id;\n }\n else {\n json[fields.id] = generateId();\n }\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function renderContentTemplate(createElement, template, dataSource, \n // tslint:disable-next-line\n fields, options, componentInstance) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var compiledString = compile(template);\n var liCollection = [];\n var value;\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], curFields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], curFields);\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n li.innerText = curItem;\n }\n else {\n li.innerText = fieldData[curFields.text];\n }\n }\n else {\n var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;\n if (isHeader) {\n append(compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate), li);\n }\n else {\n append(compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate), li);\n }\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n // tslint:disable-next-line\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, \n // tslint:disable-next-line\n headerItems, options, componentInstance) {\n var compiledString = compile(groupTemplate);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var curOpt = extend({}, defaultListBaseOptions, options);\n var category = curFields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[category] = header.textContent;\n header.innerHTML = '';\n append(compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), header);\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n // Get SubList\n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(createElement, subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length && !curOpt.itemNavigable) {\n append(innerElements, li);\n }\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable));\n }\n else {\n if (innerElements.length && curOpt.itemNavigable) {\n append(innerElements, li);\n }\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable',\n };\n }\n function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n attr.href = fieldData[fields.url] ? fieldData[fields.url] :\n fieldData[fields.urlAttributes].href;\n }\n var anchorTag;\n if (!isFullNavigation) {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n }\n else {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url });\n var anchorWrapper = createElement('div', { className: cssClass.anchorWrap });\n if (innerElements && innerElements.length) {\n append(innerElements, anchorWrapper);\n }\n anchorWrapper.appendChild(document.createTextNode(text));\n append([anchorWrapper], anchorTag);\n }\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n // tslint:disable-next-line\n /* tslint:disable:align */\n function generateLI(createElement, item, fieldData, \n // tslint:disable-next-line\n fields, className, options, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = fieldData[fields.text] || '';\n // tslint:disable-next-line\n uID = (isNullOrUndefined(fieldData['_id'])) ? fieldData[fields.id] : fieldData['_id'];\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n if (options && options.enableHtmlSanitizer) {\n text = text;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n !isNullOrUndefined(uID) ? li.setAttribute('data-uid', uID) : li.setAttribute('data-uid', generateId());\n var blazId = 'BlazId';\n if (options && !!options.removeBlazorID\n && typeof item === 'object'\n && item.hasOwnProperty(blazId)) {\n delete item[blazId];\n }\n if (grpLI && options && options.groupTemplate) {\n var compiledString = compile(options.groupTemplate);\n append(compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), li);\n }\n else if (!grpLI && options && options.template) {\n var compiledString = compile(options.template);\n append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n }\n else {\n var element = createElement('span', {\n className: cssClass.text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n });\n if (options && options.enableHtmlSanitizer) {\n element.innerText = text;\n }\n else {\n element.innerHTML = text;\n }\n innerDiv.appendChild(element);\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n * @param {string} className? - Specifies class name that need to be added in UL element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n * @param {liElement} liElement - Specifies LI element.\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n * @param {{[key:string]:Object}|string[]|string} dataSource - Specifies an JSON or String data.\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[dataField] = value;\n }\n }\n }\n return fieldData;\n}\n","import { isNullOrUndefined, classList, createElement } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar spinTemplate = null;\nvar spinCSSClass = null;\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar DEFT_BOOT4_WIDTH = 36;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_BOOT4SPIN = 'e-spin-bootstrap4';\nvar CLS_HIGHCONTRASTSPIN = 'e-spin-high-contrast';\nvar CLS_SPINWRAP = 'e-spinner-pane';\nvar CLS_SPININWRAP = 'e-spinner-inner';\nvar CLS_SPINCIRCLE = 'e-path-circle';\nvar CLS_SPINARC = 'e-path-arc';\nvar CLS_SPINLABEL = 'e-spin-label';\nvar CLS_SPINTEMPLATE = 'e-spin-template';\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : blazorSpinner({ action: \"Create\", options: {target: targetElement}, type: \"\" });\n * ```\n * @param args\n * @private\n */\nexport function Spinner(action, options, target, type) {\n switch (action) {\n case 'Create':\n var element = document.querySelector(options.target);\n var args = { type: type, target: element, cssClass: options.cssClass,\n label: options.label, width: options.width };\n createSpinner(args);\n break;\n case 'Show':\n showSpinner(document.querySelector(target));\n break;\n case 'Hide':\n hideSpinner(document.querySelector(target));\n break;\n case 'Set':\n var setArgs = { cssClass: options.cssClass, type: type };\n setSpinner(setArgs);\n break;\n }\n}\n/**\n * Create a spinner for the specified target element.\n * ```\n * E.g : createSpinner({ target: targetElement, width: '34px', label: 'Loading..' });\n * ```\n * @param args\n * @private\n */\nexport function createSpinner(args, internalCreateElement) {\n if (!args.target) {\n return;\n }\n var radius;\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = create_spinner_container(args.target, makeElement);\n if (!isNullOrUndefined(args.cssClass)) {\n container.wrap.classList.add(args.cssClass);\n }\n if (!isNullOrUndefined(args.template) || !isNullOrUndefined(spinTemplate)) {\n var template = !isNullOrUndefined(args.template) ? args.template : spinTemplate;\n container.wrap.classList.add(CLS_SPINTEMPLATE);\n replaceContent(container.wrap, template, spinCSSClass);\n }\n else {\n var theme = !isNullOrUndefined(args.type) ? args.type : getTheme(container.wrap);\n var width = !isNullOrUndefined(args.width) ? args.width : undefined;\n radius = calculateRadius(width, theme);\n setTheme(theme, container.wrap, radius, makeElement);\n if (!isNullOrUndefined(args.label)) {\n createLabel(container.inner_wrap, args.label, makeElement);\n }\n }\n container.wrap.classList.add(CLS_HIDESPIN);\n container = null;\n}\nfunction createLabel(container, label, makeElement) {\n var labelEle = makeElement('div', {});\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.textContent = label;\n container.appendChild(labelEle);\n return labelEle;\n}\nfunction createMaterialSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_MATERIALSPIN);\n mat_calculate_attributes(radius, container, 'Material', CLS_MATERIALSPIN);\n}\nfunction createBootstrap4Spinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap4', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_BOOT4SPIN);\n mat_calculate_attributes(radius, container, 'Bootstrap4', CLS_BOOT4SPIN);\n}\nfunction startMatAnimate(container, uniqueID, radius) {\n var globalObject = {};\n var timeOutVar = 0;\n globalTimeOut[uniqueID].timeOut = 0;\n globalObject[uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n var spinnerInfo = { uniqueID: uniqueID, container: container, globalInfo: globalObject, timeOutVar: timeOutVar };\n animateMaterial(spinnerInfo);\n}\nfunction createFabricSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FABRICSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\nfunction createHighContrastSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_HIGHCONTRASTSPIN);\n}\nfunction getTheme(container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n}\nfunction setTheme(theme, container, radius, makeElement) {\n var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n var svg = innerContainer.querySelector('svg');\n if (!isNullOrUndefined(svg)) {\n innerContainer.removeChild(svg);\n }\n switch (theme) {\n case 'Material':\n createMaterialSpinner(innerContainer, radius, makeElement);\n break;\n case 'Fabric':\n createFabricSpinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap':\n createBootstrapSpinner(innerContainer, radius, makeElement);\n break;\n case 'HighContrast':\n createHighContrastSpinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap4':\n createBootstrap4Spinner(innerContainer, radius, makeElement);\n break;\n }\n}\nfunction createBootstrapSpinner(innerContainer, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n create_bootstrap_element(innerContainer, uniqueID, makeElement);\n boot_calculate_attributes(innerContainer, radius);\n}\nfunction create_bootstrap_element(innerContainer, uniqueID, makeElement) {\n var svgBoot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var viewBoxValue = 64;\n var trans = 32;\n var defaultRadius = 2;\n svgBoot.setAttribute('id', uniqueID);\n svgBoot.setAttribute('class', CLS_BOOTSPIN);\n svgBoot.setAttribute('viewBox', '0 0 ' + viewBoxValue + ' ' + viewBoxValue);\n innerContainer.insertBefore(svgBoot, innerContainer.firstChild);\n for (var item = 0; item <= 7; item++) {\n var bootCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n bootCircle.setAttribute('class', CLS_SPINCIRCLE + '_' + item);\n bootCircle.setAttribute('r', defaultRadius + '');\n bootCircle.setAttribute('transform', 'translate(' + trans + ',' + trans + ')');\n svgBoot.appendChild(bootCircle);\n }\n}\nfunction boot_calculate_attributes(innerContainer, radius) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n svg.style.width = svg.style.height = radius + 'px';\n var x = 0;\n var y = 0;\n var rad = 24;\n var startArc = 90;\n for (var item = 0; item <= 7; item++) {\n var start = defineArcPoints(x, y, rad, startArc);\n var circleEle = svg.querySelector('.' + CLS_SPINCIRCLE + '_' + item);\n circleEle.setAttribute('cx', start.x + '');\n circleEle.setAttribute('cy', start.y + '');\n startArc = startArc >= 360 ? 0 : startArc;\n startArc = startArc + 45;\n }\n}\nfunction generateSeries(begin, stop) {\n var series = [];\n var start = begin;\n var end = stop;\n var increment = false;\n var count = 1;\n formSeries(start);\n function formSeries(i) {\n series.push(i);\n if (i !== end || count === 1) {\n if (i <= start && i > 1 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n else if (i === 1) {\n i = 7;\n i = parseFloat((i + 0.2).toFixed(2));\n increment = true;\n }\n else if (i < 8 && increment) {\n i = parseFloat((i + 0.2).toFixed(2));\n if (i === 8) {\n increment = false;\n }\n }\n else if (i <= 8 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n ++count;\n formSeries(i);\n }\n }\n return series;\n}\nfunction animateBootstrap(innerContainer) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var id = svg.getAttribute('id');\n for (var i = 1; i <= 8; i++) {\n var circleEle = (innerContainer.getElementsByClassName('e-path-circle_' +\n (i === 8 ? 0 : i))[0]);\n rotation(circleEle, i, i, generateSeries(i, i), id);\n }\n function rotation(circle, start, end, series, id) {\n var count = 0;\n boot_animate(start);\n function boot_animate(radius) {\n if (globalTimeOut[id].isAnimate) {\n ++count;\n circle.setAttribute('r', radius + '');\n if (count >= series.length) {\n count = 0;\n }\n globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n }\n }\n }\n}\nfunction replaceContent(container, template, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var inner = container.querySelector('.e-spinner-inner');\n inner.innerHTML = template;\n}\nfunction calculateRadius(width, theme) {\n var defaultSize;\n switch (theme) {\n case 'Material':\n defaultSize = DEFT_MAT_WIDTH;\n break;\n case 'Fabric':\n defaultSize = DEFT_FAB_WIDTH;\n break;\n case 'Bootstrap4':\n defaultSize = DEFT_BOOT4_WIDTH;\n break;\n default:\n defaultSize = DEFT_BOOT_WIDTH;\n }\n width = width ? parseFloat(width + '') : defaultSize;\n return theme === 'Bootstrap' ? width : width / 2;\n}\nfunction globalVariables(id, radius, count, previousId) {\n return {\n radius: radius,\n count: count,\n previousId: previousId\n };\n}\nfunction random_generator() {\n var random = '';\n var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 5; i++) {\n random += combine.charAt(Math.floor(Math.random() * combine.length));\n }\n return random;\n}\nfunction create_fabric_element(innerCon, uniqueID, themeClass, makeElement) {\n var svgFabric = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFabric.setAttribute('id', uniqueID);\n svgFabric.setAttribute('class', themeClass);\n var fabricCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n var fabricCircleArc = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCircleArc.setAttribute('class', CLS_SPINARC);\n innerCon.insertBefore(svgFabric, innerCon.firstChild);\n svgFabric.appendChild(fabricCirclePath);\n svgFabric.appendChild(fabricCircleArc);\n}\nfunction create_material_element(innerContainer, uniqueID, makeElement, cls) {\n var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgMaterial.setAttribute('class', cls);\n svgMaterial.setAttribute('id', uniqueID);\n var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n svgMaterial.appendChild(matCirclePath);\n}\nfunction create_spinner_container(target, makeElement) {\n var spinnerContainer = makeElement('div', {});\n spinnerContainer.classList.add(CLS_SPINWRAP);\n var spinnerInnerContainer = makeElement('div', {});\n spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n target.appendChild(spinnerContainer);\n spinnerContainer.appendChild(spinnerInnerContainer);\n return { wrap: spinnerContainer, inner_wrap: spinnerInnerContainer };\n}\nfunction animateMaterial(spinnerInfo) {\n var start = 1;\n var end = 149;\n var duration = 1333;\n var max = 75;\n createCircle(start, end, easeAnimation, duration, spinnerInfo.globalInfo[spinnerInfo.uniqueID].count, max, spinnerInfo);\n spinnerInfo.globalInfo[spinnerInfo.uniqueID].count = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].count % 4;\n}\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n var startTime = new Date().getTime();\n var change = end - start;\n var diameter = getSize((spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2) + '');\n var strokeSize = getStrokeSize(diameter);\n var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n mat_animation(spinnerInfo);\n function mat_animation(spinnerInfo) {\n var currentTime = Math.max(0, Math.min(new Date().getTime() - startTime, duration));\n updatePath(easing(currentTime, start, change, duration), spinnerInfo.container);\n if (id === spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId && currentTime < duration) {\n globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n }\n else {\n animateMaterial(spinnerInfo);\n }\n }\n function updatePath(value, container) {\n if ((!isNullOrUndefined(container.querySelector('svg.e-spin-material')))\n && (!isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle')))) {\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, value, max) + '');\n path.setAttribute('transform', 'rotate(' + (rotate) + ' ' + diameter / 2 + ' ' + diameter / 2 + ')');\n }\n }\n}\nfunction mat_calculate_attributes(radius, container, type, cls) {\n var diameter = radius * 2;\n var svg = container.querySelector('svg.' + cls);\n var path = svg.querySelector('path.e-path-circle');\n var strokeSize = getStrokeSize(diameter);\n var transformOrigin = (diameter / 2) + 'px';\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.width = svg.style.height = diameter + 'px';\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n path.setAttribute('d', drawArc(diameter, strokeSize));\n if (type === 'Material') {\n path.setAttribute('stroke-width', strokeSize + '');\n path.setAttribute('stroke-dasharray', ((diameter - strokeSize) * Math.PI * 0.75) + '');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, 1, 75) + '');\n }\n}\nfunction getSize(value) {\n var parsed = parseFloat(value);\n return parsed;\n}\nfunction drawArc(diameter, strokeSize) {\n var radius = diameter / 2;\n var offset = strokeSize / 2;\n return 'M' + radius + ',' + offset\n + 'A' + (radius - offset) + ',' + (radius - offset) + ' 0 1 1 ' + offset + ',' + radius;\n}\nfunction getStrokeSize(diameter) {\n return 10 / 100 * diameter;\n}\nfunction getDashOffset(diameter, strokeSize, value, max) {\n return (diameter - strokeSize) * Math.PI * ((3 * (max) / 100) - (value / 100));\n}\nfunction easeAnimation(current, start, change, duration) {\n var timestamp = (current /= duration) * current;\n var timecount = timestamp * current;\n return start + change * (6 * timecount * timestamp + -15 * timestamp * timestamp + 10 * timecount);\n}\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n var centerX = radius;\n var centerY = radius;\n var diameter = radius * 2;\n var startArc = 315;\n var endArc = 45;\n var svg = innerConainer.querySelector('.' + trgClass);\n var circle = svg.querySelector('.e-path-circle');\n var path = svg.querySelector('.e-path-arc');\n var transformOrigin = (diameter / 2) + 'px';\n circle.setAttribute('d', defineCircle(centerX, centerY, radius));\n path.setAttribute('d', defineArc(centerX, centerY, radius, startArc, endArc));\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n svg.style.width = svg.style.height = diameter + 'px';\n}\nfunction defineArcPoints(centerX, centerY, radius, angle) {\n var radians = (angle - 90) * Math.PI / 180.0;\n return {\n x: centerX + (radius * Math.cos(radians)),\n y: centerY + (radius * Math.sin(radians))\n };\n}\nfunction defineArc(x, y, radius, startArc, endArc) {\n var start = defineArcPoints(x, y, radius, endArc);\n var end = defineArcPoints(x, y, radius, startArc);\n var d = [\n 'M', start.x, start.y,\n 'A', radius, radius, 0, 0, 0, end.x, end.y\n ].join(' ');\n return d;\n}\nfunction defineCircle(x, y, radius) {\n var d = [\n 'M', x, y,\n 'm', -radius, 0,\n 'a', radius, radius, 0, 1, 0, radius * 2, 0,\n 'a', radius, radius, 0, 1, 0, -radius * 2, 0,\n ].join(' ');\n return d;\n}\n/**\n * Function to show the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function showSpinner(container) {\n showHideSpinner(container, false);\n container = null;\n}\nfunction showHideSpinner(container, isHide) {\n var spinnerWrap;\n if (container) {\n spinnerWrap = container.classList.contains(CLS_SPINWRAP) ? container :\n container.querySelector('.' + CLS_SPINWRAP);\n }\n if (container && spinnerWrap) {\n var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n var spinCheck = void 0;\n spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_HIDESPIN) :\n !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n if (spinCheck) {\n var svgEle = spinnerWrap.querySelector('svg');\n if (isNullOrUndefined(svgEle)) {\n return;\n }\n var id = svgEle.getAttribute('id');\n globalTimeOut[id].isAnimate = !isHide;\n switch (globalTimeOut[id].type) {\n case 'Material':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n break;\n case 'Bootstrap':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n break;\n }\n }\n isHide ? classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]) : classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n container = null;\n }\n}\n/**\n * Function to hide the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function hideSpinner(container) {\n showHideSpinner(container, true);\n container = null;\n}\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : setSpinner({ cssClass: 'custom-css'; type: 'Material' });\n * ```\n * @param args\n * @private\n */\nexport function setSpinner(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.template !== undefined) {\n spinTemplate = args.template;\n if (args.template !== undefined) {\n spinCSSClass = args.cssClass;\n }\n }\n var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n for (var index = 0; index < container.length; index++) {\n ensureTemplate(args.template, container[index], args.type, args.cssClass, makeElement);\n }\n}\nfunction ensureTemplate(template, container, theme, cssClass, makeEle) {\n if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n replaceTheme(container, theme, cssClass, makeEle);\n if (container.classList.contains(CLS_SHOWSPIN)) {\n container.classList.remove(CLS_SHOWSPIN);\n showSpinner(container);\n }\n else {\n container.classList.remove(CLS_HIDESPIN);\n hideSpinner(container);\n }\n }\n else {\n spinTemplate = template;\n if (!isNullOrUndefined(cssClass)) {\n spinCSSClass = cssClass;\n }\n }\n}\nfunction replaceTheme(container, theme, cssClass, makeEle) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var svgElement = container.querySelector('svg');\n var radius = theme === 'Bootstrap' ? parseFloat(svgElement.style.height) : parseFloat(svgElement.style.height) / 2;\n var classNames = svgElement.getAttribute('class');\n var svgClassList = classNames.split(/\\s/);\n if (svgClassList.indexOf('e-spin-material') >= 0) {\n var id = svgElement.getAttribute('id');\n clearTimeout(globalTimeOut[id].timeOut);\n }\n setTheme(theme, container, radius, makeEle);\n}\n"],"sourceRoot":""}