1{"version":3,"sources":["webpack:///./node_modules/core-js/internals/same-value.js","webpack:///./src/views/WebGis.vue?1083","webpack:///./src/components/MapToolbar.vue?e8f1","webpack:///src/components/MapToolbar.vue","webpack:///./src/components/MapToolbar.vue?9694","webpack:///../../../src/components/VGrid/VLayout.ts","webpack:///./src/components/MapToolbar.vue?f0aa","webpack:///./src/components/LeftSidebar.vue?983e","webpack:///./src/components/LayerTree.vue?1907","webpack:///./src/components/LayerTreeNode.vue?f65c","webpack:///src/components/LayerTreeNode.vue","webpack:///./src/components/LayerTreeNode.vue?80c8","webpack:///../../../src/mixins/menuable/index.ts","webpack:///../../../src/components/VMenu/VMenu.ts","webpack:///../../../src/components/VTooltip/VTooltip.ts","webpack:///./src/components/LayerTreeNode.vue?5616","webpack:///src/components/LayerTree.vue","webpack:///./src/components/LayerTree.vue?df48","webpack:///./src/components/LayerTree.vue?7b3e","webpack:///./src/components/IdentifyResults.vue?c057","webpack:///src/components/IdentifyResults.vue","webpack:///./src/components/IdentifyResults.vue?8d92","webpack:///../../../src/components/VDataTable/VSimpleTable.ts","webpack:///./src/components/IdentifyResults.vue","webpack:///src/components/LeftSidebar.vue","webpack:///./src/components/LeftSidebar.vue?10a7","webpack:///../../../src/components/VNavigationDrawer/VNavigationDrawer.ts","webpack:///./src/components/LeftSidebar.vue","webpack:///./src/components/AttributeTable.vue?39ed","webpack:///src/components/AttributeTable.vue","webpack:///./src/components/AttributeTable.vue?632c","webpack:///../../../src/components/VChip/VChip.ts","webpack:///../../../src/components/VChip/index.ts","webpack:///../../../src/components/VMenu/index.ts","webpack:///../../../src/components/VCheckbox/VSimpleCheckbox.ts","webpack:///../../../src/components/VSubheader/VSubheader.ts","webpack:///../../../src/components/VSubheader/index.ts","webpack:///../../../src/components/VSelect/VSelectList.ts","webpack:///../../../src/components/VLabel/VLabel.ts","webpack:///../../../src/components/VLabel/index.ts","webpack:///../../../src/components/VMessages/VMessages.ts","webpack:///../../../src/components/VMessages/index.ts","webpack:///../../../src/mixins/validatable/index.ts","webpack:///../../../src/components/VInput/VInput.ts","webpack:///../../../src/components/VInput/index.ts","webpack:///../../../src/components/VCounter/VCounter.ts","webpack:///../../../src/components/VCounter/index.ts","webpack:///../../../src/mixins/intersectable/index.ts","webpack:///../../../src/components/VTextField/VTextField.ts","webpack:///../../../src/mixins/comparable/index.ts","webpack:///../../../src/mixins/filterable/index.ts","webpack:///../../../src/components/VSelect/VSelect.ts","webpack:///../../../src/components/VAutocomplete/VAutocomplete.ts","webpack:///../../../src/components/VCombobox/VCombobox.ts","webpack:///../../../src/components/VData/VData.ts","webpack:///../../../src/components/VDataIterator/VDataFooter.ts","webpack:///../../../src/components/VDataIterator/VDataIterator.ts","webpack:///../../../../src/components/VDataTable/mixins/header.ts","webpack:///../../../src/components/VDataTable/VDataTableHeaderMobile.ts","webpack:///../../../src/components/VDataTable/VDataTableHeaderDesktop.ts","webpack:///../../src/util/dedupeModelListeners.ts","webpack:///../../src/util/rebuildFunctionalSlots.ts","webpack:///../../../src/components/VDataTable/VDataTableHeader.ts","webpack:///../../../src/components/VDataTable/Row.ts","webpack:///../../../src/components/VDataTable/RowGroup.ts","webpack:///../../../src/components/VDataTable/MobileRow.ts","webpack:///../../../src/components/VDataTable/VDataTable.ts","webpack:///./src/components/AttributeTable.vue?0b91","webpack:///./src/js/WmsSource.js","webpack:///src/views/WebGis.vue","webpack:///./src/views/WebGis.vue?9f19","webpack:///../../../src/components/VAppBar/VAppBarNavIcon.ts","webpack:///./src/views/WebGis.vue?5f2f","webpack:///./node_modules/vuetify-loader/lib/runtime/installDirectives.js","webpack:///./node_modules/core-js/modules/es.object.is.js","webpack:///./src/components/LayerTree.vue?1d29","webpack:///./src/views/WebGis.vue?6431","webpack:///./src/components/MapToolbar.vue?3255","webpack:///./node_modules/leaflet/dist/images/marker-icon-2x.png","webpack:///./node_modules/leaflet/dist/images/marker-icon.png","webpack:///./node_modules/reproject/index.js","webpack:///./node_modules/core-js/modules/es.string.search.js","webpack:///./node_modules/core-js/modules/es.string.ends-with.js","webpack:///./node_modules/proj4/lib/global.js","webpack:///./node_modules/proj4/lib/constants/values.js","webpack:///./node_modules/proj4/lib/constants/PrimeMeridian.js","webpack:///./node_modules/proj4/lib/constants/units.js","webpack:///./node_modules/proj4/lib/match.js","webpack:///./node_modules/proj4/lib/projString.js","webpack:///./node_modules/wkt-parser/parser.js","webpack:///./node_modules/wkt-parser/process.js","webpack:///./node_modules/wkt-parser/index.js","webpack:///./node_modules/proj4/lib/defs.js","webpack:///./node_modules/proj4/lib/parseCode.js","webpack:///./node_modules/proj4/lib/extend.js","webpack:///./node_modules/proj4/lib/common/msfnz.js","webpack:///./node_modules/proj4/lib/common/sign.js","webpack:///./node_modules/proj4/lib/common/adjust_lon.js","webpack:///./node_modules/proj4/lib/common/tsfnz.js","webpack:///./node_modules/proj4/lib/common/phi2z.js","webpack:///./node_modules/proj4/lib/projections/merc.js","webpack:///./node_modules/proj4/lib/projections/longlat.js","webpack:///./node_modules/proj4/lib/projections.js","webpack:///./node_modules/proj4/lib/constants/Ellipsoid.js","webpack:///./node_modules/proj4/lib/deriveConstants.js","webpack:///./node_modules/proj4/lib/constants/Datum.js","webpack:///./node_modules/proj4/lib/datum.js","webpack:///./node_modules/proj4/lib/Proj.js","webpack:///./node_modules/proj4/lib/datumUtils.js","webpack:///./node_modules/proj4/lib/datum_transform.js","webpack:///./node_modules/proj4/lib/adjust_axis.js","webpack:///./node_modules/proj4/lib/common/toPoint.js","webpack:///./node_modules/proj4/lib/checkSanity.js","webpack:///./node_modules/proj4/lib/transform.js","webpack:///./node_modules/proj4/lib/core.js","webpack:///./node_modules/mgrs/mgrs.js","webpack:///./node_modules/proj4/lib/Point.js","webpack:///./node_modules/proj4/lib/common/pj_enfn.js","webpack:///./node_modules/proj4/lib/common/pj_mlfn.js","webpack:///./node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack:///./node_modules/proj4/lib/projections/tmerc.js","webpack:///./node_modules/proj4/lib/common/sinh.js","webpack:///./node_modules/proj4/lib/common/hypot.js","webpack:///./node_modules/proj4/lib/common/log1py.js","webpack:///./node_modules/proj4/lib/common/asinhy.js","webpack:///./node_modules/proj4/lib/common/gatg.js","webpack:///./node_modules/proj4/lib/common/clens.js","webpack:///./node_modules/proj4/lib/common/cosh.js","webpack:///./node_modules/proj4/lib/common/clens_cmplx.js","webpack:///./node_modules/proj4/lib/projections/etmerc.js","webpack:///./node_modules/proj4/lib/common/adjust_zone.js","webpack:///./node_modules/proj4/lib/projections/utm.js","webpack:///./node_modules/proj4/lib/common/srat.js","webpack:///./node_modules/proj4/lib/projections/gauss.js","webpack:///./node_modules/proj4/lib/projections/sterea.js","webpack:///./node_modules/proj4/lib/projections/stere.js","webpack:///./node_modules/proj4/lib/projections/somerc.js","webpack:///./node_modules/proj4/lib/projections/omerc.js","webpack:///./node_modules/proj4/lib/projections/lcc.js","webpack:///./node_modules/proj4/lib/projections/krovak.js","webpack:///./node_modules/proj4/lib/common/mlfn.js","webpack:///./node_modules/proj4/lib/common/e0fn.js","webpack:///./node_modules/proj4/lib/common/e1fn.js","webpack:///./node_modules/proj4/lib/common/e2fn.js","webpack:///./node_modules/proj4/lib/common/e3fn.js","webpack:///./node_modules/proj4/lib/common/gN.js","webpack:///./node_modules/proj4/lib/common/adjust_lat.js","webpack:///./node_modules/proj4/lib/common/imlfn.js","webpack:///./node_modules/proj4/lib/projections/cass.js","webpack:///./node_modules/proj4/lib/common/qsfnz.js","webpack:///./node_modules/proj4/lib/projections/laea.js","webpack:///./node_modules/proj4/lib/common/asinz.js","webpack:///./node_modules/proj4/lib/projections/aea.js","webpack:///./node_modules/proj4/lib/projections/gnom.js","webpack:///./node_modules/proj4/lib/common/iqsfnz.js","webpack:///./node_modules/proj4/lib/projections/cea.js","webpack:///./node_modules/proj4/lib/projections/eqc.js","webpack:///./node_modules/proj4/lib/projections/poly.js","webpack:///./node_modules/proj4/lib/projections/nzmg.js","webpack:///./node_modules/proj4/lib/projections/mill.js","webpack:///./node_modules/proj4/lib/projections/sinu.js","webpack:///./node_modules/proj4/lib/projections/moll.js","webpack:///./node_modules/proj4/lib/projections/eqdc.js","webpack:///./node_modules/proj4/lib/projections/vandg.js","webpack:///./node_modules/proj4/lib/projections/aeqd.js","webpack:///./node_modules/proj4/lib/projections/ortho.js","webpack:///./node_modules/proj4/lib/projections/qsc.js","webpack:///./node_modules/proj4/lib/projections/robin.js","webpack:///./node_modules/proj4/lib/projections/geocent.js","webpack:///./node_modules/proj4/projs.js","webpack:///./node_modules/proj4/lib/index.js","webpack:///./src/components/AttributeTable.vue?4ceb","webpack:///../../../src/components/VDivider/index.ts","webpack:///./node_modules/leaflet/dist/images/marker-shadow.png","webpack:///./src/components/LayerTreeNode.vue?d307"],"names":["module","exports","Object","is","x","y","_vm","this","_h","$createElement","_c","_self","attrs","status","error","length","_e","on","$event","stopPropagation","expandedSidebar","_v","_s","project","title","map","showIdentify","setLayerVisibility","class","attributeTableTypename","activeTool","directives","name","rawName","value","expression","ref","staticStyle","setMap","capabilities","wmsOutputCrsList","includes","baseMap","staticClass","staticRenderFns","zoomIn","zoomOut","active","onIdentifyToolClicked","props","methods","$store","state","computed","component","VBtn","VIcon","VLayout","model","callback","$$v","drawer","activeTab","key","scopedSlots","_u","fn","_g","toggleBaseMap","_l","toc","element","entry","uniqueKey","toggleLayer","toggleGroup","node","tree_id_hash","is_layer","layer_type","children","expanded","visible","preventDefault","showContextMenu","typename","description","child","child_node","showMenu","onMouseLeave","item","onContextMenuOptionClicked","domProps","icon","data","mounted","$emit","commit","console","log","e","clientX","clientY","$nextTick","options","push","baseMixins","mixins","allowOverflow","light","dark","maxWidth","type","Number","default","minWidth","nudgeBottom","nudgeLeft","nudgeRight","nudgeTop","nudgeWidth","offsetOverflow","openOnClick","positionX","positionY","zIndex","absoluteX","absoluteY","activatedBy","activatorFixed","dimensions","activator","top","left","bottom","right","width","height","offsetTop","scrollHeight","offsetLeft","content","hasJustFocused","hasWindow","inputActivator","isContentActive","pageWidth","pageYOffset","stackClass","stackMinZIndex","computedLeft","a","c","activatorLeft","attach","Math","isNaN","parseInt","computedTop","hasActivator","$slots","$scopedSlots","watch","disabled","val","isActive","beforeMount","window","absolutePosition","activate","calcLeft","calcXOverflow","calcTop","calcYOverflow","xOverflow","documentHeight","toTop","contentHeight","totalHeight","isOverflowing","callActivate","callDeactivate","checkForPageYOffset","checkActivatorFixed","el","deactivate","genActivatorListeners","listeners","onClick","getInnerHeight","document","getOffsetLeft","getOffsetTop","getRoundedBoundedClientRect","rect","measure","style","sneakPeek","requestAnimationFrame","cb","startTransition","Promise","resolve","updateDimensions","provide","isInMenu","theme","ClickOutside","Resize","auto","closeOnClick","closeOnContentClick","disableKeys","maxHeight","offsetX","offsetY","openOnHover","origin","transition","Boolean","calculatedTopAuto","defaultOffset","listIndex","resizeTimeout","selectedIndex","tiles","activeTile","calculatedLeft","menuWidth","parseFloat","calculatedMaxHeight","calculatedMaxWidth","calculatedMinWidth","calculatedTop","hasClickableTiles","find","tile","styles","transformOrigin","activeZIndex","next","prev","classList","remove","created","$attrs","hasOwnProperty","calcScrollPosition","$el","$refs","maxScrollTop","calcLeftAuto","calcTopAuto","Array","tileDistanceFromMenuTop","firstTileOffsetTop","changeListIndex","closeConditional","target","contains","genActivatorAttributes","attributes","id","genTransition","genDirectives","handler","include","genContent","role","menuable__content__active","contentClass","click","keydown","onKeyDown","$listeners","getTiles","querySelectorAll","mouseEnterHandler","mouseLeaveHandler","nextTile","prevTile","setTimeout","onResize","clearTimeout","render","arg","h","showLazyContent","root","closeDelay","fixed","openDelay","tag","String","closeDependents","unknown","activatorTop","classes","computedTransition","opacity","setBackgroundColor","VExpandTransition","VList","VListItem","VListItemIcon","VListItemTitle","VMenu","VTooltip","projectId","components","LayerTreeNode","uuidv4","findLayerNode","i","res","findNodeByHash","basemap","setGroupNodeVisibility","groupNode","VCard","VCardText","identifyResults","feature","zoomToFeature","proxy","highlightLayer","clearLayers","addData","setView","getBounds","getCenter","dense","fixedHeader","themeClasses","genWrapper","wrapper","VCardTitle","VCol","VContainer","VProgressLinear","VRow","VSimpleTable","LayerTree","IdentifyResults","currentTab","get","set","newValue","isInNav","Touch","clipped","disableResizeWatcher","disableRouteWatcher","expandOnHover","floating","app","miniVariant","miniVariantWidth","permanent","src","stateless","temporary","touchless","isMouseover","touchArea","applicationProperty","computedMaxHeight","$vuetify","application","computedTransform","computedWidth","isMiniVariant","hasApp","isBottom","isMobile","reactsToClick","reactsToMobile","reactsToResize","reactsToRoute","showOverlay","translate","transform","$route","removeOverlay","calculateTouchArea","parent","parentRect","genAppend","genPosition","genBackground","image","img","VImg","getOpenDependentElements","swipeRight","genListeners","transitionend","resizeEvent","slot","genPrepend","genBorder","init","onRouteChange","swipeLeft","updateApplication","updateMiniVariant","VNavigationDrawer","VTab","VTabItem","VTabs","onCloseButtonClicked","hasSearchError","filterText","searchableFields","filterField","currentPage","sortBy","sortDesc","numberMatched","tableHeaders","loading","tableData","itemsPerPageOptions","itemsPerPageText","keys","wms_layers_map","values","text","field","fieldNames","fieldAliases","aliases","loadData","activeClass","chipGroup","close","closeIcon","draggable","filter","filterIcon","label","link","outlined","pill","textColor","proxyClass","groupClasses","hasClose","isClickable","breakingProps","original","replacement","genFilter","genClose","size","tabindex","color","setTextColor","functional","ripple","indeterminate","indeterminateIcon","onIcon","offIcon","center","mergeData","f","inset","action","hideSelected","items","itemDisabled","itemText","itemValue","noDataText","noFilter","searchInput","selectedItems","parsedItems","tileActiveClass","staticNoDataTile","undefined","mousedown","genTileContent","genAction","VListItemAction","inputValue","input","genDivider","VDivider","genFilteredText","getMaskedCharacters","end","start","genHighlight","middle","genHeader","index","genTile","hasItem","getDisabled","_uid","scopedSlot","needsTile","innerHTML","getText","indexOf","getValue","itemsLength","absolute","focused","for","ctx","position","genChildren","genMessage","message","errorCount","errorMessages","messages","readonly","rules","success","successMessages","validateOnBlur","required","errorBucket","hasColor","hasFocused","hasInput","isFocused","isResetting","lazyValue","valid","computedColor","isDark","hasError","internalErrorMessages","hasSuccess","internalSuccessMessages","externalError","hasMessages","validationTarget","hasState","shouldValidate","genInternalMessages","internalMessages","internalValue","isDisabled","form","isInteractive","isReadonly","validations","slice","validationState","newVal","deep","register","beforeDestroy","unregister","reset","resetValidation","validate","force","rule","inheritAttrs","appendIcon","backgroundColor","hideDetails","hint","persistentHint","prependIcon","hasMouseDown","computedId","hasDetails","messagesToDisplay","hasHint","hasLabel","isDirty","isLabelActive","validation","validationResult","showDetails","beforeCreate","$options","genControl","genDefaultSlot","genIcon","extraData","eventName","hasListener","listeners$","mouseup","genInputSlot","onMouseUp","genLabel","genMessages","genSlot","genPrependSlot","genAppendSlot","onMouseDown","max","isGreater","onObserve","destroyed","onVisible","dirtyTypes","appendOuterIcon","autofocus","clearable","clearIcon","counter","counterValue","filled","flat","fullWidth","placeholder","prefix","prependInnerIcon","reverse","rounded","shaped","singleLine","solo","soloInverted","suffix","badInput","labelWidth","prefixWidth","prependWidth","initialValue","isBooted","isClearing","computedCounterValue","hasCounter","isEnclosed","isSingle","isSolo","labelPosition","offset","labelValue","rtl","showLabel","focus","blur","clearableCallback","genPrependInnerSlot","genIconSlot","prepend","genClearIcon","genCounter","attrs$","genFieldset","genLegend","span","genInput","messagesNode","counterNode","genTextFieldSlot","genAffix","onBlur","onFocus","onInput","setLabelWidth","scrollWidth","setPrefixWidth","setPrependWidth","tryAutofocus","updateValue","valueComparator","defaultMenuProps","cacheItems","chips","deletableChips","disableLookup","eager","itemColor","menuProps","multiple","openOnClear","returnObject","smallChips","cachedItems","menuIsBooted","isMenuActive","lastItem","keyboardLookupPrefix","keyboardLookupLastTime","allItems","filterDuplicates","concat","computedItems","computedOwns","dynamicHeight","hasChips","hasSlot","listData","scopeId","$vnode","context","lang","t","select","selectItem","staticList","VSelectList","virtualizedItems","$_menuProps","menuCanShow","normalisedProps","split","acc","p","immediate","activateMenu","getContent","uniqueValues","arr","findExistingIndex","menu","genChipSelection","small","JSON","genCommaSelection","last","selections","autocomplete","keypress","onKeyPress","genHiddenInput","genList","genListWithSlot","slots","slotName","genMenu","scroll","onScroll","genSelections","genSelection","genSlotSelection","selection","selected","getMenuIndex","onChipInput","setValue","isAppendInner","onEscDown","KEYBOARD_LOOKUP_THRESHOLD","now","performance","findIndex","keyCode","onUpDown","onTabDown","onSpaceDown","onMenuActiveChange","showMoreItems","scrollTop","setMenuIndex","setSelectedItems","v","oldValue","appendInner","autoSelectFirst","queryText","hideNoData","lazySearch","selectedValues","hasDisplayedItems","filteredItems","some","currentRange","selectedItem","internalSearch","isAnyValueAllowed","searchIsDirty","isSearching","oldVal","onFilteredItemsChanged","onInternalSearchChanged","updateMenuDimensions","changeSelectedIndex","deleteCurrentItem","curIndex","curItem","lastIndex","nextIndex","nextItem","setSearch","updateSelf","onCopy","currentItem","currentItemText","event","delimiters","editingIndex","delimiter","d","chip","dblclick","onEnterDown","selectionStart","updateEditing","updateCombobox","isUsingSlot","updateTags","menuIndex","onPaste","pastedItemText","customSort","mustSort","multiSort","page","itemsPerPage","groupBy","groupDesc","customGroup","locale","disableSort","disablePagination","disableFiltering","search","customFilter","serverItemsLength","internalOptions","sortDiff","groupDiff","pageCount","pageStart","pageStop","isGrouped","pagination","sortItems","paginateItems","groupedItems","groupItems","scopedProps","sort","sortArray","group","updateOptions","originalItemsLength","computedOptions","toggle","by","oldBy","desc","oldDesc","byIndex","k","s","prevIcon","nextIcon","firstIcon","lastIcon","itemsPerPageAllText","showFirstLastPage","showCurrentPage","disableItemsPerPage","pageText","disableNextPageIcon","computedDataItemsPerPageOptions","option","onFirstPage","onPreviousPage","onNextPage","onLastPage","onChangeItemsPerPage","genDataItemsPerPageOption","genItemsPerPageSelect","computedIPPO","ippo","genPaginationInfo","genIcons","before","after","VData","itemKey","singleSelect","mobileBreakpoint","singleExpand","noResultsText","loadingText","hideDefaultFooter","footerProps","selectableKey","expansion","internalCurrentItems","everyItem","selectableItems","every","someItems","sanitizedFooterProps","removedProps","prop","toggleSelectAll","isSelectable","isSelected","emit","old","isExpanded","expand","createItemProps","genEmptyWrapper","genEmpty","noData","filteredItemsLength","noResults","genItems","empty","genFooter","genDefaultScopedSlot","outerProps","headers","sortIcon","showGroupBy","genSelectAll","genSortIcon","sortByText","genSortChip","sortIndex","beingSorted","isDesc","sortable","asc","genSortSelect","change","header","sortHeaders","th","tr","genGroupByToggle","getAria","$t","ariaSort","ariaLabel","scope","mobile","dedupeModelListeners","VDataTableHeaderMobile","VDataTableHeaderDesktop","computedSlots","columns","regularSlot","textAlign","divider","headerClass","summaryClass","hideDefaultHeader","mobileRowChildren","filterFn","searchTableItems","matchesColumnFilters","headersWithCustomFilters","matchesSearchTerm","headersWithoutCustomFilters","showSelect","showExpand","caption","headerProps","calculateWidths","headersLength","expandIcon","itemClass","loaderHeight","internalGroupBy","openCache","widths","computedHeaders","defaultHeader","colspanAttrs","colspan","columnSorters","reduce","sanitizedHeaderProps","computedItemsPerPage","firstOption","calcWidths","customFilterWithColumns","customSortWithHeaders","VDataIterator","genCaption","genColgroup","genLoading","genHeaders","genGroupedRows","genRows","genDefaultGroupedRow","isOpen","toggleFn","removeFn","column","RowGroup","genScopedRows","genDefaultRows","rows","genDefaultExpandedRow","headerRow","genDefaultSimpleRow","expandedRow","MobileRow","contextmenu","genBody","body","genFooters","simpleProps","proxySlot","VCombobox","VDataTable","VSpacer","VTextField","WmsSource","WMS","Source","extend","identify","evt","layers","getIdentifyLayers","getFeatureInfo","containerPoint","latlng","showFeatureInfo","createOverlay","untiled","overlayOptions","opt","overlay","_url","tileLayer","point","params","getFeatureInfoParams","url","L","Util","getParamString","done","result","hideWaiting","parseFeatureInfo","call","showWaiting","ajax","info","wmsParams","_overlay","updateWmsParams","_map","join","infoParams","request","query_layers","X","round","Y","info_format","WITH_GEOMETRY","source","iconRetinaUrl","iconUrl","shadowUrl","_refocusOnMap","LMap","LTileLayer","MapToolbar","Error","LeftSidebar","AttributeTable","wms_source","projects","tocs","initializeMap","initializeToc","dispatch","mapObject","loadMap","getOrderedLayerTypenames","forEach","_subLayers","refreshOverlay","_onResize","nodes","layer","symbols","removeSubLayer","getLayer","new_sub_layers","findLayerNodeByTypename","initial_extent","west","south","east","north","jl","fitBounds","tileSize","transparent","format","dpi","devicePixelRatio","onGetFeatureInfo","onGetFeatureInfoStarted","onGetFeatureInfoParamsEnded","onError","that","llmap","parse","queryable","layerList","_getLayers","defaultSlot","VApp","VAppBar","VAppBarNavIcon","VFooter","VMain","VOverlay","VProgressCircular","VToolbarTitle","VToolbar","extendOptions","$","stat","proj4","isXY","list","traverseCoords","coordinates","coord","clone","obj","copy","constructor","attr","traverseGeoJson","geometryCb","nodeCb","geojson","r","self","bind","geometry","features","geometries","detectCrs","projs","crs","crsInfo","properties","code","stringify","determineCrs","Proj","calcBbox","min","MAX_VALUE","_gj","xy","reproject","from","to","transformFunc","forward","coords","transformed","transformGeometryCoords","gj","transformBbox","bbox","toWgs84","WGS84","fixRegExpWellKnownSymbolLogic","anObject","requireObjectCoercible","sameValue","regExpExec","SEARCH","nativeSearch","maybeCallNative","regexp","O","searcher","RegExp","rx","S","previousLastIndex","getOwnPropertyDescriptor","toLength","notARegExp","correctIsRegExpLogic","IS_PURE","nativeEndsWith","endsWith","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","descriptor","prototype","writable","proto","forced","searchString","endPosition","arguments","len","defs","GOOGLE","PJD_3PARAM","PJD_7PARAM","PJD_WGS84","PJD_NODATUM","SEC_TO_RAD","HALF_PI","PI","SIXTH","RA4","RA6","EPSLN","D2R","R2D","FORTPI","TWO_PI","SPI","ft","to_meter","ignoredChar","match","testkey","processedKey","lkey","toLowerCase","replace","paramName","paramVal","paramOutname","paramObj","defData","trim","proj","datum","rf","lat_0","lat0","lat_1","lat1","lat_2","lat2","lat_ts","lon_0","long0","lon_1","long1","lon_2","long2","alpha","lonc","longc","x_0","x0","y_0","y0","k_0","k0","b","r_a","R_A","zone","utmSouth","towgs84","datum_params","units","unit","from_greenwich","pm","nadgrids","datumCode","axis","legalAxis","substr","NEUTRAL","KEYWORD","NUMBER","QUOTED","AFTERQUOTE","ENDED","whitespace","latin","keyword","endThings","digets","Parser","level","place","stack","currentObject","parseString","txt","parser","output","mapit","isArray","unshift","thing","out","newObj","sExpr","shift","convert","readCharicter","char","test","neutral","quoted","afterquote","number","word","afterItem","pop","newObjects","rename","outName","inName","d2r","cleanWKT","wkt","projName","local","PROJECTION","AXIS","axisOrder","ii","UNIT","DATUM","SPHEROID","geogcs","GEOGCS","toMeter","ratio","sphere","ellps","TOWGS84","isFinite","renamer","lisp","def","charAt","apply","EPSG","ESRI","IAU2000","global","testObj","testDef","codeWords","testWKT","codes","checkMercator","auth","checkProjStr","ext","testProj","maybeProjStr","property","destination","con","eccent","sinphi","cosphi","sqrt","abs","sign","com","pow","tan","phi","dphi","eccnth","atan","ts","sin","es","cos","msfnz","lon","lat","adjust_lon","tsfnz","inverse","exp","phi2z","names","identity","pt","merc","longlat","projStore","add","n","ellipseName","eccentricity","a2","b2","ep2","ellipse","datum_type","wgs84","datumName","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","osni52","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72","Projection","srsCode","json","parseCode","ourProj","projections","datumDef","sphere_","ecc","datumObj","compareDatums","dest","geodeticToGeocentric","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","z","Infinity","geocentricToGeodetic","P","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","iter","genau","genau2","maxiter","Z","atan2","geocentricToWgs84","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","geocentricFromWgs84","x_tmp","y_tmp","z_tmp","checkParams","xin","yin","zin","denorm","array","m","checkCoord","num","TypeError","checkNotWGS","toPoint","checkSanity","adjust_axis","datum_transform","transformer","transformedArray","NaN","splice","checkProj","oProj","fromProj","toProj","single","NUM_100K_SETS","SET_ORIGIN_COLUMN_LETTERS","SET_ORIGIN_ROW_LETTERS","I","ll","accuracy","encode","LLtoUTM","mgrs","UTMtoLL","decode","toUpperCase","degToRad","deg","radToDeg","rad","LongOrigin","eccPrimeSquared","N","T","C","A","M","LongOriginRad","ZoneNumber","Lat","Long","eccSquared","LatRad","LongRad","floor","UTMEasting","UTMNorthing","northing","easting","zoneNumber","zoneLetter","getLetterDesignator","utm","N1","T1","C1","R1","D","mu","phi1Rad","e1","topRight","LetterDesignator","seasting","snorthing","get100kID","setParm","get100kSetForZone","setColumn","setRow","getLetter100kID","row","parm","colOrigin","charCodeAt","rowOrigin","colInt","rowInt","rollover","twoLetter","fromCharCode","mgrsString","testChar","hunK","sb","substring","east100k","getEastingFromChar","north100k","getNorthingFromChar","getMinNorthing","remainder","accuracyBonus","sepEastingString","sepNorthingString","sep","sepEasting","sepNorthing","curCol","eastingValue","rewindMarker","curRow","northingValue","Point","warn","fromMGRS","mgrsStr","toMGRS","C00","C02","C04","C06","C08","C22","C44","C46","C48","C66","C68","C88","en","cphi","sphi","MAX_ITER","pj_mlfn","pj_enfn","ml0","delta_lon","sin_phi","cos_phi","al","als","cs","tq","ml","acos","pj_inv_mlfn","tan_phi","ds","g","temp","asin","log1py","hypot","cos_2B","B","pp","h1","h2","hr","arg_r","hr1","hr2","hi2","sin_arg_r","cos_arg_r","sinh_arg_i","sinh","arg_i","cosh_arg_i","cosh","j","hi1","hi","cgb","cbg","utg","gtu","np","Qn","gatg","Zb","clens","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","asinhy","tmp","clens_cmplx","dependsOn","adjust_zone","etmerc","esinp","rc","phic0","ratexp","K","srat","DEL_TOL","gauss","sinc0","cosc0","R2","sinc","cosc","cosl","rho","ssfn_","phit","eccen","coslat0","sinlat0","cons","ms1","X0","cosX0","sinX0","sinX","cosX","rh","sinlat","coslat","dlon","ce","Chi","phy0","lambda0","sinPhy0","semiMajorAxis","invF","flattening","e2","R","b0","k1","k2","k3","Sa1","Sa2","rotI","rotB","lambda","phy","prevPhy","iteration","no_off","no_rot","bl","fl","gl","t0","dl","t1","t2","hl","pl","dlon12","dlon10","gamma0","uc","us","vs","ql","sl","tl","vl","ul","POSITIVE_INFINITY","qp","sp","tp","vp","up","sin1","cos1","ts1","sin2","cos2","ms2","ts2","ts0","ns","f0","rh1","theta","s45","s90","fi0","alfa","uq","u0","n0","s0","ro0","ad","gfi","u","deltav","eps","ro","czech","fi1","ok","e0","e3","e0fn","e1fn","e2fn","e3fn","mlfn","lam","nl","gN","asq","cl","dd","ml1","phi1","imlfn","nl1","rl1","tl1","dsq","adjust_lat","S_POLE","N_POLE","EQUIT","OBLIQ","mode","qsfnz","mmf","apa","authset","rq","xmf","ymf","sinb1","cosb1","sinph0","cosph0","coslam","sinlam","q","sinb","cosb","cCe","sCe","ab","cosz","sinz","authlat","P00","P01","P02","P10","P11","P20","APA","beta","sin_po","cos_po","qs1","qs2","t3","qs0","ns0","qs","phi1z","asinz","eccnts","sin_p14","cos_p14","infinity_dist","coslon","ksp","iqsfnz","dlat","tanphi","mln","mlnp","ma","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_re1","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_re1","z_n_im1","delta_x","delta_y","z_n_re","z_n_im","iterations","num_re","num_im","den_re","den_im","den2","d_psi_n","C_y","C_x","V","delta_theta","ml2","sinth","costh","gsq","msq","xx","yy","xys","c1","c2","c3","a1","m1","th1","sin_p12","cos_p12","Mlp","Ml","Nl1","Nl","psi","Az","G","H","GH","Hs","kp","cos_c","s2","s3","s4","s5","cosAz","Ee","F","sinpsi","FACE_ENUM","FRONT","RIGHT","BACK","LEFT","TOP","BOTTOM","AREA_ENUM","AREA_0","AREA_1","AREA_2","AREA_3","face","one_minus_f","one_minus_f_squared","area","sinlon","qsc_shift_lon_origin","qsc_fwd_equat_face_theta","nu","cosmu","tannu","tantheta","invert_sign","xa","lp","slon","COEFS_X","COEFS_Y","FXC","FYC","RC1","NODES","poly3_val","coefs","poly3_der","newton_rapshon","f_df","max_err","iters","upd","tmerc","sterea","stere","somerc","omerc","lcc","krovak","cass","laea","aea","gnom","cea","eqc","poly","nzmg","mill","sinu","moll","eqdc","vandg","aeqd","ortho","qsc","robin","geocent","defaultDatum","version"],"mappings":"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","file":"js/chunk-5cedae10.b1aed77d.js","sourcesContent":["// `SameValue` abstract operation\n// https://tc39.github.io/ecma262/#sec-samevalue\nmodule.exports = Object.is || function is(x, y) {\n  // eslint-disable-next-line no-self-compare\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',{attrs:{\"id\":\"project\"}},[(_vm.status == \"loading\" && _vm.error.length == 0)?_c('v-overlay',{attrs:{\"light\":\"\"}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"color\":\"lime\",\"size\":\"64\"}})],1):_vm._e(),(_vm.error.length > 0)?_c('Error',{attrs:{\"error\":_vm.error}}):[_c('v-app-bar',{attrs:{\"app\":\"\",\"dense\":\"\",\"collapse-on-scroll\":\"\",\"clipped-left\":\"\",\"color\":\"green\",\"dark\":\"\"}},[_c('v-app-bar-nav-icon',{on:{\"click\":function($event){$event.stopPropagation();_vm.expandedSidebar = !_vm.expandedSidebar}}}),(_vm.project)?_c('v-toolbar-title',[_vm._v(_vm._s(_vm.project.title))]):_vm._e(),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\",\"title\":\"Home Page\",\"to\":\"/\"}},[_c('v-icon',[_vm._v(\"mdi-home-circle\")])],1)],1),_c('LeftSidebar',{attrs:{\"map\":_vm.map,\"project\":_vm.project,\"drawer\":_vm.expandedSidebar,\"showIdentify\":_vm.showIdentify},on:{\"setLayerVisibility\":_vm.setLayerVisibility}}),_c('v-main',{class:_vm.attributeTableTypename ? \"show-table\" : ''},[_c('v-container',{class:\"fill-height activetool-\" + _vm.activeTool,attrs:{\"id\":\"map\",\"fluid\":\"\"}},[_c('v-layout',[_c('l-map',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.onResize),expression:\"onResize\"}],ref:\"map\",staticStyle:{\"z-index\":\"0\"},on:{\"ready\":_vm.setMap}},[(\n                _vm.project &&\n                _vm.project.capabilities.wmsOutputCrsList.includes('EPSG:3857')\n              )?_c('l-tile-layer',{attrs:{\"visible\":_vm.baseMap == 'openstreetmap',\"url\":\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\",\"attribution\":\"&copy; <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors\"}}):_vm._e()],1)],1)],1)],1),(_vm.attributeTableTypename)?_c('AttributeTable',{class:_vm.expandedSidebar ? 'mb-4 attributetable-small' : 'mb-4',attrs:{\"project\":_vm.project,\"map\":this.map}}):_vm._e(),_c('MapToolbar',{staticClass:\"map-toolbar\",attrs:{\"map\":_vm.map,\"project\":_vm.project}}),_c('v-footer',{attrs:{\"color\":\"lime\",\"app\":\"\"}},[_vm._v(\" Hand crafted with \"),_c('v-icon',{attrs:{\"color\":\"red\"}},[_vm._v(\"mdi-heart\")]),_vm._v(\"by \"),_c('a',{attrs:{\"href\":\"https://www.qcooperative.net\",\"target\":\"_blank\"}},[_vm._v(\"QCooperative\")])],1)]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-layout',{attrs:{\"column\":\"\"}},[_c('v-btn',{staticClass:\"btn-fix\",attrs:{\"dark\":\"\",\"fab\":\"\",\"small\":\"\",\"color\":\"orange\"},on:{\"click\":function($event){return _vm.map.zoomIn()}}},[_c('v-icon',[_vm._v(\"mdi-plus\")])],1),_c('v-btn',{staticClass:\"btn-fix mt-1\",attrs:{\"dark\":\"\",\"fab\":\"\",\"small\":\"\",\"color\":\"orange\"},on:{\"click\":function($event){return _vm.map.zoomOut()}}},[_c('v-icon',[_vm._v(\"mdi-minus\")])],1),_c('v-btn',{staticClass:\"btn-fix mt-3\",class:{ active: _vm.activeTool == \"identify\"},attrs:{\"depressed\":_vm.activeTool == \"identify\",\"dark\":\"\",\"fab\":\"\",\"small\":\"\",\"color\":\"blue\"},on:{\"click\":function($event){return _vm.onIdentifyToolClicked()}}},[_c('v-icon',[_vm._v(\"mdi-information-outline\")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }"," /**\n  *  Map toolbar\n  *\n  *  Author:    elpaso@itopen.it\n  *  Date:      2020-06-30\n  *  Copyright: Copyright 2020, ItOpen\n  *\n  *  This program is free software; you can redistribute it and/or modify\n  *  it under the terms of the GNU General Public License as published by\n  *  the Free Software Foundation; either version 2 of the License, or\n  *  (at your option) any later version.\n  *\n  */\n <template>\n  <!--v-toolbar light floating-->\n  <v-layout column>\n    <v-btn class=\"btn-fix\" dark fab small @click=\"map.zoomIn()\" color=\"orange\">\n      <v-icon>mdi-plus</v-icon>\n    </v-btn>\n    <v-btn class=\"btn-fix mt-1\" dark fab small @click=\"map.zoomOut()\" color=\"orange\">\n      <v-icon>mdi-minus</v-icon>\n    </v-btn>\n    <v-btn\n      class=\"btn-fix mt-3\"\n      v-bind:class=\"{ active: activeTool == `identify`}\"\n      :depressed=\"activeTool == `identify`\"\n      dark\n      fab\n      small\n      color=\"blue\"\n      @click=\"onIdentifyToolClicked()\"\n    >\n      <v-icon>mdi-information-outline</v-icon>\n    </v-btn>\n    <!-- not yet implemented:\n    v-btn class=\"btn-fix mt-1\" dark fab small @click=\"map._onResize()\" color=\"blue\">\n      <v-icon>mdi-selection-drag</v-icon>\n    </v-btn-->\n  </v-layout>\n  <!--/v-toolbar-->\n</template>\n\n<style lang=\"scss\" scoped>\n</style>\n\n<script>\nexport default {\n  name: \"MapToolbar\",\n  props: {\n    map: Object\n  },\n  methods: {\n    onIdentifyToolClicked() {\n      this.$store.state.activeTool =\n        this.activeTool == \"identify\" ? \"\" : \"identify\";\n      //console.log(this.$store.state.activeTool);\n    }\n  },\n  computed: {\n    activeTool() {\n      return this.$store.state.activeTool;\n    }\n  }\n};\n</script>\n\n<style scoped lang=\"scss\">\n:not(.active).btn-fix:focus::before {\n  opacity: 0 !important;\n}\n.active::before {\n  opacity: 0.24 !important;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapToolbar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapToolbar.vue?vue&type=script&lang=js&\"","import './_grid.sass'\n\nimport Grid from './grid'\n\nexport default Grid('layout')\n","import { render, staticRenderFns } from \"./MapToolbar.vue?vue&type=template&id=2fb0ba75&scoped=true&\"\nimport script from \"./MapToolbar.vue?vue&type=script&lang=js&\"\nexport * from \"./MapToolbar.vue?vue&type=script&lang=js&\"\nimport style1 from \"./MapToolbar.vue?vue&type=style&index=1&id=2fb0ba75&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"2fb0ba75\",\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VIcon,VLayout})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"absolute\":\"\",\"hide-overlay\":\"\",\"stateless\":\"\",\"width\":\"300px\"},model:{value:(_vm.drawer),callback:function ($$v) {_vm.drawer=$$v},expression:\"drawer\"}},[_c('v-tabs',{staticClass:\"mt-12 mb-10\",attrs:{\"grow\":\"\"},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_c('v-tab',{key:\"0\"},[_vm._v(\"Legend\")]),(_vm.showIdentify)?_c('v-tab',{key:\"1\"},[_vm._v(\"Results\")]):_vm._e(),_c('v-tab-item',{key:\"0\"},[_c('LayerTree',{attrs:{\"project\":_vm.project},on:{\"setLayerVisibility\":_vm.setLayerVisibility}})],1),(_vm.showIdentify)?_c('v-tab-item',{key:\"1\"},[_c('IdentifyResults',{attrs:{\"map\":_vm.map}})],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.project)?_c('v-card',{staticClass:\"mx-auto layertree-container\",attrs:{\"flat\":\"\"}},[_c('v-card-text',[_c('div',{staticClass:\"base-map\"},[_c('div',{staticClass:\"v-treeview-node\"},[_c('v-icon',{attrs:{\"color\":\"light-green lighten-3\"}},[_vm._v(\"mdi-checkerboard\")]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.toggleBaseMap('openstreetmap')}}},on),[_c('v-icon',[_vm._v(\"mdi-checkbox-\"+_vm._s(_vm.baseMap == \"openstreetmap\" ? \"marked\" : \"blank-outline\"))])],1)]}}],null,false,1060783928)},[_vm._v(\" Toggle base map visibility \")]),_c('span',{staticClass:\"group-title\"},[_vm._v(\"OpenStreetMap\")])],1)]),_vm._l((_vm.project.toc.children),function(element,entry){return _c('div',{key:_vm.uniqueKey(entry),attrs:{\"id\":\"layertree\"}},[_c('LayerTreeNode',{attrs:{\"node\":element},on:{\"toggleLayer\":_vm.toggleLayer,\"toggleGroup\":_vm.toggleGroup}})],1)})],2)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":_vm.node.tree_id_hash}},[(_vm.node.is_layer && _vm.node.layer_type == 'vector')?_c('div',{staticClass:\"v-treeview-node\"},[_c('div',{staticClass:\"node-title\"},[(_vm.node.children.length)?_c('v-icon',{attrs:{\"data-toggle\":\"collapse\",\"aria-expanded\":_vm.node.expanded ? 'true' : 'false',\"aria-controls\":\"'node-' + node.tree_id_hash\"},on:{\"click\":function($event){_vm.node.expanded = !_vm.node.expanded}}},[_vm._v(\"mdi-menu-\"+_vm._s(_vm.node.expanded ? \"down\" : \"right\"))]):_vm._e(),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.toggleLayer(_vm.node.tree_id_hash)}}},on),[_c('v-icon',[_vm._v(\"mdi-checkbox-\"+_vm._s(_vm.node.visible ? \"marked\" : \"blank-outline\"))])],1)]}}],null,false,242933132)},[_vm._v(\" Toggle layer visibility \")]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('span',_vm._g({staticClass:\"group-title\",on:{\"click\":function($event){_vm.node.expanded = !_vm.node.expanded},\"contextmenu\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.showContextMenu($event)}}},on),[_vm._v(_vm._s(_vm.node.title))])]}}],null,false,138915419)},[_c('div',[_vm._v(\" \"+_vm._s(_vm.node.title)+\" \"),_c('i',[_vm._v(\"(\"+_vm._s(_vm.node.typename)+\")\")])]),(_vm.node.description)?_c('div',[_vm._v(_vm._s(_vm.node.description))]):_vm._e()])],1),(_vm.node.layer_type == 'vector' && _vm.node.children.length)?[_c('v-expand-transition',[(_vm.node.expanded)?_c('div',{staticClass:\"vector-legend\",on:{\"contextmenu\":function($event){$event.preventDefault();$event.stopPropagation();return (function () {})($event)}}},_vm._l((_vm.node.children),function(child){return _c('div',{key:child.title,staticClass:\"v-treeview-node layer-legend\",attrs:{\"id\":'node-' + _vm.node.tree_id_hash,\"aria-expanded\":_vm.node.expanded ? 'true' : 'false'}},[_c('div',{staticClass:\"v-treeview-node vector-legend-entry\"},[(child.icon)?_c('img',{staticClass:\"symbol\",attrs:{\"src\":(\"data:image/png;base64,\" + (child.icon))}}):_c('span',{staticClass:\"symbol\"}),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('span',_vm._g({staticClass:\"vector-legend-entry-label\"},on),[_vm._v(_vm._s(child.title))])]}}],null,true)},[_c('div',[_vm._v(_vm._s(child.title))])])],1)])}),0):_vm._e()])]:_vm._e()],2):_c('div',[(_vm.node.layer_type != 'raster')?_c('v-icon',{on:{\"click\":function($event){_vm.node.expanded = !_vm.node.expanded}}},[_vm._v(\"mdi-menu-\"+_vm._s(_vm.node.expanded ? \"down\" : \"right\"))]):_c('v-icon',{attrs:{\"color\":\"light-green lighten-3\"}},[_vm._v(\"mdi-checkerboard\")]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.toggleGroup(_vm.node.tree_id_hash)}}},on),[_c('v-icon',[_vm._v(\"mdi-checkbox-\"+_vm._s(_vm.node.visible ? \"marked\" : \"blank-outline\"))])],1)]}}])},[_vm._v(\" Toggle group visibility \")]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('span',_vm._g({staticClass:\"group-title\",on:{\"click\":function($event){_vm.node.expanded = !_vm.node.expanded},\"contextmenu\":function($event){$event.preventDefault();$event.stopPropagation();return (function () {})($event)}}},on),[_vm._v(_vm._s(_vm.node.title))])]}}])},[_c('div',[_vm._v(_vm._s(_vm.node.title))]),(_vm.node.description)?_c('div',[_vm._v(_vm._s(_vm.node.description))]):_vm._e()]),_c('v-expand-transition',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.node.expanded),expression:\"node.expanded\"}],class:\"group-container group-father-of-\" + _vm.node.children.length,attrs:{\"id\":'node-' + _vm.node.tree_id_hash}},_vm._l((_vm.node.children),function(child_node){return _c('LayerTreeNode',{key:child_node.tree_id_hash,attrs:{\"node\":child_node},on:{\"toggleLayer\":_vm.toggleLayer,\"toggleGroup\":_vm.toggleGroup}})}),1)])],1),_c('v-menu',{attrs:{\"value\":_vm.showMenu,\"close-on-content-click\":true,\"close-on-click\":false,\"position-x\":_vm.x,\"position-y\":_vm.y,\"absolute\":\"\",\"offset-y\":\"\"}},[_c('div',{on:{\"mouseleave\":_vm.onMouseLeave}},[_c('v-list',_vm._l((_vm.options),function(item){return _c('v-list-item',{key:item.name,on:{\"click\":function($event){return _vm.onContextMenuOptionClicked(item.name, _vm.node.typename)}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s(item.icon)}})],1),_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)}),1)],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n *  LayerTreeNode\n *\n * Author:    elpaso@itopen.it\n * Date:      2020-06-30\n * Copyright: Copyright 2020, ItOpen\n *\n *  This program is free software; you can redistribute it and/or modify\n *  it under the terms of the GNU General Public License as published by\n *  the Free Software Foundation; either version 2 of the License, or\n *  (at your option) any later version.\n *\n */\n<template>\n  <div :id=\"node.tree_id_hash\">\n    <div\n      class=\"v-treeview-node\"\n      v-if=\"node.is_layer && node.layer_type == 'vector'\"\n    >\n      <div class=\"node-title\">\n        <v-icon\n          data-toggle=\"collapse\"\n          :aria-expanded=\"node.expanded ? 'true' : 'false'\"\n          aria-controls=\"'node-' + node.tree_id_hash\"\n          @click=\"node.expanded = !node.expanded\"\n          v-if=\"node.children.length\"\n          >mdi-menu-{{ node.expanded ? `down` : `right` }}</v-icon\n        >\n        <v-tooltip top>\n          <template v-slot:activator=\"{ on }\">\n            <v-btn v-on=\"on\" icon @click=\"toggleLayer(node.tree_id_hash)\">\n              <v-icon\n                >mdi-checkbox-{{\n                  node.visible ? `marked` : `blank-outline`\n                }}</v-icon\n              >\n            </v-btn>\n          </template>\n          Toggle layer visibility\n        </v-tooltip>\n        <v-tooltip top>\n          <template v-slot:activator=\"{ on }\">\n            <span\n              v-on=\"on\"\n              class=\"group-title\"\n              @click=\"node.expanded = !node.expanded\"\n              @contextmenu.prevent.stop=\"showContextMenu($event)\"\n              >{{ node.title }}</span\n            >\n          </template>\n          <div>\n            {{ node.title }}\n            <i>({{ node.typename }})</i>\n          </div>\n          <div v-if=\"node.description\">{{ node.description }}</div>\n        </v-tooltip>\n      </div>\n\n      <template v-if=\"node.layer_type == 'vector' && node.children.length\">\n        <v-expand-transition>\n          <div\n            class=\"vector-legend\"\n            v-if=\"node.expanded\"\n            @contextmenu.prevent.stop=\"function () {}\"\n          >\n            <div\n              :id=\"'node-' + node.tree_id_hash\"\n              class=\"v-treeview-node layer-legend\"\n              v-for=\"child in node.children\"\n              :key=\"child.title\"\n              :aria-expanded=\"node.expanded ? 'true' : 'false'\"\n            >\n              <div class=\"v-treeview-node vector-legend-entry\">\n                <img\n                  v-if=\"child.icon\"\n                  class=\"symbol\"\n                  :src=\"`data:image/png;base64,${child.icon}`\"\n                />\n                <span v-else class=\"symbol\" />\n                <v-tooltip top>\n                  <template v-slot:activator=\"{ on }\">\n                    <span class=\"vector-legend-entry-label\" v-on=\"on\">{{\n                      child.title\n                    }}</span>\n                  </template>\n                  <div>{{ child.title }}</div>\n                </v-tooltip>\n              </div>\n            </div>\n          </div>\n        </v-expand-transition>\n      </template>\n    </div>\n    <div v-else>\n      <!-- it's a group or a raster -->\n      <v-icon\n        @click=\"node.expanded = !node.expanded\"\n        v-if=\"node.layer_type != 'raster'\"\n        >mdi-menu-{{ node.expanded ? `down` : `right` }}</v-icon\n      >\n      <v-icon v-else color=\"light-green lighten-3\">mdi-checkerboard</v-icon>\n      <v-tooltip top>\n        <template v-slot:activator=\"{ on }\">\n          <v-btn v-on=\"on\" icon @click=\"toggleGroup(node.tree_id_hash)\">\n            <v-icon\n              >mdi-checkbox-{{\n                node.visible ? `marked` : `blank-outline`\n              }}</v-icon\n            >\n          </v-btn>\n        </template>\n        Toggle group visibility\n      </v-tooltip>\n      <v-tooltip top>\n        <template v-slot:activator=\"{ on }\">\n          <span\n            v-on=\"on\"\n            class=\"group-title\"\n            @click=\"node.expanded = !node.expanded\"\n            @contextmenu.prevent.stop=\"function () {}\"\n            >{{ node.title }}</span\n          >\n        </template>\n        <div>{{ node.title }}</div>\n        <div v-if=\"node.description\">{{ node.description }}</div>\n      </v-tooltip>\n\n      <v-expand-transition>\n        <div\n          :class=\"`group-container group-father-of-` + node.children.length\"\n          :id=\"'node-' + node.tree_id_hash\"\n          v-show=\"node.expanded\"\n        >\n          <LayerTreeNode\n            :node=\"child_node\"\n            v-on:toggleLayer=\"toggleLayer\"\n            v-on:toggleGroup=\"toggleGroup\"\n            v-for=\"child_node in node.children\"\n            :key=\"child_node.tree_id_hash\"\n          />\n        </div>\n      </v-expand-transition>\n    </div>\n\n    <!-- Context menu -->\n    <v-menu\n      :value=\"showMenu\"\n      :close-on-content-click=\"true\"\n      :close-on-click=\"false\"\n      :position-x=\"x\"\n      :position-y=\"y\"\n      absolute\n      offset-y\n    >\n      <div @mouseleave=\"onMouseLeave\">\n        <v-list>\n          <v-list-item\n            v-for=\"item in options\"\n            :key=\"item.name\"\n            @click=\"onContextMenuOptionClicked(item.name, node.typename)\"\n          >\n            <v-list-item-icon>\n              <v-icon v-text=\"item.icon\"></v-icon>\n            </v-list-item-icon>\n            <v-list-item-title>{{ item.title }}</v-list-item-title>\n          </v-list-item>\n        </v-list>\n      </div>\n    </v-menu>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: \"LayerTreeNode\",\n  props: {\n    node: {},\n  },\n  data() {\n    return {\n      x: 0,\n      y: 0,\n      // Trick to make sure menu appears on the first click! (see mounted)\n      showMenu: true,\n    };\n  },\n  mounted() {\n    // Trick to make sure menu appears on the first click!\n    this.showMenu = false;\n  },\n  methods: {\n    toggleLayer(tree_id_hash) {\n      this.$emit(\"toggleLayer\", tree_id_hash);\n    },\n    toggleGroup(tree_id_hash) {\n      this.$emit(\"toggleGroup\", tree_id_hash);\n    },\n    onContextMenuOptionClicked(name, typename) {\n      //console.log(\"onContextMenuOptionClicked\", name, typename);\n      if (name == \"attributes\") {\n        this.$store.commit(\"setAttributeTableLayerTypename\", typename);\n      } else {\n        console.log(\"Menu item:\", name, typename);\n      }\n    },\n    showContextMenu(e) {\n      e.preventDefault();\n      this.showMenu = false;\n      this.x = e.clientX;\n      this.y = e.clientY;\n      this.$nextTick(() => {\n        this.showMenu = true;\n      });\n    },\n    onMouseLeave() {\n      this.showMenu = false;\n    },\n  },\n  computed: {\n    options() {\n      let options = [];\n      if (this.node[\"wfs_enabled\"]) {\n        options.push({\n          title: \"Attribute Table\",\n          name: \"attributes\",\n          icon: \"mdi-table-large\",\n        });\n      }\n      /* Not in scope for first release\n      options.push({\n        title: \"Download\",\n        name: \"download\",\n        icon: \"mdi-download\"\n      });\n      */\n      return options;\n    },\n  },\n};\n</script>\n\n<style scoped>\n@import \"https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css\";\n\n.group-title {\n  cursor: pointer;\n  overflow: hidden;\n}\n\n.group-container {\n  margin-left: 2em;\n}\n\n.group-title,\n.node-title,\n.vector-legend-entry {\n  white-space: nowrap;\n}\n.vector-legend-entry span {\n  margin-left: 10px;\n}\n.vector-legend-entry img.symbol {\n  vertical-align: middle;\n  height: 16px;\n  width: 16px;\n}\n.vector-legend-entry span.symbol {\n  vertical-align: middle;\n  display: inline-block;\n  height: 16px;\n  width: 16px;\n  margin-left: 0;\n}\n\n.vector-legend {\n  margin-left: 1.3em;\n}\n.vector-legend-entry-label {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.layer-legend {\n  margin-left: 16px;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTreeNode.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTreeNode.vue?vue&type=script&lang=js&\"","// Mixins\nimport Positionable from '../positionable'\nimport Stackable from '../stackable'\nimport Activatable from '../activatable'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nconst baseMixins = mixins(\n  Stackable,\n  Positionable,\n  Activatable\n)\n\ninterface options extends ExtractVue<typeof baseMixins> {\n  attach: boolean | string | Element\n  offsetY: boolean\n  offsetX: boolean\n  $refs: {\n    content: HTMLElement\n    activator: HTMLElement\n  }\n}\n\n/* @vue/component */\nexport default baseMixins.extend<options>().extend({\n  name: 'menuable',\n\n  props: {\n    allowOverflow: Boolean,\n    light: Boolean,\n    dark: Boolean,\n    maxWidth: {\n      type: [Number, String],\n      default: 'auto',\n    },\n    minWidth: [Number, String],\n    nudgeBottom: {\n      type: [Number, String],\n      default: 0,\n    },\n    nudgeLeft: {\n      type: [Number, String],\n      default: 0,\n    },\n    nudgeRight: {\n      type: [Number, String],\n      default: 0,\n    },\n    nudgeTop: {\n      type: [Number, String],\n      default: 0,\n    },\n    nudgeWidth: {\n      type: [Number, String],\n      default: 0,\n    },\n    offsetOverflow: Boolean,\n    openOnClick: Boolean,\n    positionX: {\n      type: Number,\n      default: null,\n    },\n    positionY: {\n      type: Number,\n      default: null,\n    },\n    zIndex: {\n      type: [Number, String],\n      default: null,\n    },\n  },\n\n  data: () => ({\n    absoluteX: 0,\n    absoluteY: 0,\n    activatedBy: null as EventTarget | null,\n    activatorFixed: false,\n    dimensions: {\n      activator: {\n        top: 0,\n        left: 0,\n        bottom: 0,\n        right: 0,\n        width: 0,\n        height: 0,\n        offsetTop: 0,\n        scrollHeight: 0,\n        offsetLeft: 0,\n      },\n      content: {\n        top: 0,\n        left: 0,\n        bottom: 0,\n        right: 0,\n        width: 0,\n        height: 0,\n        offsetTop: 0,\n        scrollHeight: 0,\n      },\n    },\n    hasJustFocused: false,\n    hasWindow: false,\n    inputActivator: false,\n    isContentActive: false,\n    pageWidth: 0,\n    pageYOffset: 0,\n    stackClass: 'v-menu__content--active',\n    stackMinZIndex: 6,\n  }),\n\n  computed: {\n    computedLeft () {\n      const a = this.dimensions.activator\n      const c = this.dimensions.content\n      const activatorLeft = (this.attach !== false ? a.offsetLeft : a.left) || 0\n      const minWidth = Math.max(a.width, c.width)\n      let left = 0\n      left += this.left ? activatorLeft - (minWidth - a.width) : activatorLeft\n      if (this.offsetX) {\n        const maxWidth = isNaN(Number(this.maxWidth))\n          ? a.width\n          : Math.min(a.width, Number(this.maxWidth))\n\n        left += this.left ? -maxWidth : a.width\n      }\n      if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n      if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n      return left\n    },\n    computedTop () {\n      const a = this.dimensions.activator\n      const c = this.dimensions.content\n      let top = 0\n\n      if (this.top) top += a.height - c.height\n      if (this.attach !== false) top += a.offsetTop\n      else top += a.top + this.pageYOffset\n      if (this.offsetY) top += this.top ? -a.height : a.height\n      if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n      if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n\n      return top\n    },\n    hasActivator (): boolean {\n      return !!this.$slots.activator || !!this.$scopedSlots.activator || !!this.activator || !!this.inputActivator\n    },\n  },\n\n  watch: {\n    disabled (val) {\n      val && this.callDeactivate()\n    },\n    isActive (val) {\n      if (this.disabled) return\n\n      val ? this.callActivate() : this.callDeactivate()\n    },\n    positionX: 'updateDimensions',\n    positionY: 'updateDimensions',\n  },\n\n  beforeMount () {\n    this.hasWindow = typeof window !== 'undefined'\n  },\n\n  methods: {\n    absolutePosition () {\n      return {\n        offsetTop: 0,\n        offsetLeft: 0,\n        scrollHeight: 0,\n        top: this.positionY || this.absoluteY,\n        bottom: this.positionY || this.absoluteY,\n        left: this.positionX || this.absoluteX,\n        right: this.positionX || this.absoluteX,\n        height: 0,\n        width: 0,\n      }\n    },\n    activate () {},\n    calcLeft (menuWidth: number) {\n      return convertToUnit(this.attach !== false\n        ? this.computedLeft\n        : this.calcXOverflow(this.computedLeft, menuWidth))\n    },\n    calcTop () {\n      return convertToUnit(this.attach !== false\n        ? this.computedTop\n        : this.calcYOverflow(this.computedTop))\n    },\n    calcXOverflow (left: number, menuWidth: number) {\n      const xOverflow = left + menuWidth - this.pageWidth + 12\n\n      if ((!this.left || this.right) && xOverflow > 0) {\n        left = Math.max(left - xOverflow, 0)\n      } else {\n        left = Math.max(left, 12)\n      }\n\n      return left + this.getOffsetLeft()\n    },\n    calcYOverflow (top: number) {\n      const documentHeight = this.getInnerHeight()\n      const toTop = this.pageYOffset + documentHeight\n      const activator = this.dimensions.activator\n      const contentHeight = this.dimensions.content.height\n      const totalHeight = top + contentHeight\n      const isOverflowing = toTop < totalHeight\n\n      // If overflowing bottom and offset\n      // TODO: set 'bottom' position instead of 'top'\n      if (isOverflowing &&\n        this.offsetOverflow &&\n        // If we don't have enough room to offset\n        // the overflow, don't offset\n        activator.top > contentHeight\n      ) {\n        top = this.pageYOffset + (activator.top - contentHeight)\n      // If overflowing bottom\n      } else if (isOverflowing && !this.allowOverflow) {\n        top = toTop - contentHeight - 12\n      // If overflowing top\n      } else if (top < this.pageYOffset && !this.allowOverflow) {\n        top = this.pageYOffset + 12\n      }\n\n      return top < 12 ? 12 : top\n    },\n    callActivate () {\n      if (!this.hasWindow) return\n\n      this.activate()\n    },\n    callDeactivate () {\n      this.isContentActive = false\n\n      this.deactivate()\n    },\n    checkForPageYOffset () {\n      if (this.hasWindow) {\n        this.pageYOffset = this.activatorFixed ? 0 : this.getOffsetTop()\n      }\n    },\n    checkActivatorFixed () {\n      if (this.attach !== false) return\n      let el = this.getActivator()\n      while (el) {\n        if (window.getComputedStyle(el).position === 'fixed') {\n          this.activatorFixed = true\n          return\n        }\n        el = el.offsetParent as HTMLElement\n      }\n      this.activatorFixed = false\n    },\n    deactivate () {},\n    genActivatorListeners () {\n      const listeners = Activatable.options.methods.genActivatorListeners.call(this)\n\n      const onClick = listeners.click\n\n      listeners.click = (e: MouseEvent & KeyboardEvent & FocusEvent) => {\n        if (this.openOnClick) {\n          onClick && onClick(e)\n        }\n\n        this.absoluteX = e.clientX\n        this.absoluteY = e.clientY\n      }\n\n      return listeners\n    },\n    getInnerHeight () {\n      if (!this.hasWindow) return 0\n\n      return window.innerHeight ||\n        document.documentElement.clientHeight\n    },\n    getOffsetLeft () {\n      if (!this.hasWindow) return 0\n\n      return window.pageXOffset ||\n        document.documentElement.scrollLeft\n    },\n    getOffsetTop () {\n      if (!this.hasWindow) return 0\n\n      return window.pageYOffset ||\n        document.documentElement.scrollTop\n    },\n    getRoundedBoundedClientRect (el: Element) {\n      const rect = el.getBoundingClientRect()\n      return {\n        top: Math.round(rect.top),\n        left: Math.round(rect.left),\n        bottom: Math.round(rect.bottom),\n        right: Math.round(rect.right),\n        width: Math.round(rect.width),\n        height: Math.round(rect.height),\n      }\n    },\n    measure (el: HTMLElement) {\n      if (!el || !this.hasWindow) return null\n\n      const rect = this.getRoundedBoundedClientRect(el)\n\n      // Account for activator margin\n      if (this.attach !== false) {\n        const style = window.getComputedStyle(el)\n\n        rect.left = parseInt(style.marginLeft!)\n        rect.top = parseInt(style.marginTop!)\n      }\n\n      return rect\n    },\n    sneakPeek (cb: () => void) {\n      requestAnimationFrame(() => {\n        const el = this.$refs.content\n\n        if (!el || el.style.display !== 'none') {\n          cb()\n          return\n        }\n\n        el.style.display = 'inline-block'\n        cb()\n        el.style.display = 'none'\n      })\n    },\n    startTransition () {\n      return new Promise<void>(resolve => requestAnimationFrame(() => {\n        this.isContentActive = this.hasJustFocused = this.isActive\n        resolve()\n      }))\n    },\n    updateDimensions () {\n      this.hasWindow = typeof window !== 'undefined'\n      this.checkActivatorFixed()\n      this.checkForPageYOffset()\n      this.pageWidth = document.documentElement.clientWidth\n\n      const dimensions: any = {\n        activator: { ...this.dimensions.activator },\n        content: { ...this.dimensions.content },\n      }\n\n      // Activator should already be shown\n      if (!this.hasActivator || this.absolute) {\n        dimensions.activator = this.absolutePosition()\n      } else {\n        const activator = this.getActivator()\n        if (!activator) return\n\n        dimensions.activator = this.measure(activator)\n        dimensions.activator.offsetLeft = activator.offsetLeft\n        if (this.attach !== false) {\n          // account for css padding causing things to not line up\n          // this is mostly for v-autocomplete, hopefully it won't break anything\n          dimensions.activator.offsetTop = activator.offsetTop\n        } else {\n          dimensions.activator.offsetTop = 0\n        }\n      }\n\n      // Display and hide to get dimensions\n      this.sneakPeek(() => {\n        this.$refs.content && (dimensions.content = this.measure(this.$refs.content))\n\n        this.dimensions = dimensions\n      })\n    },\n  },\n})\n","// Styles\nimport './VMenu.sass'\n\n// Components\nimport { VThemeProvider } from '../VThemeProvider'\n\n// Mixins\nimport Activatable from '../../mixins/activatable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Menuable from '../../mixins/menuable'\nimport Returnable from '../../mixins/returnable'\nimport Roundable from '../../mixins/roundable'\nimport Toggleable from '../../mixins/toggleable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\nimport Resize from '../../directives/resize'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { removed } from '../../util/console'\nimport {\n  convertToUnit,\n  keyCodes,\n} from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeDirective, VNodeData } from 'vue'\n\nconst baseMixins = mixins(\n  Dependent,\n  Delayable,\n  Detachable,\n  Menuable,\n  Returnable,\n  Roundable,\n  Toggleable,\n  Themeable\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n  name: 'v-menu',\n\n  provide (): object {\n    return {\n      isInMenu: true,\n      // Pass theme through to default slot\n      theme: this.theme,\n    }\n  },\n\n  directives: {\n    ClickOutside,\n    Resize,\n  },\n\n  props: {\n    auto: Boolean,\n    closeOnClick: {\n      type: Boolean,\n      default: true,\n    },\n    closeOnContentClick: {\n      type: Boolean,\n      default: true,\n    },\n    disabled: Boolean,\n    disableKeys: Boolean,\n    maxHeight: {\n      type: [Number, String],\n      default: 'auto',\n    },\n    offsetX: Boolean,\n    offsetY: Boolean,\n    openOnClick: {\n      type: Boolean,\n      default: true,\n    },\n    openOnHover: Boolean,\n    origin: {\n      type: String,\n      default: 'top left',\n    },\n    transition: {\n      type: [Boolean, String],\n      default: 'v-menu-transition',\n    },\n  },\n\n  data () {\n    return {\n      calculatedTopAuto: 0,\n      defaultOffset: 8,\n      hasJustFocused: false,\n      listIndex: -1,\n      resizeTimeout: 0,\n      selectedIndex: null as null | number,\n      tiles: [] as HTMLElement[],\n    }\n  },\n\n  computed: {\n    activeTile (): HTMLElement | undefined {\n      return this.tiles[this.listIndex]\n    },\n    calculatedLeft (): string {\n      const menuWidth = Math.max(this.dimensions.content.width, parseFloat(this.calculatedMinWidth))\n\n      if (!this.auto) return this.calcLeft(menuWidth) || '0'\n\n      return convertToUnit(this.calcXOverflow(this.calcLeftAuto(), menuWidth)) || '0'\n    },\n    calculatedMaxHeight (): string {\n      const height = this.auto\n        ? '200px'\n        : convertToUnit(this.maxHeight)\n\n      return height || '0'\n    },\n    calculatedMaxWidth (): string {\n      return convertToUnit(this.maxWidth) || '0'\n    },\n    calculatedMinWidth (): string {\n      if (this.minWidth) {\n        return convertToUnit(this.minWidth) || '0'\n      }\n\n      const minWidth = Math.min(\n        this.dimensions.activator.width +\n        Number(this.nudgeWidth) +\n        (this.auto ? 16 : 0),\n        Math.max(this.pageWidth - 24, 0)\n      )\n\n      const calculatedMaxWidth = isNaN(parseInt(this.calculatedMaxWidth))\n        ? minWidth\n        : parseInt(this.calculatedMaxWidth)\n\n      return convertToUnit(Math.min(\n        calculatedMaxWidth,\n        minWidth\n      )) || '0'\n    },\n    calculatedTop (): string {\n      const top = !this.auto\n        ? this.calcTop()\n        : convertToUnit(this.calcYOverflow(this.calculatedTopAuto))\n\n      return top || '0'\n    },\n    hasClickableTiles (): boolean {\n      return Boolean(this.tiles.find(tile => tile.tabIndex > -1))\n    },\n    styles (): object {\n      return {\n        maxHeight: this.calculatedMaxHeight,\n        minWidth: this.calculatedMinWidth,\n        maxWidth: this.calculatedMaxWidth,\n        top: this.calculatedTop,\n        left: this.calculatedLeft,\n        transformOrigin: this.origin,\n        zIndex: this.zIndex || this.activeZIndex,\n      }\n    },\n  },\n\n  watch: {\n    isActive (val) {\n      if (!val) this.listIndex = -1\n    },\n    isContentActive (val) {\n      this.hasJustFocused = val\n    },\n    listIndex (next, prev) {\n      if (next in this.tiles) {\n        const tile = this.tiles[next]\n        tile.classList.add('v-list-item--highlighted')\n        this.$refs.content.scrollTop = tile.offsetTop - tile.clientHeight\n      }\n\n      prev in this.tiles &&\n        this.tiles[prev].classList.remove('v-list-item--highlighted')\n    },\n  },\n\n  created () {\n    /* istanbul ignore next */\n    if (this.$attrs.hasOwnProperty('full-width')) {\n      removed('full-width', this)\n    }\n  },\n\n  mounted () {\n    this.isActive && this.callActivate()\n  },\n\n  methods: {\n    activate () {\n      // Update coordinates and dimensions of menu\n      // and its activator\n      this.updateDimensions()\n      // Start the transition\n      requestAnimationFrame(() => {\n        // Once transitioning, calculate scroll and top position\n        this.startTransition().then(() => {\n          if (this.$refs.content) {\n            this.calculatedTopAuto = this.calcTopAuto()\n            this.auto && (this.$refs.content.scrollTop = this.calcScrollPosition())\n          }\n        })\n      })\n    },\n    calcScrollPosition () {\n      const $el = this.$refs.content\n      const activeTile = $el.querySelector('.v-list-item--active') as HTMLElement\n      const maxScrollTop = $el.scrollHeight - $el.offsetHeight\n\n      return activeTile\n        ? Math.min(maxScrollTop, Math.max(0, activeTile.offsetTop - $el.offsetHeight / 2 + activeTile.offsetHeight / 2))\n        : $el.scrollTop\n    },\n    calcLeftAuto () {\n      return parseInt(this.dimensions.activator.left - this.defaultOffset * 2)\n    },\n    calcTopAuto () {\n      const $el = this.$refs.content\n      const activeTile = $el.querySelector('.v-list-item--active') as HTMLElement | null\n\n      if (!activeTile) {\n        this.selectedIndex = null\n      }\n\n      if (this.offsetY || !activeTile) {\n        return this.computedTop\n      }\n\n      this.selectedIndex = Array.from(this.tiles).indexOf(activeTile)\n\n      const tileDistanceFromMenuTop = activeTile.offsetTop - this.calcScrollPosition()\n      const firstTileOffsetTop = ($el.querySelector('.v-list-item') as HTMLElement).offsetTop\n\n      return this.computedTop - tileDistanceFromMenuTop - firstTileOffsetTop - 1\n    },\n    changeListIndex (e: KeyboardEvent) {\n      // For infinite scroll and autocomplete, re-evaluate children\n      this.getTiles()\n\n      if (!this.isActive || !this.hasClickableTiles) {\n        return\n      } else if (e.keyCode === keyCodes.tab) {\n        this.isActive = false\n        return\n      } else if (e.keyCode === keyCodes.down) {\n        this.nextTile()\n      } else if (e.keyCode === keyCodes.up) {\n        this.prevTile()\n      } else if (e.keyCode === keyCodes.enter && this.listIndex !== -1) {\n        this.tiles[this.listIndex].click()\n      } else { return }\n      // One of the conditions was met, prevent default action (#2988)\n      e.preventDefault()\n    },\n    closeConditional (e: Event) {\n      const target = e.target as HTMLElement\n\n      return this.isActive &&\n        !this._isDestroyed &&\n        this.closeOnClick &&\n        !this.$refs.content.contains(target)\n    },\n    genActivatorAttributes () {\n      const attributes = Activatable.options.methods.genActivatorAttributes.call(this)\n\n      if (this.activeTile && this.activeTile.id) {\n        return {\n          ...attributes,\n          'aria-activedescendant': this.activeTile.id,\n        }\n      }\n\n      return attributes\n    },\n    genActivatorListeners () {\n      const listeners = Menuable.options.methods.genActivatorListeners.call(this)\n\n      if (!this.disableKeys) {\n        listeners.keydown = this.onKeyDown\n      }\n\n      return listeners\n    },\n    genTransition (): VNode {\n      const content = this.genContent()\n\n      if (!this.transition) return content\n\n      return this.$createElement('transition', {\n        props: {\n          name: this.transition,\n        },\n      }, [content])\n    },\n    genDirectives (): VNodeDirective[] {\n      const directives: VNodeDirective[] = [{\n        name: 'show',\n        value: this.isContentActive,\n      }]\n\n      // Do not add click outside for hover menu\n      if (!this.openOnHover && this.closeOnClick) {\n        directives.push({\n          name: 'click-outside',\n          value: {\n            handler: () => { this.isActive = false },\n            closeConditional: this.closeConditional,\n            include: () => [this.$el, ...this.getOpenDependentElements()],\n          },\n        })\n      }\n\n      return directives\n    },\n    genContent (): VNode {\n      const options = {\n        attrs: {\n          ...this.getScopeIdAttrs(),\n          role: 'role' in this.$attrs ? this.$attrs.role : 'menu',\n        },\n        staticClass: 'v-menu__content',\n        class: {\n          ...this.rootThemeClasses,\n          ...this.roundedClasses,\n          'v-menu__content--auto': this.auto,\n          'v-menu__content--fixed': this.activatorFixed,\n          menuable__content__active: this.isActive,\n          [this.contentClass.trim()]: true,\n        },\n        style: this.styles,\n        directives: this.genDirectives(),\n        ref: 'content',\n        on: {\n          click: (e: Event) => {\n            const target = e.target as HTMLElement\n\n            if (target.getAttribute('disabled')) return\n            if (this.closeOnContentClick) this.isActive = false\n          },\n          keydown: this.onKeyDown,\n        },\n      } as VNodeData\n\n      if (this.$listeners.scroll) {\n        options.on = options.on || {}\n        options.on.scroll = this.$listeners.scroll\n      }\n\n      if (!this.disabled && this.openOnHover) {\n        options.on = options.on || {}\n        options.on.mouseenter = this.mouseEnterHandler\n      }\n\n      if (this.openOnHover) {\n        options.on = options.on || {}\n        options.on.mouseleave = this.mouseLeaveHandler\n      }\n\n      return this.$createElement('div', options, this.getContentSlot())\n    },\n    getTiles () {\n      if (!this.$refs.content) return\n\n      this.tiles = Array.from(this.$refs.content.querySelectorAll('.v-list-item'))\n    },\n    mouseEnterHandler () {\n      this.runDelay('open', () => {\n        if (this.hasJustFocused) return\n\n        this.hasJustFocused = true\n        this.isActive = true\n      })\n    },\n    mouseLeaveHandler (e: MouseEvent) {\n      // Prevent accidental re-activation\n      this.runDelay('close', () => {\n        if (this.$refs.content.contains(e.relatedTarget as HTMLElement)) return\n\n        requestAnimationFrame(() => {\n          this.isActive = false\n          this.callDeactivate()\n        })\n      })\n    },\n    nextTile () {\n      const tile = this.tiles[this.listIndex + 1]\n\n      if (!tile) {\n        if (!this.tiles.length) return\n\n        this.listIndex = -1\n        this.nextTile()\n\n        return\n      }\n\n      this.listIndex++\n      if (tile.tabIndex === -1) this.nextTile()\n    },\n    prevTile () {\n      const tile = this.tiles[this.listIndex - 1]\n\n      if (!tile) {\n        if (!this.tiles.length) return\n\n        this.listIndex = this.tiles.length\n        this.prevTile()\n\n        return\n      }\n\n      this.listIndex--\n      if (tile.tabIndex === -1) this.prevTile()\n    },\n    onKeyDown (e: KeyboardEvent) {\n      if (e.keyCode === keyCodes.esc) {\n        // Wait for dependent elements to close first\n        setTimeout(() => { this.isActive = false })\n        const activator = this.getActivator()\n        this.$nextTick(() => activator && activator.focus())\n      } else if (\n        !this.isActive &&\n        [keyCodes.up, keyCodes.down].includes(e.keyCode)\n      ) {\n        this.isActive = true\n      }\n\n      // Allow for isActive watcher to generate tile list\n      this.$nextTick(() => this.changeListIndex(e))\n    },\n    onResize () {\n      if (!this.isActive) return\n\n      // Account for screen resize\n      // and orientation change\n      // eslint-disable-next-line no-unused-expressions\n      this.$refs.content.offsetWidth\n      this.updateDimensions()\n\n      // When resizing to a smaller width\n      // content width is evaluated before\n      // the new activator width has been\n      // set, causing it to not size properly\n      // hacky but will revisit in the future\n      clearTimeout(this.resizeTimeout)\n      this.resizeTimeout = window.setTimeout(this.updateDimensions, 100)\n    },\n  },\n\n  render (h): VNode {\n    const data = {\n      staticClass: 'v-menu',\n      class: {\n        'v-menu--attached':\n          this.attach === '' ||\n          this.attach === true ||\n          this.attach === 'attach',\n      },\n      directives: [{\n        arg: '500',\n        name: 'resize',\n        value: this.onResize,\n      }],\n    }\n\n    return h('div', data, [\n      !this.activator && this.genActivator(),\n      this.showLazyContent(() => [\n        this.$createElement(VThemeProvider, {\n          props: {\n            root: true,\n            light: this.light,\n            dark: this.dark,\n          },\n        }, [this.genTransition()]),\n      ]),\n    ])\n  },\n})\n","import './VTooltip.sass'\n\n// Mixins\nimport Activatable from '../../mixins/activatable'\nimport Colorable from '../../mixins/colorable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Menuable from '../../mixins/menuable'\nimport Toggleable from '../../mixins/toggleable'\n\n// Helpers\nimport { convertToUnit, keyCodes, getSlotType } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Colorable, Delayable, Dependent, Detachable, Menuable, Toggleable).extend({\n  name: 'v-tooltip',\n\n  props: {\n    closeDelay: {\n      type: [Number, String],\n      default: 0,\n    },\n    disabled: Boolean,\n    fixed: {\n      type: Boolean,\n      default: true,\n    },\n    openDelay: {\n      type: [Number, String],\n      default: 0,\n    },\n    openOnHover: {\n      type: Boolean,\n      default: true,\n    },\n    tag: {\n      type: String,\n      default: 'span',\n    },\n    transition: String,\n  },\n\n  data: () => ({\n    calculatedMinWidth: 0,\n    closeDependents: false,\n  }),\n\n  computed: {\n    calculatedLeft (): string {\n      const { activator, content } = this.dimensions\n      const unknown = !this.bottom && !this.left && !this.top && !this.right\n      const activatorLeft = this.attach !== false ? activator.offsetLeft : activator.left\n      let left = 0\n\n      if (this.top || this.bottom || unknown) {\n        left = (\n          activatorLeft +\n          (activator.width / 2) -\n          (content.width / 2)\n        )\n      } else if (this.left || this.right) {\n        left = (\n          activatorLeft +\n          (this.right ? activator.width : -content.width) +\n          (this.right ? 10 : -10)\n        )\n      }\n\n      if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n      if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n      return `${this.calcXOverflow(left, this.dimensions.content.width)}px`\n    },\n    calculatedTop (): string {\n      const { activator, content } = this.dimensions\n      const activatorTop = this.attach !== false ? activator.offsetTop : activator.top\n      let top = 0\n\n      if (this.top || this.bottom) {\n        top = (\n          activatorTop +\n          (this.bottom ? activator.height : -content.height) +\n          (this.bottom ? 10 : -10)\n        )\n      } else if (this.left || this.right) {\n        top = (\n          activatorTop +\n          (activator.height / 2) -\n          (content.height / 2)\n        )\n      }\n\n      if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n      if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n\n      return `${this.calcYOverflow(top + this.pageYOffset)}px`\n    },\n    classes (): object {\n      return {\n        'v-tooltip--top': this.top,\n        'v-tooltip--right': this.right,\n        'v-tooltip--bottom': this.bottom,\n        'v-tooltip--left': this.left,\n        'v-tooltip--attached':\n          this.attach === '' ||\n          this.attach === true ||\n          this.attach === 'attach',\n      }\n    },\n    computedTransition (): string {\n      if (this.transition) return this.transition\n\n      return this.isActive ? 'scale-transition' : 'fade-transition'\n    },\n    offsetY (): boolean {\n      return this.top || this.bottom\n    },\n    offsetX (): boolean {\n      return this.left || this.right\n    },\n    styles (): object {\n      return {\n        left: this.calculatedLeft,\n        maxWidth: convertToUnit(this.maxWidth),\n        minWidth: convertToUnit(this.minWidth),\n        opacity: this.isActive ? 0.9 : 0,\n        top: this.calculatedTop,\n        zIndex: this.zIndex || this.activeZIndex,\n      }\n    },\n  },\n\n  beforeMount () {\n    this.$nextTick(() => {\n      this.value && this.callActivate()\n    })\n  },\n\n  mounted () {\n    if (getSlotType(this, 'activator', true) === 'v-slot') {\n      consoleError(`v-tooltip's activator slot must be bound, try '<template #activator=\"data\"><v-btn v-on=\"data.on>'`, this)\n    }\n  },\n\n  methods: {\n    activate () {\n      // Update coordinates and dimensions of menu\n      // and its activator\n      this.updateDimensions()\n      // Start the transition\n      requestAnimationFrame(this.startTransition)\n    },\n    deactivate () {\n      this.runDelay('close')\n    },\n    genActivatorListeners () {\n      const listeners = Activatable.options.methods.genActivatorListeners.call(this)\n\n      listeners.focus = (e: Event) => {\n        this.getActivator(e)\n        this.runDelay('open')\n      }\n      listeners.blur = (e: Event) => {\n        this.getActivator(e)\n        this.runDelay('close')\n      }\n      listeners.keydown = (e: KeyboardEvent) => {\n        if (e.keyCode === keyCodes.esc) {\n          this.getActivator(e)\n          this.runDelay('close')\n        }\n      }\n\n      return listeners\n    },\n    genTransition () {\n      const content = this.genContent()\n\n      if (!this.computedTransition) return content\n\n      return this.$createElement('transition', {\n        props: {\n          name: this.computedTransition,\n        },\n      }, [content])\n    },\n    genContent () {\n      return this.$createElement(\n        'div',\n        this.setBackgroundColor(this.color, {\n          staticClass: 'v-tooltip__content',\n          class: {\n            [this.contentClass]: true,\n            menuable__content__active: this.isActive,\n            'v-tooltip__content--fixed': this.activatorFixed,\n          },\n          style: this.styles,\n          attrs: this.getScopeIdAttrs(),\n          directives: [{\n            name: 'show',\n            value: this.isContentActive,\n          }],\n          ref: 'content',\n        }),\n        this.getContentSlot()\n      )\n    },\n  },\n\n  render (h): VNode {\n    return h(this.tag, {\n      staticClass: 'v-tooltip',\n      class: this.classes,\n    }, [\n      this.showLazyContent(() => [this.genTransition()]),\n      this.genActivator(),\n    ])\n  },\n})\n","import { render, staticRenderFns } from \"./LayerTreeNode.vue?vue&type=template&id=24ffc513&scoped=true&\"\nimport script from \"./LayerTreeNode.vue?vue&type=script&lang=js&\"\nexport * from \"./LayerTreeNode.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LayerTreeNode.vue?vue&type=style&index=0&id=24ffc513&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"24ffc513\",\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VExpandTransition } from 'vuetify/lib/components/transitions';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VExpandTransition,VIcon,VList,VListItem,VListItemIcon,VListItemTitle,VMenu,VTooltip})\n","/**\n *  Layer tree\n *\n *  Author:    elpaso@itopen.it\n *  Date:      2020-06-30\n *  Copyright: Copyright 2020, ItOpen\n *\n *  This program is free software; you can redistribute it and/or modify\n *  it under the terms of the GNU General Public License as published by\n *  the Free Software Foundation; either version 2 of the License, or\n *  (at your option) any later version.\n *\n */\n<template>\n  <v-card flat class=\"mx-auto layertree-container\" v-if=\"project\">\n    <v-card-text>\n      <!-- OSM base map -->\n      <div class=\"base-map\">\n        <div class=\"v-treeview-node\">\n          <v-icon color=\"light-green lighten-3\">mdi-checkerboard</v-icon>\n          <v-tooltip top>\n            <template v-slot:activator=\"{ on }\">\n              <v-btn v-on=\"on\" icon @click=\"toggleBaseMap('openstreetmap')\">\n                <v-icon\n                  >mdi-checkbox-{{\n                    baseMap == \"openstreetmap\" ? `marked` : `blank-outline`\n                  }}</v-icon\n                >\n              </v-btn>\n            </template>\n            Toggle base map visibility\n          </v-tooltip>\n          <span class=\"group-title\">OpenStreetMap</span>\n        </div>\n      </div>\n      <!-- TOC tree -->\n      <div\n        id=\"layertree\"\n        v-for=\"(element, entry) in project.toc.children\"\n        :key=\"uniqueKey(entry)\"\n      >\n        <LayerTreeNode\n          :node=\"element\"\n          v-on:toggleLayer=\"toggleLayer\"\n          v-on:toggleGroup=\"toggleGroup\"\n        />\n      </div>\n    </v-card-text>\n  </v-card>\n</template>\n\n<script>\nimport LayerTreeNode from \"@/components/LayerTreeNode.vue\";\nconst uuidv4 = require(\"uuid/v4\");\nexport default {\n  name: \"LayerTree\",\n  props: {\n    projectId: String,\n    project: {},\n    drawer: null,\n  },\n  components: {\n    LayerTreeNode,\n  },\n  data: function () {\n    return {\n      uniqueKey: function () {\n        return uuidv4();\n      },\n    };\n  },\n  computed: {\n    baseMap() {\n      return this.$store.state.baseMap;\n    },\n  },\n  methods: {\n    /**\n     * Find a layer node from typename and children\n     */\n    findLayerNode(typename, children) {\n      if (children) {\n        for (let i = 0; i < children.length; ++i) {\n          if (children[i].typename == typename) {\n            return children[i];\n          }\n          let res = this.findLayerNode(typename, children[i].children);\n          if (res) {\n            return res;\n          }\n        }\n      }\n    },\n    /**\n     * Find a node from tree id hash and children\n     */\n    findNodeByHash(tree_id_hash, children) {\n      if (children) {\n        for (let i = 0; i < children.length; ++i) {\n          if (children[i].tree_id_hash == tree_id_hash) {\n            return children[i];\n          }\n          let res = this.findNodeByHash(tree_id_hash, children[i].children);\n          if (res) {\n            return res;\n          }\n        }\n      }\n    },\n    /**\n     * Toggle a single layer  by tree id hash\n     */\n    toggleLayer(tree_id_hash) {\n      let node = this.findNodeByHash(tree_id_hash, this.project.toc.children);\n      if (node) {\n        node.visible = !node.visible;\n        this.$emit(\"setLayerVisibility\", node.typename, node.visible);\n      }\n    },\n    /**\n     * Toggle a single basemap by name\n     */\n    toggleBaseMap(basemap) {\n      if (this.baseMap == basemap) {\n        basemap = \"\";\n      }\n      this.$store.commit(\"setBaseMap\", basemap);\n    },\n    /**\n     * Toggle a group by tree id hash\n     */\n    toggleGroup(tree_id_hash) {\n      let node = this.findNodeByHash(tree_id_hash, this.project.toc.children);\n      if (node) {\n        this.setGroupNodeVisibility(node, !node.visible);\n      }\n    },\n    /**\n     * Recursively set a group node visibility\n     */\n    setGroupNodeVisibility(groupNode, visible) {\n      groupNode.visible = visible;\n      // Emit if it's a layer\n      if (groupNode.is_layer) {\n        this.$emit(\"setLayerVisibility\", groupNode.typename, visible);\n      }\n      if (groupNode.children) {\n        for (let i = 0; i < groupNode.children.length; ++i) {\n          this.setGroupNodeVisibility(groupNode.children[i], visible);\n        }\n      }\n    }\n  },\n};\n</script>\n\n<style>\n.leaflet-top.layertree-toggle-container {\n  top: 8.5rem;\n}\n\n#layertree-toggle {\n  cursor: pointer;\n}\n\nul.layer-group {\n  padding-left: 1em;\n}\n\n.b-sidebar-body > div > ul.layer-group {\n  padding-left: 0;\n}\n\n.v-navigation-drawer {\n  z-index: 5000;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTree.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTree.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LayerTree.vue?vue&type=template&id=7d2c24b6&\"\nimport script from \"./LayerTree.vue?vue&type=script&lang=js&\"\nexport * from \"./LayerTree.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LayerTree.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardText,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{staticClass:\"mx-auto\"},[[(_vm.identifyResults.features)?_c('v-row',[_c('v-col',{staticClass:\"col-auto\"},_vm._l((_vm.identifyResults.features),function(feature){return _c('v-card',{key:feature.id,staticClass:\"mx-auto mb-4\"},[_c('v-card-title',[_c('v-row',[_c('v-col',[_vm._v(_vm._s(feature.id))]),(feature.geometry)?_c('v-col',{staticClass:\"col-auto\"},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.zoomToFeature(feature)}}},on),[_c('v-icon',[_vm._v(\"mdi-magnify-plus\")])],1)]}}],null,true)},[_vm._v(\" Zoom to feature \")])],1):_vm._e()],1)],1),_c('v-simple-table',{attrs:{\"dense\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('tbody',_vm._l((feature.properties),function(value,name){return _c('tr',{key:name},[_c('th',[_vm._v(_vm._s(name))]),_c('td',[_vm._v(_vm._s(value))])])}),0)]},proxy:true}],null,true)})],1)}),1)],1):_c('v-row',[_c('v-progress-linear',{attrs:{\"indeterminate\":\"\",\"query\":\"\"}})],1)]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Identify\n *\n * Author:    elpaso@itopen.it\n * Date:      2020-06-30\n * Copyright: Copyright 2020, ItOpen\n *\n *  This program is free software; you can redistribute it and/or modify\n *  it under the terms of the GNU General Public License as published by\n *  the Free Software Foundation; either version 2 of the License, or\n *  (at your option) any later version.\n *\n */\n<template>\n  <v-container class=\"mx-auto\">\n    <template>\n      <v-row v-if=\"identifyResults.features\">\n        <v-col class=\"col-auto\">\n          <v-card\n            class=\"mx-auto mb-4\"\n            v-for=\"feature in identifyResults.features\"\n            :key=\"feature.id\"\n          >\n            <v-card-title>\n              <v-row>\n                <v-col>{{ feature.id }}</v-col>\n                <v-col class=\"col-auto\" v-if=\"feature.geometry\">\n                  <v-tooltip top>\n                    <template v-slot:activator=\"{ on }\">\n                      <v-btn v-on=\"on\" icon @click=\"zoomToFeature(feature)\">\n                        <v-icon>mdi-magnify-plus</v-icon>\n                      </v-btn>\n                    </template>\n                    Zoom to feature\n                  </v-tooltip>\n                </v-col>\n              </v-row>\n            </v-card-title>\n            <v-simple-table dense>\n              <template v-slot:default>\n                <tbody>\n                  <tr v-for=\"(value, name) in feature.properties\" :key=\"name\">\n                    <th>{{ name }}</th>\n                    <td>{{ value }}</td>\n                  </tr>\n                </tbody>\n              </template>\n            </v-simple-table>\n          </v-card>\n        </v-col>\n      </v-row>\n      <v-row v-else>\n        <v-progress-linear indeterminate query></v-progress-linear>\n      </v-row>\n    </template>\n  </v-container>\n</template>\n\n<script>\nimport reproject from \"reproject\";\nexport default {\n  name: \"IdentifyResults\",\n  props: {\n    drawer: null,\n    map: null\n  },\n  computed: {\n    identifyResults() {\n      //console.log(\"Computed\", this.$store.state.identifyResults.features);\n      return this.$store.state.identifyResults;\n    }\n  },\n  methods: {\n    zoomToFeature(feature) {\n      this.map.highlightLayer.clearLayers();\n      this.map.highlightLayer.addData(\n        reproject.toWgs84(feature, this.map.options.crs.code)\n      );\n      this.map.setView(this.map.highlightLayer.getBounds().getCenter());\n    }\n  }\n};\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IdentifyResults.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IdentifyResults.vue?vue&type=script&lang=js&\"","import './VSimpleTable.sass'\n\nimport { convertToUnit } from '../../util/helpers'\nimport Themeable from '../../mixins/themeable'\nimport mixins from '../../util/mixins'\nimport { VNode } from 'vue'\n\nexport default mixins(Themeable).extend({\n  name: 'v-simple-table',\n\n  props: {\n    dense: Boolean,\n    fixedHeader: Boolean,\n    height: [Number, String],\n  },\n\n  computed: {\n    classes (): Record<string, boolean> {\n      return {\n        'v-data-table--dense': this.dense,\n        'v-data-table--fixed-height': !!this.height && !this.fixedHeader,\n        'v-data-table--fixed-header': this.fixedHeader,\n        ...this.themeClasses,\n      }\n    },\n  },\n\n  methods: {\n    genWrapper () {\n      return this.$slots.wrapper || this.$createElement('div', {\n        staticClass: 'v-data-table__wrapper',\n        style: {\n          height: convertToUnit(this.height),\n        },\n      }, [\n        this.$createElement('table', this.$slots.default),\n      ])\n    },\n  },\n\n  render (h): VNode {\n    return h('div', {\n      staticClass: 'v-data-table',\n      class: this.classes,\n    }, [\n      this.$slots.top,\n      this.genWrapper(),\n      this.$slots.bottom,\n    ])\n  },\n})\n","import { render, staticRenderFns } from \"./IdentifyResults.vue?vue&type=template&id=c2647a2a&\"\nimport script from \"./IdentifyResults.vue?vue&type=script&lang=js&\"\nexport * from \"./IdentifyResults.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VCol,VContainer,VIcon,VProgressLinear,VRow,VSimpleTable,VTooltip})\n","/**\n *  Left sidebar\n *\n *  Author:    elpaso@itopen.it\n *  Date:      2020-06-30\n *  Copyright: Copyright 2020, ItOpen\n *\n *  This program is free software; you can redistribute it and/or modify\n *  it under the terms of the GNU General Public License as published by\n *  the Free Software Foundation; either version 2 of the License, or\n *  (at your option) any later version.\n *\n */\n<template>\n  <v-navigation-drawer absolute hide-overlay stateless width=\"300px\" v-model=\"drawer\">\n    <v-tabs class=\"mt-12 mb-10\" grow v-model=\"activeTab\">\n      <v-tab key=\"0\">Legend</v-tab>\n      <v-tab key=\"1\" v-if=\"showIdentify\">Results</v-tab>\n\n      <v-tab-item key=\"0\">\n        <LayerTree :project=\"project\" v-on:setLayerVisibility=\"setLayerVisibility\" />\n      </v-tab-item>\n\n      <v-tab-item key=\"1\" v-if=\"showIdentify\">\n        <IdentifyResults :map=\"map\" />\n      </v-tab-item>\n    </v-tabs>\n  </v-navigation-drawer>\n</template>\n\n\n<script>\nimport LayerTree from \"@/components/LayerTree.vue\";\nimport IdentifyResults from \"@/components/IdentifyResults.vue\";\n\nexport default {\n  name: \"LeftSidebar\",\n  components: {\n    LayerTree,\n    IdentifyResults\n  },\n  props: {\n    drawer: null,\n    project: null,\n    showIdentify: null,\n    map: null\n  },\n  data: function() {\n    return {\n      currentTab: 0\n    };\n  },\n  methods: {\n    /**\n     * Forward to parent\n     */\n    setLayerVisibility(typename, visible) {\n      this.$emit(\"setLayerVisibility\", typename, visible);\n    }\n  },\n  watch: {\n    identifyResults() {\n      this.currentTab = 1;\n    }\n  },\n  computed: {\n    activeTab: {\n      get() {\n        return this.currentTab;\n      },\n      set(newValue) {\n        this.currentTab = newValue;\n      }\n    },\n    identifyResults() {\n      return this.$store.state.identifyResults;\n    }\n  }\n};\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LeftSidebar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LeftSidebar.vue?vue&type=script&lang=js&\"","// Styles\nimport './VNavigationDrawer.sass'\n\n// Components\nimport VImg, { srcObject } from '../VImg/VImg'\n\n// Mixins\nimport Applicationable from '../../mixins/applicationable'\nimport Colorable from '../../mixins/colorable'\nimport Dependent from '../../mixins/dependent'\nimport Mobile from '../../mixins/mobile'\nimport Overlayable from '../../mixins/overlayable'\nimport SSRBootable from '../../mixins/ssr-bootable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\nimport Resize from '../../directives/resize'\nimport Touch from '../../directives/touch'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, VNodeDirective, PropType } from 'vue'\nimport { TouchWrapper } from 'vuetify/types'\n\nconst baseMixins = mixins(\n  Applicationable('left', [\n    'isActive',\n    'isMobile',\n    'miniVariant',\n    'expandOnHover',\n    'permanent',\n    'right',\n    'temporary',\n    'width',\n  ]),\n  Colorable,\n  Dependent,\n  Mobile,\n  Overlayable,\n  SSRBootable,\n  Themeable\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n  name: 'v-navigation-drawer',\n\n  provide (): object {\n    return {\n      isInNav: this.tag === 'nav',\n    }\n  },\n\n  directives: {\n    ClickOutside,\n    Resize,\n    Touch,\n  },\n\n  props: {\n    bottom: Boolean,\n    clipped: Boolean,\n    disableResizeWatcher: Boolean,\n    disableRouteWatcher: Boolean,\n    expandOnHover: Boolean,\n    floating: Boolean,\n    height: {\n      type: [Number, String],\n      default (): string {\n        return this.app ? '100vh' : '100%'\n      },\n    },\n    miniVariant: Boolean,\n    miniVariantWidth: {\n      type: [Number, String],\n      default: 56,\n    },\n    permanent: Boolean,\n    right: Boolean,\n    src: {\n      type: [String, Object] as PropType<string | srcObject>,\n      default: '',\n    },\n    stateless: Boolean,\n    tag: {\n      type: String,\n      default (): string {\n        return this.app ? 'nav' : 'aside'\n      },\n    },\n    temporary: Boolean,\n    touchless: Boolean,\n    width: {\n      type: [Number, String],\n      default: 256,\n    },\n    value: null as unknown as PropType<any>,\n  },\n\n  data: () => ({\n    isMouseover: false,\n    touchArea: {\n      left: 0,\n      right: 0,\n    },\n    stackMinZIndex: 6,\n  }),\n\n  computed: {\n    /**\n     * Used for setting an app value from a dynamic\n     * property. Called from applicationable.js\n     */\n    applicationProperty (): string {\n      return this.right ? 'right' : 'left'\n    },\n    classes (): object {\n      return {\n        'v-navigation-drawer': true,\n        'v-navigation-drawer--absolute': this.absolute,\n        'v-navigation-drawer--bottom': this.bottom,\n        'v-navigation-drawer--clipped': this.clipped,\n        'v-navigation-drawer--close': !this.isActive,\n        'v-navigation-drawer--fixed': !this.absolute && (this.app || this.fixed),\n        'v-navigation-drawer--floating': this.floating,\n        'v-navigation-drawer--is-mobile': this.isMobile,\n        'v-navigation-drawer--is-mouseover': this.isMouseover,\n        'v-navigation-drawer--mini-variant': this.isMiniVariant,\n        'v-navigation-drawer--custom-mini-variant': Number(this.miniVariantWidth) !== 56,\n        'v-navigation-drawer--open': this.isActive,\n        'v-navigation-drawer--open-on-hover': this.expandOnHover,\n        'v-navigation-drawer--right': this.right,\n        'v-navigation-drawer--temporary': this.temporary,\n        ...this.themeClasses,\n      }\n    },\n    computedMaxHeight (): number | null {\n      if (!this.hasApp) return null\n\n      const computedMaxHeight = (\n        this.$vuetify.application.bottom +\n        this.$vuetify.application.footer +\n        this.$vuetify.application.bar\n      )\n\n      if (!this.clipped) return computedMaxHeight\n\n      return computedMaxHeight + this.$vuetify.application.top\n    },\n    computedTop (): number {\n      if (!this.hasApp) return 0\n\n      let computedTop = this.$vuetify.application.bar\n\n      computedTop += this.clipped\n        ? this.$vuetify.application.top\n        : 0\n\n      return computedTop\n    },\n    computedTransform (): number {\n      if (this.isActive) return 0\n      if (this.isBottom) return 100\n      return this.right ? 100 : -100\n    },\n    computedWidth (): string | number {\n      return this.isMiniVariant ? this.miniVariantWidth : this.width\n    },\n    hasApp (): boolean {\n      return (\n        this.app &&\n        (!this.isMobile && !this.temporary)\n      )\n    },\n    isBottom (): boolean {\n      return this.bottom && this.isMobile\n    },\n    isMiniVariant (): boolean {\n      return (\n        !this.expandOnHover &&\n        this.miniVariant\n      ) || (\n        this.expandOnHover &&\n        !this.isMouseover\n      )\n    },\n    isMobile (): boolean {\n      return (\n        !this.stateless &&\n        !this.permanent &&\n        Mobile.options.computed.isMobile.call(this)\n      )\n    },\n    reactsToClick (): boolean {\n      return (\n        !this.stateless &&\n        !this.permanent &&\n        (this.isMobile || this.temporary)\n      )\n    },\n    reactsToMobile (): boolean {\n      return (\n        this.app &&\n        !this.disableResizeWatcher &&\n        !this.permanent &&\n        !this.stateless &&\n        !this.temporary\n      )\n    },\n    reactsToResize (): boolean {\n      return !this.disableResizeWatcher && !this.stateless\n    },\n    reactsToRoute (): boolean {\n      return (\n        !this.disableRouteWatcher &&\n        !this.stateless &&\n        (this.temporary || this.isMobile)\n      )\n    },\n    showOverlay (): boolean {\n      return (\n        !this.hideOverlay &&\n        this.isActive &&\n        (this.isMobile || this.temporary)\n      )\n    },\n    styles (): object {\n      const translate = this.isBottom ? 'translateY' : 'translateX'\n      const styles = {\n        height: convertToUnit(this.height),\n        top: !this.isBottom ? convertToUnit(this.computedTop) : 'auto',\n        maxHeight: this.computedMaxHeight != null\n          ? `calc(100% - ${convertToUnit(this.computedMaxHeight)})`\n          : undefined,\n        transform: `${translate}(${convertToUnit(this.computedTransform, '%')})`,\n        width: convertToUnit(this.computedWidth),\n      }\n\n      return styles\n    },\n  },\n\n  watch: {\n    $route: 'onRouteChange',\n    isActive (val) {\n      this.$emit('input', val)\n    },\n    /**\n     * When mobile changes, adjust the active state\n     * only when there has been a previous value\n     */\n    isMobile (val, prev) {\n      !val &&\n        this.isActive &&\n        !this.temporary &&\n        this.removeOverlay()\n\n      if (prev == null ||\n        !this.reactsToResize ||\n        !this.reactsToMobile\n      ) return\n\n      this.isActive = !val\n    },\n    permanent (val) {\n      // If enabling prop enable the drawer\n      if (val) this.isActive = true\n    },\n    showOverlay (val) {\n      if (val) this.genOverlay()\n      else this.removeOverlay()\n    },\n    value (val) {\n      if (this.permanent) return\n\n      if (val == null) {\n        this.init()\n        return\n      }\n\n      if (val !== this.isActive) this.isActive = val\n    },\n    expandOnHover: 'updateMiniVariant',\n    isMouseover (val) {\n      this.updateMiniVariant(!val)\n    },\n  },\n\n  beforeMount () {\n    this.init()\n  },\n\n  methods: {\n    calculateTouchArea () {\n      const parent = this.$el.parentNode as Element\n\n      if (!parent) return\n\n      const parentRect = parent.getBoundingClientRect()\n\n      this.touchArea = {\n        left: parentRect.left + 50,\n        right: parentRect.right - 50,\n      }\n    },\n    closeConditional () {\n      return this.isActive && !this._isDestroyed && this.reactsToClick\n    },\n    genAppend () {\n      return this.genPosition('append')\n    },\n    genBackground () {\n      const props = {\n        height: '100%',\n        width: '100%',\n        src: this.src,\n      }\n\n      const image = this.$scopedSlots.img\n        ? this.$scopedSlots.img(props)\n        : this.$createElement(VImg, { props })\n\n      return this.$createElement('div', {\n        staticClass: 'v-navigation-drawer__image',\n      }, [image])\n    },\n    genDirectives (): VNodeDirective[] {\n      const directives = [{\n        name: 'click-outside',\n        value: {\n          handler: () => { this.isActive = false },\n          closeConditional: this.closeConditional,\n          include: this.getOpenDependentElements,\n        },\n      }]\n\n      if (!this.touchless && !this.stateless) {\n        directives.push({\n          name: 'touch',\n          value: {\n            parent: true,\n            left: this.swipeLeft,\n            right: this.swipeRight,\n          },\n        } as any)\n      }\n\n      return directives\n    },\n    genListeners () {\n      const on: Record<string, (e: Event) => void> = {\n        transitionend: (e: Event) => {\n          if (e.target !== e.currentTarget) return\n          this.$emit('transitionend', e)\n\n          // IE11 does not support new Event('resize')\n          const resizeEvent = document.createEvent('UIEvents')\n          resizeEvent.initUIEvent('resize', true, false, window, 0)\n          window.dispatchEvent(resizeEvent)\n        },\n      }\n\n      if (this.miniVariant) {\n        on.click = () => this.$emit('update:mini-variant', false)\n      }\n\n      if (this.expandOnHover) {\n        on.mouseenter = () => (this.isMouseover = true)\n        on.mouseleave = () => (this.isMouseover = false)\n      }\n\n      return on\n    },\n    genPosition (name: 'prepend' | 'append') {\n      const slot = getSlot(this, name)\n\n      if (!slot) return slot\n\n      return this.$createElement('div', {\n        staticClass: `v-navigation-drawer__${name}`,\n      }, slot)\n    },\n    genPrepend () {\n      return this.genPosition('prepend')\n    },\n    genContent () {\n      return this.$createElement('div', {\n        staticClass: 'v-navigation-drawer__content',\n      }, this.$slots.default)\n    },\n    genBorder () {\n      return this.$createElement('div', {\n        staticClass: 'v-navigation-drawer__border',\n      })\n    },\n    init () {\n      if (this.permanent) {\n        this.isActive = true\n      } else if (this.stateless ||\n        this.value != null\n      ) {\n        this.isActive = this.value\n      } else if (!this.temporary) {\n        this.isActive = !this.isMobile\n      }\n    },\n    onRouteChange () {\n      if (this.reactsToRoute && this.closeConditional()) {\n        this.isActive = false\n      }\n    },\n    swipeLeft (e: TouchWrapper) {\n      if (this.isActive && this.right) return\n      this.calculateTouchArea()\n\n      if (Math.abs(e.touchendX - e.touchstartX) < 100) return\n      if (this.right &&\n        e.touchstartX >= this.touchArea.right\n      ) this.isActive = true\n      else if (!this.right && this.isActive) this.isActive = false\n    },\n    swipeRight (e: TouchWrapper) {\n      if (this.isActive && !this.right) return\n      this.calculateTouchArea()\n\n      if (Math.abs(e.touchendX - e.touchstartX) < 100) return\n      if (!this.right &&\n        e.touchstartX <= this.touchArea.left\n      ) this.isActive = true\n      else if (this.right && this.isActive) this.isActive = false\n    },\n    /**\n     * Update the application layout\n     */\n    updateApplication () {\n      if (\n        !this.isActive ||\n        this.isMobile ||\n        this.temporary ||\n        !this.$el\n      ) return 0\n\n      const width = Number(this.computedWidth)\n\n      return isNaN(width) ? this.$el.clientWidth : width\n    },\n    updateMiniVariant (val: boolean) {\n      if (this.miniVariant !== val) this.$emit('update:mini-variant', val)\n    },\n  },\n\n  render (h): VNode {\n    const children = [\n      this.genPrepend(),\n      this.genContent(),\n      this.genAppend(),\n      this.genBorder(),\n    ]\n\n    if (this.src || getSlot(this, 'img')) children.unshift(this.genBackground())\n\n    return h(this.tag, this.setBackgroundColor(this.color, {\n      class: this.classes,\n      style: this.styles,\n      directives: this.genDirectives(),\n      on: this.genListeners(),\n    }), children)\n  },\n})\n","import { render, staticRenderFns } from \"./LeftSidebar.vue?vue&type=template&id=a2d39c5c&\"\nimport script from \"./LeftSidebar.vue?vue&type=script&lang=js&\"\nexport * from \"./LeftSidebar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VNavigationDrawer,VTab,VTabItem,VTabs})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{attrs:{\"level\":\"2\"}},[_c('v-card-text',[_c('v-btn',{staticClass:\"btn-close\",attrs:{\"icon\":\"\"},on:{\"click\":_vm.onCloseButtonClicked}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1),_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.title)+\" \"),_c('v-spacer'),_c('v-text-field',{attrs:{\"append-icon\":\"mdi-magnify\",\"label\":\"Filter\",\"hint\":\"Case sensitive, use * to match any character\",\"dense\":\"\",\"error\":this.hasSearchError,\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.filterText),callback:function ($$v) {_vm.filterText=$$v},expression:\"filterText\"}}),_c('v-spacer'),_c('v-combobox',{attrs:{\"items\":_vm.searchableFields,\"label\":\"Search field ...\",\"no-filter\":\"\",\"hide-details\":\"\",\"dense\":\"\"},model:{value:(_vm.filterField),callback:function ($$v) {_vm.filterField=$$v},expression:\"filterField\"}})],1),_c('v-data-table',{attrs:{\"dense\":\"\",\"item-key\":\"itemKeyInternalIdentifier\",\"page\":_vm.currentPage,\"sort-by\":_vm.sortBy,\"sort-desc\":_vm.sortDesc,\"server-items-length\":_vm.numberMatched,\"no-data-text\":\"Attribute table has no data, search is case-sensitive, use * to match any character.\",\"loading\":_vm.tableHeaders.length == 0 || _vm.loading,\"headers\":_vm.tableHeaders,\"items\":_vm.tableData,\"items-per-page\":5,\"footer-props\":{\n      itemsPerPageOptions: [5],\n      itemsPerPageText: ''\n    }},on:{\"update:page\":function($event){_vm.currentPage=$event},\"update:sortBy\":function($event){_vm.sortBy=$event},\"update:sort-by\":function($event){_vm.sortBy=$event},\"update:sortDesc\":function($event){_vm.sortDesc=$event},\"update:sort-desc\":function($event){_vm.sortDesc=$event}},scopedSlots:_vm._u([{key:\"item.zoomToFeature\",fn:function(ref){\n    var item = ref.item;\nreturn [_c('v-icon',{on:{\"click\":function($event){return _vm.zoomToFeature(item.feature)}}},[_vm._v(\"mdi-magnify\")])]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n *  Attribute table\n *\n *  Author:    elpaso@itopen.it\n *  Date:      2020-06-30\n *  Copyright: Copyright 2020, ItOpen\n *\n *  This program is free software; you can redistribute it and/or modify\n *  it under the terms of the GNU General Public License as published by\n *  the Free Software Foundation; either version 2 of the License, or\n *  (at your option) any later version.\n *\n */\n<template>\n  <v-card level=\"2\">\n    <v-card-text>\n      <v-btn class=\"btn-close\" icon @click=\"onCloseButtonClicked\">\n        <v-icon>mdi-close</v-icon>\n      </v-btn>\n      <v-card-title>\n        {{ title }}\n        <v-spacer></v-spacer>\n        <v-text-field\n          v-model=\"filterText\"\n          append-icon=\"mdi-magnify\"\n          label=\"Filter\"\n          hint=\"Case sensitive, use * to match any character\"\n          dense\n          :error=\"this.hasSearchError\"\n          single-line\n          hide-details\n        ></v-text-field>\n        <v-spacer></v-spacer>\n        <v-combobox\n          v-model=\"filterField\"\n          :items=\"searchableFields\"\n          label=\"Search field ...\"\n          no-filter\n          hide-details\n          dense\n        ></v-combobox>\n      </v-card-title>\n\n      <v-data-table\n        dense\n        item-key=\"itemKeyInternalIdentifier\"\n        :page.sync=\"currentPage\"\n        :sort-by.sync=\"sortBy\"\n        :sort-desc.sync=\"sortDesc\"\n        :server-items-length=\"numberMatched\"\n        no-data-text=\"Attribute table has no data, search is case-sensitive, use * to match any character.\"\n        :loading=\"tableHeaders.length == 0 || loading\"\n        :headers=\"tableHeaders\"\n        :items=\"tableData\"\n        :items-per-page=\"5\"\n        :footer-props=\"{\n        itemsPerPageOptions: [5],\n        itemsPerPageText: ''\n      }\"\n      >\n        <template v-slot:item.zoomToFeature=\"{ item }\">\n          <v-icon @click=\"zoomToFeature(item.feature)\">mdi-magnify</v-icon>\n        </template>\n      </v-data-table>\n    </v-card-text>\n  </v-card>\n</template>\n\n<script>\nconst uuidv4 = require(\"uuid/v4\");\nexport default {\n  name: \"AttributeTable\",\n  props: {\n    project: null,\n    map: null\n  },\n  computed: {\n    /**\n     * Layer identifier for WFS3: layer id or short name or name\n     */\n    typename() {\n      return this.$store.state.attributeTableTypename;\n    },\n    /**\n     * Get layer name from typename\n     */\n    title() {\n      return Object.keys(this.project.wms_layers_map).find(\n        key => this.project.wms_layers_map[key] === this.typename\n      );\n    },\n    searchableFields() {\n      let layerId = this.project.wms_layers_typename_id_map[this.typename];\n      let values = [];\n      let fieldNames = Object.keys(this.project.wms_layers[layerId][\"fields\"]);\n      for (let i = 0; i < fieldNames.length; i++) {\n        let field = this.project.wms_layers[layerId][\"fields\"][fieldNames[i]];\n        values.push({\n          text: field[\"label\"],\n          value: fieldNames[i]\n        });\n      }\n      return values;\n    },\n    fieldAliases() {\n      let layerId = this.project.wms_layers_typename_id_map[this.typename];\n      let aliases = {};\n      let fieldNames = Object.keys(this.project.wms_layers[layerId][\"fields\"]);\n      for (let i = 0; i < fieldNames.length; i++) {\n        let field = this.project.wms_layers[layerId][\"fields\"][fieldNames[i]];\n        aliases[fieldNames[i]] = field[\"label\"];\n      }\n      return aliases;\n    },\n    hasSearchError() {\n      return this.error > 0 && this.filterText.length;\n    }\n  },\n  data() {\n    return {\n      error: null,\n      currentPage: 1,\n      sortBy: null,\n      sortDesc: null,\n      tableData: [],\n      tableHeaders: [],\n      numberMatched: 0,\n      filterField: null,\n      filterText: \"\",\n      loading: false\n    };\n  },\n  mounted() {\n    this.loadData();\n  },\n  watch: {\n    currentPage() {\n      this.loadData();\n    },\n    sortBy() {\n      this.loadData();\n    },\n    sortDesc() {\n      this.loadData();\n    },\n    typename() {\n      this.loadData();\n    },\n    filterField() {\n      if (this.filterText) this.loadData();\n    },\n    filterText() {\n      if (!this.filterField) {\n        this.filterField = this.searchableFields[0];\n      } else {\n        this.loadData();\n      }\n    }\n  },\n  methods: {\n    onCloseButtonClicked() {\n      this.$store.commit(\"clearAttributeTableTypename\");\n    },\n    /**\n     * Load table data from WFS3\n     */\n    async loadData() {\n      try {\n        this.error = null;\n        this.loading = true;\n        let offset = (this.currentPage - 1) * 5;\n        let sorting = \"\";\n        if (this.sortBy) {\n          sorting = \"&sortby=\" + encodeURIComponent(this.sortBy);\n          if (this.sortDesc) {\n            sorting += \"&sortdesc=1\";\n          }\n        }\n        let filter = \"\";\n        if (this.filterField && this.filterText) {\n          filter = `&${this.filterField.value}=${this.filterText}`;\n        }\n        fetch(\n          `/project/${this.project.id}/wfs3/collections/${this.typename}/items.json?limit=5&offset=${offset}${sorting}${filter}`\n        )\n          .then(response => {\n            if (!response) {\n              throw Error(\n                `Error fetching attribute table data from QGIS Server`\n              );\n            }\n            if (!response.ok) {\n              throw Error(response.statusText);\n            }\n            return response;\n          })\n          .then(response => response.json())\n          .then(json => {\n            if (json.features.length) {\n              let headers = [{ text: \"\", value: \"zoomToFeature\" }];\n              for (let k in json.features[0].properties) {\n                headers.push({\n                  text: k,\n                  value: this.fieldAliases[k] ? this.fieldAliases[k] : k\n                });\n              }\n              this.tableHeaders = headers;\n              let data = [];\n              for (let i = 0; i < json.features.length; i++) {\n                let dataRow = json.features[i].properties;\n                dataRow[\"feature\"] = json.features[i];\n                dataRow[\"itemKeyInternalIdentifier\"] = uuidv4();\n                data.push(dataRow);\n              }\n              this.tableData = data;\n              this.numberMatched = json.numberMatched;\n            } else {\n              this.tableData = [];\n            }\n          })\n          .catch(error => {\n            this.error = error.message;\n            this.tableData = [];\n          });\n      } catch (error) {\n        this.error = error.message;\n        this.tableData = [];\n      }\n      this.loading = false;\n    },\n    zoomToFeature(feature) {\n      this.map.highlightLayer.clearLayers();\n      this.map.highlightLayer.addData(feature);\n      this.map.setView(this.map.highlightLayer.getBounds().getCenter());\n    }\n  }\n};\n</script>\n\n<style scoped>\n.btn-close {\n  float: right;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AttributeTable.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AttributeTable.vue?vue&type=script&lang=js&\"","// Styles\nimport './VChip.sass'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Components\nimport { VExpandXTransition } from '../transitions'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport { breaking } from '../../util/console'\n\n// Types\nimport { PropValidator, PropType } from 'vue/types/options'\n\n/* @vue/component */\nexport default mixins(\n  Colorable,\n  Sizeable,\n  Routable,\n  Themeable,\n  GroupableFactory('chipGroup'),\n  ToggleableFactory('inputValue')\n).extend({\n  name: 'v-chip',\n\n  props: {\n    active: {\n      type: Boolean,\n      default: true,\n    },\n    activeClass: {\n      type: String,\n      default (): string | undefined {\n        if (!this.chipGroup) return ''\n\n        return this.chipGroup.activeClass\n      },\n    } as any as PropValidator<string>,\n    close: Boolean,\n    closeIcon: {\n      type: String,\n      default: '$delete',\n    },\n    disabled: Boolean,\n    draggable: Boolean,\n    filter: Boolean,\n    filterIcon: {\n      type: String,\n      default: '$complete',\n    },\n    label: Boolean,\n    link: Boolean,\n    outlined: Boolean,\n    pill: Boolean,\n    tag: {\n      type: String,\n      default: 'span',\n    },\n    textColor: String,\n    value: null as any as PropType<any>,\n  },\n\n  data: () => ({\n    proxyClass: 'v-chip--active',\n  }),\n\n  computed: {\n    classes (): object {\n      return {\n        'v-chip': true,\n        ...Routable.options.computed.classes.call(this),\n        'v-chip--clickable': this.isClickable,\n        'v-chip--disabled': this.disabled,\n        'v-chip--draggable': this.draggable,\n        'v-chip--label': this.label,\n        'v-chip--link': this.isLink,\n        'v-chip--no-color': !this.color,\n        'v-chip--outlined': this.outlined,\n        'v-chip--pill': this.pill,\n        'v-chip--removable': this.hasClose,\n        ...this.themeClasses,\n        ...this.sizeableClasses,\n        ...this.groupClasses,\n      }\n    },\n    hasClose (): boolean {\n      return Boolean(this.close)\n    },\n    isClickable (): boolean {\n      return Boolean(\n        Routable.options.computed.isClickable.call(this) ||\n        this.chipGroup\n      )\n    },\n  },\n\n  created () {\n    const breakingProps = [\n      ['outline', 'outlined'],\n      ['selected', 'input-value'],\n      ['value', 'active'],\n      ['@input', '@active.sync'],\n    ]\n\n    /* istanbul ignore next */\n    breakingProps.forEach(([original, replacement]) => {\n      if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n    })\n  },\n\n  methods: {\n    click (e: MouseEvent): void {\n      this.$emit('click', e)\n\n      this.chipGroup && this.toggle()\n    },\n    genFilter (): VNode {\n      const children = []\n\n      if (this.isActive) {\n        children.push(\n          this.$createElement(VIcon, {\n            staticClass: 'v-chip__filter',\n            props: { left: true },\n          }, this.filterIcon)\n        )\n      }\n\n      return this.$createElement(VExpandXTransition, children)\n    },\n    genClose (): VNode {\n      return this.$createElement(VIcon, {\n        staticClass: 'v-chip__close',\n        props: {\n          right: true,\n          size: 18,\n        },\n        on: {\n          click: (e: Event) => {\n            e.stopPropagation()\n            e.preventDefault()\n\n            this.$emit('click:close')\n            this.$emit('update:active', false)\n          },\n        },\n      }, this.closeIcon)\n    },\n    genContent (): VNode {\n      return this.$createElement('span', {\n        staticClass: 'v-chip__content',\n      }, [\n        this.filter && this.genFilter(),\n        this.$slots.default,\n        this.hasClose && this.genClose(),\n      ])\n    },\n  },\n\n  render (h): VNode {\n    const children = [this.genContent()]\n    let { tag, data } = this.generateRouteLink()\n\n    data.attrs = {\n      ...data.attrs,\n      draggable: this.draggable ? 'true' : undefined,\n      tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs!.tabindex,\n    }\n    data.directives!.push({\n      name: 'show',\n      value: this.active,\n    })\n    data = this.setBackgroundColor(this.color, data)\n\n    const color = this.textColor || (this.outlined && this.color)\n\n    return h(tag, this.setTextColor(color, data), children)\n  },\n})\n","import VChip from './VChip'\n\nexport { VChip }\nexport default VChip\n","import VMenu from './VMenu'\n\nexport { VMenu }\nexport default VMenu\n","import './VSimpleCheckbox.sass'\n\nimport ripple from '../../directives/ripple'\n\nimport Vue, { VNode, VNodeDirective } from 'vue'\nimport { VIcon } from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport { wrapInArray } from '../../util/helpers'\n\nexport default Vue.extend({\n  name: 'v-simple-checkbox',\n\n  functional: true,\n\n  directives: {\n    ripple,\n  },\n\n  props: {\n    ...Colorable.options.props,\n    ...Themeable.options.props,\n    disabled: Boolean,\n    ripple: {\n      type: Boolean,\n      default: true,\n    },\n    value: Boolean,\n    indeterminate: Boolean,\n    indeterminateIcon: {\n      type: String,\n      default: '$checkboxIndeterminate',\n    },\n    onIcon: {\n      type: String,\n      default: '$checkboxOn',\n    },\n    offIcon: {\n      type: String,\n      default: '$checkboxOff',\n    },\n  },\n\n  render (h, { props, data, listeners }): VNode {\n    const children = []\n\n    if (props.ripple && !props.disabled) {\n      const ripple = h('div', Colorable.options.methods.setTextColor(props.color, {\n        staticClass: 'v-input--selection-controls__ripple',\n        directives: [{\n          name: 'ripple',\n          value: { center: true },\n        }] as VNodeDirective[],\n      }))\n\n      children.push(ripple)\n    }\n\n    let icon = props.offIcon\n    if (props.indeterminate) icon = props.indeterminateIcon\n    else if (props.value) icon = props.onIcon\n\n    children.push(h(VIcon, Colorable.options.methods.setTextColor(props.value && props.color, {\n      props: {\n        disabled: props.disabled,\n        dark: props.dark,\n        light: props.light,\n      },\n    }), icon))\n\n    const classes = {\n      'v-simple-checkbox': true,\n      'v-simple-checkbox--disabled': props.disabled,\n    }\n\n    return h('div',\n      mergeData(data, {\n        class: classes,\n        on: {\n          click: (e: MouseEvent) => {\n            e.stopPropagation()\n\n            if (data.on && data.on.input && !props.disabled) {\n              wrapInArray(data.on.input).forEach(f => f(!props.value))\n            }\n          },\n        },\n      }), children)\n  },\n})\n","// Styles\nimport './VSubheader.sass'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n  Themeable\n  /* @vue/component */\n).extend({\n  name: 'v-subheader',\n\n  props: {\n    inset: Boolean,\n  },\n\n  render (h): VNode {\n    return h('div', {\n      staticClass: 'v-subheader',\n      class: {\n        'v-subheader--inset': this.inset,\n        ...this.themeClasses,\n      },\n      attrs: this.$attrs,\n      on: this.$listeners,\n    }, this.$slots.default)\n  },\n})\n","import VSubheader from './VSubheader'\n\nexport { VSubheader }\nexport default VSubheader\n","// Components\nimport VSimpleCheckbox from '../VCheckbox/VSimpleCheckbox'\nimport VDivider from '../VDivider'\nimport VSubheader from '../VSubheader'\nimport {\n  VList,\n  VListItem,\n  VListItemAction,\n  VListItemContent,\n  VListItemTitle,\n} from '../VList'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport {\n  escapeHTML,\n  getPropertyFromItem,\n} from '../../util/helpers'\n\n// Types\nimport mixins from '../../util/mixins'\nimport { VNode, PropType, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { SelectItemKey } from 'vuetify/types'\n\ntype ListTile = { item: any, disabled?: null | boolean, value?: boolean, index: number };\n\n/* @vue/component */\nexport default mixins(Colorable, Themeable).extend({\n  name: 'v-select-list',\n\n  // https://github.com/vuejs/vue/issues/6872\n  directives: {\n    ripple,\n  },\n\n  props: {\n    action: Boolean,\n    dense: Boolean,\n    hideSelected: Boolean,\n    items: {\n      type: Array,\n      default: () => [],\n    } as PropValidator<any[]>,\n    itemDisabled: {\n      type: [String, Array, Function] as PropType<SelectItemKey>,\n      default: 'disabled',\n    },\n    itemText: {\n      type: [String, Array, Function] as PropType<SelectItemKey>,\n      default: 'text',\n    },\n    itemValue: {\n      type: [String, Array, Function] as PropType<SelectItemKey>,\n      default: 'value',\n    },\n    noDataText: String,\n    noFilter: Boolean,\n    searchInput: null as unknown as PropType<any>,\n    selectedItems: {\n      type: Array,\n      default: () => [],\n    } as PropValidator<any[]>,\n  },\n\n  computed: {\n    parsedItems (): any[] {\n      return this.selectedItems.map(item => this.getValue(item))\n    },\n    tileActiveClass (): string {\n      return Object.keys(this.setTextColor(this.color).class || {}).join(' ')\n    },\n    staticNoDataTile (): VNode {\n      const tile = {\n        attrs: {\n          role: undefined,\n        },\n        on: {\n          mousedown: (e: Event) => e.preventDefault(), // Prevent onBlur from being called\n        },\n      }\n\n      return this.$createElement(VListItem, tile, [\n        this.genTileContent(this.noDataText),\n      ])\n    },\n  },\n\n  methods: {\n    genAction (item: object, inputValue: any): VNode {\n      return this.$createElement(VListItemAction, [\n        this.$createElement(VSimpleCheckbox, {\n          props: {\n            color: this.color,\n            value: inputValue,\n          },\n          on: {\n            input: () => this.$emit('select', item),\n          },\n        }),\n      ])\n    },\n    genDivider (props: { [key: string]: any }) {\n      return this.$createElement(VDivider, { props })\n    },\n    genFilteredText (text: string) {\n      text = text || ''\n\n      if (!this.searchInput || this.noFilter) return escapeHTML(text)\n\n      const { start, middle, end } = this.getMaskedCharacters(text)\n\n      return `${escapeHTML(start)}${this.genHighlight(middle)}${escapeHTML(end)}`\n    },\n    genHeader (props: { [key: string]: any }): VNode {\n      return this.$createElement(VSubheader, { props }, props.header)\n    },\n    genHighlight (text: string): string {\n      return `<span class=\"v-list-item__mask\">${escapeHTML(text)}</span>`\n    },\n    getMaskedCharacters (text: string): {\n      start: string\n      middle: string\n      end: string\n    } {\n      const searchInput = (this.searchInput || '').toString().toLocaleLowerCase()\n      const index = text.toLocaleLowerCase().indexOf(searchInput)\n\n      if (index < 0) return { start: '', middle: text, end: '' }\n\n      const start = text.slice(0, index)\n      const middle = text.slice(index, index + searchInput.length)\n      const end = text.slice(index + searchInput.length)\n      return { start, middle, end }\n    },\n    genTile ({\n      item,\n      index,\n      disabled = null,\n      value = false,\n    }: ListTile): VNode | VNode[] | undefined {\n      if (!value) value = this.hasItem(item)\n\n      if (item === Object(item)) {\n        disabled = disabled !== null\n          ? disabled\n          : this.getDisabled(item)\n      }\n\n      const tile = {\n        attrs: {\n          // Default behavior in list does not\n          // contain aria-selected by default\n          'aria-selected': String(value),\n          id: `list-item-${this._uid}-${index}`,\n          role: 'option',\n        },\n        on: {\n          mousedown: (e: Event) => {\n            // Prevent onBlur from being called\n            e.preventDefault()\n          },\n          click: () => disabled || this.$emit('select', item),\n        },\n        props: {\n          activeClass: this.tileActiveClass,\n          disabled,\n          ripple: true,\n          inputValue: value,\n        },\n      }\n\n      if (!this.$scopedSlots.item) {\n        return this.$createElement(VListItem, tile, [\n          this.action && !this.hideSelected && this.items.length > 0\n            ? this.genAction(item, value)\n            : null,\n          this.genTileContent(item, index),\n        ])\n      }\n\n      const parent = this\n      const scopedSlot = this.$scopedSlots.item({\n        parent,\n        item,\n        attrs: {\n          ...tile.attrs,\n          ...tile.props,\n        },\n        on: tile.on,\n      })\n\n      return this.needsTile(scopedSlot)\n        ? this.$createElement(VListItem, tile, scopedSlot)\n        : scopedSlot\n    },\n    genTileContent (item: any, index = 0): VNode {\n      const innerHTML = this.genFilteredText(this.getText(item))\n\n      return this.$createElement(VListItemContent,\n        [this.$createElement(VListItemTitle, {\n          domProps: { innerHTML },\n        })]\n      )\n    },\n    hasItem (item: object) {\n      return this.parsedItems.indexOf(this.getValue(item)) > -1\n    },\n    needsTile (slot: VNode[] | undefined) {\n      return slot!.length !== 1 ||\n        slot![0].componentOptions == null ||\n        slot![0].componentOptions.Ctor.options.name !== 'v-list-item'\n    },\n    getDisabled (item: object) {\n      return Boolean(getPropertyFromItem(item, this.itemDisabled, false))\n    },\n    getText (item: object) {\n      return String(getPropertyFromItem(item, this.itemText, item))\n    },\n    getValue (item: object) {\n      return getPropertyFromItem(item, this.itemValue, this.getText(item))\n    },\n  },\n\n  render (): VNode {\n    const children: VNodeChildren = []\n    const itemsLength = this.items.length\n    for (let index = 0; index < itemsLength; index++) {\n      const item = this.items[index]\n\n      if (this.hideSelected &&\n        this.hasItem(item)\n      ) continue\n\n      if (item == null) children.push(this.genTile({ item, index }))\n      else if (item.header) children.push(this.genHeader(item))\n      else if (item.divider) children.push(this.genDivider(item))\n      else children.push(this.genTile({ item, index }))\n    }\n\n    children.length || children.push(this.$slots['no-data'] || this.staticNoDataTile)\n\n    this.$slots['prepend-item'] && children.unshift(this.$slots['prepend-item'])\n\n    this.$slots['append-item'] && children.push(this.$slots['append-item'])\n\n    return this.$createElement(VList, {\n      staticClass: 'v-select-list',\n      class: this.themeClasses,\n      attrs: {\n        role: 'listbox',\n        tabindex: -1,\n      },\n      props: { dense: this.dense },\n    }, children)\n  },\n})\n","// Styles\nimport './VLabel.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable, { functionalThemeClasses } from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n/* @vue/component */\nexport default mixins(Themeable).extend({\n  name: 'v-label',\n\n  functional: true,\n\n  props: {\n    absolute: Boolean,\n    color: {\n      type: String,\n      default: 'primary',\n    },\n    disabled: Boolean,\n    focused: Boolean,\n    for: String,\n    left: {\n      type: [Number, String],\n      default: 0,\n    },\n    right: {\n      type: [Number, String],\n      default: 'auto',\n    },\n    value: Boolean,\n  },\n\n  render (h, ctx): VNode {\n    const { children, listeners, props } = ctx\n    const data = {\n      staticClass: 'v-label',\n      class: {\n        'v-label--active': props.value,\n        'v-label--is-disabled': props.disabled,\n        ...functionalThemeClasses(ctx),\n      },\n      attrs: {\n        for: props.for,\n        'aria-hidden': !props.for,\n      },\n      on: listeners,\n      style: {\n        left: convertToUnit(props.left),\n        right: convertToUnit(props.right),\n        position: props.absolute ? 'absolute' : 'relative',\n      },\n      ref: 'label',\n    }\n\n    return h('label', Colorable.options.methods.setTextColor(props.focused && props.color, data), children)\n  },\n})\n","import VLabel from './VLabel'\n\nexport { VLabel }\nexport default VLabel\n","// Styles\nimport './VMessages.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport mixins from '../../util/mixins'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\n\n/* @vue/component */\nexport default mixins(Colorable, Themeable).extend({\n  name: 'v-messages',\n\n  props: {\n    value: {\n      type: Array,\n      default: () => ([]),\n    } as PropValidator<string[]>,\n  },\n\n  methods: {\n    genChildren () {\n      return this.$createElement('transition-group', {\n        staticClass: 'v-messages__wrapper',\n        attrs: {\n          name: 'message-transition',\n          tag: 'div',\n        },\n      }, this.value.map(this.genMessage))\n    },\n    genMessage (message: string, key: number) {\n      return this.$createElement('div', {\n        staticClass: 'v-messages__message',\n        key,\n      }, getSlot(this, 'default', { message, key }) || [message])\n    },\n  },\n\n  render (h): VNode {\n    return h('div', this.setTextColor(this.color, {\n      staticClass: 'v-messages',\n      class: this.themeClasses,\n    }), [this.genChildren()])\n  },\n})\n","import VMessages from './VMessages'\n\nexport { VMessages }\nexport default VMessages\n","// Mixins\nimport Colorable from '../colorable'\nimport Themeable from '../themeable'\nimport { inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { deepEqual } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\nimport { InputMessage, InputValidationRules } from 'vuetify/types'\n\nconst baseMixins = mixins(\n  Colorable,\n  RegistrableInject<'form', any>('form'),\n  Themeable,\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n  name: 'validatable',\n\n  props: {\n    disabled: Boolean,\n    error: Boolean,\n    errorCount: {\n      type: [Number, String],\n      default: 1,\n    },\n    errorMessages: {\n      type: [String, Array],\n      default: () => [],\n    } as PropValidator<InputMessage>,\n    messages: {\n      type: [String, Array],\n      default: () => [],\n    } as PropValidator<InputMessage>,\n    readonly: Boolean,\n    rules: {\n      type: Array,\n      default: () => [],\n    } as PropValidator<InputValidationRules>,\n    success: Boolean,\n    successMessages: {\n      type: [String, Array],\n      default: () => [],\n    } as PropValidator<InputMessage>,\n    validateOnBlur: Boolean,\n    value: { required: false },\n  },\n\n  data () {\n    return {\n      errorBucket: [] as string[],\n      hasColor: false,\n      hasFocused: false,\n      hasInput: false,\n      isFocused: false,\n      isResetting: false,\n      lazyValue: this.value,\n      valid: false,\n    }\n  },\n\n  computed: {\n    computedColor (): string | undefined {\n      if (this.isDisabled) return undefined\n      if (this.color) return this.color\n      // It's assumed that if the input is on a\n      // dark background, the user will want to\n      // have a white color. If the entire app\n      // is setup to be dark, then they will\n      // like want to use their primary color\n      if (this.isDark && !this.appIsDark) return 'white'\n      else return 'primary'\n    },\n    hasError (): boolean {\n      return (\n        this.internalErrorMessages.length > 0 ||\n        this.errorBucket.length > 0 ||\n        this.error\n      )\n    },\n    // TODO: Add logic that allows the user to enable based\n    // upon a good validation\n    hasSuccess (): boolean {\n      return (\n        this.internalSuccessMessages.length > 0 ||\n        this.success\n      )\n    },\n    externalError (): boolean {\n      return this.internalErrorMessages.length > 0 || this.error\n    },\n    hasMessages (): boolean {\n      return this.validationTarget.length > 0\n    },\n    hasState (): boolean {\n      if (this.isDisabled) return false\n\n      return (\n        this.hasSuccess ||\n        (this.shouldValidate && this.hasError)\n      )\n    },\n    internalErrorMessages (): InputValidationRules {\n      return this.genInternalMessages(this.errorMessages)\n    },\n    internalMessages (): InputValidationRules {\n      return this.genInternalMessages(this.messages)\n    },\n    internalSuccessMessages (): InputValidationRules {\n      return this.genInternalMessages(this.successMessages)\n    },\n    internalValue: {\n      get (): unknown {\n        return this.lazyValue\n      },\n      set (val: any) {\n        this.lazyValue = val\n\n        this.$emit('input', val)\n      },\n    },\n    isDisabled (): boolean {\n      return this.disabled || (\n        !!this.form &&\n        this.form.disabled\n      )\n    },\n    isInteractive (): boolean {\n      return !this.isDisabled && !this.isReadonly\n    },\n    isReadonly (): boolean {\n      return this.readonly || (\n        !!this.form &&\n        this.form.readonly\n      )\n    },\n    shouldValidate (): boolean {\n      if (this.externalError) return true\n      if (this.isResetting) return false\n\n      return this.validateOnBlur\n        ? this.hasFocused && !this.isFocused\n        : (this.hasInput || this.hasFocused)\n    },\n    validations (): InputValidationRules {\n      return this.validationTarget.slice(0, Number(this.errorCount))\n    },\n    validationState (): string | undefined {\n      if (this.isDisabled) return undefined\n      if (this.hasError && this.shouldValidate) return 'error'\n      if (this.hasSuccess) return 'success'\n      if (this.hasColor) return this.computedColor\n      return undefined\n    },\n    validationTarget (): InputValidationRules {\n      if (this.internalErrorMessages.length > 0) {\n        return this.internalErrorMessages\n      } else if (this.successMessages.length > 0) {\n        return this.internalSuccessMessages\n      } else if (this.messages.length > 0) {\n        return this.internalMessages\n      } else if (this.shouldValidate) {\n        return this.errorBucket\n      } else return []\n    },\n  },\n\n  watch: {\n    rules: {\n      handler (newVal, oldVal) {\n        if (deepEqual(newVal, oldVal)) return\n        this.validate()\n      },\n      deep: true,\n    },\n    internalValue () {\n      // If it's the first time we're setting input,\n      // mark it with hasInput\n      this.hasInput = true\n      this.validateOnBlur || this.$nextTick(this.validate)\n    },\n    isFocused (val) {\n      // Should not check validation\n      // if disabled\n      if (\n        !val &&\n        !this.isDisabled\n      ) {\n        this.hasFocused = true\n        this.validateOnBlur && this.$nextTick(this.validate)\n      }\n    },\n    isResetting () {\n      setTimeout(() => {\n        this.hasInput = false\n        this.hasFocused = false\n        this.isResetting = false\n        this.validate()\n      }, 0)\n    },\n    hasError (val) {\n      if (this.shouldValidate) {\n        this.$emit('update:error', val)\n      }\n    },\n    value (val) {\n      this.lazyValue = val\n    },\n  },\n\n  beforeMount () {\n    this.validate()\n  },\n\n  created () {\n    this.form && this.form.register(this)\n  },\n\n  beforeDestroy () {\n    this.form && this.form.unregister(this)\n  },\n\n  methods: {\n    genInternalMessages (messages: InputMessage): InputValidationRules {\n      if (!messages) return []\n      else if (Array.isArray(messages)) return messages\n      else return [messages]\n    },\n    /** @public */\n    reset () {\n      this.isResetting = true\n      this.internalValue = Array.isArray(this.internalValue)\n        ? []\n        : undefined\n    },\n    /** @public */\n    resetValidation () {\n      this.isResetting = true\n    },\n    /** @public */\n    validate (force = false, value?: any): boolean {\n      const errorBucket = []\n      value = value || this.internalValue\n\n      if (force) this.hasInput = this.hasFocused = true\n\n      for (let index = 0; index < this.rules.length; index++) {\n        const rule = this.rules[index]\n        const valid = typeof rule === 'function' ? rule(value) : rule\n\n        if (valid === false || typeof valid === 'string') {\n          errorBucket.push(valid || '')\n        } else if (typeof valid !== 'boolean') {\n          consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n        }\n      }\n\n      this.errorBucket = errorBucket\n      this.valid = errorBucket.length === 0\n\n      return this.valid\n    },\n  },\n})\n","// Styles\nimport './VInput.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport VLabel from '../VLabel'\nimport VMessages from '../VMessages'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Validatable from '../../mixins/validatable'\n\n// Utilities\nimport {\n  convertToUnit,\n  getSlot,\n  kebabCase,\n} from '../../util/helpers'\nimport mergeData from '../../util/mergeData'\n\n// Types\nimport { VNode, VNodeData, PropType } from 'vue'\nimport mixins from '../../util/mixins'\nimport { InputValidationRule } from 'vuetify/types'\n\nconst baseMixins = mixins(\n  BindsAttrs,\n  Validatable,\n)\n\ninterface options extends InstanceType<typeof baseMixins> {\n  /* eslint-disable-next-line camelcase */\n  $_modelEvent: string\n}\n\n/* @vue/component */\nexport default baseMixins.extend<options>().extend({\n  name: 'v-input',\n\n  inheritAttrs: false,\n\n  props: {\n    appendIcon: String,\n    backgroundColor: {\n      type: String,\n      default: '',\n    },\n    dense: Boolean,\n    height: [Number, String],\n    hideDetails: [Boolean, String] as PropType<boolean | 'auto'>,\n    hint: String,\n    id: String,\n    label: String,\n    loading: Boolean,\n    persistentHint: Boolean,\n    prependIcon: String,\n    value: null as any as PropType<any>,\n  },\n\n  data () {\n    return {\n      lazyValue: this.value,\n      hasMouseDown: false,\n    }\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        'v-input--has-state': this.hasState,\n        'v-input--hide-details': !this.showDetails,\n        'v-input--is-label-active': this.isLabelActive,\n        'v-input--is-dirty': this.isDirty,\n        'v-input--is-disabled': this.isDisabled,\n        'v-input--is-focused': this.isFocused,\n        // <v-switch loading>.loading === '' so we can't just cast to boolean\n        'v-input--is-loading': this.loading !== false && this.loading != null,\n        'v-input--is-readonly': this.isReadonly,\n        'v-input--dense': this.dense,\n        ...this.themeClasses,\n      }\n    },\n    computedId (): string {\n      return this.id || `input-${this._uid}`\n    },\n    hasDetails (): boolean {\n      return this.messagesToDisplay.length > 0\n    },\n    hasHint (): boolean {\n      return !this.hasMessages &&\n        !!this.hint &&\n        (this.persistentHint || this.isFocused)\n    },\n    hasLabel (): boolean {\n      return !!(this.$slots.label || this.label)\n    },\n    // Proxy for `lazyValue`\n    // This allows an input\n    // to function without\n    // a provided model\n    internalValue: {\n      get (): any {\n        return this.lazyValue\n      },\n      set (val: any) {\n        this.lazyValue = val\n        this.$emit(this.$_modelEvent, val)\n      },\n    },\n    isDirty (): boolean {\n      return !!this.lazyValue\n    },\n    isLabelActive (): boolean {\n      return this.isDirty\n    },\n    messagesToDisplay (): string[] {\n      if (this.hasHint) return [this.hint]\n\n      if (!this.hasMessages) return []\n\n      return this.validations.map((validation: string | InputValidationRule) => {\n        if (typeof validation === 'string') return validation\n\n        const validationResult = validation(this.internalValue)\n\n        return typeof validationResult === 'string' ? validationResult : ''\n      }).filter(message => message !== '')\n    },\n    showDetails (): boolean {\n      return this.hideDetails === false || (this.hideDetails === 'auto' && this.hasDetails)\n    },\n  },\n\n  watch: {\n    value (val) {\n      this.lazyValue = val\n    },\n  },\n\n  beforeCreate () {\n    // v-radio-group needs to emit a different event\n    // https://github.com/vuetifyjs/vuetify/issues/4752\n    this.$_modelEvent = (this.$options.model && this.$options.model.event) || 'input'\n  },\n\n  methods: {\n    genContent () {\n      return [\n        this.genPrependSlot(),\n        this.genControl(),\n        this.genAppendSlot(),\n      ]\n    },\n    genControl () {\n      return this.$createElement('div', {\n        staticClass: 'v-input__control',\n      }, [\n        this.genInputSlot(),\n        this.genMessages(),\n      ])\n    },\n    genDefaultSlot () {\n      return [\n        this.genLabel(),\n        this.$slots.default,\n      ]\n    },\n    genIcon (\n      type: string,\n      cb?: (e: Event) => void,\n      extraData: VNodeData = {}\n    ) {\n      const icon = (this as any)[`${type}Icon`]\n      const eventName = `click:${kebabCase(type)}`\n      const hasListener = !!(this.listeners$[eventName] || cb)\n\n      const data = mergeData({\n        attrs: {\n          'aria-label': hasListener ? kebabCase(type).split('-')[0] + ' icon' : undefined,\n          color: this.validationState,\n          dark: this.dark,\n          disabled: this.isDisabled,\n          light: this.light,\n        },\n        on: !hasListener\n          ? undefined\n          : {\n            click: (e: Event) => {\n              e.preventDefault()\n              e.stopPropagation()\n\n              this.$emit(eventName, e)\n              cb && cb(e)\n            },\n            // Container has g event that will\n            // trigger menu open if enclosed\n            mouseup: (e: Event) => {\n              e.preventDefault()\n              e.stopPropagation()\n            },\n          },\n      }, extraData)\n\n      return this.$createElement('div', {\n        staticClass: `v-input__icon`,\n        class: type ? `v-input__icon--${kebabCase(type)}` : undefined,\n      }, [\n        this.$createElement(\n          VIcon,\n          data,\n          icon\n        ),\n      ])\n    },\n    genInputSlot () {\n      return this.$createElement('div', this.setBackgroundColor(this.backgroundColor, {\n        staticClass: 'v-input__slot',\n        style: { height: convertToUnit(this.height) },\n        on: {\n          click: this.onClick,\n          mousedown: this.onMouseDown,\n          mouseup: this.onMouseUp,\n        },\n        ref: 'input-slot',\n      }), [this.genDefaultSlot()])\n    },\n    genLabel () {\n      if (!this.hasLabel) return null\n\n      return this.$createElement(VLabel, {\n        props: {\n          color: this.validationState,\n          dark: this.dark,\n          disabled: this.isDisabled,\n          focused: this.hasState,\n          for: this.computedId,\n          light: this.light,\n        },\n      }, this.$slots.label || this.label)\n    },\n    genMessages () {\n      if (!this.showDetails) return null\n\n      return this.$createElement(VMessages, {\n        props: {\n          color: this.hasHint ? '' : this.validationState,\n          dark: this.dark,\n          light: this.light,\n          value: this.messagesToDisplay,\n        },\n        attrs: {\n          role: this.hasMessages ? 'alert' : null,\n        },\n        scopedSlots: {\n          default: props => getSlot(this, 'message', props),\n        },\n      })\n    },\n    genSlot (\n      type: string,\n      location: string,\n      slot: (VNode | VNode[])[]\n    ) {\n      if (!slot.length) return null\n\n      const ref = `${type}-${location}`\n\n      return this.$createElement('div', {\n        staticClass: `v-input__${ref}`,\n        ref,\n      }, slot)\n    },\n    genPrependSlot () {\n      const slot = []\n\n      if (this.$slots.prepend) {\n        slot.push(this.$slots.prepend)\n      } else if (this.prependIcon) {\n        slot.push(this.genIcon('prepend'))\n      }\n\n      return this.genSlot('prepend', 'outer', slot)\n    },\n    genAppendSlot () {\n      const slot = []\n\n      // Append icon for text field was really\n      // an appended inner icon, v-text-field\n      // will overwrite this method in order to obtain\n      // backwards compat\n      if (this.$slots.append) {\n        slot.push(this.$slots.append)\n      } else if (this.appendIcon) {\n        slot.push(this.genIcon('append'))\n      }\n\n      return this.genSlot('append', 'outer', slot)\n    },\n    onClick (e: Event) {\n      this.$emit('click', e)\n    },\n    onMouseDown (e: Event) {\n      this.hasMouseDown = true\n      this.$emit('mousedown', e)\n    },\n    onMouseUp (e: Event) {\n      this.hasMouseDown = false\n      this.$emit('mouseup', e)\n    },\n  },\n\n  render (h): VNode {\n    return h('div', this.setTextColor(this.validationState, {\n      staticClass: 'v-input',\n      class: this.classes,\n    }), this.genContent())\n  },\n})\n","import VInput from './VInput'\n\nexport { VInput }\nexport default VInput\n","// Styles\nimport './VCounter.sass'\n\n// Mixins\nimport Themeable, { functionalThemeClasses } from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Themeable).extend({\n  name: 'v-counter',\n\n  functional: true,\n\n  props: {\n    value: {\n      type: [Number, String],\n      default: '',\n    },\n    max: [Number, String],\n  },\n\n  render (h, ctx): VNode {\n    const { props } = ctx\n    const max = parseInt(props.max, 10)\n    const value = parseInt(props.value, 10)\n    const content = max ? `${value} / ${max}` : String(props.value)\n    const isGreater = max && (value > max)\n\n    return h('div', {\n      staticClass: 'v-counter',\n      class: {\n        'error--text': isGreater,\n        ...functionalThemeClasses(ctx),\n      },\n    }, content)\n  },\n})\n","import VCounter from './VCounter'\n\nexport { VCounter }\nexport default VCounter\n","// Directives\nimport Intersect from '../../directives/intersect'\n\n// Utilities\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport Vue from 'vue'\n\nexport default function intersectable (options: { onVisible: string[] }) {\n  if (typeof window === 'undefined' || !('IntersectionObserver' in window)) {\n    // do nothing because intersection observer is not available\n    return Vue.extend({ name: 'intersectable' })\n  }\n\n  return Vue.extend({\n    name: 'intersectable',\n\n    mounted () {\n      Intersect.inserted(this.$el as HTMLElement, {\n        name: 'intersect',\n        value: this.onObserve,\n      })\n    },\n\n    destroyed () {\n      Intersect.unbind(this.$el as HTMLElement)\n    },\n\n    methods: {\n      onObserve (entries: IntersectionObserverEntry[], observer: IntersectionObserver, isIntersecting: boolean) {\n        if (!isIntersecting) return\n\n        for (let i = 0, length = options.onVisible.length; i < length; i++) {\n          const callback = (this as any)[options.onVisible[i]]\n\n          if (typeof callback === 'function') {\n            callback()\n            continue\n          }\n\n          consoleWarn(options.onVisible[i] + ' method is not available on the instance but referenced in intersectable mixin options')\n        }\n      },\n    },\n  })\n}\n","// Styles\nimport './VTextField.sass'\n\n// Extensions\nimport VInput from '../VInput'\n\n// Components\nimport VCounter from '../VCounter'\nimport VLabel from '../VLabel'\n\n// Mixins\nimport Intersectable from '../../mixins/intersectable'\nimport Loadable from '../../mixins/loadable'\nimport Validatable from '../../mixins/validatable'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Utilities\nimport { convertToUnit, keyCodes } from '../../util/helpers'\nimport { breaking, consoleWarn } from '../../util/console'\n\n// Types\nimport mixins from '../../util/mixins'\nimport { VNode, PropType } from 'vue/types'\n\nconst baseMixins = mixins(\n  VInput,\n  Intersectable({\n    onVisible: [\n      'setLabelWidth',\n      'setPrefixWidth',\n      'setPrependWidth',\n      'tryAutofocus',\n    ],\n  }),\n  Loadable,\n)\ninterface options extends InstanceType<typeof baseMixins> {\n  $refs: {\n    label: HTMLElement\n    input: HTMLInputElement\n    'prepend-inner': HTMLElement\n    prefix: HTMLElement\n    suffix: HTMLElement\n  }\n}\n\nconst dirtyTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\n/* @vue/component */\nexport default baseMixins.extend<options>().extend({\n  name: 'v-text-field',\n\n  directives: { ripple },\n\n  inheritAttrs: false,\n\n  props: {\n    appendOuterIcon: String,\n    autofocus: Boolean,\n    clearable: Boolean,\n    clearIcon: {\n      type: String,\n      default: '$clear',\n    },\n    counter: [Boolean, Number, String],\n    counterValue: Function as PropType<(value: any) => number>,\n    filled: Boolean,\n    flat: Boolean,\n    fullWidth: Boolean,\n    label: String,\n    outlined: Boolean,\n    placeholder: String,\n    prefix: String,\n    prependInnerIcon: String,\n    reverse: Boolean,\n    rounded: Boolean,\n    shaped: Boolean,\n    singleLine: Boolean,\n    solo: Boolean,\n    soloInverted: Boolean,\n    suffix: String,\n    type: {\n      type: String,\n      default: 'text',\n    },\n  },\n\n  data: () => ({\n    badInput: false,\n    labelWidth: 0,\n    prefixWidth: 0,\n    prependWidth: 0,\n    initialValue: null,\n    isBooted: false,\n    isClearing: false,\n  }),\n\n  computed: {\n    classes (): object {\n      return {\n        ...VInput.options.computed.classes.call(this),\n        'v-text-field': true,\n        'v-text-field--full-width': this.fullWidth,\n        'v-text-field--prefix': this.prefix,\n        'v-text-field--single-line': this.isSingle,\n        'v-text-field--solo': this.isSolo,\n        'v-text-field--solo-inverted': this.soloInverted,\n        'v-text-field--solo-flat': this.flat,\n        'v-text-field--filled': this.filled,\n        'v-text-field--is-booted': this.isBooted,\n        'v-text-field--enclosed': this.isEnclosed,\n        'v-text-field--reverse': this.reverse,\n        'v-text-field--outlined': this.outlined,\n        'v-text-field--placeholder': this.placeholder,\n        'v-text-field--rounded': this.rounded,\n        'v-text-field--shaped': this.shaped,\n      }\n    },\n    computedColor (): string | undefined {\n      const computedColor = Validatable.options.computed.computedColor.call(this)\n\n      if (!this.soloInverted || !this.isFocused) return computedColor\n\n      return this.color || 'primary'\n    },\n    computedCounterValue (): number {\n      if (typeof this.counterValue === 'function') {\n        return this.counterValue(this.internalValue)\n      }\n      return (this.internalValue || '').toString().length\n    },\n    hasCounter (): boolean {\n      return this.counter !== false && this.counter != null\n    },\n    hasDetails (): boolean {\n      return VInput.options.computed.hasDetails.call(this) || this.hasCounter\n    },\n    internalValue: {\n      get (): any {\n        return this.lazyValue\n      },\n      set (val: any) {\n        this.lazyValue = val\n        this.$emit('input', this.lazyValue)\n      },\n    },\n    isDirty (): boolean {\n      return this.lazyValue?.toString().length > 0 || this.badInput\n    },\n    isEnclosed (): boolean {\n      return (\n        this.filled ||\n        this.isSolo ||\n        this.outlined\n      )\n    },\n    isLabelActive (): boolean {\n      return this.isDirty || dirtyTypes.includes(this.type)\n    },\n    isSingle (): boolean {\n      return (\n        this.isSolo ||\n        this.singleLine ||\n        this.fullWidth ||\n        // https://material.io/components/text-fields/#filled-text-field\n        (this.filled && !this.hasLabel)\n      )\n    },\n    isSolo (): boolean {\n      return this.solo || this.soloInverted\n    },\n    labelPosition (): Record<'left' | 'right', string | number | undefined> {\n      let offset = (this.prefix && !this.labelValue) ? this.prefixWidth : 0\n\n      if (this.labelValue && this.prependWidth) offset -= this.prependWidth\n\n      return (this.$vuetify.rtl === this.reverse) ? {\n        left: offset,\n        right: 'auto',\n      } : {\n        left: 'auto',\n        right: offset,\n      }\n    },\n    showLabel (): boolean {\n      return this.hasLabel && (!this.isSingle || (!this.isLabelActive && !this.placeholder))\n    },\n    labelValue (): boolean {\n      return !this.isSingle &&\n        Boolean(this.isFocused || this.isLabelActive || this.placeholder)\n    },\n  },\n\n  watch: {\n    labelValue: 'setLabelWidth',\n    outlined: 'setLabelWidth',\n    label () {\n      this.$nextTick(this.setLabelWidth)\n    },\n    prefix () {\n      this.$nextTick(this.setPrefixWidth)\n    },\n    isFocused: 'updateValue',\n    value (val) {\n      this.lazyValue = val\n    },\n  },\n\n  created () {\n    /* istanbul ignore next */\n    if (this.$attrs.hasOwnProperty('box')) {\n      breaking('box', 'filled', this)\n    }\n\n    /* istanbul ignore next */\n    if (this.$attrs.hasOwnProperty('browser-autocomplete')) {\n      breaking('browser-autocomplete', 'autocomplete', this)\n    }\n\n    /* istanbul ignore if */\n    if (this.shaped && !(this.filled || this.outlined || this.isSolo)) {\n      consoleWarn('shaped should be used with either filled or outlined', this)\n    }\n  },\n\n  mounted () {\n    this.autofocus && this.tryAutofocus()\n    this.setLabelWidth()\n    this.setPrefixWidth()\n    this.setPrependWidth()\n    requestAnimationFrame(() => (this.isBooted = true))\n  },\n\n  methods: {\n    /** @public */\n    focus () {\n      this.onFocus()\n    },\n    /** @public */\n    blur (e?: Event) {\n      // https://github.com/vuetifyjs/vuetify/issues/5913\n      // Safari tab order gets broken if called synchronous\n      window.requestAnimationFrame(() => {\n        this.$refs.input && this.$refs.input.blur()\n      })\n    },\n    clearableCallback () {\n      this.$refs.input && this.$refs.input.focus()\n      this.$nextTick(() => this.internalValue = null)\n    },\n    genAppendSlot () {\n      const slot = []\n\n      if (this.$slots['append-outer']) {\n        slot.push(this.$slots['append-outer'] as VNode[])\n      } else if (this.appendOuterIcon) {\n        slot.push(this.genIcon('appendOuter'))\n      }\n\n      return this.genSlot('append', 'outer', slot)\n    },\n    genPrependInnerSlot () {\n      const slot = []\n\n      if (this.$slots['prepend-inner']) {\n        slot.push(this.$slots['prepend-inner'] as VNode[])\n      } else if (this.prependInnerIcon) {\n        slot.push(this.genIcon('prependInner'))\n      }\n\n      return this.genSlot('prepend', 'inner', slot)\n    },\n    genIconSlot () {\n      const slot = []\n\n      if (this.$slots['append']) {\n        slot.push(this.$slots['append'] as VNode[])\n      } else if (this.appendIcon) {\n        slot.push(this.genIcon('append'))\n      }\n\n      return this.genSlot('append', 'inner', slot)\n    },\n    genInputSlot () {\n      const input = VInput.options.methods.genInputSlot.call(this)\n\n      const prepend = this.genPrependInnerSlot()\n\n      if (prepend) {\n        input.children = input.children || []\n        input.children.unshift(prepend)\n      }\n\n      return input\n    },\n    genClearIcon () {\n      if (!this.clearable) return null\n\n      const data = this.isDirty ? undefined : { attrs: { disabled: true } }\n\n      return this.genSlot('append', 'inner', [\n        this.genIcon('clear', this.clearableCallback, data),\n      ])\n    },\n    genCounter () {\n      if (!this.hasCounter) return null\n\n      const max = this.counter === true ? this.attrs$.maxlength : this.counter\n\n      return this.$createElement(VCounter, {\n        props: {\n          dark: this.dark,\n          light: this.light,\n          max,\n          value: this.computedCounterValue,\n        },\n      })\n    },\n    genControl () {\n      return VInput.options.methods.genControl.call(this)\n    },\n    genDefaultSlot () {\n      return [\n        this.genFieldset(),\n        this.genTextFieldSlot(),\n        this.genClearIcon(),\n        this.genIconSlot(),\n        this.genProgress(),\n      ]\n    },\n    genFieldset () {\n      if (!this.outlined) return null\n\n      return this.$createElement('fieldset', {\n        attrs: {\n          'aria-hidden': true,\n        },\n      }, [this.genLegend()])\n    },\n    genLabel () {\n      if (!this.showLabel) return null\n\n      const data = {\n        props: {\n          absolute: true,\n          color: this.validationState,\n          dark: this.dark,\n          disabled: this.isDisabled,\n          focused: !this.isSingle && (this.isFocused || !!this.validationState),\n          for: this.computedId,\n          left: this.labelPosition.left,\n          light: this.light,\n          right: this.labelPosition.right,\n          value: this.labelValue,\n        },\n      }\n\n      return this.$createElement(VLabel, data, this.$slots.label || this.label)\n    },\n    genLegend () {\n      const width = !this.singleLine && (this.labelValue || this.isDirty) ? this.labelWidth : 0\n      const span = this.$createElement('span', {\n        domProps: { innerHTML: '&#8203;' },\n      })\n\n      return this.$createElement('legend', {\n        style: {\n          width: !this.isSingle ? convertToUnit(width) : undefined,\n        },\n      }, [span])\n    },\n    genInput () {\n      const listeners = Object.assign({}, this.listeners$)\n      delete listeners['change'] // Change should not be bound externally\n\n      return this.$createElement('input', {\n        style: {},\n        domProps: {\n          value: (this.type === 'number' && Object.is(this.lazyValue, -0)) ? '-0' : this.lazyValue,\n        },\n        attrs: {\n          ...this.attrs$,\n          autofocus: this.autofocus,\n          disabled: this.isDisabled,\n          id: this.computedId,\n          placeholder: this.placeholder,\n          readonly: this.isReadonly,\n          type: this.type,\n        },\n        on: Object.assign(listeners, {\n          blur: this.onBlur,\n          input: this.onInput,\n          focus: this.onFocus,\n          keydown: this.onKeyDown,\n        }),\n        ref: 'input',\n      })\n    },\n    genMessages () {\n      if (!this.showDetails) return null\n\n      const messagesNode = VInput.options.methods.genMessages.call(this)\n      const counterNode = this.genCounter()\n\n      return this.$createElement('div', {\n        staticClass: 'v-text-field__details',\n      }, [\n        messagesNode,\n        counterNode,\n      ])\n    },\n    genTextFieldSlot () {\n      return this.$createElement('div', {\n        staticClass: 'v-text-field__slot',\n      }, [\n        this.genLabel(),\n        this.prefix ? this.genAffix('prefix') : null,\n        this.genInput(),\n        this.suffix ? this.genAffix('suffix') : null,\n      ])\n    },\n    genAffix (type: 'prefix' | 'suffix') {\n      return this.$createElement('div', {\n        class: `v-text-field__${type}`,\n        ref: type,\n      }, this[type])\n    },\n    onBlur (e?: Event) {\n      this.isFocused = false\n      e && this.$nextTick(() => this.$emit('blur', e))\n    },\n    onClick () {\n      if (this.isFocused || this.isDisabled || !this.$refs.input) return\n\n      this.$refs.input.focus()\n    },\n    onFocus (e?: Event) {\n      if (!this.$refs.input) return\n\n      if (document.activeElement !== this.$refs.input) {\n        return this.$refs.input.focus()\n      }\n\n      if (!this.isFocused) {\n        this.isFocused = true\n        e && this.$emit('focus', e)\n      }\n    },\n    onInput (e: Event) {\n      const target = e.target as HTMLInputElement\n      this.internalValue = target.value\n      this.badInput = target.validity && target.validity.badInput\n    },\n    onKeyDown (e: KeyboardEvent) {\n      if (e.keyCode === keyCodes.enter) this.$emit('change', this.internalValue)\n\n      this.$emit('keydown', e)\n    },\n    onMouseDown (e: Event) {\n      // Prevent input from being blurred\n      if (e.target !== this.$refs.input) {\n        e.preventDefault()\n        e.stopPropagation()\n      }\n\n      VInput.options.methods.onMouseDown.call(this, e)\n    },\n    onMouseUp (e: Event) {\n      if (this.hasMouseDown) this.focus()\n\n      VInput.options.methods.onMouseUp.call(this, e)\n    },\n    setLabelWidth () {\n      if (!this.outlined) return\n\n      this.labelWidth = this.$refs.label\n        ? Math.min(this.$refs.label.scrollWidth * 0.75 + 6, (this.$el as HTMLElement).offsetWidth - 24)\n        : 0\n    },\n    setPrefixWidth () {\n      if (!this.$refs.prefix) return\n\n      this.prefixWidth = this.$refs.prefix.offsetWidth\n    },\n    setPrependWidth () {\n      if (!this.outlined || !this.$refs['prepend-inner']) return\n\n      this.prependWidth = this.$refs['prepend-inner'].offsetWidth\n    },\n    tryAutofocus () {\n      if (\n        !this.autofocus ||\n        typeof document === 'undefined' ||\n        !this.$refs.input ||\n        document.activeElement === this.$refs.input\n      ) return false\n\n      this.$refs.input.focus()\n\n      return true\n    },\n    updateValue (val: boolean) {\n      // Sets validationState from validatable\n      this.hasColor = val\n\n      if (val) {\n        this.initialValue = this.lazyValue\n      } else if (this.initialValue !== this.lazyValue) {\n        this.$emit('change', this.lazyValue)\n      }\n    },\n  },\n})\n","import Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { deepEqual } from '../../util/helpers'\n\nexport default Vue.extend({\n  name: 'comparable',\n  props: {\n    valueComparator: {\n      type: Function,\n      default: deepEqual,\n    } as PropValidator<typeof deepEqual>,\n  },\n})\n","import Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n  name: 'filterable',\n\n  props: {\n    noDataText: {\n      type: String,\n      default: '$vuetify.noDataText',\n    },\n  },\n})\n","// Styles\nimport '../VTextField/VTextField.sass'\nimport './VSelect.sass'\n\n// Components\nimport VChip from '../VChip'\nimport VMenu from '../VMenu'\nimport VSelectList from './VSelectList'\n\n// Extensions\nimport VInput from '../VInput'\nimport VTextField from '../VTextField/VTextField'\n\n// Mixins\nimport Comparable from '../../mixins/comparable'\nimport Filterable from '../../mixins/filterable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport { getPropertyFromItem, getObjectValueByPath, keyCodes } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\n\n// Types\nimport mixins from '../../util/mixins'\nimport { VNode, VNodeDirective, PropType, VNodeData } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { SelectItemKey } from 'vuetify/types'\n\nexport const defaultMenuProps = {\n  closeOnClick: false,\n  closeOnContentClick: false,\n  disableKeys: true,\n  openOnClick: false,\n  maxHeight: 304,\n}\n\n// Types\nconst baseMixins = mixins(\n  VTextField,\n  Comparable,\n  Filterable\n)\n\ninterface options extends InstanceType<typeof baseMixins> {\n  $refs: {\n    menu: InstanceType<typeof VMenu>\n    label: HTMLElement\n    input: HTMLInputElement\n    'prepend-inner': HTMLElement\n    'append-inner': HTMLElement\n    prefix: HTMLElement\n    suffix: HTMLElement\n  }\n}\n\n/* @vue/component */\nexport default baseMixins.extend<options>().extend({\n  name: 'v-select',\n\n  directives: {\n    ClickOutside,\n  },\n\n  props: {\n    appendIcon: {\n      type: String,\n      default: '$dropdown',\n    },\n    attach: {\n      type: null as unknown as PropType<string | boolean | Element | VNode>,\n      default: false,\n    },\n    cacheItems: Boolean,\n    chips: Boolean,\n    clearable: Boolean,\n    deletableChips: Boolean,\n    disableLookup: Boolean,\n    eager: Boolean,\n    hideSelected: Boolean,\n    items: {\n      type: Array,\n      default: () => [],\n    } as PropValidator<any[]>,\n    itemColor: {\n      type: String,\n      default: 'primary',\n    },\n    itemDisabled: {\n      type: [String, Array, Function] as PropType<SelectItemKey>,\n      default: 'disabled',\n    },\n    itemText: {\n      type: [String, Array, Function] as PropType<SelectItemKey>,\n      default: 'text',\n    },\n    itemValue: {\n      type: [String, Array, Function] as PropType<SelectItemKey>,\n      default: 'value',\n    },\n    menuProps: {\n      type: [String, Array, Object],\n      default: () => defaultMenuProps,\n    },\n    multiple: Boolean,\n    openOnClear: Boolean,\n    returnObject: Boolean,\n    smallChips: Boolean,\n  },\n\n  data () {\n    return {\n      cachedItems: this.cacheItems ? this.items : [],\n      menuIsBooted: false,\n      isMenuActive: false,\n      lastItem: 20,\n      // As long as a value is defined, show it\n      // Otherwise, check if multiple\n      // to determine which default to provide\n      lazyValue: this.value !== undefined\n        ? this.value\n        : this.multiple ? [] : undefined,\n      selectedIndex: -1,\n      selectedItems: [] as any[],\n      keyboardLookupPrefix: '',\n      keyboardLookupLastTime: 0,\n    }\n  },\n\n  computed: {\n    /* All items that the select has */\n    allItems (): object[] {\n      return this.filterDuplicates(this.cachedItems.concat(this.items))\n    },\n    classes (): object {\n      return {\n        ...VTextField.options.computed.classes.call(this),\n        'v-select': true,\n        'v-select--chips': this.hasChips,\n        'v-select--chips--small': this.smallChips,\n        'v-select--is-menu-active': this.isMenuActive,\n        'v-select--is-multi': this.multiple,\n      }\n    },\n    /* Used by other components to overwrite */\n    computedItems (): object[] {\n      return this.allItems\n    },\n    computedOwns (): string {\n      return `list-${this._uid}`\n    },\n    computedCounterValue (): number {\n      return this.multiple\n        ? this.selectedItems.length\n        : (this.getText(this.selectedItems[0]) || '').toString().length\n    },\n    directives (): VNodeDirective[] | undefined {\n      return this.isFocused ? [{\n        name: 'click-outside',\n        value: {\n          handler: this.blur,\n          closeConditional: this.closeConditional,\n        },\n      }] : undefined\n    },\n    dynamicHeight () {\n      return 'auto'\n    },\n    hasChips (): boolean {\n      return this.chips || this.smallChips\n    },\n    hasSlot (): boolean {\n      return Boolean(this.hasChips || this.$scopedSlots.selection)\n    },\n    isDirty (): boolean {\n      return this.selectedItems.length > 0\n    },\n    listData (): object {\n      const scopeId = this.$vnode && (this.$vnode.context!.$options as { [key: string]: any })._scopeId\n      const attrs = scopeId ? {\n        [scopeId]: true,\n      } : {}\n\n      return {\n        attrs: {\n          ...attrs,\n          id: this.computedOwns,\n        },\n        props: {\n          action: this.multiple,\n          color: this.itemColor,\n          dense: this.dense,\n          hideSelected: this.hideSelected,\n          items: this.virtualizedItems,\n          itemDisabled: this.itemDisabled,\n          itemText: this.itemText,\n          itemValue: this.itemValue,\n          noDataText: this.$vuetify.lang.t(this.noDataText),\n          selectedItems: this.selectedItems,\n        },\n        on: {\n          select: this.selectItem,\n        },\n        scopedSlots: {\n          item: this.$scopedSlots.item,\n        },\n      }\n    },\n    staticList (): VNode {\n      if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {\n        consoleError('assert: staticList should not be called if slots are used')\n      }\n\n      return this.$createElement(VSelectList, this.listData)\n    },\n    virtualizedItems (): object[] {\n      return (this.$_menuProps as any).auto\n        ? this.computedItems\n        : this.computedItems.slice(0, this.lastItem)\n    },\n    menuCanShow: () => true,\n    $_menuProps (): object {\n      let normalisedProps = typeof this.menuProps === 'string'\n        ? this.menuProps.split(',')\n        : this.menuProps\n\n      if (Array.isArray(normalisedProps)) {\n        normalisedProps = normalisedProps.reduce((acc, p) => {\n          acc[p.trim()] = true\n          return acc\n        }, {})\n      }\n\n      return {\n        ...defaultMenuProps,\n        eager: this.eager,\n        value: this.menuCanShow && this.isMenuActive,\n        nudgeBottom: normalisedProps.offsetY ? 1 : 0, // convert to int\n        ...normalisedProps,\n      }\n    },\n  },\n\n  watch: {\n    internalValue (val) {\n      this.initialValue = val\n      this.setSelectedItems()\n    },\n    isMenuActive (val) {\n      window.setTimeout(() => this.onMenuActiveChange(val))\n    },\n    items: {\n      immediate: true,\n      handler (val) {\n        if (this.cacheItems) {\n          // Breaks vue-test-utils if\n          // this isn't calculated\n          // on the next tick\n          this.$nextTick(() => {\n            this.cachedItems = this.filterDuplicates(this.cachedItems.concat(val))\n          })\n        }\n\n        this.setSelectedItems()\n      },\n    },\n  },\n\n  methods: {\n    /** @public */\n    blur (e?: Event) {\n      VTextField.options.methods.blur.call(this, e)\n      this.isMenuActive = false\n      this.isFocused = false\n      this.selectedIndex = -1\n    },\n    /** @public */\n    activateMenu () {\n      if (\n        !this.isInteractive ||\n        this.isMenuActive\n      ) return\n\n      this.isMenuActive = true\n    },\n    clearableCallback () {\n      this.setValue(this.multiple ? [] : undefined)\n      this.setMenuIndex(-1)\n      this.$nextTick(() => this.$refs.input && this.$refs.input.focus())\n\n      if (this.openOnClear) this.isMenuActive = true\n    },\n    closeConditional (e: Event) {\n      if (!this.isMenuActive) return true\n\n      return (\n        !this._isDestroyed &&\n\n        // Click originates from outside the menu content\n        // Multiple selects don't close when an item is clicked\n        (!this.getContent() ||\n        !this.getContent().contains(e.target as Node)) &&\n\n        // Click originates from outside the element\n        this.$el &&\n        !this.$el.contains(e.target as Node) &&\n        e.target !== this.$el\n      )\n    },\n    filterDuplicates (arr: any[]) {\n      const uniqueValues = new Map()\n      for (let index = 0; index < arr.length; ++index) {\n        const item = arr[index]\n        const val = this.getValue(item)\n\n        // TODO: comparator\n        !uniqueValues.has(val) && uniqueValues.set(val, item)\n      }\n      return Array.from(uniqueValues.values())\n    },\n    findExistingIndex (item: object) {\n      const itemValue = this.getValue(item)\n\n      return (this.internalValue || []).findIndex((i: object) => this.valueComparator(this.getValue(i), itemValue))\n    },\n    getContent () {\n      return this.$refs.menu && this.$refs.menu.$refs.content\n    },\n    genChipSelection (item: object, index: number) {\n      const isDisabled = (\n        !this.isInteractive ||\n        this.getDisabled(item)\n      )\n\n      return this.$createElement(VChip, {\n        staticClass: 'v-chip--select',\n        attrs: { tabindex: -1 },\n        props: {\n          close: this.deletableChips && !isDisabled,\n          disabled: isDisabled,\n          inputValue: index === this.selectedIndex,\n          small: this.smallChips,\n        },\n        on: {\n          click: (e: MouseEvent) => {\n            if (isDisabled) return\n\n            e.stopPropagation()\n\n            this.selectedIndex = index\n          },\n          'click:close': () => this.onChipInput(item),\n        },\n        key: JSON.stringify(this.getValue(item)),\n      }, this.getText(item))\n    },\n    genCommaSelection (item: object, index: number, last: boolean) {\n      const color = index === this.selectedIndex && this.computedColor\n      const isDisabled = (\n        !this.isInteractive ||\n        this.getDisabled(item)\n      )\n\n      return this.$createElement('div', this.setTextColor(color, {\n        staticClass: 'v-select__selection v-select__selection--comma',\n        class: {\n          'v-select__selection--disabled': isDisabled,\n        },\n        key: JSON.stringify(this.getValue(item)),\n      }), `${this.getText(item)}${last ? '' : ', '}`)\n    },\n    genDefaultSlot (): (VNode | VNode[] | null)[] {\n      const selections = this.genSelections()\n      const input = this.genInput()\n\n      // If the return is an empty array\n      // push the input\n      if (Array.isArray(selections)) {\n        selections.push(input)\n      // Otherwise push it into children\n      } else {\n        selections.children = selections.children || []\n        selections.children.push(input)\n      }\n\n      return [\n        this.genFieldset(),\n        this.$createElement('div', {\n          staticClass: 'v-select__slot',\n          directives: this.directives,\n        }, [\n          this.genLabel(),\n          this.prefix ? this.genAffix('prefix') : null,\n          selections,\n          this.suffix ? this.genAffix('suffix') : null,\n          this.genClearIcon(),\n          this.genIconSlot(),\n          this.genHiddenInput(),\n        ]),\n        this.genMenu(),\n        this.genProgress(),\n      ]\n    },\n    genIcon (\n      type: string,\n      cb?: (e: Event) => void,\n      extraData?: VNodeData\n    ) {\n      const icon = VInput.options.methods.genIcon.call(this, type, cb, extraData)\n\n      if (type === 'append') {\n        // Don't allow the dropdown icon to be focused\n        icon.children![0].data = mergeData(icon.children![0].data!, {\n          attrs: {\n            tabindex: icon.children![0].componentOptions!.listeners && '-1',\n            'aria-hidden': 'true',\n            'aria-label': undefined,\n          },\n        })\n      }\n\n      return icon\n    },\n    genInput (): VNode {\n      const input = VTextField.options.methods.genInput.call(this)\n\n      delete input.data!.attrs!.name\n\n      input.data = mergeData(input.data!, {\n        domProps: { value: null },\n        attrs: {\n          readonly: true,\n          type: 'text',\n          'aria-readonly': String(this.isReadonly),\n          'aria-activedescendant': getObjectValueByPath(this.$refs.menu, 'activeTile.id'),\n          autocomplete: getObjectValueByPath(input.data!, 'attrs.autocomplete', 'off'),\n        },\n        on: { keypress: this.onKeyPress },\n      })\n\n      return input\n    },\n    genHiddenInput (): VNode {\n      return this.$createElement('input', {\n        domProps: { value: this.lazyValue },\n        attrs: {\n          type: 'hidden',\n          name: this.attrs$.name,\n        },\n      })\n    },\n    genInputSlot (): VNode {\n      const render = VTextField.options.methods.genInputSlot.call(this)\n\n      render.data!.attrs = {\n        ...render.data!.attrs,\n        role: 'button',\n        'aria-haspopup': 'listbox',\n        'aria-expanded': String(this.isMenuActive),\n        'aria-owns': this.computedOwns,\n      }\n\n      return render\n    },\n    genList (): VNode {\n      // If there's no slots, we can use a cached VNode to improve performance\n      if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {\n        return this.genListWithSlot()\n      } else {\n        return this.staticList\n      }\n    },\n    genListWithSlot (): VNode {\n      const slots = ['prepend-item', 'no-data', 'append-item']\n        .filter(slotName => this.$slots[slotName])\n        .map(slotName => this.$createElement('template', {\n          slot: slotName,\n        }, this.$slots[slotName]))\n      // Requires destructuring due to Vue\n      // modifying the `on` property when passed\n      // as a referenced object\n      return this.$createElement(VSelectList, {\n        ...this.listData,\n      }, slots)\n    },\n    genMenu (): VNode {\n      const props = this.$_menuProps as any\n      props.activator = this.$refs['input-slot']\n\n      // Attach to root el so that\n      // menu covers prepend/append icons\n      if (\n        // TODO: make this a computed property or helper or something\n        this.attach === '' || // If used as a boolean prop (<v-menu attach>)\n        this.attach === true || // If bound to a boolean (<v-menu :attach=\"true\">)\n        this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))\n      ) {\n        props.attach = this.$el\n      } else {\n        props.attach = this.attach\n      }\n\n      return this.$createElement(VMenu, {\n        attrs: { role: undefined },\n        props,\n        on: {\n          input: (val: boolean) => {\n            this.isMenuActive = val\n            this.isFocused = val\n          },\n          scroll: this.onScroll,\n        },\n        ref: 'menu',\n      }, [this.genList()])\n    },\n    genSelections (): VNode {\n      let length = this.selectedItems.length\n      const children = new Array(length)\n\n      let genSelection\n      if (this.$scopedSlots.selection) {\n        genSelection = this.genSlotSelection\n      } else if (this.hasChips) {\n        genSelection = this.genChipSelection\n      } else {\n        genSelection = this.genCommaSelection\n      }\n\n      while (length--) {\n        children[length] = genSelection(\n          this.selectedItems[length],\n          length,\n          length === children.length - 1\n        )\n      }\n\n      return this.$createElement('div', {\n        staticClass: 'v-select__selections',\n      }, children)\n    },\n    genSlotSelection (item: object, index: number): VNode[] | undefined {\n      return this.$scopedSlots.selection!({\n        attrs: {\n          class: 'v-chip--select',\n        },\n        parent: this,\n        item,\n        index,\n        select: (e: Event) => {\n          e.stopPropagation()\n          this.selectedIndex = index\n        },\n        selected: index === this.selectedIndex,\n        disabled: !this.isInteractive,\n      })\n    },\n    getMenuIndex () {\n      return this.$refs.menu ? (this.$refs.menu as { [key: string]: any }).listIndex : -1\n    },\n    getDisabled (item: object) {\n      return getPropertyFromItem(item, this.itemDisabled, false)\n    },\n    getText (item: object) {\n      return getPropertyFromItem(item, this.itemText, item)\n    },\n    getValue (item: object) {\n      return getPropertyFromItem(item, this.itemValue, this.getText(item))\n    },\n    onBlur (e?: Event) {\n      e && this.$emit('blur', e)\n    },\n    onChipInput (item: object) {\n      if (this.multiple) this.selectItem(item)\n      else this.setValue(null)\n      // If all items have been deleted,\n      // open `v-menu`\n      if (this.selectedItems.length === 0) {\n        this.isMenuActive = true\n      } else {\n        this.isMenuActive = false\n      }\n      this.selectedIndex = -1\n    },\n    onClick (e: MouseEvent) {\n      if (!this.isInteractive) return\n\n      if (!this.isAppendInner(e.target)) {\n        this.isMenuActive = true\n      }\n\n      if (!this.isFocused) {\n        this.isFocused = true\n        this.$emit('focus')\n      }\n\n      this.$emit('click', e)\n    },\n    onEscDown (e: Event) {\n      e.preventDefault()\n      if (this.isMenuActive) {\n        e.stopPropagation()\n        this.isMenuActive = false\n      }\n    },\n    onKeyPress (e: KeyboardEvent) {\n      if (\n        this.multiple ||\n        !this.isInteractive ||\n        this.disableLookup\n      ) return\n\n      const KEYBOARD_LOOKUP_THRESHOLD = 1000 // milliseconds\n      const now = performance.now()\n      if (now - this.keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {\n        this.keyboardLookupPrefix = ''\n      }\n      this.keyboardLookupPrefix += e.key.toLowerCase()\n      this.keyboardLookupLastTime = now\n\n      const index = this.allItems.findIndex(item => {\n        const text = (this.getText(item) || '').toString()\n\n        return text.toLowerCase().startsWith(this.keyboardLookupPrefix)\n      })\n      const item = this.allItems[index]\n      if (index !== -1) {\n        this.lastItem = Math.max(this.lastItem, index + 5)\n        this.setValue(this.returnObject ? item : this.getValue(item))\n        this.$nextTick(() => this.$refs.menu.getTiles())\n        setTimeout(() => this.setMenuIndex(index))\n      }\n    },\n    onKeyDown (e: KeyboardEvent) {\n      if (this.isReadonly && e.keyCode !== keyCodes.tab) return\n\n      const keyCode = e.keyCode\n      const menu = this.$refs.menu\n\n      // If enter, space, open menu\n      if ([\n        keyCodes.enter,\n        keyCodes.space,\n      ].includes(keyCode)) this.activateMenu()\n\n      this.$emit('keydown', e)\n\n      if (!menu) return\n\n      // If menu is active, allow default\n      // listIndex change from menu\n      if (this.isMenuActive && keyCode !== keyCodes.tab) {\n        this.$nextTick(() => {\n          menu.changeListIndex(e)\n          this.$emit('update:list-index', menu.listIndex)\n        })\n      }\n\n      // If menu is not active, up and down can do\n      // one of 2 things. If multiple, opens the\n      // menu, if not, will cycle through all\n      // available options\n      if (\n        !this.isMenuActive &&\n        [keyCodes.up, keyCodes.down].includes(keyCode)\n      ) return this.onUpDown(e)\n\n      // If escape deactivate the menu\n      if (keyCode === keyCodes.esc) return this.onEscDown(e)\n\n      // If tab - select item or close menu\n      if (keyCode === keyCodes.tab) return this.onTabDown(e)\n\n      // If space preventDefault\n      if (keyCode === keyCodes.space) return this.onSpaceDown(e)\n    },\n    onMenuActiveChange (val: boolean) {\n      // If menu is closing and mulitple\n      // or menuIndex is already set\n      // skip menu index recalculation\n      if (\n        (this.multiple && !val) ||\n        this.getMenuIndex() > -1\n      ) return\n\n      const menu = this.$refs.menu\n\n      if (!menu || !this.isDirty) return\n\n      // When menu opens, set index of first active item\n      for (let i = 0; i < menu.tiles.length; i++) {\n        if (menu.tiles[i].getAttribute('aria-selected') === 'true') {\n          this.setMenuIndex(i)\n          break\n        }\n      }\n    },\n    onMouseUp (e: MouseEvent) {\n      if (\n        this.hasMouseDown &&\n        e.which !== 3 &&\n        this.isInteractive\n      ) {\n        // If append inner is present\n        // and the target is itself\n        // or inside, toggle menu\n        if (this.isAppendInner(e.target)) {\n          this.$nextTick(() => (this.isMenuActive = !this.isMenuActive))\n        // If user is clicking in the container\n        // and field is enclosed, activate it\n        } else if (this.isEnclosed) {\n          this.isMenuActive = true\n        }\n      }\n\n      VTextField.options.methods.onMouseUp.call(this, e)\n    },\n    onScroll () {\n      if (!this.isMenuActive) {\n        requestAnimationFrame(() => (this.getContent().scrollTop = 0))\n      } else {\n        if (this.lastItem > this.computedItems.length) return\n\n        const showMoreItems = (\n          this.getContent().scrollHeight -\n          (this.getContent().scrollTop +\n          this.getContent().clientHeight)\n        ) < 200\n\n        if (showMoreItems) {\n          this.lastItem += 20\n        }\n      }\n    },\n    onSpaceDown (e: KeyboardEvent) {\n      e.preventDefault()\n    },\n    onTabDown (e: KeyboardEvent) {\n      const menu = this.$refs.menu\n\n      if (!menu) return\n\n      const activeTile = menu.activeTile\n\n      // An item that is selected by\n      // menu-index should toggled\n      if (\n        !this.multiple &&\n        activeTile &&\n        this.isMenuActive\n      ) {\n        e.preventDefault()\n        e.stopPropagation()\n\n        activeTile.click()\n      } else {\n        // If we make it here,\n        // the user has no selected indexes\n        // and is probably tabbing out\n        this.blur(e)\n      }\n    },\n    onUpDown (e: KeyboardEvent) {\n      const menu = this.$refs.menu\n\n      if (!menu) return\n\n      e.preventDefault()\n\n      // Multiple selects do not cycle their value\n      // when pressing up or down, instead activate\n      // the menu\n      if (this.multiple) return this.activateMenu()\n\n      const keyCode = e.keyCode\n\n      // Cycle through available values to achieve\n      // select native behavior\n      menu.isBooted = true\n\n      window.requestAnimationFrame(() => {\n        menu.getTiles()\n        keyCodes.up === keyCode ? menu.prevTile() : menu.nextTile()\n        menu.activeTile && menu.activeTile.click()\n      })\n    },\n    selectItem (item: object) {\n      if (!this.multiple) {\n        this.setValue(this.returnObject ? item : this.getValue(item))\n        this.isMenuActive = false\n      } else {\n        const internalValue = (this.internalValue || []).slice()\n        const i = this.findExistingIndex(item)\n\n        i !== -1 ? internalValue.splice(i, 1) : internalValue.push(item)\n        this.setValue(internalValue.map((i: object) => {\n          return this.returnObject ? i : this.getValue(i)\n        }))\n\n        // When selecting multiple\n        // adjust menu after each\n        // selection\n        this.$nextTick(() => {\n          this.$refs.menu &&\n            (this.$refs.menu as { [key: string]: any }).updateDimensions()\n        })\n\n        // We only need to reset list index for multiple\n        // to keep highlight when an item is toggled\n        // on and off\n        if (!this.multiple) return\n\n        const listIndex = this.getMenuIndex()\n\n        this.setMenuIndex(-1)\n\n        // There is no item to re-highlight\n        // when selections are hidden\n        if (this.hideSelected) return\n\n        this.$nextTick(() => this.setMenuIndex(listIndex))\n      }\n    },\n    setMenuIndex (index: number) {\n      this.$refs.menu && ((this.$refs.menu as { [key: string]: any }).listIndex = index)\n    },\n    setSelectedItems () {\n      const selectedItems = []\n      const values = !this.multiple || !Array.isArray(this.internalValue)\n        ? [this.internalValue]\n        : this.internalValue\n\n      for (const value of values) {\n        const index = this.allItems.findIndex(v => this.valueComparator(\n          this.getValue(v),\n          this.getValue(value)\n        ))\n\n        if (index > -1) {\n          selectedItems.push(this.allItems[index])\n        }\n      }\n\n      this.selectedItems = selectedItems\n    },\n    setValue (value: any) {\n      const oldValue = this.internalValue\n      this.internalValue = value\n      value !== oldValue && this.$emit('change', value)\n    },\n    isAppendInner (target: any) {\n      // return true if append inner is present\n      // and the target is itself or inside\n      const appendInner = this.$refs['append-inner']\n\n      return appendInner && (appendInner === target || appendInner.contains(target))\n    },\n  },\n})\n","// Styles\nimport './VAutocomplete.sass'\n\n// Extensions\nimport VSelect, { defaultMenuProps as VSelectMenuProps } from '../VSelect/VSelect'\nimport VTextField from '../VTextField/VTextField'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport {\n  getObjectValueByPath,\n  getPropertyFromItem,\n  keyCodes,\n} from '../../util/helpers'\n\n// Types\nimport { PropType, VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nconst defaultMenuProps = {\n  ...VSelectMenuProps,\n  offsetY: true,\n  offsetOverflow: true,\n  transition: false,\n}\n\n/* @vue/component */\nexport default VSelect.extend({\n  name: 'v-autocomplete',\n\n  props: {\n    allowOverflow: {\n      type: Boolean,\n      default: true,\n    },\n    autoSelectFirst: {\n      type: Boolean,\n      default: false,\n    },\n    filter: {\n      type: Function,\n      default: (item: any, queryText: string, itemText: string) => {\n        return itemText.toLocaleLowerCase().indexOf(queryText.toLocaleLowerCase()) > -1\n      },\n    } as PropValidator<(item: any, queryText: string, itemText: string) => boolean>,\n    hideNoData: Boolean,\n    menuProps: {\n      type: VSelect.options.props.menuProps.type,\n      default: () => defaultMenuProps,\n    },\n    noFilter: Boolean,\n    searchInput: {\n      type: String as PropType<string | undefined>,\n      default: undefined,\n    },\n  },\n\n  data () {\n    return {\n      lazySearch: this.searchInput,\n    }\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        ...VSelect.options.computed.classes.call(this),\n        'v-autocomplete': true,\n        'v-autocomplete--is-selecting-index': this.selectedIndex > -1,\n      }\n    },\n    computedItems (): object[] {\n      return this.filteredItems\n    },\n    selectedValues (): object[] {\n      return this.selectedItems.map(item => this.getValue(item))\n    },\n    hasDisplayedItems (): boolean {\n      return this.hideSelected\n        ? this.filteredItems.some(item => !this.hasItem(item))\n        : this.filteredItems.length > 0\n    },\n    currentRange (): number {\n      if (this.selectedItem == null) return 0\n\n      return String(this.getText(this.selectedItem)).length\n    },\n    filteredItems (): object[] {\n      if (!this.isSearching || this.noFilter || this.internalSearch == null) return this.allItems\n\n      return this.allItems.filter(item => {\n        const value = getPropertyFromItem(item, this.itemText)\n        const text = value != null ? String(value) : ''\n\n        return this.filter(item, String(this.internalSearch), text)\n      })\n    },\n    internalSearch: {\n      get (): string | undefined {\n        return this.lazySearch\n      },\n      set (val: any) {\n        this.lazySearch = val\n\n        this.$emit('update:search-input', val)\n      },\n    },\n    isAnyValueAllowed (): boolean {\n      return false\n    },\n    isDirty (): boolean {\n      return this.searchIsDirty || this.selectedItems.length > 0\n    },\n    isSearching (): boolean {\n      return (\n        this.multiple &&\n        this.searchIsDirty\n      ) || (\n        this.searchIsDirty &&\n        this.internalSearch !== this.getText(this.selectedItem)\n      )\n    },\n    menuCanShow (): boolean {\n      if (!this.isFocused) return false\n\n      return this.hasDisplayedItems || !this.hideNoData\n    },\n    $_menuProps (): object {\n      const props = VSelect.options.computed.$_menuProps.call(this);\n      (props as any).contentClass = `v-autocomplete__content ${(props as any).contentClass || ''}`.trim()\n      return {\n        ...defaultMenuProps,\n        ...props,\n      }\n    },\n    searchIsDirty (): boolean {\n      return this.internalSearch != null &&\n        this.internalSearch !== ''\n    },\n    selectedItem (): any {\n      if (this.multiple) return null\n\n      return this.selectedItems.find(i => {\n        return this.valueComparator(this.getValue(i), this.getValue(this.internalValue))\n      })\n    },\n    listData () {\n      const data = VSelect.options.computed.listData.call(this) as any\n\n      data.props = {\n        ...data.props,\n        items: this.virtualizedItems,\n        noFilter: (\n          this.noFilter ||\n          !this.isSearching ||\n          !this.filteredItems.length\n        ),\n        searchInput: this.internalSearch,\n      }\n\n      return data\n    },\n  },\n\n  watch: {\n    filteredItems: 'onFilteredItemsChanged',\n    internalValue: 'setSearch',\n    isFocused (val) {\n      if (val) {\n        document.addEventListener('copy', this.onCopy)\n        this.$refs.input && this.$refs.input.select()\n      } else {\n        document.removeEventListener('copy', this.onCopy)\n        this.updateSelf()\n      }\n    },\n    isMenuActive (val) {\n      if (val || !this.hasSlot) return\n\n      this.lazySearch = undefined\n    },\n    items (val, oldVal) {\n      // If we are focused, the menu\n      // is not active, hide no data is enabled,\n      // and items change\n      // User is probably async loading\n      // items, try to activate the menu\n      if (\n        !(oldVal && oldVal.length) &&\n        this.hideNoData &&\n        this.isFocused &&\n        !this.isMenuActive &&\n        val.length\n      ) this.activateMenu()\n    },\n    searchInput (val: string) {\n      this.lazySearch = val\n    },\n    internalSearch: 'onInternalSearchChanged',\n    itemText: 'updateSelf',\n  },\n\n  created () {\n    this.setSearch()\n  },\n\n  destroyed () {\n    document.removeEventListener('copy', this.onCopy)\n  },\n\n  methods: {\n    onFilteredItemsChanged (val: never[], oldVal: never[]) {\n      // TODO: How is the watcher triggered\n      // for duplicate items? no idea\n      if (val === oldVal) return\n\n      this.setMenuIndex(-1)\n\n      this.$nextTick(() => {\n        if (\n          !this.internalSearch ||\n          (val.length !== 1 &&\n            !this.autoSelectFirst)\n        ) return\n\n        this.$refs.menu.getTiles()\n        this.setMenuIndex(0)\n      })\n    },\n    onInternalSearchChanged () {\n      this.updateMenuDimensions()\n    },\n    updateMenuDimensions () {\n      // Type from menuable is not making it through\n      this.isMenuActive && this.$refs.menu && this.$refs.menu.updateDimensions()\n    },\n    changeSelectedIndex (keyCode: number) {\n      // Do not allow changing of selectedIndex\n      // when search is dirty\n      if (this.searchIsDirty) return\n\n      if (this.multiple && keyCode === keyCodes.left) {\n        if (this.selectedIndex === -1) {\n          this.selectedIndex = this.selectedItems.length - 1\n        } else {\n          this.selectedIndex--\n        }\n      } else if (this.multiple && keyCode === keyCodes.right) {\n        if (this.selectedIndex >= this.selectedItems.length - 1) {\n          this.selectedIndex = -1\n        } else {\n          this.selectedIndex++\n        }\n      } else if (keyCode === keyCodes.backspace || keyCode === keyCodes.delete) {\n        this.deleteCurrentItem()\n      }\n    },\n    deleteCurrentItem () {\n      const curIndex = this.selectedIndex\n      const curItem = this.selectedItems[curIndex]\n\n      // Do nothing if input or item is disabled\n      if (\n        !this.isInteractive ||\n        this.getDisabled(curItem)\n      ) return\n\n      const lastIndex = this.selectedItems.length - 1\n\n      // Select the last item if\n      // there is no selection\n      if (\n        this.selectedIndex === -1 &&\n        lastIndex !== 0\n      ) {\n        this.selectedIndex = lastIndex\n\n        return\n      }\n\n      const length = this.selectedItems.length\n      const nextIndex = curIndex !== length - 1\n        ? curIndex\n        : curIndex - 1\n      const nextItem = this.selectedItems[nextIndex]\n\n      if (!nextItem) {\n        this.setValue(this.multiple ? [] : undefined)\n      } else {\n        this.selectItem(curItem)\n      }\n\n      this.selectedIndex = nextIndex\n    },\n    clearableCallback () {\n      this.internalSearch = undefined\n\n      VSelect.options.methods.clearableCallback.call(this)\n    },\n    genInput () {\n      const input = VTextField.options.methods.genInput.call(this)\n\n      input.data = mergeData(input.data!, {\n        attrs: {\n          'aria-activedescendant': getObjectValueByPath(this.$refs.menu, 'activeTile.id'),\n          autocomplete: getObjectValueByPath(input.data!, 'attrs.autocomplete', 'off'),\n        },\n        domProps: { value: this.internalSearch },\n      })\n\n      return input\n    },\n    genInputSlot () {\n      const slot = VSelect.options.methods.genInputSlot.call(this)\n\n      slot.data!.attrs!.role = 'combobox'\n\n      return slot\n    },\n    genSelections (): VNode | never[] {\n      return this.hasSlot || this.multiple\n        ? VSelect.options.methods.genSelections.call(this)\n        : []\n    },\n    onClick (e: MouseEvent) {\n      if (!this.isInteractive) return\n\n      this.selectedIndex > -1\n        ? (this.selectedIndex = -1)\n        : this.onFocus()\n\n      if (!this.isAppendInner(e.target)) this.activateMenu()\n    },\n    onInput (e: Event) {\n      if (\n        this.selectedIndex > -1 ||\n        !e.target\n      ) return\n\n      const target = e.target as HTMLInputElement\n      const value = target.value\n\n      // If typing and menu is not currently active\n      if (target.value) this.activateMenu()\n\n      this.internalSearch = value\n      this.badInput = target.validity && target.validity.badInput\n    },\n    onKeyDown (e: KeyboardEvent) {\n      const keyCode = e.keyCode\n\n      VSelect.options.methods.onKeyDown.call(this, e)\n\n      // The ordering is important here\n      // allows new value to be updated\n      // and then moves the index to the\n      // proper location\n      this.changeSelectedIndex(keyCode)\n    },\n    onSpaceDown (e: KeyboardEvent) { /* noop */ },\n    onTabDown (e: KeyboardEvent) {\n      VSelect.options.methods.onTabDown.call(this, e)\n      this.updateSelf()\n    },\n    onUpDown (e: Event) {\n      // Prevent screen from scrolling\n      e.preventDefault()\n\n      // For autocomplete / combobox, cycling\n      // interfers with native up/down behavior\n      // instead activate the menu\n      this.activateMenu()\n    },\n    selectItem (item: object) {\n      VSelect.options.methods.selectItem.call(this, item)\n      this.setSearch()\n    },\n    setSelectedItems () {\n      VSelect.options.methods.setSelectedItems.call(this)\n\n      // #4273 Don't replace if searching\n      // #4403 Don't replace if focused\n      if (!this.isFocused) this.setSearch()\n    },\n    setSearch () {\n      // Wait for nextTick so selectedItem\n      // has had time to update\n      this.$nextTick(() => {\n        if (\n          !this.multiple ||\n          !this.internalSearch ||\n          !this.isMenuActive\n        ) {\n          this.internalSearch = (\n            !this.selectedItems.length ||\n            this.multiple ||\n            this.hasSlot\n          )\n            ? null\n            : this.getText(this.selectedItem)\n        }\n      })\n    },\n    updateSelf () {\n      if (!this.searchIsDirty &&\n        !this.internalValue\n      ) return\n\n      if (!this.valueComparator(\n        this.internalSearch,\n        this.getValue(this.internalValue)\n      )) {\n        this.setSearch()\n      }\n    },\n    hasItem (item: any): boolean {\n      return this.selectedValues.indexOf(this.getValue(item)) > -1\n    },\n    onCopy (event: ClipboardEvent) {\n      if (this.selectedIndex === -1) return\n\n      const currentItem = this.selectedItems[this.selectedIndex]\n      const currentItemText = this.getText(currentItem)\n      event.clipboardData!.setData('text/plain', currentItemText)\n      event.clipboardData!.setData('text/vnd.vuetify.autocomplete.item+plain', currentItemText)\n      event.preventDefault()\n    },\n  },\n})\n","// Styles\nimport '../VAutocomplete/VAutocomplete.sass'\n\n// Extensions\nimport VSelect from '../VSelect/VSelect'\nimport VAutocomplete from '../VAutocomplete/VAutocomplete'\n\n// Utils\nimport { keyCodes } from '../../util/helpers'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\n\n/* @vue/component */\nexport default VAutocomplete.extend({\n  name: 'v-combobox',\n\n  props: {\n    delimiters: {\n      type: Array,\n      default: () => ([]),\n    } as PropValidator<string[]>,\n    returnObject: {\n      type: Boolean,\n      default: true,\n    },\n  },\n\n  data: () => ({\n    editingIndex: -1,\n  }),\n\n  computed: {\n    computedCounterValue (): number {\n      return this.multiple\n        ? this.selectedItems.length\n        : (this.internalSearch || '').toString().length\n    },\n    hasSlot (): boolean {\n      return VSelect.options.computed.hasSlot.call(this) || this.multiple\n    },\n    isAnyValueAllowed (): boolean {\n      return true\n    },\n    menuCanShow (): boolean {\n      if (!this.isFocused) return false\n\n      return this.hasDisplayedItems ||\n        (!!this.$slots['no-data'] && !this.hideNoData)\n    },\n  },\n\n  methods: {\n    onInternalSearchChanged (val: any) {\n      if (\n        val &&\n        this.multiple &&\n        this.delimiters.length\n      ) {\n        const delimiter = this.delimiters.find(d => val.endsWith(d))\n        if (delimiter != null) {\n          this.internalSearch = val.slice(0, val.length - delimiter.length)\n          this.updateTags()\n        }\n      }\n\n      this.updateMenuDimensions()\n    },\n    genInput () {\n      const input = VAutocomplete.options.methods.genInput.call(this)\n\n      delete input.data!.attrs!.name\n      input.data!.on!.paste = this.onPaste\n\n      return input\n    },\n    genChipSelection (item: object, index: number) {\n      const chip = VSelect.options.methods.genChipSelection.call(this, item, index)\n\n      // Allow user to update an existing value\n      if (this.multiple) {\n        chip.componentOptions!.listeners! = {\n          ...chip.componentOptions!.listeners!,\n          dblclick: () => {\n            this.editingIndex = index\n            this.internalSearch = this.getText(item)\n            this.selectedIndex = -1\n          },\n        }\n      }\n\n      return chip\n    },\n    onChipInput (item: object) {\n      VSelect.options.methods.onChipInput.call(this, item)\n\n      this.editingIndex = -1\n    },\n    // Requires a manual definition\n    // to overwrite removal in v-autocomplete\n    onEnterDown (e: Event) {\n      e.preventDefault()\n      // If has menu index, let v-select-list handle\n      if (this.getMenuIndex() > -1) return\n\n      this.$nextTick(this.updateSelf)\n    },\n    onFilteredItemsChanged (val: never[], oldVal: never[]) {\n      if (!this.autoSelectFirst) return\n\n      VAutocomplete.options.methods.onFilteredItemsChanged.call(this, val, oldVal)\n    },\n    onKeyDown (e: KeyboardEvent) {\n      const keyCode = e.keyCode\n\n      VSelect.options.methods.onKeyDown.call(this, e)\n\n      // If user is at selection index of 0\n      // create a new tag\n      if (this.multiple &&\n        keyCode === keyCodes.left &&\n        this.$refs.input.selectionStart === 0\n      ) {\n        this.updateSelf()\n      } else if (keyCode === keyCodes.enter) {\n        this.onEnterDown(e)\n      }\n\n      // The ordering is important here\n      // allows new value to be updated\n      // and then moves the index to the\n      // proper location\n      this.changeSelectedIndex(keyCode)\n    },\n    onTabDown (e: KeyboardEvent) {\n      // When adding tags, if searching and\n      // there is not a filtered options,\n      // add the value to the tags list\n      if (this.multiple &&\n        this.internalSearch &&\n        this.getMenuIndex() === -1\n      ) {\n        e.preventDefault()\n        e.stopPropagation()\n\n        return this.updateTags()\n      }\n\n      VAutocomplete.options.methods.onTabDown.call(this, e)\n    },\n    selectItem (item: object) {\n      // Currently only supports items:<string[]>\n      if (this.editingIndex > -1) {\n        this.updateEditing()\n      } else {\n        VAutocomplete.options.methods.selectItem.call(this, item)\n      }\n    },\n    setSelectedItems () {\n      if (this.internalValue == null ||\n        this.internalValue === ''\n      ) {\n        this.selectedItems = []\n      } else {\n        this.selectedItems = this.multiple ? this.internalValue : [this.internalValue]\n      }\n    },\n    setValue (value?: any) {\n      VSelect.options.methods.setValue.call(this, value ?? this.internalSearch)\n    },\n    updateEditing () {\n      const value = this.internalValue.slice()\n      value[this.editingIndex] = this.internalSearch\n\n      this.setValue(value)\n\n      this.editingIndex = -1\n    },\n    updateCombobox () {\n      const isUsingSlot = Boolean(this.$scopedSlots.selection) || this.hasChips\n\n      // If search is not dirty and is\n      // using slot, do nothing\n      if (isUsingSlot && !this.searchIsDirty) return\n\n      // The internal search is not matching\n      // the internal value, update the input\n      if (this.internalSearch !== this.getText(this.internalValue)) this.setValue()\n\n      // Reset search if using slot\n      // to avoid a double input\n      if (isUsingSlot) this.internalSearch = undefined\n    },\n    updateSelf () {\n      this.multiple ? this.updateTags() : this.updateCombobox()\n    },\n    updateTags () {\n      const menuIndex = this.getMenuIndex()\n\n      // If the user is not searching\n      // and no menu item is selected\n      // do nothing\n      if (menuIndex < 0 &&\n        !this.searchIsDirty\n      ) return\n\n      if (this.editingIndex > -1) {\n        return this.updateEditing()\n      }\n\n      const index = this.selectedItems.indexOf(this.internalSearch)\n      // If it already exists, do nothing\n      // this might need to change to bring\n      // the duplicated item to the last entered\n      if (index > -1) {\n        const internalValue = this.internalValue.slice()\n        internalValue.splice(index, 1)\n\n        this.setValue(internalValue)\n      }\n\n      // If menu index is greater than 1\n      // the selection is handled elsewhere\n      // TODO: find out where\n      if (menuIndex > -1) return (this.internalSearch = null)\n\n      this.selectItem(this.internalSearch)\n      this.internalSearch = null\n    },\n    onPaste (event: ClipboardEvent) {\n      if (!this.multiple || this.searchIsDirty) return\n\n      const pastedItemText = event.clipboardData!.getData('text/vnd.vuetify.autocomplete.item+plain')\n      if (pastedItemText && this.findExistingIndex(pastedItemText as any) === -1) {\n        event.preventDefault()\n        VSelect.options.methods.selectItem.call(this, pastedItemText as any)\n      }\n    },\n  },\n})\n","// Helpers\nimport { wrapInArray, sortItems, deepEqual, groupItems, searchItems, fillArray } from '../../util/helpers'\nimport Vue, { VNode } from 'vue'\n\n// Types\nimport {\n  DataOptions,\n  DataPagination,\n  DataScopeProps,\n  DataSortFunction,\n  DataGroupFunction,\n  DataSearchFunction,\n  ItemGroup,\n} from 'vuetify/types'\nimport { PropValidator } from 'vue/types/options'\n\nexport default Vue.extend({\n  name: 'v-data',\n\n  inheritAttrs: false,\n\n  props: {\n    items: {\n      type: Array,\n      default: () => [],\n    } as PropValidator<any[]>,\n    options: {\n      type: Object,\n      default: () => ({}),\n    } as PropValidator<Partial<DataOptions>>,\n    sortBy: {\n      type: [String, Array],\n      default: () => [],\n    } as PropValidator<string | string[]>,\n    sortDesc: {\n      type: [Boolean, Array],\n      default: () => [],\n    } as PropValidator<boolean | boolean[]>,\n    customSort: {\n      type: Function,\n      default: sortItems,\n    } as PropValidator<DataSortFunction>,\n    mustSort: Boolean,\n    multiSort: Boolean,\n    page: {\n      type: Number,\n      default: 1,\n    },\n    itemsPerPage: {\n      type: Number,\n      default: 10,\n    },\n    groupBy: {\n      type: [String, Array],\n      default: () => [],\n    } as PropValidator<string | string[]>,\n    groupDesc: {\n      type: [Boolean, Array],\n      default: () => [],\n    } as PropValidator<boolean | boolean[]>,\n    customGroup: {\n      type: Function,\n      default: groupItems,\n    } as PropValidator<DataGroupFunction>,\n    locale: {\n      type: String,\n      default: 'en-US',\n    },\n    disableSort: Boolean,\n    disablePagination: Boolean,\n    disableFiltering: Boolean,\n    search: String,\n    customFilter: {\n      type: Function,\n      default: searchItems,\n    } as PropValidator<DataSearchFunction>,\n    serverItemsLength: {\n      type: Number,\n      default: -1,\n    },\n  },\n\n  data () {\n    let internalOptions: DataOptions = {\n      page: this.page,\n      itemsPerPage: this.itemsPerPage,\n      sortBy: wrapInArray(this.sortBy),\n      sortDesc: wrapInArray(this.sortDesc),\n      groupBy: wrapInArray(this.groupBy),\n      groupDesc: wrapInArray(this.groupDesc),\n      mustSort: this.mustSort,\n      multiSort: this.multiSort,\n    }\n\n    if (this.options) {\n      internalOptions = Object.assign(internalOptions, this.options)\n    }\n\n    const { sortBy, sortDesc, groupBy, groupDesc } = internalOptions\n    const sortDiff = sortBy.length - sortDesc.length\n    const groupDiff = groupBy.length - groupDesc.length\n\n    if (sortDiff > 0) {\n      internalOptions.sortDesc.push(...fillArray(sortDiff, false))\n    }\n\n    if (groupDiff > 0) {\n      internalOptions.groupDesc.push(...fillArray(groupDiff, false))\n    }\n\n    return {\n      internalOptions,\n    }\n  },\n\n  computed: {\n    itemsLength (): number {\n      return this.serverItemsLength >= 0 ? this.serverItemsLength : this.filteredItems.length\n    },\n    pageCount (): number {\n      return this.internalOptions.itemsPerPage <= 0\n        ? 1\n        : Math.ceil(this.itemsLength / this.internalOptions.itemsPerPage)\n    },\n    pageStart (): number {\n      if (this.internalOptions.itemsPerPage === -1 || !this.items.length) return 0\n\n      return (this.internalOptions.page - 1) * this.internalOptions.itemsPerPage\n    },\n    pageStop (): number {\n      if (this.internalOptions.itemsPerPage === -1) return this.itemsLength\n      if (!this.items.length) return 0\n\n      return Math.min(this.itemsLength, this.internalOptions.page * this.internalOptions.itemsPerPage)\n    },\n    isGrouped (): boolean {\n      return !!this.internalOptions.groupBy.length\n    },\n    pagination (): DataPagination {\n      return {\n        page: this.internalOptions.page,\n        itemsPerPage: this.internalOptions.itemsPerPage,\n        pageStart: this.pageStart,\n        pageStop: this.pageStop,\n        pageCount: this.pageCount,\n        itemsLength: this.itemsLength,\n      }\n    },\n    filteredItems (): any[] {\n      let items = this.items.slice()\n\n      if (!this.disableFiltering && this.serverItemsLength <= 0) {\n        items = this.customFilter(items, this.search)\n      }\n\n      return items\n    },\n    computedItems (): any[] {\n      let items = this.filteredItems.slice()\n\n      if (!this.disableSort && this.serverItemsLength <= 0) {\n        items = this.sortItems(items)\n      }\n\n      if (!this.disablePagination && this.serverItemsLength <= 0) {\n        items = this.paginateItems(items)\n      }\n\n      return items\n    },\n    groupedItems (): ItemGroup<any>[] | null {\n      return this.isGrouped ? this.groupItems(this.computedItems) : null\n    },\n    scopedProps (): DataScopeProps {\n      const props = {\n        sort: this.sort,\n        sortArray: this.sortArray,\n        group: this.group,\n        items: this.computedItems,\n        options: this.internalOptions,\n        updateOptions: this.updateOptions,\n        pagination: this.pagination,\n        groupedItems: this.groupedItems,\n        originalItemsLength: this.items.length,\n      }\n\n      return props\n    },\n    computedOptions (): DataOptions {\n      return { ...this.options } as DataOptions\n    },\n  },\n\n  watch: {\n    computedOptions: {\n      handler (options: DataOptions, old: DataOptions) {\n        if (deepEqual(options, old)) return\n\n        this.updateOptions(options)\n      },\n      deep: true,\n      immediate: true,\n    },\n    internalOptions: {\n      handler (options: DataOptions, old: DataOptions) {\n        if (deepEqual(options, old)) return\n        this.$emit('update:options', options)\n      },\n      deep: true,\n      immediate: true,\n    },\n    page (page: number) {\n      this.updateOptions({ page })\n    },\n    'internalOptions.page' (page: number) {\n      this.$emit('update:page', page)\n    },\n    itemsPerPage (itemsPerPage: number) {\n      this.updateOptions({ itemsPerPage })\n    },\n    'internalOptions.itemsPerPage' (itemsPerPage: number) {\n      this.$emit('update:items-per-page', itemsPerPage)\n    },\n    sortBy (sortBy: string | string[]) {\n      this.updateOptions({ sortBy: wrapInArray(sortBy) })\n    },\n    'internalOptions.sortBy' (sortBy: string[], old: string[]) {\n      !deepEqual(sortBy, old) && this.$emit('update:sort-by', Array.isArray(this.sortBy) ? sortBy : sortBy[0])\n    },\n    sortDesc (sortDesc: boolean | boolean[]) {\n      this.updateOptions({ sortDesc: wrapInArray(sortDesc) })\n    },\n    'internalOptions.sortDesc' (sortDesc: boolean[], old: boolean[]) {\n      !deepEqual(sortDesc, old) && this.$emit('update:sort-desc', Array.isArray(this.sortDesc) ? sortDesc : sortDesc[0])\n    },\n    groupBy (groupBy: string | string[]) {\n      this.updateOptions({ groupBy: wrapInArray(groupBy) })\n    },\n    'internalOptions.groupBy' (groupBy: string[], old: string[]) {\n      !deepEqual(groupBy, old) && this.$emit('update:group-by', Array.isArray(this.groupBy) ? groupBy : groupBy[0])\n    },\n    groupDesc (groupDesc: boolean | boolean[]) {\n      this.updateOptions({ groupDesc: wrapInArray(groupDesc) })\n    },\n    'internalOptions.groupDesc' (groupDesc: boolean[], old: boolean[]) {\n      !deepEqual(groupDesc, old) && this.$emit('update:group-desc', Array.isArray(this.groupDesc) ? groupDesc : groupDesc[0])\n    },\n    multiSort (multiSort: boolean) {\n      this.updateOptions({ multiSort })\n    },\n    'internalOptions.multiSort' (multiSort: boolean) {\n      this.$emit('update:multi-sort', multiSort)\n    },\n    mustSort (mustSort: boolean) {\n      this.updateOptions({ mustSort })\n    },\n    'internalOptions.mustSort' (mustSort: boolean) {\n      this.$emit('update:must-sort', mustSort)\n    },\n    pageCount: {\n      handler (pageCount: number) {\n        this.$emit('page-count', pageCount)\n      },\n      immediate: true,\n    },\n    computedItems: {\n      handler (computedItems: any[]) {\n        this.$emit('current-items', computedItems)\n      },\n      immediate: true,\n    },\n    pagination: {\n      handler (pagination: DataPagination, old: DataPagination) {\n        if (deepEqual(pagination, old)) return\n        this.$emit('pagination', this.pagination)\n      },\n      immediate: true,\n    },\n  },\n\n  methods: {\n    toggle (key: string, oldBy: string[], oldDesc: boolean[], page: number, mustSort: boolean, multiSort: boolean) {\n      let by = oldBy.slice()\n      let desc = oldDesc.slice()\n      const byIndex = by.findIndex((k: string) => k === key)\n\n      if (byIndex < 0) {\n        if (!multiSort) {\n          by = []\n          desc = []\n        }\n\n        by.push(key)\n        desc.push(false)\n      } else if (byIndex >= 0 && !desc[byIndex]) {\n        desc[byIndex] = true\n      } else if (!mustSort) {\n        by.splice(byIndex, 1)\n        desc.splice(byIndex, 1)\n      } else {\n        desc[byIndex] = false\n      }\n\n      // Reset page to 1 if sortBy or sortDesc have changed\n      if (!deepEqual(by, oldBy) || !deepEqual(desc, oldDesc)) {\n        page = 1\n      }\n\n      return { by, desc, page }\n    },\n    group (key: string): void {\n      const { by: groupBy, desc: groupDesc, page } = this.toggle(\n        key,\n        this.internalOptions.groupBy,\n        this.internalOptions.groupDesc,\n        this.internalOptions.page,\n        true,\n        false\n      )\n      this.updateOptions({ groupBy, groupDesc, page })\n    },\n    sort (key: string | string[]): void {\n      if (Array.isArray(key)) return this.sortArray(key)\n\n      const { by: sortBy, desc: sortDesc, page } = this.toggle(\n        key,\n        this.internalOptions.sortBy,\n        this.internalOptions.sortDesc,\n        this.internalOptions.page,\n        this.internalOptions.mustSort,\n        this.internalOptions.multiSort\n      )\n      this.updateOptions({ sortBy, sortDesc, page })\n    },\n    sortArray (sortBy: string[]) {\n      const sortDesc = sortBy.map(s => {\n        const i = this.internalOptions.sortBy.findIndex((k: string) => k === s)\n        return i > -1 ? this.internalOptions.sortDesc[i] : false\n      })\n\n      this.updateOptions({ sortBy, sortDesc })\n    },\n    updateOptions (options: any) {\n      this.internalOptions = {\n        ...this.internalOptions,\n        ...options,\n        page: this.serverItemsLength < 0\n          ? Math.max(1, Math.min(options.page || this.internalOptions.page, this.pageCount))\n          : options.page || this.internalOptions.page,\n      }\n    },\n    sortItems (items: any[]): any[] {\n      let sortBy = this.internalOptions.sortBy\n      let sortDesc = this.internalOptions.sortDesc\n\n      if (this.internalOptions.groupBy.length) {\n        sortBy = [...this.internalOptions.groupBy, ...sortBy]\n        sortDesc = [...this.internalOptions.groupDesc, ...sortDesc]\n      }\n\n      return this.customSort(items, sortBy, sortDesc, this.locale)\n    },\n    groupItems (items: any[]): ItemGroup<any>[] {\n      return this.customGroup(items, this.internalOptions.groupBy, this.internalOptions.groupDesc)\n    },\n    paginateItems (items: any[]): any[] {\n      // Make sure we don't try to display non-existant page if items suddenly change\n      // TODO: Could possibly move this to pageStart/pageStop?\n      if (this.serverItemsLength === -1 && items.length <= this.pageStart) {\n        this.internalOptions.page = Math.max(1, this.internalOptions.page - 1)\n      }\n\n      return items.slice(this.pageStart, this.pageStop)\n    },\n  },\n\n  render (): VNode {\n    return this.$scopedSlots.default && this.$scopedSlots.default(this.scopedProps) as any\n  },\n})\n","import './VDataFooter.sass'\n\n// Components\nimport VSelect from '../VSelect/VSelect'\nimport VIcon from '../VIcon'\nimport VBtn from '../VBtn'\n\n// Types\nimport Vue, { VNode, VNodeChildrenArrayContents, PropType } from 'vue'\nimport { DataPagination, DataOptions, DataItemsPerPageOption } from 'vuetify/types'\nimport { PropValidator } from 'vue/types/options'\n\nexport default Vue.extend({\n  name: 'v-data-footer',\n\n  props: {\n    options: {\n      type: Object as PropType<DataOptions>,\n      required: true,\n    },\n    pagination: {\n      type: Object as PropType<DataPagination>,\n      required: true,\n    },\n    itemsPerPageOptions: {\n      type: Array,\n      default: () => ([5, 10, 15, -1]),\n    } as PropValidator<DataItemsPerPageOption[]>,\n    prevIcon: {\n      type: String,\n      default: '$prev',\n    },\n    nextIcon: {\n      type: String,\n      default: '$next',\n    },\n    firstIcon: {\n      type: String,\n      default: '$first',\n    },\n    lastIcon: {\n      type: String,\n      default: '$last',\n    },\n    itemsPerPageText: {\n      type: String,\n      default: '$vuetify.dataFooter.itemsPerPageText',\n    },\n    itemsPerPageAllText: {\n      type: String,\n      default: '$vuetify.dataFooter.itemsPerPageAll',\n    },\n    showFirstLastPage: Boolean,\n    showCurrentPage: Boolean,\n    disablePagination: Boolean,\n    disableItemsPerPage: Boolean,\n    pageText: {\n      type: String,\n      default: '$vuetify.dataFooter.pageText',\n    },\n  },\n\n  computed: {\n    disableNextPageIcon (): boolean {\n      return this.options.itemsPerPage <= 0 ||\n        this.options.page * this.options.itemsPerPage >= this.pagination.itemsLength ||\n        this.pagination.pageStop < 0\n    },\n    computedDataItemsPerPageOptions (): any[] {\n      return this.itemsPerPageOptions.map(option => {\n        if (typeof option === 'object') return option\n        else return this.genDataItemsPerPageOption(option)\n      })\n    },\n  },\n\n  methods: {\n    updateOptions (obj: object) {\n      this.$emit('update:options', Object.assign({}, this.options, obj))\n    },\n    onFirstPage () {\n      this.updateOptions({ page: 1 })\n    },\n    onPreviousPage () {\n      this.updateOptions({ page: this.options.page - 1 })\n    },\n    onNextPage () {\n      this.updateOptions({ page: this.options.page + 1 })\n    },\n    onLastPage () {\n      this.updateOptions({ page: this.pagination.pageCount })\n    },\n    onChangeItemsPerPage (itemsPerPage: number) {\n      this.updateOptions({ itemsPerPage, page: 1 })\n    },\n    genDataItemsPerPageOption (option: number) {\n      return {\n        text: option === -1 ? this.$vuetify.lang.t(this.itemsPerPageAllText) : String(option),\n        value: option,\n      }\n    },\n    genItemsPerPageSelect () {\n      let value = this.options.itemsPerPage\n      const computedIPPO = this.computedDataItemsPerPageOptions\n\n      if (computedIPPO.length <= 1) return null\n\n      if (!computedIPPO.find(ippo => ippo.value === value)) value = computedIPPO[0]\n\n      return this.$createElement('div', {\n        staticClass: 'v-data-footer__select',\n      }, [\n        this.$vuetify.lang.t(this.itemsPerPageText),\n        this.$createElement(VSelect, {\n          attrs: {\n            'aria-label': this.itemsPerPageText,\n          },\n          props: {\n            disabled: this.disableItemsPerPage,\n            items: computedIPPO,\n            value,\n            hideDetails: true,\n            auto: true,\n            minWidth: '75px',\n          },\n          on: {\n            input: this.onChangeItemsPerPage,\n          },\n        }),\n      ])\n    },\n    genPaginationInfo () {\n      let children: VNodeChildrenArrayContents = ['–']\n\n      if (this.pagination.itemsLength && this.pagination.itemsPerPage) {\n        const itemsLength = this.pagination.itemsLength\n        const pageStart = this.pagination.pageStart + 1\n        const pageStop = itemsLength < this.pagination.pageStop || this.pagination.pageStop < 0\n          ? itemsLength\n          : this.pagination.pageStop\n\n        children = this.$scopedSlots['page-text']\n          ? [this.$scopedSlots['page-text']!({ pageStart, pageStop, itemsLength })]\n          : [this.$vuetify.lang.t(this.pageText, pageStart, pageStop, itemsLength)]\n      }\n\n      return this.$createElement('div', {\n        class: 'v-data-footer__pagination',\n      }, children)\n    },\n    genIcon (click: Function, disabled: boolean, label: string, icon: string): VNode {\n      return this.$createElement(VBtn, {\n        props: {\n          disabled: disabled || this.disablePagination,\n          icon: true,\n          text: true,\n          // dark: this.dark, // TODO: add mixin\n          // light: this.light // TODO: add mixin\n        },\n        on: {\n          click,\n        },\n        attrs: {\n          'aria-label': label, // TODO: Localization\n        },\n      }, [this.$createElement(VIcon, icon)])\n    },\n    genIcons () {\n      const before: VNodeChildrenArrayContents = []\n      const after: VNodeChildrenArrayContents = []\n\n      before.push(this.genIcon(\n        this.onPreviousPage,\n        this.options.page === 1,\n        this.$vuetify.lang.t('$vuetify.dataFooter.prevPage'),\n        this.$vuetify.rtl ? this.nextIcon : this.prevIcon\n      ))\n\n      after.push(this.genIcon(\n        this.onNextPage,\n        this.disableNextPageIcon,\n        this.$vuetify.lang.t('$vuetify.dataFooter.nextPage'),\n        this.$vuetify.rtl ? this.prevIcon : this.nextIcon\n      ))\n\n      if (this.showFirstLastPage) {\n        before.unshift(this.genIcon(\n          this.onFirstPage,\n          this.options.page === 1,\n          this.$vuetify.lang.t('$vuetify.dataFooter.firstPage'),\n          this.$vuetify.rtl ? this.lastIcon : this.firstIcon\n        ))\n\n        after.push(this.genIcon(\n          this.onLastPage,\n          this.options.page >= this.pagination.pageCount || this.options.itemsPerPage === -1,\n          this.$vuetify.lang.t('$vuetify.dataFooter.lastPage'),\n          this.$vuetify.rtl ? this.firstIcon : this.lastIcon\n        ))\n      }\n\n      return [\n        this.$createElement('div', {\n          staticClass: 'v-data-footer__icons-before',\n        }, before),\n        this.showCurrentPage && this.$createElement('span', [this.options.page.toString()]),\n        this.$createElement('div', {\n          staticClass: 'v-data-footer__icons-after',\n        }, after),\n      ]\n    },\n  },\n\n  render (): VNode {\n    return this.$createElement('div', {\n      staticClass: 'v-data-footer',\n    }, [\n      this.genItemsPerPageSelect(),\n      this.genPaginationInfo(),\n      this.genIcons(),\n    ])\n  },\n})\n","// Components\nimport { VData } from '../VData'\nimport VDataFooter from './VDataFooter'\n\n// Mixins\nimport Mobile from '../../mixins/mobile'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport mixins from '../../util/mixins'\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, camelizeObjectKeys } from '../../util/helpers'\nimport { breaking, removed } from '../../util/console'\n\n// Types\nimport { VNode, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { DataItemProps, DataScopeProps } from 'vuetify/types'\n\n/* @vue/component */\nexport default mixins(\n  Mobile,\n  Themeable\n).extend({\n  name: 'v-data-iterator',\n\n  props: {\n    ...VData.options.props, // TODO: filter out props not used\n    itemKey: {\n      type: String,\n      default: 'id',\n    },\n    value: {\n      type: Array,\n      default: () => [],\n    } as PropValidator<any[]>,\n    singleSelect: Boolean,\n    expanded: {\n      type: Array,\n      default: () => [],\n    } as PropValidator<any[]>,\n    mobileBreakpoint: {\n      ...Mobile.options.props.mobileBreakpoint,\n      default: 600,\n    },\n    singleExpand: Boolean,\n    loading: [Boolean, String],\n    noResultsText: {\n      type: String,\n      default: '$vuetify.dataIterator.noResultsText',\n    },\n    noDataText: {\n      type: String,\n      default: '$vuetify.noDataText',\n    },\n    loadingText: {\n      type: String,\n      default: '$vuetify.dataIterator.loadingText',\n    },\n    hideDefaultFooter: Boolean,\n    footerProps: Object,\n    selectableKey: {\n      type: String,\n      default: 'isSelectable',\n    },\n  },\n\n  data: () => ({\n    selection: {} as Record<string, any>,\n    expansion: {} as Record<string, boolean>,\n    internalCurrentItems: [] as any[],\n  }),\n\n  computed: {\n    everyItem (): boolean {\n      return !!this.selectableItems.length && this.selectableItems.every((i: any) => this.isSelected(i))\n    },\n    someItems (): boolean {\n      return this.selectableItems.some((i: any) => this.isSelected(i))\n    },\n    sanitizedFooterProps (): Record<string, any> {\n      return camelizeObjectKeys(this.footerProps)\n    },\n    selectableItems (): any[] {\n      return this.internalCurrentItems.filter(item => this.isSelectable(item))\n    },\n  },\n\n  watch: {\n    value: {\n      handler (value: any[]) {\n        this.selection = value.reduce((selection, item) => {\n          selection[getObjectValueByPath(item, this.itemKey)] = item\n          return selection\n        }, {})\n      },\n      immediate: true,\n    },\n    selection (value: Record<string, boolean>, old: Record<string, boolean>) {\n      if (deepEqual(Object.keys(value), Object.keys(old))) return\n\n      this.$emit('input', Object.values(value))\n    },\n    expanded: {\n      handler (value: any[]) {\n        this.expansion = value.reduce((expansion, item) => {\n          expansion[getObjectValueByPath(item, this.itemKey)] = true\n          return expansion\n        }, {})\n      },\n      immediate: true,\n    },\n    expansion (value: Record<string, boolean>, old: Record<string, boolean>) {\n      if (deepEqual(value, old)) return\n      const keys = Object.keys(value).filter(k => value[k])\n      const expanded = !keys.length ? [] : this.items.filter(i => keys.includes(String(getObjectValueByPath(i, this.itemKey))))\n      this.$emit('update:expanded', expanded)\n    },\n  },\n\n  created () {\n    const breakingProps = [\n      ['disable-initial-sort', 'sort-by'],\n      ['filter', 'custom-filter'],\n      ['pagination', 'options'],\n      ['total-items', 'server-items-length'],\n      ['hide-actions', 'hide-default-footer'],\n      ['rows-per-page-items', 'footer-props.items-per-page-options'],\n      ['rows-per-page-text', 'footer-props.items-per-page-text'],\n      ['prev-icon', 'footer-props.prev-icon'],\n      ['next-icon', 'footer-props.next-icon'],\n    ]\n\n    /* istanbul ignore next */\n    breakingProps.forEach(([original, replacement]) => {\n      if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n    })\n\n    const removedProps = [\n      'expand',\n      'content-class',\n      'content-props',\n      'content-tag',\n    ]\n\n    /* istanbul ignore next */\n    removedProps.forEach(prop => {\n      if (this.$attrs.hasOwnProperty(prop)) removed(prop)\n    })\n  },\n\n  methods: {\n    toggleSelectAll (value: boolean): void {\n      const selection = Object.assign({}, this.selection)\n\n      for (let i = 0; i < this.selectableItems.length; i++) {\n        const item = this.selectableItems[i]\n\n        if (!this.isSelectable(item)) continue\n\n        const key = getObjectValueByPath(item, this.itemKey)\n        if (value) selection[key] = item\n        else delete selection[key]\n      }\n\n      this.selection = selection\n      this.$emit('toggle-select-all', { items: this.internalCurrentItems, value })\n    },\n    isSelectable (item: any): boolean {\n      return getObjectValueByPath(item, this.selectableKey) !== false\n    },\n    isSelected (item: any): boolean {\n      return !!this.selection[getObjectValueByPath(item, this.itemKey)] || false\n    },\n    select (item: any, value = true, emit = true): void {\n      if (!this.isSelectable(item)) return\n\n      const selection = this.singleSelect ? {} : Object.assign({}, this.selection)\n      const key = getObjectValueByPath(item, this.itemKey)\n\n      if (value) selection[key] = item\n      else delete selection[key]\n\n      if (this.singleSelect && emit) {\n        const keys = Object.keys(this.selection)\n        const old = keys.length && getObjectValueByPath(this.selection[keys[0]], this.itemKey)\n        old && old !== key && this.$emit('item-selected', { item: this.selection[old], value: false })\n      }\n      this.selection = selection\n      emit && this.$emit('item-selected', { item, value })\n    },\n    isExpanded (item: any): boolean {\n      return this.expansion[getObjectValueByPath(item, this.itemKey)] || false\n    },\n    expand (item: any, value = true): void {\n      const expansion = this.singleExpand ? {} : Object.assign({}, this.expansion)\n      const key = getObjectValueByPath(item, this.itemKey)\n\n      if (value) expansion[key] = true\n      else delete expansion[key]\n\n      this.expansion = expansion\n      this.$emit('item-expanded', { item, value })\n    },\n    createItemProps (item: any): DataItemProps {\n      return {\n        item,\n        select: (v: boolean) => this.select(item, v),\n        isSelected: this.isSelected(item),\n        expand: (v: boolean) => this.expand(item, v),\n        isExpanded: this.isExpanded(item),\n        isMobile: this.isMobile,\n      }\n    },\n    genEmptyWrapper (content: VNodeChildren) {\n      return this.$createElement('div', content)\n    },\n    genEmpty (originalItemsLength: number, filteredItemsLength: number) {\n      if (originalItemsLength === 0 && this.loading) {\n        const loading = this.$slots['loading'] || this.$vuetify.lang.t(this.loadingText)\n        return this.genEmptyWrapper(loading)\n      } else if (originalItemsLength === 0) {\n        const noData = this.$slots['no-data'] || this.$vuetify.lang.t(this.noDataText)\n        return this.genEmptyWrapper(noData)\n      } else if (filteredItemsLength === 0) {\n        const noResults = this.$slots['no-results'] || this.$vuetify.lang.t(this.noResultsText)\n        return this.genEmptyWrapper(noResults)\n      }\n\n      return null\n    },\n    genItems (props: DataScopeProps) {\n      const empty = this.genEmpty(props.originalItemsLength, props.pagination.itemsLength)\n      if (empty) return [empty]\n\n      if (this.$scopedSlots.default) {\n        return this.$scopedSlots.default({\n          ...props,\n          isSelected: this.isSelected,\n          select: this.select,\n          isExpanded: this.isExpanded,\n          expand: this.expand,\n        })\n      }\n\n      if (this.$scopedSlots.item) {\n        return props.items.map((item: any) => this.$scopedSlots.item!(this.createItemProps(item)))\n      }\n\n      return []\n    },\n    genFooter (props: DataScopeProps) {\n      if (this.hideDefaultFooter) return null\n\n      const data = {\n        props: {\n          ...this.sanitizedFooterProps,\n          options: props.options,\n          pagination: props.pagination,\n        },\n        on: {\n          'update:options': (value: any) => props.updateOptions(value),\n        },\n      }\n\n      const scopedSlots = getPrefixedScopedSlots('footer.', this.$scopedSlots)\n\n      return this.$createElement(VDataFooter, {\n        scopedSlots,\n        ...data,\n      })\n    },\n    genDefaultScopedSlot (props: any) {\n      const outerProps = {\n        ...props,\n        someItems: this.someItems,\n        everyItem: this.everyItem,\n        toggleSelectAll: this.toggleSelectAll,\n      }\n\n      return this.$createElement('div', {\n        staticClass: 'v-data-iterator',\n      }, [\n        getSlot(this, 'header', outerProps, true),\n        this.genItems(props),\n        this.genFooter(props),\n        getSlot(this, 'footer', outerProps, true),\n      ])\n    },\n  },\n\n  render (): VNode {\n    return this.$createElement(VData, {\n      props: this.$props,\n      on: {\n        'update:options': (v: any, old: any) => !deepEqual(v, old) && this.$emit('update:options', v),\n        'update:page': (v: any) => this.$emit('update:page', v),\n        'update:items-per-page': (v: any) => this.$emit('update:items-per-page', v),\n        'update:sort-by': (v: any) => this.$emit('update:sort-by', v),\n        'update:sort-desc': (v: any) => this.$emit('update:sort-desc', v),\n        'update:group-by': (v: any) => this.$emit('update:group-by', v),\n        'update:group-desc': (v: any) => this.$emit('update:group-desc', v),\n        pagination: (v: any, old: any) => !deepEqual(v, old) && this.$emit('pagination', v),\n        'current-items': (v: any[]) => {\n          this.internalCurrentItems = v\n          this.$emit('current-items', v)\n        },\n        'page-count': (v: number) => this.$emit('page-count', v),\n      },\n      scopedSlots: {\n        default: this.genDefaultScopedSlot,\n      },\n    })\n  },\n})\n","import { VDataTable } from '../'\nimport VIcon from '../../VIcon'\nimport VSimpleCheckbox from '../../VCheckbox/VSimpleCheckbox'\nimport ripple from '../../../directives/ripple'\n\nimport Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport mixins from '../../../util/mixins'\nimport { DataOptions, DataTableHeader } from 'vuetify/types'\n\ntype VDataTableInstance = InstanceType<typeof VDataTable>\n\ninterface options extends Vue {\n  dataTable: VDataTableInstance\n}\n\nexport default mixins<options>().extend({\n  // https://github.com/vuejs/vue/issues/6872\n  directives: {\n    ripple,\n  },\n\n  props: {\n    headers: {\n      type: Array,\n      default: () => ([]),\n    } as PropValidator<DataTableHeader[]>,\n    options: {\n      type: Object,\n      default: () => ({\n        page: 1,\n        itemsPerPage: 10,\n        sortBy: [],\n        sortDesc: [],\n        groupBy: [],\n        groupDesc: [],\n        multiSort: false,\n        mustSort: false,\n      }),\n    } as PropValidator<DataOptions>,\n    sortIcon: {\n      type: String,\n      default: '$sort',\n    },\n    everyItem: Boolean,\n    someItems: Boolean,\n    showGroupBy: Boolean,\n    singleSelect: Boolean,\n    disableSort: Boolean,\n  },\n\n  methods: {\n    genSelectAll () {\n      const data = {\n        props: {\n          value: this.everyItem,\n          indeterminate: !this.everyItem && this.someItems,\n        },\n        on: {\n          input: (v: boolean) => this.$emit('toggle-select-all', v),\n        },\n      }\n\n      if (this.$scopedSlots['data-table-select']) {\n        return this.$scopedSlots['data-table-select']!(data)\n      }\n\n      return this.$createElement(VSimpleCheckbox, {\n        staticClass: 'v-data-table__checkbox',\n        ...data,\n      })\n    },\n    genSortIcon () {\n      return this.$createElement(VIcon, {\n        staticClass: 'v-data-table-header__icon',\n        props: {\n          size: 18,\n        },\n      }, [this.sortIcon])\n    },\n  },\n})\n","import { VNode, VNodeChildrenArrayContents } from 'vue'\nimport mixins from '../../util/mixins'\nimport VSelect from '../VSelect/VSelect'\nimport VChip from '../VChip'\nimport header from './mixins/header'\nimport { wrapInArray } from '../../util/helpers'\n\nexport default mixins(header).extend({\n  name: 'v-data-table-header-mobile',\n\n  props: {\n    sortByText: {\n      type: String,\n      default: '$vuetify.dataTable.sortBy',\n    },\n  },\n\n  methods: {\n    genSortChip (props: any) {\n      const children: VNodeChildrenArrayContents = [props.item.text]\n\n      const sortIndex = this.options.sortBy.findIndex(k => k === props.item.value)\n      const beingSorted = sortIndex >= 0\n      const isDesc = this.options.sortDesc[sortIndex]\n\n      children.push(this.$createElement('div', {\n        staticClass: 'v-chip__close',\n        class: {\n          sortable: true,\n          active: beingSorted,\n          asc: beingSorted && !isDesc,\n          desc: beingSorted && isDesc,\n        },\n      }, [this.genSortIcon()]))\n\n      return this.$createElement(VChip, {\n        staticClass: 'sortable',\n        on: {\n          click: (e: MouseEvent) => {\n            e.stopPropagation()\n            this.$emit('sort', props.item.value)\n          },\n        },\n      }, children)\n    },\n    genSortSelect (items: any[]) {\n      return this.$createElement(VSelect, {\n        props: {\n          label: this.$vuetify.lang.t(this.sortByText),\n          items,\n          hideDetails: true,\n          multiple: this.options.multiSort,\n          value: this.options.multiSort ? this.options.sortBy : this.options.sortBy[0],\n          menuProps: { closeOnContentClick: true },\n        },\n        on: {\n          change: (v: string | string[]) => this.$emit('sort', v),\n        },\n        scopedSlots: {\n          selection: props => this.genSortChip(props),\n        },\n      })\n    },\n  },\n\n  render (h): VNode {\n    const children: VNodeChildrenArrayContents = []\n\n    const header = this.headers.find(h => h.value === 'data-table-select')\n    if (header && !this.singleSelect) {\n      children.push(this.$createElement('div', {\n        class: [\n          'v-data-table-header-mobile__select',\n          ...wrapInArray(header.class),\n        ],\n        attrs: {\n          width: header.width,\n        },\n      }, [this.genSelectAll()]))\n    }\n\n    const sortHeaders = this.headers\n      .filter(h => h.sortable !== false && h.value !== 'data-table-select')\n      .map(h => ({\n        text: h.text,\n        value: h.value,\n      }))\n\n    if (!this.disableSort && sortHeaders.length) {\n      children.push(this.genSortSelect(sortHeaders))\n    }\n\n    const th = h('th', [h('div', { staticClass: 'v-data-table-header-mobile__wrapper' }, children)])\n\n    const tr = h('tr', [th])\n\n    return h('thead', {\n      staticClass: 'v-data-table-header v-data-table-header-mobile',\n    }, [tr])\n  },\n})\n","// Helpers\nimport { VNode, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport header from './mixins/header'\nimport { wrapInArray, convertToUnit } from '../../util/helpers'\nimport { DataTableHeader } from 'vuetify/types'\n\nexport default mixins(header).extend({\n  name: 'v-data-table-header-desktop',\n\n  methods: {\n    genGroupByToggle (header: DataTableHeader) {\n      return this.$createElement('span', {\n        on: {\n          click: (e: MouseEvent) => {\n            e.stopPropagation()\n            this.$emit('group', header.value)\n          },\n        },\n      }, ['group'])\n    },\n    getAria (beingSorted: boolean, isDesc: boolean) {\n      const $t = (key: string) => this.$vuetify.lang.t(`$vuetify.dataTable.ariaLabel.${key}`)\n\n      let ariaSort = 'none'\n      let ariaLabel = [\n        $t('sortNone'),\n        $t('activateAscending'),\n      ]\n\n      if (!beingSorted) {\n        return { ariaSort, ariaLabel: ariaLabel.join(' ') }\n      }\n\n      if (isDesc) {\n        ariaSort = 'descending'\n        ariaLabel = [\n          $t('sortDescending'),\n          $t(this.options.mustSort ? 'activateAscending' : 'activateNone'),\n        ]\n      } else {\n        ariaSort = 'ascending'\n        ariaLabel = [\n          $t('sortAscending'),\n          $t('activateDescending'),\n        ]\n      }\n\n      return { ariaSort, ariaLabel: ariaLabel.join(' ') }\n    },\n    genHeader (header: DataTableHeader) {\n      const data: Required<Pick<VNodeData, 'attrs' | 'on' | 'class' | 'style'>> = {\n        attrs: {\n          role: 'columnheader',\n          scope: 'col',\n          'aria-label': header.text || '',\n        },\n        style: {\n          width: convertToUnit(header.width),\n          minWidth: convertToUnit(header.width),\n        },\n        class: [\n          `text-${header.align || 'start'}`,\n          ...wrapInArray(header.class),\n          header.divider && 'v-data-table__divider',\n        ],\n        on: {},\n      }\n      const children = []\n\n      if (header.value === 'data-table-select' && !this.singleSelect) {\n        return this.$createElement('th', data, [this.genSelectAll()])\n      }\n\n      children.push(\n        this.$scopedSlots[header.value]\n          ? this.$scopedSlots[header.value]!({ header })\n          : this.$createElement('span', [header.text])\n      )\n\n      if (!this.disableSort && (header.sortable || !header.hasOwnProperty('sortable'))) {\n        data.on['click'] = () => this.$emit('sort', header.value)\n\n        const sortIndex = this.options.sortBy.findIndex(k => k === header.value)\n        const beingSorted = sortIndex >= 0\n        const isDesc = this.options.sortDesc[sortIndex]\n\n        data.class.push('sortable')\n\n        const { ariaLabel, ariaSort } = this.getAria(beingSorted, isDesc)\n\n        data.attrs['aria-label'] += `${header.text ? ': ' : ''}${ariaLabel}`\n        data.attrs['aria-sort'] = ariaSort\n\n        if (beingSorted) {\n          data.class.push('active')\n          data.class.push(isDesc ? 'desc' : 'asc')\n        }\n\n        if (header.align === 'end') children.unshift(this.genSortIcon())\n        else children.push(this.genSortIcon())\n\n        if (this.options.multiSort && beingSorted) {\n          children.push(this.$createElement('span', { class: 'v-data-table-header__sort-badge' }, [String(sortIndex + 1)]))\n        }\n      }\n\n      if (this.showGroupBy && header.groupable !== false) children.push(this.genGroupByToggle(header))\n\n      return this.$createElement('th', data, children)\n    },\n  },\n\n  render (): VNode {\n    return this.$createElement('thead', {\n      staticClass: 'v-data-table-header',\n    }, [\n      this.$createElement('tr', this.headers.map(header => this.genHeader(header))),\n    ])\n  },\n})\n","import { VNodeData } from 'vue'\n\n/**\n * Removes duplicate `@input` listeners when\n * using v-model with functional components\n *\n * @see https://github.com/vuetifyjs/vuetify/issues/4460\n */\nexport default function dedupeModelListeners (data: VNodeData): void {\n  if (data.model && data.on && data.on.input) {\n    if (Array.isArray(data.on.input)) {\n      const i = data.on.input.indexOf(data.model.callback)\n      if (i > -1) data.on.input.splice(i, 1)\n    } else {\n      delete data.on.input\n    }\n  }\n}\n","import { CreateElement, VNode } from 'vue'\n\nexport default function rebuildFunctionalSlots (slots: { [key: string]: VNode[] | undefined }, h: CreateElement) {\n  const children: VNode[] = []\n\n  for (const slot in slots) {\n    if (slots.hasOwnProperty(slot)) {\n      children.push(h('template', { slot }, slots[slot]))\n    }\n  }\n\n  return children\n}\n","// Styles\nimport './VDataTableHeader.sass'\n\n// Components\nimport VDataTableHeaderMobile from './VDataTableHeaderMobile'\nimport VDataTableHeaderDesktop from './VDataTableHeaderDesktop'\n\n// Mixins\nimport header from './mixins/header'\n\n// Utilities\nimport dedupeModelListeners from '../../util/dedupeModelListeners'\nimport mergeData from '../../util/mergeData'\nimport rebuildSlots from '../../util/rebuildFunctionalSlots'\n\n// Types\nimport Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n  name: 'v-data-table-header',\n\n  functional: true,\n\n  props: {\n    ...header.options.props,\n    mobile: Boolean,\n  },\n\n  render (h, { props, data, slots }) {\n    dedupeModelListeners(data)\n    const children = rebuildSlots(slots(), h)\n\n    data = mergeData(data, { props })\n\n    if (props.mobile) {\n      return h(VDataTableHeaderMobile, data, children)\n    } else {\n      return h(VDataTableHeaderDesktop, data, children)\n    }\n  },\n})\n","// Types\nimport Vue, { VNode, PropType } from 'vue'\nimport { DataTableHeader } from 'vuetify/types'\n\n// Utils\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n  name: 'row',\n\n  functional: true,\n\n  props: {\n    headers: Array as PropType<DataTableHeader[]>,\n    item: Object,\n    rtl: Boolean,\n  },\n\n  render (h, { props, slots, data }): VNode {\n    const computedSlots = slots()\n\n    const columns: VNode[] = props.headers.map((header: DataTableHeader) => {\n      const children = []\n      const value = getObjectValueByPath(props.item, header.value)\n\n      const slotName = header.value\n      const scopedSlot = data.scopedSlots && data.scopedSlots[slotName]\n      const regularSlot = computedSlots[slotName]\n\n      if (scopedSlot) {\n        children.push(scopedSlot({ item: props.item, header, value }))\n      } else if (regularSlot) {\n        children.push(regularSlot)\n      } else {\n        children.push(value == null ? value : String(value))\n      }\n\n      const textAlign = `text-${header.align || 'start'}`\n\n      return h('td', {\n        class: {\n          [textAlign]: true,\n          'v-data-table__divider': header.divider,\n        },\n      }, children)\n    })\n\n    return h('tr', data, columns)\n  },\n})\n","import Vue, { VNode } from 'vue'\n\nexport default Vue.extend({\n  name: 'row-group',\n\n  functional: true,\n\n  props: {\n    value: {\n      type: Boolean,\n      default: true,\n    },\n    headerClass: {\n      type: String,\n      default: 'v-row-group__header',\n    },\n    contentClass: String,\n    summaryClass: {\n      type: String,\n      default: 'v-row-group__summary',\n    },\n  },\n\n  render (h, { slots, props }): VNode {\n    const computedSlots = slots()\n    const children = []\n\n    if (computedSlots['column.header']) {\n      children.push(h('tr', {\n        staticClass: props.headerClass,\n      }, computedSlots['column.header']))\n    } else if (computedSlots['row.header']) {\n      children.push(...computedSlots['row.header'])\n    }\n\n    if (computedSlots['row.content'] && props.value) children.push(...computedSlots['row.content'])\n\n    if (computedSlots['column.summary']) {\n      children.push(h('tr', {\n        staticClass: props.summaryClass,\n      }, computedSlots['column.summary']))\n    } else if (computedSlots['row.summary']) {\n      children.push(...computedSlots['row.summary'])\n    }\n\n    return children as any\n  },\n})\n","import Vue, { VNode, PropType } from 'vue'\nimport { getObjectValueByPath } from '../../util/helpers'\nimport { DataTableHeader } from 'vuetify/types'\n\nexport default Vue.extend({\n  name: 'row',\n\n  functional: true,\n\n  props: {\n    headers: Array as PropType<DataTableHeader[]>,\n    hideDefaultHeader: Boolean,\n    item: Object,\n    rtl: Boolean,\n  },\n\n  render (h, { props, slots, data }): VNode {\n    const computedSlots = slots()\n\n    const columns: VNode[] = props.headers.map((header: DataTableHeader) => {\n      const classes = {\n        'v-data-table__mobile-row': true,\n      }\n\n      const children = []\n      const value = getObjectValueByPath(props.item, header.value)\n\n      const slotName = header.value\n      const scopedSlot = data.scopedSlots && data.scopedSlots[slotName]\n      const regularSlot = computedSlots[slotName]\n\n      if (scopedSlot) {\n        children.push(scopedSlot({ item: props.item, header, value }))\n      } else if (regularSlot) {\n        children.push(regularSlot)\n      } else {\n        children.push(value == null ? value : String(value))\n      }\n\n      const mobileRowChildren = [\n        h('div', {\n          staticClass: 'v-data-table__mobile-row__cell',\n        }, children),\n      ]\n\n      if (header.value !== 'dataTableSelect' && !props.hideDefaultHeader) {\n        mobileRowChildren.unshift(\n          h('div', {\n            staticClass: 'v-data-table__mobile-row__header',\n          }, [header.text])\n        )\n      }\n\n      return h('td', { class: classes }, mobileRowChildren)\n    })\n\n    return h('tr', { ...data, staticClass: 'v-data-table__mobile-table-row' }, columns)\n  },\n})\n","import './VDataTable.sass'\n\n// Types\nimport { VNode, VNodeChildrenArrayContents, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport {\n  DataTableHeader,\n  DataTableFilterFunction,\n  DataScopeProps,\n  DataOptions,\n  DataPagination,\n  DataTableCompareFunction,\n  DataItemsPerPageOption,\n  ItemGroup,\n  RowClassFunction,\n  DataTableItemProps,\n} from 'vuetify/types'\n\n// Components\nimport { VData } from '../VData'\nimport { VDataFooter, VDataIterator } from '../VDataIterator'\nimport VBtn from '../VBtn'\nimport VDataTableHeader from './VDataTableHeader'\n// import VVirtualTable from './VVirtualTable'\nimport VIcon from '../VIcon'\nimport Row from './Row'\nimport RowGroup from './RowGroup'\nimport VSimpleCheckbox from '../VCheckbox/VSimpleCheckbox'\nimport VSimpleTable from './VSimpleTable'\nimport MobileRow from './MobileRow'\n\n// Mixins\nimport Loadable from '../../mixins/loadable'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Helpers\nimport mixins from '../../util/mixins'\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, defaultFilter, camelizeObjectKeys, getPropertyFromItem } from '../../util/helpers'\nimport { breaking } from '../../util/console'\nimport { mergeClasses } from '../../util/mergeData'\n\nfunction filterFn (item: any, search: string | null, filter: DataTableFilterFunction) {\n  return (header: DataTableHeader) => {\n    const value = getObjectValueByPath(item, header.value)\n    return header.filter ? header.filter(value, search, item) : filter(value, search, item)\n  }\n}\n\nfunction searchTableItems (\n  items: any[],\n  search: string | null,\n  headersWithCustomFilters: DataTableHeader[],\n  headersWithoutCustomFilters: DataTableHeader[],\n  customFilter: DataTableFilterFunction\n) {\n  search = typeof search === 'string' ? search.trim() : null\n\n  return items.filter(item => {\n    // Headers with custom filters are evaluated whether or not a search term has been provided.\n    // We need to match every filter to be included in the results.\n    const matchesColumnFilters = headersWithCustomFilters.every(filterFn(item, search, defaultFilter))\n\n    // Headers without custom filters are only filtered by the `search` property if it is defined.\n    // We only need a single column to match the search term to be included in the results.\n    const matchesSearchTerm = !search || headersWithoutCustomFilters.some(filterFn(item, search, customFilter))\n\n    return matchesColumnFilters && matchesSearchTerm\n  })\n}\n\n/* @vue/component */\nexport default mixins(\n  VDataIterator,\n  Loadable,\n).extend({\n  name: 'v-data-table',\n\n  // https://github.com/vuejs/vue/issues/6872\n  directives: {\n    ripple,\n  },\n\n  props: {\n    headers: {\n      type: Array,\n      default: () => [],\n    } as PropValidator<DataTableHeader[]>,\n    showSelect: Boolean,\n    showExpand: Boolean,\n    showGroupBy: Boolean,\n    // TODO: Fix\n    // virtualRows: Boolean,\n    height: [Number, String],\n    hideDefaultHeader: Boolean,\n    caption: String,\n    dense: Boolean,\n    headerProps: Object,\n    calculateWidths: Boolean,\n    fixedHeader: Boolean,\n    headersLength: Number,\n    expandIcon: {\n      type: String,\n      default: '$expand',\n    },\n    customFilter: {\n      type: Function,\n      default: defaultFilter,\n    } as PropValidator<typeof defaultFilter>,\n    itemClass: {\n      type: [String, Function],\n      default: () => '',\n    } as PropValidator<RowClassFunction | string>,\n    loaderHeight: {\n      type: [Number, String],\n      default: 4,\n    },\n  },\n\n  data () {\n    return {\n      internalGroupBy: [] as string[],\n      openCache: {} as { [key: string]: boolean },\n      widths: [] as number[],\n    }\n  },\n\n  computed: {\n    computedHeaders (): DataTableHeader[] {\n      if (!this.headers) return []\n      const headers = this.headers.filter(h => h.value === undefined || !this.internalGroupBy.find(v => v === h.value))\n      const defaultHeader = { text: '', sortable: false, width: '1px' }\n\n      if (this.showSelect) {\n        const index = headers.findIndex(h => h.value === 'data-table-select')\n        if (index < 0) headers.unshift({ ...defaultHeader, value: 'data-table-select' })\n        else headers.splice(index, 1, { ...defaultHeader, ...headers[index] })\n      }\n\n      if (this.showExpand) {\n        const index = headers.findIndex(h => h.value === 'data-table-expand')\n        if (index < 0) headers.unshift({ ...defaultHeader, value: 'data-table-expand' })\n        else headers.splice(index, 1, { ...defaultHeader, ...headers[index] })\n      }\n\n      return headers\n    },\n    colspanAttrs (): object | undefined {\n      return this.isMobile ? undefined : {\n        colspan: this.headersLength || this.computedHeaders.length,\n      }\n    },\n    columnSorters (): Record<string, DataTableCompareFunction> {\n      return this.computedHeaders.reduce<Record<string, DataTableCompareFunction>>((acc, header) => {\n        if (header.sort) acc[header.value] = header.sort\n        return acc\n      }, {})\n    },\n    headersWithCustomFilters (): DataTableHeader[] {\n      return this.headers.filter(header => header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n    },\n    headersWithoutCustomFilters (): DataTableHeader[] {\n      return this.headers.filter(header => !header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n    },\n    sanitizedHeaderProps (): Record<string, any> {\n      return camelizeObjectKeys(this.headerProps)\n    },\n    computedItemsPerPage (): number {\n      const itemsPerPage = this.options && this.options.itemsPerPage ? this.options.itemsPerPage : this.itemsPerPage\n      const itemsPerPageOptions: DataItemsPerPageOption[] | undefined = this.sanitizedFooterProps.itemsPerPageOptions\n\n      if (\n        itemsPerPageOptions &&\n        !itemsPerPageOptions.find(item => typeof item === 'number' ? item === itemsPerPage : item.value === itemsPerPage)\n      ) {\n        const firstOption = itemsPerPageOptions[0]\n        return typeof firstOption === 'object' ? firstOption.value : firstOption\n      }\n\n      return itemsPerPage\n    },\n  },\n\n  created () {\n    const breakingProps = [\n      ['sort-icon', 'header-props.sort-icon'],\n      ['hide-headers', 'hide-default-header'],\n      ['select-all', 'show-select'],\n    ]\n\n    /* istanbul ignore next */\n    breakingProps.forEach(([original, replacement]) => {\n      if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n    })\n  },\n\n  mounted () {\n    // if ((!this.sortBy || !this.sortBy.length) && (!this.options.sortBy || !this.options.sortBy.length)) {\n    //   const firstSortable = this.headers.find(h => !('sortable' in h) || !!h.sortable)\n    //   if (firstSortable) this.updateOptions({ sortBy: [firstSortable.value], sortDesc: [false] })\n    // }\n\n    if (this.calculateWidths) {\n      window.addEventListener('resize', this.calcWidths)\n      this.calcWidths()\n    }\n  },\n\n  beforeDestroy () {\n    if (this.calculateWidths) {\n      window.removeEventListener('resize', this.calcWidths)\n    }\n  },\n\n  methods: {\n    calcWidths () {\n      this.widths = Array.from(this.$el.querySelectorAll('th')).map(e => e.clientWidth)\n    },\n    customFilterWithColumns (items: any[], search: string) {\n      return searchTableItems(items, search, this.headersWithCustomFilters, this.headersWithoutCustomFilters, this.customFilter)\n    },\n    customSortWithHeaders (items: any[], sortBy: string[], sortDesc: boolean[], locale: string) {\n      return this.customSort(items, sortBy, sortDesc, locale, this.columnSorters)\n    },\n    createItemProps (item: any): DataTableItemProps {\n      const props = VDataIterator.options.methods.createItemProps.call(this, item)\n\n      return Object.assign(props, { headers: this.computedHeaders })\n    },\n    genCaption (props: DataScopeProps) {\n      if (this.caption) return [this.$createElement('caption', [this.caption])]\n\n      return getSlot(this, 'caption', props, true)\n    },\n    genColgroup (props: DataScopeProps) {\n      return this.$createElement('colgroup', this.computedHeaders.map(header => {\n        return this.$createElement('col', {\n          class: {\n            divider: header.divider,\n          },\n        })\n      }))\n    },\n    genLoading () {\n      const th = this.$createElement('th', {\n        staticClass: 'column',\n        attrs: this.colspanAttrs,\n      }, [this.genProgress()])\n\n      const tr = this.$createElement('tr', {\n        staticClass: 'v-data-table__progress',\n      }, [th])\n\n      return this.$createElement('thead', [tr])\n    },\n    genHeaders (props: DataScopeProps) {\n      const data = {\n        props: {\n          ...this.sanitizedHeaderProps,\n          headers: this.computedHeaders,\n          options: props.options,\n          mobile: this.isMobile,\n          showGroupBy: this.showGroupBy,\n          someItems: this.someItems,\n          everyItem: this.everyItem,\n          singleSelect: this.singleSelect,\n          disableSort: this.disableSort,\n        },\n        on: {\n          sort: props.sort,\n          group: props.group,\n          'toggle-select-all': this.toggleSelectAll,\n        },\n      }\n\n      const children: VNodeChildrenArrayContents = [getSlot(this, 'header', data)]\n\n      if (!this.hideDefaultHeader) {\n        const scopedSlots = getPrefixedScopedSlots('header.', this.$scopedSlots)\n        children.push(this.$createElement(VDataTableHeader, {\n          ...data,\n          scopedSlots,\n        }))\n      }\n\n      if (this.loading) children.push(this.genLoading())\n\n      return children\n    },\n    genEmptyWrapper (content: VNodeChildrenArrayContents) {\n      return this.$createElement('tr', {\n        staticClass: 'v-data-table__empty-wrapper',\n      }, [\n        this.$createElement('td', {\n          attrs: this.colspanAttrs,\n        }, content),\n      ])\n    },\n    genItems (items: any[], props: DataScopeProps) {\n      const empty = this.genEmpty(props.originalItemsLength, props.pagination.itemsLength)\n      if (empty) return [empty]\n\n      return props.groupedItems\n        ? this.genGroupedRows(props.groupedItems, props)\n        : this.genRows(items, props)\n    },\n    genGroupedRows (groupedItems: ItemGroup<any>[], props: DataScopeProps) {\n      return groupedItems.map(group => {\n        if (!this.openCache.hasOwnProperty(group.name)) this.$set(this.openCache, group.name, true)\n\n        if (this.$scopedSlots.group) {\n          return this.$scopedSlots.group({\n            group: group.name,\n            options: props.options,\n            items: group.items,\n            headers: this.computedHeaders,\n          })\n        } else {\n          return this.genDefaultGroupedRow(group.name, group.items, props)\n        }\n      })\n    },\n    genDefaultGroupedRow (group: string, items: any[], props: DataScopeProps) {\n      const isOpen = !!this.openCache[group]\n      const children: VNodeChildren = [\n        this.$createElement('template', { slot: 'row.content' }, this.genRows(items, props)),\n      ]\n      const toggleFn = () => this.$set(this.openCache, group, !this.openCache[group])\n      const removeFn = () => props.updateOptions({ groupBy: [], groupDesc: [] })\n\n      if (this.$scopedSlots['group.header']) {\n        children.unshift(this.$createElement('template', { slot: 'column.header' }, [\n          this.$scopedSlots['group.header']!({ group, groupBy: props.options.groupBy, items, headers: this.computedHeaders, isOpen, toggle: toggleFn, remove: removeFn }),\n        ]))\n      } else {\n        const toggle = this.$createElement(VBtn, {\n          staticClass: 'ma-0',\n          props: {\n            icon: true,\n            small: true,\n          },\n          on: {\n            click: toggleFn,\n          },\n        }, [this.$createElement(VIcon, [isOpen ? '$minus' : '$plus'])])\n\n        const remove = this.$createElement(VBtn, {\n          staticClass: 'ma-0',\n          props: {\n            icon: true,\n            small: true,\n          },\n          on: {\n            click: removeFn,\n          },\n        }, [this.$createElement(VIcon, ['$close'])])\n\n        const column = this.$createElement('td', {\n          staticClass: 'text-start',\n          attrs: this.colspanAttrs,\n        }, [toggle, `${props.options.groupBy[0]}: ${group}`, remove])\n\n        children.unshift(this.$createElement('template', { slot: 'column.header' }, [column]))\n      }\n\n      if (this.$scopedSlots['group.summary']) {\n        children.push(this.$createElement('template', { slot: 'column.summary' }, [\n          this.$scopedSlots['group.summary']!({ group, groupBy: props.options.groupBy, items, headers: this.computedHeaders, isOpen, toggle: toggleFn }),\n        ]))\n      }\n\n      return this.$createElement(RowGroup, {\n        key: group,\n        props: {\n          value: isOpen,\n        },\n      }, children)\n    },\n    genRows (items: any[], props: DataScopeProps) {\n      return this.$scopedSlots.item ? this.genScopedRows(items, props) : this.genDefaultRows(items, props)\n    },\n    genScopedRows (items: any[], props: DataScopeProps) {\n      const rows = []\n\n      for (let i = 0; i < items.length; i++) {\n        const item = items[i]\n        rows.push(this.$scopedSlots.item!({\n          ...this.createItemProps(item),\n          index: i,\n        }))\n\n        if (this.isExpanded(item)) {\n          rows.push(this.$scopedSlots['expanded-item']!({ item, headers: this.computedHeaders }))\n        }\n      }\n\n      return rows\n    },\n    genDefaultRows (items: any[], props: DataScopeProps) {\n      return this.$scopedSlots['expanded-item']\n        ? items.map(item => this.genDefaultExpandedRow(item))\n        : items.map(item => this.genDefaultSimpleRow(item))\n    },\n    genDefaultExpandedRow (item: any): VNode {\n      const isExpanded = this.isExpanded(item)\n      const classes = {\n        'v-data-table__expanded v-data-table__expanded__row': isExpanded,\n      }\n      const headerRow = this.genDefaultSimpleRow(item, classes)\n      const expandedRow = this.$createElement('tr', {\n        staticClass: 'v-data-table__expanded v-data-table__expanded__content',\n      }, [this.$scopedSlots['expanded-item']!({ item, headers: this.computedHeaders })])\n\n      return this.$createElement(RowGroup, {\n        props: {\n          value: isExpanded,\n        },\n      }, [\n        this.$createElement('template', { slot: 'row.header' }, [headerRow]),\n        this.$createElement('template', { slot: 'row.content' }, [expandedRow]),\n      ])\n    },\n    genDefaultSimpleRow (item: any, classes: Record<string, boolean> = {}): VNode {\n      const scopedSlots = getPrefixedScopedSlots('item.', this.$scopedSlots)\n\n      const data = this.createItemProps(item)\n\n      if (this.showSelect) {\n        const slot = scopedSlots['data-table-select']\n        scopedSlots['data-table-select'] = slot ? () => slot(data) : () => this.$createElement(VSimpleCheckbox, {\n          staticClass: 'v-data-table__checkbox',\n          props: {\n            value: data.isSelected,\n            disabled: !this.isSelectable(item),\n          },\n          on: {\n            input: (val: boolean) => data.select(val),\n          },\n        })\n      }\n\n      if (this.showExpand) {\n        const slot = scopedSlots['data-table-expand']\n        scopedSlots['data-table-expand'] = slot ? () => slot(data) : () => this.$createElement(VIcon, {\n          staticClass: 'v-data-table__expand-icon',\n          class: {\n            'v-data-table__expand-icon--active': data.isExpanded,\n          },\n          on: {\n            click: (e: MouseEvent) => {\n              e.stopPropagation()\n              data.expand(!data.isExpanded)\n            },\n          },\n        }, [this.expandIcon])\n      }\n\n      return this.$createElement(this.isMobile ? MobileRow : Row, {\n        key: getObjectValueByPath(item, this.itemKey),\n        class: mergeClasses(\n          { ...classes, 'v-data-table__selected': data.isSelected },\n          getPropertyFromItem(item, this.itemClass)\n        ),\n        props: {\n          headers: this.computedHeaders,\n          hideDefaultHeader: this.hideDefaultHeader,\n          item,\n          rtl: this.$vuetify.rtl,\n        },\n        scopedSlots,\n        on: {\n          // TODO: for click, the first argument should be the event, and the second argument should be data,\n          // but this is a breaking change so it's for v3\n          click: () => this.$emit('click:row', item, data),\n          contextmenu: (event: MouseEvent) => this.$emit('contextmenu:row', event, data),\n          dblclick: (event: MouseEvent) => this.$emit('dblclick:row', event, data),\n        },\n      })\n    },\n    genBody (props: DataScopeProps): VNode | string | VNodeChildren {\n      const data = {\n        ...props,\n        expand: this.expand,\n        headers: this.computedHeaders,\n        isExpanded: this.isExpanded,\n        isMobile: this.isMobile,\n        isSelected: this.isSelected,\n        select: this.select,\n      }\n\n      if (this.$scopedSlots.body) {\n        return this.$scopedSlots.body!(data)\n      }\n\n      return this.$createElement('tbody', [\n        getSlot(this, 'body.prepend', data, true),\n        this.genItems(props.items, props),\n        getSlot(this, 'body.append', data, true),\n      ])\n    },\n    genFooters (props: DataScopeProps) {\n      const data = {\n        props: {\n          options: props.options,\n          pagination: props.pagination,\n          itemsPerPageText: '$vuetify.dataTable.itemsPerPageText',\n          ...this.sanitizedFooterProps,\n        },\n        on: {\n          'update:options': (value: any) => props.updateOptions(value),\n        },\n        widths: this.widths,\n        headers: this.computedHeaders,\n      }\n\n      const children: VNodeChildren = [\n        getSlot(this, 'footer', data, true),\n      ]\n\n      if (!this.hideDefaultFooter) {\n        children.push(this.$createElement(VDataFooter, {\n          ...data,\n          scopedSlots: getPrefixedScopedSlots('footer.', this.$scopedSlots),\n        }))\n      }\n\n      return children\n    },\n    genDefaultScopedSlot (props: DataScopeProps): VNode {\n      const simpleProps = {\n        height: this.height,\n        fixedHeader: this.fixedHeader,\n        dense: this.dense,\n      }\n\n      // if (this.virtualRows) {\n      //   return this.$createElement(VVirtualTable, {\n      //     props: Object.assign(simpleProps, {\n      //       items: props.items,\n      //       height: this.height,\n      //       rowHeight: this.dense ? 24 : 48,\n      //       headerHeight: this.dense ? 32 : 48,\n      //       // TODO: expose rest of props from virtual table?\n      //     }),\n      //     scopedSlots: {\n      //       items: ({ items }) => this.genItems(items, props) as any,\n      //     },\n      //   }, [\n      //     this.proxySlot('body.before', [this.genCaption(props), this.genHeaders(props)]),\n      //     this.proxySlot('bottom', this.genFooters(props)),\n      //   ])\n      // }\n\n      return this.$createElement(VSimpleTable, {\n        props: simpleProps,\n      }, [\n        this.proxySlot('top', getSlot(this, 'top', props, true)),\n        this.genCaption(props),\n        this.genColgroup(props),\n        this.genHeaders(props),\n        this.genBody(props),\n        this.proxySlot('bottom', this.genFooters(props)),\n      ])\n    },\n    proxySlot (slot: string, content: VNodeChildren) {\n      return this.$createElement('template', { slot }, content)\n    },\n  },\n\n  render (): VNode {\n    return this.$createElement(VData, {\n      props: {\n        ...this.$props,\n        customFilter: this.customFilterWithColumns,\n        customSort: this.customSortWithHeaders,\n        itemsPerPage: this.computedItemsPerPage,\n      },\n      on: {\n        'update:options': (v: DataOptions, old: DataOptions) => {\n          this.internalGroupBy = v.groupBy || []\n          !deepEqual(v, old) && this.$emit('update:options', v)\n        },\n        'update:page': (v: number) => this.$emit('update:page', v),\n        'update:items-per-page': (v: number) => this.$emit('update:items-per-page', v),\n        'update:sort-by': (v: string | string[]) => this.$emit('update:sort-by', v),\n        'update:sort-desc': (v: boolean | boolean[]) => this.$emit('update:sort-desc', v),\n        'update:group-by': (v: string | string[]) => this.$emit('update:group-by', v),\n        'update:group-desc': (v: boolean | boolean[]) => this.$emit('update:group-desc', v),\n        pagination: (v: DataPagination, old: DataPagination) => !deepEqual(v, old) && this.$emit('pagination', v),\n        'current-items': (v: any[]) => {\n          this.internalCurrentItems = v\n          this.$emit('current-items', v)\n        },\n        'page-count': (v: number) => this.$emit('page-count', v),\n      },\n      scopedSlots: {\n        default: this.genDefaultScopedSlot as any,\n      },\n    })\n  },\n})\n","import { render, staticRenderFns } from \"./AttributeTable.vue?vue&type=template&id=6b1b8591&scoped=true&\"\nimport script from \"./AttributeTable.vue?vue&type=script&lang=js&\"\nexport * from \"./AttributeTable.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AttributeTable.vue?vue&type=style&index=0&id=6b1b8591&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6b1b8591\",\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCombobox } from 'vuetify/lib/components/VCombobox';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VCombobox,VDataTable,VIcon,VSpacer,VTextField})\n","/**\n * Override leaflet WMS for custom get feature info\n */\nimport L from \"leaflet\"\nimport WMS from \"leaflet-wms/leaflet.wms.js\"\n\nvar WmsSource = WMS.Source.extend({\n  identify: function(evt) {\n    if (this.options[\"activeTool\"]() == \"identify\") {\n      // Identify map features in response to map clicks. To customize this\n      // behavior, create a class extending wms.Source and override one or\n      // more of the following hook functions.\n\n      var layers = this.getIdentifyLayers()\n      if (!layers.length) {\n        return\n      }\n      this.getFeatureInfo(evt.containerPoint, evt.latlng, layers, this.showFeatureInfo)\n    }\n  },\n  // Overridden to avoid custom methods to be leaked into the URL\n  createOverlay: function(untiled) {\n    // Create overlay with all options other than untiled & identify\n    var overlayOptions = {}\n    for (var opt in this.options) {\n      if (\n        opt != \"untiled\" &&\n        opt != \"identify\" &&\n        // Added:\n        opt != \"activeTool\" &&\n        opt != \"onGetFeatureInfo\" &&\n        opt != \"onGetFeatureInfoStarted\" &&\n        opt != \"onGetFeatureInfoParamsEnded\" &&\n        opt != \"onError\"\n      ) {\n        overlayOptions[opt] = this.options[opt]\n      }\n    }\n    if (untiled) {\n      return WMS.overlay(this._url, overlayOptions)\n    } else {\n      return WMS.tileLayer(this._url, overlayOptions)\n    }\n  },\n  getFeatureInfo: function(point, latlng, layers, callback) {\n    // Request WMS GetFeatureInfo and call callback with results\n    // (split from identify() to faciliate use outside of map events)\n    var params = this.getFeatureInfoParams(point, layers),\n      url = this._url + L.Util.getParamString(params, this._url)\n\n    this.showWaiting()\n    this.ajax(url, done)\n\n    function done(result) {\n      this.hideWaiting()\n      var text = this.parseFeatureInfo(result, url)\n      callback.call(this, latlng, text)\n    }\n  },\n  showFeatureInfo: function(latlng, info) {\n    try {\n      this.options[\"onGetFeatureInfo\"](latlng, info)\n    } catch (error) {\n      this.options[\"onError\"](error)\n    }\n  },\n  showWaiting: function() {\n    try {\n      this.options[\"onGetFeatureInfoStarted\"]()\n    } catch (error) {\n      // do nothing\n    }\n  },\n  // Overridden to set info_format to json\n  getFeatureInfoParams: function(point, layers) {\n    // Hook to generate parameters for WMS service GetFeatureInfo request\n    var wmsParams, overlay\n    if (this.options.untiled) {\n      // Use existing overlay\n      wmsParams = this._overlay.wmsParams\n    } else {\n      // Create overlay instance to leverage updateWmsParams\n      overlay = this.createOverlay(true)\n      overlay.updateWmsParams(this._map)\n      wmsParams = overlay.wmsParams\n      wmsParams.layers = layers.join(\",\")\n    }\n    var infoParams = {\n      request: \"GetFeatureInfo\",\n      query_layers: layers.join(\",\"),\n      X: Math.round(point.x),\n      Y: Math.round(point.y),\n      info_format: \"application/json\",\n      WITH_GEOMETRY: 1,\n    }\n    let result = L.extend({}, wmsParams, infoParams)\n    try {\n      result = this.options[\"onGetFeatureInfoParamsEnded\"](result)\n    } catch (error) {\n      // Do nothing\n    }\n    return result\n  },\n})\n\nexport default {\n  source(url, options) {\n    return new WmsSource(url, options)\n  },\n}\n","<template>\n  <v-app id=\"project\">\n    <v-overlay light v-if=\"status == `loading` && error.length == 0\">\n      <v-progress-circular\n        indeterminate\n        color=\"lime\"\n        size=\"64\"\n      ></v-progress-circular>\n    </v-overlay>\n    <Error v-if=\"error.length > 0\" :error=\"error\" />\n    <template v-else>\n      <v-app-bar app dense collapse-on-scroll clipped-left color=\"green\" dark>\n        <v-app-bar-nav-icon\n          @click.stop=\"expandedSidebar = !expandedSidebar\"\n        ></v-app-bar-nav-icon>\n        <v-toolbar-title v-if=\"project\">{{ project.title }}</v-toolbar-title>\n        <v-spacer></v-spacer>\n        <v-btn icon title=\"Home Page\" to=\"/\">\n          <v-icon>mdi-home-circle</v-icon>\n        </v-btn>\n      </v-app-bar>\n      <LeftSidebar\n        :map=\"map\"\n        :project=\"project\"\n        :drawer=\"expandedSidebar\"\n        :showIdentify=\"showIdentify\"\n        v-on:setLayerVisibility=\"setLayerVisibility\"\n      />\n      <v-main :class=\"attributeTableTypename ? `show-table` : ''\">\n        <v-container\n          id=\"map\"\n          :class=\"`fill-height activetool-` + activeTool\"\n          fluid\n        >\n          <v-layout>\n            <l-map\n              ref=\"map\"\n              v-resize=\"onResize\"\n              @ready=\"setMap\"\n              style=\"z-index: 0\"\n            >\n              <l-tile-layer\n                :visible=\"baseMap == 'openstreetmap'\"\n                url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n                v-if=\"\n                  project &&\n                  project.capabilities.wmsOutputCrsList.includes('EPSG:3857')\n                \"\n                attribution=\"&copy; &lt;a href='https://www.openstreetmap.org/copyright'&gt;OpenStreetMap&lt;/a&gt; contributors\"\n              ></l-tile-layer>\n            </l-map>\n          </v-layout>\n        </v-container>\n      </v-main>\n\n      <AttributeTable\n        :class=\"expandedSidebar ? 'mb-4 attributetable-small' : 'mb-4'\"\n        v-if=\"attributeTableTypename\"\n        :project=\"project\"\n        :map=\"this.map\"\n      />\n\n      <MapToolbar class=\"map-toolbar\" :map=\"map\" :project=\"project\" />\n\n      <v-footer color=\"lime\" app>\n        Hand crafted with\n        <v-icon color=\"red\">mdi-heart</v-icon>by\n        <a href=\"https://www.qcooperative.net\" target=\"_blank\">QCooperative</a>\n      </v-footer>\n    </template>\n  </v-app>\n</template>\n\n<script>\nimport MapToolbar from \"@/components/MapToolbar.vue\";\nimport LeftSidebar from \"@/components/LeftSidebar.vue\";\nimport AttributeTable from \"@/components/AttributeTable.vue\";\nimport Error from \"@/components/Error.vue\";\nimport { LMap, LTileLayer } from \"vue2-leaflet\";\nimport WmsSource from \"@/js/WmsSource.js\";\nimport \"leaflet/dist/leaflet.css\";\nimport { latLng, Polygon } from \"leaflet\";\nimport L from \"leaflet\";\nimport Utils from \"@/js/Utils.js\";\n\n// Patch for https://github.com/Leaflet/Leaflet/issues/4968#issuecomment-269750768\ndelete L.Icon.Default.prototype._getIconUrl;\n\nL.Icon.Default.mergeOptions({\n  iconRetinaUrl: require(\"leaflet/dist/images/marker-icon-2x.png\"),\n  iconUrl: require(\"leaflet/dist/images/marker-icon.png\"),\n  shadowUrl: require(\"leaflet/dist/images/marker-shadow.png\"),\n});\n// end patch\n\nL.Control.include({\n  _refocusOnMap: L.Util.falseFn, // Do nothing.\n});\n\nexport default {\n  name: \"WebGis\",\n  props: { projectId: String },\n  components: {\n    LMap,\n    LTileLayer,\n    MapToolbar,\n    Error,\n    LeftSidebar,\n    AttributeTable,\n  },\n  data: function () {\n    return {\n      map: {},\n      wms_source: {},\n      expandedSidebar: false,\n      // Whether the identify tab must be automatically shown\n      showIdentify: false,\n    };\n  },\n  computed: {\n    project() {\n      return this.$store.state.projects[this.projectId];\n    },\n    attributeTableTypename() {\n      return this.$store.state.attributeTableTypename;\n    },\n    toc() {\n      return this.$store.state.tocs[this.projectId];\n    },\n    status() {\n      return this.$store.state.status;\n    },\n    error() {\n      let error = this.$store.state.error;\n      this.$store.commit(\"clearError\");\n      return error;\n    },\n    activeTool() {\n      return this.$store.state.activeTool;\n    },\n    baseMap() {\n      return this.$store.state.baseMap;\n    },\n  },\n  watch: {\n    project() {\n      this.initializeMap();\n    },\n    toc() {\n      this.initializeToc();\n    },\n  },\n  mounted() {\n    this.$store.commit(\"clearAttributeTableTypename\");\n    this.$store.dispatch(\"setStatus\", `loading`);\n\n    if (!this.project) {\n      this.$store.dispatch(\"getProject\", this.projectId);\n    } else {\n      //console.log(\"Project already loaded ...\");\n      this.setMap(this.$refs[\"map\"].mapObject);\n      this.initializeMap();\n    }\n  },\n  methods: {\n    setMap() {\n      this.map = this.$refs[\"map\"].mapObject;\n    },\n    /**\n     * Called when project has been fetched\n     */\n    initializeMap() {\n      //console.log(`Initializing map for project ${this.project.id}`);\n      if (!this.project.toc) {\n        //console.log(`initializeMap error: no project toc!`);\n      }\n      this.loadMap(this.project);\n      Object.values(this.getOrderedLayerTypenames()).forEach((typename) => {\n        if (!this.project.toc) {\n          //console.log(`Loading layer ${title} failed: no toc!`);\n        }\n        let node = this.findLayerNodeByTypename(\n          typename,\n          this.project.toc.children\n        );\n        if (node && node.visible) {\n          //console.log(`Loading layer ${typename}`);\n          this.wms_source._subLayers[node.typename] = this.wms_source.getLayer(\n            node.typename\n          );\n        } else if (!node) {\n          console.log(`Could not find layer node: ${typename}`);\n        } else if (!node.visible) {\n          //console.log(`Not loading layer (not visible): ${typename}`);\n        }\n      });\n      console.log(this.wms_source._subLayers);\n      this.wms_source.refreshOverlay();\n\n      // Fetch TOC\n      if (!this.toc) {\n        let layers = Utils.getAllLayers(this.project);\n        this.$store.dispatch(\"getToc\", { projectId: this.projectId, layers });\n      }\n\n      this.$nextTick(() => {\n        this.map.zoomControl.remove();\n      });\n      this.$store.dispatch(\"setStatus\", `project`);\n    },\n    onResize() {\n      this.$refs[\"map\"].mapObject._onResize();\n    },\n    /**\n     * Called when TOC was fetched\n     */\n    initializeToc() {\n      this.toc.nodes.forEach((layer) => {\n        let node = this.findLayerNode(layer.title, this.project.toc.children);\n        if (node) {\n          if (layer.icon) {\n            node.children.push(layer);\n          } else {\n            layer.symbols.forEach((symbol) => node.children.push(symbol));\n          }\n        }\n      });\n    },\n    /**\n     * Toggles a layer by typename\n     */\n    setLayerVisibility(typename, visible) {\n      if (typename in this.wms_source._subLayers && !visible) {\n        //console.log(`Removing layer: ${typename}`);\n        this.wms_source.removeSubLayer(typename);\n      } else if (visible && !(typename in this.wms_source._subLayers)) {\n        // We need to respect drawing order!\n        this.wms_source._subLayers[typename] = this.wms_source.getLayer(\n          typename\n        );\n        let new_sub_layers = {};\n        for (const _type_name of this.getOrderedLayerTypenames()) {\n          if (_type_name in this.wms_source._subLayers) {\n            //console.log(`Adding layer: ${typename}`);\n            new_sub_layers[_type_name] = this.wms_source._subLayers[_type_name];\n          }\n        }\n        this.wms_source._subLayers = new_sub_layers;\n        this.wms_source.refreshOverlay();\n      } else {\n        console.log(`Nothing to do for: ${typename} - ${visible}`);\n      }\n    },\n    /**\n     * Find a layer by title\n     */\n    findLayerNode(title, children) {\n      if (children) {\n        for (let i = 0; i < children.length; ++i) {\n          if (children[i].title == title) {\n            return children[i];\n          }\n          let res = this.findLayerNode(title, children[i].children);\n          if (res) {\n            return res;\n          }\n        }\n      }\n    },\n    /**\n     * Find a layer by typename\n     */\n    findLayerNodeByTypename(typename, children) {\n      if (children) {\n        for (let i = 0; i < children.length; ++i) {\n          if (children[i].typename == typename) {\n            return children[i];\n          }\n          let res = this.findLayerNode(typename, children[i].children);\n          if (res) {\n            return res;\n          }\n        }\n      }\n    },\n    /**\n     * Loads map\n     */\n    loadMap(project) {\n      let west = project.geographic_extent[0];\n      let south = project.geographic_extent[1];\n      let east = project.geographic_extent[2];\n      let north = project.geographic_extent[3];\n      if (project.initial_extent) {\n        west = project.initial_extent[0];\n        south = project.initial_extent[1];\n        east = project.initial_extent[2];\n        north = project.initial_extent[3];\n      }\n      let p1 = new latLng(south, west);\n      let p2 = new latLng(north, west);\n      let p3 = new latLng(north, east);\n      let p4 = new latLng(south, east);\n      let polygonPoints = [p1, p2, p3, p4];\n      let jl = new Polygon(polygonPoints, { fill: false }); // Don't: .addTo(this.map);\n      this.map.setView(jl.getBounds().getCenter());\n      if (\n        jl.getBounds().getEast() != jl.getBounds().getWest() &&\n        jl.getBounds().getNorth() != jl.getBounds().getSouth()\n      ) {\n        this.map.fitBounds(jl.getBounds());\n      }\n      let that = this;\n      this.wms_source = WmsSource.source(`/project/` + project.id + `/?`, {\n        tileSize: 512,\n        transparent: true,\n        format: \"image/png\",\n        dpi: window.devicePixelRatio * 96,\n        onGetFeatureInfo: this.onGetFeatureInfo,\n        onGetFeatureInfoStarted: this.onGetFeatureInfoStarted,\n        onGetFeatureInfoParamsEnded: this.onGetFeatureInfoParamsEnded,\n        onError: this.onError,\n        activeTool() {\n          return that.activeTool;\n        },\n      }).addTo(this.map);\n\n      // Add an highlight layer to the map\n      let highlightLayer = L.geoJson(\n        { features: [] },\n        {\n          style: function (/* feature */) {\n            return {\n              weight: 2,\n              opacity: 1,\n              color: \"yellow\",\n            };\n          },\n          onEachFeature: function (feature, layer) {\n            layer.on({\n              mouseover: function (e) {\n                console.log(e.target, feature);\n              },\n              mouseout: function (e) {\n                console.log(e.target);\n              },\n              click: function (e) {\n                console.log(e.target);\n              },\n            });\n          },\n        }\n      ).addTo(this.map);\n      this.map.highlightLayer = highlightLayer;\n\n      // For debugging and development: add llmap to window\n      window.llmap = this.map;\n    },\n    /**\n     * GFI results\n     */\n    onGetFeatureInfo(latLng, info) {\n      this.$store.commit(\"setIdentifyResults\", {\n        identifyResults: JSON.parse(info),\n      });\n    },\n    /**\n     * GFI start: show sidebar and results tab\n     */\n    onGetFeatureInfoStarted() {\n      this.map.highlightLayer.clearLayers();\n      if (this.$store.state.activeTool == \"identify\") {\n        this.showIdentify = true;\n        this.$store.commit(\"clearIdentifyResults\");\n        this.expandedSidebar = true;\n      } else {\n        this.showIdentify = false;\n      }\n    },\n    /**\n     * Called to exclude layers not queryable\n     */\n    onGetFeatureInfoParamsEnded(result) {\n      //console.log(result);\n      let query_layers = result.query_layers.split(\",\");\n      let queryable = [];\n      for (let i = 0; i < query_layers.length; ++i) {\n        if (\n          this.project.wms_layers_queryable.includes(\n            this.project.wms_layers_typename_id_map[query_layers[i]]\n          )\n        ) {\n          queryable.push(query_layers[i]);\n        }\n      }\n      result.query_layers = queryable;\n      return result;\n    },\n    /**\n     * Error handler for the map source WMS layer\n     */\n    onError(error) {\n      console.log(\"Error:\", error);\n      this.$store.commit(\"setError\", error.message);\n    },\n    /**\n     * Convenience: return ordered list of layer typenames from the toc\n     * the order is reversed, because of WMS drawing order\n     */\n    getOrderedLayerTypenames() {\n      let _getLayers = (parent, layerList) => {\n        if (parent.is_layer) {\n          layerList.push(parent.typename);\n        } else {\n          for (let i = 0; i < parent.children.length; ++i) {\n            _getLayers(parent.children[i], layerList);\n          }\n        }\n      };\n      let layerList = [];\n      _getLayers(this.project.toc, layerList);\n      //console.log(layerList)\n      return layerList.reverse();\n    },\n  },\n};\n</script>\n\n<style scoped>\n#wrapper {\n  height: 100%;\n}\n\n.alert-danger {\n  position: absolute;\n  top: 4em;\n  margin: 0 8em;\n  z-index: 10000;\n}\n\n#map {\n  padding: 0;\n}\n\n#map.activetool-identify .leaflet-grab {\n  cursor: pointer !important;\n}\n\n.v-main.show-table {\n  padding-bottom: 0 !important;\n}\n.map-toolbar {\n  position: fixed;\n  top: 90px;\n  right: 30px;\n}\n\n.leaflet-container {\n  background-color: white;\n}\n\n.attributetable-small {\n  margin-left: 300px;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebGis.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebGis.vue?vue&type=script&lang=js&\"","// Components\nimport VIcon from '../VIcon'\nimport VBtn from '../VBtn/VBtn'\n\n// Types\nimport Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n  name: 'v-app-bar-nav-icon',\n\n  functional: true,\n\n  render (h, { slots, listeners, props, data }) {\n    const d = Object.assign(data, {\n      staticClass: (`v-app-bar__nav-icon ${data.staticClass || ''}`).trim(),\n      props: {\n        ...props,\n        icon: true,\n      },\n      on: listeners,\n    })\n\n    const defaultSlot = slots().default\n\n    return h(VBtn, d, defaultSlot || [h(VIcon, '$menu')])\n  },\n})\n","import { render, staticRenderFns } from \"./WebGis.vue?vue&type=template&id=9be950ce&scoped=true&\"\nimport script from \"./WebGis.vue?vue&type=script&lang=js&\"\nexport * from \"./WebGis.vue?vue&type=script&lang=js&\"\nimport style0 from \"./WebGis.vue?vue&type=style&index=0&id=9be950ce&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"9be950ce\",\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VAppBarNavIcon } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VFooter } from 'vuetify/lib/components/VFooter';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VMain } from 'vuetify/lib/components/VMain';\nimport { VOverlay } from 'vuetify/lib/components/VOverlay';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VApp,VAppBar,VAppBarNavIcon,VBtn,VContainer,VFooter,VIcon,VLayout,VMain,VOverlay,VProgressCircular,VSpacer,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nmodule.exports = function installDirectives (component, directives) {\n  var options = typeof component.exports === 'function'\n    ? component.exports.extendOptions\n    : component.options\n\n  if (typeof component.exports === 'function') {\n    options.directives = component.exports.options.directives\n  }\n\n  options.directives = options.directives || {}\n\n  for (var i in directives) {\n    options.directives[i] = options.directives[i] || directives[i]\n  }\n}\n","var $ = require('../internals/export');\nvar is = require('../internals/same-value');\n\n// `Object.is` method\n// https://tc39.github.io/ecma262/#sec-object.is\n$({ target: 'Object', stat: true }, {\n  is: is\n});\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTree.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTree.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebGis.vue?vue&type=style&index=0&id=9be950ce&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebGis.vue?vue&type=style&index=0&id=9be950ce&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapToolbar.vue?vue&type=style&index=1&id=2fb0ba75&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapToolbar.vue?vue&type=style&index=1&id=2fb0ba75&scoped=true&lang=scss&\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAABSCAMAAAAhFXfZAAAC91BMVEVMaXEzeak2f7I4g7g3g7cua5gzeKg8hJo3grY4g7c3grU0gLI2frE0daAubJc2gbQwd6QzeKk2gLMtd5sxdKIua5g1frA2f7IydaM0e6w2fq41fK01eqo3grgubJgta5cxdKI1f7AydaQydaMxc6EubJgvbJkwcZ4ubZkwcJwubZgubJcydqUydKIxapgubJctbJcubZcubJcvbJYubJcvbZkubJctbJctbZcubJg2f7AubJcrbZcubJcubJcua5g3grY0fq8ubJcubJdEkdEwhsw6i88vhswuhcsuhMtBjMgthMsrg8srgss6is8qgcs8i9A9iMYtg8spgcoogMo7hcMngMonf8olfso4gr8kfck5iM8jfMk4iM8he8k1fro7itAgesk2hs8eecgzfLcofssdeMg0hc4cd8g2hcsxeLQbdsgZdcgxeLImfcszhM0vda4xgckzhM4xg84wf8Yxgs4udKsvfcQucqhUndROmdM1fK0wcZ8vb5w0eqpQm9MzeKhXoNVcpdYydKNWn9VZotVKltJFjsIwcJ1Rms9OlslLmtH///8+kc9epdYzd6dbo9VHkMM2f7FHmNBClM8ydqVcpNY9hro3gLM9hLczealQmcw3fa46f7A8gLMxc6I3eagyc6FIldJMl9JSnNRSntNNl9JPnNJFi75UnM9ZodVKksg8kM45jc09e6ZHltFBk883gbRBh7pDk9EwcaBzn784g7dKkcY2i81Om9M7j85Llc81is09g7Q4grY/j9A0eqxKmdFFltBEjcXf6fFImdBCiLxJl9FGlNFBi78yiMxVndEvbpo6js74+vx+psPP3+o/ks5HkcpGmNCjwdZCkNDM3ehYoNJEls+lxNkxh8xHks0+jdC1zd5Lg6r+/v/H2ufz9/o3jM3t8/edvdM/k89Th61OiLBSjbZklbaTt9BfptdjmL1AicBHj8hGk9FAgK1dkLNTjLRekrdClc/k7fM0icy0y9tgp9c4jc2NtM9Dlc8zicxeXZn3AAAAQ3RSTlMAHDdTb4yPA+LtnEQmC4L2EmHqB7XA0d0sr478x4/Yd5i1zOfyPkf1sLVq4Nh3FvjxopQ2/STNuFzUwFIwxKaejILpIBEV9wAABhVJREFUeF6s1NdyFEcYBeBeoQIhRAkLlRDGrhIgY3BJL8CVeKzuyXFzzjkn5ZxzzuScg3PO8cKzu70JkO0LfxdTU//pM9vTu7Xgf6KqOVTb9X7toRrVEfBf1HTVjZccrT/2by1VV928Yty9ZbVuucdz90frG8DBjl9pVApbOstvmMuvVgaNXSfAAd6pGxpy6yxf5ph43pS/4f3uoaGm2rdu72S9xzOvMymkZFq/ptDrk90mhW7e4zl7HLzhxGWPR20xmSxJ/VqldG5m9XhaVOA1DadsNh3Pu5L2N6QtPO/32JpqQBVVk20oy/Pi2s23WEvyfHbe1thadVQttvm7Llf65gGmXK67XtupyoM7HQhmXdLS8oGWJNeOJ3C5fG5XCEJnkez3/oFdsvgJ4l2ANZwhrJKk/7OSXa+3Vw2WJMlKnGkobouYk6T0TyX30klOUnTD9HJ5qpckL3EW/w4XF3Xd0FGywXUrstrclVsqz5Pd/sXFYyDnPdrLcQODmGOK47IZb4CmibmMn+MYRzFZ5jg33ZL/EJrWcszHmANy3ARBK/IXtciJy8VsitPSdE3uuHxzougojcUdr8/32atnz/ev3f/K5wtpxUTpcaI45zusVDpYtZi+jg0oU9b3x74h7+n9ABvYEZeKaVq0sh0AtLKsFtqNBdeT0MrSzwwlq9+x6xAO4tgOtSzbCjrNQQiNvQUbUEubvzBUeGw26yDCsRHCoLkTHDa7IdOLIThs/gHvChszh2CimE8peRs47cxANI0lYNB5y1DljpOF0IhzBDPOZnDOqYYbeGKECbPzWnXludPphw5c2YBq5zlwXphIbO4VDCZ0gnPfUO1TwZoYwAs2ExPCedAu9DAjfQUjzITQb3jNj0KG2Sgt6BHaQUdYzWz+XmBktOHwanXjaSTcwwziBcuMOtwBmqPrTOxFQR/DRKKPqyur0aiW6cULYsx6tBm0jXpR/AUWR6HRq9WVW6MRhIq5jLyjbaCTDCijyYJNpCajdyobP/eTw0iexBAKkJ3gA5KcQb2zBXsIBckn+xVv8jkZSaEFHE+jFEleAEfayRU0MouNoBmB/L50Ai/HSLIHxcrpCvnhSQAuakKp2C/YbCylJjXRVy/z3+Kv/RrNcCo+WUzlVEhzKffnTQnxeN9fWF88fiNCUdSTsaufaChKWInHeysygfpIqagoakW+vV20J8uyl6TyNKEZWV4oRSPyCkWpgOLSbkCObT8o2r6tlG58HQquf6O0v50tB7JM7F4EORd2dx/K0w/KHsVkLPaoYrwgP/y7krr3SSMA4zj+OBgmjYkxcdIJQyQRKgg2viX9Hddi9UBb29LrKR7CVVEEEXWojUkXNyfTNDE14W9gbHJNuhjDettN3ZvbOvdOqCD3Jp/9l+/wJE+9PkYGjx/fqkys3S2rMozM/o2106rfMUINo6hVqz+eu/hd1c4xTg0TAfy5kV+4UG6+IthHTU9woWmxuKNbTfuCSfovBCxq7EtHqvYL4Sm6F8GVxsSXHMQ07TOi1DKtZxjWaaIyi4CXWjxPccUw8WVbMYY5wxC1mzEyXMJWkllpRloi+Kkoq69sxBTlElF6aAxYUbjXNlhlDZilDnM4U5SlN5biRsRHnbx3mbeWjEh4mEyiuJDl5XcWVmX5GvNkFgLWZM5qwsop4/AWfLhU1cR7k1VVvcYCWRkOI6Xy5gmnphCYIkvzuNYzHzosq2oNk2RtSs8khfUOfHIDgR6ysYBaMpl4uEgk2U/oJTs9AaTSwma7dT69geAE2ZpEjUsn2ieJNHeKfrI3EcAGJ2ZaNgVuC8EBctCLc57P5u5led6IOBkIYkuQMrmmjChs4VkfOerHqSBkPzZlhe06RslZ3zMjk2sscqKwY0RcjKK+LWbzd7KiHhkncs/siFJ+V5eXxD34B8nVuJEpGJNmxN2gH3vSvp7J70tF+D1Ej8qUJD1TkErAND2GZwTFg/LubvmgiBG3SOvdlsqFQrkEzJCL1rstlnVFROixZoDDSuXQFHESwVGlcuQcMb/b42NgjLowh5MTDFE3vNB5qStRIErdCQEh6pLPR92anSUb/wAIhldAaDMpGgAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=\"","'use strict';\n\nvar proj4 = require('proj4').hasOwnProperty('default') ? require('proj4').default : require('proj4');\n// Checks if `list` looks like a `[x, y]`.\nfunction isXY(list) {\n  return list.length >= 2 &&\n    typeof list[0] === 'number' &&\n    typeof list[1] === 'number';\n}\n\nfunction traverseCoords(coordinates, callback) {\n  if (isXY(coordinates)) return callback(coordinates);\n  return coordinates.map(function(coord){return traverseCoords(coord, callback);});\n}\n\n// Simplistic shallow clone that will work for a normal GeoJSON object.\nfunction clone(obj) {\n  if (null == obj || 'object' !== typeof obj) return obj;\n  var copy = obj.constructor();\n  for (var attr in obj) {\n    if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];\n  }\n  return copy;\n}\n\nfunction traverseGeoJson(geometryCb, nodeCb, geojson) {\n  if (geojson == null) return geojson;\n\n  var r = clone(geojson);\n  var self = traverseGeoJson.bind(this, geometryCb, nodeCb);\n\n  switch (geojson.type) {\n  case 'Feature':\n    r.geometry = self(geojson.geometry);\n    break;\n  case 'FeatureCollection':\n    r.features = r.features.map(self);\n    break;\n  case 'GeometryCollection':\n    r.geometries = r.geometries.map(self);\n    break;\n  default:\n    geometryCb(r);\n    break;\n  }\n\n  if (nodeCb) nodeCb(r);\n\n  return r;\n}\n\nfunction detectCrs(geojson, projs) {\n  var crsInfo = geojson.crs,\n      crs;\n\n  if (crsInfo === undefined) {\n    throw new Error('Unable to detect CRS, GeoJSON has no \"crs\" property.');\n  }\n\n  if (crsInfo.type === 'name') {\n    crs = projs[crsInfo.properties.name];\n  } else if (crsInfo.type === 'EPSG') {\n    crs = projs['EPSG:' + crsInfo.properties.code];\n  }\n\n  if (!crs) {\n    throw new Error('CRS defined in crs section could not be identified: ' + JSON.stringify(crsInfo));\n  }\n\n  return crs;\n}\n\nfunction determineCrs(crs, projs) {\n  if (typeof crs === 'string' || crs instanceof String) {\n    return projs[crs] || proj4.Proj(crs);\n  }\n\n  return crs;\n}\n\nfunction calcBbox(geojson) {\n  var min = [Number.MAX_VALUE, Number.MAX_VALUE],\n      max = [-Number.MAX_VALUE, -Number.MAX_VALUE];\n  traverseGeoJson(function(_gj) {\n    traverseCoords(_gj.coordinates, function(xy) {\n      min[0] = Math.min(min[0], xy[0]);\n      min[1] = Math.min(min[1], xy[1]);\n      max[0] = Math.max(max[0], xy[0]);\n      max[1] = Math.max(max[1], xy[1]);\n    });\n  }, null, geojson);\n  return [min[0], min[1], max[0], max[1]];\n}\n\nfunction reproject(geojson, from, to, projs) {\n  projs = projs || {};\n  if (!from) {\n    from = detectCrs(geojson, projs);\n  } else {\n    from = determineCrs(from, projs);\n  }\n\n  to = determineCrs(to, projs);\n  \n  var transformFunc = proj4(from, to).forward.bind(transformFunc);\n\n  function transform(coords) {\n    var transformed = transformFunc(coords);\n    if (coords.length === 3 && coords[2] !== undefined && transformed[2] === undefined) {\n      // If the projection doesn't explicitly handle Z coordinate, retain the old one.\n      transformed[2] = coords[2];\n    }\n    return transformed;\n  }\n\n  var transformGeometryCoords = function(gj) {\n    // No easy way to put correct CRS info into the GeoJSON,\n    // and definitely wrong to keep the old, so delete it.\n    if (gj.crs) {\n      delete gj.crs;\n    }\n    gj.coordinates = traverseCoords(gj.coordinates, transform);\n  }\n\n  var transformBbox = function(gj) {\n    if (gj.bbox) {\n      gj.bbox = calcBbox(gj);\n    }\n  }\n\n  return traverseGeoJson(transformGeometryCoords, transformBbox, geojson);\n}\n\nmodule.exports = {\n  detectCrs: detectCrs,\n\n  reproject: reproject,\n\n  reverse: function(geojson) {\n    return traverseGeoJson(function(gj) {\n      gj.coordinates = traverseCoords(gj.coordinates, function(xy) {\n        return [ xy[1], xy[0] ];\n      });\n    }, null, geojson);\n  },\n\n  toWgs84: function(geojson, from, projs) {\n    return reproject(geojson, from, proj4.WGS84, projs);\n  }\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {\n  return [\n    // `String.prototype.search` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.search\n    function search(regexp) {\n      var O = requireObjectCoercible(this);\n      var searcher = regexp == undefined ? undefined : regexp[SEARCH];\n      return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n    },\n    // `RegExp.prototype[@@search]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n    function (regexp) {\n      var res = maybeCallNative(nativeSearch, regexp, this);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n\n      var previousLastIndex = rx.lastIndex;\n      if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n      var result = regExpExec(rx, S);\n      if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n      return result === null ? -1 : result.index;\n    }\n  ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeEndsWith = ''.endsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n  var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n  return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = String(requireObjectCoercible(this));\n    notARegExp(searchString);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = toLength(that.length);\n    var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n    var search = String(searchString);\n    return nativeEndsWith\n      ? nativeEndsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});\n","export default function(defs) {\n  defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n  defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n  defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n  defs.WGS84 = defs['EPSG:4326'];\n  defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n  defs.GOOGLE = defs['EPSG:3857'];\n  defs['EPSG:900913'] = defs['EPSG:3857'];\n  defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n","export default {\n  ft: {to_meter: 0.3048},\n  'us-ft': {to_meter: 1200 / 3937}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n  if (obj[key]) {\n    return obj[key];\n  }\n  var keys = Object.keys(obj);\n  var lkey = key.toLowerCase().replace(ignoredChar, '');\n  var i = -1;\n  var testkey, processedKey;\n  while (++i < keys.length) {\n    testkey = keys[i];\n    processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n    if (processedKey === lkey) {\n      return obj[testkey];\n    }\n  }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n  var self = {};\n  var paramObj = defData.split('+').map(function(v) {\n    return v.trim();\n  }).filter(function(a) {\n    return a;\n  }).reduce(function(p, a) {\n    var split = a.split('=');\n    split.push(true);\n    p[split[0].toLowerCase()] = split[1];\n    return p;\n  }, {});\n  var paramName, paramVal, paramOutname;\n  var params = {\n    proj: 'projName',\n    datum: 'datumCode',\n    rf: function(v) {\n      self.rf = parseFloat(v);\n    },\n    lat_0: function(v) {\n      self.lat0 = v * D2R;\n    },\n    lat_1: function(v) {\n      self.lat1 = v * D2R;\n    },\n    lat_2: function(v) {\n      self.lat2 = v * D2R;\n    },\n    lat_ts: function(v) {\n      self.lat_ts = v * D2R;\n    },\n    lon_0: function(v) {\n      self.long0 = v * D2R;\n    },\n    lon_1: function(v) {\n      self.long1 = v * D2R;\n    },\n    lon_2: function(v) {\n      self.long2 = v * D2R;\n    },\n    alpha: function(v) {\n      self.alpha = parseFloat(v) * D2R;\n    },\n    lonc: function(v) {\n      self.longc = v * D2R;\n    },\n    x_0: function(v) {\n      self.x0 = parseFloat(v);\n    },\n    y_0: function(v) {\n      self.y0 = parseFloat(v);\n    },\n    k_0: function(v) {\n      self.k0 = parseFloat(v);\n    },\n    k: function(v) {\n      self.k0 = parseFloat(v);\n    },\n    a: function(v) {\n      self.a = parseFloat(v);\n    },\n    b: function(v) {\n      self.b = parseFloat(v);\n    },\n    r_a: function() {\n      self.R_A = true;\n    },\n    zone: function(v) {\n      self.zone = parseInt(v, 10);\n    },\n    south: function() {\n      self.utmSouth = true;\n    },\n    towgs84: function(v) {\n      self.datum_params = v.split(\",\").map(function(a) {\n        return parseFloat(a);\n      });\n    },\n    to_meter: function(v) {\n      self.to_meter = parseFloat(v);\n    },\n    units: function(v) {\n      self.units = v;\n      var unit = match(units, v);\n      if (unit) {\n        self.to_meter = unit.to_meter;\n      }\n    },\n    from_greenwich: function(v) {\n      self.from_greenwich = v * D2R;\n    },\n    pm: function(v) {\n      var pm = match(PrimeMeridian, v);\n      self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n    },\n    nadgrids: function(v) {\n      if (v === '@null') {\n        self.datumCode = 'none';\n      }\n      else {\n        self.nadgrids = v;\n      }\n    },\n    axis: function(v) {\n      var legalAxis = \"ewnsud\";\n      if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n        self.axis = v;\n      }\n    }\n  };\n  for (paramName in paramObj) {\n    paramVal = paramObj[paramName];\n    if (paramName in params) {\n      paramOutname = params[paramName];\n      if (typeof paramOutname === 'function') {\n        paramOutname(paramVal);\n      }\n      else {\n        self[paramOutname] = paramVal;\n      }\n    }\n    else {\n      self[paramName] = paramVal;\n    }\n  }\n  if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n    self.datumCode = self.datumCode.toLowerCase();\n  }\n  return self;\n}\n","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n  if (typeof text !== 'string') {\n    throw new Error('not a string');\n  }\n  this.text = text.trim();\n  this.level = 0;\n  this.place = 0;\n  this.root = null;\n  this.stack = [];\n  this.currentObject = null;\n  this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n  var char = this.text[this.place++];\n  if (this.state !== QUOTED) {\n    while (whitespace.test(char)) {\n      if (this.place >= this.text.length) {\n        return;\n      }\n      char = this.text[this.place++];\n    }\n  }\n  switch (this.state) {\n    case NEUTRAL:\n      return this.neutral(char);\n    case KEYWORD:\n      return this.keyword(char)\n    case QUOTED:\n      return this.quoted(char);\n    case AFTERQUOTE:\n      return this.afterquote(char);\n    case NUMBER:\n      return this.number(char);\n    case ENDED:\n      return;\n  }\n};\nParser.prototype.afterquote = function(char) {\n  if (char === '\"') {\n    this.word += '\"';\n    this.state = QUOTED;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.word = this.word.trim();\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n  if (char === ',') {\n    if (this.word !== null) {\n      this.currentObject.push(this.word);\n    }\n    this.word = null;\n    this.state = NEUTRAL;\n    return;\n  }\n  if (char === ']') {\n    this.level--;\n    if (this.word !== null) {\n      this.currentObject.push(this.word);\n      this.word = null;\n    }\n    this.state = NEUTRAL;\n    this.currentObject = this.stack.pop();\n    if (!this.currentObject) {\n      this.state = ENDED;\n    }\n\n    return;\n  }\n};\nParser.prototype.number = function(char) {\n  if (digets.test(char)) {\n    this.word += char;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.word = parseFloat(this.word);\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n  if (char === '\"') {\n    this.state = AFTERQUOTE;\n    return;\n  }\n  this.word += char;\n  return;\n};\nParser.prototype.keyword = function(char) {\n  if (keyword.test(char)) {\n    this.word += char;\n    return;\n  }\n  if (char === '[') {\n    var newObjects = [];\n    newObjects.push(this.word);\n    this.level++;\n    if (this.root === null) {\n      this.root = newObjects;\n    } else {\n      this.currentObject.push(newObjects);\n    }\n    this.stack.push(this.currentObject);\n    this.currentObject = newObjects;\n    this.state = NEUTRAL;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n  if (latin.test(char)) {\n    this.word = char;\n    this.state = KEYWORD;\n    return;\n  }\n  if (char === '\"') {\n    this.word = '';\n    this.state = QUOTED;\n    return;\n  }\n  if (digets.test(char)) {\n    this.word = char;\n    this.state = NUMBER;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n  while (this.place < this.text.length) {\n    this.readCharicter();\n  }\n  if (this.state === ENDED) {\n    return this.root;\n  }\n  throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n  var parser = new Parser(txt);\n  return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n  if (Array.isArray(key)) {\n    value.unshift(key);\n    key = null;\n  }\n  var thing = key ? {} : obj;\n\n  var out = value.reduce(function(newObj, item) {\n    sExpr(item, newObj);\n    return newObj\n  }, thing);\n  if (key) {\n    obj[key] = out;\n  }\n}\n\nexport function sExpr(v, obj) {\n  if (!Array.isArray(v)) {\n    obj[v] = true;\n    return;\n  }\n  var key = v.shift();\n  if (key === 'PARAMETER') {\n    key = v.shift();\n  }\n  if (v.length === 1) {\n    if (Array.isArray(v[0])) {\n      obj[key] = {};\n      sExpr(v[0], obj[key]);\n      return;\n    }\n    obj[key] = v[0];\n    return;\n  }\n  if (!v.length) {\n    obj[key] = true;\n    return;\n  }\n  if (key === 'TOWGS84') {\n    obj[key] = v;\n    return;\n  }\n  if (key === 'AXIS') {\n    if (!(key in obj)) {\n      obj[key] = [];\n    }\n    obj[key].push(v);\n    return;\n  }\n  if (!Array.isArray(key)) {\n    obj[key] = {};\n  }\n\n  var i;\n  switch (key) {\n    case 'UNIT':\n    case 'PRIMEM':\n    case 'VERT_DATUM':\n      obj[key] = {\n        name: v[0].toLowerCase(),\n        convert: v[1]\n      };\n      if (v.length === 3) {\n        sExpr(v[2], obj[key]);\n      }\n      return;\n    case 'SPHEROID':\n    case 'ELLIPSOID':\n      obj[key] = {\n        name: v[0],\n        a: v[1],\n        rf: v[2]\n      };\n      if (v.length === 4) {\n        sExpr(v[3], obj[key]);\n      }\n      return;\n    case 'PROJECTEDCRS':\n    case 'PROJCRS':\n    case 'GEOGCS':\n    case 'GEOCCS':\n    case 'PROJCS':\n    case 'LOCAL_CS':\n    case 'GEODCRS':\n    case 'GEODETICCRS':\n    case 'GEODETICDATUM':\n    case 'EDATUM':\n    case 'ENGINEERINGDATUM':\n    case 'VERT_CS':\n    case 'VERTCRS':\n    case 'VERTICALCRS':\n    case 'COMPD_CS':\n    case 'COMPOUNDCRS':\n    case 'ENGINEERINGCRS':\n    case 'ENGCRS':\n    case 'FITTED_CS':\n    case 'LOCAL_DATUM':\n    case 'DATUM':\n      v[0] = ['name', v[0]];\n      mapit(obj, key, v);\n      return;\n    default:\n      i = -1;\n      while (++i < v.length) {\n        if (!Array.isArray(v[i])) {\n          return sExpr(v, obj[key]);\n        }\n      }\n      return mapit(obj, key, v);\n  }\n}\n","var D2R = 0.01745329251994329577;\nimport parser from './parser';\nimport {sExpr} from './process';\n\n\n\nfunction rename(obj, params) {\n  var outName = params[0];\n  var inName = params[1];\n  if (!(outName in obj) && (inName in obj)) {\n    obj[outName] = obj[inName];\n    if (params.length === 3) {\n      obj[outName] = params[2](obj[outName]);\n    }\n  }\n}\n\nfunction d2r(input) {\n  return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n  if (wkt.type === 'GEOGCS') {\n    wkt.projName = 'longlat';\n  } else if (wkt.type === 'LOCAL_CS') {\n    wkt.projName = 'identity';\n    wkt.local = true;\n  } else {\n    if (typeof wkt.PROJECTION === 'object') {\n      wkt.projName = Object.keys(wkt.PROJECTION)[0];\n    } else {\n      wkt.projName = wkt.PROJECTION;\n    }\n  }\n  if (wkt.AXIS) {\n    var axisOrder = '';\n    for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {\n      var axis = wkt.AXIS[i];\n      var descriptor = axis[0].toLowerCase();\n      if (descriptor.indexOf('north') !== -1) {\n        axisOrder += 'n';\n      } else if (descriptor.indexOf('south') !== -1) {\n        axisOrder += 's';\n      } else if (descriptor.indexOf('east') !== -1) {\n        axisOrder += 'e';\n      } else if (descriptor.indexOf('west') !== -1) {\n        axisOrder += 'w';\n      }\n    }\n    if (axisOrder.length === 2) {\n      axisOrder += 'u';\n    }\n    if (axisOrder.length === 3) {\n      wkt.axis = axisOrder;\n    }\n  }\n  if (wkt.UNIT) {\n    wkt.units = wkt.UNIT.name.toLowerCase();\n    if (wkt.units === 'metre') {\n      wkt.units = 'meter';\n    }\n    if (wkt.UNIT.convert) {\n      if (wkt.type === 'GEOGCS') {\n        if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n          wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n        }\n      } else {\n        wkt.to_meter = wkt.UNIT.convert;\n      }\n    }\n  }\n  var geogcs = wkt.GEOGCS;\n  if (wkt.type === 'GEOGCS') {\n    geogcs = wkt;\n  }\n  if (geogcs) {\n    //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n    //  wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n    //}\n    if (geogcs.DATUM) {\n      wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n    } else {\n      wkt.datumCode = geogcs.name.toLowerCase();\n    }\n    if (wkt.datumCode.slice(0, 2) === 'd_') {\n      wkt.datumCode = wkt.datumCode.slice(2);\n    }\n    if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n      wkt.datumCode = 'nzgd49';\n    }\n    if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {\n      if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n        wkt.sphere = true;\n      }\n      wkt.datumCode = 'wgs84';\n    }\n    if (wkt.datumCode.slice(-6) === '_ferro') {\n      wkt.datumCode = wkt.datumCode.slice(0, - 6);\n    }\n    if (wkt.datumCode.slice(-8) === '_jakarta') {\n      wkt.datumCode = wkt.datumCode.slice(0, - 8);\n    }\n    if (~wkt.datumCode.indexOf('belge')) {\n      wkt.datumCode = 'rnb72';\n    }\n    if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n      wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n      if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n        wkt.ellps = 'intl';\n      }\n\n      wkt.a = geogcs.DATUM.SPHEROID.a;\n      wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n    }\n\n    if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n      wkt.datum_params = geogcs.DATUM.TOWGS84;\n    }\n    if (~wkt.datumCode.indexOf('osgb_1936')) {\n      wkt.datumCode = 'osgb36';\n    }\n    if (~wkt.datumCode.indexOf('osni_1952')) {\n      wkt.datumCode = 'osni52';\n    }\n    if (~wkt.datumCode.indexOf('tm65')\n      || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n      wkt.datumCode = 'ire65';\n    }\n    if (wkt.datumCode === 'ch1903+') {\n      wkt.datumCode = 'ch1903';\n    }\n    if (~wkt.datumCode.indexOf('israel')) {\n      wkt.datumCode = 'isr93';\n    }\n  }\n  if (wkt.b && !isFinite(wkt.b)) {\n    wkt.b = wkt.a;\n  }\n\n  function toMeter(input) {\n    var ratio = wkt.to_meter || 1;\n    return input * ratio;\n  }\n  var renamer = function(a) {\n    return rename(wkt, a);\n  };\n  var list = [\n    ['standard_parallel_1', 'Standard_Parallel_1'],\n    ['standard_parallel_2', 'Standard_Parallel_2'],\n    ['false_easting', 'False_Easting'],\n    ['false_northing', 'False_Northing'],\n    ['central_meridian', 'Central_Meridian'],\n    ['latitude_of_origin', 'Latitude_Of_Origin'],\n    ['latitude_of_origin', 'Central_Parallel'],\n    ['scale_factor', 'Scale_Factor'],\n    ['k0', 'scale_factor'],\n    ['latitude_of_center', 'Latitude_Of_Center'],\n    ['latitude_of_center', 'Latitude_of_center'],\n    ['lat0', 'latitude_of_center', d2r],\n    ['longitude_of_center', 'Longitude_Of_Center'],\n    ['longitude_of_center', 'Longitude_of_center'],\n    ['longc', 'longitude_of_center', d2r],\n    ['x0', 'false_easting', toMeter],\n    ['y0', 'false_northing', toMeter],\n    ['long0', 'central_meridian', d2r],\n    ['lat0', 'latitude_of_origin', d2r],\n    ['lat0', 'standard_parallel_1', d2r],\n    ['lat1', 'standard_parallel_1', d2r],\n    ['lat2', 'standard_parallel_2', d2r],\n    ['azimuth', 'Azimuth'],\n    ['alpha', 'azimuth', d2r],\n    ['srsCode', 'name']\n  ];\n  list.forEach(renamer);\n  if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {\n    wkt.long0 = wkt.longc;\n  }\n  if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n    wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n    wkt.lat_ts = wkt.lat1;\n  }\n}\nexport default function(wkt) {\n  var lisp = parser(wkt);\n  var type = lisp.shift();\n  var name = lisp.shift();\n  lisp.unshift(['name', name]);\n  lisp.unshift(['type', type]);\n  var obj = {};\n  sExpr(lisp, obj);\n  cleanWKT(obj);\n  return obj;\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\nfunction defs(name) {\n  /*global console*/\n  var that = this;\n  if (arguments.length === 2) {\n    var def = arguments[1];\n    if (typeof def === 'string') {\n      if (def.charAt(0) === '+') {\n        defs[name] = parseProj(arguments[1]);\n      }\n      else {\n        defs[name] = wkt(arguments[1]);\n      }\n    } else {\n      defs[name] = def;\n    }\n  }\n  else if (arguments.length === 1) {\n    if (Array.isArray(name)) {\n      return name.map(function(v) {\n        if (Array.isArray(v)) {\n          defs.apply(that, v);\n        }\n        else {\n          defs(v);\n        }\n      });\n    }\n    else if (typeof name === 'string') {\n      if (name in defs) {\n        return defs[name];\n      }\n    }\n    else if ('EPSG' in name) {\n      defs['EPSG:' + name.EPSG] = name;\n    }\n    else if ('ESRI' in name) {\n      defs['ESRI:' + name.ESRI] = name;\n    }\n    else if ('IAU2000' in name) {\n      defs['IAU2000:' + name.IAU2000] = name;\n    }\n    else {\n      console.log(name);\n    }\n    return;\n  }\n\n\n}\nglobals(defs);\nexport default defs;\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n  return typeof code === 'string';\n}\nfunction testDef(code){\n  return code in defs;\n}\n var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n  return codeWords.some(function (word) {\n    return code.indexOf(word) > -1;\n  });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n  var auth = match(item, 'authority');\n  if (!auth) {\n    return;\n  }\n  var code = match(auth, 'epsg');\n  return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n  var ext = match(item, 'extension');\n  if (!ext) {\n    return;\n  }\n  return match(ext, 'proj4');\n}\nfunction testProj(code){\n  return code[0] === '+';\n}\nfunction parse(code){\n  if (testObj(code)) {\n    //check to see if this is a WKT string\n    if (testDef(code)) {\n      return defs[code];\n    }\n    if (testWKT(code)) {\n      var out = wkt(code);\n      // test of spetial case, due to this being a very common and often malformed\n      if (checkMercator(out)) {\n        return defs['EPSG:3857'];\n      }\n      var maybeProjStr = checkProjStr(out);\n      if (maybeProjStr) {\n        return projStr(maybeProjStr);\n      }\n      return out;\n    }\n    if (testProj(code)) {\n      return projStr(code);\n    }\n  }else{\n    return code;\n  }\n}\n\nexport default parse;\n","export default function(destination, source) {\n  destination = destination || {};\n  var value, property;\n  if (!source) {\n    return destination;\n  }\n  for (property in source) {\n    value = source[property];\n    if (value !== undefined) {\n      destination[property] = value;\n    }\n  }\n  return destination;\n}\n","export default function(eccent, sinphi, cosphi) {\n  var con = eccent * sinphi;\n  return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n  return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n  return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, phi, sinphi) {\n  var con = eccent * sinphi;\n  var com = 0.5 * eccent;\n  con = Math.pow(((1 - con) / (1 + con)), com);\n  return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, ts) {\n  var eccnth = 0.5 * eccent;\n  var con, dphi;\n  var phi = HALF_PI - 2 * Math.atan(ts);\n  for (var i = 0; i <= 15; i++) {\n    con = eccent * Math.sin(phi);\n    dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n  //console.log(\"phi2z has NoConvergence\");\n  return -9999;\n}\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\n  var con = this.b / this.a;\n  this.es = 1 - con * con;\n  if(!('x0' in this)){\n    this.x0 = 0;\n  }\n  if(!('y0' in this)){\n    this.y0 = 0;\n  }\n  this.e = Math.sqrt(this.es);\n  if (this.lat_ts) {\n    if (this.sphere) {\n      this.k0 = Math.cos(this.lat_ts);\n    }\n    else {\n      this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n    }\n  }\n  else {\n    if (!this.k0) {\n      if (this.k) {\n        this.k0 = this.k;\n      }\n      else {\n        this.k0 = 1;\n      }\n    }\n  }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n  --------------------------------------------------*/\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  // convert to radians\n  if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n    return null;\n  }\n\n  var x, y;\n  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n    return null;\n  }\n  else {\n    if (this.sphere) {\n      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n      y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n    }\n    else {\n      var sinphi = Math.sin(lat);\n      var ts = tsfnz(this.e, lat, sinphi);\n      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n      y = this.y0 - this.a * this.k0 * Math.log(ts);\n    }\n    p.x = x;\n    p.y = y;\n    return p;\n  }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n  --------------------------------------------------*/\nexport function inverse(p) {\n\n  var x = p.x - this.x0;\n  var y = p.y - this.y0;\n  var lon, lat;\n\n  if (this.sphere) {\n    lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n  }\n  else {\n    var ts = Math.exp(-y / (this.a * this.k0));\n    lat = phi2z(this.e, ts);\n    if (lat === -9999) {\n      return null;\n    }\n  }\n  lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export function init() {\n  //no-op for longlat\n}\n\nfunction identity(pt) {\n  return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n  init: init,\n  forward: identity,\n  inverse: identity,\n  names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n  var len = projStore.length;\n  if (!proj.names) {\n    console.log(i);\n    return true;\n  }\n  projStore[len] = proj;\n  proj.names.forEach(function(n) {\n    names[n.toLowerCase()] = len;\n  });\n  return this;\n}\n\nexport {add};\n\nexport function get(name) {\n  if (!name) {\n    return false;\n  }\n  var n = name.toLowerCase();\n  if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n    return projStore[names[n]];\n  }\n}\n\nexport function start() {\n  projs.forEach(add);\n}\nexport default {\n  start: start,\n  add: add,\n  get: get\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n  a: 6378137.0,\n  rf: 298.257,\n  ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n  a: 6378136.0,\n  rf: 298.257,\n  ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n  a: 6378137.0,\n  rf: 298.257222101,\n  ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n  a: 6378140.0,\n  rf: 298.257,\n  ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n  a: 6377563.396,\n  b: 6356256.910,\n  ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n  a: 6378137,\n  rf: 298.25,\n  ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n  a: 6378145.0,\n  rf: 298.25,\n  ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n  a: 6377340.189,\n  b: 6356034.446,\n  ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n  a: 6377104.43,\n  rf: 300.0,\n  ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n  a: 6378160.0,\n  rf: 298.25,\n  ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n  a: 6378160.0,\n  rf: 298.2471674270,\n  ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n  a: 6377397.155,\n  rf: 299.1528128,\n  ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n  a: 6377483.865,\n  rf: 299.1528128,\n  ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n  a: 6378206.4,\n  b: 6356583.8,\n  ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n  a: 6378249.145,\n  rf: 293.4663,\n  ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk58 = {\n  a: 6378293.645208759,\n  rf: 294.2606763692654,\n  ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n  a: 6375738.7,\n  rf: 334.29,\n  ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n  a: 6376428.0,\n  rf: 311.5,\n  ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n  a: 6378136.05,\n  rf: 298.2566,\n  ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n  a: 6377276.345,\n  rf: 300.8017,\n  ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n  a: 6377304.063,\n  rf: 300.8017,\n  ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n  a: 6377301.243,\n  rf: 300.8017,\n  ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n  a: 6377295.664,\n  rf: 300.8017,\n  ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n  a: 6377298.556,\n  rf: 300.8017,\n  ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n  a: 6378166.0,\n  rf: 298.3,\n  ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n  a: 6378155.0,\n  rf: 298.3,\n  ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n  a: 6378150.0,\n  rf: 298.3,\n  ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n  a: 6378200.0,\n  rf: 298.3,\n  ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n  a: 6378270.0,\n  rf: 297.0,\n  ellipseName: \"Hough\"\n};\n\nexports.intl = {\n  a: 6378388.0,\n  rf: 297.0,\n  ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n  a: 6378163.0,\n  rf: 298.24,\n  ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n  a: 6378139.0,\n  rf: 298.257,\n  ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n  a: 6397300.0,\n  rf: 191.0,\n  ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n  a: 6378157.5,\n  b: 6356772.2,\n  ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n  a: 6376523.0,\n  rf: 6355863.0,\n  ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n  a: 6378245.0,\n  rf: 298.3,\n  ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n  a: 6378155.0,\n  b: 6356773.3205,\n  ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n  a: 6376896.0,\n  b: 6355834.8467,\n  ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n  a: 6378165.0,\n  rf: 298.3,\n  ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n  a: 6378145.0,\n  rf: 298.25,\n  ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n  a: 6378135.0,\n  rf: 298.26,\n  ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n  a: 6378137.0,\n  rf: 298.257223563,\n  ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n  a: 6370997.0,\n  b: 6370997.0,\n  ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n  var a2 = a * a; // used in geocentric\n  var b2 = b * b; // used in geocentric\n  var es = (a2 - b2) / a2; // e ^ 2\n  var e = 0;\n  if (R_A) {\n    a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n    a2 = a * a;\n    es = 0;\n  } else {\n    e = Math.sqrt(es); // eccentricity\n  }\n  var ep2 = (a2 - b2) / b2; // used in geocentric\n  return {\n    es: es,\n    e: e,\n    ep2: ep2\n  };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n  if (!a) { // do we have an ellipsoid?\n    var ellipse = match(Ellipsoid, ellps);\n    if (!ellipse) {\n      ellipse = WGS84;\n    }\n    a = ellipse.a;\n    b = ellipse.b;\n    rf = ellipse.rf;\n  }\n\n  if (rf && !b) {\n    b = (1.0 - 1.0 / rf) * a;\n  }\n  if (rf === 0 || Math.abs(a - b) < EPSLN) {\n    sphere = true;\n    b = a;\n  }\n  return {\n    a: a,\n    b: b,\n    rf: rf,\n    sphere: sphere\n  };\n}\n","var exports = {};\nexport {exports as default};\nexports.wgs84 = {\n  towgs84: \"0,0,0\",\n  ellipse: \"WGS84\",\n  datumName: \"WGS84\"\n};\n\nexports.ch1903 = {\n  towgs84: \"674.374,15.056,405.346\",\n  ellipse: \"bessel\",\n  datumName: \"swiss\"\n};\n\nexports.ggrs87 = {\n  towgs84: \"-199.87,74.79,246.62\",\n  ellipse: \"GRS80\",\n  datumName: \"Greek_Geodetic_Reference_System_1987\"\n};\n\nexports.nad83 = {\n  towgs84: \"0,0,0\",\n  ellipse: \"GRS80\",\n  datumName: \"North_American_Datum_1983\"\n};\n\nexports.nad27 = {\n  nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n  ellipse: \"clrk66\",\n  datumName: \"North_American_Datum_1927\"\n};\n\nexports.potsdam = {\n  towgs84: \"606.0,23.0,413.0\",\n  ellipse: \"bessel\",\n  datumName: \"Potsdam Rauenberg 1950 DHDN\"\n};\n\nexports.carthage = {\n  towgs84: \"-263.0,6.0,431.0\",\n  ellipse: \"clark80\",\n  datumName: \"Carthage 1934 Tunisia\"\n};\n\nexports.hermannskogel = {\n  towgs84: \"653.0,-212.0,449.0\",\n  ellipse: \"bessel\",\n  datumName: \"Hermannskogel\"\n};\n\nexports.osni52 = {\n  towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n  ellipse: \"airy\",\n  datumName: \"Irish National\"\n};\n\nexports.ire65 = {\n  towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n  ellipse: \"mod_airy\",\n  datumName: \"Ireland 1965\"\n};\n\nexports.rassadiran = {\n  towgs84: \"-133.63,-157.5,-158.62\",\n  ellipse: \"intl\",\n  datumName: \"Rassadiran\"\n};\n\nexports.nzgd49 = {\n  towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n  ellipse: \"intl\",\n  datumName: \"New Zealand Geodetic Datum 1949\"\n};\n\nexports.osgb36 = {\n  towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n  ellipse: \"airy\",\n  datumName: \"Airy 1830\"\n};\n\nexports.s_jtsk = {\n  towgs84: \"589,76,480\",\n  ellipse: 'bessel',\n  datumName: 'S-JTSK (Ferro)'\n};\n\nexports.beduaram = {\n  towgs84: '-106,-87,188',\n  ellipse: 'clrk80',\n  datumName: 'Beduaram'\n};\n\nexports.gunung_segara = {\n  towgs84: '-403,684,41',\n  ellipse: 'bessel',\n  datumName: 'Gunung Segara Jakarta'\n};\n\nexports.rnb72 = {\n  towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n  ellipse: \"intl\",\n  datumName: \"Reseau National Belge 1972\"\n};\n","import {PJD_3PARAM, PJD_7PARAM, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2) {\n  var out = {};\n\n  if (datumCode === undefined || datumCode === 'none') {\n    out.datum_type = PJD_NODATUM;\n  } else {\n    out.datum_type = PJD_WGS84;\n  }\n\n  if (datum_params) {\n    out.datum_params = datum_params.map(parseFloat);\n    if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n      out.datum_type = PJD_3PARAM;\n    }\n    if (out.datum_params.length > 3) {\n      if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n        out.datum_type = PJD_7PARAM;\n        out.datum_params[3] *= SEC_TO_RAD;\n        out.datum_params[4] *= SEC_TO_RAD;\n        out.datum_params[5] *= SEC_TO_RAD;\n        out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n      }\n    }\n  }\n\n  out.a = a; //datum object also uses these values\n  out.b = b;\n  out.es = es;\n  out.ep2 = ep2;\n  return out;\n}\n\nexport default datum;\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\n\nfunction Projection(srsCode,callback) {\n  if (!(this instanceof Projection)) {\n    return new Projection(srsCode);\n  }\n  callback = callback || function(error){\n    if(error){\n      throw error;\n    }\n  };\n  var json = parseCode(srsCode);\n  if(typeof json !== 'object'){\n    callback(srsCode);\n    return;\n  }\n  var ourProj = Projection.projections.get(json.projName);\n  if(!ourProj){\n    callback(srsCode);\n    return;\n  }\n  if (json.datumCode && json.datumCode !== 'none') {\n    var datumDef = match(Datum, json.datumCode);\n    if (datumDef) {\n      json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;\n      json.ellps = datumDef.ellipse;\n      json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n    }\n  }\n  json.k0 = json.k0 || 1.0;\n  json.axis = json.axis || 'enu';\n  json.ellps = json.ellps || 'wgs84';\n  var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n  var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n  var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2);\n\n  extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n  extend(this, ourProj); // transfer all the methods from the projection\n\n  // copy the 4 things over we calulated in deriveConstants.sphere\n  this.a = sphere_.a;\n  this.b = sphere_.b;\n  this.rf = sphere_.rf;\n  this.sphere = sphere_.sphere;\n\n  // copy the 3 things we calculated in deriveConstants.eccentricity\n  this.es = ecc.es;\n  this.e = ecc.e;\n  this.ep2 = ecc.ep2;\n\n  // add in the datum object\n  this.datum = datumObj;\n\n  // init the projection\n  this.init();\n\n  // legecy callback from back in the day when it went to spatialreference.org\n  callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n  if (source.datum_type !== dest.datum_type) {\n    return false; // false, datums are not equal\n  } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n    // the tolerance for es is to ensure that GRS80 and WGS84\n    // are considered identical\n    return false;\n  } else if (source.datum_type === PJD_3PARAM) {\n    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n  } else if (source.datum_type === PJD_7PARAM) {\n    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n  } else {\n    return true; // datums are equal\n  }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n *    Latitude  : Geodetic latitude in radians                     (input)\n *    Longitude : Geodetic longitude in radians                    (input)\n *    Height    : Geodetic height, in meters                       (input)\n *    X         : Calculated Geocentric X coordinate, in meters    (output)\n *    Y         : Calculated Geocentric Y coordinate, in meters    (output)\n *    Z         : Calculated Geocentric Z coordinate, in meters    (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n  var Longitude = p.x;\n  var Latitude = p.y;\n  var Height = p.z ? p.z : 0; //Z value not always supplied\n\n  var Rn; /*  Earth radius at location  */\n  var Sin_Lat; /*  Math.sin(Latitude)  */\n  var Sin2_Lat; /*  Square of Math.sin(Latitude)  */\n  var Cos_Lat; /*  Math.cos(Latitude)  */\n\n  /*\n   ** Don't blow up if Latitude is just a little out of the value\n   ** range as it may just be a rounding issue.  Also removed longitude\n   ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.\n   */\n  if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n    Latitude = -HALF_PI;\n  } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n    Latitude = HALF_PI;\n  } else if (Latitude < -HALF_PI) {\n    /* Latitude out of range */\n    //..reportError('geocent:lat out of range:' + Latitude);\n    return { x: -Infinity, y: -Infinity, z: p.z };\n  } else if (Latitude > HALF_PI) {\n    /* Latitude out of range */\n    return { x: Infinity, y: Infinity, z: p.z };\n  }\n\n  if (Longitude > Math.PI) {\n    Longitude -= (2 * Math.PI);\n  }\n  Sin_Lat = Math.sin(Latitude);\n  Cos_Lat = Math.cos(Latitude);\n  Sin2_Lat = Sin_Lat * Sin_Lat;\n  Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n  return {\n    x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n    y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n    z: ((Rn * (1 - es)) + Height) * Sin_Lat\n  };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n  /* local defintions and variables */\n  /* end-criterium of loop, accuracy of sin(Latitude) */\n  var genau = 1e-12;\n  var genau2 = (genau * genau);\n  var maxiter = 30;\n\n  var P; /* distance between semi-minor axis and location */\n  var RR; /* distance between center and location */\n  var CT; /* sin of geocentric latitude */\n  var ST; /* cos of geocentric latitude */\n  var RX;\n  var RK;\n  var RN; /* Earth radius at location */\n  var CPHI0; /* cos of start or old geodetic latitude in iterations */\n  var SPHI0; /* sin of start or old geodetic latitude in iterations */\n  var CPHI; /* cos of searched geodetic latitude */\n  var SPHI; /* sin of searched geodetic latitude */\n  var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n  var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n  var X = p.x;\n  var Y = p.y;\n  var Z = p.z ? p.z : 0.0; //Z value not always supplied\n  var Longitude;\n  var Latitude;\n  var Height;\n\n  P = Math.sqrt(X * X + Y * Y);\n  RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n  /*      special cases for latitude and longitude */\n  if (P / a < genau) {\n\n    /*  special case, if P=0. (X=0., Y=0.) */\n    Longitude = 0.0;\n\n    /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n     *  of ellipsoid (=center of mass), Latitude becomes PI/2 */\n    if (RR / a < genau) {\n      Latitude = HALF_PI;\n      Height = -b;\n      return {\n        x: p.x,\n        y: p.y,\n        z: p.z\n      };\n    }\n  } else {\n    /*  ellipsoidal (geodetic) longitude\n     *  interval: -PI < Longitude <= +PI */\n    Longitude = Math.atan2(Y, X);\n  }\n\n  /* --------------------------------------------------------------\n   * Following iterative algorithm was developped by\n   * \"Institut for Erdmessung\", University of Hannover, July 1988.\n   * Internet: www.ife.uni-hannover.de\n   * Iterative computation of CPHI,SPHI and Height.\n   * Iteration of CPHI and SPHI to 10**-12 radian resp.\n   * 2*10**-7 arcsec.\n   * --------------------------------------------------------------\n   */\n  CT = Z / RR;\n  ST = P / RR;\n  RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n  CPHI0 = ST * (1.0 - es) * RX;\n  SPHI0 = CT * RX;\n  iter = 0;\n\n  /* loop to find sin(Latitude) resp. Latitude\n   * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n  do {\n    iter++;\n    RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n    /*  ellipsoidal (geodetic) height */\n    Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n    RK = es * RN / (RN + Height);\n    RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n    CPHI = ST * (1.0 - RK) * RX;\n    SPHI = CT * RX;\n    SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n    CPHI0 = CPHI;\n    SPHI0 = SPHI;\n  }\n  while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n  /*      ellipsoidal (geodetic) latitude */\n  Latitude = Math.atan(SPHI / Math.abs(CPHI));\n  return {\n    x: Longitude,\n    y: Latitude,\n    z: Height\n  };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n//  p = point to transform in geocentric coordinates (x,y,z)\n\n\n/** point object, nothing fancy, just allows values to be\n    passed back and forth by reference rather than by value.\n    Other point classes may be used as long as they have\n    x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n  if (datum_type === PJD_3PARAM) {\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: p.x + datum_params[0],\n      y: p.y + datum_params[1],\n      z: p.z + datum_params[2],\n    };\n  } else if (datum_type === PJD_7PARAM) {\n    var Dx_BF = datum_params[0];\n    var Dy_BF = datum_params[1];\n    var Dz_BF = datum_params[2];\n    var Rx_BF = datum_params[3];\n    var Ry_BF = datum_params[4];\n    var Rz_BF = datum_params[5];\n    var M_BF = datum_params[6];\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n      y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n      z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n    };\n  }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n//  coordinate system definition,\n//  point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n  if (datum_type === PJD_3PARAM) {\n    //if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: p.x - datum_params[0],\n      y: p.y - datum_params[1],\n      z: p.z - datum_params[2],\n    };\n\n  } else if (datum_type === PJD_7PARAM) {\n    var Dx_BF = datum_params[0];\n    var Dy_BF = datum_params[1];\n    var Dz_BF = datum_params[2];\n    var Rx_BF = datum_params[3];\n    var Ry_BF = datum_params[4];\n    var Rz_BF = datum_params[5];\n    var M_BF = datum_params[6];\n    var x_tmp = (p.x - Dx_BF) / M_BF;\n    var y_tmp = (p.y - Dy_BF) / M_BF;\n    var z_tmp = (p.z - Dz_BF) / M_BF;\n    //if( x[io] === HUGE_VAL )\n    //    continue;\n\n    return {\n      x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n      y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n      z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n    };\n  } //cs_geocentric_from_wgs84()\n}\n","import {PJD_3PARAM, PJD_7PARAM, PJD_NODATUM} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nfunction checkParams(type) {\n  return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n  // Short cut if the datums are identical.\n  if (compareDatums(source, dest)) {\n    return point; // in this case, zero is sucess,\n    // whereas cs_compare_datums returns 1 to indicate TRUE\n    // confusing, should fix this\n  }\n\n  // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n  if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n    return point;\n  }\n\n  // If this datum requires grid shifts, then apply it to geodetic coordinates.\n\n  // Do we need to go through geocentric coordinates?\n  if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) &&  !checkParams(dest.datum_type)) {\n    return point;\n  }\n\n  // Convert to geocentric coordinates.\n  point = geodeticToGeocentric(point, source.es, source.a);\n  // Convert between datums\n  if (checkParams(source.datum_type)) {\n    point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n  }\n  if (checkParams(dest.datum_type)) {\n    point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n  }\n  return geocentricToGeodetic(point, dest.es, dest.a, dest.b);\n\n}\n","export default function(crs, denorm, point) {\n  var xin = point.x,\n    yin = point.y,\n    zin = point.z || 0.0;\n  var v, t, i;\n  var out = {};\n  for (i = 0; i < 3; i++) {\n    if (denorm && i === 2 && point.z === undefined) {\n      continue;\n    }\n    if (i === 0) {\n      v = xin;\n      if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n        t = 'x';\n      } else {\n        t = 'y';\n      }\n\n    }\n    else if (i === 1) {\n      v = yin;\n      if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n        t = 'y';\n      } else {\n        t = 'x';\n      }\n    }\n    else {\n      v = zin;\n      t = 'z';\n    }\n    switch (crs.axis[i]) {\n    case 'e':\n    case 'w':\n    case 'n':\n    case 's':\n      out[t] = v;\n      break;\n    case 'u':\n      if (point[t] !== undefined) {\n        out.z = v;\n      }\n      break;\n    case 'd':\n      if (point[t] !== undefined) {\n        out.z = -v;\n      }\n      break;\n    default:\n      //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n      return null;\n    }\n  }\n  return out;\n}\n","export default function (array){\n  var out = {\n    x: array[0],\n    y: array[1]\n  };\n  if (array.length>2) {\n    out.z = array[2];\n  }\n  if (array.length>3) {\n    out.m = array[3];\n  }\n  return out;\n}","export default function (point) {\n  checkCoord(point.x);\n  checkCoord(point.y);\n}\nfunction checkCoord(num) {\n  if (typeof Number.isFinite === 'function') {\n    if (Number.isFinite(num)) {\n      return;\n    }\n    throw new TypeError('coordinates must be finite numbers');\n  }\n  if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n    throw new TypeError('coordinates must be finite numbers');\n  }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n  return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point) {\n  var wgs84;\n  if (Array.isArray(point)) {\n    point = toPoint(point);\n  }\n  checkSanity(point);\n  // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n  if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n    wgs84 = new proj('WGS84');\n    point = transform(source, wgs84, point);\n    source = wgs84;\n  }\n  // DGR, 2010/11/12\n  if (source.axis !== 'enu') {\n    point = adjust_axis(source, false, point);\n  }\n  // Transform source points to long/lat, if they aren't already.\n  if (source.projName === 'longlat') {\n    point = {\n      x: point.x * D2R,\n      y: point.y * D2R,\n      z: point.z || 0\n    };\n  } else {\n    if (source.to_meter) {\n      point = {\n        x: point.x * source.to_meter,\n        y: point.y * source.to_meter,\n        z: point.z || 0\n      };\n    }\n    point = source.inverse(point); // Convert Cartesian to longlat\n    if (!point) {\n      return;\n    }\n  }\n  // Adjust for the prime meridian if necessary\n  if (source.from_greenwich) {\n    point.x += source.from_greenwich;\n  }\n\n  // Convert datums if needed, and if possible.\n  point = datum_transform(source.datum, dest.datum, point);\n\n  // Adjust for the prime meridian if necessary\n  if (dest.from_greenwich) {\n    point = {\n      x: point.x - dest.from_greenwich,\n      y: point.y,\n      z: point.z || 0\n    };\n  }\n\n  if (dest.projName === 'longlat') {\n    // convert radians to decimal degrees\n    point = {\n      x: point.x * R2D,\n      y: point.y * R2D,\n      z: point.z || 0\n    };\n  } else { // else project\n    point = dest.forward(point);\n    if (dest.to_meter) {\n      point = {\n        x: point.x / dest.to_meter,\n        y: point.y / dest.to_meter,\n        z: point.z || 0\n      };\n    }\n  }\n\n  // DGR, 2010/11/12\n  if (dest.axis !== 'enu') {\n    return adjust_axis(dest, true, point);\n  }\n\n  return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords) {\n  var transformedArray, out, keys;\n  if (Array.isArray(coords)) {\n    transformedArray = transform(from, to, coords) || {x: NaN, y: NaN};\n    if (coords.length > 2) {\n      if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n        if (typeof transformedArray.z === 'number') {\n          return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.splice(3));\n        } else {\n          return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.splice(3));\n        }\n      } else {\n        return [transformedArray.x, transformedArray.y].concat(coords.splice(2));\n      }\n    } else {\n      return [transformedArray.x, transformedArray.y];\n    }\n  } else {\n    out = transform(from, to, coords);\n    keys = Object.keys(coords);\n    if (keys.length === 2) {\n      return out;\n    }\n    keys.forEach(function (key) {\n      if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n        if (key === 'x' || key === 'y' || key === 'z') {\n          return;\n        }\n      } else {\n        if (key === 'x' || key === 'y') {\n          return;\n        }\n      }\n      out[key] = coords[key];\n    });\n    return out;\n  }\n}\n\nfunction checkProj(item) {\n  if (item instanceof proj) {\n    return item;\n  }\n  if (item.oProj) {\n    return item.oProj;\n  }\n  return proj(item);\n}\n\nfunction proj4(fromProj, toProj, coord) {\n  fromProj = checkProj(fromProj);\n  var single = false;\n  var obj;\n  if (typeof toProj === 'undefined') {\n    toProj = fromProj;\n    fromProj = wgs84;\n    single = true;\n  } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n    coord = toProj;\n    toProj = fromProj;\n    fromProj = wgs84;\n    single = true;\n  }\n  toProj = checkProj(toProj);\n  if (coord) {\n    return transformer(fromProj, toProj, coord);\n  } else {\n    obj = {\n      forward: function (coords) {\n        return transformer(fromProj, toProj, coords);\n      },\n      inverse: function (coords) {\n        return transformer(toProj, fromProj, coords);\n      }\n    };\n    if (single) {\n      obj.oProj = toProj;\n    }\n    return obj;\n  }\n}\nexport default proj4;","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n  forward: forward,\n  inverse: inverse,\n  toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n *     WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n  accuracy = accuracy || 5; // default accuracy 1m\n  return encode(LLtoUTM({\n    lat: ll[1],\n    lon: ll[0]\n  }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n *     (longitude) and top (latitude) values in WGS84, representing the\n *     bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n  if (bbox.lat && bbox.lon) {\n    return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n  }\n  return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n  if (bbox.lat && bbox.lon) {\n    return [bbox.lon, bbox.lat];\n  }\n  return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n  return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n  return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n *     representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n *     northing, zoneNumber and zoneLetter properties, and an optional\n *     accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n  var Lat = ll.lat;\n  var Long = ll.lon;\n  var a = 6378137.0; //ellip.radius;\n  var eccSquared = 0.00669438; //ellip.eccsq;\n  var k0 = 0.9996;\n  var LongOrigin;\n  var eccPrimeSquared;\n  var N, T, C, A, M;\n  var LatRad = degToRad(Lat);\n  var LongRad = degToRad(Long);\n  var LongOriginRad;\n  var ZoneNumber;\n  // (int)\n  ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n  //Make sure the longitude 180.00 is in Zone 60\n  if (Long === 180) {\n    ZoneNumber = 60;\n  }\n\n  // Special zone for Norway\n  if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n    ZoneNumber = 32;\n  }\n\n  // Special zones for Svalbard\n  if (Lat >= 72.0 && Lat < 84.0) {\n    if (Long >= 0.0 && Long < 9.0) {\n      ZoneNumber = 31;\n    }\n    else if (Long >= 9.0 && Long < 21.0) {\n      ZoneNumber = 33;\n    }\n    else if (Long >= 21.0 && Long < 33.0) {\n      ZoneNumber = 35;\n    }\n    else if (Long >= 33.0 && Long < 42.0) {\n      ZoneNumber = 37;\n    }\n  }\n\n  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n  // in middle of\n  // zone\n  LongOriginRad = degToRad(LongOrigin);\n\n  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n  N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n  T = Math.tan(LatRad) * Math.tan(LatRad);\n  C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n  A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n  M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n  var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n  var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n  if (Lat < 0.0) {\n    UTMNorthing += 10000000.0; //10000000 meter offset for\n    // southern hemisphere\n  }\n\n  return {\n    northing: Math.round(UTMNorthing),\n    easting: Math.round(UTMEasting),\n    zoneNumber: ZoneNumber,\n    zoneLetter: getLetterDesignator(Lat)\n  };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n *     and zoneLetter properties. If an optional accuracy property is\n *     provided (in meters), a bounding box will be returned instead of\n *     latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n *     (if no accuracy was provided), or top, right, bottom and left values\n *     for the bounding box calculated according to the provided accuracy.\n *     Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n  var UTMNorthing = utm.northing;\n  var UTMEasting = utm.easting;\n  var zoneLetter = utm.zoneLetter;\n  var zoneNumber = utm.zoneNumber;\n  // check the ZoneNummber is valid\n  if (zoneNumber < 0 || zoneNumber > 60) {\n    return null;\n  }\n\n  var k0 = 0.9996;\n  var a = 6378137.0; //ellip.radius;\n  var eccSquared = 0.00669438; //ellip.eccsq;\n  var eccPrimeSquared;\n  var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n  var N1, T1, C1, R1, D, M;\n  var LongOrigin;\n  var mu, phi1Rad;\n\n  // remove 500,000 meter offset for longitude\n  var x = UTMEasting - 500000.0;\n  var y = UTMNorthing;\n\n  // We must know somehow if we are in the Northern or Southern\n  // hemisphere, this is the only time we use the letter So even\n  // if the Zone letter isn't exactly correct it should indicate\n  // the hemisphere correctly\n  if (zoneLetter < 'N') {\n    y -= 10000000.0; // remove 10,000,000 meter offset used\n    // for southern hemisphere\n  }\n\n  // There are 60 zones with zone 1 being at West -180 to -174\n  LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n  // in middle of\n  // zone\n\n  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n  M = y / k0;\n  mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n  phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n  // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n  N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n  T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n  C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n  R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n  D = x / (N1 * k0);\n\n  var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n  lat = radToDeg(lat);\n\n  var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n  lon = LongOrigin + radToDeg(lon);\n\n  var result;\n  if (utm.accuracy) {\n    var topRight = UTMtoLL({\n      northing: utm.northing + utm.accuracy,\n      easting: utm.easting + utm.accuracy,\n      zoneLetter: utm.zoneLetter,\n      zoneNumber: utm.zoneNumber\n    });\n    result = {\n      top: topRight.lat,\n      right: topRight.lon,\n      bottom: lat,\n      left: lon\n    };\n  }\n  else {\n    result = {\n      lat: lat,\n      lon: lon\n    };\n  }\n  return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n *     for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n  //This is here as an error flag to show that the Latitude is\n  //outside MGRS limits\n  var LetterDesignator = 'Z';\n\n  if ((84 >= lat) && (lat >= 72)) {\n    LetterDesignator = 'X';\n  }\n  else if ((72 > lat) && (lat >= 64)) {\n    LetterDesignator = 'W';\n  }\n  else if ((64 > lat) && (lat >= 56)) {\n    LetterDesignator = 'V';\n  }\n  else if ((56 > lat) && (lat >= 48)) {\n    LetterDesignator = 'U';\n  }\n  else if ((48 > lat) && (lat >= 40)) {\n    LetterDesignator = 'T';\n  }\n  else if ((40 > lat) && (lat >= 32)) {\n    LetterDesignator = 'S';\n  }\n  else if ((32 > lat) && (lat >= 24)) {\n    LetterDesignator = 'R';\n  }\n  else if ((24 > lat) && (lat >= 16)) {\n    LetterDesignator = 'Q';\n  }\n  else if ((16 > lat) && (lat >= 8)) {\n    LetterDesignator = 'P';\n  }\n  else if ((8 > lat) && (lat >= 0)) {\n    LetterDesignator = 'N';\n  }\n  else if ((0 > lat) && (lat >= -8)) {\n    LetterDesignator = 'M';\n  }\n  else if ((-8 > lat) && (lat >= -16)) {\n    LetterDesignator = 'L';\n  }\n  else if ((-16 > lat) && (lat >= -24)) {\n    LetterDesignator = 'K';\n  }\n  else if ((-24 > lat) && (lat >= -32)) {\n    LetterDesignator = 'J';\n  }\n  else if ((-32 > lat) && (lat >= -40)) {\n    LetterDesignator = 'H';\n  }\n  else if ((-40 > lat) && (lat >= -48)) {\n    LetterDesignator = 'G';\n  }\n  else if ((-48 > lat) && (lat >= -56)) {\n    LetterDesignator = 'F';\n  }\n  else if ((-56 > lat) && (lat >= -64)) {\n    LetterDesignator = 'E';\n  }\n  else if ((-64 > lat) && (lat >= -72)) {\n    LetterDesignator = 'D';\n  }\n  else if ((-72 > lat) && (lat >= -80)) {\n    LetterDesignator = 'C';\n  }\n  return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n *     zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n  // prepend with leading zeroes\n  var seasting = \"00000\" + utm.easting,\n    snorthing = \"00000\" + utm.northing;\n\n  return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n  var setParm = get100kSetForZone(zoneNumber);\n  var setColumn = Math.floor(easting / 100000);\n  var setRow = Math.floor(northing / 100000) % 20;\n  return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n  var setParm = i % NUM_100K_SETS;\n  if (setParm === 0) {\n    setParm = NUM_100K_SETS;\n  }\n\n  return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n *        100k set spreadsheet, created from the UTM easting.\n *        Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n *        spreadsheet, created from the UTM northing value. Values\n *        are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n *        spreadsheet, created from the UTM zone. Values are from\n *        1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n  // colOrigin and rowOrigin are the letters at the origin of the set\n  var index = parm - 1;\n  var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n  var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n  // colInt and rowInt are the letters to build to return\n  var colInt = colOrigin + column - 1;\n  var rowInt = rowOrigin + row;\n  var rollover = false;\n\n  if (colInt > Z) {\n    colInt = colInt - Z + A - 1;\n    rollover = true;\n  }\n\n  if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n    colInt++;\n  }\n\n  if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n    colInt++;\n\n    if (colInt === I) {\n      colInt++;\n    }\n  }\n\n  if (colInt > Z) {\n    colInt = colInt - Z + A - 1;\n  }\n\n  if (rowInt > V) {\n    rowInt = rowInt - V + A - 1;\n    rollover = true;\n  }\n  else {\n    rollover = false;\n  }\n\n  if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n    rowInt++;\n  }\n\n  if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n    rowInt++;\n\n    if (rowInt === I) {\n      rowInt++;\n    }\n  }\n\n  if (rowInt > V) {\n    rowInt = rowInt - V + A - 1;\n  }\n\n  var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n  return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n *     zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n  if (mgrsString && mgrsString.length === 0) {\n    throw (\"MGRSPoint coverting from nothing\");\n  }\n\n  var length = mgrsString.length;\n\n  var hunK = null;\n  var sb = \"\";\n  var testChar;\n  var i = 0;\n\n  // get Zone number\n  while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n    if (i >= 2) {\n      throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n    }\n    sb += testChar;\n    i++;\n  }\n\n  var zoneNumber = parseInt(sb, 10);\n\n  if (i === 0 || i + 3 > length) {\n    // A good MGRS string has to be 4-5 digits long,\n    // ##AAA/#AAA at least.\n    throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n  }\n\n  var zoneLetter = mgrsString.charAt(i++);\n\n  // Should we check the zone letter here? Why not.\n  if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n    throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n  }\n\n  hunK = mgrsString.substring(i, i += 2);\n\n  var set = get100kSetForZone(zoneNumber);\n\n  var east100k = getEastingFromChar(hunK.charAt(0), set);\n  var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n  // We have a bug where the northing may be 2000000 too low.\n  // How\n  // do we know when to roll over?\n\n  while (north100k < getMinNorthing(zoneLetter)) {\n    north100k += 2000000;\n  }\n\n  // calculate the char index for easting/northing separator\n  var remainder = length - i;\n\n  if (remainder % 2 !== 0) {\n    throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n  }\n\n  var sep = remainder / 2;\n\n  var sepEasting = 0.0;\n  var sepNorthing = 0.0;\n  var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n  if (sep > 0) {\n    accuracyBonus = 100000.0 / Math.pow(10, sep);\n    sepEastingString = mgrsString.substring(i, i + sep);\n    sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n    sepNorthingString = mgrsString.substring(i + sep);\n    sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n  }\n\n  easting = sepEasting + east100k;\n  northing = sepNorthing + north100k;\n\n  return {\n    easting: easting,\n    northing: northing,\n    zoneLetter: zoneLetter,\n    zoneNumber: zoneNumber,\n    accuracy: accuracyBonus\n  };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n  // colOrigin is the letter at the origin of the set for the\n  // column\n  var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n  var eastingValue = 100000.0;\n  var rewindMarker = false;\n\n  while (curCol !== e.charCodeAt(0)) {\n    curCol++;\n    if (curCol === I) {\n      curCol++;\n    }\n    if (curCol === O) {\n      curCol++;\n    }\n    if (curCol > Z) {\n      if (rewindMarker) {\n        throw (\"Bad character: \" + e);\n      }\n      curCol = A;\n      rewindMarker = true;\n    }\n    eastingValue += 100000.0;\n  }\n\n  return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n *     UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n  if (n > 'V') {\n    throw (\"MGRSPoint given invalid Northing \" + n);\n  }\n\n  // rowOrigin is the letter at the origin of the set for the\n  // column\n  var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n  var northingValue = 0.0;\n  var rewindMarker = false;\n\n  while (curRow !== n.charCodeAt(0)) {\n    curRow++;\n    if (curRow === I) {\n      curRow++;\n    }\n    if (curRow === O) {\n      curRow++;\n    }\n    // fixing a bug making whole application hang in this loop\n    // when 'n' is a wrong character\n    if (curRow > V) {\n      if (rewindMarker) { // making sure that this loop ends\n        throw (\"Bad character: \" + n);\n      }\n      curRow = A;\n      rewindMarker = true;\n    }\n    northingValue += 100000.0;\n  }\n\n  return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n  var northing;\n  switch (zoneLetter) {\n  case 'C':\n    northing = 1100000.0;\n    break;\n  case 'D':\n    northing = 2000000.0;\n    break;\n  case 'E':\n    northing = 2800000.0;\n    break;\n  case 'F':\n    northing = 3700000.0;\n    break;\n  case 'G':\n    northing = 4600000.0;\n    break;\n  case 'H':\n    northing = 5500000.0;\n    break;\n  case 'J':\n    northing = 6400000.0;\n    break;\n  case 'K':\n    northing = 7300000.0;\n    break;\n  case 'L':\n    northing = 8200000.0;\n    break;\n  case 'M':\n    northing = 9100000.0;\n    break;\n  case 'N':\n    northing = 0.0;\n    break;\n  case 'P':\n    northing = 800000.0;\n    break;\n  case 'Q':\n    northing = 1700000.0;\n    break;\n  case 'R':\n    northing = 2600000.0;\n    break;\n  case 'S':\n    northing = 3500000.0;\n    break;\n  case 'T':\n    northing = 4400000.0;\n    break;\n  case 'U':\n    northing = 5300000.0;\n    break;\n  case 'V':\n    northing = 6200000.0;\n    break;\n  case 'W':\n    northing = 7000000.0;\n    break;\n  case 'X':\n    northing = 7900000.0;\n    break;\n  default:\n    northing = -1.0;\n  }\n  if (northing >= 0.0) {\n    return northing;\n  }\n  else {\n    throw (\"Invalid zone letter: \" + zoneLetter);\n  }\n\n}\n","import {toPoint, forward} from 'mgrs';\n\nfunction Point(x, y, z) {\n  if (!(this instanceof Point)) {\n    return new Point(x, y, z);\n  }\n  if (Array.isArray(x)) {\n    this.x = x[0];\n    this.y = x[1];\n    this.z = x[2] || 0.0;\n  } else if(typeof x === 'object') {\n    this.x = x.x;\n    this.y = x.y;\n    this.z = x.z || 0.0;\n  } else if (typeof x === 'string' && typeof y === 'undefined') {\n    var coords = x.split(',');\n    this.x = parseFloat(coords[0], 10);\n    this.y = parseFloat(coords[1], 10);\n    this.z = parseFloat(coords[2], 10) || 0.0;\n  } else {\n    this.x = x;\n    this.y = y;\n    this.z = z || 0.0;\n  }\n  console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n  return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n  return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function(es) {\n  var en = [];\n  en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n  en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n  var t = es * es;\n  en[2] = t * (C44 - es * (C46 + es * C48));\n  t *= es;\n  en[3] = t * (C66 - es * C68);\n  en[4] = t * es * C88;\n  return en;\n}","export default function(phi, sphi, cphi, en) {\n  cphi *= sphi;\n  sphi *= sphi;\n  return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function(arg, es, en) {\n  var k = 1 / (1 - es);\n  var phi = arg;\n  for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n    var s = Math.sin(phi);\n    var t = 1 - es * s * s;\n    //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n    //phi -= t * (t * Math.sqrt(t)) * k;\n    t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n    phi -= t;\n    if (Math.abs(t) < EPSLN) {\n      return phi;\n    }\n  }\n  //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n  return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n  if (this.es) {\n    this.en = pj_enfn(this.es);\n    this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n  }\n}\n\n/**\n    Transverse Mercator Forward  - long/lat to x/y\n    long/lat in radians\n  */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lon = adjust_lon(lon - this.long0);\n  var con;\n  var x, y;\n  var sin_phi = Math.sin(lat);\n  var cos_phi = Math.cos(lat);\n\n  if (!this.es) {\n    var b = cos_phi * Math.sin(delta_lon);\n\n    if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n      return (93);\n    }\n    else {\n      x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n      y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n      b = Math.abs(y);\n\n      if (b >= 1) {\n        if ((b - 1) > EPSLN) {\n          return (93);\n        }\n        else {\n          y = 0;\n        }\n      }\n      else {\n        y = Math.acos(y);\n      }\n\n      if (lat < 0) {\n        y = -y;\n      }\n\n      y = this.a * this.k0 * (y - this.lat0) + this.y0;\n    }\n  }\n  else {\n    var al = cos_phi * delta_lon;\n    var als = Math.pow(al, 2);\n    var c = this.ep2 * Math.pow(cos_phi, 2);\n    var cs = Math.pow(c, 2);\n    var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n    var t = Math.pow(tq, 2);\n    var ts = Math.pow(t, 2);\n    con = 1 - this.es * Math.pow(sin_phi, 2);\n    al = al / Math.sqrt(con);\n    var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n    x = this.a * (this.k0 * al * (1 +\n      als / 6 * (1 - t + c +\n      als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n      als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n      this.x0;\n\n    y = this.a * (this.k0 * (ml - this.ml0 +\n      sin_phi * delta_lon * al / 2 * (1 +\n      als / 12 * (5 - t + 9 * c + 4 * cs +\n      als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n      als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n      this.y0;\n  }\n\n  p.x = x;\n  p.y = y;\n\n  return p;\n}\n\n/**\n    Transverse Mercator Inverse  -  x/y to long/lat\n  */\nexport function inverse(p) {\n  var con, phi;\n  var lat, lon;\n  var x = (p.x - this.x0) * (1 / this.a);\n  var y = (p.y - this.y0) * (1 / this.a);\n\n  if (!this.es) {\n    var f = Math.exp(x / this.k0);\n    var g = 0.5 * (f - 1 / f);\n    var temp = this.lat0 + y / this.k0;\n    var h = Math.cos(temp);\n    con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n    lat = Math.asin(con);\n\n    if (y < 0) {\n      lat = -lat;\n    }\n\n    if ((g === 0) && (h === 0)) {\n      lon = 0;\n    }\n    else {\n      lon = adjust_lon(Math.atan2(g, h) + this.long0);\n    }\n  }\n  else { // ellipsoidal form\n    con = this.ml0 + y / this.k0;\n    phi = pj_inv_mlfn(con, this.es, this.en);\n\n    if (Math.abs(phi) < HALF_PI) {\n      var sin_phi = Math.sin(phi);\n      var cos_phi = Math.cos(phi);\n      var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n      var c = this.ep2 * Math.pow(cos_phi, 2);\n      var cs = Math.pow(c, 2);\n      var t = Math.pow(tan_phi, 2);\n      var ts = Math.pow(t, 2);\n      con = 1 - this.es * Math.pow(sin_phi, 2);\n      var d = x * Math.sqrt(con) / this.k0;\n      var ds = Math.pow(d, 2);\n      con = con * tan_phi;\n\n      lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n        ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n        ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n        ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n      lon = adjust_lon(this.long0 + (d * (1 -\n        ds / 6 * (1 + 2 * t + c -\n        ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n        ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n    }\n    else {\n      lat = HALF_PI * sign(y);\n      lon = 0;\n    }\n  }\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = [\"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function(x) {\n  var r = Math.exp(x);\n  r = (r - 1 / r) / 2;\n  return r;\n}","export default function(x, y) {\n  x = Math.abs(x);\n  y = Math.abs(y);\n  var a = Math.max(x, y);\n  var b = Math.min(x, y) / (a ? a : 1);\n\n  return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","export default function(x) {\n  var y = 1 + x;\n  var z = y - 1;\n\n  return z === 0 ? x : x * Math.log(y) / z;\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n  var y = Math.abs(x);\n  y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n  return x < 0 ? -y : y;\n}\n","export default function(pp, B) {\n  var cos_2B = 2 * Math.cos(2 * B);\n  var i = pp.length - 1;\n  var h1 = pp[i];\n  var h2 = 0;\n  var h;\n\n  while (--i >= 0) {\n    h = -h2 + cos_2B * h1 + pp[i];\n    h2 = h1;\n    h1 = h;\n  }\n\n  return (B + h * Math.sin(2 * B));\n}\n","export default function(pp, arg_r) {\n  var r = 2 * Math.cos(arg_r);\n  var i = pp.length - 1;\n  var hr1 = pp[i];\n  var hr2 = 0;\n  var hr;\n\n  while (--i >= 0) {\n    hr = -hr2 + r * hr1 + pp[i];\n    hr2 = hr1;\n    hr1 = hr;\n  }\n\n  return Math.sin(arg_r) * hr;\n}\n","export default function(x) {\n  var r = Math.exp(x);\n  r = (r + 1 / r) / 2;\n  return r;\n}","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n  var sin_arg_r = Math.sin(arg_r);\n  var cos_arg_r = Math.cos(arg_r);\n  var sinh_arg_i = sinh(arg_i);\n  var cosh_arg_i = cosh(arg_i);\n  var r = 2 * cos_arg_r * cosh_arg_i;\n  var i = -2 * sin_arg_r * sinh_arg_i;\n  var j = pp.length - 1;\n  var hr = pp[j];\n  var hi1 = 0;\n  var hr1 = 0;\n  var hi = 0;\n  var hr2;\n  var hi2;\n\n  while (--j >= 0) {\n    hr2 = hr1;\n    hi2 = hi1;\n    hr1 = hr;\n    hi1 = hi;\n    hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n    hi = -hi2 + i * hr1 + r * hi1;\n  }\n\n  r = sin_arg_r * cosh_arg_i;\n  i = cos_arg_r * sinh_arg_i;\n\n  return [r * hr - i * hi, r * hi + i * hr];\n}\n","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n  if (this.es === undefined || this.es <= 0) {\n    throw new Error('incorrect elliptical usage');\n  }\n\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n  this.cgb = [];\n  this.cbg = [];\n  this.utg = [];\n  this.gtu = [];\n\n  var f = this.es / (1 + Math.sqrt(1 - this.es));\n  var n = f / (2 - f);\n  var np = n;\n\n  this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n  this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n  np = np * n;\n  this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n  this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n  np = np * n;\n  this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n  this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n  np = np * n;\n  this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n  this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n  np = np * n;\n  this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n  this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n  np = np * n;\n  this.cgb[5] = np * (601676 / 22275);\n  this.cbg[5] = np * (444337 / 155925);\n\n  np = Math.pow(n, 2);\n  this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n  this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n  this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n  this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n  this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n  np = np * n;\n  this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n  this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n  np = np * n;\n  this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n  this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n  np = np * n;\n  this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n  this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n  np = np * n;\n  this.utg[5] = np * (-20648693 / 638668800);\n  this.gtu[5] = np * (212378941 / 319334400);\n\n  var Z = gatg(this.cbg, this.lat0);\n  this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n  var Ce = adjust_lon(p.x - this.long0);\n  var Cn = p.y;\n\n  Cn = gatg(this.cbg, Cn);\n  var sin_Cn = Math.sin(Cn);\n  var cos_Cn = Math.cos(Cn);\n  var sin_Ce = Math.sin(Ce);\n  var cos_Ce = Math.cos(Ce);\n\n  Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n  Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n  Ce = asinhy(Math.tan(Ce));\n\n  var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n  Cn = Cn + tmp[0];\n  Ce = Ce + tmp[1];\n\n  var x;\n  var y;\n\n  if (Math.abs(Ce) <= 2.623395162778) {\n    x = this.a * (this.Qn * Ce) + this.x0;\n    y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n  }\n  else {\n    x = Infinity;\n    y = Infinity;\n  }\n\n  p.x = x;\n  p.y = y;\n\n  return p;\n}\n\nexport function inverse(p) {\n  var Ce = (p.x - this.x0) * (1 / this.a);\n  var Cn = (p.y - this.y0) * (1 / this.a);\n\n  Cn = (Cn - this.Zb) / this.Qn;\n  Ce = Ce / this.Qn;\n\n  var lon;\n  var lat;\n\n  if (Math.abs(Ce) <= 2.623395162778) {\n    var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n    Cn = Cn + tmp[0];\n    Ce = Ce + tmp[1];\n    Ce = Math.atan(sinh(Ce));\n\n    var sin_Cn = Math.sin(Cn);\n    var cos_Cn = Math.cos(Cn);\n    var sin_Ce = Math.sin(Ce);\n    var cos_Ce = Math.cos(Ce);\n\n    Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n    Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n    lon = adjust_lon(Ce + this.long0);\n    lat = gatg(this.cgb, Cn);\n  }\n  else {\n    lon = Infinity;\n    lat = Infinity;\n  }\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n  if (zone === undefined) {\n    zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n    if (zone < 0) {\n      return 0;\n    } else if (zone > 60) {\n      return 60;\n    }\n  }\n  return zone;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n  var zone = adjust_zone(this.zone, this.long0);\n  if (zone === undefined) {\n    throw new Error('unknown utm zone');\n  }\n  this.lat0 = 0;\n  this.long0 =  ((6 * Math.abs(zone)) - 183) * D2R;\n  this.x0 = 500000;\n  this.y0 = this.utmSouth ? 10000000 : 0;\n  this.k0 = 0.9996;\n\n  etmerc.init.apply(this);\n  this.forward = etmerc.forward;\n  this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n  init: init,\n  names: names,\n  dependsOn: dependsOn\n};\n","export default function(esinp, exp) {\n  return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\n  var sphi = Math.sin(this.lat0);\n  var cphi = Math.cos(this.lat0);\n  cphi *= cphi;\n  this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n  this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n  this.phic0 = Math.asin(sphi / this.C);\n  this.ratexp = 0.5 * this.C * this.e;\n  this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n  p.x = this.C * lon;\n  return p;\n}\n\nexport function inverse(p) {\n  var DEL_TOL = 1e-14;\n  var lon = p.x / this.C;\n  var lat = p.y;\n  var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n  for (var i = MAX_ITER; i > 0; --i) {\n    lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n    if (Math.abs(lat - p.y) < DEL_TOL) {\n      break;\n    }\n    p.y = lat;\n  }\n  /* convergence failed */\n  if (!i) {\n    return null;\n  }\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"gauss\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n  gauss.init.apply(this);\n  if (!this.rc) {\n    return;\n  }\n  this.sinc0 = Math.sin(this.phic0);\n  this.cosc0 = Math.cos(this.phic0);\n  this.R2 = 2 * this.rc;\n  if (!this.title) {\n    this.title = \"Oblique Stereographic Alternative\";\n  }\n}\n\nexport function forward(p) {\n  var sinc, cosc, cosl, k;\n  p.x = adjust_lon(p.x - this.long0);\n  gauss.forward.apply(this, [p]);\n  sinc = Math.sin(p.y);\n  cosc = Math.cos(p.y);\n  cosl = Math.cos(p.x);\n  k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n  p.x = k * cosc * Math.sin(p.x);\n  p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n  p.x = this.a * p.x + this.x0;\n  p.y = this.a * p.y + this.y0;\n  return p;\n}\n\nexport function inverse(p) {\n  var sinc, cosc, lon, lat, rho;\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  p.x /= this.k0;\n  p.y /= this.k0;\n  if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n    var c = 2 * Math.atan2(rho, this.R2);\n    sinc = Math.sin(c);\n    cosc = Math.cos(c);\n    lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n    lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n  }\n  else {\n    lat = this.phic0;\n    lon = 0;\n  }\n\n  p.x = lon;\n  p.y = lat;\n  gauss.inverse.apply(this, [p]);\n  p.x = adjust_lon(p.x + this.long0);\n  return p;\n}\n\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(phit, sinphi, eccen) {\n  sinphi *= eccen;\n  return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\nexport function init() {\n  this.coslat0 = Math.cos(this.lat0);\n  this.sinlat0 = Math.sin(this.lat0);\n  if (this.sphere) {\n    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n      this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n    }\n  }\n  else {\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      if (this.lat0 > 0) {\n        //North pole\n        //trace('stere:north pole');\n        this.con = 1;\n      }\n      else {\n        //South pole\n        //trace('stere:south pole');\n        this.con = -1;\n      }\n    }\n    this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n      this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n    }\n    this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n    this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n    this.cosX0 = Math.cos(this.X0);\n    this.sinX0 = Math.sin(this.X0);\n  }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var sinlat = Math.sin(lat);\n  var coslat = Math.cos(lat);\n  var A, X, sinX, cosX, ts, rh;\n  var dlon = adjust_lon(lon - this.long0);\n\n  if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n    //case of the origine point\n    //trace('stere:this is the origin point');\n    p.x = NaN;\n    p.y = NaN;\n    return p;\n  }\n  if (this.sphere) {\n    //trace('stere:sphere case');\n    A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n    p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n    p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n    return p;\n  }\n  else {\n    X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n    cosX = Math.cos(X);\n    sinX = Math.sin(X);\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n      rh = 2 * this.a * this.k0 * ts / this.cons;\n      p.x = this.x0 + rh * Math.sin(lon - this.long0);\n      p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n      //trace(p.toString());\n      return p;\n    }\n    else if (Math.abs(this.sinlat0) < EPSLN) {\n      //Eq\n      //trace('stere:equateur');\n      A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n      p.y = A * sinX;\n    }\n    else {\n      //other case\n      //trace('stere:normal case');\n      A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n      p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n    }\n    p.x = A * cosX * Math.sin(dlon) + this.x0;\n  }\n  //trace(p.toString());\n  return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var lon, lat, ts, ce, Chi;\n  var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n  if (this.sphere) {\n    var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n    lon = this.long0;\n    lat = this.lat0;\n    if (rh <= EPSLN) {\n      p.x = lon;\n      p.y = lat;\n      return p;\n    }\n    lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n    if (Math.abs(this.coslat0) < EPSLN) {\n      if (this.lat0 > 0) {\n        lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n      }\n      else {\n        lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n      }\n    }\n    else {\n      lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n    }\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  else {\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      if (rh <= EPSLN) {\n        lat = this.lat0;\n        lon = this.long0;\n        p.x = lon;\n        p.y = lat;\n        //trace(p.toString());\n        return p;\n      }\n      p.x *= this.con;\n      p.y *= this.con;\n      ts = rh * this.cons / (2 * this.a * this.k0);\n      lat = this.con * phi2z(this.e, ts);\n      lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n    }\n    else {\n      ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n      lon = this.long0;\n      if (rh <= EPSLN) {\n        Chi = this.X0;\n      }\n      else {\n        Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n        lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n      }\n      lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n    }\n  }\n  p.x = lon;\n  p.y = lat;\n\n  //trace(p.toString());\n  return p;\n\n}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  ssfn_: ssfn_\n};\n","/*\n  references:\n    Formules et constantes pour le Calcul pour la\n    projection cylindrique conforme à axe oblique et pour la transformation entre\n    des systèmes de référence.\n    http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n  */\n\nexport function init() {\n  var phy0 = this.lat0;\n  this.lambda0 = this.long0;\n  var sinPhy0 = Math.sin(phy0);\n  var semiMajorAxis = this.a;\n  var invF = this.rf;\n  var flattening = 1 / invF;\n  var e2 = 2 * flattening - Math.pow(flattening, 2);\n  var e = this.e = Math.sqrt(e2);\n  this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n  this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n  this.b0 = Math.asin(sinPhy0 / this.alpha);\n  var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n  var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n  var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n  this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n  var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n  var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n  var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n  // spheric latitude\n  var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n  // spheric longitude\n  var I = this.alpha * (p.x - this.lambda0);\n\n  // psoeudo equatorial rotation\n  var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n  var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n  p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n  p.x = this.R * rotI + this.x0;\n  return p;\n}\n\nexport function inverse(p) {\n  var Y = p.x - this.x0;\n  var X = p.y - this.y0;\n\n  var rotI = Y / this.R;\n  var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n  var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n  var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n  var lambda = this.lambda0 + I / this.alpha;\n\n  var S = 0;\n  var phy = b;\n  var prevPhy = -1000;\n  var iteration = 0;\n  while (Math.abs(phy - prevPhy) > 0.0000001) {\n    if (++iteration > 20) {\n      //...reportError(\"omercFwdInfinity\");\n      return;\n    }\n    //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n    S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n    prevPhy = phy;\n    phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n  }\n\n  p.x = lambda;\n  p.y = phy;\n  return p;\n}\n\nexport var names = [\"somerc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {EPSLN, HALF_PI, FORTPI} from '../constants/values';\n\n/* Initialize the Oblique Mercator  projection\n    ------------------------------------------*/\nexport function init() {\n  this.no_off = this.no_off || false;\n  this.no_rot = this.no_rot || false;\n\n  if (isNaN(this.k0)) {\n    this.k0 = 1;\n  }\n  var sinlat = Math.sin(this.lat0);\n  var coslat = Math.cos(this.lat0);\n  var con = this.e * sinlat;\n\n  this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));\n  this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);\n  var t0 = tsfnz(this.e, this.lat0, sinlat);\n  var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));\n  if (dl * dl < 1) {\n    dl = 1;\n  }\n  var fl;\n  var gl;\n  if (!isNaN(this.longc)) {\n    //Central point and azimuth method\n\n    if (this.lat0 >= 0) {\n      fl = dl + Math.sqrt(dl * dl - 1);\n    }\n    else {\n      fl = dl - Math.sqrt(dl * dl - 1);\n    }\n    this.el = fl * Math.pow(t0, this.bl);\n    gl = 0.5 * (fl - 1 / fl);\n    this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);\n    this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;\n\n  }\n  else {\n    //2 points method\n    var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));\n    var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));\n    if (this.lat0 >= 0) {\n      this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n    }\n    else {\n      this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n    }\n    var hl = Math.pow(t1, this.bl);\n    var ll = Math.pow(t2, this.bl);\n    fl = this.el / hl;\n    gl = 0.5 * (fl - 1 / fl);\n    var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);\n    var pl = (ll - hl) / (ll + hl);\n    var dlon12 = adjust_lon(this.long1 - this.long2);\n    this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;\n    this.long0 = adjust_lon(this.long0);\n    var dlon10 = adjust_lon(this.long1 - this.long0);\n    this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);\n    this.alpha = Math.asin(dl * Math.sin(this.gamma0));\n  }\n\n  if (this.no_off) {\n    this.uc = 0;\n  }\n  else {\n    if (this.lat0 >= 0) {\n      this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n    }\n    else {\n      this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n    }\n  }\n\n}\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n    ----------------------------------------------------------*/\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var dlon = adjust_lon(lon - this.long0);\n  var us, vs;\n  var con;\n  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n    if (lat > 0) {\n      con = -1;\n    }\n    else {\n      con = 1;\n    }\n    vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));\n    us = -1 * con * HALF_PI * this.al / this.bl;\n  }\n  else {\n    var t = tsfnz(this.e, lat, Math.sin(lat));\n    var ql = this.el / Math.pow(t, this.bl);\n    var sl = 0.5 * (ql - 1 / ql);\n    var tl = 0.5 * (ql + 1 / ql);\n    var vl = Math.sin(this.bl * (dlon));\n    var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;\n    if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {\n      vs = Number.POSITIVE_INFINITY;\n    }\n    else {\n      vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;\n    }\n    if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {\n      us = this.al * this.bl * (dlon);\n    }\n    else {\n      us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;\n    }\n  }\n\n  if (this.no_rot) {\n    p.x = this.x0 + us;\n    p.y = this.y0 + vs;\n  }\n  else {\n\n    us -= this.uc;\n    p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);\n    p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);\n  }\n  return p;\n}\n\nexport function inverse(p) {\n  var us, vs;\n  if (this.no_rot) {\n    vs = p.y - this.y0;\n    us = p.x - this.x0;\n  }\n  else {\n    vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);\n    us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);\n    us += this.uc;\n  }\n  var qp = Math.exp(-1 * this.bl * vs / this.al);\n  var sp = 0.5 * (qp - 1 / qp);\n  var tp = 0.5 * (qp + 1 / qp);\n  var vp = Math.sin(this.bl * us / this.al);\n  var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;\n  var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);\n  if (Math.abs(up - 1) < EPSLN) {\n    p.x = this.long0;\n    p.y = HALF_PI;\n  }\n  else if (Math.abs(up + 1) < EPSLN) {\n    p.x = this.long0;\n    p.y = -1 * HALF_PI;\n  }\n  else {\n    p.y = phi2z(this.e, ts);\n    p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);\n  }\n  return p;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"omerc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n\n  // array of:  r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north\n  //double c_lat;                   /* center latitude                      */\n  //double c_lon;                   /* center longitude                     */\n  //double lat1;                    /* first standard parallel              */\n  //double lat2;                    /* second standard parallel             */\n  //double r_maj;                   /* major axis                           */\n  //double r_min;                   /* minor axis                           */\n  //double false_east;              /* x offset in meters                   */\n  //double false_north;             /* y offset in meters                   */\n\n  if (!this.lat2) {\n    this.lat2 = this.lat1;\n  } //if lat2 is not defined\n  if (!this.k0) {\n    this.k0 = 1;\n  }\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  // Standard Parallels cannot be equal and on opposite sides of the equator\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n\n  var temp = this.b / this.a;\n  this.e = Math.sqrt(1 - temp * temp);\n\n  var sin1 = Math.sin(this.lat1);\n  var cos1 = Math.cos(this.lat1);\n  var ms1 = msfnz(this.e, sin1, cos1);\n  var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n  var sin2 = Math.sin(this.lat2);\n  var cos2 = Math.cos(this.lat2);\n  var ms2 = msfnz(this.e, sin2, cos2);\n  var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n  var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n    this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n  }\n  else {\n    this.ns = sin1;\n  }\n  if (isNaN(this.ns)) {\n    this.ns = sin1;\n  }\n  this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n  this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n  if (!this.title) {\n    this.title = \"Lambert Conformal Conic\";\n  }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n  var lon = p.x;\n  var lat = p.y;\n\n  // singular cases :\n  if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n    lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n  }\n\n  var con = Math.abs(Math.abs(lat) - HALF_PI);\n  var ts, rh1;\n  if (con > EPSLN) {\n    ts = tsfnz(this.e, lat, Math.sin(lat));\n    rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n  }\n  else {\n    con = lat * this.ns;\n    if (con <= 0) {\n      return null;\n    }\n    rh1 = 0;\n  }\n  var theta = this.ns * adjust_lon(lon - this.long0);\n  p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n  p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n  return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n  var rh1, con, ts;\n  var lat, lon;\n  var x = (p.x - this.x0) / this.k0;\n  var y = (this.rh - (p.y - this.y0) / this.k0);\n  if (this.ns > 0) {\n    rh1 = Math.sqrt(x * x + y * y);\n    con = 1;\n  }\n  else {\n    rh1 = -Math.sqrt(x * x + y * y);\n    con = -1;\n  }\n  var theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2((con * x), (con * y));\n  }\n  if ((rh1 !== 0) || (this.ns > 0)) {\n    con = 1 / this.ns;\n    ts = Math.pow((rh1 / (this.a * this.f0)), con);\n    lat = phi2z(this.e, ts);\n    if (lat === -9999) {\n      return null;\n    }\n  }\n  else {\n    lat = -HALF_PI;\n  }\n  lon = adjust_lon(theta / this.ns + this.long0);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Lambert Tangential Conformal Conic Projection\", \"Lambert_Conformal_Conic\", \"Lambert_Conformal_Conic_2SP\", \"lcc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n  this.a = 6377397.155;\n  this.es = 0.006674372230614;\n  this.e = Math.sqrt(this.es);\n  if (!this.lat0) {\n    this.lat0 = 0.863937979737193;\n  }\n  if (!this.long0) {\n    this.long0 = 0.7417649320975901 - 0.308341501185665;\n  }\n  /* if scale not set default to 0.9999 */\n  if (!this.k0) {\n    this.k0 = 0.9999;\n  }\n  this.s45 = 0.785398163397448; /* 45 */\n  this.s90 = 2 * this.s45;\n  this.fi0 = this.lat0;\n  this.e2 = this.es;\n  this.e = Math.sqrt(this.e2);\n  this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n  this.uq = 1.04216856380474;\n  this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n  this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n  this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n  this.k1 = this.k0;\n  this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n  this.s0 = 1.37008346281555;\n  this.n = Math.sin(this.s0);\n  this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n  this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n  var gfi, u, deltav, s, d, eps, ro;\n  var lon = p.x;\n  var lat = p.y;\n  var delta_lon = adjust_lon(lon - this.long0);\n  /* Transformation */\n  gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n  u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n  deltav = -delta_lon * this.alfa;\n  s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n  d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n  eps = this.n * d;\n  ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n  p.y = ro * Math.cos(eps) / 1;\n  p.x = ro * Math.sin(eps) / 1;\n\n  if (!this.czech) {\n    p.y *= -1;\n    p.x *= -1;\n  }\n  return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n  var u, deltav, s, d, eps, ro, fi1;\n  var ok;\n\n  /* Transformation */\n  /* revert y, x*/\n  var tmp = p.x;\n  p.x = p.y;\n  p.y = tmp;\n  if (!this.czech) {\n    p.y *= -1;\n    p.x *= -1;\n  }\n  ro = Math.sqrt(p.x * p.x + p.y * p.y);\n  eps = Math.atan2(p.y, p.x);\n  d = eps / Math.sin(this.s0);\n  s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n  u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n  deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n  p.x = this.long0 - deltav / this.alfa;\n  fi1 = u;\n  ok = 0;\n  var iter = 0;\n  do {\n    p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n    if (Math.abs(fi1 - p.y) < 0.0000000001) {\n      ok = 1;\n    }\n    fi1 = p.y;\n    iter += 1;\n  } while (ok === 0 && iter < 15);\n  if (iter >= 15) {\n    return null;\n  }\n\n  return (p);\n}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function(e0, e1, e2, e3, phi) {\n  return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}","export default function(x) {\n  return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n  return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n  return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n  return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n  var temp = e * sinphi;\n  return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n  return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function(ml, e0, e1, e2, e3) {\n  var phi;\n  var dphi;\n\n  phi = ml / e0;\n  for (var i = 0; i < 15; i++) {\n    dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n\n  //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n  return NaN;\n}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\n  if (!this.sphere) {\n    this.e0 = e0fn(this.es);\n    this.e1 = e1fn(this.es);\n    this.e2 = e2fn(this.es);\n    this.e3 = e3fn(this.es);\n    this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n  }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n  -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n  /* Forward equations\n      -----------------*/\n  var x, y;\n  var lam = p.x;\n  var phi = p.y;\n  lam = adjust_lon(lam - this.long0);\n\n  if (this.sphere) {\n    x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n    y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n  }\n  else {\n    //ellipsoid\n    var sinphi = Math.sin(phi);\n    var cosphi = Math.cos(phi);\n    var nl = gN(this.a, this.e, sinphi);\n    var tl = Math.tan(phi) * Math.tan(phi);\n    var al = lam * Math.cos(phi);\n    var asq = al * al;\n    var cl = this.es * cosphi * cosphi / (1 - this.es);\n    var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n    x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n    y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n  }\n\n  p.x = x + this.x0;\n  p.y = y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  -----------------*/\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var x = p.x / this.a;\n  var y = p.y / this.a;\n  var phi, lam;\n\n  if (this.sphere) {\n    var dd = y + this.lat0;\n    phi = Math.asin(Math.sin(dd) * Math.cos(x));\n    lam = Math.atan2(Math.tan(x), Math.cos(dd));\n  }\n  else {\n    /* ellipsoid */\n    var ml1 = this.ml0 / this.a + y;\n    var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n    if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n      p.x = this.long0;\n      p.y = HALF_PI;\n      if (y < 0) {\n        p.y *= -1;\n      }\n      return p;\n    }\n    var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n    var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n    var tl1 = Math.pow(Math.tan(phi1), 2);\n    var dl = x * this.a / nl1;\n    var dsq = dl * dl;\n    phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n    lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n  }\n\n  p.x = adjust_lon(lam + this.long0);\n  p.y = adjust_lat(phi);\n  return p;\n\n}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function(eccent, sinphi) {\n  var con;\n  if (eccent > 1.0e-7) {\n    con = eccent * sinphi;\n    return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n  }\n  else {\n    return (2 * sinphi);\n  }\n}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/*\n  reference\n    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n  */\n\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n  ------------------------------------------------------*/\nexport function init() {\n  var t = Math.abs(this.lat0);\n  if (Math.abs(t - HALF_PI) < EPSLN) {\n    this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n  }\n  else if (Math.abs(t) < EPSLN) {\n    this.mode = this.EQUIT;\n  }\n  else {\n    this.mode = this.OBLIQ;\n  }\n  if (this.es > 0) {\n    var sinphi;\n\n    this.qp = qsfnz(this.e, 1);\n    this.mmf = 0.5 / (1 - this.es);\n    this.apa = authset(this.es);\n    switch (this.mode) {\n    case this.N_POLE:\n      this.dd = 1;\n      break;\n    case this.S_POLE:\n      this.dd = 1;\n      break;\n    case this.EQUIT:\n      this.rq = Math.sqrt(0.5 * this.qp);\n      this.dd = 1 / this.rq;\n      this.xmf = 1;\n      this.ymf = 0.5 * this.qp;\n      break;\n    case this.OBLIQ:\n      this.rq = Math.sqrt(0.5 * this.qp);\n      sinphi = Math.sin(this.lat0);\n      this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n      this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n      this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n      this.ymf = (this.xmf = this.rq) / this.dd;\n      this.xmf *= this.dd;\n      break;\n    }\n  }\n  else {\n    if (this.mode === this.OBLIQ) {\n      this.sinph0 = Math.sin(this.lat0);\n      this.cosph0 = Math.cos(this.lat0);\n    }\n  }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n  -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n  /* Forward equations\n      -----------------*/\n  var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n  var lam = p.x;\n  var phi = p.y;\n\n  lam = adjust_lon(lam - this.long0);\n  if (this.sphere) {\n    sinphi = Math.sin(phi);\n    cosphi = Math.cos(phi);\n    coslam = Math.cos(lam);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n      if (y <= EPSLN) {\n        return null;\n      }\n      y = Math.sqrt(2 / y);\n      x = y * cosphi * Math.sin(lam);\n      y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n    }\n    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n      if (this.mode === this.N_POLE) {\n        coslam = -coslam;\n      }\n      if (Math.abs(phi + this.lat0) < EPSLN) {\n        return null;\n      }\n      y = FORTPI - phi * 0.5;\n      y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n      x = y * Math.sin(lam);\n      y *= coslam;\n    }\n  }\n  else {\n    sinb = 0;\n    cosb = 0;\n    b = 0;\n    coslam = Math.cos(lam);\n    sinlam = Math.sin(lam);\n    sinphi = Math.sin(phi);\n    q = qsfnz(this.e, sinphi);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      sinb = q / this.qp;\n      cosb = Math.sqrt(1 - sinb * sinb);\n    }\n    switch (this.mode) {\n    case this.OBLIQ:\n      b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n      break;\n    case this.EQUIT:\n      b = 1 + cosb * coslam;\n      break;\n    case this.N_POLE:\n      b = HALF_PI + phi;\n      q = this.qp - q;\n      break;\n    case this.S_POLE:\n      b = phi - HALF_PI;\n      q = this.qp + q;\n      break;\n    }\n    if (Math.abs(b) < EPSLN) {\n      return null;\n    }\n    switch (this.mode) {\n    case this.OBLIQ:\n    case this.EQUIT:\n      b = Math.sqrt(2 / b);\n      if (this.mode === this.OBLIQ) {\n        y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n      }\n      else {\n        y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n      }\n      x = this.xmf * b * cosb * sinlam;\n      break;\n    case this.N_POLE:\n    case this.S_POLE:\n      if (q >= 0) {\n        x = (b = Math.sqrt(q)) * sinlam;\n        y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n      }\n      else {\n        x = y = 0;\n      }\n      break;\n    }\n  }\n\n  p.x = this.a * x + this.x0;\n  p.y = this.a * y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  -----------------*/\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var x = p.x / this.a;\n  var y = p.y / this.a;\n  var lam, phi, cCe, sCe, q, rho, ab;\n  if (this.sphere) {\n    var cosz = 0,\n      rh, sinz = 0;\n\n    rh = Math.sqrt(x * x + y * y);\n    phi = rh * 0.5;\n    if (phi > 1) {\n      return null;\n    }\n    phi = 2 * Math.asin(phi);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      sinz = Math.sin(phi);\n      cosz = Math.cos(phi);\n    }\n    switch (this.mode) {\n    case this.EQUIT:\n      phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n      x *= sinz;\n      y = cosz * rh;\n      break;\n    case this.OBLIQ:\n      phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n      x *= sinz * this.cosph0;\n      y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n      break;\n    case this.N_POLE:\n      y = -y;\n      phi = HALF_PI - phi;\n      break;\n    case this.S_POLE:\n      phi -= HALF_PI;\n      break;\n    }\n    lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n  }\n  else {\n    ab = 0;\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      x /= this.dd;\n      y *= this.dd;\n      rho = Math.sqrt(x * x + y * y);\n      if (rho < EPSLN) {\n        p.x = this.long0;\n        p.y = this.lat0;\n        return p;\n      }\n      sCe = 2 * Math.asin(0.5 * rho / this.rq);\n      cCe = Math.cos(sCe);\n      x *= (sCe = Math.sin(sCe));\n      if (this.mode === this.OBLIQ) {\n        ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n        q = this.qp * ab;\n        y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n      }\n      else {\n        ab = y * sCe / rho;\n        q = this.qp * ab;\n        y = rho * cCe;\n      }\n    }\n    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n      if (this.mode === this.N_POLE) {\n        y = -y;\n      }\n      q = (x * x + y * y);\n      if (!q) {\n        p.x = this.long0;\n        p.y = this.lat0;\n        return p;\n      }\n      ab = 1 - q / this.qp;\n      if (this.mode === this.S_POLE) {\n        ab = -ab;\n      }\n    }\n    lam = Math.atan2(x, y);\n    phi = authlat(Math.asin(ab), this.apa);\n  }\n\n  p.x = adjust_lon(this.long0 + lam);\n  p.y = phi;\n  return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n  var t;\n  var APA = [];\n  APA[0] = es * P00;\n  t = es * es;\n  APA[0] += t * P01;\n  APA[1] = t * P10;\n  t *= es;\n  APA[0] += t * P02;\n  APA[1] += t * P11;\n  APA[2] = t * P20;\n  return APA;\n}\n\nfunction authlat(beta, APA) {\n  var t = beta + beta;\n  return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  S_POLE: S_POLE,\n  N_POLE: N_POLE,\n  EQUIT: EQUIT,\n  OBLIQ: OBLIQ\n};\n","export default function(x) {\n  if (Math.abs(x) > 1) {\n    x = (x > 1) ? 1 : -1;\n  }\n  return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2);\n  this.e3 = Math.sqrt(this.es);\n\n  this.sin_po = Math.sin(this.lat1);\n  this.cos_po = Math.cos(this.lat1);\n  this.t1 = this.sin_po;\n  this.con = this.sin_po;\n  this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n  this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n  this.sin_po = Math.sin(this.lat2);\n  this.cos_po = Math.cos(this.lat2);\n  this.t2 = this.sin_po;\n  this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n  this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n  this.sin_po = Math.sin(this.lat0);\n  this.cos_po = Math.cos(this.lat0);\n  this.t3 = this.sin_po;\n  this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n    this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n  }\n  else {\n    this.ns0 = this.con;\n  }\n  this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n  this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n  -------------------------------------------------------------------*/\nexport function forward(p) {\n\n  var lon = p.x;\n  var lat = p.y;\n\n  this.sin_phi = Math.sin(lat);\n  this.cos_phi = Math.cos(lat);\n\n  var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);\n  var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n  var theta = this.ns0 * adjust_lon(lon - this.long0);\n  var x = rh1 * Math.sin(theta) + this.x0;\n  var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh1, qs, con, theta, lon, lat;\n\n  p.x -= this.x0;\n  p.y = this.rh - p.y + this.y0;\n  if (this.ns0 >= 0) {\n    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n    con = 1;\n  }\n  else {\n    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n    con = -1;\n  }\n  theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2(con * p.x, con * p.y);\n  }\n  con = rh1 * this.ns0 / this.a;\n  if (this.sphere) {\n    lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n  }\n  else {\n    qs = (this.c - con * con) / this.ns0;\n    lat = this.phi1z(this.e3, qs);\n  }\n\n  lon = adjust_lon(theta / this.ns0 + this.long0);\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n   Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexport function phi1z(eccent, qs) {\n  var sinphi, cosphi, con, com, dphi;\n  var phi = asinz(0.5 * qs);\n  if (eccent < EPSLN) {\n    return phi;\n  }\n\n  var eccnts = eccent * eccent;\n  for (var i = 1; i <= 25; i++) {\n    sinphi = Math.sin(phi);\n    cosphi = Math.cos(phi);\n    con = eccent * sinphi;\n    com = 1 - con * con;\n    dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n    phi = phi + dphi;\n    if (Math.abs(dphi) <= 1e-7) {\n      return phi;\n    }\n  }\n  return null;\n}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n  reference:\n    Wolfram Mathworld \"Gnomonic Projection\"\n    http://mathworld.wolfram.com/GnomonicProjection.html\n    Accessed: 12th November 2009\n  */\nexport function init() {\n\n  /* Place parameters in static storage for common use\n      -------------------------------------------------*/\n  this.sin_p14 = Math.sin(this.lat0);\n  this.cos_p14 = Math.cos(this.lat0);\n  // Approximation for projecting points to the horizon (infinity)\n  this.infinity_dist = 1000 * this.a;\n  this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n    ---------------------------------------------------*/\nexport function forward(p) {\n  var sinphi, cosphi; /* sin and cos value        */\n  var dlon; /* delta longitude value      */\n  var coslon; /* cos of longitude        */\n  var ksp; /* scale factor          */\n  var g;\n  var x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      -----------------*/\n  dlon = adjust_lon(lon - this.long0);\n\n  sinphi = Math.sin(lat);\n  cosphi = Math.cos(lat);\n\n  coslon = Math.cos(dlon);\n  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n  ksp = 1;\n  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n    x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n  }\n  else {\n\n    // Point is in the opposing hemisphere and is unprojectable\n    // We still need to return a reasonable point, so we project\n    // to infinity, on a bearing\n    // equivalent to the northern hemisphere equivalent\n    // This is a reasonable approximation for short shapes and lines that\n    // straddle the horizon.\n\n    x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n    y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh; /* Rho */\n  var sinc, cosc;\n  var c;\n  var lon, lat;\n\n  /* Inverse equations\n      -----------------*/\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  p.x /= this.k0;\n  p.y /= this.k0;\n\n  if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n    c = Math.atan2(rh, this.rc);\n    sinc = Math.sin(c);\n    cosc = Math.cos(c);\n\n    lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n    lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n    lon = adjust_lon(this.long0 + lon);\n  }\n  else {\n    lat = this.phic0;\n    lon = 0;\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"gnom\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, q) {\n  var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n  if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n    if (q < 0) {\n      return (-1 * HALF_PI);\n    }\n    else {\n      return HALF_PI;\n    }\n  }\n  //var phi = 0.5* q/(1-eccent*eccent);\n  var phi = Math.asin(0.5 * q);\n  var dphi;\n  var sin_phi;\n  var cos_phi;\n  var con;\n  for (var i = 0; i < 30; i++) {\n    sin_phi = Math.sin(phi);\n    cos_phi = Math.cos(phi);\n    con = eccent * sin_phi;\n    dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n\n  //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n  return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/*\n  reference:\n    \"Cartographic Projection Procedures for the UNIX Environment-\n    A User's Manual\" by Gerald I. Evenden,\n    USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexport function init() {\n  //no-op\n  if (!this.sphere) {\n    this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n  }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n    ------------------------------------------------------------*/\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var x, y;\n  /* Forward equations\n      -----------------*/\n  var dlon = adjust_lon(lon - this.long0);\n  if (this.sphere) {\n    x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n    y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n  }\n  else {\n    var qs = qsfnz(this.e, Math.sin(lat));\n    x = this.x0 + this.a * this.k0 * dlon;\n    y = this.y0 + this.a * qs * 0.5 / this.k0;\n  }\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n    ------------------------------------------------------------*/\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var lon, lat;\n\n  if (this.sphere) {\n    lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n    lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n  }\n  else {\n    lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n    lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"cea\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.lat0 = this.lat0 || 0;\n  this.long0 = this.long0 || 0;\n  this.lat_ts = this.lat_ts || 0;\n  this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n  this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n  var lon = p.x;\n  var lat = p.y;\n\n  var dlon = adjust_lon(lon - this.long0);\n  var dlat = adjust_lat(lat - this.lat0);\n  p.x = this.x0 + (this.a * dlon * this.rc);\n  p.y = this.y0 + (this.a * dlat);\n  return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n  var x = p.x;\n  var y = p.y;\n\n  p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n  p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n  return p;\n}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\n  /* Place parameters in static storage for common use\n      -------------------------------------------------*/\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n  this.e = Math.sqrt(this.es);\n  this.e0 = e0fn(this.es);\n  this.e1 = e1fn(this.es);\n  this.e2 = e2fn(this.es);\n  this.e3 = e3fn(this.es);\n  this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n    ---------------------------------------------------*/\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var x, y, el;\n  var dlon = adjust_lon(lon - this.long0);\n  el = dlon * Math.sin(lat);\n  if (this.sphere) {\n    if (Math.abs(lat) <= EPSLN) {\n      x = this.a * dlon;\n      y = -1 * this.a * this.lat0;\n    }\n    else {\n      x = this.a * Math.sin(el) / Math.tan(lat);\n      y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n    }\n  }\n  else {\n    if (Math.abs(lat) <= EPSLN) {\n      x = this.a * dlon;\n      y = -1 * this.ml0;\n    }\n    else {\n      var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n      x = nl * Math.sin(el);\n      y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n    }\n\n  }\n  p.x = x + this.x0;\n  p.y = y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  -----------------*/\nexport function inverse(p) {\n  var lon, lat, x, y, i;\n  var al, bl;\n  var phi, dphi;\n  x = p.x - this.x0;\n  y = p.y - this.y0;\n\n  if (this.sphere) {\n    if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n      lon = adjust_lon(x / this.a + this.long0);\n      lat = 0;\n    }\n    else {\n      al = this.lat0 + y / this.a;\n      bl = x * x / this.a / this.a + al * al;\n      phi = al;\n      var tanphi;\n      for (i = MAX_ITER; i; --i) {\n        tanphi = Math.tan(phi);\n        dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n        phi += dphi;\n        if (Math.abs(dphi) <= EPSLN) {\n          lat = phi;\n          break;\n        }\n      }\n      lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n    }\n  }\n  else {\n    if (Math.abs(y + this.ml0) <= EPSLN) {\n      lat = 0;\n      lon = adjust_lon(this.long0 + x / this.a);\n    }\n    else {\n\n      al = (this.ml0 + y) / this.a;\n      bl = x * x / this.a / this.a + al * al;\n      phi = al;\n      var cl, mln, mlnp, ma;\n      var con;\n      for (i = MAX_ITER; i; --i) {\n        con = this.e * Math.sin(phi);\n        cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n        mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n        mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n        ma = mln / this.a;\n        dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n        phi -= dphi;\n        if (Math.abs(dphi) <= EPSLN) {\n          lat = phi;\n          break;\n        }\n      }\n\n      //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n      cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n      lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n    }\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\n/*\n  reference\n    Department of Land and Survey Technical Circular 1973/32\n      http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n    OSG Technical Report 4.1\n      http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n  */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n *     0 -> km accuracy\n *     1 -> m accuracy -- suitable for most mapping applications\n *     2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n  this.A = [];\n  this.A[1] = 0.6399175073;\n  this.A[2] = -0.1358797613;\n  this.A[3] = 0.063294409;\n  this.A[4] = -0.02526853;\n  this.A[5] = 0.0117879;\n  this.A[6] = -0.0055161;\n  this.A[7] = 0.0026906;\n  this.A[8] = -0.001333;\n  this.A[9] = 0.00067;\n  this.A[10] = -0.00034;\n\n  this.B_re = [];\n  this.B_im = [];\n  this.B_re[1] = 0.7557853228;\n  this.B_im[1] = 0;\n  this.B_re[2] = 0.249204646;\n  this.B_im[2] = 0.003371507;\n  this.B_re[3] = -0.001541739;\n  this.B_im[3] = 0.041058560;\n  this.B_re[4] = -0.10162907;\n  this.B_im[4] = 0.01727609;\n  this.B_re[5] = -0.26623489;\n  this.B_im[5] = -0.36249218;\n  this.B_re[6] = -0.6870983;\n  this.B_im[6] = -1.1651967;\n\n  this.C_re = [];\n  this.C_im = [];\n  this.C_re[1] = 1.3231270439;\n  this.C_im[1] = 0;\n  this.C_re[2] = -0.577245789;\n  this.C_im[2] = -0.007809598;\n  this.C_re[3] = 0.508307513;\n  this.C_im[3] = -0.112208952;\n  this.C_re[4] = -0.15094762;\n  this.C_im[4] = 0.18200602;\n  this.C_re[5] = 1.01418179;\n  this.C_im[5] = 1.64497696;\n  this.C_re[6] = 1.9660549;\n  this.C_im[6] = 2.5127645;\n\n  this.D = [];\n  this.D[1] = 1.5627014243;\n  this.D[2] = 0.5185406398;\n  this.D[3] = -0.03333098;\n  this.D[4] = -0.1052906;\n  this.D[5] = -0.0368594;\n  this.D[6] = 0.007317;\n  this.D[7] = 0.01220;\n  this.D[8] = 0.00394;\n  this.D[9] = -0.0013;\n}\n\n/**\n    New Zealand Map Grid Forward  - long/lat to x/y\n    long/lat in radians\n  */\nexport function forward(p) {\n  var n;\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lat = lat - this.lat0;\n  var delta_lon = lon - this.long0;\n\n  // 1. Calculate d_phi and d_psi    ...                          // and d_lambda\n  // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n  var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n  var d_lambda = delta_lon;\n  var d_phi_n = 1; // d_phi^0\n\n  var d_psi = 0;\n  for (n = 1; n <= 10; n++) {\n    d_phi_n = d_phi_n * d_phi;\n    d_psi = d_psi + this.A[n] * d_phi_n;\n  }\n\n  // 2. Calculate theta\n  var th_re = d_psi;\n  var th_im = d_lambda;\n\n  // 3. Calculate z\n  var th_n_re = 1;\n  var th_n_im = 0; // theta^0\n  var th_n_re1;\n  var th_n_im1;\n\n  var z_re = 0;\n  var z_im = 0;\n  for (n = 1; n <= 6; n++) {\n    th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n    th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n    th_n_re = th_n_re1;\n    th_n_im = th_n_im1;\n    z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n    z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n  }\n\n  // 4. Calculate easting and northing\n  p.x = (z_im * this.a) + this.x0;\n  p.y = (z_re * this.a) + this.y0;\n\n  return p;\n}\n\n/**\n    New Zealand Map Grid Inverse  -  x/y to long/lat\n  */\nexport function inverse(p) {\n  var n;\n  var x = p.x;\n  var y = p.y;\n\n  var delta_x = x - this.x0;\n  var delta_y = y - this.y0;\n\n  // 1. Calculate z\n  var z_re = delta_y / this.a;\n  var z_im = delta_x / this.a;\n\n  // 2a. Calculate theta - first approximation gives km accuracy\n  var z_n_re = 1;\n  var z_n_im = 0; // z^0\n  var z_n_re1;\n  var z_n_im1;\n\n  var th_re = 0;\n  var th_im = 0;\n  for (n = 1; n <= 6; n++) {\n    z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n    z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n    z_n_re = z_n_re1;\n    z_n_im = z_n_im1;\n    th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n    th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n  }\n\n  // 2b. Iterate to refine the accuracy of the calculation\n  //        0 iterations gives km accuracy\n  //        1 iteration gives m accuracy -- good enough for most mapping applications\n  //        2 iterations bives mm accuracy\n  for (var i = 0; i < this.iterations; i++) {\n    var th_n_re = th_re;\n    var th_n_im = th_im;\n    var th_n_re1;\n    var th_n_im1;\n\n    var num_re = z_re;\n    var num_im = z_im;\n    for (n = 2; n <= 6; n++) {\n      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n      th_n_re = th_n_re1;\n      th_n_im = th_n_im1;\n      num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n      num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n    }\n\n    th_n_re = 1;\n    th_n_im = 0;\n    var den_re = this.B_re[1];\n    var den_im = this.B_im[1];\n    for (n = 2; n <= 6; n++) {\n      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n      th_n_re = th_n_re1;\n      th_n_im = th_n_im1;\n      den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n      den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n    }\n\n    // Complex division\n    var den2 = den_re * den_re + den_im * den_im;\n    th_re = (num_re * den_re + num_im * den_im) / den2;\n    th_im = (num_im * den_re - num_re * den_im) / den2;\n  }\n\n  // 3. Calculate d_phi              ...                                    // and d_lambda\n  var d_psi = th_re;\n  var d_lambda = th_im;\n  var d_psi_n = 1; // d_psi^0\n\n  var d_phi = 0;\n  for (n = 1; n <= 9; n++) {\n    d_psi_n = d_psi_n * d_psi;\n    d_phi = d_phi + this.D[n] * d_psi_n;\n  }\n\n  // 4. Calculate latitude and longitude\n  // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n  var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n  var lon = this.long0 + d_lambda;\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n  reference\n    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n  */\n\n\n/* Initialize the Miller Cylindrical projection\n  -------------------------------------------*/\nexport function init() {\n  //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n    ------------------------------------------------------------*/\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      -----------------*/\n  var dlon = adjust_lon(lon - this.long0);\n  var x = this.x0 + this.a * dlon;\n  var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n    ------------------------------------------------------------*/\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n\n  var lon = adjust_lon(this.long0 + p.x / this.a);\n  var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\n  /* Place parameters in static storage for common use\n    -------------------------------------------------*/\n\n\n  if (!this.sphere) {\n    this.en = pj_enfn(this.es);\n  }\n  else {\n    this.n = 1;\n    this.m = 0;\n    this.es = 0;\n    this.C_y = Math.sqrt((this.m + 1) / this.n);\n    this.C_x = this.C_y / (this.m + 1);\n  }\n\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n  -----------------------------------------------------*/\nexport function forward(p) {\n  var x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n    -----------------*/\n  lon = adjust_lon(lon - this.long0);\n\n  if (this.sphere) {\n    if (!this.m) {\n      lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n    }\n    else {\n      var k = this.n * Math.sin(lat);\n      for (var i = MAX_ITER; i; --i) {\n        var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n        lat -= V;\n        if (Math.abs(V) < EPSLN) {\n          break;\n        }\n      }\n    }\n    x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n    y = this.a * this.C_y * lat;\n\n  }\n  else {\n\n    var s = Math.sin(lat);\n    var c = Math.cos(lat);\n    y = this.a * pj_mlfn(lat, s, c, this.en);\n    x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n  }\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var lat, temp, lon, s;\n\n  p.x -= this.x0;\n  lon = p.x / this.a;\n  p.y -= this.y0;\n  lat = p.y / this.a;\n\n  if (this.sphere) {\n    lat /= this.C_y;\n    lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n    if (this.m) {\n      lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n    }\n    else if (this.n !== 1) {\n      lat = asinz(Math.sin(lat) / this.n);\n    }\n    lon = adjust_lon(lon + this.long0);\n    lat = adjust_lat(lat);\n  }\n  else {\n    lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n    s = Math.abs(lat);\n    if (s < HALF_PI) {\n      s = Math.sin(lat);\n      temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n      //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n      lon = adjust_lon(temp);\n    }\n    else if ((s - EPSLN) < HALF_PI) {\n      lon = this.long0;\n    }\n  }\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n    ----------------------------------------------------*/\nexport function forward(p) {\n\n  /* Forward equations\n      -----------------*/\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lon = adjust_lon(lon - this.long0);\n  var theta = lat;\n  var con = Math.PI * Math.sin(lat);\n\n  /* Iterate using the Newton-Raphson method to find theta\n      -----------------------------------------------------*/\n  while (true) {\n    var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n    theta += delta_theta;\n    if (Math.abs(delta_theta) < EPSLN) {\n      break;\n    }\n  }\n  theta /= 2;\n\n  /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n       this is done here because of precision problems with \"cos(theta)\"\n       --------------------------------------------------------------------------*/\n  if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n    delta_lon = 0;\n  }\n  var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n  var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var theta;\n  var arg;\n\n  /* Inverse equations\n      -----------------*/\n  p.x -= this.x0;\n  p.y -= this.y0;\n  arg = p.y / (1.4142135623731 * this.a);\n\n  /* Because of division by zero problems, 'arg' can not be 1.  Therefore\n       a number very close to one is used instead.\n       -------------------------------------------------------------------*/\n  if (Math.abs(arg) > 0.999999999999) {\n    arg = 0.999999999999;\n  }\n  theta = Math.asin(arg);\n  var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n  if (lon < (-Math.PI)) {\n    lon = -Math.PI;\n  }\n  if (lon > Math.PI) {\n    lon = Math.PI;\n  }\n  arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n  if (Math.abs(arg) > 1) {\n    arg = 1;\n  }\n  var lat = Math.asin(arg);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n  /* Place parameters in static storage for common use\n      -------------------------------------------------*/\n  // Standard Parallels cannot be equal and on opposite sides of the equator\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n  this.lat2 = this.lat2 || this.lat1;\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2);\n  this.e = Math.sqrt(this.es);\n  this.e0 = e0fn(this.es);\n  this.e1 = e1fn(this.es);\n  this.e2 = e2fn(this.es);\n  this.e3 = e3fn(this.es);\n\n  this.sinphi = Math.sin(this.lat1);\n  this.cosphi = Math.cos(this.lat1);\n\n  this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n  this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n  if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n    this.ns = this.sinphi;\n  }\n  else {\n    this.sinphi = Math.sin(this.lat2);\n    this.cosphi = Math.cos(this.lat2);\n    this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n    this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n    this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n  }\n  this.g = this.ml1 + this.ms1 / this.ns;\n  this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n  this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n  -----------------------------------------------------------*/\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var rh1;\n\n  /* Forward equations\n      -----------------*/\n  if (this.sphere) {\n    rh1 = this.a * (this.g - lat);\n  }\n  else {\n    var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n    rh1 = this.a * (this.g - ml);\n  }\n  var theta = this.ns * adjust_lon(lon - this.long0);\n  var x = this.x0 + rh1 * Math.sin(theta);\n  var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Inverse equations\n  -----------------*/\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y = this.rh - p.y + this.y0;\n  var con, rh1, lat, lon;\n  if (this.ns >= 0) {\n    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n    con = 1;\n  }\n  else {\n    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n    con = -1;\n  }\n  var theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2(con * p.x, con * p.y);\n  }\n\n  if (this.sphere) {\n    lon = adjust_lon(this.long0 + theta / this.ns);\n    lat = adjust_lat(this.g - rh1 / this.a);\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  else {\n    var ml = this.g - rh1 / this.a;\n    lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n    lon = adjust_lon(this.long0 + theta / this.ns);\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n\n}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n  ----------------------------------------*/\nexport function init() {\n  //this.R = 6370997; //Radius of earth\n  this.R = this.a;\n}\n\nexport function forward(p) {\n\n  var lon = p.x;\n  var lat = p.y;\n\n  /* Forward equations\n    -----------------*/\n  var dlon = adjust_lon(lon - this.long0);\n  var x, y;\n\n  if (Math.abs(lat) <= EPSLN) {\n    x = this.x0 + this.R * dlon;\n    y = this.y0;\n  }\n  var theta = asinz(2 * Math.abs(lat / Math.PI));\n  if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n    x = this.x0;\n    if (lat >= 0) {\n      y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n    }\n    else {\n      y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n    }\n    //  return(OK);\n  }\n  var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n  var asq = al * al;\n  var sinth = Math.sin(theta);\n  var costh = Math.cos(theta);\n\n  var g = costh / (sinth + costh - 1);\n  var gsq = g * g;\n  var m = g * (2 / sinth - 1);\n  var msq = m * m;\n  var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n  if (dlon < 0) {\n    con = -con;\n  }\n  x = this.x0 + con;\n  //con = Math.abs(con / (Math.PI * this.R));\n  var q = asq + g;\n  con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n  if (lat >= 0) {\n    //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n    y = this.y0 + con;\n  }\n  else {\n    //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n    y = this.y0 - con;\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n  ---------------------------------------------------------*/\nexport function inverse(p) {\n  var lon, lat;\n  var xx, yy, xys, c1, c2, c3;\n  var a1;\n  var m1;\n  var con;\n  var th1;\n  var d;\n\n  /* inverse equations\n    -----------------*/\n  p.x -= this.x0;\n  p.y -= this.y0;\n  con = Math.PI * this.R;\n  xx = p.x / con;\n  yy = p.y / con;\n  xys = xx * xx + yy * yy;\n  c1 = -Math.abs(yy) * (1 + xys);\n  c2 = c1 - 2 * yy * yy + xx * xx;\n  c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n  d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n  a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n  m1 = 2 * Math.sqrt(-a1 / 3);\n  con = ((3 * d) / a1) / m1;\n  if (Math.abs(con) > 1) {\n    if (con >= 0) {\n      con = 1;\n    }\n    else {\n      con = -1;\n    }\n  }\n  th1 = Math.acos(con) / 3;\n  if (p.y >= 0) {\n    lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n  }\n  else {\n    lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n  }\n\n  if (Math.abs(xx) < EPSLN) {\n    lon = this.long0;\n  }\n  else {\n    lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n  this.sin_p12 = Math.sin(this.lat0);\n  this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var sinphi = Math.sin(p.y);\n  var cosphi = Math.cos(p.y);\n  var dlon = adjust_lon(lon - this.long0);\n  var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n  if (this.sphere) {\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      //North Pole case\n      p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n      p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n      return p;\n    }\n    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      //South Pole case\n      p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n      p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n      return p;\n    }\n    else {\n      //default case\n      cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n      c = Math.acos(cos_c);\n      kp = c ? c / Math.sin(c) : 1;\n      p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n      p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n      return p;\n    }\n  }\n  else {\n    e0 = e0fn(this.es);\n    e1 = e1fn(this.es);\n    e2 = e2fn(this.es);\n    e3 = e3fn(this.es);\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      //North Pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n      p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n      p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n      return p;\n    }\n    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      //South Pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n      p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n      p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n      return p;\n    }\n    else {\n      //Default case\n      tanphi = sinphi / cosphi;\n      Nl1 = gN(this.a, this.e, this.sin_p12);\n      Nl = gN(this.a, this.e, sinphi);\n      psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n      Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n      if (Az === 0) {\n        s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n      }\n      else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n        s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n      }\n      else {\n        s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n      }\n      G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n      H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n      GH = G * H;\n      Hs = H * H;\n      s2 = s * s;\n      s3 = s2 * s;\n      s4 = s3 * s;\n      s5 = s4 * s;\n      c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n      p.x = this.x0 + c * Math.sin(Az);\n      p.y = this.y0 + c * Math.cos(Az);\n      return p;\n    }\n  }\n\n\n}\n\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;\n  if (this.sphere) {\n    rh = Math.sqrt(p.x * p.x + p.y * p.y);\n    if (rh > (2 * HALF_PI * this.a)) {\n      return;\n    }\n    z = rh / this.a;\n\n    sinz = Math.sin(z);\n    cosz = Math.cos(z);\n\n    lon = this.long0;\n    if (Math.abs(rh) <= EPSLN) {\n      lat = this.lat0;\n    }\n    else {\n      lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n      con = Math.abs(this.lat0) - HALF_PI;\n      if (Math.abs(con) <= EPSLN) {\n        if (this.lat0 >= 0) {\n          lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n        }\n        else {\n          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n        }\n      }\n      else {\n        /*con = cosz - this.sin_p12 * Math.sin(lat);\n        if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n          //no-op, just keep the lon value as is\n        } else {\n          var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n          lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n        }*/\n        lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n      }\n    }\n\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  else {\n    e0 = e0fn(this.es);\n    e1 = e1fn(this.es);\n    e2 = e2fn(this.es);\n    e3 = e3fn(this.es);\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      //North pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n      M = Mlp - rh;\n      lat = imlfn(M / this.a, e0, e1, e2, e3);\n      lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n      p.x = lon;\n      p.y = lat;\n      return p;\n    }\n    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      //South pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n      M = rh - Mlp;\n\n      lat = imlfn(M / this.a, e0, e1, e2, e3);\n      lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n      p.x = lon;\n      p.y = lat;\n      return p;\n    }\n    else {\n      //default case\n      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n      Az = Math.atan2(p.x, p.y);\n      N1 = gN(this.a, this.e, this.sin_p12);\n      cosAz = Math.cos(Az);\n      tmp = this.e * this.cos_p12 * cosAz;\n      A = -tmp * tmp / (1 - this.es);\n      B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n      D = rh / N1;\n      Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n      F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n      psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n      lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n      sinpsi = Math.sin(psi);\n      lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n      p.x = lon;\n      p.y = lat;\n      return p;\n    }\n  }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n  //double temp;      /* temporary variable    */\n\n  /* Place parameters in static storage for common use\n      -------------------------------------------------*/\n  this.sin_p14 = Math.sin(this.lat0);\n  this.cos_p14 = Math.cos(this.lat0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n    ---------------------------------------------------*/\nexport function forward(p) {\n  var sinphi, cosphi; /* sin and cos value        */\n  var dlon; /* delta longitude value      */\n  var coslon; /* cos of longitude        */\n  var ksp; /* scale factor          */\n  var g, x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      -----------------*/\n  dlon = adjust_lon(lon - this.long0);\n\n  sinphi = Math.sin(lat);\n  cosphi = Math.cos(lat);\n\n  coslon = Math.cos(dlon);\n  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n  ksp = 1;\n  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n    x = this.a * ksp * cosphi * Math.sin(dlon);\n    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh; /* height above ellipsoid      */\n  var z; /* angle          */\n  var sinz, cosz; /* sin of z and cos of z      */\n  var con;\n  var lon, lat;\n  /* Inverse equations\n      -----------------*/\n  p.x -= this.x0;\n  p.y -= this.y0;\n  rh = Math.sqrt(p.x * p.x + p.y * p.y);\n  z = asinz(rh / this.a);\n\n  sinz = Math.sin(z);\n  cosz = Math.cos(z);\n\n  lon = this.long0;\n  if (Math.abs(rh) <= EPSLN) {\n    lat = this.lat0;\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n  con = Math.abs(this.lat0) - HALF_PI;\n  if (Math.abs(con) <= EPSLN) {\n    if (this.lat0 >= 0) {\n      lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n    }\n    else {\n      lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n    }\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n    FRONT: 1,\n    RIGHT: 2,\n    BACK: 3,\n    LEFT: 4,\n    TOP: 5,\n    BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n    AREA_0: 1,\n    AREA_1: 2,\n    AREA_2: 3,\n    AREA_3: 4\n};\n\nexport function init() {\n\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.lat0 = this.lat0 || 0;\n  this.long0 = this.long0 || 0;\n  this.lat_ts = this.lat_ts || 0;\n  this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n  /* Determine the cube face from the center of projection. */\n  if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n    this.face = FACE_ENUM.TOP;\n  } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n    this.face = FACE_ENUM.BOTTOM;\n  } else if (Math.abs(this.long0) <= FORTPI) {\n    this.face = FACE_ENUM.FRONT;\n  } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n    this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n  } else {\n    this.face = FACE_ENUM.BACK;\n  }\n\n  /* Fill in useful values for the ellipsoid <-> sphere shift\n   * described in [LK12]. */\n  if (this.es !== 0) {\n    this.one_minus_f = 1 - (this.a - this.b) / this.a;\n    this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n  }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n  var xy = {x: 0, y: 0};\n  var lat, lon;\n  var theta, phi;\n  var t, mu;\n  /* nu; */\n  var area = {value: 0};\n\n  // move lon according to projection's lon\n  p.x -= this.long0;\n\n  /* Convert the geodetic latitude to a geocentric latitude.\n   * This corresponds to the shift from the ellipsoid to the sphere\n   * described in [LK12]. */\n  if (this.es !== 0) {//if (P->es != 0) {\n    lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n  } else {\n    lat = p.y;\n  }\n\n  /* Convert the input lat, lon into theta, phi as used by QSC.\n   * This depends on the cube face and the area on it.\n   * For the top and bottom face, we can compute theta and phi\n   * directly from phi, lam. For the other faces, we must use\n   * unit sphere cartesian coordinates as an intermediate step. */\n  lon = p.x; //lon = lp.lam;\n  if (this.face === FACE_ENUM.TOP) {\n    phi = HALF_PI - lat;\n    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n      theta = lon - HALF_PI;\n    } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_1;\n      theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n    } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = lon + HALF_PI;\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta = lon;\n    }\n  } else if (this.face === FACE_ENUM.BOTTOM) {\n    phi = HALF_PI + lat;\n    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n      theta = -lon + HALF_PI;\n    } else if (lon < FORTPI && lon >= -FORTPI) {\n      area.value = AREA_ENUM.AREA_1;\n      theta = -lon;\n    } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = -lon - HALF_PI;\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n    }\n  } else {\n    var q, r, s;\n    var sinlat, coslat;\n    var sinlon, coslon;\n\n    if (this.face === FACE_ENUM.RIGHT) {\n      lon = qsc_shift_lon_origin(lon, +HALF_PI);\n    } else if (this.face === FACE_ENUM.BACK) {\n      lon = qsc_shift_lon_origin(lon, +SPI);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      lon = qsc_shift_lon_origin(lon, -HALF_PI);\n    }\n    sinlat = Math.sin(lat);\n    coslat = Math.cos(lat);\n    sinlon = Math.sin(lon);\n    coslon = Math.cos(lon);\n    q = coslat * coslon;\n    r = coslat * sinlon;\n    s = sinlat;\n\n    if (this.face === FACE_ENUM.FRONT) {\n      phi = Math.acos(q);\n      theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n    } else if (this.face === FACE_ENUM.RIGHT) {\n      phi = Math.acos(r);\n      theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n    } else if (this.face === FACE_ENUM.BACK) {\n      phi = Math.acos(-q);\n      theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      phi = Math.acos(-r);\n      theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n    } else {\n      /* Impossible */\n      phi = theta = 0;\n      area.value = AREA_ENUM.AREA_0;\n    }\n  }\n\n  /* Compute mu and nu for the area of definition.\n   * For mu, see Eq. (3-21) in [OL76], but note the typos:\n   * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n  mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n  t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n  /* Apply the result to the real area. */\n  if (area.value === AREA_ENUM.AREA_1) {\n    mu += HALF_PI;\n  } else if (area.value === AREA_ENUM.AREA_2) {\n    mu += SPI;\n  } else if (area.value === AREA_ENUM.AREA_3) {\n    mu += 1.5 * SPI;\n  }\n\n  /* Now compute x, y from mu and nu */\n  xy.x = t * Math.cos(mu);\n  xy.y = t * Math.sin(mu);\n  xy.x = xy.x * this.a + this.x0;\n  xy.y = xy.y * this.a + this.y0;\n\n  p.x = xy.x;\n  p.y = xy.y;\n  return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n  var lp = {lam: 0, phi: 0};\n  var mu, nu, cosmu, tannu;\n  var tantheta, theta, cosphi, phi;\n  var t;\n  var area = {value: 0};\n\n  /* de-offset */\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  /* Convert the input x, y to the mu and nu angles as used by QSC.\n   * This depends on the area of the cube face. */\n  nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n  mu = Math.atan2(p.y, p.x);\n  if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n    area.value = AREA_ENUM.AREA_0;\n  } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n    area.value = AREA_ENUM.AREA_1;\n    mu -= HALF_PI;\n  } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n    area.value = AREA_ENUM.AREA_2;\n    mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n  } else {\n    area.value = AREA_ENUM.AREA_3;\n    mu += HALF_PI;\n  }\n\n  /* Compute phi and theta for the area of definition.\n   * The inverse projection is not described in the original paper, but some\n   * good hints can be found here (as of 2011-12-14):\n   * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n   * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n  t = (SPI / 12) * Math.tan(mu);\n  tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n  theta = Math.atan(tantheta);\n  cosmu = Math.cos(mu);\n  tannu = Math.tan(nu);\n  cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n  if (cosphi < -1) {\n    cosphi = -1;\n  } else if (cosphi > +1) {\n    cosphi = +1;\n  }\n\n  /* Apply the result to the real area on the cube face.\n   * For the top and bottom face, we can compute phi and lam directly.\n   * For the other faces, we must use unit sphere cartesian coordinates\n   * as an intermediate step. */\n  if (this.face === FACE_ENUM.TOP) {\n    phi = Math.acos(cosphi);\n    lp.phi = HALF_PI - phi;\n    if (area.value === AREA_ENUM.AREA_0) {\n      lp.lam = theta + HALF_PI;\n    } else if (area.value === AREA_ENUM.AREA_1) {\n      lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      lp.lam = theta - HALF_PI;\n    } else /* area.value == AREA_ENUM.AREA_3 */ {\n      lp.lam = theta;\n    }\n  } else if (this.face === FACE_ENUM.BOTTOM) {\n    phi = Math.acos(cosphi);\n    lp.phi = phi - HALF_PI;\n    if (area.value === AREA_ENUM.AREA_0) {\n      lp.lam = -theta + HALF_PI;\n    } else if (area.value === AREA_ENUM.AREA_1) {\n      lp.lam = -theta;\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      lp.lam = -theta - HALF_PI;\n    } else /* area.value == AREA_ENUM.AREA_3 */ {\n      lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n    }\n  } else {\n    /* Compute phi and lam via cartesian unit sphere coordinates. */\n    var q, r, s;\n    q = cosphi;\n    t = q * q;\n    if (t >= 1) {\n      s = 0;\n    } else {\n      s = Math.sqrt(1 - t) * Math.sin(theta);\n    }\n    t += s * s;\n    if (t >= 1) {\n      r = 0;\n    } else {\n      r = Math.sqrt(1 - t);\n    }\n    /* Rotate q,r,s into the correct area. */\n    if (area.value === AREA_ENUM.AREA_1) {\n      t = r;\n      r = -s;\n      s = t;\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      r = -r;\n      s = -s;\n    } else if (area.value === AREA_ENUM.AREA_3) {\n      t = r;\n      r = s;\n      s = -t;\n    }\n    /* Rotate q,r,s into the correct cube face. */\n    if (this.face === FACE_ENUM.RIGHT) {\n      t = q;\n      q = -r;\n      r = t;\n    } else if (this.face === FACE_ENUM.BACK) {\n      q = -q;\n      r = -r;\n    } else if (this.face === FACE_ENUM.LEFT) {\n      t = q;\n      q = r;\n      r = -t;\n    }\n    /* Now compute phi and lam from the unit sphere coordinates. */\n    lp.phi = Math.acos(-s) - HALF_PI;\n    lp.lam = Math.atan2(r, q);\n    if (this.face === FACE_ENUM.RIGHT) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n    } else if (this.face === FACE_ENUM.BACK) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n    }\n  }\n\n  /* Apply the shift from the sphere to the ellipsoid as described\n   * in [LK12]. */\n  if (this.es !== 0) {\n    var invert_sign;\n    var tanphi, xa;\n    invert_sign = (lp.phi < 0 ? 1 : 0);\n    tanphi = Math.tan(lp.phi);\n    xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n    lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n    if (invert_sign) {\n      lp.phi = -lp.phi;\n    }\n  }\n\n  lp.lam += this.long0;\n  p.x = lp.lam;\n  p.y = lp.phi;\n  return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n  var theta;\n  if (phi < EPSLN) {\n    area.value = AREA_ENUM.AREA_0;\n    theta = 0.0;\n  } else {\n    theta = Math.atan2(y, x);\n    if (Math.abs(theta) <= FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n    } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_1;\n      theta -= HALF_PI;\n    } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta += HALF_PI;\n    }\n  }\n  return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n  var slon = lon + offset;\n  if (slon < -SPI) {\n    slon += TWO_PI;\n  } else if (slon > +SPI) {\n    slon -= TWO_PI;\n  }\n  return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n    [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n    [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n    [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n    [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n    [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n    [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n    [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n    [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n    [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n    [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n    [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n    [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n    [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n    [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n    [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n    [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n    [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n    [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n    [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n    [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n    [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n    [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n    [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n    [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n    [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n    [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n    [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n    [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n    [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n    [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n    [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n    [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n    [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n    [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n    [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n    [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n    [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n    [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n    return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n    return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n    var x = start;\n    for (; iters; --iters) {\n        var upd = f_df(x);\n        x -= upd;\n        if (Math.abs(upd) < max_err) {\n            break;\n        }\n    }\n    return x;\n}\n\nexport function init() {\n    this.x0 = this.x0 || 0;\n    this.y0 = this.y0 || 0;\n    this.long0 = this.long0 || 0;\n    this.es = 0;\n    this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n    var lon = adjust_lon(ll.x - this.long0);\n\n    var dphi = Math.abs(ll.y);\n    var i = Math.floor(dphi * C1);\n    if (i < 0) {\n        i = 0;\n    } else if (i >= NODES) {\n        i = NODES - 1;\n    }\n    dphi = R2D * (dphi - RC1 * i);\n    var xy = {\n        x: poly3_val(COEFS_X[i], dphi) * lon,\n        y: poly3_val(COEFS_Y[i], dphi)\n    };\n    if (ll.y < 0) {\n        xy.y = -xy.y;\n    }\n\n    xy.x = xy.x * this.a * FXC + this.x0;\n    xy.y = xy.y * this.a * FYC + this.y0;\n    return xy;\n}\n\nexport function inverse(xy) {\n    var ll = {\n        x: (xy.x - this.x0) / (this.a * FXC),\n        y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n    };\n\n    if (ll.y >= 1) { // pathologic case\n        ll.x /= COEFS_X[NODES][0];\n        ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n    } else {\n        // find table interval\n        var i = Math.floor(ll.y * NODES);\n        if (i < 0) {\n            i = 0;\n        } else if (i >= NODES) {\n            i = NODES - 1;\n        }\n        for (;;) {\n            if (COEFS_Y[i][0] > ll.y) {\n                --i;\n            } else if (COEFS_Y[i+1][0] <= ll.y) {\n                ++i;\n            } else {\n                break;\n            }\n        }\n        // linear interpolation in 5 degree interval\n        var coefs = COEFS_Y[i];\n        var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n        // find t so that poly3_val(coefs, t) = ll.y\n        t = newton_rapshon(function(x) {\n            return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n        }, t, EPSLN, 100);\n\n        ll.x /= poly3_val(COEFS_X[i], t);\n        ll.y = (5 * i + t) * D2R;\n        if (xy.y < 0) {\n            ll.y = -ll.y;\n        }\n    }\n\n    ll.x = adjust_lon(ll.x + this.long0);\n    return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import {\n    geodeticToGeocentric,\n    geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n    this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n    var point = geodeticToGeocentric(p, this.es, this.a);\n    return point;\n}\n\nexport function inverse(p) {\n    var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n    return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n    init: init,\n    forward: forward,\n    inverse: inverse,\n    names: names\n};","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nexport default function(proj4){\n  proj4.Proj.projections.add(tmerc);\n  proj4.Proj.projections.add(etmerc);\n  proj4.Proj.projections.add(utm);\n  proj4.Proj.projections.add(sterea);\n  proj4.Proj.projections.add(stere);\n  proj4.Proj.projections.add(somerc);\n  proj4.Proj.projections.add(omerc);\n  proj4.Proj.projections.add(lcc);\n  proj4.Proj.projections.add(krovak);\n  proj4.Proj.projections.add(cass);\n  proj4.Proj.projections.add(laea);\n  proj4.Proj.projections.add(aea);\n  proj4.Proj.projections.add(gnom);\n  proj4.Proj.projections.add(cea);\n  proj4.Proj.projections.add(eqc);\n  proj4.Proj.projections.add(poly);\n  proj4.Proj.projections.add(nzmg);\n  proj4.Proj.projections.add(mill);\n  proj4.Proj.projections.add(sinu);\n  proj4.Proj.projections.add(moll);\n  proj4.Proj.projections.add(eqdc);\n  proj4.Proj.projections.add(vandg);\n  proj4.Proj.projections.add(aeqd);\n  proj4.Proj.projections.add(ortho);\n  proj4.Proj.projections.add(qsc);\n  proj4.Proj.projections.add(robin);\n  proj4.Proj.projections.add(geocent);\n}","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AttributeTable.vue?vue&type=style&index=0&id=6b1b8591&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AttributeTable.vue?vue&type=style&index=0&id=6b1b8591&scoped=true&lang=css&\"","import VDivider from './VDivider'\n\nexport { VDivider }\nexport default VDivider\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTreeNode.vue?vue&type=style&index=0&id=24ffc513&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTreeNode.vue?vue&type=style&index=0&id=24ffc513&scoped=true&lang=css&\""],"sourceRoot":""}