{"version":3,"sources":["webpack:///./node_modules/polylabel/polylabel.js","webpack:///./node_modules/core-js/modules/es.array.fill.js","webpack:///./node_modules/d3-array/src/fsum.js","webpack:///./node_modules/d3-geo/src/math.js","webpack:///./node_modules/d3-geo/src/noop.js","webpack:///./node_modules/d3-geo/src/stream.js","webpack:///./node_modules/d3-geo/src/area.js","webpack:///./node_modules/d3-geo/src/bounds.js","webpack:///./node_modules/d3-geo/src/cartesian.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapObject.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapImage.js","webpack:///./node_modules/d3-geo/src/compose.js","webpack:///./node_modules/d3-geo/src/rotation.js","webpack:///./node_modules/d3-geo/src/circle.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapUtils.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapPolygon.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapPolygonSeries.js","webpack:///./node_modules/d3-geo/src/clip/buffer.js","webpack:///./node_modules/d3-geo/src/pointEqual.js","webpack:///./node_modules/d3-geo/src/clip/rejoin.js","webpack:///./node_modules/d3-geo/src/polygonContains.js","webpack:///./node_modules/d3-array/src/merge.js","webpack:///./node_modules/d3-geo/src/clip/index.js","webpack:///./node_modules/d3-geo/src/clip/antimeridian.js","webpack:///./node_modules/d3-geo/src/clip/circle.js","webpack:///./node_modules/d3-geo/src/clip/line.js","webpack:///./node_modules/d3-geo/src/clip/rectangle.js","webpack:///./node_modules/d3-geo/src/identity.js","webpack:///./node_modules/d3-geo/src/transform.js","webpack:///./node_modules/d3-geo/src/path/bounds.js","webpack:///./node_modules/d3-geo/src/projection/fit.js","webpack:///./node_modules/d3-geo/src/projection/resample.js","webpack:///./node_modules/d3-geo/src/projection/index.js","webpack:///./node_modules/d3-geo/src/projection/equirectangular.js","webpack:///./node_modules/d3-geo/src/path/area.js","webpack:///./node_modules/d3-geo/src/path/centroid.js","webpack:///./node_modules/d3-geo/src/path/context.js","webpack:///./node_modules/d3-geo/src/path/measure.js","webpack:///./node_modules/d3-geo/src/path/string.js","webpack:///./node_modules/d3-geo/src/path/index.js","webpack:///./node_modules/d3-geo/src/length.js","webpack:///./node_modules/d3-geo/src/interpolate.js","webpack:///./node_modules/d3-geo/src/distance.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Projection.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/SmallMap.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/Geo.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapLineObject.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapImageSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapLine.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapLineSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/Graticule.js","webpack:///./node_modules/d3-array/src/range.js","webpack:///./node_modules/d3-geo/src/graticule.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/GraticuleSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/MapChart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapSpline.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapArc.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapSplineSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapArcSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/ZoomControl.js","webpack:///./node_modules/d3-geo/src/projection/mercator.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Mercator.js","webpack:///./node_modules/d3-geo-projection/src/math.js","webpack:///./node_modules/d3-geo-projection/src/miller.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Miller.js","webpack:///./node_modules/d3-geo-projection/src/eckert6.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Eckert6.js","webpack:///./node_modules/d3-geo/src/projection/azimuthal.js","webpack:///./node_modules/d3-geo/src/projection/orthographic.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Orthographic.js","webpack:///./node_modules/d3-geo/src/projection/stereographic.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Stereographic.js","webpack:///./node_modules/d3-geo/src/projection/conic.js","webpack:///./node_modules/d3-geo/src/projection/cylindricalEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/conicEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/albers.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Albers.js","webpack:///./node_modules/d3-geo/src/projection/albersUsa.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/AlbersUSA.js","webpack:///./node_modules/d3-geo/src/projection/naturalEarth1.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/NaturalEarth1.js","webpack:///./node_modules/d3-geo/src/projection/azimuthalEqualArea.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/AzimuthalEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/equalEarth.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/EqualEarth.js","webpack:///./node_modules/core-js/modules/es.array.map.js","webpack:///./node_modules/tinyqueue/index.js"],"names":["Queue","polylabel","polygon","precision","debug","minX","minY","maxX","maxY","i","length","p","width","height","cellSize","Math","min","h","degeneratePoleOfInaccessibility","distance","cellQueue","undefined","compareMax","x","y","push","Cell","bestCell","getCentroidCell","bboxCell","d","numProbes","cell","pop","console","log","round","max","poleOfInaccessibility","a","b","this","pointToPolygonDist","SQRT2","inside","minDistSq","Infinity","k","ring","len","j","getSegDistSq","sqrt","area","points","f","px","py","dx","dy","t","default","module","exports","$","fill","addToUnscopables","target","proto","Adder","_partials","Float64Array","_n","hi","lo","abs","n","epsilon","epsilon2","pi","PI","halfPi","quarterPi","tau","degrees","radians","atan","atan2","cos","ceil","exp","floor","hypot","sin","pow","sign","tan","acos","asin","haversin","noop","streamGeometry","geometry","stream","streamGeometryType","hasOwnProperty","type","streamObjectType","Feature","object","FeatureCollection","features","Sphere","sphere","Point","coordinates","point","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","phi00","areaRingSum","areaSum","areaStream","areaRingStart","areaRingEnd","areaRing","add","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","u","v","deltaSum","ranges","range","cartesian","spherical","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","l","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","normal","equatorial","inflection","phii","delta","lambdai","antimeridian","lambda0","lambda1","rangeCompare","rangeContains","merged","deltaMax","feature","sort","NaN","_super","MapSeriesDataItem","_this","call","className","values","value","applyTheme","Object","defineProperty","prototype","get","set","setValue","enumerable","configurable","properties","setProperty","_east","_west","_south","_north","updateExtremes","getFeature","bounds","west","south","north","east","changed","component","invalidateDataItems","Series","MapSeries","isMeasured","nonScalingStroke","dataFields","ignoreBounds","tooltip","showInViewport","createDataItem","checkInclude","includes","excludes","id","indexOf","getPropertyValue","setPropertyValue","invalidateData","processIncExc","chart","handleObjectAdded","event","mapObject","newValue","parent","series","strokeWidth","_geodata","geodata","reverseGeodata","processReverseGeodata","data","madeFromGeoData","splice","disposeData","_dataSources","getDataSource","removeDispose","events","on","loadData","setDataSourceEvents","getFeatures","validateDataItems","dataItems","each","dataItem","_mapObjects","dispatch","_northDefined","_southDefined","_westDefined","_eastDefined","processConfig","config","name_1","window","JSON","parse","e","Error","asIs","field","updateTooltipBounds","topParent","setBounds","maxWidth","maxHeight","registeredClasses","MapObject","layout","clickable","validate","itemReaderText","readerTitle","showTooltip","res","showTooltipOn","has","handleTooltipMove","addDisposer","ev","isHidden","setDataItem","applyAccessibility","Container","MapImage","latitude","geoPoint","longitude","validatePosition","projection","d3Projection","visible","d3Path","__disabled","moveTo","compose","invert","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","z","forward","rotate","circleStream","radius","direction","t0","t1","cosRadius","sinRadius","step","circleRadius","multiLineToGeo","multiLine","multiPointToGeo","pointToGeo","multiGeoToPoint","geoPoints","geoToPoint","multiGeoLineToMultiLine","multiGeoLine","segment","multiGeoPolygonToMultipolygon","multiGeoPolygon","geoPolygon","surface","hole","multiPolygon","getBackground","stepLong","stepLat","ln","ll","lt","MapPolygon","createChild","shouldClone","applyOnClones","interfaceColors","InterfaceColorSet","getFor","stroke","strokeOpacity","tooltipPosition","invalidate","pathGenerator","path","calculateVisualCenter","biggestArea","biggestPolygon","center","_visualLongitude","_visualLatitude","measureElement","_adapterO","apply","pixelWidth","pixelHeight","copyFrom","source","getTooltipX","convert","visualLongitude","visualLatitude","getTooltipY","MapPolygonSeriesDataItem","_mapPolygon","mapPolygon_1","mapPolygons","create","addSprite","_disposers","Disposer","removeValue","_polygon","_multiPolygon","_geoPolygon","_multiGeoPolygon","MapPolygonSeries","clear","validateData","useGeodata","geoJSON","_loop_1","id_1","this_1","geodataNames","name","include","exclude","dataObject","mapPolygon","sortPolygonsBy","sortBy_1","reversed_1","sortPolygonsReversed","valA","valB","dirA","dirB","boxArea","dataContext","index","zIndex","propertyFields","_mapPolygons","polygonTemplate","List","template","focusable","getPolygonById","iterator","_dataItem","line","lines","m","rejoin","concat","shift","result","Intersection","other","entry","o","subject","clip","segments","forEach","p0","p1","pointEqual","compareIntersection","startInside","start","current","isSubject","interpolate","array","angle","winding","sum","point0","phi0","sinPhi0","cosPhi0","sinPhi1","cosPhi1","point1","phi1","absDelta","arc","intersection","phiArc","flatten","arrays","merge","Array","from","sink","clipLine","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","polygonContains","pointVisible","pointLine","clean","ringSegments","filter","validSegment","clipAntimeridianLine","clipAntimeridianInterpolate","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","to","cr","smallRadius","notHemisphere","c0","v0","v00","point2","c","code","intersect","two","pa","pb","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","A","B","w","uu","t2","q","polar","meridian","q1","r","ax","ay","bx","by","x0","x1","y0","y1","clipMax","clipMin","clipRectangle","a1","corner","comparePoint","ca","cb","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","polygonInside","a0","b0","b1","cleanInside","linePoint","transformer","methods","s","TransformStream","key","constructor","fit","fitBounds","clipExtent","scale","translate","fitExtent","extent","fitSize","size","fitWidth","fitHeight","maxDepth","cosMinDistance","delta2","project","resampleNone","resampleLineTo","depth","d2","phi2","lambda2","x2","y2","dx2","dy2","dz","lambda00","x00","y00","a00","b00","c00","resampleStream","ringPoint","transformRadians","transformRotate","scaleTranslate","sx","sy","transform","scaleTranslateRotate","alpha","cosAlpha","sinAlpha","ai","bi","ci","fi","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cache","cacheStream","theta","preclip","postclip","identity","recenter","resample","reset","_","arguments","clipAngle","reflectX","reflectY","equirectangularRaw","Z0","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","context","_context","_radius","pointRadius","_line","_point","closePath","lineTo","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","_circle","join","projectionStream","contextStream","measure","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","lengthLineStart","lengthLineEnd","cosDelta","sinDelta","Projection","_d3Projection","_d3Path","invalidateProjection","unproject","deltaLongitude","deltaLatitude","unrotate","intermediatePoint","pointA","pointB","position","multiDistance","positionToPoint","positionToGeoPoint","intermediatePointA","intermediatePointB","totalDistance","currentDistance","distanceAB","positionA","positionB","positionAB","SmallMap","_chart","align","valign","percentHeight","percentWidth","margin","background","fillOpacity","moveToPosition","updateMapSize","seriesContainer","rectangle","Rectangle","verticalCenter","horizontalCenter","_series","handleSeriesAdded","handleSeriesRemoved","contains","newSeries","clone","dataUsers","interactionsEnabled","hidden","rectPoint","spritePoint","seriesPointToGeo","zoomToGeoPoint","zoomLevel","updateRectangle","pixelX","pixelY","scaleRatio","bbox","group","node","getBBox","err","afterDraw","maskRectangle","map","hasKey","getKey","normalizePoint","wrapAngleTo180","latitude180","normalizeMultiline","multiline","MapLineObject","adjustRotation","mapLine","shortestDistance","MapImageSeriesDataItem","_mapImage","mapImage_1","mapImages","_geoPoint","multiPoint","MapImageSeries","multiGeoPoint","_parseDataFrom","mapImage","isDisposed","moveValue","_mapImages","validateDataElement","getImageById","MapLine","_imageListeners","createLine","Polyline","images","handleImagesToConnect","isReady","e_1","_a","imagesToConnect","image","img","uid","disposer","property","_b","_c","next","done","e_1_1","error","return","convertedPoints","convertedSegmentPoints","slen","_arrow","lineObjects","handleGlobalScale","_lineObjects","handleLineObjectAdded","mapLineObject","arrow","triangle","Triangle","Percent","MapLineSeriesDataItem","_mapLine","mapLine_1","mapLines","_multiLine","_multiGeoLine","_geoLine","geoLine","MapLineSeries","_mapLines","lineTemplate","getLineById","Graticule","stop","graticuleX","graticuleY","X1","X0","Y1","Y0","X","Y","DX","DY","graticule","outline","slice","reverse","extentMajor","extentMinor","stepMajor","stepMinor","GraticuleSeriesDataItem","GraticuleSeries","longitudeStep","latitudeStep","singleSprite","disableType","hiddenInLegend","lineStrings","lineString","MapChartDataItem","SerialChart","MapChart","zoomDuration","zoomEasing","minZoomLevel","maxZoomLevel","_prevZoomGeoPoint","maxPanOut","homeZoomLevel","zoomStep","centerMapOnZoomOut","padding","backgroundSeries","minWidth","minHeight","once","handleAllInited","inert","resizable","handleMapTransform","handleDoubleHit","handleDrag","dragWhileResize","adapter","previousWidth","previousHeight","updateCenterGeoPoint","chartContainer","inited","_mapAnimation","allInited_1","dataInvalid","updateScaleRatio","_zoomGeoPointReal","chartContainerBg","dragStart","interactions","downPointers","getIndex","dragStop","handleMapDown","inertia","inertias","body","hasFocused","getEventKey","_zoomControl","thumb","isFocused","pan","mouseWheelBehavior","interaction","handlePanDown","handlePanUp","panSprite","Circle","handlePanMove","opacity","panBehavior","svgPoint","pointer","htmlContainer","svgContainer","_downPointOrig","_downDeltaLongitude","_downDeltaLatitude","isResized","areTransformed","dln","dlt","dlg","downGeoLocal","local","geoLocal","goHome","disposer_1","updateZoomGeoPoint","seriesPoint","innerWidth","pixelPaddingLeft","innerHeight","pixelPaddingTop","maxLeft","maxRight","maxTop","maxBottom","seriesMaxLeft","seriesMaxRight","seriesMaxTop","seriesMaxBottom","seriesWidth","seriesHeight","_centerGeoPoint","ww","hh","zoomGeoPoint","applyInternalDefaults","language","cssScale","svgPointToGeo","zoomIn","handleWheel","mouseOptions","sensitivity","zoomOut","_mouseWheelDisposer","dispose","wheelable","draggable","_backgroundSeries","foundGraticule","deltaLong","deltaLat","initialScale","invalidateDataUsers","_fitWidth","_fitHeight","hScale","vScale","geoPointToSVG","geoPointToSeries","dataUser","duration","hasData_1","mapPoint","animate","zoomToMapObject","dataItem_1","polygonPoint","zoomToRectangle","level","splitLongitude","newLong","_prevZoomLevel","readerAlert","locale","_smallMap","smallMap","zoomControl","plusButton","exportable","minusButton","createSeries","rotateMap","dataSource","raiseCriticalError","createClassInstance","configOrder","homeGeoPoint","centerGeoPoint","setPaper","paper","hideOverflow","color","setLegend","legend","setTapToActivate","isTouchProtected","handleTapToActivate","handleTapToActivateDeactivation","asFunction","hasLicense","commercialLicense","licenses","match","MapSpline","Polyspline","tensionX","tensionY","MapArc","Polyarc","MapSplineSeriesDataItem","MapSplineSeries","MapArcSeriesDataItem","MapArcSeries","ZoomControl","Button","label","text","slider","handleBackgroundClick","updateThumbSize","handleThumbDrag","role","readerLive","fixLayout","marginTop","marginBottom","toFront","toBack","sprite","maxPower","LN2","minPower","power","updateThumb","isKey","stepCount","isDown","minStep","createBackground","RoundedRectangle","mercatorRaw","mercatorProjection","reclip","Mercator","SQRT1_2","millerRaw","Miller","eckert6Raw","Eckert6","azimuthalRaw","cx","cy","azimuthalInvert","sc","cc","orthographicRaw","Orthographic","stereographicRaw","Stereographic","conicProjection","parallels","cylindricalEqualAreaRaw","conicEqualAreaRaw","r0","r0y","conicEqualArea","Albers","multiplex","streams","lower48Point","alaskaPoint","hawaiiPoint","lower48","albers","alaska","hawaii","pointStream","albersUsa","AlbersUsa","naturalEarth1Raw","phi4","NaturalEarth1","azimuthalEqualAreaRaw","cxcy","AzimuthalEqualArea","A1","A2","A3","A4","M","iterations","equalEarthRaw","l2","l6","fy","fpy","EqualEarth","$map","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","forced","callbackfn","TinyQueue","compare","defaultCompare","_down","item","_up","top","bottom","pos","halfLength","left","best","right"],"mappings":"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","file":"js/chunk-a9bb6c3c.4393e4bc.js","sourcesContent":["'use strict';\n\nvar Queue = require('tinyqueue');\n\nif (Queue.default) Queue = Queue.default; // temporary webpack fix\n\nmodule.exports = polylabel;\nmodule.exports.default = polylabel;\n\nfunction polylabel(polygon, precision, debug) {\n precision = precision || 1.0;\n\n // find the bounding box of the outer ring\n var minX, minY, maxX, maxY;\n for (var i = 0; i < polygon[0].length; i++) {\n var p = polygon[0][i];\n if (!i || p[0] < minX) minX = p[0];\n if (!i || p[1] < minY) minY = p[1];\n if (!i || p[0] > maxX) maxX = p[0];\n if (!i || p[1] > maxY) maxY = p[1];\n }\n\n var width = maxX - minX;\n var height = maxY - minY;\n var cellSize = Math.min(width, height);\n var h = cellSize / 2;\n\n if (cellSize === 0) {\n var degeneratePoleOfInaccessibility = [minX, minY];\n degeneratePoleOfInaccessibility.distance = 0;\n return degeneratePoleOfInaccessibility;\n }\n\n // a priority queue of cells in order of their \"potential\" (max distance to polygon)\n var cellQueue = new Queue(undefined, compareMax);\n\n // cover polygon with initial cells\n for (var x = minX; x < maxX; x += cellSize) {\n for (var y = minY; y < maxY; y += cellSize) {\n cellQueue.push(new Cell(x + h, y + h, h, polygon));\n }\n }\n\n // take centroid as the first best guess\n var bestCell = getCentroidCell(polygon);\n\n // special case for rectangular polygons\n var bboxCell = new Cell(minX + width / 2, minY + height / 2, 0, polygon);\n if (bboxCell.d > bestCell.d) bestCell = bboxCell;\n\n var numProbes = cellQueue.length;\n\n while (cellQueue.length) {\n // pick the most promising cell from the queue\n var cell = cellQueue.pop();\n\n // update the best cell if we found a better one\n if (cell.d > bestCell.d) {\n bestCell = cell;\n if (debug) console.log('found best %d after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes);\n }\n\n // do not drill down further if there's no chance of a better solution\n if (cell.max - bestCell.d <= precision) continue;\n\n // split the cell into four cells\n h = cell.h / 2;\n cellQueue.push(new Cell(cell.x - h, cell.y - h, h, polygon));\n cellQueue.push(new Cell(cell.x + h, cell.y - h, h, polygon));\n cellQueue.push(new Cell(cell.x - h, cell.y + h, h, polygon));\n cellQueue.push(new Cell(cell.x + h, cell.y + h, h, polygon));\n numProbes += 4;\n }\n\n if (debug) {\n console.log('num probes: ' + numProbes);\n console.log('best distance: ' + bestCell.d);\n }\n\n var poleOfInaccessibility = [bestCell.x, bestCell.y];\n poleOfInaccessibility.distance = bestCell.d;\n return poleOfInaccessibility;\n}\n\nfunction compareMax(a, b) {\n return b.max - a.max;\n}\n\nfunction Cell(x, y, h, polygon) {\n this.x = x; // cell center x\n this.y = y; // cell center y\n this.h = h; // half the cell size\n this.d = pointToPolygonDist(x, y, polygon); // distance from cell center to polygon\n this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\n}\n\n// signed distance from point to polygon outline (negative if point is outside)\nfunction pointToPolygonDist(x, y, polygon) {\n var inside = false;\n var minDistSq = Infinity;\n\n for (var k = 0; k < polygon.length; k++) {\n var ring = polygon[k];\n\n for (var i = 0, len = ring.length, j = len - 1; i < len; j = i++) {\n var a = ring[i];\n var b = ring[j];\n\n if ((a[1] > y !== b[1] > y) &&\n (x < (b[0] - a[0]) * (y - a[1]) / (b[1] - a[1]) + a[0])) inside = !inside;\n\n minDistSq = Math.min(minDistSq, getSegDistSq(x, y, a, b));\n }\n }\n\n return minDistSq === 0 ? 0 : (inside ? 1 : -1) * Math.sqrt(minDistSq);\n}\n\n// get polygon centroid\nfunction getCentroidCell(polygon) {\n var area = 0;\n var x = 0;\n var y = 0;\n var points = polygon[0];\n\n for (var i = 0, len = points.length, j = len - 1; i < len; j = i++) {\n var a = points[i];\n var b = points[j];\n var f = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * f;\n y += (a[1] + b[1]) * f;\n area += f * 3;\n }\n if (area === 0) return new Cell(points[0][0], points[0][1], 0, polygon);\n return new Cell(x / area, y / area, 0, polygon);\n}\n\n// get squared distance from a point to a segment\nfunction getSegDistSq(px, py, a, b) {\n\n var x = a[0];\n var y = a[1];\n var dx = b[0] - x;\n var dy = b[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n\n var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = b[0];\n y = b[1];\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = px - x;\n dy = py - y;\n\n return dx * dx + dy * dy;\n}\n","var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum = new Adder();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum = new Adder();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum,\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum = new Adder();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","/**\r\n * Map series module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Series, SeriesDataItem } from \"../series/Series\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[MapSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar MapSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(MapSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapSeriesDataItem\";\r\n _this.values.value = {};\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(MapSeriesDataItem.prototype, \"value\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.value.value;\r\n },\r\n /**\r\n * Numeric value of the data item.\r\n *\r\n * Value may be used in heat-map calculations.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"value\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeriesDataItem.prototype, \"zoomLevel\", {\r\n /**\r\n * @return Zoom level\r\n */\r\n get: function () {\r\n return this.properties[\"zoomLevel\"];\r\n },\r\n /**\r\n * When `zoomToMapObject()` is called the map will either calculate suitable\r\n * zoom level itself or use object's `zoomLevel` if set.\r\n *\r\n * @param value Zoom level\r\n */\r\n set: function (value) {\r\n this.setProperty(\"zoomLevel\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeriesDataItem.prototype, \"zoomGeoPoint\", {\r\n /**\r\n * @return Zoom geo point\r\n */\r\n get: function () {\r\n return this.properties[\"zoomGeoPoint\"];\r\n },\r\n /**\r\n * When `zoomToMapObject()` is called the map will either calculate suitable\r\n * center position itself or use object's `zoomGeoPoint` if set.\r\n *\r\n * @param value Zoom geo point\r\n */\r\n set: function (value) {\r\n this.setProperty(\"zoomGeoPoint\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeriesDataItem.prototype, \"east\", {\r\n /**\r\n * Longitude of the East-most point of the element.\r\n */\r\n get: function () {\r\n return this._east;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeriesDataItem.prototype, \"west\", {\r\n /**\r\n * Longitude of the West-most point of the element.\r\n */\r\n get: function () {\r\n return this._west;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeriesDataItem.prototype, \"south\", {\r\n /**\r\n * Latitude of the South-most point of the element.\r\n */\r\n get: function () {\r\n return this._south;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeriesDataItem.prototype, \"north\", {\r\n /**\r\n * Latitude of the North-most point of the element.\r\n */\r\n get: function () {\r\n return this._north;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates the item's bounding coordinates: coordinates of the East, West,\r\n * North, and South-most points.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapSeriesDataItem.prototype.updateExtremes = function () {\r\n var geometry = this.getFeature().geometry;\r\n if (geometry) {\r\n var bounds = d3geo.geoBounds(geometry);\r\n var west = bounds[0][0];\r\n var south = bounds[0][1];\r\n var north = bounds[1][1];\r\n var east = bounds[1][0];\r\n var changed = false;\r\n if (north != this.north) {\r\n this._north = $math.round(north, 6);\r\n changed = true;\r\n }\r\n if (south != this.south) {\r\n this._south = $math.round(south, 6);\r\n changed = true;\r\n }\r\n if (east != this.east) {\r\n this._east = $math.round(east, 6);\r\n changed = true;\r\n }\r\n if (west != this.west) {\r\n this._west = $math.round(west, 6);\r\n changed = true;\r\n }\r\n // solves single russia prob\r\n if (this._east < this._west) {\r\n this._east = 180;\r\n this._west = -180;\r\n }\r\n if (changed) {\r\n this.component.invalidateDataItems();\r\n }\r\n }\r\n };\r\n MapSeriesDataItem.prototype.getFeature = function () {\r\n return {};\r\n };\r\n return MapSeriesDataItem;\r\n}(SeriesDataItem));\r\nexport { MapSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A base class for series of map objects.\r\n *\r\n * @see {@link IMapSeriesEvents} for a list of available Events\r\n * @see {@link IMapSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar MapSeries = /** @class */ (function (_super) {\r\n __extends(MapSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapSeries() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"MapSeries\";\r\n // Set defaults\r\n _this.isMeasured = false;\r\n _this.nonScalingStroke = true;\r\n // Set data fields\r\n _this.dataFields.value = \"value\";\r\n _this.ignoreBounds = false;\r\n if (_this.tooltip) {\r\n _this.tooltip.showInViewport = true;\r\n }\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n MapSeries.prototype.createDataItem = function () {\r\n return new MapSeriesDataItem();\r\n };\r\n /**\r\n * Checks whether object should be included in series.\r\n *\r\n * @param includes A list of explicitly included ids\r\n * @param excludes A list of explicitly excluded ids\r\n * @param id Id of the object\r\n * @return Include?\r\n */\r\n MapSeries.prototype.checkInclude = function (includes, excludes, id) {\r\n if (includes) {\r\n if (includes.length == 0) {\r\n return false;\r\n }\r\n else {\r\n if (includes.indexOf(id) == -1) {\r\n return false;\r\n }\r\n }\r\n }\r\n if (excludes && excludes.length > 0) {\r\n if (excludes.indexOf(id) != -1) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n Object.defineProperty(MapSeries.prototype, \"useGeodata\", {\r\n /**\r\n * @return Use GeoJSON data?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"useGeodata\");\r\n },\r\n /**\r\n * Should the map extract all the data about element from the GeoJSON?\r\n *\r\n * This is especially relevant for [[MapPolygonSeries]]. If not set to `true`\r\n * polygon series will need to contain geographical data in itself in order\r\n * to be drawn.\r\n *\r\n * If this is set to `true`, series will try to extract data for its objects\r\n * from either chart-level `geodata` or from series' `geodata` which holds\r\n * map infor in GeoJSON format.\r\n *\r\n * @default false\r\n * @param value Use GeoJSON data?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"useGeodata\", value)) {\r\n this.invalidateData();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeries.prototype, \"include\", {\r\n /**\r\n * @return Included objects\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"include\");\r\n },\r\n /**\r\n * A list of object ids that should be explictly included in the series.\r\n *\r\n * If this is not set, the series will automatically include all of the\r\n * objects, available in the GeoJSON map. (minus the ones listed in\r\n * `exclude`)\r\n *\r\n * If you need to display only specific objects, use `include`. E.g.:\r\n *\r\n * `include = [\"FR\", \"ES\", \"DE\"];`\r\n *\r\n * The above will show only France, Spain, and Germany out of the whole map.\r\n *\r\n * @param value Included objects\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"include\", value)) {\r\n this.processIncExc();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n MapSeries.prototype.processIncExc = function () {\r\n //this.data = [];\r\n this.invalidateData();\r\n };\r\n Object.defineProperty(MapSeries.prototype, \"ignoreBounds\", {\r\n /**\r\n * @return Ignore bounds?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"ignoreBounds\");\r\n },\r\n /**\r\n * Should this series be included when calculating bounds of the map?\r\n *\r\n * This affects initial zoom as well as limits for zoom/pan.\r\n *\r\n * By default, `MapPolygonSeries` included (true), while `MapImageSeries` and\r\n * `MapLineSeries` are not (`false`).\r\n *\r\n * @since 4.3.0\r\n * @param value Ignore bounds?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"ignoreBounds\", value)) {\r\n if (this.chart) {\r\n this.chart.updateExtremes();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeries.prototype, \"exclude\", {\r\n /**\r\n * @return Excluded ids\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"exclude\");\r\n },\r\n /**\r\n * A list of object ids that should be excluded from the series.\r\n *\r\n * E.g. you want to include all of the areas from a GeoJSON map, except\r\n * Antarctica.\r\n *\r\n * You'd leave `include` empty, and set `exclude = [\"AQ\"]`.\r\n *\r\n * @param value Excluded ids\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"exclude\", value)) {\r\n this.processIncExc();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Decorates a newly added object.\r\n *\r\n * @param event [description]\r\n */\r\n MapSeries.prototype.handleObjectAdded = function (event) {\r\n var mapObject = event.newValue;\r\n mapObject.parent = this;\r\n mapObject.series = this;\r\n mapObject.strokeWidth = mapObject.strokeWidth;\r\n };\r\n Object.defineProperty(MapSeries.prototype, \"geodata\", {\r\n /**\r\n * @return GeoJSON data\r\n */\r\n get: function () {\r\n return this._geodata;\r\n },\r\n /**\r\n * Map data in GeoJSON format.\r\n *\r\n * The series supports the following GeoJSON objects: `Point`, `LineString`,\r\n * `Polygon`, `MultiPoint`, `MultiLineString`, and `MultiPolygon`.\r\n *\r\n * @see {@link http://geojson.org/} Official GeoJSON format specification\r\n * @param geoJSON GeoJSON data\r\n */\r\n set: function (geodata) {\r\n if (geodata != this._geodata) {\r\n this._geodata = geodata;\r\n if (this.reverseGeodata) {\r\n this.chart.processReverseGeodata(this._geodata);\r\n }\r\n for (var i = this.data.length - 1; i >= 0; i--) {\r\n if (this.data[i].madeFromGeoData == true) {\r\n this.data.splice(i, 1);\r\n }\r\n }\r\n this.disposeData();\r\n this.invalidateData();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeries.prototype, \"reverseGeodata\", {\r\n /**\r\n * @returns Reverse the order of geodata coordinates?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"reverseGeodata\");\r\n },\r\n /**\r\n * Indicates whether GeoJSON geodata supplied to the chart uses\r\n * ESRI (clockwise) or non-ESRI (counter-clockwise) order of the polygon\r\n * coordinates.\r\n *\r\n * `MapChart` supports only ESRI standard, so if your custom maps appears\r\n * garbled, try setting `reverseGeodata = true`.\r\n *\r\n * @default false\r\n * @since 4.10.11\r\n * @param value Reverse the order of geodata coordinates?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"reverseGeodata\", value) && this._geodata) {\r\n this.chart.processReverseGeodata(this._geodata);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeries.prototype, \"geodataSource\", {\r\n /**\r\n * Returns a [[DataSource]] specifically for loading Component's data.\r\n *\r\n * @return Data source\r\n */\r\n get: function () {\r\n if (!this._dataSources[\"geodata\"]) {\r\n this.getDataSource(\"geodata\");\r\n }\r\n return this._dataSources[\"geodata\"];\r\n },\r\n /**\r\n * Sets a [[DataSource]] to be used for loading Component's data.\r\n *\r\n * @param value Data source\r\n */\r\n set: function (value) {\r\n var _this = this;\r\n if (this._dataSources[\"geodata\"]) {\r\n this.removeDispose(this._dataSources[\"geodata\"]);\r\n }\r\n this._dataSources[\"geodata\"] = value;\r\n this._dataSources[\"geodata\"].component = this;\r\n this.events.on(\"inited\", function () {\r\n _this.loadData(\"geodata\");\r\n }, undefined, false);\r\n this.setDataSourceEvents(value, \"geodata\");\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n MapSeries.prototype.getFeatures = function () {\r\n return;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapSeries.prototype.validateDataItems = function () {\r\n _super.prototype.validateDataItems.call(this);\r\n this.updateExtremes();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapSeries.prototype.updateExtremes = function () {\r\n var north;\r\n var south;\r\n var east;\r\n var west;\r\n this.dataItems.each(function (dataItem) {\r\n if (dataItem.north > north || !$type.isNumber(north)) {\r\n north = dataItem.north;\r\n }\r\n if (dataItem.south < south || !$type.isNumber(south)) {\r\n south = dataItem.south;\r\n }\r\n if (dataItem.west < west || !$type.isNumber(west)) {\r\n west = dataItem.west;\r\n }\r\n if (dataItem.east > east || !$type.isNumber(east)) {\r\n east = dataItem.east;\r\n }\r\n });\r\n if (this._mapObjects) {\r\n this._mapObjects.each(function (mapObject) {\r\n if (mapObject.north > north || !$type.isNumber(north)) {\r\n north = mapObject.north;\r\n }\r\n if (mapObject.south < south || !$type.isNumber(south)) {\r\n south = mapObject.south;\r\n }\r\n if (mapObject.west < west || !$type.isNumber(west)) {\r\n west = mapObject.west;\r\n }\r\n if (mapObject.east > east || !$type.isNumber(east)) {\r\n east = mapObject.east;\r\n }\r\n });\r\n }\r\n if (this.north != north || this.east != east || this.south != south || this.west != west) {\r\n this._north = north;\r\n this._east = east;\r\n this._west = west;\r\n this._south = south;\r\n this.dispatch(\"geoBoundsChanged\");\r\n if (!this.ignoreBounds) {\r\n this.chart.updateExtremes();\r\n }\r\n }\r\n };\r\n Object.defineProperty(MapSeries.prototype, \"north\", {\r\n /**\r\n * @return Latitude\r\n */\r\n get: function () {\r\n if ($type.isNumber(this._northDefined)) {\r\n return this._northDefined;\r\n }\r\n return this._north;\r\n },\r\n /**\r\n * North-most latitude of the series.\r\n *\r\n * By default, this holds auto-calculated latitude of the extremity.\r\n *\r\n * It can be overridden manually.\r\n *\r\n * @param value Latitude\r\n */\r\n set: function (value) {\r\n this._northDefined = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeries.prototype, \"south\", {\r\n /**\r\n * @return Latitude\r\n */\r\n get: function () {\r\n if ($type.isNumber(this._southDefined)) {\r\n return this._southDefined;\r\n }\r\n return this._south;\r\n },\r\n /**\r\n * South-most latitude of the series.\r\n *\r\n * By default, this holds auto-calculated latitude of the extremity.\r\n *\r\n * It can be overridden manually.\r\n *\r\n * @param value Latitude\r\n */\r\n set: function (value) {\r\n this._southDefined = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeries.prototype, \"west\", {\r\n /**\r\n * @return Longitude\r\n */\r\n get: function () {\r\n if ($type.isNumber(this._westDefined)) {\r\n return this._westDefined;\r\n }\r\n return this._west;\r\n },\r\n /**\r\n * West-most longitude of the series.\r\n *\r\n * By default, this holds auto-calculated longitude of the extremity.\r\n *\r\n * It can be overridden manually.\r\n *\r\n * @param value Longitude\r\n */\r\n set: function (value) {\r\n this._westDefined = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapSeries.prototype, \"east\", {\r\n /**\r\n * @return Longitude\r\n */\r\n get: function () {\r\n if ($type.isNumber(this._eastDefined)) {\r\n return this._eastDefined;\r\n }\r\n return this._east;\r\n },\r\n /**\r\n * East-most longitude of the series.\r\n *\r\n * By default, this holds auto-calculated longitude of the extremity.\r\n *\r\n * It can be overridden manually.\r\n *\r\n * @param value Longitude\r\n */\r\n set: function (value) {\r\n this._eastDefined = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n MapSeries.prototype.processConfig = function (config) {\r\n if ($type.hasValue(config[\"geodata\"]) && $type.isString(config[\"geodata\"])) {\r\n var name_1 = config[\"geodata\"];\r\n // Check if there's a map loaded by such name\r\n if ($type.hasValue(window[\"am4geodata_\" + config[\"geodata\"]])) {\r\n config[\"geodata\"] = window[\"am4geodata_\" + config[\"geodata\"]];\r\n }\r\n // Nope. Let's try maybe we got JSON as string?\r\n else {\r\n try {\r\n config[\"geodata\"] = JSON.parse(config[\"geodata\"]);\r\n }\r\n catch (e) {\r\n // No go again. Error out.\r\n throw Error(\"MapChart error: Geodata `\" + name_1 + \"` is not loaded or is incorrect.\");\r\n }\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n /**\r\n * Adds `projection` to \"as is\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as is?\r\n */\r\n MapSeries.prototype.asIs = function (field) {\r\n return field == \"geodata\" || _super.prototype.asIs.call(this, field);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapSeries.prototype.updateTooltipBounds = function () {\r\n if (this.tooltip && this.topParent) {\r\n this.tooltip.setBounds({ x: 10, y: 10, width: this.topParent.maxWidth - 20, height: this.topParent.maxHeight - 20 });\r\n }\r\n };\r\n return MapSeries;\r\n}(Series));\r\nexport { MapSeries };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapSeries\"] = MapSeries;\r\nregistry.registeredClasses[\"MapSeriesDataItem\"] = MapSeriesDataItem;\r\n//# sourceMappingURL=MapSeries.js.map","/**\r\n * Map object module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as d3geo from \"d3-geo\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A base class for all map objects: lines, images, etc.\r\n *\r\n * @see {@link IMapObjectEvents} for a list of available events\r\n * @see {@link IMapObjectAdapters} for a list of available Adapters\r\n */\r\nvar MapObject = /** @class */ (function (_super) {\r\n __extends(MapObject, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapObject() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"MapObject\";\r\n // Set defaults\r\n _this.isMeasured = false;\r\n _this.layout = \"none\";\r\n _this.clickable = true;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * (Re)validates this object, forcing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapObject.prototype.validate = function () {\r\n if (this.series && this.series.itemReaderText) {\r\n this.readerTitle = this.series.itemReaderText;\r\n }\r\n _super.prototype.validate.call(this);\r\n };\r\n /**\r\n * Updates the item's bounding coordinates: coordinates of the East, West,\r\n * North, and South-most points.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapObject.prototype.updateExtremes = function () {\r\n var feature = this.getFeature();\r\n if (feature) {\r\n var geometry = feature.geometry;\r\n if (geometry) {\r\n var bounds = d3geo.geoBounds(geometry);\r\n var west = bounds[0][0];\r\n var south = bounds[0][1];\r\n var north = bounds[1][1];\r\n var east = bounds[1][0];\r\n var changed = false;\r\n if (north != this.north) {\r\n this._north = $math.round(north, 8);\r\n changed = true;\r\n }\r\n if (south != this.south) {\r\n this._south = $math.round(south);\r\n changed = true;\r\n }\r\n if (east != this.east) {\r\n this._east = $math.round(east);\r\n changed = true;\r\n }\r\n if (west != this.west) {\r\n this._west = $math.round(west);\r\n changed = true;\r\n }\r\n if (changed) {\r\n this.dispatch(\"geoBoundsChanged\");\r\n if (this.series) {\r\n this.series.invalidateDataItems();\r\n }\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapObject.prototype.getFeature = function () {\r\n return {};\r\n };\r\n Object.defineProperty(MapObject.prototype, \"east\", {\r\n /**\r\n * Longitude of the East-most point of the element.\r\n */\r\n get: function () {\r\n if ($type.isNumber(this._east)) {\r\n return this._east;\r\n }\r\n else if (this.dataItem) {\r\n return this.dataItem.east;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapObject.prototype, \"west\", {\r\n /**\r\n * Longitude of the West-most point of the element.\r\n */\r\n get: function () {\r\n if ($type.isNumber(this._west)) {\r\n return this._west;\r\n }\r\n else if (this.dataItem) {\r\n return this.dataItem.west;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapObject.prototype, \"south\", {\r\n /**\r\n * Latitude of the South-most point of the element.\r\n */\r\n get: function () {\r\n if ($type.isNumber(this._south)) {\r\n return this._south;\r\n }\r\n else if (this.dataItem) {\r\n return this.dataItem.south;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapObject.prototype, \"north\", {\r\n /**\r\n * Latitude of the North-most point of the element.\r\n */\r\n get: function () {\r\n if ($type.isNumber(this._north)) {\r\n return this._north;\r\n }\r\n else if (this.dataItem) {\r\n return this.dataItem.north;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Shows the element's [[Tooltip]].\r\n *\r\n * A tooltip will be populated using text templates in either `tooltipHTML` or\r\n * `tooltipText` as well as data in `tooltipDataItem`.\r\n *\r\n * @see {@link Tooltip}\r\n * @param optional point (sprite-related) to which tooltip must point.\r\n * @return returns true if the tooltip was shown and false if it wasn't (no text was found)\r\n */\r\n MapObject.prototype.showTooltip = function (point) {\r\n var res = _super.prototype.showTooltip.call(this, point);\r\n if (res && this.showTooltipOn == \"always\" && !this.series.chart.events.has(\"mappositionchanged\", this.handleTooltipMove, this)) {\r\n this.addDisposer(this.series.chart.events.on(\"mappositionchanged\", this.handleTooltipMove, this));\r\n }\r\n return res;\r\n };\r\n MapObject.prototype.handleTooltipMove = function (ev) {\r\n if (!this.tooltip.isHidden) {\r\n this.showTooltip();\r\n }\r\n };\r\n /**\r\n * Sets a [[DataItem]].\r\n * @param dataItem DataItem\r\n */\r\n MapObject.prototype.setDataItem = function (dataItem) {\r\n _super.prototype.setDataItem.call(this, dataItem);\r\n this.applyAccessibility();\r\n };\r\n return MapObject;\r\n}(Container));\r\nexport { MapObject };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapObject\"] = MapObject;\r\n//# sourceMappingURL=MapObject.js.map","/**\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapObject } from \"./MapObject\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to place an image on the map.\r\n *\r\n * @see {@link IMapImageEvents} for a list of available events\r\n * @see {@link IMapImageAdapters} for a list of available Adapters\r\n */\r\nvar MapImage = /** @class */ (function (_super) {\r\n __extends(MapImage, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapImage() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapImage\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(MapImage.prototype, \"latitude\", {\r\n /**\r\n * @return Latitude\r\n */\r\n get: function () {\r\n var latitude = this.getPropertyValue(\"latitude\");\r\n if (!$type.isNumber(latitude) && this.dataItem && this.dataItem.geoPoint) {\r\n latitude = this.dataItem.geoPoint.latitude;\r\n }\r\n return latitude;\r\n },\r\n /**\r\n * Latitude image is placed at.\r\n *\r\n * @param value Latitude\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"latitude\", value, false, true);\r\n this.updateExtremes();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapImage.prototype, \"longitude\", {\r\n /**\r\n * @return Longitude\r\n */\r\n get: function () {\r\n var longitude = this.getPropertyValue(\"longitude\");\r\n if (!$type.isNumber(longitude) && this.dataItem && this.dataItem.geoPoint) {\r\n longitude = this.dataItem.geoPoint.longitude;\r\n }\r\n return longitude;\r\n },\r\n /**\r\n * Longitude image is placed on.\r\n *\r\n * @param value Longitude\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"longitude\", value, false, true);\r\n this.updateExtremes();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Repositions the image to it's current position.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapImage.prototype.validatePosition = function () {\r\n if ($type.isNumber(this.latitude) && $type.isNumber(this.longitude)) {\r\n //this.moveTo(this.series.chart.projection.convert({ latitude: this.latitude, longitude: this.longitude }));\r\n var p = this.series.chart.projection.d3Projection([this.longitude, this.latitude]);\r\n var visible = this.series.chart.projection.d3Path({ type: 'Point', coordinates: [this.longitude, this.latitude] });\r\n if (!visible) {\r\n this.__disabled = true;\r\n }\r\n else {\r\n this.__disabled = false;\r\n }\r\n this.moveTo({ x: p[0], y: p[1] });\r\n }\r\n _super.prototype.validatePosition.call(this);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapImage.prototype.getFeature = function () {\r\n return { \"type\": \"Feature\", geometry: { type: \"Point\", coordinates: [this.longitude, this.latitude] } };\r\n };\r\n return MapImage;\r\n}(MapObject));\r\nexport { MapImage };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapImage\"] = MapImage;\r\n//# sourceMappingURL=MapImage.js.map","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","/**\r\n * A collection of Map-related utility functions.\r\n */\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * Converts a multi-part polygon in X/Y coordinates to a geo-multipolygon in\r\n * geo-points (lat/long).\r\n *\r\n * @param multiPolygon Source multi-polygon\r\n * @return Geo-multipolygon\r\n */\r\nexport function multiPolygonToGeo(multiPolygon) {\r\n return $array.map(multiPolygon, function (polygon) {\r\n var surface = polygon[0];\r\n var hole = polygon[1];\r\n //let holePoints: Array = [];\r\n var geoArea = [];\r\n if (surface) {\r\n geoArea.push(multiPointToGeo(surface));\r\n }\r\n if (hole) {\r\n geoArea.push(multiPointToGeo(hole));\r\n }\r\n return geoArea;\r\n });\r\n}\r\n/**\r\n * Converts a multiline in X/Y coordinates to a geo-multiline in geo-points\r\n * (lat/long).\r\n *\r\n * @param multiLine Source multiline\r\n * @return Geo-multiline\r\n */\r\nexport function multiLineToGeo(multiLine) {\r\n return $array.map(multiLine, function (multiLine) {\r\n return multiPointToGeo(multiLine);\r\n });\r\n}\r\n/**\r\n * Converts multiple X/Y points into a lat/long geo-points.\r\n *\r\n * @param points Source points\r\n * @return Geo-points\r\n */\r\nexport function multiPointToGeo(points) {\r\n return $array.map(points, function (point) {\r\n return pointToGeo(point);\r\n });\r\n}\r\n/**\r\n * Converts multiple X/Y points into a lat/long geo-points.\r\n *\r\n * @param points Source points\r\n * @return Geo-points\r\n */\r\nexport function multiGeoToPoint(geoPoints) {\r\n return $array.map(geoPoints, geoToPoint);\r\n}\r\n/**\r\n * Converts X/Y point into a lat/long geo-point.\r\n *\r\n * @param point Source point\r\n * @return Geo-point\r\n */\r\nexport function pointToGeo(point) {\r\n return { longitude: point[0], latitude: point[1] };\r\n}\r\n/**\r\n * Converts lat/long geo-point into a X/Y point.\r\n *\r\n * @param point Source geo-point\r\n * @return X/Y point\r\n */\r\nexport function geoToPoint(geoPoint) {\r\n return [geoPoint.longitude, geoPoint.latitude];\r\n}\r\n/**\r\n * Converts geo line (collection of lat/long coordinates) to screen line (x/y).\r\n *\r\n * @param multiGeoLine Source geo line\r\n * @return Screen line\r\n */\r\nexport function multiGeoLineToMultiLine(multiGeoLine) {\r\n return $array.map(multiGeoLine, function (segment) {\r\n return $array.map(segment, geoToPoint);\r\n });\r\n}\r\n/**\r\n * Converts a geo polygon (collection of lat/long coordinates) to screen\r\n * polygon (x/y).\r\n *\r\n * @param multiGeoPolygon Source polygon\r\n * @return Screen polygon\r\n */\r\nexport function multiGeoPolygonToMultipolygon(multiGeoPolygon) {\r\n return $array.map(multiGeoPolygon, function (geoPolygon) {\r\n var surface = geoPolygon[0];\r\n var hole = geoPolygon[1];\r\n var multiPolygon = [];\r\n if (surface) {\r\n multiPolygon.push(multiGeoToPoint(surface));\r\n }\r\n if (hole) {\r\n multiPolygon.push(multiGeoToPoint(hole));\r\n }\r\n return multiPolygon;\r\n });\r\n}\r\n/**\r\n * Returns a set of geographical coordinates for the circle with a center\r\n * at specific lat/long coordinates and radius (in degrees).\r\n *\r\n * @since 4.3.0\r\n * @param longitude Center longitude\r\n * @param latitude Center latitude\r\n * @param radius Radius (degrees)\r\n * @return Circle coordinates\r\n */\r\nexport function getCircle(longitude, latitude, radius) {\r\n return [d3geo.geoCircle().center([longitude, latitude]).radius(radius)().coordinates];\r\n}\r\n/**\r\n * Returns a set of screen coordinates that represents a \"background\" area\r\n * between provided extremities.\r\n *\r\n * @since 4.3.0\r\n * @param north North latitude\r\n * @param east East longitude\r\n * @param south South latitude\r\n * @param west West longitude\r\n * @return Polygon\r\n */\r\nexport function getBackground(north, east, south, west) {\r\n var multiPolygon = [];\r\n if (west == -180) {\r\n west = -179.9999;\r\n }\r\n if (south == -90) {\r\n south = -89.9999;\r\n }\r\n if (north == 90) {\r\n north = 89.9999;\r\n }\r\n if (east == 180) {\r\n east = 179.9999;\r\n }\r\n var stepLong = Math.min(90, (east - west) / Math.ceil((east - west) / 90));\r\n var stepLat = (north - south) / Math.ceil((north - south) / 90);\r\n for (var ln = west; ln < east; ln = ln + stepLong) {\r\n var surface = [];\r\n multiPolygon.push([surface]);\r\n if (ln + stepLong > east) {\r\n stepLong = east - ln;\r\n }\r\n for (var ll = ln; ll <= ln + stepLong; ll = ll + 5) {\r\n surface.push([ll, north]);\r\n }\r\n for (var lt = north; lt >= south; lt = lt - stepLat) {\r\n surface.push([ln + stepLong, lt]);\r\n }\r\n for (var ll = ln + stepLong; ll >= ln; ll = ll - 5) {\r\n surface.push([ll, south]);\r\n }\r\n for (var lt = south; lt <= north; lt = lt + stepLat) {\r\n surface.push([ln, lt]);\r\n }\r\n }\r\n return multiPolygon;\r\n}\r\n//# sourceMappingURL=MapUtils.js.map","/**\r\n * Map polygon module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapObject } from \"./MapObject\";\r\nimport { Polygon } from \"../../core/elements/Polygon\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport $polylabel from \"polylabel\";\r\nimport * as $mapUtils from \"./MapUtils\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to draw a polygon on the map.\r\n *\r\n * @see {@link IMapPolygonEvents} for a list of available events\r\n * @see {@link IMapPolygonAdapters} for a list of available Adapters\r\n */\r\nvar MapPolygon = /** @class */ (function (_super) {\r\n __extends(MapPolygon, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapPolygon() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapPolygon\";\r\n _this.polygon = _this.createChild(Polygon);\r\n _this.polygon.shouldClone = false;\r\n _this.polygon.applyOnClones = true;\r\n _this.setPropertyValue(\"precision\", 0.5);\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.fill = interfaceColors.getFor(\"secondaryButton\");\r\n _this.stroke = interfaceColors.getFor(\"secondaryButtonStroke\");\r\n _this.strokeOpacity = 1;\r\n _this.tooltipPosition = \"pointer\";\r\n _this.nonScalingStroke = true;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n MapPolygon.prototype.getFeature = function () {\r\n if (this.multiPolygon && this.multiPolygon.length > 0) {\r\n return { \"type\": \"Feature\", geometry: { type: \"MultiPolygon\", coordinates: this.multiPolygon } };\r\n }\r\n };\r\n Object.defineProperty(MapPolygon.prototype, \"multiGeoPolygon\", {\r\n /**\r\n * @return Polygon coordinates\r\n */\r\n get: function () {\r\n var multiGeoPolygon = this.getPropertyValue(\"multiGeoPolygon\");\r\n if (!multiGeoPolygon && this.dataItem) {\r\n multiGeoPolygon = this.dataItem.multiGeoPolygon;\r\n }\r\n return multiGeoPolygon;\r\n },\r\n /**\r\n * Set of coordinates for the polygon.\r\n *\r\n * @param multiGeoPolygon Polygon coordinates\r\n */\r\n set: function (multiGeoPolygon) {\r\n this.setPropertyValue(\"multiGeoPolygon\", multiGeoPolygon, true);\r\n this.multiPolygon = $mapUtils.multiGeoPolygonToMultipolygon(multiGeoPolygon);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygon.prototype, \"multiPolygon\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n var multiPolygon = this.getPropertyValue(\"multiPolygon\");\r\n if (!multiPolygon && this.dataItem) {\r\n multiPolygon = this.dataItem.multiPolygon;\r\n }\r\n return multiPolygon;\r\n },\r\n /**\r\n * A collection of X/Y coordinates for a multi-part polygon. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Part 1\r\n * [\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ],\r\n * [ 150, 220 ],\r\n * [ 170, 240 ],\r\n * [ 100, 150 ]\r\n * ]\r\n * ],\r\n *\r\n * // Part 2\r\n * [\r\n * [\r\n * [ 300, 350 ],\r\n * [ 320, 400 ],\r\n * [ 350, 420 ],\r\n * [ 370, 440 ],\r\n * [ 300, 350 ]\r\n * ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @param multiPolygon Coordinates\r\n */\r\n set: function (multiPolygon) {\r\n if (this.setPropertyValue(\"multiPolygon\", multiPolygon)) {\r\n this.updateExtremes();\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * (Re)validates the polygon, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapPolygon.prototype.validate = function () {\r\n if (this.series) {\r\n var projection = this.series.chart.projection;\r\n var pathGenerator = projection.d3Path;\r\n if (this.multiPolygon) {\r\n if (this.series) {\r\n var feature = { type: \"MultiPolygon\", coordinates: this.multiPolygon };\r\n projection.d3Projection.precision(this.precision);\r\n this.polygon.path = pathGenerator(feature);\r\n }\r\n if (this.series.calculateVisualCenter) {\r\n var biggestArea = 0;\r\n var biggestPolygon = this.multiPolygon[0];\r\n if (this.multiPolygon.length > 1) {\r\n for (var i = 0; i < this.multiPolygon.length; i++) {\r\n var polygon = this.multiPolygon[i];\r\n var area = d3geo.geoArea({ type: \"Polygon\", coordinates: polygon });\r\n if (area > biggestArea) {\r\n biggestPolygon = polygon;\r\n biggestArea = area;\r\n }\r\n }\r\n }\r\n var center = $polylabel(biggestPolygon);\r\n this._visualLongitude = center[0];\r\n this._visualLatitude = center[1];\r\n }\r\n else {\r\n this._visualLongitude = this.longitude;\r\n this._visualLatitude = this.latitude;\r\n }\r\n }\r\n }\r\n _super.prototype.validate.call(this);\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n */\r\n MapPolygon.prototype.measureElement = function () {\r\n // Overriding, just to avoid extra measure\r\n };\r\n Object.defineProperty(MapPolygon.prototype, \"latitude\", {\r\n /**\r\n * Latitude of the geometrical center of the polygon.\r\n *\r\n * @readonly\r\n * @return Center latitude\r\n */\r\n get: function () {\r\n return this.north + (this.south - this.north) / 2;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygon.prototype, \"longitude\", {\r\n /**\r\n * Longitude of the geometrical center of the polygon.\r\n *\r\n * @readonly\r\n * @return Center longitude\r\n */\r\n get: function () {\r\n return this.east + (this.west - this.east) / 2;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygon.prototype, \"visualLatitude\", {\r\n /**\r\n * @return Latitude\r\n */\r\n get: function () {\r\n var latitude = this.getPropertyValue(\"visualLatitude\");\r\n if ($type.isNumber(latitude)) {\r\n return (latitude);\r\n }\r\n if (!this._adapterO) {\r\n return this._visualLatitude;\r\n }\r\n else {\r\n return this._adapterO.apply(\"visualLatitude\", this._visualLatitude);\r\n }\r\n },\r\n /**\r\n * Latitude of the visual center of the polygon.\r\n *\r\n * It may (and probably won't) coincide with geometrical center.\r\n *\r\n * @since 4.3.0\r\n * @param value Latitude\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"visualLatitude\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygon.prototype, \"visualLongitude\", {\r\n /**\r\n * @return Longitude\r\n */\r\n get: function () {\r\n var longitude = this.getPropertyValue(\"visualLongitude\");\r\n if ($type.isNumber(longitude)) {\r\n return (longitude);\r\n }\r\n if (!this._adapterO) {\r\n return this._visualLongitude;\r\n }\r\n else {\r\n return this._adapterO.apply(\"visualLongitude\", this._visualLongitude);\r\n }\r\n },\r\n /**\r\n * Longitude of the visual center of the polygon.\r\n *\r\n * It may (and probably won't) coincide with geometrical center.\r\n *\r\n * @since 4.3.0\r\n * @param value Longitude\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"visualLongitude\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygon.prototype, \"pixelWidth\", {\r\n /**\r\n * Not 100% sure about this, as if we add something to MapPolygon this\r\n * won't be true, but otherwise we will get all 0 and the tooltip won't\r\n * be positioned properly\r\n * @hidden\r\n */\r\n /**\r\n * Element's width in pixels.\r\n *\r\n * @readonly\r\n * @return Width (px)\r\n */\r\n get: function () {\r\n return this.polygon.pixelWidth;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygon.prototype, \"pixelHeight\", {\r\n /**\r\n * Element's height in pixels.\r\n *\r\n * @readonly\r\n * @return Width (px)\r\n */\r\n get: function () {\r\n return this.polygon.pixelHeight;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all properties from another instance of [[MapPolygon]].\r\n *\r\n * @param source Source series\r\n */\r\n MapPolygon.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.polygon.copyFrom(source.polygon);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapPolygon.prototype.updateExtremes = function () {\r\n _super.prototype.updateExtremes.call(this);\r\n };\r\n Object.defineProperty(MapPolygon.prototype, \"boxArea\", {\r\n /**\r\n * @ignore\r\n * used to sorth polygons from big to small\r\n */\r\n get: function () {\r\n return (this.north - this.south) * (this.east - this.west);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * X coordinate for the slice tooltip.\r\n *\r\n * @ignore\r\n * @return X\r\n */\r\n MapPolygon.prototype.getTooltipX = function () {\r\n return this.series.chart.projection.convert({ longitude: this.visualLongitude, latitude: this.visualLatitude }).x;\r\n };\r\n /**\r\n * Y coordinate for the slice tooltip.\r\n *\r\n * @ignore\r\n * @return Y\r\n */\r\n MapPolygon.prototype.getTooltipY = function () {\r\n return this.series.chart.projection.convert({ longitude: this.visualLongitude, latitude: this.visualLatitude }).y;\r\n };\r\n Object.defineProperty(MapPolygon.prototype, \"precision\", {\r\n get: function () {\r\n return this.getPropertyValue(\"precision\");\r\n },\r\n /**\r\n * When polygon's sides are plotted, they are bent according to the used\r\n * projection.\r\n *\r\n * `precision` introduces a setting which can control when such bending\r\n * occurs.\r\n *\r\n * If the distance (in degrees) between two points of polygon's side is less\r\n * than `precision`, no bending will take place and the line will be straight.\r\n *\r\n * Set to large number (e.g. 10000) for perfectly straight lines on all\r\n * polygon's sides.\r\n *\r\n * @since 4.9.1\r\n * @default 0.5\r\n * @param value Precision\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"precision\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MapPolygon;\r\n}(MapObject));\r\nexport { MapPolygon };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapPolygon\"] = MapPolygon;\r\n//# sourceMappingURL=MapPolygon.js.map","/**\r\n * Map polygon series module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapSeries, MapSeriesDataItem } from \"./MapSeries\";\r\nimport { MapPolygon } from \"./MapPolygon\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $mapUtils from \"./MapUtils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[MapPolygonSeries]]\r\n * @see {@link DataItem}\r\n */\r\nvar MapPolygonSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(MapPolygonSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapPolygonSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapPolygonSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n MapPolygonSeriesDataItem.prototype.getFeature = function () {\r\n if (this.multiPolygon && this.multiPolygon.length > 0) {\r\n return { \"type\": \"Feature\", geometry: { type: \"MultiPolygon\", coordinates: this.multiPolygon } };\r\n }\r\n };\r\n Object.defineProperty(MapPolygonSeriesDataItem.prototype, \"mapPolygon\", {\r\n /**\r\n * A [[MapPolygon]] element related to this data item.\r\n *\r\n * @readonly\r\n * @return Element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._mapPolygon) {\r\n var mapPolygon_1 = this.component.mapPolygons.create();\r\n this._mapPolygon = mapPolygon_1;\r\n this.addSprite(mapPolygon_1);\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.mapPolygons.removeValue(mapPolygon_1);\r\n }\r\n }));\r\n this.mapObject = mapPolygon_1;\r\n }\r\n return this._mapPolygon;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygonSeriesDataItem.prototype, \"polygon\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n return this._polygon;\r\n },\r\n /**\r\n * A collection of X/Y coordinates for a single polygon. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ],\r\n * [ 150, 200 ],\r\n * [ 170, 240 ],\r\n * [ 100, 150 ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @param polygon Coordinates\r\n */\r\n set: function (polygon) {\r\n this._polygon = polygon;\r\n this.multiPolygon = [polygon];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygonSeriesDataItem.prototype, \"multiPolygon\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n return this._multiPolygon;\r\n },\r\n /**\r\n * A collection of X/Y coordinates for a multi-part polygon. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Part 1\r\n * [\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ],\r\n * [ 150, 220 ],\r\n * [ 170, 240 ],\r\n * [ 100, 150 ]\r\n * ]\r\n * ],\r\n *\r\n * // Part 2\r\n * [\r\n * [\r\n * [ 300, 350 ],\r\n * [ 320, 400 ],\r\n * [ 350, 420 ],\r\n * [ 370, 440 ],\r\n * [ 300, 350 ]\r\n * ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @param multiPolygon Coordinates\r\n */\r\n set: function (multiPolygon) {\r\n this._multiPolygon = multiPolygon;\r\n this.updateExtremes();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygonSeriesDataItem.prototype, \"geoPolygon\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n return this._geoPolygon;\r\n },\r\n /**\r\n * A collection of lat/long coordinates for a single polygon. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * [\r\n * { latitude: -10.0, longitude: -10.0 },\r\n * { latitude: 10.0, longitude: -10.0 },\r\n * { latitude: 10.0, longitude: 10.0 },\r\n * { latitude: -10.0, longitude: -10.0 }\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.6} GeoJSON Polygon reference\r\n * @param geoPolygon Coordinates\r\n */\r\n set: function (geoPolygon) {\r\n this._geoPolygon = geoPolygon;\r\n this.multiGeoPolygon = [geoPolygon];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygonSeriesDataItem.prototype, \"multiGeoPolygon\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n return this._multiGeoPolygon;\r\n },\r\n /**\r\n * A collection of lat/long coordinates for a multi-part polygon. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * [\r\n * [\r\n * { longitude: 180.0, latitude: 40.0 },\r\n * { longitude: 180.0, latitude: 50.0 },\r\n * { longitude: 170.0, latitude: 50.0 },\r\n * { longitude: 170.0, latitude: 40.0 },\r\n * { longitude: 180.0, latitude: 40.0 }\r\n * ]\r\n * ],\r\n * [\r\n * [\r\n * { longitude: -170.0, latitude: 40.0 },\r\n * { longitude: -170.0, latitude: 50.0 },\r\n * { longitude: -180.0, latitude: 50.0 },\r\n * { longitude: -180.0, latitude: 40.0 },\r\n * { longitude: -170.0, latitude: 40.0 }\r\n * ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.7} GeoJSON MultiPolygon reference\r\n * @param multiGeoPolygon Coordinates\r\n */\r\n set: function (multiGeoPolygon) {\r\n this._multiGeoPolygon = multiGeoPolygon;\r\n this.multiPolygon = $mapUtils.multiGeoPolygonToMultipolygon(multiGeoPolygon);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MapPolygonSeriesDataItem;\r\n}(MapSeriesDataItem));\r\nexport { MapPolygonSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A series of map polygon elements.\r\n *\r\n * @see {@link IMapPolygonSeriesEvents} for a list of available Events\r\n * @see {@link IMapPolygonSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar MapPolygonSeries = /** @class */ (function (_super) {\r\n __extends(MapPolygonSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapPolygonSeries() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Indicates if series should automatically calculate visual center of the\r\n * polygons (accessible via `visualLongitude` and `visualLatitude` properties\r\n * of the [[MapPolygon]]).\r\n *\r\n * @default false\r\n * @since 4.3.0\r\n */\r\n _this.calculateVisualCenter = false;\r\n _this.className = \"MapPolygonSeries\";\r\n // Set data fields\r\n _this.dataFields.multiPolygon = \"multiPolygon\";\r\n _this.dataFields.polygon = \"polygon\";\r\n _this.dataFields.geoPolygon = \"geoPolygon\";\r\n _this.dataFields.multiGeoPolygon = \"multiGeoPolygon\";\r\n _this.setPropertyValue(\"sortPolygonsBy\", \"area\");\r\n _this.setPropertyValue(\"sortPolygonsReversed\", false);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n MapPolygonSeries.prototype.createDataItem = function () {\r\n return new MapPolygonSeriesDataItem();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapPolygonSeries.prototype.processIncExc = function () {\r\n this.mapPolygons.clear();\r\n _super.prototype.processIncExc.call(this);\r\n };\r\n /**\r\n * (Re)validates series data, effectively causing the whole series to be\r\n * redrawn.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapPolygonSeries.prototype.validateData = function () {\r\n // process geoJSON and created map objects\r\n if (this.useGeodata || this.geodata) {\r\n var geoJSON = !this._dataSources[\"geodata\"] ? this.chart.geodata : undefined;\r\n if (this.geodata) {\r\n geoJSON = this.geodata;\r\n }\r\n if (geoJSON) {\r\n var features = void 0;\r\n if (geoJSON.type == \"FeatureCollection\") {\r\n features = geoJSON.features;\r\n }\r\n else if (geoJSON.type == \"Feature\") {\r\n features = [geoJSON];\r\n }\r\n else if ([\"Point\", \"LineString\", \"Polygon\", \"MultiPoint\", \"MultiLineString\", \"MultiPolygon\"].indexOf(geoJSON.type) != -1) {\r\n features = [{ geometry: geoJSON }];\r\n }\r\n else {\r\n console.log(\"nothing found in geoJSON\");\r\n }\r\n if (features) {\r\n var _loop_1 = function (i, len) {\r\n var feature = features[i];\r\n var geometry = feature.geometry;\r\n if (geometry) {\r\n var type = geometry.type;\r\n var id_1 = feature.id;\r\n if (this_1.chart.geodataNames && this_1.chart.geodataNames[id_1]) {\r\n feature.properties.name = this_1.chart.geodataNames[id_1];\r\n }\r\n if (type == \"Polygon\" || type == \"MultiPolygon\") {\r\n if (!this_1.checkInclude(this_1.include, this_1.exclude, id_1)) {\r\n return \"continue\";\r\n }\r\n var coordinates = geometry.coordinates;\r\n if (coordinates) {\r\n // make the same as MultiPolygon\r\n if (type == \"Polygon\") {\r\n coordinates = [coordinates];\r\n }\r\n }\r\n // find data object in user-provided data\r\n var dataObject = $array.find(this_1.data, function (value, i) {\r\n return value.id == id_1;\r\n });\r\n // create one if not found\r\n if (!dataObject) {\r\n dataObject = { multiPolygon: coordinates, id: id_1, madeFromGeoData: true };\r\n this_1.data.push(dataObject);\r\n }\r\n // in case found\r\n else {\r\n // if user-provided object doesn't have points data provided in any way:\r\n if (!dataObject.multiPolygon) {\r\n dataObject.multiPolygon = coordinates;\r\n }\r\n }\r\n // copy properties data to datacontext\r\n $utils.softCopyProperties(feature.properties, dataObject);\r\n }\r\n }\r\n };\r\n var this_1 = this;\r\n for (var i = 0, len = features.length; i < len; i++) {\r\n _loop_1(i, len);\r\n }\r\n }\r\n }\r\n }\r\n _super.prototype.validateData.call(this);\r\n };\r\n /**\r\n * (Re)validates the series\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapPolygonSeries.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n this.dataItems.each(function (dataItem) {\r\n $utils.used(dataItem.mapPolygon);\r\n });\r\n if (this.sortPolygonsBy != \"none\") {\r\n var sortBy_1 = this.sortPolygonsBy;\r\n var reversed_1 = this.sortPolygonsReversed;\r\n this.mapPolygons.sort(function (a, b) {\r\n var valA = \"\";\r\n var valB = \"\";\r\n var dirA = -1;\r\n var dirB = 1;\r\n switch (sortBy_1) {\r\n case \"area\":\r\n valA = a.boxArea;\r\n valB = b.boxArea;\r\n dirA = -1;\r\n dirB = 1;\r\n break;\r\n case \"name\":\r\n valA = a.dataItem.dataContext.name || \"\";\r\n valB = b.dataItem.dataContext.name || \"\";\r\n dirA = 1;\r\n dirB = -1;\r\n break;\r\n case \"id\":\r\n valA = a.dataItem.dataContext.id || \"\";\r\n valB = b.dataItem.dataContext.id || \"\";\r\n dirA = 1;\r\n dirB = -1;\r\n break;\r\n case \"latitude\":\r\n valA = reversed_1 ? a.south : a.north;\r\n valB = reversed_1 ? b.south : b.north;\r\n dirA = -1;\r\n dirB = 1;\r\n break;\r\n case \"longitude\":\r\n valA = reversed_1 ? a.east : a.west;\r\n valB = reversed_1 ? b.east : b.west;\r\n dirA = 1;\r\n dirB = -1;\r\n break;\r\n }\r\n if (valA < valB) {\r\n return reversed_1 ? dirB : dirA;\r\n }\r\n if (valA > valB) {\r\n return reversed_1 ? dirA : dirB;\r\n }\r\n return 0;\r\n });\r\n this.mapPolygons.each(function (mapPolygon, index) {\r\n mapPolygon.validate();\r\n // makes small go first to avoid hover problems with IE\r\n if (!mapPolygon.zIndex && !mapPolygon.propertyFields.zIndex) {\r\n mapPolygon.zIndex = 1000000 - index;\r\n }\r\n });\r\n }\r\n };\r\n Object.defineProperty(MapPolygonSeries.prototype, \"mapPolygons\", {\r\n /**\r\n * List of polygon elements in the series.\r\n *\r\n * @return Polygon list\r\n */\r\n get: function () {\r\n if (!this._mapPolygons) {\r\n var polygonTemplate = new MapPolygon();\r\n var mapPolygons = new ListTemplate(polygonTemplate);\r\n this._disposers.push(new ListDisposer(mapPolygons));\r\n this._disposers.push(mapPolygons.template);\r\n mapPolygons.template.focusable = true;\r\n mapPolygons.events.on(\"inserted\", this.handleObjectAdded, this, false);\r\n this._mapPolygons = mapPolygons;\r\n this._mapObjects = mapPolygons;\r\n }\r\n return this._mapPolygons;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * returns MapPolygon by id in geoJSON file\r\n * @param polygon id\r\n * @return {MapPolygon}\r\n */\r\n MapPolygonSeries.prototype.getPolygonById = function (id) {\r\n return $iter.find(this.mapPolygons.iterator(), function (mapPolygon) {\r\n var dataContext = mapPolygon.dataItem.dataContext;\r\n return dataContext.id == id;\r\n });\r\n };\r\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\r\n MapPolygonSeries.prototype.copyFrom = function (source) {\r\n this.mapPolygons.template.copyFrom(source.mapPolygons.template);\r\n _super.prototype.copyFrom.call(this, source);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapPolygonSeries.prototype.getFeatures = function () {\r\n var _this = this;\r\n var features = [];\r\n this.dataItems.each(function (dataItem) {\r\n var feature = dataItem.getFeature();\r\n if (feature) {\r\n features.push(feature);\r\n }\r\n });\r\n this.mapPolygons.each(function (mapPolygon) {\r\n if (_this.dataItems.indexOf(mapPolygon._dataItem) == -1) {\r\n var feature = mapPolygon.getFeature();\r\n if (feature) {\r\n features.push(feature);\r\n }\r\n }\r\n });\r\n return features;\r\n };\r\n Object.defineProperty(MapPolygonSeries.prototype, \"sortPolygonsBy\", {\r\n /**\r\n * @return How to sort map polygons\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"sortPolygonsBy\");\r\n },\r\n /**\r\n * How to order polygons in actual SVG document. Affects selection order\r\n * using TAB key.\r\n *\r\n * Available options: `\"area\"` (default), `\"name\"`, `\"longitude\"`,\r\n * `\"latitude\"`, `\"id\"`, and `\"none\"`.\r\n *\r\n * @default area\r\n * @since 4.9.36\r\n * @param value How to sort map polygons\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"sortPolygonsBy\", value)) {\r\n this.invalidateData();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapPolygonSeries.prototype, \"sortPolygonsReversed\", {\r\n /**\r\n * @return Reverse polygon sort direction\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"sortPolygonsReversed\");\r\n },\r\n /**\r\n * If `sortPolygonsBy` is set to something other than `\"none\"`, polygons\r\n * will be sorted by the given parameter, using natural sort direction.\r\n *\r\n * Setting `sortPolygonsReversed = true` will reverse this direction.\r\n *\r\n * @default false\r\n * @since 4.9.36\r\n * @param value Reverse polygon sort direction\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"sortPolygonsReversed\", value)) {\r\n this.invalidateData();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MapPolygonSeries;\r\n}(MapSeries));\r\nexport { MapPolygonSeries };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapPolygonSeries\"] = MapPolygonSeries;\r\nregistry.registeredClasses[\"MapPolygonSeriesDataItem\"] = MapPolygonSeriesDataItem;\r\n//# sourceMappingURL=MapPolygonSeries.js.map","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default x => x;\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","import {Adder} from \"d3-array\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar lengthSum,\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum = new Adder();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math.js\";\n\nexport default function(a, b) {\n var x0 = a[0] * radians,\n y0 = a[1] * radians,\n x1 = b[0] * radians,\n y1 = b[1] * radians,\n cy0 = cos(y0),\n sy0 = sin(y0),\n cy1 = cos(y1),\n sy1 = sin(y1),\n kx0 = cy0 * cos(x0),\n ky0 = cy0 * sin(x0),\n kx1 = cy1 * cos(x1),\n ky1 = cy1 * sin(x1),\n d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n k = sin(d);\n\n var interpolate = d ? function(t) {\n var B = sin(t *= d) / k,\n A = sin(d - t) / k,\n x = A * kx0 + B * kx1,\n y = A * ky0 + B * ky1,\n z = A * sy0 + B * sy1;\n return [\n atan2(y, x) * degrees,\n atan2(z, sqrt(x * x + y * y)) * degrees\n ];\n } : function() {\n return [x0 * degrees, y0 * degrees];\n };\n\n interpolate.distance = d;\n\n return interpolate;\n}\n","import length from \"./length.js\";\n\nvar coordinates = [null, null],\n object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return length(object);\n}\n","/**\r\n * This module contains funcitonality related to geographical projections\r\n */\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as $math from \"../../../core/utils/Math\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * This is a base class for a geographical projection.\r\n */\r\nvar Projection = /** @class */ (function () {\r\n function Projection() {\r\n this.d3Projection = d3geo.geoEquirectangular();\r\n }\r\n Object.defineProperty(Projection.prototype, \"d3Projection\", {\r\n /**\r\n * d3 projection\r\n */\r\n get: function () {\r\n return this._d3Projection;\r\n },\r\n /**\r\n * d3 projection\r\n */\r\n set: function (projection) {\r\n this._d3Projection = projection;\r\n projection.precision(0.1);\r\n this._d3Path = d3geo.geoPath().projection(projection);\r\n if (this.chart) {\r\n this.chart.invalidateProjection();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Projection.prototype, \"d3Path\", {\r\n /**\r\n * d3 path generator method\r\n * @ignore\r\n */\r\n get: function () {\r\n return this._d3Path;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Projection.prototype, \"scale\", {\r\n /**\r\n * @ignore\r\n */\r\n get: function () {\r\n return this.d3Projection.scale() / 100;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts a geographical point (lat/long) to a screen point (x/y)\r\n * @param geoPoint Geo point (lat/long)\r\n * @return Screen point (x/y)\r\n */\r\n Projection.prototype.convert = function (geoPoint) {\r\n /*\r\n geoPoint = $geo.normalizePoint(geoPoint);\r\n geoPoint = this.rotate(geoPoint, this.deltaLongitude, this.deltaLatitude, this.deltaGama);\r\n let pointInRadians: IPoint = this.project(geoPoint.longitude * $math.RADIANS, geoPoint.latitude * $math.RADIANS);\r\n return {\r\n x: $math.round(pointInRadians.x * $math.DEGREES - this.centerPoint.x, 4) * this.scale,\r\n y: $math.round(-pointInRadians.y * $math.DEGREES - this.centerPoint.y, 4) * this.scale\r\n };*/\r\n var p = this.d3Projection([geoPoint.longitude, geoPoint.latitude]);\r\n if (p) {\r\n return { x: p[0], y: p[1] };\r\n }\r\n };\r\n /**\r\n * Converts a screen point (x/y) to a geographical point (lat/long)\r\n * @param point Screen point (x/y)\r\n * @return Geo point (lat/long)\r\n */\r\n Projection.prototype.invert = function (point) {\r\n /*\r\n let pointInRadians: IGeoPoint = this.unproject((point.x / this.scale + this.centerPoint.x) * $math.RADIANS, (-point.y / this.scale - this.centerPoint.y) * $math.RADIANS);\r\n\r\n let geoPoint = { longitude: pointInRadians.longitude * $math.DEGREES, latitude: pointInRadians.latitude * $math.DEGREES };\r\n\r\n geoPoint = this.unrotate(geoPoint, this.deltaLongitude, this.deltaLatitude, this.deltaGama);\r\n */\r\n var p = this.d3Projection.invert([point.x, point.y]);\r\n if (p) {\r\n return { longitude: p[0], latitude: p[1] };\r\n }\r\n };\r\n /**\r\n * Returns X/Y coordinates.\r\n * Individual projections will override this method to apply their own\r\n * projection logic.\r\n * @deprecated\r\n * @param lambda [description]\r\n * @param phi [description]\r\n * @return X/Y coordinates\r\n * @todo Needs description\r\n */\r\n Projection.prototype.project = function (lambda, phi) {\r\n return this.convert({ longitude: lambda * $math.DEGREES, latitude: phi * $math.DEGREES });\r\n };\r\n /**\r\n * Returns geographical coordinates (lat/long).\r\n * Individual projections will override this method to apply their own\r\n * projection logic.\r\n * @deprecated\r\n * @param x X coordinate\r\n * @param y Y coordinate\r\n * @return Geographical point\r\n * @todo Needs description\r\n */\r\n Projection.prototype.unproject = function (x, y) {\r\n return this.invert({ x: x, y: y });\r\n };\r\n /**\r\n * @ignore\r\n * @deprecated\r\n */\r\n Projection.prototype.rotate = function (geoPoint, deltaLongitude, deltaLatitude, deltaGamma) {\r\n var deltaLambda = deltaLongitude * $math.RADIANS;\r\n var deltaPhi = deltaLatitude * $math.RADIANS;\r\n deltaGamma = deltaGamma * $math.RADIANS;\r\n var lambda = geoPoint.longitude * $math.RADIANS + deltaLambda;\r\n var phi = geoPoint.latitude * $math.RADIANS;\r\n var cosDeltaPhi = Math.cos(deltaPhi);\r\n var sinDeltaPhi = Math.sin(deltaPhi);\r\n var cosDeltaGamma = Math.cos(deltaGamma);\r\n var sinDeltaGamma = Math.sin(deltaGamma);\r\n var cosPhi = Math.cos(phi);\r\n var x = Math.cos(lambda) * cosPhi;\r\n var y = Math.sin(lambda) * cosPhi;\r\n var z = Math.sin(phi);\r\n var k = z * cosDeltaPhi + x * sinDeltaPhi;\r\n return { longitude: $math.DEGREES * Math.atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), latitude: $math.DEGREES * Math.asin(k * cosDeltaGamma + y * sinDeltaGamma) };\r\n };\r\n /**\r\n * @ignore\r\n * @deprecated\r\n */\r\n Projection.prototype.unrotate = function (geoPoint, deltaLongitude, deltaLatitude, deltaGamma) {\r\n var deltaLambda = deltaLongitude * $math.RADIANS;\r\n var deltaPhi = deltaLatitude * $math.RADIANS;\r\n deltaGamma = deltaGamma * $math.RADIANS;\r\n var lambda = geoPoint.longitude * $math.RADIANS - deltaLambda;\r\n var phi = geoPoint.latitude * $math.RADIANS;\r\n var cosDeltaPhi = Math.cos(deltaPhi);\r\n var sinDeltaPhi = Math.sin(deltaPhi);\r\n var cosDeltaGamma = Math.cos(deltaGamma);\r\n var sinDeltaGamma = Math.sin(deltaGamma);\r\n var cosPhi = Math.cos(phi);\r\n var x = Math.cos(lambda) * cosPhi;\r\n var y = Math.sin(lambda) * cosPhi;\r\n var z = Math.sin(phi);\r\n var k = z * cosDeltaGamma - y * sinDeltaGamma;\r\n return { longitude: $math.DEGREES * Math.atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), latitude: $math.DEGREES * Math.asin(k * cosDeltaPhi - x * sinDeltaPhi) };\r\n };\r\n //@todo: move to some utils?\r\n //@todo: add credits to: https://www.movable-type.co.uk/scripts/latlong.html\r\n Projection.prototype.intermediatePoint = function (pointA, pointB, position) {\r\n var p = d3geo.geoInterpolate([pointA.longitude, pointA.latitude], [pointB.longitude, pointB.latitude])(position);\r\n return { longitude: p[0], latitude: p[1] };\r\n };\r\n ;\r\n // returns radians\r\n Projection.prototype.multiDistance = function (multiGeoLine) {\r\n var distance = 0;\r\n for (var s = 0; s < multiGeoLine.length; s++) {\r\n var points = multiGeoLine[s];\r\n if (points.length > 1) {\r\n for (var p = 1; p < points.length; p++) {\r\n var pointA = points[p - 1];\r\n var pointB = points[p];\r\n distance += this.distance(pointA, pointB);\r\n }\r\n }\r\n }\r\n return distance;\r\n };\r\n // returns radians\r\n Projection.prototype.distance = function (pointA, pointB) {\r\n return d3geo.geoDistance([pointA.longitude, pointA.latitude], [pointB.longitude, pointB.latitude]);\r\n };\r\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\r\n Projection.prototype.positionToPoint = function (multiGeoLine, position) {\r\n if (multiGeoLine) {\r\n var intermediatePoint = this.positionToGeoPoint(multiGeoLine, position);\r\n var intermediatePointA = this.positionToGeoPoint(multiGeoLine, position - 0.01);\r\n var intermediatePointB = this.positionToGeoPoint(multiGeoLine, position + 0.01);\r\n if (intermediatePointA && intermediatePointB) {\r\n var point = this.convert(intermediatePoint);\r\n var pa = this.convert(intermediatePointA);\r\n var pb = this.convert(intermediatePointB);\r\n return { x: point.x, y: point.y, angle: $math.getAngle(pa, pb) };\r\n }\r\n }\r\n return { x: 0, y: 0, angle: 0 };\r\n };\r\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\r\n Projection.prototype.positionToGeoPoint = function (multiGeoLine, position) {\r\n if (multiGeoLine) {\r\n var totalDistance = this.multiDistance(multiGeoLine);\r\n var currentDistance = 0;\r\n var distanceAB = void 0;\r\n var positionA = 0;\r\n var positionB = 0;\r\n var pointA = void 0;\r\n var pointB = void 0;\r\n for (var s = 0; s < multiGeoLine.length; s++) {\r\n var points = multiGeoLine[s];\r\n if (points.length > 1) {\r\n for (var p = 1; p < points.length; p++) {\r\n pointA = points[p - 1];\r\n pointB = points[p];\r\n positionA = currentDistance / totalDistance;\r\n distanceAB = this.distance(pointA, pointB);\r\n currentDistance += distanceAB;\r\n positionB = currentDistance / totalDistance;\r\n if (positionA <= position && positionB > position) {\r\n s = multiGeoLine.length;\r\n break;\r\n }\r\n }\r\n }\r\n else if (points.length == 1) {\r\n pointA = points[0];\r\n pointB = points[0];\r\n positionA = 0;\r\n positionB = 1;\r\n }\r\n }\r\n if (pointA && pointB) {\r\n var positionAB = (position - positionA) / (positionB - positionA);\r\n return this.intermediatePoint(pointA, pointB, positionAB);\r\n }\r\n }\r\n return { longitude: 0, latitude: 0 };\r\n };\r\n return Projection;\r\n}());\r\nexport { Projection };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Projection\"] = Projection;\r\n//# sourceMappingURL=Projection.js.map","/**\r\n * A module for the mini-map control.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a \"bird's eye\" view of the whole map.\r\n *\r\n * This control creates a mini-map with the whole of the map, highlighting\r\n * the area which is in the current viewport of the map map.\r\n *\r\n * @see {@link ISmallMapEvents} for a list of available events\r\n * @see {@link ISmallMapAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar SmallMap = /** @class */ (function (_super) {\r\n __extends(SmallMap, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SmallMap() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A target map.\r\n */\r\n _this._chart = new MutableValueDisposer();\r\n _this.className = \"SmallMap\";\r\n // Set defaults\r\n _this.align = \"left\";\r\n _this.valign = \"bottom\";\r\n _this.percentHeight = 20;\r\n _this.percentWidth = 20;\r\n _this.margin(5, 5, 5, 5);\r\n var interfaceColors = new InterfaceColorSet();\r\n // Set background defailts\r\n _this.background.fillOpacity = 0.9;\r\n _this.background.fill = interfaceColors.getFor(\"background\");\r\n // Set up events\r\n _this.events.on(\"hit\", _this.moveToPosition, _this, false);\r\n _this.events.on(\"maxsizechanged\", _this.updateMapSize, _this, false);\r\n // Create a container\r\n _this.seriesContainer = _this.createChild(Container);\r\n _this.seriesContainer.shouldClone = false;\r\n // Create an outline rectangle\r\n var rectangle = _this.createChild(Rectangle);\r\n rectangle.shouldClone = false;\r\n rectangle.stroke = interfaceColors.getFor(\"alternativeBackground\");\r\n rectangle.strokeWidth = 1;\r\n rectangle.strokeOpacity = 0.5;\r\n rectangle.fill = color(); //\"none\";\r\n rectangle.verticalCenter = \"middle\";\r\n rectangle.horizontalCenter = \"middle\";\r\n rectangle.isMeasured = false;\r\n rectangle.visible = false;\r\n _this.rectangle = rectangle;\r\n _this._disposers.push(_this._chart);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(SmallMap.prototype, \"series\", {\r\n /**\r\n * A list of map series used to draw the mini-map.\r\n *\r\n * @readonly\r\n * @return Series\r\n */\r\n get: function () {\r\n if (!this._series) {\r\n this._series = new List();\r\n this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false);\r\n this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false);\r\n }\r\n return this._series;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Decorates a new series when they are pushed into a `series` list.\r\n *\r\n * @param event Event\r\n */\r\n SmallMap.prototype.handleSeriesAdded = function (event) {\r\n var series = event.newValue;\r\n if (this.chart.series.contains(series)) {\r\n var newSeries = series.clone();\r\n this._series.removeValue(series);\r\n this._series.push(newSeries);\r\n series = newSeries;\r\n this.chart.dataUsers.push(newSeries);\r\n }\r\n series.chart = this.chart;\r\n series.parent = this.seriesContainer;\r\n series.interactionsEnabled = false;\r\n series.events.on(\"inited\", this.updateMapSize, this, false);\r\n series.hidden = false;\r\n };\r\n /**\r\n * Cleans up after series are removed from Scrollbar.\r\n *\r\n * @param event Event\r\n */\r\n SmallMap.prototype.handleSeriesRemoved = function (event) {\r\n //let sourceSeries: MapSeries = event.oldValue;\r\n this.invalidate();\r\n };\r\n /**\r\n * Moves main map pan position after click on the small map.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n SmallMap.prototype.moveToPosition = function (event) {\r\n var rectPoint = $utils.spritePointToSprite(event.spritePoint, this, this.seriesContainer);\r\n var geoPoint = this.chart.seriesPointToGeo(rectPoint);\r\n this.chart.zoomToGeoPoint(geoPoint, this.chart.zoomLevel, true);\r\n };\r\n Object.defineProperty(SmallMap.prototype, \"chart\", {\r\n /**\r\n * @return Chart/map\r\n */\r\n get: function () {\r\n return this._chart.get();\r\n },\r\n /**\r\n * A chart/map that this control is meant for.\r\n *\r\n * @param chart Chart/map\r\n */\r\n set: function (chart) {\r\n if (this.chart != chart) {\r\n this._chart.set(chart, new MultiDisposer([\r\n //chart.events.on(\"zoomlevelchanged\", this.updateRectangle, this, false),\r\n chart.events.on(\"mappositionchanged\", this.updateRectangle, this, false),\r\n chart.events.on(\"scaleratiochanged\", this.updateMapSize, this, false)\r\n ]));\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates the viewport recangle as per current map zoom/pan position.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n SmallMap.prototype.updateRectangle = function () {\r\n var chart = this.chart;\r\n var zoomLevel = chart.zoomLevel;\r\n var rectangle = this.rectangle;\r\n rectangle.width = this.pixelWidth / zoomLevel;\r\n rectangle.height = this.pixelHeight / zoomLevel;\r\n var scale = Math.min(this.percentWidth, this.percentHeight) / 100;\r\n var seriesContainer = chart.seriesContainer;\r\n rectangle.x = Math.ceil((-seriesContainer.pixelX) * scale / zoomLevel) + this.seriesContainer.pixelX;\r\n rectangle.y = Math.ceil((-seriesContainer.pixelY) * scale / zoomLevel) + this.seriesContainer.pixelY;\r\n rectangle.validate();\r\n };\r\n /**\r\n * Update map size so that internal elements can redraw themselves after\r\n * the size of the small map changes.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n SmallMap.prototype.updateMapSize = function () {\r\n if (this.chart) {\r\n var scale = this.chart.scaleRatio * Math.min(this.percentWidth, this.percentHeight) / 100;\r\n this.seriesContainer.scale = scale;\r\n var bbox = {\r\n width: 0,\r\n height: 0,\r\n x: 0,\r\n y: 0\r\n };\r\n try { // Add exception catching to tame FF\r\n bbox = this.seriesContainer.group.node.getBBox();\r\n }\r\n catch (err) { }\r\n if (bbox.width > 0) {\r\n this.rectangle.visible = true;\r\n }\r\n this.seriesContainer.x = this.pixelWidth / 2 - bbox.x * scale - bbox.width / 2 * scale;\r\n this.seriesContainer.y = this.pixelHeight / 2 - bbox.y * scale - bbox.height / 2 * scale;\r\n this.updateRectangle();\r\n this.afterDraw();\r\n }\r\n };\r\n /**\r\n * Update elements after drawing the small map.\r\n */\r\n SmallMap.prototype.afterDraw = function () {\r\n _super.prototype.afterDraw.call(this);\r\n //this.seriesContainer.moveTo({ x: this.pixelWidth / 2, y: this.pixelHeight / 2 });\r\n this.rectangle.maskRectangle = { x: -1, y: -1, width: Math.ceil(this.pixelWidth + 2), height: Math.ceil(this.pixelHeight + 2) };\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n SmallMap.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up series\r\n if ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n for (var i = 0, len = config.series.length; i < len; i++) {\r\n var series = config.series[i];\r\n if ($type.hasValue(series) && $type.isString(series) && this.map.hasKey(series)) {\r\n config.series[i] = this.map.getKey(series);\r\n }\r\n }\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n return SmallMap;\r\n}(Container));\r\nexport { SmallMap };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SmallMap\"] = SmallMap;\r\n//# sourceMappingURL=SmallMap.js.map","/**\r\n * A collection of GeoJSON format-related utility functions.\r\n */\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n/**\r\n * Normalizes a geo-point.\r\n *\r\n * @ignore Exclude from docs\r\n * @param geoPoint Source geo-point\r\n * @return Normalized geo-point\r\n */\r\nexport function normalizePoint(geoPoint) {\r\n var longitude = wrapAngleTo180(geoPoint.longitude);\r\n var latitude = Math.asin(Math.sin((geoPoint.latitude * $math.RADIANS))) * $math.DEGREES;\r\n var latitude180 = wrapAngleTo180(geoPoint.latitude);\r\n if (Math.abs(latitude180) > 90) {\r\n longitude = wrapAngleTo180(longitude + 180);\r\n }\r\n geoPoint.longitude = longitude;\r\n geoPoint.latitude = latitude;\r\n return geoPoint;\r\n}\r\n/**\r\n * Normalizes all points of a geo-line.\r\n *\r\n * @ignore Exclude from docs\r\n * @param multiline Source geo-line\r\n * @return Normalized geo-line\r\n */\r\nexport function normalizeMultiline(multiline) {\r\n $array.each(multiline, function (segment) {\r\n $array.each(segment, function (point) {\r\n normalizePoint(point);\r\n });\r\n });\r\n return multiline;\r\n}\r\n/**\r\n * [wrapAngleTo180 description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n * @param angle Angle\r\n * @return Angle\r\n */\r\nexport function wrapAngleTo180(angle) {\r\n angle = angle % 360;\r\n if (angle > 180) {\r\n angle -= 360;\r\n }\r\n if (angle < -180) {\r\n angle += 360;\r\n }\r\n return angle;\r\n}\r\n/**\r\n * Converts a geo point to a regular point object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param geoPoint Source geo point\r\n * @return Point\r\n */\r\nexport function geoToPoint(geoPoint) {\r\n return { x: geoPoint.longitude, y: geoPoint.latitude };\r\n}\r\n//# sourceMappingURL=Geo.js.map","/**\r\n * Map line module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a line on the map.\r\n *\r\n * @see {@link IMapLineObjectEvents} for a list of available events\r\n * @see {@link IMapLineObjectAdapters} for a list of available Adapters\r\n */\r\nvar MapLineObject = /** @class */ (function (_super) {\r\n __extends(MapLineObject, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapLineObject() {\r\n var _this = _super.call(this) || this;\r\n _this.adjustRotation = true;\r\n _this.className = \"MapLineObject\";\r\n _this.isMeasured = false;\r\n _this.layout = \"none\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * (Re)validates element's position.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapLineObject.prototype.validatePosition = function () {\r\n var mapLine = this.mapLine;\r\n if (mapLine) {\r\n var point = mapLine.positionToPoint(this.position);\r\n this.x = point.x;\r\n this.y = point.y;\r\n if (this.adjustRotation) {\r\n this.rotation = point.angle;\r\n }\r\n var dataItem = this.mapLine.dataItem;\r\n if (dataItem) {\r\n var series = this.mapLine.dataItem.component;\r\n this.scale = 1 / series.scale;\r\n }\r\n // hide out of bounds\r\n if (mapLine.shortestDistance) {\r\n var projection = this.mapLine.series.chart.projection;\r\n var geoPoint = projection.positionToGeoPoint(mapLine.multiGeoLine, this.position);\r\n var visible = projection.d3Path({ type: 'Point', coordinates: [geoPoint.longitude, geoPoint.latitude] });\r\n if (!visible) {\r\n this.__disabled = true;\r\n }\r\n else {\r\n this.__disabled = false;\r\n }\r\n }\r\n }\r\n _super.prototype.validatePosition.call(this);\r\n };\r\n Object.defineProperty(MapLineObject.prototype, \"position\", {\r\n /**\r\n * @return Position within the line\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"position\");\r\n },\r\n /**\r\n * Sets object's relative position (0-1) within the line.\r\n *\r\n * `0` will place the object at the beginning of the line. `1` - at the end.\r\n *\r\n * Any intermediate number will place the object at some point within the\r\n * line.\r\n *\r\n * @param value Position within the line (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"position\", value, false, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapLineObject.prototype, \"adjustRotation\", {\r\n /**\r\n * @return Auto-rotate\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"adjustRotation\");\r\n },\r\n /**\r\n * If set to `true`, the object will be automatically rotated to face the\r\n * direction of the line at the specific position.\r\n *\r\n * This allows creating images that has its \"front\" always facing the logical\r\n * direction of the line.\r\n *\r\n * @default false\r\n * @param value Auto-rotate\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"adjustRotation\", value, false, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MapLineObject;\r\n}(Container));\r\nexport { MapLineObject };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapLineObject\"] = MapLineObject;\r\n//# sourceMappingURL=MapLineObject.js.map","/**\r\n * Map image series module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapSeries, MapSeriesDataItem } from \"./MapSeries\";\r\nimport { MapImage } from \"./MapImage\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $mapUtils from \"./MapUtils\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[MapImageSeries]]\r\n * @see {@link DataItem}\r\n */\r\nvar MapImageSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(MapImageSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapImageSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapImageSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n MapImageSeriesDataItem.prototype.getFeature = function () {\r\n return { \"type\": \"Feature\", geometry: { type: \"Point\", coordinates: this.point } };\r\n };\r\n Object.defineProperty(MapImageSeriesDataItem.prototype, \"mapImage\", {\r\n /**\r\n * A [[MapImage]] element related to this data item.\r\n *\r\n * @return Element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._mapImage) {\r\n var mapImage_1 = this.component.mapImages.create();\r\n this.addSprite(mapImage_1);\r\n this._mapImage = mapImage_1;\r\n this._disposers.push(mapImage_1);\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.mapImages.removeValue(mapImage_1);\r\n }\r\n }));\r\n this.mapObject = mapImage_1;\r\n }\r\n return this._mapImage;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapImageSeriesDataItem.prototype, \"point\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._point;\r\n },\r\n /**\r\n * [point description]\r\n *\r\n * @todo Description\r\n * @param point [description]\r\n */\r\n set: function (point) {\r\n this._point = point;\r\n this._geoPoint = $mapUtils.pointToGeo(point);\r\n this.updateExtremes();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapImageSeriesDataItem.prototype, \"multiPoint\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return [this._point];\r\n },\r\n /**\r\n * [point description]\r\n *\r\n * @todo Description\r\n * @param point [description]\r\n */\r\n set: function (multiPoint) {\r\n this._point = multiPoint[0];\r\n this._geoPoint = $mapUtils.pointToGeo(this._point);\r\n this.updateExtremes();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapImageSeriesDataItem.prototype, \"geoPoint\", {\r\n /**\r\n * @return Image coordinates\r\n */\r\n get: function () {\r\n return this._geoPoint;\r\n },\r\n /**\r\n * Geographical coordinates (lat/long) image is placed at.\r\n *\r\n * @param geoPoint Image coordinates\r\n */\r\n set: function (geoPoint) {\r\n this._geoPoint = geoPoint;\r\n this.point = [geoPoint.longitude, geoPoint.latitude];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MapImageSeriesDataItem;\r\n}(MapSeriesDataItem));\r\nexport { MapImageSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A series of map image (marker) elements.\r\n *\r\n * @see {@link IMapImageSeriesEvents} for a list of available Events\r\n * @see {@link IMapImageSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar MapImageSeries = /** @class */ (function (_super) {\r\n __extends(MapImageSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapImageSeries() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"MapImageSeries\";\r\n // Set data fields\r\n _this.dataFields.multiPoint = \"multiPoint\";\r\n _this.dataFields.point = \"point\";\r\n _this.dataFields.geoPoint = \"geoPoint\";\r\n _this.dataFields.multiGeoPoint = \"multiGeoPoint\";\r\n _this.ignoreBounds = true;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n MapImageSeries.prototype.createDataItem = function () {\r\n return new MapImageSeriesDataItem();\r\n };\r\n /**\r\n * (Re)validates the data of the sries, effectively forcing it to redraw\r\n * all of its elements.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapImageSeries.prototype.validateData = function () {\r\n var _this = this;\r\n if (this.data.length > 0 && this._parseDataFrom == 0) {\r\n this.mapImages.clear();\r\n }\r\n // process geoJSON and created map objects\r\n if (this.useGeodata) {\r\n if (this.useGeodata || this.geodata) {\r\n var geoJSON = this.chart.geodata;\r\n var features = void 0;\r\n if (geoJSON.type == \"FeatureCollection\") {\r\n features = geoJSON.features;\r\n }\r\n else if (geoJSON.type == \"Feature\") {\r\n features = [geoJSON];\r\n }\r\n else if ([\"Point\", \"LineString\", \"Polygon\", \"MultiPoint\", \"MultiLineString\", \"MultiPolygon\"].indexOf(geoJSON.type) != -1) {\r\n features = [{ geometry: geoJSON }];\r\n }\r\n else {\r\n console.log(\"nothing found in geoJSON\");\r\n }\r\n if (features) {\r\n var _loop_1 = function (i, len) {\r\n var feature = features[i];\r\n var geometry = feature.geometry;\r\n if (geometry) {\r\n var type = geometry.type;\r\n var id_1 = feature.id;\r\n if (type == \"Point\" || type == \"MultiPoint\") { // todo: we don't support multipoints at the moment actually\r\n if (!this_1.checkInclude(this_1.include, this_1.exclude, id_1)) {\r\n return \"continue\";\r\n }\r\n var coordinates = geometry.coordinates;\r\n // make the same as MultiPoint\r\n if (type == \"Point\") {\r\n coordinates = [coordinates];\r\n }\r\n var dataObject = $array.find(this_1.data, function (value, i) {\r\n return value.id == id_1;\r\n });\r\n if (!dataObject) {\r\n dataObject = { multiPoint: coordinates, id: id_1, madeFromGeoData: true };\r\n this_1.data.push(dataObject);\r\n }\r\n else {\r\n if (!dataObject.multiPoint) {\r\n dataObject.multiPoint = coordinates;\r\n }\r\n }\r\n // copy properties data to datacontext\r\n $utils.softCopyProperties(feature.properties, dataObject);\r\n }\r\n }\r\n };\r\n var this_1 = this;\r\n for (var i = 0, len = features.length; i < len; i++) {\r\n _loop_1(i, len);\r\n }\r\n }\r\n }\r\n }\r\n _super.prototype.validateData.call(this);\r\n // important! this should go after super.validateData\r\n // if data is parsed in chunks, images list is corrupted, fix it here\r\n $iter.each(this.dataItems.iterator(), function (dataItem) {\r\n var mapImage = dataItem.mapImage;\r\n if (!mapImage.isDisposed()) {\r\n _this.mapImages.moveValue(mapImage);\r\n if ($type.isNumber(mapImage.latitude) && $type.isNumber(mapImage.latitude)) {\r\n dataItem.geoPoint = { latitude: mapImage.latitude, longitude: mapImage.longitude };\r\n }\r\n }\r\n });\r\n };\r\n Object.defineProperty(MapImageSeries.prototype, \"mapImages\", {\r\n /**\r\n * A list of map images in the series.\r\n *\r\n * @return Map images\r\n */\r\n get: function () {\r\n if (!this._mapImages) {\r\n var template = new MapImage();\r\n var mapImages = new ListTemplate(template);\r\n this._disposers.push(new ListDisposer(mapImages));\r\n this._disposers.push(mapImages.template);\r\n mapImages.template.focusable = true;\r\n mapImages.events.on(\"inserted\", this.handleObjectAdded, this, false);\r\n this._mapImages = mapImages;\r\n this._mapObjects = mapImages;\r\n }\r\n return this._mapImages;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * (Re)validates data element, effectively triggering its redrawal.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n MapImageSeries.prototype.validateDataElement = function (dataItem) {\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n dataItem.mapImage.invalidate();\r\n };\r\n /**\r\n * (Re)validates the series\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapImageSeries.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n $iter.each(this.mapImages.iterator(), function (mapImage) {\r\n mapImage.validatePosition();\r\n });\r\n };\r\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\r\n MapImageSeries.prototype.copyFrom = function (source) {\r\n this.mapImages.template.copyFrom(source.mapImages.template);\r\n _super.prototype.copyFrom.call(this, source);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapImageSeries.prototype.getFeatures = function () {\r\n var _this = this;\r\n var features = [];\r\n this.dataItems.each(function (dataItem) {\r\n var feature = dataItem.getFeature();\r\n if (feature) {\r\n features.push(feature);\r\n }\r\n });\r\n this.mapImages.each(function (mapImage) {\r\n if (_this.dataItems.indexOf(mapImage._dataItem) == -1) {\r\n var feature = mapImage.getFeature();\r\n if (feature) {\r\n features.push(feature);\r\n }\r\n }\r\n });\r\n return features;\r\n };\r\n /**\r\n * returns MapImage by id\r\n * @param image id\r\n * @return {MapImage}\r\n */\r\n MapImageSeries.prototype.getImageById = function (id) {\r\n return $iter.find(this.mapImages.iterator(), function (mapImage) {\r\n var dataContext = mapImage.dataItem.dataContext;\r\n if (mapImage.id == id || (dataContext && dataContext.id == id)) {\r\n return true;\r\n }\r\n });\r\n };\r\n return MapImageSeries;\r\n}(MapSeries));\r\nexport { MapImageSeries };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapImageSeries\"] = MapImageSeries;\r\nregistry.registeredClasses[\"MapImageSeriesDataItem\"] = MapImageSeriesDataItem;\r\n//# sourceMappingURL=MapImageSeries.js.map","/**\r\n * Map line module\r\n */\r\nimport { __extends, __values } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapObject } from \"./MapObject\";\r\nimport { MapLineObject } from \"./MapLineObject\";\r\nimport { MapImage } from \"./MapImage\";\r\nimport { MapImageSeries } from \"./MapImageSeries\";\r\nimport { Triangle } from \"../../core/elements/Triangle\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Polyline } from \"../../core/elements/Polyline\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $geo from \"./Geo\";\r\nimport * as $mapUtils from \"./MapUtils\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to draw a line on the map.\r\n *\r\n * @see {@link IMapLineEvents} for a list of available events\r\n * @see {@link IMapLineAdapters} for a list of available Adapters\r\n */\r\nvar MapLine = /** @class */ (function (_super) {\r\n __extends(MapLine, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapLine() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A list of event disposers for images.\r\n */\r\n _this._imageListeners = {};\r\n _this.className = \"MapLine\";\r\n _this.createLine();\r\n _this.line.stroke = color();\r\n _this.line.parent = _this;\r\n _this.strokeOpacity = 1;\r\n _this.setPropertyValue(\"precision\", 0.1);\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.stroke = interfaceColors.getFor(\"grid\");\r\n _this.shortestDistance = true;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n MapLine.prototype.createLine = function () {\r\n this.line = new Polyline();\r\n };\r\n /**\r\n * Converts a position within the line (0-1) to a physical point\r\n * coordinates.\r\n *\r\n * 0 indicates start of the line, 0.5 - middle, while 1 indicates the end.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\r\n MapLine.prototype.positionToPoint = function (position) {\r\n if (this.shortestDistance) {\r\n return this.series.chart.projection.positionToPoint(this.multiGeoLine, position);\r\n }\r\n else {\r\n if (this.line) {\r\n return this.line.positionToPoint(position);\r\n }\r\n }\r\n return { x: 0, y: 0, angle: 0 };\r\n };\r\n Object.defineProperty(MapLine.prototype, \"multiGeoLine\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n var multiGeoLine = this.getPropertyValue(\"multiGeoLine\");\r\n if (!multiGeoLine && this.dataItem && this.dataItem.multiGeoLine) {\r\n multiGeoLine = this.dataItem.multiGeoLine;\r\n }\r\n return multiGeoLine;\r\n },\r\n /**\r\n * A collection of X/Y coordinates for a multi-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Segment 1\r\n * [\r\n * { longitude: 3.121, latitude: 0.58 },\r\n * { longitude: -5.199, latitude: 21.223 }\r\n * ],\r\n *\r\n * // Segment 2\r\n * [\r\n * { longitude: -5.199, latitude: 21.223 },\r\n * { longitude: -12.9, latitude: 25.85 }\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.5} GeoJSON MultiLineString reference\r\n * @param multiGeoLine Coordinates\r\n */\r\n set: function (multiGeoLine) {\r\n if (multiGeoLine && multiGeoLine.length > 0) {\r\n this.setPropertyValue(\"multiGeoLine\", $geo.normalizeMultiline(multiGeoLine), true);\r\n var multiLine = $mapUtils.multiGeoLineToMultiLine(multiGeoLine);\r\n this.setPropertyValue(\"multiLine\", multiLine);\r\n this.updateExtremes();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapLine.prototype, \"multiLine\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n var multiLine = this.getPropertyValue(\"multiLine\");\r\n if (!multiLine && this.dataItem && this.dataItem.multiLine) {\r\n multiLine = this.dataItem.multiLine;\r\n }\r\n return multiLine;\r\n },\r\n /**\r\n * A collection of X/Y coordinates for a multi-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Segment 1\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ]\r\n * ],\r\n *\r\n * // Segment 2\r\n * [\r\n * [ 120, 200 ],\r\n * [ 150, 100 ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @param multiLine Coordinates\r\n */\r\n set: function (multiLine) {\r\n this.setPropertyValue(\"multiLine\", multiLine);\r\n this.multiGeoLine = $mapUtils.multiLineToGeo(multiLine);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapLine.prototype, \"imagesToConnect\", {\r\n /**\r\n * @return {MapImages[]}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"imagesToConnect\");\r\n },\r\n /**\r\n * Instead of setting longitudes/latitudes you can set an array of images\r\n * which will be connected by the line.\r\n *\r\n * Parameter is an array that can hold string `id`'s to of the images, or\r\n * references to actual [[MapImage]] objects.\r\n *\r\n * @param images Images\r\n */\r\n set: function (images) {\r\n var _this = this;\r\n this.setPropertyValue(\"imagesToConnect\", images, true);\r\n this.handleImagesToConnect();\r\n if (this.series) {\r\n var chart = this.series.chart;\r\n if (chart) {\r\n chart.series.each(function (series) {\r\n if (series instanceof MapImageSeries) {\r\n if (!series.isReady()) {\r\n _this._disposers.push(series.events.on(\"ready\", _this.handleImagesToConnect, _this, false));\r\n }\r\n }\r\n });\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n MapLine.prototype.handleImagesToConnect = function () {\r\n var e_1, _a;\r\n var _this = this;\r\n if (this.imagesToConnect) {\r\n var segment = [];\r\n var multiGeoLine = [segment];\r\n var _loop_1 = function (image) {\r\n if ($type.isString(image)) {\r\n var chart = this_1.series.chart;\r\n if (chart) {\r\n chart.series.each(function (series) {\r\n if (series instanceof MapImageSeries) {\r\n var img = series.getImageById(image);\r\n if (img) {\r\n image = img;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n if (image instanceof MapImage) {\r\n segment.push({ longitude: image.longitude, latitude: image.latitude });\r\n if (!this_1._imageListeners[image.uid]) {\r\n var disposer = image.events.on(\"propertychanged\", function (event) {\r\n if (event.property == \"longitude\" || event.property == \"latitude\") {\r\n _this.handleImagesToConnect();\r\n _this.invalidate();\r\n }\r\n }, this_1, false);\r\n this_1._imageListeners[image.uid] = disposer;\r\n this_1._disposers.push(disposer);\r\n }\r\n }\r\n };\r\n var this_1 = this;\r\n try {\r\n for (var _b = __values(this.imagesToConnect), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var image = _c.value;\r\n _loop_1(image);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n this.multiGeoLine = multiGeoLine;\r\n }\r\n };\r\n /**\r\n * (Re)validates the line, effectively forcing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapLine.prototype.validate = function () {\r\n var chart = this.series.chart;\r\n if (this.multiLine) {\r\n if (!this.shortestDistance) {\r\n var convertedPoints = [];\r\n for (var i = 0, len = this.multiLine.length; i < len; i++) {\r\n var segment = this.multiLine[i];\r\n var convertedSegmentPoints = [];\r\n for (var s = 0, slen = segment.length; s < slen; s++) {\r\n var geoPoint = segment[s];\r\n var point = this.series.chart.projection.convert({ longitude: geoPoint[0], latitude: geoPoint[1] });\r\n convertedSegmentPoints.push(point);\r\n }\r\n convertedPoints.push(convertedSegmentPoints);\r\n }\r\n this.line.segments = convertedPoints;\r\n }\r\n else {\r\n chart.projection.d3Projection.precision(this.precision);\r\n this.line.path = chart.projection.d3Path(this.getFeature());\r\n }\r\n if (this._arrow) {\r\n this._arrow.validatePosition();\r\n }\r\n $iter.each(this.lineObjects.iterator(), function (x) {\r\n x.validatePosition();\r\n });\r\n this.handleGlobalScale();\r\n }\r\n else if (this.imagesToConnect) {\r\n this.handleImagesToConnect();\r\n }\r\n _super.prototype.validate.call(this);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapLine.prototype.getFeature = function () {\r\n if (this.multiLine && this.multiLine.length > 0 && this.multiLine[0] && this.multiLine[0].length > 0) {\r\n return { \"type\": \"Feature\", geometry: { type: \"MultiLineString\", coordinates: this.multiLine } };\r\n }\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n */\r\n MapLine.prototype.measureElement = function () {\r\n // Overriding, just to avoid extra measure\r\n };\r\n Object.defineProperty(MapLine.prototype, \"shortestDistance\", {\r\n /**\r\n * @return Real path?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"shortestDistance\");\r\n },\r\n /**\r\n * The line should take the shortest path over the globe.\r\n *\r\n * Enabling this will make the line look differently in different\r\n * projections. Only `MapLine` supports this setting, `MapArc` and\r\n * `MapSplice` don't.\r\n *\r\n * @default true\r\n * @param value Real path?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"shortestDistance\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapLine.prototype, \"lineObjects\", {\r\n /**\r\n * List of separate line objects the line consists of.\r\n *\r\n * @readonly\r\n * @return List of line objects\r\n */\r\n get: function () {\r\n if (!this._lineObjects) {\r\n this._lineObjects = new ListTemplate(new MapLineObject());\r\n this._lineObjects.events.on(\"inserted\", this.handleLineObjectAdded, this, false);\r\n this._disposers.push(new ListDisposer(this._lineObjects));\r\n this._disposers.push(this._lineObjects.template);\r\n }\r\n return this._lineObjects;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Decorate a [[LineObject]] when it is added to the line.\r\n *\r\n * @param event Event\r\n */\r\n MapLine.prototype.handleLineObjectAdded = function (event) {\r\n var mapLineObject = event.newValue;\r\n mapLineObject.mapLine = this;\r\n mapLineObject.shouldClone = false;\r\n mapLineObject.parent = this;\r\n };\r\n Object.defineProperty(MapLine.prototype, \"arrow\", {\r\n /**\r\n * @return Arrow element\r\n */\r\n get: function () {\r\n if (!this._arrow) {\r\n var arrow = this.createChild(MapLineObject);\r\n arrow.shouldClone = false;\r\n arrow.width = 8;\r\n arrow.height = 10;\r\n arrow.mapLine = this;\r\n arrow.position = 0.5;\r\n var triangle = arrow.createChild(Triangle);\r\n //triangle.shouldClone = false;\r\n triangle.fillOpacity = 1;\r\n triangle.width = percent(100);\r\n triangle.height = percent(100);\r\n triangle.rotation = 90;\r\n triangle.horizontalCenter = \"middle\";\r\n triangle.verticalCenter = \"middle\";\r\n this._arrow = arrow;\r\n }\r\n return this._arrow;\r\n },\r\n /**\r\n * A [[MapLineObject]] to use as an option arrowhead on the line.\r\n *\r\n * Just accessing this property will create a default arrowhead on the line\r\n * automatically.\r\n *\r\n * @param arrow Arrow element\r\n */\r\n set: function (arrow) {\r\n this._arrow = arrow;\r\n arrow.mapLine = this;\r\n arrow.parent = this;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies line properties and other attributes, like arrow, from another\r\n * instance of [[MapLine]].\r\n *\r\n * @param source Source map line\r\n */\r\n MapLine.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.line.copyFrom(source.line);\r\n this.lineObjects.copyFrom(source.lineObjects);\r\n if (source._arrow) {\r\n this.arrow = source.arrow.clone();\r\n }\r\n };\r\n Object.defineProperty(MapLine.prototype, \"latitude\", {\r\n /**\r\n * Latitude of the line center.\r\n *\r\n * @readonly\r\n * @return Latitude\r\n */\r\n get: function () {\r\n return this.north + (this.south - this.north) / 2;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapLine.prototype, \"longitude\", {\r\n /**\r\n * Longitude of the line center.\r\n *\r\n * @readonly\r\n * @return Latitude\r\n */\r\n get: function () {\r\n return this.east + (this.west - this.east) / 2;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * X coordinate for the slice tooltip.\r\n *\r\n * @ignore\r\n * @return X\r\n */\r\n MapLine.prototype.getTooltipX = function () {\r\n var x = this.getPropertyValue(\"tooltipX\");\r\n if (!(x instanceof Percent)) {\r\n x = percent(50);\r\n }\r\n if (x instanceof Percent) {\r\n return this.positionToPoint(x.value).x;\r\n }\r\n else {\r\n return 0;\r\n }\r\n };\r\n /**\r\n * Y coordinate for the slice tooltip.\r\n *\r\n * @ignore\r\n * @return Y\r\n */\r\n MapLine.prototype.getTooltipY = function () {\r\n var y = this.getPropertyValue(\"tooltipY\");\r\n if (!(y instanceof Percent)) {\r\n y = percent(50);\r\n }\r\n if (y instanceof Percent) {\r\n return this.positionToPoint(y.value).y;\r\n }\r\n else {\r\n return 0;\r\n }\r\n };\r\n Object.defineProperty(MapLine.prototype, \"precision\", {\r\n /**\r\n * @return Precision\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"precision\");\r\n },\r\n /**\r\n * When line is plotted, if its `shortestDistance` is set to `true` it is\r\n * bent according to the used projection, to depict the shortest distance how\r\n * it would go on the actual land.\r\n *\r\n * `precision` introduces a setting which can control when such bending\r\n * occurs.\r\n *\r\n * If the distance (in degrees) between line start and end points\r\n * is less than `precision`, no bending will take place and the line will be\r\n * straight.\r\n *\r\n * Set to large number (e.g. 10000) for perfectly straight line.\r\n *\r\n * @since 4.9.1\r\n * @default 0.1\r\n * @param value Precision\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"precision\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MapLine;\r\n}(MapObject));\r\nexport { MapLine };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapLine\"] = MapLine;\r\n//# sourceMappingURL=MapLine.js.map","/**\r\n * Map line series module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapSeries, MapSeriesDataItem } from \"./MapSeries\";\r\nimport { MapLine } from \"./MapLine\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $mapUtils from \"./MapUtils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[MapLineSeries]]\r\n * @see {@link DataItem}\r\n */\r\nvar MapLineSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(MapLineSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapLineSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapLineSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n MapLineSeriesDataItem.prototype.getFeature = function () {\r\n if (this.multiLine && this.multiLine.length > 0) {\r\n return { \"type\": \"Feature\", geometry: { type: \"MultiLineString\", coordinates: this.multiLine } };\r\n }\r\n };\r\n Object.defineProperty(MapLineSeriesDataItem.prototype, \"mapLine\", {\r\n /**\r\n * A [[MapLine]] element related to this data item.\r\n *\r\n * @readonly\r\n * @return Element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._mapLine) {\r\n var mapLine_1 = this.component.mapLines.create();\r\n this._mapLine = mapLine_1;\r\n this.addSprite(mapLine_1);\r\n this._disposers.push(mapLine_1);\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.mapLines.removeValue(mapLine_1);\r\n }\r\n }));\r\n this.mapObject = mapLine_1;\r\n }\r\n return this._mapLine;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapLineSeriesDataItem.prototype, \"line\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n return this._line;\r\n },\r\n /**\r\n * A collection of X/Y coordinates for a single-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ]\r\n * ]\r\n * ```\r\n *\r\n * @param line Coordinates\r\n */\r\n set: function (line) {\r\n this._line = line;\r\n this.multiLine = [line];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapLineSeriesDataItem.prototype, \"multiLine\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n return this._multiLine;\r\n },\r\n /**\r\n * A collection of X/Y coordinates for a multi-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Segment 1\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ]\r\n * ],\r\n *\r\n * // Segment 2\r\n * [\r\n * [ 120, 200 ],\r\n * [ 150, 100 ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @param multiLine Coordinates\r\n */\r\n set: function (multiLine) {\r\n this._multiLine = multiLine;\r\n this._multiGeoLine = $mapUtils.multiLineToGeo(multiLine);\r\n this.updateExtremes();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapLineSeriesDataItem.prototype, \"geoLine\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n return this._geoLine;\r\n },\r\n /**\r\n * A collection of lat/long coordinates for a single-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * { longitude: 3.121, latitude: 0.58 },\r\n * { longitude: -5.199, latitude: 21.223 }\r\n * ]\r\n * ```\r\n *\r\n * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.4} GeoJSON LineString reference\r\n * @param geoLine Coordinates\r\n */\r\n set: function (geoLine) {\r\n this._geoLine = geoLine;\r\n this.multiLine = $mapUtils.multiGeoLineToMultiLine([geoLine]);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapLineSeriesDataItem.prototype, \"multiGeoLine\", {\r\n /**\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n return this._multiGeoLine;\r\n },\r\n /**\r\n * A collection of X/Y coordinates for a multi-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Segment 1\r\n * [\r\n * { longitude: 3.121, latitude: 0.58 },\r\n * { longitude: -5.199, latitude: 21.223 }\r\n * ],\r\n *\r\n * // Segment 2\r\n * [\r\n * { longitude: -5.199, latitude: 21.223 },\r\n * { longitude: -12.9, latitude: 25.85 }\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.5} GeoJSON MultiLineString reference\r\n * @param multiGeoLine Coordinates\r\n */\r\n set: function (multiGeoLine) {\r\n this._multiGeoLine = multiGeoLine;\r\n this.multiLine = $mapUtils.multiGeoLineToMultiLine(multiGeoLine);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MapLineSeriesDataItem;\r\n}(MapSeriesDataItem));\r\nexport { MapLineSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A series of map line series.\r\n *\r\n * @see {@link IMapLineSeriesEvents} for a list of available Events\r\n * @see {@link IMapLineSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar MapLineSeries = /** @class */ (function (_super) {\r\n __extends(MapLineSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapLineSeries() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"MapLineSeries\";\r\n // Set data fields\r\n _this.dataFields.multiLine = \"multiLine\";\r\n _this.dataFields.line = \"line\";\r\n _this.dataFields.geoLine = \"geoLine\";\r\n _this.dataFields.multiGeoLine = \"multiGeoLine\";\r\n _this.ignoreBounds = true;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n MapLineSeries.prototype.createDataItem = function () {\r\n return new MapLineSeriesDataItem();\r\n };\r\n /**\r\n * (Re)validates series data, effectively causing the whole series to be\r\n * redrawn.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapLineSeries.prototype.validateData = function () {\r\n // process geoJSON and created map objects\r\n if (this.useGeodata || this.geodata) {\r\n var geoJSON = this.chart.geodata;\r\n if (geoJSON) {\r\n var features = void 0;\r\n if (geoJSON.type == \"FeatureCollection\") {\r\n features = geoJSON.features;\r\n }\r\n else if (geoJSON.type == \"Feature\") {\r\n features = [geoJSON];\r\n }\r\n else if ([\"Point\", \"LineString\", \"Polygon\", \"MultiPoint\", \"MultiLineString\", \"MultiPolygon\"].indexOf(geoJSON.type) != -1) {\r\n features = [{ geometry: geoJSON }];\r\n }\r\n else {\r\n console.log(\"nothing found in geoJSON\");\r\n }\r\n if (features) {\r\n var _loop_1 = function (i, len) {\r\n var feature = features[i];\r\n var geometry = feature.geometry;\r\n if (geometry) {\r\n var type = geometry.type;\r\n var id_1 = feature.id;\r\n if (type == \"LineString\" || type == \"MultiLineString\") {\r\n if (!this_1.checkInclude(this_1.include, this_1.exclude, id_1)) {\r\n return \"continue\";\r\n }\r\n var coordinates = geometry.coordinates;\r\n var dataObject = $array.find(this_1.data, function (value, i) {\r\n return value.id == id_1;\r\n });\r\n if (type == \"LineString\") {\r\n coordinates = [coordinates];\r\n }\r\n if (!dataObject) {\r\n dataObject = { multiLine: coordinates, id: id_1, madeFromGeoData: true };\r\n this_1.data.push(dataObject);\r\n }\r\n else {\r\n if (!dataObject.multiLine) {\r\n dataObject.multiLine = coordinates;\r\n }\r\n }\r\n // copy properties data to datacontext\r\n $utils.softCopyProperties(feature.properties, dataObject);\r\n }\r\n }\r\n };\r\n var this_1 = this;\r\n for (var i = 0, len = features.length; i < len; i++) {\r\n _loop_1(i, len);\r\n }\r\n }\r\n }\r\n }\r\n _super.prototype.validateData.call(this);\r\n };\r\n Object.defineProperty(MapLineSeries.prototype, \"mapLines\", {\r\n /**\r\n * A list of lines in the series.\r\n *\r\n * @return Lines\r\n */\r\n get: function () {\r\n if (!this._mapLines) {\r\n var lineTemplate = this.createLine();\r\n var mapLines = new ListTemplate(lineTemplate);\r\n this._disposers.push(new ListDisposer(mapLines));\r\n this._disposers.push(mapLines.template);\r\n mapLines.events.on(\"inserted\", this.handleObjectAdded, this, false);\r\n this._mapLines = mapLines;\r\n this._mapObjects = mapLines;\r\n }\r\n return this._mapLines;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns a new line instance of suitable type.\r\n *\r\n * @return New line\r\n */\r\n MapLineSeries.prototype.createLine = function () {\r\n return new MapLine();\r\n };\r\n /**\r\n * (Re)validates the series\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapLineSeries.prototype.validate = function () {\r\n this.dataItems.each(function (dataItem) {\r\n $utils.used(dataItem.mapLine);\r\n });\r\n _super.prototype.validate.call(this);\r\n this.mapLines.each(function (mapLine) {\r\n mapLine.validate();\r\n });\r\n };\r\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\r\n MapLineSeries.prototype.copyFrom = function (source) {\r\n this.mapLines.template.copyFrom(source.mapLines.template);\r\n _super.prototype.copyFrom.call(this, source);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapLineSeries.prototype.getFeatures = function () {\r\n var _this = this;\r\n var features = [];\r\n this.dataItems.each(function (dataItem) {\r\n var feature = dataItem.getFeature();\r\n if (feature) {\r\n features.push(feature);\r\n }\r\n });\r\n this.mapLines.each(function (mapLine) {\r\n if (_this.dataItems.indexOf(mapLine._dataItem) == -1) {\r\n var feature = mapLine.getFeature();\r\n if (feature) {\r\n features.push(feature);\r\n }\r\n }\r\n });\r\n return features;\r\n };\r\n /**\r\n * returns MapLine by id\r\n * @param line id\r\n * @return {MapLine}\r\n */\r\n MapLineSeries.prototype.getLineById = function (id) {\r\n return $iter.find(this.mapLines.iterator(), function (mapLine) {\r\n var dataContext = mapLine.dataItem.dataContext;\r\n return dataContext.id == id;\r\n });\r\n };\r\n return MapLineSeries;\r\n}(MapSeries));\r\nexport { MapLineSeries };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapLineSeries\"] = MapLineSeries;\r\nregistry.registeredClasses[\"MapLineSeriesDataItem\"] = MapLineSeriesDataItem;\r\n//# sourceMappingURL=MapLineSeries.js.map","/**\r\n * Graticule (map grid line).\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapLine } from \"./MapLine\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Graticule is a map line spanning from the poles or around the globe.\r\n *\r\n * @since 4.3.0\r\n * @see {@link IGraticuleEvents} for a list of available events\r\n * @see {@link IGraticuleAdapters} for a list of available Adapters\r\n */\r\nvar Graticule = /** @class */ (function (_super) {\r\n __extends(Graticule, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Graticule() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"Graticule\";\r\n // Apply theme\r\n _this.applyTheme();\r\n _this.shortestDistance = true;\r\n return _this;\r\n }\r\n return Graticule;\r\n}(MapLine));\r\nexport { Graticule };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Graticule\"] = Graticule;\r\n//# sourceMappingURL=Graticule.js.map","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","/**\r\n * Graticule (map grid) series functionality.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapLineSeries, MapLineSeriesDataItem } from \"./MapLineSeries\";\r\nimport { Graticule } from \"./Graticule\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as d3geo from \"d3-geo\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[GraticuleSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar GraticuleSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(GraticuleSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function GraticuleSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"GraticuleSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return GraticuleSeriesDataItem;\r\n}(MapLineSeriesDataItem));\r\nexport { GraticuleSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * This class is used to create a set of graticules (map grid).\r\n *\r\n * To enable, create like you would create any regular map series:\r\n *\r\n * ```TypeScript\r\n * let graticule = chart.series.push(new am4maps.GraticuleSeries())\r\n * graticule.mapLines.template.line.stroke = am4core.color(\"#000000\");\r\n * graticule.mapLines.template.line.strokeOpacity = 0.1;\r\n * ```\r\n * ```JavaScript\r\n * var graticule = chart.series.push(new am4maps.GraticuleSeries())\r\n * graticule.mapLines.template.line.stroke = am4core.color(\"#000000\");\r\n * graticule.mapLines.template.line.strokeOpacity = 0.1;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * \"type\": \"GraticuleSeries\",\r\n * \"mapLines\": {\r\n * \"line\": {\r\n * \"stroke\": \"#000000\",\r\n * \"strokeOpacity\": 0.1\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @since 4.3.0\r\n * @see {@link IGraticuleSeriesEvents} for a list of available Events\r\n * @see {@link IGraticuleSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar GraticuleSeries = /** @class */ (function (_super) {\r\n __extends(GraticuleSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function GraticuleSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"GraticuleSeries\";\r\n _this.longitudeStep = 10;\r\n _this.latitudeStep = 10;\r\n _this.north = 90;\r\n _this.south = -90;\r\n _this.east = -180;\r\n _this.west = 180;\r\n //this.majorLatitudeStep = 90;\r\n //this.majorLongitudeStep = 360;\r\n _this.fitExtent = true;\r\n _this.singleSprite = true;\r\n _this.events.disableType(\"geoBoundsChanged\");\r\n _this.mapLines.template.line.strokeOpacity = 0.08;\r\n _this.ignoreBounds = false;\r\n _this.hiddenInLegend = true;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n GraticuleSeries.prototype.createDataItem = function () {\r\n return new GraticuleSeriesDataItem();\r\n };\r\n GraticuleSeries.prototype.validateData = function () {\r\n var _this = this;\r\n _super.prototype.validateData.call(this);\r\n this.mapLines.clear();\r\n var graticule = d3geo.geoGraticule();\r\n if (graticule) {\r\n graticule.stepMinor([this.longitudeStep, this.latitudeStep]);\r\n graticule.stepMajor([360, 360]);\r\n var chart = this.chart;\r\n if (this.fitExtent) {\r\n graticule.extent([[chart.east, chart.north], [chart.west, chart.south]]);\r\n }\r\n else {\r\n graticule.extent([[this.east, this.north], [this.west, this.south]]);\r\n }\r\n if (this.singleSprite) {\r\n var mapLine = this.mapLines.create();\r\n mapLine.multiLine = graticule().coordinates;\r\n }\r\n else {\r\n var lineStrings = graticule.lines();\r\n $array.each(lineStrings, function (lineString) {\r\n var mapLine = _this.mapLines.create();\r\n mapLine.multiLine = [lineString.coordinates];\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * Returns a new line instance of suitable type.\r\n *\r\n * @return New line\r\n */\r\n GraticuleSeries.prototype.createLine = function () {\r\n return new Graticule();\r\n };\r\n Object.defineProperty(GraticuleSeries.prototype, \"latitudeStep\", {\r\n /**\r\n * @return Step\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"latitudeStep\");\r\n },\r\n /**\r\n * Draw a graticule (grid) every X degrees of latitude.\r\n *\r\n * @default 10\r\n * @param value Step\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"latitudeStep\", value)) {\r\n this.invalidateData();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(GraticuleSeries.prototype, \"longitudeStep\", {\r\n /**\r\n * @return Step\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"longitudeStep\");\r\n },\r\n /**\r\n * Draw a graticule (grid) every X degrees of longitude.\r\n *\r\n * @default 10\r\n * @param value Step\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"longitudeStep\", value)) {\r\n this.invalidateData();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(GraticuleSeries.prototype, \"fitExtent\", {\r\n /**\r\n * @return Fit?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"fitExtent\");\r\n },\r\n /**\r\n * Draw a thicker (major) graticule every X degrees of latitude.\r\n *\r\n * @default 90\r\n * @param value Step\r\n */\r\n // public set majorLatitudeStep(value: number) {\r\n // \tif (this.setPropertyValue(\"majorLatitudeStep\", value)) {\r\n // \t\tthis.invalidateData();\r\n // \t}\r\n // }\r\n /**\r\n * @return Step\r\n */\r\n // public get majorLatitudeStep(): number {\r\n // \treturn this.getPropertyValue(\"majorLatitudeStep\");\r\n // }\r\n /**\r\n * Draw a thicker (major) graticule every X degrees of longitude.\r\n *\r\n * @default 360\r\n * @param value Step\r\n */\r\n // public set majorLongitudeStep(value: number) {\r\n // \tif (this.setPropertyValue(\"majorLongitudeStep\", value)) {\r\n // \t\tthis.invalidateData();\r\n // \t}\r\n // }\r\n /**\r\n * @return Step\r\n */\r\n // public get majorLongitudeStep(): number {\r\n // \treturn this.getPropertyValue(\"majorLongitudeStep\");\r\n // }\r\n /**\r\n * Whether to cap graticules (grid) to actual span of the map (`true`), e.g.\r\n * where there are polygons, or draw full-world grid (`false`).\r\n *\r\n * For world maps, using `false` makes sense. For smaller maps - not so much.\r\n *\r\n * If set to `false`, the grid will be drawn from this series `east` to\r\n * `west`, and from `south` to `north` (default values: `east = -180`;\r\n * `west = 180`; `south =-90`; `north =90`).\r\n *\r\n * These can be overridden by setting `GraticuleSeries`' respective\r\n * properties.\r\n *\r\n * @default true\r\n * @param value Fit?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"fitExtent\", value)) {\r\n this.invalidateData();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(GraticuleSeries.prototype, \"singleSprite\", {\r\n /**\r\n * @return Use single sprite?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"singleSprite\");\r\n },\r\n /**\r\n * Whether to draw all the grid as a single element or as separate lines.\r\n *\r\n * Setting `true` (default) will result in better performance, whereas\r\n * `false` allows setting visual properties of each line individually.\r\n *\r\n * @default true\r\n * @param value Use single sprite?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"singleSprite\", value)) {\r\n this.invalidateData();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return GraticuleSeries;\r\n}(MapLineSeries));\r\nexport { GraticuleSeries };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GraticuleSeries\"] = GraticuleSeries;\r\nregistry.registeredClasses[\"GraticuleSeriesDataItem\"] = GraticuleSeriesDataItem;\r\n//# sourceMappingURL=GraticuleSeries.js.map","/**\r\n * Map module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { MapSeries } from \"../map/MapSeries\";\r\nimport { MapImage } from \"../map/MapImage\";\r\nimport { MapPolygon } from \"../map/MapPolygon\";\r\nimport { MapPolygonSeries } from \"../map/MapPolygonSeries\";\r\nimport { Projection } from \"../map/projections/Projection\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { SmallMap } from \"../map/SmallMap\";\r\nimport * as $mapUtils from \"../map/MapUtils\";\r\nimport { keyboard } from \"../../core/utils/Keyboard\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { options } from \"../../core/Options\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $geo from \"../map/Geo\";\r\nimport { GraticuleSeries } from \"../map/GraticuleSeries\";\r\nimport { getInteraction } from \"../../core/interaction/Interaction\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[MapChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar MapChartDataItem = /** @class */ (function (_super) {\r\n __extends(MapChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return MapChartDataItem;\r\n}(SerialChartDataItem));\r\nexport { MapChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a map.\r\n *\r\n * @see {@link IMapChartEvents} for a list of available Events\r\n * @see {@link IMapChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/} for documentation\r\n */\r\nvar MapChart = /** @class */ (function (_super) {\r\n __extends(MapChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A ratio to be used when scaling the map shapes.\r\n *\r\n * @readonly\r\n */\r\n _this.scaleRatio = 1;\r\n /**\r\n * Default duration of zoom animations (ms).\r\n */\r\n _this.zoomDuration = 1000;\r\n /**\r\n * Default zooming animation easing function.\r\n */\r\n _this.zoomEasing = $ease.cubicOut;\r\n /**\r\n * Smallest available zoom level. The map will not allow to zoom out past\r\n * this setting.\r\n *\r\n * NOTE: Should be power of 2.\r\n *\r\n * @default 1\r\n */\r\n _this.minZoomLevel = 1;\r\n /**\r\n * Biggest available zoom level. The map will not allow to zoom in past\r\n * this setting.\r\n *\r\n * NOTE: Should be power of 2.\r\n *\r\n * @default 32\r\n */\r\n _this.maxZoomLevel = 32;\r\n /**\r\n * [_prevZoomGeoPoint description]\r\n *\r\n * @todo Description\r\n */\r\n _this._prevZoomGeoPoint = { latitude: 0, longitude: 0 };\r\n _this.className = \"MapChart\";\r\n // Set default projection\r\n _this.projection = new Projection();\r\n _this.setPropertyValue(\"deltaLatitude\", 0);\r\n _this.setPropertyValue(\"deltaLongitude\", 0);\r\n _this.setPropertyValue(\"deltaGamma\", 0);\r\n _this.maxPanOut = 0.7;\r\n _this.homeZoomLevel = 1;\r\n _this.zoomStep = 2;\r\n _this.layout = \"absolute\";\r\n _this.centerMapOnZoomOut = true;\r\n // Set padding\r\n _this.padding(0, 0, 0, 0);\r\n $utils.used(_this.backgroundSeries);\r\n // so that the map would render in a hidden div too\r\n _this.minWidth = 10;\r\n _this.minHeight = 10;\r\n _this.events.once(\"inited\", _this.handleAllInited, _this, false);\r\n // Create a container for map series\r\n var seriesContainer = _this.seriesContainer;\r\n seriesContainer.visible = false;\r\n seriesContainer.inert = true;\r\n seriesContainer.resizable = true;\r\n seriesContainer.events.on(\"transformed\", _this.handleMapTransform, _this, false);\r\n seriesContainer.events.on(\"doublehit\", _this.handleDoubleHit, _this, false);\r\n seriesContainer.events.on(\"dragged\", _this.handleDrag, _this, false);\r\n seriesContainer.zIndex = 0;\r\n seriesContainer.dragWhileResize = true;\r\n //seriesContainer.background.fillOpacity = 0;\r\n seriesContainer.adapter.add(\"scale\", function (scale, target) {\r\n return $math.fitToRange(scale, _this.minZoomLevel, _this.maxZoomLevel);\r\n });\r\n // Set up events\r\n //this.events.on(\"validated\", this.updateExtremes, this);\r\n //this.events.on(\"datavalidated\", this.handleAllValidated, this, false);\r\n //this.events.on(\"datavalidated\", this.updateExtremes, this, false);\r\n _this.events.on(\"maxsizechanged\", function (event) {\r\n if (event.previousWidth == 0 || event.previousHeight == 0) {\r\n _this.updateExtremes();\r\n _this.updateCenterGeoPoint();\r\n }\r\n }, undefined, false);\r\n // Set up main chart container, e.g. set backgrounds and events to monitor\r\n // size changes, etc.\r\n var chartContainer = _this.chartContainer;\r\n chartContainer.parent = _this;\r\n chartContainer.zIndex = -1;\r\n _this._disposers.push(_this.events.on(\"maxsizechanged\", function () {\r\n if (_this.inited) {\r\n if (_this._mapAnimation) {\r\n _this._mapAnimation.stop();\r\n }\r\n var allInited_1 = true;\r\n _this.series.each(function (series) {\r\n series.updateTooltipBounds();\r\n if (!series.inited || series.dataInvalid) {\r\n allInited_1 = false;\r\n }\r\n });\r\n if (allInited_1) {\r\n _this.updateScaleRatio();\r\n }\r\n _this.zoomToGeoPoint(_this._zoomGeoPointReal, _this.zoomLevel, true, 0);\r\n }\r\n }, undefined, false));\r\n var chartContainerBg = chartContainer.background;\r\n chartContainerBg.fillOpacity = 0;\r\n chartContainerBg.events.on(\"down\", function (e) { _this.seriesContainer.dragStart(e.target.interactions.downPointers.getIndex(0)); }, _this);\r\n chartContainerBg.events.on(\"up\", function (e) { _this.seriesContainer.dragStop(); }, _this);\r\n chartContainerBg.events.on(\"doublehit\", _this.handleDoubleHit, _this);\r\n chartContainerBg.focusable = true;\r\n chartContainer.events.on(\"down\", _this.handleMapDown, _this, false);\r\n _this.addDisposer(seriesContainer.events.on(\"down\", function () {\r\n // Cancel any move inertia if there is one\r\n var inertia = _this.seriesContainer.interactions.inertias.getKey(\"move\");\r\n if (inertia) {\r\n inertia.done();\r\n }\r\n }));\r\n // Add description to background\r\n _this.background.fillOpacity = 0;\r\n // Add keyboard events for panning\r\n _this._disposers.push(getInteraction().body.events.on(\"keyup\", function (ev) {\r\n if (_this.topParent.hasFocused) {\r\n var key = keyboard.getEventKey(ev.event);\r\n if (!_this._zoomControl || !_this._zoomControl.thumb.isFocused) {\r\n switch (key) {\r\n case \"up\":\r\n _this.pan({ x: 0, y: 0.1 });\r\n break;\r\n case \"down\":\r\n _this.pan({ x: 0, y: -0.1 });\r\n break;\r\n case \"left\":\r\n _this.pan({ x: 0.1, y: 0 });\r\n break;\r\n case \"right\":\r\n _this.pan({ x: -0.1, y: 0 });\r\n break;\r\n }\r\n }\r\n }\r\n }, _this));\r\n _this.mouseWheelBehavior = \"zoom\";\r\n var interaction = getInteraction();\r\n _this._disposers.push(interaction.body.events.on(\"down\", _this.handlePanDown, _this));\r\n _this._disposers.push(interaction.body.events.on(\"up\", _this.handlePanUp, _this));\r\n //this._disposers.push(interaction.body.events.on(\"track\", this.handlePanMove, this));\r\n var panSprite = _this.seriesContainer.createChild(Circle);\r\n panSprite.radius = 10;\r\n panSprite.inert = true;\r\n panSprite.isMeasured = false;\r\n panSprite.events.on(\"transformed\", _this.handlePanMove, _this, false);\r\n panSprite.interactionsEnabled = false;\r\n panSprite.opacity = 0;\r\n panSprite.x = 0;\r\n panSprite.y = 0;\r\n _this.panSprite = panSprite;\r\n _this.panBehavior = \"move\";\r\n /*\r\n this.panSprite.inertiaOptions.setKey(\"move\", {\r\n \"time\": 100,\r\n \"duration\": 1000,\r\n \"factor\": 3,\r\n \"easing\": $ease.sinOut\r\n });*/\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.handlePanDown = function (event) {\r\n var svgPoint = $utils.documentPointToSvg(event.pointer.point, this.htmlContainer);\r\n if (svgPoint.x > 0 && svgPoint.y > 0 && svgPoint.x < this.svgContainer.width && svgPoint.y < this.svgContainer.height) {\r\n // Get local point\r\n this._downPointOrig = $utils.documentPointToSprite(event.pointer.point, this.seriesContainer);\r\n this.panSprite.moveTo(this._downPointOrig);\r\n this.panSprite.dragStart(event.pointer);\r\n this._downDeltaLongitude = this.deltaLongitude;\r\n this._downDeltaLatitude = this.deltaLatitude;\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.handlePanUp = function (event) {\r\n if (this._downPointOrig) {\r\n this.panSprite.dragStop(event.pointer, true);\r\n }\r\n this._downPointOrig = undefined;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.handlePanMove = function () {\r\n if (!this.seriesContainer.isResized) {\r\n if (getInteraction().areTransformed([this.panSprite.interactions, this.seriesContainer.interactions])) {\r\n return;\r\n }\r\n var d3Projection = this.projection.d3Projection;\r\n var panBehavior = this.panBehavior;\r\n if (panBehavior != \"move\" && panBehavior != \"none\" && this._downPointOrig && d3Projection.rotate) {\r\n var rotation = d3Projection.rotate();\r\n var dln = rotation[0];\r\n var dlt = rotation[1];\r\n var dlg = rotation[2];\r\n d3Projection.rotate([0, 0, 0]);\r\n var downGeoLocal = this.projection.invert(this._downPointOrig);\r\n var local = { x: this.panSprite.pixelX, y: this.panSprite.pixelY };\r\n var geoLocal = void 0;\r\n if (local) {\r\n geoLocal = this.projection.invert(local);\r\n }\r\n d3Projection.rotate([dln, dlt, dlg]);\r\n if (geoLocal) {\r\n if (panBehavior == \"rotateLat\" || panBehavior == \"rotateLongLat\") {\r\n this.deltaLatitude = this._downDeltaLatitude + geoLocal.latitude - downGeoLocal.latitude;\r\n }\r\n if (panBehavior == \"rotateLong\" || panBehavior == \"rotateLongLat\") {\r\n this.deltaLongitude = this._downDeltaLongitude + geoLocal.longitude - downGeoLocal.longitude;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.handleAllInited = function () {\r\n var _this = this;\r\n var inited = true;\r\n this.seriesContainer.visible = true;\r\n this.series.each(function (series) {\r\n if (!series.inited || series.dataInvalid) {\r\n inited = false;\r\n }\r\n });\r\n if (inited) {\r\n this.updateCenterGeoPoint();\r\n this.updateScaleRatio();\r\n this.goHome(0);\r\n }\r\n else {\r\n // TODO verify that this is correct\r\n var disposer_1 = registry.events.once(\"exitframe\", function () {\r\n _this.removeDispose(disposer_1);\r\n _this.handleAllInited();\r\n }, this, false);\r\n this.addDisposer(disposer_1);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.updateZoomGeoPoint = function () {\r\n var seriesPoint = $utils.svgPointToSprite({ x: this.innerWidth / 2 + this.pixelPaddingLeft, y: this.innerHeight / 2 + this.pixelPaddingTop }, this.series.getIndex(0));\r\n var geoPoint = this.projection.invert(seriesPoint);\r\n this._zoomGeoPointReal = geoPoint;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.updateCenterGeoPoint = function () {\r\n var maxLeft;\r\n var maxRight;\r\n var maxTop;\r\n var maxBottom;\r\n if (this.backgroundSeries) {\r\n var features = this.backgroundSeries.getFeatures();\r\n if (features.length > 0) {\r\n var bounds = this.projection.d3Path.bounds(features[0].geometry);\r\n maxLeft = bounds[0][0];\r\n maxTop = bounds[0][1];\r\n maxRight = bounds[1][0];\r\n maxBottom = bounds[1][1];\r\n }\r\n }\r\n else {\r\n this.series.each(function (series) {\r\n var bbox = series.group.node.getBBox();\r\n if (maxLeft > bbox.x || !$type.isNumber(maxLeft)) {\r\n maxLeft = bbox.x;\r\n }\r\n if (maxRight < bbox.x + bbox.width || !$type.isNumber(maxRight)) {\r\n maxRight = bbox.x + bbox.width;\r\n }\r\n if (maxTop > bbox.y || !$type.isNumber(maxTop)) {\r\n maxTop = bbox.y;\r\n }\r\n if (maxBottom < bbox.y + bbox.height || !$type.isNumber(maxBottom)) {\r\n maxBottom = bbox.y + bbox.height;\r\n }\r\n });\r\n }\r\n this.seriesMaxLeft = maxLeft;\r\n this.seriesMaxRight = maxRight;\r\n this.seriesMaxTop = maxTop;\r\n this.seriesMaxBottom = maxBottom;\r\n this.seriesWidth = maxRight - maxLeft;\r\n this.seriesHeight = maxBottom - maxTop;\r\n if (this.seriesWidth > 0 && this.seriesHeight > 0) {\r\n this.chartContainer.visible = true;\r\n this._centerGeoPoint = this.projection.invert({ x: maxLeft + (maxRight - maxLeft) / 2, y: maxTop + (maxBottom - maxTop) / 2 });\r\n if (!this._zoomGeoPointReal || !$type.isNumber(this._zoomGeoPointReal.latitude)) {\r\n this._zoomGeoPointReal = this._centerGeoPoint;\r\n }\r\n }\r\n else {\r\n this.chartContainer.visible = false;\r\n }\r\n };\r\n /**\r\n * Prevents map to be dragged out of the container area\r\n * @ignore\r\n */\r\n MapChart.prototype.handleDrag = function () {\r\n var d = this.zoomLevel * this.scaleRatio;\r\n var ww = this.seriesWidth * d;\r\n var hh = this.seriesHeight * d;\r\n var seriesContainer = this.seriesContainer;\r\n var maxLeft = this.seriesMaxLeft * d;\r\n var maxRight = this.seriesMaxRight * d;\r\n var maxTop = this.seriesMaxTop * d;\r\n var maxBottom = this.seriesMaxBottom * d;\r\n var x = seriesContainer.pixelX;\r\n var y = seriesContainer.pixelY;\r\n var maxPanOut = this.maxPanOut;\r\n var minX = Math.min(this.maxWidth * (1 - maxPanOut) - ww - maxLeft, -maxLeft);\r\n if (x < minX) {\r\n x = minX;\r\n }\r\n var maxX = Math.max(this.maxWidth * maxPanOut - maxLeft, this.maxWidth - maxRight);\r\n if (x > maxX) {\r\n x = maxX;\r\n }\r\n var minY = Math.min(this.maxHeight * (1 - maxPanOut) - hh - maxTop, -maxTop);\r\n if (y < minY) {\r\n y = minY;\r\n }\r\n var maxY = Math.max(this.maxHeight * maxPanOut - maxTop, this.maxHeight - maxBottom);\r\n if (y > maxY) {\r\n y = maxY;\r\n }\r\n seriesContainer.moveTo({ x: x, y: y }, undefined, undefined, true);\r\n this._zoomGeoPointReal = this.zoomGeoPoint;\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n MapChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Map\");\r\n }\r\n if (!$type.hasValue(this.background.readerTitle)) {\r\n this.background.readerTitle = this.language.translate(\"Use plus and minus keys on your keyboard to zoom in and out\");\r\n }\r\n };\r\n /**\r\n * Handles event when a pointer presses down on the map, e.g. user presses\r\n * down mouse or touches the map on a screen.\r\n *\r\n * Stops all animations currently going on.\r\n */\r\n MapChart.prototype.handleMapDown = function () {\r\n if (this._mapAnimation) {\r\n this._mapAnimation.stop();\r\n }\r\n };\r\n /**\r\n * Handles the event when user doubleclicks or dooubletaps the map: zooms\r\n * in on the reference point.\r\n *\r\n * @param event Original event\r\n */\r\n MapChart.prototype.handleDoubleHit = function (event) {\r\n var svgPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n var geoPoint = this.svgPointToGeo(svgPoint);\r\n this.zoomIn(geoPoint);\r\n };\r\n /**\r\n * Handles mouse wheel event, e.g. user rotates mouse wheel while over the\r\n * map: zooms in or out depending on the direction of the wheel turn.\r\n *\r\n * @param event Original event\r\n */\r\n MapChart.prototype.handleWheel = function (event) {\r\n // Cancel any move inertia if there is one\r\n var inertia = this.seriesContainer.interactions.inertias.getKey(\"move\");\r\n if (inertia) {\r\n inertia.done();\r\n }\r\n var svgPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n var geoPoint = this.svgPointToGeo(svgPoint);\r\n if (event.shift.y < 0) {\r\n this.zoomIn(geoPoint, undefined, this.interactions.mouseOptions.sensitivity);\r\n }\r\n else {\r\n this.zoomOut(geoPoint, undefined, this.interactions.mouseOptions.sensitivity);\r\n }\r\n };\r\n Object.defineProperty(MapChart.prototype, \"mouseWheelBehavior\", {\r\n /**\r\n * @return mouse wheel behavior\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"mouseWheelBehavior\");\r\n },\r\n /**\r\n * Specifies what should chart do if when mouse wheel is rotated.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/reference/sprite/#mouseOptions_property} More information about `mouseOptions`\r\n * @param mouse wheel behavior\r\n * @default zoomX\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\r\n if (value != \"none\") {\r\n this._mouseWheelDisposer = this.chartContainer.events.on(\"wheel\", this.handleWheel, this, false);\r\n this._disposers.push(this._mouseWheelDisposer);\r\n }\r\n else {\r\n if (this._mouseWheelDisposer) {\r\n this._mouseWheelDisposer.dispose();\r\n }\r\n this.chartContainer.wheelable = false;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"panBehavior\", {\r\n /**\r\n * @returns Behavior\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"panBehavior\");\r\n },\r\n /**\r\n * What \"dragging\" map does.\r\n *\r\n * Available values:\r\n * * `\"move\"` (default): changes position of the map.\r\n * * `\"rotateLat\"`: changes `deltaLatitude` (rotates the globe vertically).\r\n * * `\"rotateLong\"`: changes `deltaLongitude` (rotates the globe horizontally).\r\n * * `\"rotateLongLat\"`: changes both `deltaLongitude` and `deltaLatitude` (rotates the globe in any direction).\r\n *\r\n * @default \"move\"\r\n * @since 4.3.0\r\n * @param value Behavior\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"panBehavior\", value)) {\r\n var seriesContainer = this.seriesContainer;\r\n this.panSprite.draggable = false;\r\n seriesContainer.draggable = false;\r\n switch (value) {\r\n case \"move\":\r\n seriesContainer.draggable = true;\r\n break;\r\n default:\r\n this.panSprite.draggable = true;\r\n break;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"centerMapOnZoomOut\", {\r\n /**\r\n * @returns If the map should be centered when zooming out.\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"centerMapOnZoomOut\");\r\n },\r\n /**\r\n * Specifies if the map should be centered when zooming out\r\n * @default true\r\n * @since 4.7.12\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"centerMapOnZoomOut\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"projection\", {\r\n /**\r\n * @return Projection\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"projection\");\r\n },\r\n /**\r\n * Projection to use for the map.\r\n *\r\n * Available projections:\r\n * * Albers\r\n * * AlbersUSA\r\n * * AzimuthalEqualArea\r\n * * Eckert6\r\n * * EqualEarth\r\n * * Mercator\r\n * * Miller\r\n * * NaturalEarth\r\n * * Orthographic\r\n * * Stereographic\r\n *\r\n * ```TypeScript\r\n * map.projection = new am4maps.projections.Mercator();\r\n * ```\r\n * ```JavaScript\r\n * map.projection = new am4maps.projections.Mercator();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"projection\": \"Mercator\"\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Setting_projection} More about projections\r\n * @param projection Projection\r\n */\r\n set: function (projection) {\r\n var _this = this;\r\n if (this.setPropertyValue(\"projection\", projection)) {\r\n this.invalidateProjection();\r\n projection.chart = this;\r\n if (this._backgroundSeries) {\r\n this._backgroundSeries.invalidate();\r\n }\r\n if (this.inited) {\r\n this.updateExtremes();\r\n }\r\n this.series.each(function (series) {\r\n series.events.once(\"validated\", function () {\r\n _this.updateCenterGeoPoint();\r\n _this.updateScaleRatio();\r\n _this.goHome(0);\r\n });\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Validates (processes) data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapChart.prototype.validateDataItems = function () {\r\n _super.prototype.validateDataItems.call(this);\r\n this.updateExtremes();\r\n };\r\n /**\r\n * Calculates the longitudes and latitudes of the most distant points from\r\n * the center in all four directions: West, East, North, and South.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapChart.prototype.updateExtremes = function () {\r\n var east;\r\n var north;\r\n var west;\r\n var south;\r\n this.series.each(function (series) {\r\n if (series.ignoreBounds || (series instanceof GraticuleSeries && series.fitExtent)) {\r\n }\r\n else {\r\n if (series.north > north || !$type.isNumber(north)) {\r\n north = series.north;\r\n }\r\n if (series.south < south || !$type.isNumber(south)) {\r\n south = series.south;\r\n }\r\n if (series.west < west || !$type.isNumber(west)) {\r\n west = series.west;\r\n }\r\n if (series.east > east || !$type.isNumber(east)) {\r\n east = series.east;\r\n }\r\n }\r\n });\r\n var features = [];\r\n var foundGraticule = false;\r\n // if we gave graticule, get features of these series only for faster fitSize\r\n this.series.each(function (series) {\r\n if (series instanceof GraticuleSeries && !series.fitExtent) {\r\n features = series.getFeatures();\r\n foundGraticule = true;\r\n }\r\n });\r\n if (!foundGraticule) {\r\n this.series.each(function (series) {\r\n if (series.ignoreBounds || (series instanceof GraticuleSeries && series.fitExtent)) {\r\n }\r\n else {\r\n features = features.concat(series.getFeatures());\r\n }\r\n });\r\n }\r\n var w = $math.max(50, this.innerWidth);\r\n var h = $math.max(50, this.innerHeight);\r\n var d3Projection = this.projection.d3Projection;\r\n if (features.length > 0 && d3Projection && (this.east != east || this.west != west || this.north != north || this.south != south)) {\r\n this.east = east;\r\n this.west = west;\r\n this.north = north;\r\n this.south = south;\r\n if (d3Projection.rotate) {\r\n var rotation = d3Projection.rotate();\r\n var deltaLong = rotation[0];\r\n var deltaLat = rotation[1];\r\n var deltaGamma = rotation[2];\r\n this.deltaLongitude = deltaLong;\r\n this.deltaLatitude = deltaLat;\r\n this.deltaGamma = deltaGamma;\r\n }\r\n var geoJSON = { \"type\": \"FeatureCollection\", features: features };\r\n var initialScale = d3Projection.scale();\r\n d3Projection.fitSize([w, h], geoJSON);\r\n if (d3Projection.scale() != initialScale) {\r\n this.invalidateDataUsers();\r\n }\r\n this.series.each(function (series) {\r\n if (series instanceof GraticuleSeries) {\r\n series.invalidateData();\r\n }\r\n });\r\n if (this._backgroundSeries) {\r\n var polygon = this._backgroundSeries.mapPolygons.getIndex(0);\r\n if (polygon) {\r\n polygon.multiPolygon = $mapUtils.getBackground(this.north, this.east, this.south, this.west);\r\n }\r\n }\r\n this._fitWidth = w;\r\n this._fitHeight = h;\r\n }\r\n if (!this._zoomGeoPointReal || !$type.isNumber(this._zoomGeoPointReal.latitude)) {\r\n this.goHome(0);\r\n }\r\n };\r\n /**\r\n * (Re)calculates a ratio which should be used to scale the actual map so\r\n * that it fits perfectly into available space. Helps to avoid redrawing of all the map if container size changes\r\n * @ignore\r\n */\r\n MapChart.prototype.updateScaleRatio = function () {\r\n var scaleRatio;\r\n this.updateCenterGeoPoint();\r\n var hScale = this.innerWidth / this.seriesWidth;\r\n var vScale = this.innerHeight / this.seriesHeight;\r\n scaleRatio = $math.min(hScale, vScale);\r\n if ($type.isNaN(scaleRatio) || scaleRatio == Infinity) {\r\n scaleRatio = 1;\r\n }\r\n if (scaleRatio != this.scaleRatio) {\r\n this.scaleRatio = scaleRatio;\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.scale = scaleRatio;\r\n series.updateTooltipBounds();\r\n });\r\n this.backgroundSeries.scale = scaleRatio;\r\n this.dispatch(\"scaleratiochanged\");\r\n }\r\n };\r\n /**\r\n * Converts a point within map container to geographical (lat/long)\r\n * coordinates.\r\n *\r\n * @param point Source point\r\n * @return Geo-point\r\n */\r\n MapChart.prototype.svgPointToGeo = function (point) {\r\n var series = this.series.getIndex(0);\r\n if (series) {\r\n var seriesPoint = $utils.svgPointToSprite(point, series);\r\n return this.seriesPointToGeo(seriesPoint);\r\n }\r\n };\r\n /**\r\n * Converts geographical (lat/long) coordinates to an X/Y point within map's\r\n * container.\r\n *\r\n * @param point Source geo-point\r\n * @return Point\r\n */\r\n MapChart.prototype.geoPointToSVG = function (point) {\r\n var series = this.series.getIndex(0);\r\n if (series) {\r\n var seriesPoint = this.geoPointToSeries(point);\r\n return $utils.spritePointToSvg(seriesPoint, series);\r\n }\r\n };\r\n /**\r\n * Converts a point (X/Y) within actual objects of the map to geographical\r\n * (lat/long) coordinates.\r\n *\r\n * @param point Source point\r\n * @return Geo-point\r\n */\r\n MapChart.prototype.seriesPointToGeo = function (point) {\r\n return this.projection.invert(point);\r\n };\r\n /**\r\n * Converts geographical (lat/long) coordinates to an X/Y point within\r\n * actual elements/objects of the maps.\r\n *\r\n * @param point Source geo-point\r\n * @return Point\r\n */\r\n MapChart.prototype.geoPointToSeries = function (point) {\r\n return this.projection.convert(point);\r\n };\r\n Object.defineProperty(MapChart.prototype, \"geodata\", {\r\n /**\r\n * @return GeoJSON data\r\n */\r\n get: function () {\r\n return this._geodata;\r\n },\r\n /**\r\n * Map data in GeoJSON format.\r\n *\r\n * The Map supports the following GeoJSON objects: `Point`, `LineString`,\r\n * `Polygon`, `MultiPoint`, `MultiLineString`, and `MultiPolygon`.\r\n *\r\n * @see {@link http://geojson.org/} Official GeoJSON format specification\r\n * @param geoJSON GeoJSON data\r\n */\r\n set: function (geodata) {\r\n if (geodata != this._geodata) {\r\n this._geodata = geodata;\r\n if (this.reverseGeodata) {\r\n this.processReverseGeodata(this._geodata);\r\n }\r\n this.invalidateData();\r\n this.dataUsers.each(function (dataUser) {\r\n for (var i = dataUser.data.length - 1; i >= 0; i--) {\r\n if (dataUser.data[i].madeFromGeoData == true) {\r\n dataUser.data.splice(i, 1);\r\n }\r\n }\r\n dataUser.disposeData();\r\n dataUser.invalidateData();\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"reverseGeodata\", {\r\n /**\r\n * @returns Reverse the order of geodata coordinates?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"reverseGeodata\");\r\n },\r\n /**\r\n * Indicates whether GeoJSON geodata supplied to the chart uses\r\n * ESRI (clockwise) or non-ESRI (counter-clockwise) order of the polygon\r\n * coordinates.\r\n *\r\n * `MapChart` supports only ESRI standard, so if your custom maps appears\r\n * garbled, try setting `reverseGeodata = true`.\r\n *\r\n * @default false\r\n * @since 4.10.11\r\n * @param value Reverse the order of geodata coordinates?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"reverseGeodata\", value) && this._geodata) {\r\n this.processReverseGeodata(this._geodata);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Reverses the order of polygons on a GeoJSON data.\r\n *\r\n * @since 4.10.11\r\n * @param geodata Source geodata\r\n */\r\n MapChart.prototype.processReverseGeodata = function (geodata) {\r\n for (var i = 0; i < geodata.features.length; i++) {\r\n var feature = geodata.features[i];\r\n for (var x = 0; x < feature.geometry.coordinates.length; x++) {\r\n if (feature.geometry.type == \"MultiPolygon\") {\r\n for (var y = 0; y < feature.geometry.coordinates[x].length; y++) {\r\n feature.geometry.coordinates[x][y].reverse();\r\n }\r\n }\r\n else {\r\n feature.geometry.coordinates[x].reverse();\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Zooms the map to particular zoom level and centers on a latitude/longitude\r\n * coordinate.\r\n *\r\n * @param point Center coordinate\r\n * @param zoomLevel Zoom level\r\n * @param center Center on the given coordinate?\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\r\n MapChart.prototype.zoomToGeoPoint = function (point, zoomLevel, center, duration, mapObject) {\r\n var _this = this;\r\n if (!point) {\r\n var hasData_1 = false;\r\n this.series.each(function (series) {\r\n if (series.dataItems.length > 0) {\r\n hasData_1 = true;\r\n }\r\n });\r\n if (hasData_1) {\r\n point = this.zoomGeoPoint;\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n if (!point || !$type.isNumber(point.longitude) || !$type.isNumber(point.latitude)) {\r\n return;\r\n }\r\n this._zoomGeoPointReal = point;\r\n zoomLevel = $math.fitToRange(zoomLevel, this.minZoomLevel, this.maxZoomLevel);\r\n var seriesPoint = this.projection.convert(point);\r\n if (seriesPoint) {\r\n var svgPoint = this.geoPointToSVG(point);\r\n var mapPoint = $utils.svgPointToSprite(svgPoint, this);\r\n if (center) {\r\n mapPoint = {\r\n x: this.innerWidth / 2,\r\n y: this.innerHeight / 2\r\n };\r\n }\r\n if (!$type.isNumber(duration)) {\r\n duration = this.zoomDuration;\r\n }\r\n var x = mapPoint.x - seriesPoint.x * zoomLevel * this.scaleRatio;\r\n var y = mapPoint.y - seriesPoint.y * zoomLevel * this.scaleRatio;\r\n if (!mapObject && zoomLevel < this.zoomLevel && this.centerMapOnZoomOut && zoomLevel < 1.5) {\r\n x = this.innerWidth / 2 - (this.seriesMaxLeft + (this.seriesMaxRight - this.seriesMaxLeft) / 2) * zoomLevel * this.scaleRatio;\r\n y = this.innerHeight / 2 - (this.seriesMaxTop + (this.seriesMaxBottom - this.seriesMaxTop) / 2) * zoomLevel * this.scaleRatio;\r\n }\r\n this._mapAnimation = this.seriesContainer.animate([{\r\n property: \"scale\",\r\n to: zoomLevel\r\n }, {\r\n property: \"x\", from: this.seriesContainer.pixelX,\r\n to: x\r\n }, {\r\n property: \"y\", from: this.seriesContainer.pixelY,\r\n to: y\r\n }], duration, this.zoomEasing);\r\n this._disposers.push(this._mapAnimation.events.on(\"animationended\", function () {\r\n _this._zoomGeoPointReal = _this.zoomGeoPoint;\r\n }));\r\n this.seriesContainer.validatePosition();\r\n return this._mapAnimation;\r\n }\r\n };\r\n /**\r\n * Zooms the map to a particular map object.\r\n *\r\n * @param mapObject Target map object\r\n * @param zoomLevel Zoom level\r\n * @param center Center on the given coordinate?\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\r\n MapChart.prototype.zoomToMapObject = function (mapObject, zoomLevel, center, duration) {\r\n if (center == undefined) {\r\n center = true;\r\n }\r\n var inertia = this.seriesContainer.interactions.inertias.getKey(\"move\");\r\n if (inertia) {\r\n inertia.done();\r\n }\r\n if (mapObject instanceof MapImage) {\r\n if ($type.isNaN(zoomLevel)) {\r\n zoomLevel = 5;\r\n }\r\n return this.zoomToGeoPoint({ latitude: mapObject.latitude, longitude: mapObject.longitude }, zoomLevel, center, duration, true);\r\n }\r\n var dataItem = mapObject.dataItem;\r\n if (dataItem && $type.isNumber(dataItem.zoomLevel)) {\r\n zoomLevel = dataItem.zoomLevel;\r\n }\r\n if (mapObject instanceof MapPolygon) {\r\n var dataItem_1 = mapObject.dataItem;\r\n var bbox = mapObject.polygon.bbox;\r\n if (bbox.width == 0 || bbox.height == 0) {\r\n bbox = mapObject.polygon.group.getBBox();\r\n }\r\n if (!$type.isNumber(zoomLevel)) {\r\n zoomLevel = Math.min(this.seriesWidth / bbox.width, this.seriesHeight / bbox.height);\r\n }\r\n var geoPoint = void 0;\r\n if (dataItem_1 && $type.hasValue(dataItem_1.zoomGeoPoint)) {\r\n geoPoint = dataItem_1.zoomGeoPoint;\r\n }\r\n else {\r\n // this is more accurate\r\n var polygonPoint = { x: bbox.x + bbox.width / 2, y: bbox.y + bbox.height / 2 };\r\n var seriesPoint = $utils.spritePointToSprite(polygonPoint, mapObject.polygon, mapObject.series);\r\n geoPoint = this.seriesPointToGeo(seriesPoint);\r\n }\r\n return this.zoomToGeoPoint(geoPoint, zoomLevel, true, duration, true);\r\n }\r\n };\r\n /**\r\n * Zooms the map to a particular viewport.\r\n *\r\n * The `north`, `east`, `south`, and `west` define boundaries of the\r\n * imaginary viewort we want to zoom the map to.\r\n *\r\n * `level` is not actual zoom level. The map will determine the zoom level\r\n * required to accommodated such zoom, and will adjust it by `level` if set.\r\n *\r\n * @param north Latitude of the North-most boundary\r\n * @param east Longitude of the East-most boundary\r\n * @param south Latitude of the South-most boundary\r\n * @param west Longitude of the West-most boundary\r\n * @param level Adjust zoom level\r\n * @param center Center on the given coordinate?\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\r\n MapChart.prototype.zoomToRectangle = function (north, east, south, west, level, center, duration) {\r\n if ($type.isNaN(level)) {\r\n level = 1;\r\n }\r\n var w = $math.min(west, east);\r\n var e = $math.max(west, east);\r\n west = w;\r\n east = e;\r\n var splitLongitude = $math.normalizeAngle(180 - this.deltaLongitude);\r\n if (splitLongitude > 180) {\r\n splitLongitude -= 360;\r\n }\r\n var newLong = west + (east - west) / 2;\r\n var d = (west - east);\r\n if (west < splitLongitude && east > splitLongitude) {\r\n newLong += 180;\r\n d = $math.normalizeAngle(east - west - 360);\r\n }\r\n var zoomLevel = level * Math.min((this.south - this.north) / (south - north), Math.abs((this.west - this.east) / d));\r\n return this.zoomToGeoPoint({ latitude: north + (south - north) / 2, longitude: newLong }, zoomLevel, center, duration, true);\r\n };\r\n /**\r\n * Zooms in the map, optionally centering on particular latitude/longitude\r\n * point.\r\n *\r\n * @param geoPoint Optional center point\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\r\n MapChart.prototype.zoomIn = function (geoPoint, duration, sensitivity) {\r\n if (sensitivity === void 0) { sensitivity = 1; }\r\n var step = 1 + (this.zoomStep - 1) * sensitivity;\r\n if (step < 1) {\r\n step = 1;\r\n }\r\n return this.zoomToGeoPoint(geoPoint, this.zoomLevel * step, false, duration);\r\n };\r\n /**\r\n * Zooms out the map, optionally centering on particular latitude/longitude\r\n * point.\r\n *\r\n * @param geoPoint Optional center point\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\r\n MapChart.prototype.zoomOut = function (geoPoint, duration, sensitivity) {\r\n if (sensitivity === void 0) { sensitivity = 1; }\r\n var step = 1 + (this.zoomStep - 1) * sensitivity;\r\n if (step < 1) {\r\n step = 1;\r\n }\r\n return this.zoomToGeoPoint(geoPoint, this.zoomLevel / step, false, duration);\r\n };\r\n /**\r\n * Pans the maps using relative coordinates. E.g.:\r\n *\r\n * ```JSON\r\n * {\r\n * x: 0.1,\r\n * y: -0.1\r\n * }\r\n * ```\r\n *\r\n * The above will move the map by 10% to the right, and by 10% upwards.\r\n *\r\n * @param shift Vertical and horizontal shift\r\n * @param duration Pan animation duration (ms)\r\n */\r\n MapChart.prototype.pan = function (shift, duration) {\r\n var point = this.geoPointToSVG(this.zoomGeoPoint);\r\n point.x += this.pixelWidth * shift.x;\r\n point.y += this.pixelHeight * shift.y;\r\n this.zoomToGeoPoint(this.svgPointToGeo(point), this.zoomLevel, true, duration, true);\r\n };\r\n Object.defineProperty(MapChart.prototype, \"zoomGeoPoint\", {\r\n /**\r\n * Current lat/long coordinates for the center of the viewport. (default\r\n * zoom reference point)\r\n *\r\n * @readonly\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n var point = $utils.spritePointToSvg({ x: this.pixelWidth / 2, y: this.pixelHeight / 2 }, this);\r\n return this.svgPointToGeo(point);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"zoomLevel\", {\r\n /**\r\n * @return Zoom level\r\n */\r\n get: function () {\r\n return this.seriesContainer.scale;\r\n },\r\n /**\r\n * Current zoom level.\r\n *\r\n * @readonly\r\n * @return Zoom level\r\n */\r\n set: function (value) {\r\n this.seriesContainer.scale = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Dispatches events after some map transformation, like pan or zoom.\r\n *\r\n * @ignore\r\n */\r\n MapChart.prototype.handleMapTransform = function () {\r\n if (this.zoomLevel != this._prevZoomLevel) {\r\n this.dispatch(\"zoomlevelchanged\");\r\n this._prevZoomLevel = this.zoomLevel;\r\n this.svgContainer.readerAlert(this.language.translate(\"Zoom level changed to %1\", this.language.locale, $type.castString(this.zoomLevel)));\r\n }\r\n if (this.zoomGeoPoint && (this._prevZoomGeoPoint.latitude != this.zoomGeoPoint.latitude || this._prevZoomGeoPoint.longitude != this.zoomGeoPoint.longitude)) {\r\n this.dispatch(\"mappositionchanged\");\r\n }\r\n };\r\n Object.defineProperty(MapChart.prototype, \"smallMap\", {\r\n /**\r\n * @return Small map\r\n */\r\n get: function () {\r\n if (!this._smallMap) {\r\n var smallMap = new SmallMap();\r\n this.smallMap = smallMap;\r\n }\r\n return this._smallMap;\r\n },\r\n /**\r\n * A [[SmallMap]] to be used on the map.\r\n *\r\n * Please note, that accessing this property will NOT create a small map\r\n * if it has not yet been created. (except in JSON)\r\n *\r\n * ```TypeScript\r\n * // Create a small map\r\n * map.smallMap = new am4maps.SmallMap();\r\n * ```\r\n * ```JavaScript\r\n * // Create a small map\r\n * map.smallMap = new am4maps.SmallMap();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"smallMap\": {}\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @param smallMap Small map\r\n */\r\n set: function (smallMap) {\r\n if (this._smallMap) {\r\n this.removeDispose(this._smallMap);\r\n }\r\n this._smallMap = smallMap;\r\n this._smallMap.chart = this;\r\n smallMap.parent = this.chartContainer;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"zoomControl\", {\r\n /**\r\n * @return Zoom control\r\n */\r\n get: function () {\r\n return this._zoomControl;\r\n },\r\n /**\r\n * A [[ZoomControl]] to be used on the map.\r\n *\r\n * Please note, that accessing this property will NOT create a zoom control\r\n * if it has not yet been created. (except in JSON)\r\n *\r\n * ```TypeScript\r\n * // Create a zoom control\r\n * map.zoomControl = new am4maps.ZoomControl();\r\n * ```\r\n * ```JavaScript\r\n * // Create a zoom control\r\n * map.zoomControl = new am4maps.ZoomControl();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"zoomControl\": {}\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @param zoomControl Zoom control\r\n */\r\n set: function (zoomControl) {\r\n if (this._zoomControl) {\r\n this.removeDispose(this._zoomControl);\r\n }\r\n this._zoomControl = zoomControl;\r\n zoomControl.chart = this;\r\n zoomControl.parent = this.chartContainer;\r\n zoomControl.plusButton.exportable = false;\r\n zoomControl.minusButton.exportable = false;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates and returns a map series of appropriate type.\r\n *\r\n * @return Map series\r\n */\r\n MapChart.prototype.createSeries = function () {\r\n return new MapSeries();\r\n };\r\n Object.defineProperty(MapChart.prototype, \"deltaLongitude\", {\r\n /**\r\n * @return Rotation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"deltaLongitude\");\r\n },\r\n /**\r\n * Degrees to rotate the map around vertical axis (Y).\r\n *\r\n * E.g. if set to -160, the longitude 20 will become a new center, creating\r\n * a Pacific-centered map.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Map_rotation} For more info on map rotation.\r\n * @param value Rotation\r\n */\r\n set: function (value) {\r\n value = $math.round(value, 3);\r\n if (this.setPropertyValue(\"deltaLongitude\", $geo.wrapAngleTo180(value))) {\r\n this.rotateMap();\r\n this.updateZoomGeoPoint();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"deltaLatitude\", {\r\n /**\r\n * @return Rotation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"deltaLatitude\");\r\n },\r\n /**\r\n * Degrees to rotate the map around horizontal axis (X).\r\n *\r\n * E.g. setting this to 90 will put Antarctica directly in the center of\r\n * the map.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Map_rotation} For more info on map rotation.\r\n * @since 4.3.0\r\n * @param value Rotation\r\n */\r\n set: function (value) {\r\n value = $math.round(value, 3);\r\n if (this.setPropertyValue(\"deltaLatitude\", value)) {\r\n this.rotateMap();\r\n this.updateZoomGeoPoint();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"deltaGamma\", {\r\n /**\r\n * @return Rotation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"deltaGamma\");\r\n },\r\n /**\r\n * Degrees to rotate the map around \"Z\" axis. This is the axis that pierces\r\n * the globe directly from the viewer's point of view.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Map_rotation} For more info on map rotation.\r\n * @since 4.3.0\r\n * @param value Rotation\r\n */\r\n set: function (value) {\r\n value = $math.round(value, 3);\r\n if (this.setPropertyValue(\"deltaGamma\", value)) {\r\n this.rotateMap();\r\n this.updateZoomGeoPoint();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.rotateMap = function () {\r\n if (this.projection.d3Projection) {\r\n if (this.projection.d3Projection.rotate) {\r\n this.projection.d3Projection.rotate([this.deltaLongitude, this.deltaLatitude, this.deltaGamma]);\r\n this.invalidateProjection();\r\n //this.updateExtremes(); // removal fixes #3292\r\n }\r\n }\r\n };\r\n Object.defineProperty(MapChart.prototype, \"maxPanOut\", {\r\n /**\r\n * @return Max pan out\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maxPanOut\");\r\n },\r\n /**\r\n * Maximum portion of the map's width/height to allow panning \"off screen\".\r\n *\r\n * A value of 0 (zero) will prevent any portion of the the map to be panned\r\n * outside the viewport.\r\n *\r\n * 0.5 will allow half of the map to be outside viewable area.\r\n *\r\n * @default 0.7\r\n * @param value Max pan out\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maxPanOut\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"homeGeoPoint\", {\r\n /**\r\n * @return Home geo point\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"homeGeoPoint\");\r\n },\r\n /**\r\n * The geographical point to center map on when it is first loaded.\r\n *\r\n * The map will also be centered to this point when you call `goHome()`\r\n * method.\r\n *\r\n * @param value Home geo point\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"homeGeoPoint\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"homeZoomLevel\", {\r\n /**\r\n * @return Home zoom level\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"homeZoomLevel\");\r\n },\r\n /**\r\n * The zoom level to put the map in when it is first loaded.\r\n *\r\n * The map will also be set to this zoom level when you call `goHome()`\r\n * method.\r\n *\r\n * @param value Home zoom level\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"homeZoomLevel\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"zoomStep\", {\r\n /**\r\n * @return Zoom factor\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"zoomStep\");\r\n },\r\n /**\r\n * When user zooms in or out current zoom level is multiplied or divided\r\n * by value of this setting.\r\n *\r\n * @default 2\r\n * @param value Zoom factor\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"zoomStep\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Invalidates projection, causing all series to be redrawn.\r\n *\r\n * Call this after changing projection or its settings.\r\n */\r\n MapChart.prototype.invalidateProjection = function () {\r\n this.east = undefined;\r\n this.invalidateDataUsers();\r\n this.updateCenterGeoPoint();\r\n };\r\n Object.defineProperty(MapChart.prototype, \"geodataSource\", {\r\n /**\r\n * Returns a [[DataSource]] specifically for loading Component's data.\r\n *\r\n * @return Data source\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._dataSources[\"geodata\"]) {\r\n var dataSource = this.getDataSource(\"geodata\");\r\n dataSource.events.on(\"parseended\", function () {\r\n _this.events.once(\"datavalidated\", function () {\r\n _this.goHome(0);\r\n });\r\n });\r\n }\r\n return this._dataSources[\"geodata\"];\r\n },\r\n /**\r\n * Sets a [[DataSource]] to be used for loading Component's data.\r\n *\r\n * @param value Data source\r\n */\r\n set: function (value) {\r\n var _this = this;\r\n if (this._dataSources[\"geodata\"]) {\r\n this.removeDispose(this._dataSources[\"geodata\"]);\r\n }\r\n this._dataSources[\"geodata\"] = value;\r\n this._dataSources[\"geodata\"].component = this;\r\n this.events.on(\"inited\", function () {\r\n _this.loadData(\"geodata\");\r\n }, this, false);\r\n this.setDataSourceEvents(value, \"geodata\");\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n MapChart.prototype.processConfig = function (config) {\r\n if ($type.hasValue(config[\"geodata\"]) && $type.isString(config[\"geodata\"])) {\r\n var name_1 = config[\"geodata\"];\r\n // Check if there's a map loaded by such name\r\n if ($type.hasValue(window[\"am4geodata_\" + config[\"geodata\"]])) {\r\n config[\"geodata\"] = window[\"am4geodata_\" + config[\"geodata\"]];\r\n }\r\n // Nope. Let's try maybe we got JSON as string?\r\n else {\r\n try {\r\n config[\"geodata\"] = JSON.parse(config[\"geodata\"]);\r\n }\r\n catch (e) {\r\n // No go again. Error out.\r\n this.raiseCriticalError(Error(\"MapChart error: Geodata `\" + name_1 + \"` is not loaded or is incorrect.\"), true);\r\n }\r\n }\r\n }\r\n // Instantiate projection\r\n if ($type.hasValue(config[\"projection\"]) && $type.isString(config[\"projection\"])) {\r\n config[\"projection\"] = this.createClassInstance(config[\"projection\"]);\r\n }\r\n // Set up small map\r\n if ($type.hasValue(config.smallMap) && !$type.hasValue(config.smallMap.type)) {\r\n config.smallMap.type = \"SmallMap\";\r\n }\r\n // Set up zoom control\r\n if ($type.hasValue(config.zoomControl) && !$type.hasValue(config.zoomControl.type)) {\r\n config.zoomControl.type = \"ZoomControl\";\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n /**\r\n * Decorates a new [[Series]] object with required parameters when it is\r\n * added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n MapChart.prototype.handleSeriesAdded = function (event) {\r\n _super.prototype.handleSeriesAdded.call(this, event);\r\n var series = event.newValue;\r\n series.scale = this.scaleRatio;\r\n series.events.on(\"validated\", this.updateCenterGeoPoint, this, false);\r\n };\r\n /**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Element 1\r\n * @param b Element 2\r\n * @return Sorting number\r\n */\r\n MapChart.prototype.configOrder = function (a, b) {\r\n if (a == b) {\r\n return 0;\r\n }\r\n // Must come last\r\n else if (a == \"smallMap\") {\r\n return 1;\r\n }\r\n else if (b == \"smallMap\") {\r\n return -1;\r\n }\r\n else if (a == \"series\") {\r\n return 1;\r\n }\r\n else if (b == \"series\") {\r\n return -1;\r\n }\r\n else {\r\n return _super.prototype.configOrder.call(this, a, b);\r\n }\r\n };\r\n /**\r\n * Adds `projection` to \"as is\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as is?\r\n */\r\n MapChart.prototype.asIs = function (field) {\r\n return field == \"projection\" || field == \"geodata\" || _super.prototype.asIs.call(this, field);\r\n };\r\n Object.defineProperty(MapChart.prototype, \"centerGeoPoint\", {\r\n /**\r\n * Geo point of map center\r\n *\r\n * @readonly\r\n */\r\n get: function () {\r\n return this._centerGeoPoint;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Resets the map to its original position and zoom level.\r\n *\r\n * Use the only parameter to set number of milliseconds for the zoom\r\n * animation to play.\r\n *\r\n * @param duration Duration (ms)\r\n */\r\n MapChart.prototype.goHome = function (duration) {\r\n var homeGeoPoint = this.homeGeoPoint;\r\n if (!homeGeoPoint) {\r\n homeGeoPoint = this.centerGeoPoint;\r\n }\r\n if (homeGeoPoint) {\r\n this.zoomToGeoPoint(homeGeoPoint, this.homeZoomLevel, true, duration, true);\r\n }\r\n };\r\n /**\r\n * Sets [[Paper]] instance to use to draw elements.\r\n *\r\n * @ignore\r\n * @param paper Paper\r\n * @return true if paper was changed, false, if it's the same\r\n */\r\n MapChart.prototype.setPaper = function (paper) {\r\n if (this.svgContainer) {\r\n this.svgContainer.hideOverflow = true;\r\n }\r\n return _super.prototype.setPaper.call(this, paper);\r\n };\r\n Object.defineProperty(MapChart.prototype, \"backgroundSeries\", {\r\n /**\r\n * Background series will create polygons that will fill all the map area\r\n * with some color (or other fill).\r\n *\r\n * This might be useful with non-rectangular projections, like Orthographic,\r\n * Albers, etc.\r\n *\r\n * To change background color/opacity access polygon template.\r\n *\r\n * ```TypeScript\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fill = am4core.color(\"#fff\");\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fillOpacity = 0.1;\r\n * ```\r\n * ```JavaScript\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fill = am4core.color(\"#fff\");\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fillOpacity = 0.1;\r\n * ```\r\n * ```JSON\r\n * {\r\n * \"backgroundSeries\": {\r\n * \"mapPolygons\": {\r\n * \"polygon\": {\r\n * \"fill\": \"#fff\",\r\n * \"fillOpacity\": 0.1\r\n * }\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @since 4.3.0\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._backgroundSeries) {\r\n var backgroundSeries = new MapPolygonSeries();\r\n backgroundSeries.parent = this.seriesContainer;\r\n backgroundSeries.chart = this;\r\n backgroundSeries.hiddenInLegend = true;\r\n backgroundSeries.mapPolygons.template.focusable = false;\r\n backgroundSeries.addDisposer(new Disposer(function () {\r\n _this._backgroundSeries = undefined;\r\n }));\r\n this._disposers.push(backgroundSeries);\r\n var interfaceColors = new InterfaceColorSet();\r\n var color = interfaceColors.getFor(\"background\");\r\n var polygonTemplate = backgroundSeries.mapPolygons.template.polygon;\r\n polygonTemplate.stroke = color;\r\n polygonTemplate.fill = color;\r\n polygonTemplate.fillOpacity = 0;\r\n polygonTemplate.strokeOpacity = 0;\r\n //polygonTemplate.focusable = false;\r\n backgroundSeries.mapPolygons.create();\r\n this._backgroundSeries = backgroundSeries;\r\n }\r\n return this._backgroundSeries;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Prepares the legend instance for use in this chart.\r\n *\r\n * @param legend Legend\r\n */\r\n MapChart.prototype.setLegend = function (legend) {\r\n _super.prototype.setLegend.call(this, legend);\r\n if (legend) {\r\n legend.parent = this;\r\n }\r\n };\r\n /**\r\n * @param value Tap to activate?\r\n */\r\n MapChart.prototype.setTapToActivate = function (value) {\r\n _super.prototype.setTapToActivate.call(this, value);\r\n // setup other containers\r\n this.seriesContainer.interactions.isTouchProtected = true;\r\n this.panSprite.interactions.isTouchProtected = true;\r\n };\r\n MapChart.prototype.handleTapToActivate = function () {\r\n _super.prototype.handleTapToActivate.call(this);\r\n this.seriesContainer.interactions.isTouchProtected = false;\r\n this.panSprite.interactions.isTouchProtected = false;\r\n };\r\n MapChart.prototype.handleTapToActivateDeactivation = function () {\r\n _super.prototype.handleTapToActivateDeactivation.call(this);\r\n this.seriesContainer.interactions.isTouchProtected = true;\r\n this.panSprite.interactions.isTouchProtected = true;\r\n };\r\n /**\r\n * Adds easing functions to \"function\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\r\n MapChart.prototype.asFunction = function (field) {\r\n return field == \"zoomEasing\" || _super.prototype.asIs.call(this, field);\r\n };\r\n /**\r\n * @ignore\r\n * @return Has license?\r\n */\r\n MapChart.prototype.hasLicense = function () {\r\n if (options.commercialLicense) {\r\n return true;\r\n }\r\n if (!_super.prototype.hasLicense.call(this)) {\r\n return false;\r\n }\r\n for (var i = 0; i < options.licenses.length; i++) {\r\n if (options.licenses[i].match(/^MP.{5,}/i)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n return MapChart;\r\n}(SerialChart));\r\nexport { MapChart };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapChart\"] = MapChart;\r\n//# sourceMappingURL=MapChart.js.map","/**\r\n * Map spline module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapLine } from \"./MapLine\";\r\nimport { Polyspline } from \"../../core/elements/Polyspline\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to draw a spline on the map.\r\n *\r\n * @see {@link IMapSplineEvents} for a list of available events\r\n * @see {@link IMapSplineAdapters} for a list of available Adapters\r\n */\r\nvar MapSpline = /** @class */ (function (_super) {\r\n __extends(MapSpline, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapSpline() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"MapSpline\";\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n MapSpline.prototype.createLine = function () {\r\n this.line = new Polyspline();\r\n this.line.tensionX = 0.8;\r\n this.line.tensionY = 0.8;\r\n };\r\n Object.defineProperty(MapSpline.prototype, \"shortestDistance\", {\r\n /**\r\n * ShortestDistance = true is not supported by MapSpline, only MapLine does support it\r\n * @default false\r\n * @param value\r\n * @todo: review description\r\n */\r\n get: function () {\r\n return false;\r\n },\r\n set: function (value) {\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MapSpline;\r\n}(MapLine));\r\nexport { MapSpline };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapSpline\"] = MapSpline;\r\n//# sourceMappingURL=MapSpline.js.map","/**\r\n * Map arched line module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapLine } from \"./MapLine\";\r\nimport { Polyarc } from \"../../core/elements/Polyarc\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to draw an arched line on the map.\r\n *\r\n * @see {@link IMapArcEvents} for a list of available events\r\n * @see {@link IMapArcAdapters} for a list of available Adapters\r\n */\r\nvar MapArc = /** @class */ (function (_super) {\r\n __extends(MapArc, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapArc() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"MapArc\";\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n MapArc.prototype.createLine = function () {\r\n this.line = new Polyarc();\r\n };\r\n Object.defineProperty(MapArc.prototype, \"shortestDistance\", {\r\n get: function () {\r\n return false;\r\n },\r\n /**\r\n * `shortestDistance = true` is not supported by `MapArc`.\r\n *\r\n * Only [[MapLine]] supports it.\r\n *\r\n * @default false\r\n * @param value\r\n */\r\n set: function (value) {\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MapArc;\r\n}(MapLine));\r\nexport { MapArc };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapArc\"] = MapArc;\r\n//# sourceMappingURL=MapArc.js.map","/**\r\n * Map spline series module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapLineSeries, MapLineSeriesDataItem } from \"./MapLineSeries\";\r\nimport { MapSpline } from \"./MapSpline\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[MapSplineSeries]]\r\n * @see {@link DataItem}\r\n */\r\nvar MapSplineSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(MapSplineSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapSplineSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapSplineSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return MapSplineSeriesDataItem;\r\n}(MapLineSeriesDataItem));\r\nexport { MapSplineSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A series of map spline elements.\r\n *\r\n * @see {@link IMapSplineSeriesEvents} for a list of available Events\r\n * @see {@link IMapSplineSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar MapSplineSeries = /** @class */ (function (_super) {\r\n __extends(MapSplineSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapSplineSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapSplineSeries\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n MapSplineSeries.prototype.createDataItem = function () {\r\n return new MapSplineSeriesDataItem();\r\n };\r\n /**\r\n * Returns a new line instance of suitable type.\r\n *\r\n * @return New line\r\n */\r\n MapSplineSeries.prototype.createLine = function () {\r\n return new MapSpline();\r\n };\r\n return MapSplineSeries;\r\n}(MapLineSeries));\r\nexport { MapSplineSeries };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapSplineSeries\"] = MapSplineSeries;\r\nregistry.registeredClasses[\"MapSplineSeriesDataItem\"] = MapSplineSeriesDataItem;\r\n//# sourceMappingURL=MapSplineSeries.js.map","/**\r\n * Map arc series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { MapLineSeries, MapLineSeriesDataItem } from \"./MapLineSeries\";\r\nimport { MapArc } from \"./MapArc\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[MapArcSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar MapArcSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(MapArcSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapArcSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapArcSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return MapArcSeriesDataItem;\r\n}(MapLineSeriesDataItem));\r\nexport { MapArcSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A series of arc elements. (curved lines)\r\n *\r\n * @see {@link IMapArcSeriesEvents} for a list of available Events\r\n * @see {@link IMapArcSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar MapArcSeries = /** @class */ (function (_super) {\r\n __extends(MapArcSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapArcSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapArcSeries\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n MapArcSeries.prototype.createDataItem = function () {\r\n return new MapArcSeriesDataItem();\r\n };\r\n /**\r\n * Returns a new line instance of suitable type.\r\n *\r\n * @return New line\r\n */\r\n MapArcSeries.prototype.createLine = function () {\r\n return new MapArc();\r\n };\r\n return MapArcSeries;\r\n}(MapLineSeries));\r\nexport { MapArcSeries };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"MapArcSeries\"] = MapArcSeries;\r\nregistry.registeredClasses[\"MapArcSeriesDataItem\"] = MapArcSeriesDataItem;\r\n//# sourceMappingURL=MapArcSeries.js.map","/**\r\n * Zoom control module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { Button } from \"../../core/elements/Button\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { keyboard } from \"../../core/utils/Keyboard\";\r\nimport { getInteraction } from \"../../core/interaction/Interaction\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a control for zooming the map.\r\n *\r\n * @see {@link IZoomControlEvents} for a list of available events\r\n * @see {@link IZoomControlAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar ZoomControl = /** @class */ (function (_super) {\r\n __extends(ZoomControl, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ZoomControl() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * A target map.\r\n */\r\n _this._chart = new MutableValueDisposer();\r\n _this.className = \"ZoomControl\";\r\n _this.align = \"right\";\r\n _this.valign = \"bottom\";\r\n _this.layout = \"vertical\";\r\n _this.padding(5, 5, 5, 5);\r\n var interfaceColors = new InterfaceColorSet();\r\n var plusButton = _this.createChild(Button);\r\n plusButton.shouldClone = false;\r\n plusButton.label.text = \"+\";\r\n //plusButton.fontFamily = \"Verdana\";\r\n _this.plusButton = plusButton;\r\n var slider = _this.createChild(Container);\r\n slider.shouldClone = false;\r\n slider.background.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n slider.background.fillOpacity = 0.05;\r\n slider.background.events.on(\"hit\", _this.handleBackgroundClick, _this, false);\r\n slider.events.on(\"sizechanged\", _this.updateThumbSize, _this, false);\r\n _this.slider = slider;\r\n var thumb = slider.createChild(Button);\r\n thumb.shouldClone = false;\r\n thumb.padding(0, 0, 0, 0);\r\n thumb.draggable = true;\r\n thumb.events.on(\"drag\", _this.handleThumbDrag, _this, false);\r\n _this.thumb = thumb;\r\n var minusButton = _this.createChild(Button);\r\n minusButton.shouldClone = false;\r\n minusButton.label.text = \"-\";\r\n //minusButton.fontFamily = \"Verdana\";\r\n _this.minusButton = minusButton;\r\n // Set roles\r\n _this.thumb.role = \"slider\";\r\n _this.thumb.readerLive = \"polite\";\r\n // Set reader text\r\n _this.thumb.readerTitle = _this.language.translate(\"Use arrow keys to zoom in and out\");\r\n _this.minusButton.readerTitle = _this.language.translate(\"Press ENTER to zoom in\");\r\n _this.plusButton.readerTitle = _this.language.translate(\"Press ENTER to zoom out\");\r\n _this.applyTheme();\r\n _this.events.on(\"propertychanged\", function (event) {\r\n if (event.property == \"layout\") {\r\n _this.fixLayout();\r\n }\r\n }, undefined, false);\r\n _this._disposers.push(_this._chart);\r\n _this.fixLayout();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n ZoomControl.prototype.fixLayout = function () {\r\n var plusButton = this.plusButton;\r\n var minusButton = this.minusButton;\r\n var thumb = this.thumb;\r\n var slider = this.slider;\r\n plusButton.x = undefined;\r\n plusButton.y = undefined;\r\n minusButton.x = undefined;\r\n minusButton.y = undefined;\r\n thumb.x = undefined;\r\n thumb.y = undefined;\r\n slider.x = undefined;\r\n slider.y = undefined;\r\n plusButton.padding(6, 10, 6, 10);\r\n minusButton.padding(6, 10, 6, 10);\r\n minusButton.label.align = \"center\";\r\n minusButton.label.valign = \"middle\";\r\n plusButton.label.align = \"center\";\r\n plusButton.label.valign = \"middle\";\r\n if (this.layout == \"vertical\") {\r\n this.width = 40;\r\n this.height = undefined;\r\n minusButton.width = percent(100);\r\n minusButton.height = undefined;\r\n thumb.width = percent(100);\r\n thumb.height = undefined;\r\n plusButton.width = percent(100);\r\n plusButton.height = undefined;\r\n slider.width = percent(100);\r\n minusButton.marginTop = 1;\r\n plusButton.marginBottom = 2;\r\n slider.height = 0;\r\n minusButton.toFront();\r\n plusButton.toBack();\r\n thumb.minX = 0;\r\n thumb.maxX = 0;\r\n thumb.minY = 0;\r\n }\r\n else if (this.layout == \"horizontal\") {\r\n this.height = 40;\r\n this.width = undefined;\r\n minusButton.height = percent(100);\r\n minusButton.width = undefined;\r\n plusButton.height = percent(100);\r\n plusButton.width = undefined;\r\n thumb.height = percent(100);\r\n thumb.width = undefined;\r\n thumb.minX = 0;\r\n thumb.minY = 0;\r\n thumb.maxY = 0;\r\n slider.height = percent(100);\r\n slider.width = 0;\r\n minusButton.toBack();\r\n plusButton.toFront();\r\n }\r\n };\r\n /**\r\n * Handles zoom operation after clicking on the slider background.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n ZoomControl.prototype.handleBackgroundClick = function (event) {\r\n var sprite = event.target;\r\n var y = event.spritePoint.y;\r\n var chart = this.chart;\r\n var maxPower = Math.log(chart.maxZoomLevel) / Math.LN2;\r\n var minPower = Math.log(chart.minZoomLevel) / Math.LN2;\r\n var power = (sprite.pixelHeight - y) / sprite.pixelHeight * (minPower + (maxPower - minPower));\r\n var zoomLevel = Math.pow(2, power);\r\n chart.zoomToGeoPoint(chart.zoomGeoPoint, zoomLevel);\r\n };\r\n Object.defineProperty(ZoomControl.prototype, \"chart\", {\r\n /**\r\n * @return Map/chart\r\n */\r\n get: function () {\r\n return this._chart.get();\r\n },\r\n /**\r\n * A main chart/map that this zoom control is for.\r\n *\r\n * @param chart Map/chart\r\n */\r\n set: function (chart) {\r\n var _this = this;\r\n this._chart.set(chart, new MultiDisposer([\r\n chart.events.on(\"maxsizechanged\", this.updateThumbSize, this, false),\r\n chart.events.on(\"zoomlevelchanged\", this.updateThumb, this, false),\r\n this.minusButton.events.on(\"hit\", function () { chart.zoomOut(chart.zoomGeoPoint); }, chart, false),\r\n getInteraction().body.events.on(\"keyup\", function (ev) {\r\n if (_this.topParent.hasFocused) {\r\n // ENTER is now handled globally\r\n if (keyboard.isKey(ev.event, \"plus\")) {\r\n chart.zoomIn();\r\n }\r\n else if (keyboard.isKey(ev.event, \"minus\")) {\r\n chart.zoomOut();\r\n }\r\n }\r\n }, chart),\r\n this.plusButton.events.on(\"hit\", function () { chart.zoomIn(chart.zoomGeoPoint); }, chart, false)\r\n ]));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates the slider's thumb size based on the available zoom space.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ZoomControl.prototype.updateThumbSize = function () {\r\n var chart = this.chart;\r\n if (chart) {\r\n var slider = this.slider;\r\n var thumb = this.thumb;\r\n if (this.layout == \"vertical\") {\r\n thumb.minHeight = Math.min(this.slider.pixelHeight, 20);\r\n thumb.height = slider.pixelHeight / this.stepCount;\r\n thumb.maxY = slider.pixelHeight - thumb.pixelHeight;\r\n if (thumb.pixelHeight <= 1) {\r\n thumb.visible = false;\r\n }\r\n else {\r\n thumb.visible = true;\r\n }\r\n }\r\n else {\r\n thumb.minWidth = Math.min(this.slider.pixelWidth, 20);\r\n thumb.width = slider.pixelWidth / this.stepCount;\r\n thumb.maxX = slider.pixelWidth - thumb.pixelWidth;\r\n if (thumb.pixelWidth <= 1) {\r\n thumb.visible = false;\r\n }\r\n else {\r\n thumb.visible = true;\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Updates thumb according to current zoom position from map.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ZoomControl.prototype.updateThumb = function () {\r\n var slider = this.slider;\r\n var chart = this.chart;\r\n var thumb = this.thumb;\r\n if (!thumb.isDown) {\r\n var step = (Math.log(chart.zoomLevel) - Math.log(this.chart.minZoomLevel)) / Math.LN2;\r\n if (this.layout == \"vertical\") {\r\n thumb.y = slider.pixelHeight - (slider.pixelHeight - thumb.pixelHeight) * step / this.stepCount - thumb.pixelHeight;\r\n }\r\n else {\r\n thumb.x = slider.pixelWidth * step / this.stepCount;\r\n }\r\n }\r\n };\r\n /**\r\n * Zooms the actual map when slider position changes.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ZoomControl.prototype.handleThumbDrag = function () {\r\n var slider = this.slider;\r\n var chart = this.chart;\r\n var thumb = this.thumb;\r\n var step;\r\n var minStep = Math.log(this.chart.minZoomLevel) / Math.LN2;\r\n if (this.layout == \"vertical\") {\r\n step = this.stepCount * (slider.pixelHeight - thumb.pixelY - thumb.pixelHeight) / (slider.pixelHeight - thumb.pixelHeight);\r\n }\r\n else {\r\n step = this.stepCount * thumb.pixelX / slider.pixelWidth;\r\n }\r\n step = minStep + step;\r\n var zoomLevel = Math.pow(2, step);\r\n chart.zoomToGeoPoint(undefined, zoomLevel, false, 0);\r\n };\r\n Object.defineProperty(ZoomControl.prototype, \"stepCount\", {\r\n /**\r\n * Returns the step countfor the slider grid according to map's min and max\r\n * zoom level settings.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Step count\r\n */\r\n get: function () {\r\n return Math.log(this.chart.maxZoomLevel) / Math.LN2 - Math.log(this.chart.minZoomLevel) / Math.LN2;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates a background element for slider control.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Background\r\n */\r\n ZoomControl.prototype.createBackground = function () {\r\n return new RoundedRectangle();\r\n };\r\n return ZoomControl;\r\n}(Container));\r\nexport { ZoomControl };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ZoomControl\"] = ZoomControl;\r\n//# sourceMappingURL=ZoomControl.js.map","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * Mercator projection.\r\n */\r\nvar Mercator = /** @class */ (function (_super) {\r\n __extends(Mercator, _super);\r\n function Mercator() {\r\n var _this = _super.call(this) || this;\r\n _this.d3Projection = d3geo.geoMercator();\r\n return _this;\r\n }\r\n return Mercator;\r\n}(Projection));\r\nexport { Mercator };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Mercator\"] = Mercator;\r\n//# sourceMappingURL=Mercator.js.map","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {atan, exp, log, quarterPi, pi, tan} from \"./math.js\";\n\nexport function millerRaw(lambda, phi) {\n return [lambda, 1.25 * log(tan(quarterPi + 0.4 * phi))];\n}\n\nmillerRaw.invert = function(x, y) {\n return [x, 2.5 * atan(exp(0.8 * y)) - 0.625 * pi];\n};\n\nexport default function() {\n return projection(millerRaw)\n .scale(108.318);\n}\n","/**\r\n * Functionality for Miller projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { registry } from \"../../../core/Registry\";\r\n// @ts-ignore\r\nimport * as d3geoprojection from \"d3-geo-projection\";\r\n/**\r\n * Miller projection.\r\n */\r\nvar Miller = /** @class */ (function (_super) {\r\n __extends(Miller, _super);\r\n function Miller() {\r\n var _this = _super.call(this) || this;\r\n _this.d3Projection = d3geoprojection.geoMiller();\r\n return _this;\r\n }\r\n return Miller;\r\n}(Projection));\r\nexport { Miller };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Miller\"] = Miller;\r\n//# sourceMappingURL=Miller.js.map","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt} from \"./math.js\";\n\nexport function eckert6Raw(lambda, phi) {\n var k = (1 + halfPi) * sin(phi);\n for (var i = 0, delta = Infinity; i < 10 && abs(delta) > epsilon; i++) {\n phi -= delta = (phi + sin(phi) - k) / (1 + cos(phi));\n }\n k = sqrt(2 + pi);\n return [\n lambda * (1 + cos(phi)) / k,\n 2 * phi / k\n ];\n}\n\neckert6Raw.invert = function(x, y) {\n var j = 1 + halfPi,\n k = sqrt(j / 2);\n return [\n x * 2 * k / (1 + cos(y *= k)),\n asin((y + sin(y)) / j)\n ];\n};\n\nexport default function() {\n return projection(eckert6Raw)\n .scale(173.044);\n}\n","/**\r\n * Functionality for Eckert6 projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { registry } from \"../../../core/Registry\";\r\n// @ts-ignore\r\nimport * as d3geoprojection from \"d3-geo-projection\";\r\n/**\r\n * Eckert6 projection.\r\n */\r\nvar Eckert6 = /** @class */ (function (_super) {\r\n __extends(Eckert6, _super);\r\n function Eckert6() {\r\n var _this = _super.call(this) || this;\r\n _this.d3Projection = d3geoprojection.geoEckert6();\r\n return _this;\r\n }\r\n return Eckert6;\r\n}(Projection));\r\nexport { Eckert6 };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Eckert6\"] = Eckert6;\r\n//# sourceMappingURL=Eckert6.js.map","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * Orthographic projection.\r\n */\r\nvar Orthographic = /** @class */ (function (_super) {\r\n __extends(Orthographic, _super);\r\n function Orthographic() {\r\n var _this = _super.call(this) || this;\r\n _this.d3Projection = d3geo.geoOrthographic();\r\n return _this;\r\n }\r\n return Orthographic;\r\n}(Projection));\r\nexport { Orthographic };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Orthographic\"] = Orthographic;\r\n//# sourceMappingURL=Orthographic.js.map","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * Orthographic projection.\r\n */\r\nvar Stereographic = /** @class */ (function (_super) {\r\n __extends(Stereographic, _super);\r\n function Stereographic() {\r\n var _this = _super.call(this) || this;\r\n _this.d3Projection = d3geo.geoStereographic();\r\n return _this;\r\n }\r\n return Stereographic;\r\n}(Projection));\r\nexport { Stereographic };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Stereographic\"] = Stereographic;\r\n//# sourceMappingURL=Stereographic.js.map","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * Orthographic projection.\r\n */\r\nvar Albers = /** @class */ (function (_super) {\r\n __extends(Albers, _super);\r\n function Albers() {\r\n var _this = _super.call(this) || this;\r\n _this.d3Projection = d3geo.geoAlbers();\r\n return _this;\r\n }\r\n return Albers;\r\n}(Projection));\r\nexport { Albers };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Albers\"] = Albers;\r\n//# sourceMappingURL=Albers.js.map","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * Orthographic projection.\r\n */\r\nvar AlbersUsa = /** @class */ (function (_super) {\r\n __extends(AlbersUsa, _super);\r\n function AlbersUsa() {\r\n var _this = _super.call(this) || this;\r\n _this.d3Projection = d3geo.geoAlbersUsa();\r\n return _this;\r\n }\r\n return AlbersUsa;\r\n}(Projection));\r\nexport { AlbersUsa };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AlbersUsa\"] = AlbersUsa;\r\n//# sourceMappingURL=AlbersUSA.js.map","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * Orthographic projection.\r\n */\r\nvar NaturalEarth1 = /** @class */ (function (_super) {\r\n __extends(NaturalEarth1, _super);\r\n function NaturalEarth1() {\r\n var _this = _super.call(this) || this;\r\n _this.d3Projection = d3geo.geoNaturalEarth1();\r\n return _this;\r\n }\r\n return NaturalEarth1;\r\n}(Projection));\r\nexport { NaturalEarth1 };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"NaturalEarth1\"] = NaturalEarth1;\r\n//# sourceMappingURL=NaturalEarth1.js.map","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * Orthographic projection.\r\n */\r\nvar AzimuthalEqualArea = /** @class */ (function (_super) {\r\n __extends(AzimuthalEqualArea, _super);\r\n function AzimuthalEqualArea() {\r\n var _this = _super.call(this) || this;\r\n _this.d3Projection = d3geo.geoAzimuthalEqualArea();\r\n return _this;\r\n }\r\n return AzimuthalEqualArea;\r\n}(Projection));\r\nexport { AzimuthalEqualArea };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AzimuthalEqualArea\"] = AzimuthalEqualArea;\r\n//# sourceMappingURL=AzimuthalEqualArea.js.map","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Projection } from \"./Projection\";\r\nimport { registry } from \"../../../core/Registry\";\r\nimport * as d3geo from \"d3-geo\";\r\n/**\r\n * Orthographic projection.\r\n */\r\nvar EqualEarth = /** @class */ (function (_super) {\r\n __extends(EqualEarth, _super);\r\n function EqualEarth() {\r\n var _this = _super.call(this) || this;\r\n _this.d3Projection = d3geo.geoEqualEarth();\r\n return _this;\r\n }\r\n return EqualEarth;\r\n}(Projection));\r\nexport { EqualEarth };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"EqualEarth\"] = EqualEarth;\r\n//# sourceMappingURL=EqualEarth.js.map","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","\nexport default class TinyQueue {\n constructor(data = [], compare = defaultCompare) {\n this.data = data;\n this.length = this.data.length;\n this.compare = compare;\n\n if (this.length > 0) {\n for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n }\n }\n\n push(item) {\n this.data.push(item);\n this.length++;\n this._up(this.length - 1);\n }\n\n pop() {\n if (this.length === 0) return undefined;\n\n const top = this.data[0];\n const bottom = this.data.pop();\n this.length--;\n\n if (this.length > 0) {\n this.data[0] = bottom;\n this._down(0);\n }\n\n return top;\n }\n\n peek() {\n return this.data[0];\n }\n\n _up(pos) {\n const {data, compare} = this;\n const item = data[pos];\n\n while (pos > 0) {\n const parent = (pos - 1) >> 1;\n const current = data[parent];\n if (compare(item, current) >= 0) break;\n data[pos] = current;\n pos = parent;\n }\n\n data[pos] = item;\n }\n\n _down(pos) {\n const {data, compare} = this;\n const halfLength = this.length >> 1;\n const item = data[pos];\n\n while (pos < halfLength) {\n let left = (pos << 1) + 1;\n let best = data[left];\n const right = left + 1;\n\n if (right < this.length && compare(data[right], best) < 0) {\n left = right;\n best = data[right];\n }\n if (compare(best, item) >= 0) break;\n\n data[pos] = best;\n pos = left;\n }\n\n data[pos] = item;\n }\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n"],"sourceRoot":""}