From 936bd1395a2abef5f2254ba884e90db1ee929bdb Mon Sep 17 00:00:00 2001 From: Rapha S Date: Mon, 4 Nov 2024 08:29:56 +0200 Subject: [PATCH 1/3] Fix floating layers while moving map --- src/map/handler/TouchGestures.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/map/handler/TouchGestures.js b/src/map/handler/TouchGestures.js index dc5a27d..e05d778 100644 --- a/src/map/handler/TouchGestures.js +++ b/src/map/handler/TouchGestures.js @@ -139,6 +139,15 @@ L.Map.TouchGestures = L.Handler.extend({ var moveFn = map._move.bind(map, this._center, this._zoom, { pinch: true, round: false }, undefined); this._animRequest = L.Util.requestAnimFrame(moveFn, this, true); + + if (this.zoom) { + // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate. + if (this._map.options.zoomAnimation) { + this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap); + } else { + this._map._resetView(this._center, this._map._limitZoom(this._zoom)); + } + } L.DomEvent.preventDefault(e); }, From 1b07cbcf3b764fde171138698a40af732fb02d62 Mon Sep 17 00:00:00 2001 From: Raphael Stefanini Date: Mon, 4 Nov 2024 12:20:55 +0200 Subject: [PATCH 2/3] Run 'npm run build' --- dist/leaflet-rotate-src.js | 9 +++++++++ dist/leaflet-rotate-src.js.map | 2 +- dist/leaflet-rotate.js | 2 +- dist/leaflet-rotate.js.map | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/dist/leaflet-rotate-src.js b/dist/leaflet-rotate-src.js index 127e518..e1f3319 100644 --- a/dist/leaflet-rotate-src.js +++ b/dist/leaflet-rotate-src.js @@ -1573,6 +1573,15 @@ var moveFn = map._move.bind(map, this._center, this._zoom, { pinch: true, round: false }, undefined); this._animRequest = L.Util.requestAnimFrame(moveFn, this, true); + + if (this.zoom) { + // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate. + if (this._map.options.zoomAnimation) { + this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap); + } else { + this._map._resetView(this._center, this._map._limitZoom(this._zoom)); + } + } L.DomEvent.preventDefault(e); }, diff --git a/dist/leaflet-rotate-src.js.map b/dist/leaflet-rotate-src.js.map index 68204eb..5ba0dd6 100644 --- a/dist/leaflet-rotate-src.js.map +++ b/dist/leaflet-rotate-src.js.map @@ -1 +1 @@ -{"version":3,"file":"leaflet-rotate-src.js","sources":["../src/dom/DomUtil.js","../src/dom/Draggable.js","../src/geometry/Point.js","../src/layer/DivOverlay.js","../src/layer/Popup.js","../src/layer/Tooltip.js","../src/layer/marker/Icon.js","../src/layer/marker/Marker.js","../src/layer/tile/GridLayer.js","../src/layer/vector/Renderer.js","../src/map/Map.js","../src/map/handler/CompassBearing.js","../src/map/handler/ContainerMutation.js","../src/map/handler/TouchGestures.js","../src/map/handler/TouchRotate.js","../src/map/handler/ShiftKeyRotate.js","../src/map/handler/TouchZoom.js","../src/control/Rotate.js"],"sourcesContent":["/**\n * @external L.DomUtil\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/DomUtil.js\n */\n\nconst domUtilProto = L.extend({}, L.DomUtil);\n\nL.extend(L.DomUtil, {\n\n /**\n * Resets the 3D CSS transform of `el` so it is\n * translated by `offset` pixels and optionally\n * scaled by `scale`. Does not have an effect if\n * the browser doesn't support 3D CSS transforms.\n * \n * @param {HTMLElement} el \n * @param {L.Point} offset \n * @param {Number} scale\n * @param {Number} bearing \n * @param {L.Point} pivot \n */\n setTransform: function(el, offset, scale, bearing, pivot) {\n var pos = offset || new L.Point(0, 0);\n\n if (!bearing) {\n offset = pos._round();\n return domUtilProto.setTransform.apply(this, arguments);\n }\n\n pos = pos.rotateFrom(bearing, pivot);\n\n el.style[L.DomUtil.TRANSFORM] =\n 'translate3d(' + pos.x + 'px,' + pos.y + 'px' + ',0)' +\n (scale ? ' scale(' + scale + ')' : '') +\n ' rotate(' + bearing + 'rad)';\n },\n\n /**\n * Sets the position of `el` to coordinates specified by\n * `position`, using CSS translate or top/left positioning\n * depending on the browser (used by Leaflet internally\n * to position its layers).\n * \n * @param {HTMLElement} el \n * @param {L.Point} point \n * @param {Number} bearing\n * @param {L.Point} pivot \n * @param {Number} scale \n */\n setPosition: function(el, point, bearing, pivot, scale) {\n if (!bearing) {\n return domUtilProto.setPosition.apply(this, arguments);\n }\n\n /*eslint-disable */\n el._leaflet_pos = point;\n /*eslint-enable */\n\n if (L.Browser.any3d) {\n L.DomUtil.setTransform(el, point, scale, bearing, pivot);\n } else {\n el.style.left = point.x + 'px';\n el.style.top = point.y + 'px';\n }\n },\n\n /**\n * @constant radians = degrees × π/180°\n */\n DEG_TO_RAD: Math.PI / 180,\n\n /**\n * @constant degrees = radians × 180°/π\n */\n RAD_TO_DEG: 180 / Math.PI,\n\n});\n","/**\n * @external L.Draggable\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/Draggable.js\n */\n\n/**\n * A class for making DOM elements draggable (including touch support).\n * Used internally for map and marker dragging. Only works for elements\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\n */\n\nL.Draggable.include({\n\n /** @TODO */\n // updateMapBearing: function(mapBearing) {\n // this._mapBearing = mapBearing;\n // },\n\n});","/**\n * @external L.Point\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/geometry/Point.js\n */\n\nL.extend(L.Point.prototype, {\n\n /**\n * Rotate around (0,0) by applying the 2D rotation matrix:\n * \n * ⎡ x' ⎤ = ⎡ cos θ -sin θ ⎤ ⎡ x ⎤\n * ⎣ y' ⎦ ⎣ sin θ cos θ ⎦ ⎣ y ⎦\n * \n * @param theta must be given in radians.\n */\n rotate: function(theta) {\n return this.rotateFrom(theta, new L.Point(0,0))\n },\n\n /**\n * Rotate around (pivot.x, pivot.y) by:\n * \n * 1. subtract (pivot.x, pivot.y)\n * 2. rotate around (0, 0)\n * 3. add (pivot.x, pivot.y) back\n * \n * same as `this.subtract(pivot).rotate(theta).add(pivot)`\n * \n * @param {Number} theta \n * @param {L.Point} pivot \n * \n * @returns {L.Point}\n */\n rotateFrom: function(theta, pivot) {\n if (!theta) { return this; }\n var sinTheta = Math.sin(theta);\n var cosTheta = Math.cos(theta);\n var cx = pivot.x,\n cy = pivot.y;\n var x = this.x - cx,\n y = this.y - cy;\n\n return new L.Point(\n x * cosTheta - y * sinTheta + cx,\n x * sinTheta + y * cosTheta + cy\n );\n },\n\n});\n","/**\n * @external L.DivOverlay\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/DivOverlay.js\n */\n\nconst divOverlayProto = L.extend({}, L.DivOverlay.prototype);\n\nL.DivOverlay.include({\n\n /**\n * Update L.Popup and L.Tooltip anchor positions after\n * the map is moved by calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(divOverlayProto.getEvents.apply(this, arguments), { rotate: this._updatePosition });\n },\n\n /**\n * 0. update element anchor point (divOverlayProto v1.9.3)\n * 1. rotate around anchor point (subtract anchor -> rotate point -> add anchor)\n */\n _updatePosition: function() {\n if (!this._map) { return; }\n divOverlayProto._updatePosition.apply(this, arguments);\n if (this._map && this._map._rotate && this._zoomAnimated) {\n var anchor = this._getAnchor();\n var pos = L.DomUtil.getPosition(this._container).subtract(anchor);\n L.DomUtil.setPosition(this._container, this._map.rotatedPointToMapPanePoint(pos).add(anchor));\n }\n\n },\n\n});\n","/**\n * @external L.Popup\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/Popup.js\n */\n\nconst popupProto = L.extend({}, L.Popup.prototype);\n\nL.Popup.include({\n\n /**\n * 0. update element anchor point (popupProto v1.9.3)\n * 1. rotate around anchor point (subtract anchor -> rotate point -> add anchor)\n */\n _animateZoom: function(e) {\n popupProto._animateZoom.apply(this, arguments);\n if (this._map && this._map._rotate) {\n var anchor = this._getAnchor();\n var pos = L.DomUtil.getPosition(this._container).subtract(anchor);\n L.DomUtil.setPosition(this._container, this._map.rotatedPointToMapPanePoint(pos).add(anchor));\n }\n },\n\n /**\n * Fix for L.popup({ keepInView = true })\n * \n * @see https://github.com/fnicollet/Leaflet/pull/21\n */\n _adjustPan: function() {\n if (!this.options.autoPan || (this._map._panAnim && this._map._panAnim._inProgress)) { return; }\n\n // We can endlessly recurse if keepInView is set and the view resets.\n // Let's guard against that by exiting early if we're responding to our own autopan.\n if (this._autopanning) {\n this._autopanning = false;\n return;\n }\n\n var map = this._map,\n marginBottom = parseInt(L.DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0,\n containerHeight = this._container.offsetHeight + marginBottom,\n containerWidth = this._containerWidth,\n layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom);\n\n layerPos._add(L.DomUtil.getPosition(this._container));\n\n /** @TODO use popupProto._adjustPan */\n // var containerPos = map.layerPointToContainerPoint(layerPos);\n var containerPos = layerPos._add(this._map._getMapPanePos()),\n padding = L.point(this.options.autoPanPadding),\n paddingTL = L.point(this.options.autoPanPaddingTopLeft || padding),\n paddingBR = L.point(this.options.autoPanPaddingBottomRight || padding),\n size = map.getSize(),\n dx = 0,\n dy = 0;\n\n if (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\n dx = containerPos.x + containerWidth - size.x + paddingBR.x;\n }\n if (containerPos.x - dx - paddingTL.x < 0) { // left\n dx = containerPos.x - paddingTL.x;\n }\n if (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\n dy = containerPos.y + containerHeight - size.y + paddingBR.y;\n }\n if (containerPos.y - dy - paddingTL.y < 0) { // top\n dy = containerPos.y - paddingTL.y;\n }\n\n // @namespace Map\n // @section Popup events\n // @event autopanstart: Event\n // Fired when the map starts autopanning when opening a popup.\n if (dx || dy) {\n // Track that we're autopanning, as this function will be re-ran on moveend\n if (this.options.keepInView) {\n this._autopanning = true;\n }\n map\n .fire('autopanstart')\n .panBy([dx, dy]);\n }\n },\n\n});\n","/**\n * @external L.Tooltip\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/Tooltip.js\n */\n\nconst tooltipProto = L.extend({}, L.Tooltip.prototype);\n\nL.Tooltip.include({\n\n _animateZoom: function(e) {\n if (!this._map._rotate) {\n return tooltipProto._animateZoom.apply(this, arguments);\n }\n var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\n pos = this._map.rotatedPointToMapPanePoint(pos);\n this._setPosition(pos);\n },\n\n _updatePosition: function() {\n if (!this._map._rotate) {\n return tooltipProto._updatePosition.apply(this, arguments);\n }\n var pos = this._map.latLngToLayerPoint(this._latlng);\n\n pos = this._map.rotatedPointToMapPanePoint(pos);\n this._setPosition(pos);\n },\n\n});\n","/**\n * @external L.Icon\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Icon.js\n */\n\nconst iconProto = L.extend({}, L.Icon.prototype);\n\nL.Icon.include({\n\n _setIconStyles: function(img, name) {\n var options = this.options;\n var sizeOption = options[name + 'Size'];\n\n if (typeof sizeOption === 'number') {\n sizeOption = [sizeOption, sizeOption];\n }\n\n var size = L.point(sizeOption),\n anchor = L.point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\n size && size.divideBy(2, true));\n\n img.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\n\n if (anchor) {\n img.style.marginLeft = (-anchor.x) + 'px';\n img.style.marginTop = (-anchor.y) + 'px';\n /** @TODO use iconProto._setIconStyles */\n img.style[L.DomUtil.TRANSFORM + \"Origin\"] = anchor.x + \"px \" + anchor.y + \"px 0px\";\n }\n\n if (size) {\n img.style.width = size.x + 'px';\n img.style.height = size.y + 'px';\n }\n },\n\n});\n","/**\n * @external L.Marker\n * @external L.Handler.MarkerDrag\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Marker.js\n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Marker.Drag.js\n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/Draggable.js\n */\n\nconst markerProto = L.extend({}, L.Marker.prototype);\n\nL.Marker.mergeOptions({\n\n /**\n * Rotation of this marker in rad\n * \n * @type {Number}\n */\n rotation: 0,\n\n /**\n * Rotate this marker when map rotates\n * \n * @type {Boolean}\n */\n rotateWithView: false,\n\n /**\n * Scale of the marker icon\n * \n * @type {Number}\n */\n scale: undefined,\n\n});\n\nvar markerDragProto; // retrived at runtime (see below: L.Marker::_initInteraction())\n\nvar MarkerDrag = {\n\n // _onDragStart: function() {\n // if (!this._marker._map._rotate) {\n // return markerDragProto._onDragStart.apply(this, arguments);\n // }\n // this._draggable.updateMapBearing(this._marker._map._bearing);\n // },\n\n _onDrag: function(e) {\n var marker = this._marker,\n /** @TODO use markerDragProto._onDrag */\n rotated_marker = marker.options.rotation || marker.options.rotateWithView,\n shadow = marker._shadow,\n iconPos = L.DomUtil.getPosition(marker._icon);\n\n /** @TODO use markerDragProto._onDrag */\n // update shadow position\n if (!rotated_marker && shadow) {\n L.DomUtil.setPosition(shadow, iconPos);\n }\n\n /** @TODO use markerDragProto._onDrag */\n if (marker._map._rotate) {\n // Reverse calculation from mapPane coordinates to rotatePane coordinates\n iconPos = marker._map.mapPanePointToRotatedPoint(iconPos);\n }\n var latlng = marker._map.layerPointToLatLng(iconPos);\n\n marker._latlng = latlng;\n e.latlng = latlng;\n e.oldLatLng = this._oldLatLng;\n\n /** @TODO use markerDragProto._onDrag */\n if (rotated_marker) marker.setLatLng(latlng); // use `setLatLng` to presisit rotation. low efficiency\n else marker.fire('move', e); // `setLatLng` will trig 'move' event. we imitate here.\n\n // @event drag: Event\n // Fired repeatedly while the user drags the marker.\n marker\n .fire('drag', e);\n },\n\n _onDragEnd: function(e) {\n if (this._marker._map._rotate) {\n this._marker.update();\n }\n markerDragProto._onDragEnd.apply(this, arguments);\n },\n\n};\n\nL.Marker.include({\n\n /**\n * Update L.Marker anchor position after the map\n * is moved by calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(markerProto.getEvents.apply(this, arguments), { rotate: this.update });\n },\n\n _initInteraction: function() {\n var ret = markerProto._initInteraction.apply(this, arguments);\n if (this.dragging && this.dragging.enabled() && this._map && this._map._rotate) {\n // L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable\n markerDragProto = markerDragProto || Object.getPrototypeOf(this.dragging);\n this.dragging.disable();\n Object.assign(this.dragging, {\n // _onDragStart: MarkerDrag._onDragStart.bind(this.dragging),\n _onDrag: MarkerDrag._onDrag.bind(this.dragging),\n _onDragEnd: MarkerDrag._onDragEnd.bind(this.dragging),\n });\n this.dragging.enable();\n }\n return ret;\n },\n\n _setPos: function(pos) {\n\n /** @TODO use markerProto._setPos */\n if (this._map._rotate) {\n pos = this._map.rotatedPointToMapPanePoint(pos);\n }\n\n /** @TODO use markerProto._setPos */\n var bearing = this.options.rotation || 0;\n if (this.options.rotateWithView) {\n bearing += this._map._bearing;\n }\n\n /** @TODO use markerProto._setPos */\n if (this._icon) {\n L.DomUtil.setPosition(this._icon, pos, bearing, pos, this.options.scale);\n }\n\n /** @TODO use markerProto._setPos */\n if (this._shadow) {\n L.DomUtil.setPosition(this._shadow, pos, bearing, pos, this.options.scale);\n }\n\n this._zIndex = pos.y + this.options.zIndexOffset;\n\n this._resetZIndex();\n },\n\n // _updateZIndex: function(offset) {\n // if (!this._map._rotate) {\n // return markerProto._updateZIndex.apply(this, arguments);\n // }\n // this._icon.style.zIndex = Math.round(this._zIndex + offset);\n // },\n\n setRotation: function(rotation) {\n this.options.rotation = rotation;\n this.update();\n },\n\n});\n","/**\n * @external L.GridLayer\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/tile/GridLayer.js\n */\n\nconst gridLayerProto = L.extend({}, L.GridLayer.prototype);\n\nL.GridLayer.include({\n\n /**\n * Redraw L.TileLayer bounds after the map is\n * moved by just calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n var events = gridLayerProto.getEvents.apply(this, arguments);\n if (this._map._rotate && !this.options.updateWhenIdle) {\n if (!this._onRotate) {\n this._onRotate = L.Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n }\n events.rotate = this._onRotate;\n }\n return events;\n },\n\n _getTiledPixelBounds: function(center) {\n if (!this._map._rotate) {\n return gridLayerProto._getTiledPixelBounds.apply(this, arguments);\n }\n\n return this._map._getNewPixelBounds(center, this._tileZoom);\n },\n\n});\n","/**\n * @external L.Renderer\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/vector/Renderer.js\n */\n\nconst rendererProto = L.extend({}, L.Renderer.prototype);\n\nL.Renderer.include({\n\n /**\n * Redraw L.Canvas and L.SVG renderer bounds after the\n * map is moved by just calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(rendererProto.getEvents.apply(this, arguments), { rotate: this._update });\n },\n\n /**\n * Fix for `map.flyTo()` when `false === map.options.zoomAnimation`\n * \n * @see https://github.com/Leaflet/Leaflet/pull/8794\n */\n onAdd: function() {\n rendererProto.onAdd.apply(this, arguments);\n if (L.version <= \"1.9.3\") {\n // always keep transform-origin as 0 0\n this._container.classList.add('leaflet-zoom-animated');\n }\n },\n\n /**\n * @FIXME layer drifts on `map.setZoom()` (eg. zoom during animation)\n * \n * the main cause seems to be related to `this._updateTransform(path._center, path._zoom))`\n * and `this._topLeft = this._map.layerPointToLatLng(this._bounds.min);`\n * \n * @example\n * map.setZoom(2);\n * path._renderer._update();\n * path._renderer._updateTransform(path._renderer._center, path._renderer._zoom);\n * \n * @see https://github.com/Leaflet/Leaflet/pull/8794\n * @see https://github.com/Leaflet/Leaflet/pull/8103\n * @see https://github.com/Leaflet/Leaflet/issues/7466\n * \n * @TODO rechek this changes from leaflet@v1.9.3\n * \n * @see https://github.com/Leaflet/Leaflet/compare/v1.7.0...v1.9.3\n */\n _updateTransform: function(center, zoom) {\n if (!this._map._rotate) {\n return rendererProto._updateTransform.apply(this, arguments);\n }\n /**\n * @FIXME see path._renderer._reset();\n */\n var scale = this._map.getZoomScale(zoom, this._zoom),\n offset = this._map._latLngToNewLayerPoint(this._topLeft, zoom, center);\n\n L.DomUtil.setTransform(this._container, offset, scale);\n \n },\n\n // getEvents() {\n // const events = {\n // viewreset: this._reset,\n // zoom: this._onZoom,\n // moveend: this._update,\n // zoomend: this._onZoomEnd\n // };\n // if (this._zoomAnimated) {\n // events.zoomanim = this._onAnimZoom;\n // }\n // return events;\n // },\n\n // _onAnimZoom(ev) {\n // this._updateTransform(ev.center, ev.zoom);\n // },\n\n\t// _onZoom() {\n // this._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t// },\n\n // _onZoomEnd() {\n // for (const id in this._layers) {\n // this._layers[id]._project();\n // }\n // },\n\n // _reset() {\n // this._update();\n // this._updateTransform(this._center, this._zoom);\n\n // for (const id in this._layers) {\n // this._layers[id]._reset();\n // }\n // },\n\n // _updatePaths() {\n // for (const id in this._layers) {\n // this._layers[id]._update();\n // }\n // },\n\n _update: function() {\n if (!this._map._rotate) {\n return rendererProto._update.apply(this, arguments);\n }\n // Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n // Subclasses are responsible of firing the 'update' event.\n this._bounds = this._map._getPaddedPixelBounds(this.options.padding);\n this._topLeft = this._map.layerPointToLatLng(this._bounds.min);\n this._center = this._map.getCenter();\n this._zoom = this._map.getZoom();\n },\n\n});\n","/**\n * @external L.Map\n * \n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/Map.js\n */\n\nconst mapProto = L.extend({}, L.Map.prototype);\n\nL.Map.mergeOptions({ rotate: false, bearing: 0, });\n\nL.Map.include({\n\n /**\n * @param {(HTMLElement|String)} id html selector\n * @param {Object} [options={}] leaflet map options\n */\n initialize: function(id, options) {\n if (options.rotate) {\n this._rotate = true;\n this._bearing = 0;\n }\n mapProto.initialize.apply(this, arguments);\n if(this.options.rotate){\n this.setBearing(this.options.bearing);\n }\n },\n\n /**\n * Given a pixel coordinate relative to the map container,\n * returns the corresponding pixel coordinate relative to\n * the [origin pixel](#map-getpixelorigin).\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point} transformed pixel point\n */\n containerPointToLayerPoint: function(point) {\n if (!this._rotate) {\n return mapProto.containerPointToLayerPoint.apply(this, arguments);\n }\n return L.point(point)\n .subtract(this._getMapPanePos())\n .rotateFrom(-this._bearing, this._getRotatePanePos())\n .subtract(this._getRotatePanePos());\n },\n\n /**\n * Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\n * returns the corresponding pixel coordinate relative to the map container.\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point} transformed pixel point\n */\n layerPointToContainerPoint: function(point) {\n if (!this._rotate) {\n return mapProto.layerPointToContainerPoint.apply(this, arguments);\n }\n return L.point(point)\n .add(this._getRotatePanePos())\n .rotateFrom(this._bearing, this._getRotatePanePos())\n .add(this._getMapPanePos());\n },\n\n /**\n * Converts a coordinate from the rotated pane reference system\n * to the reference system of the not rotated map pane.\n * \n * (rotatePane) --> (mapPane)\n * (rotatePane) --> (norotatePane)\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point}\n * \n * @since leaflet-rotate (v0.1)\n */\n rotatedPointToMapPanePoint: function(point) {\n return L.point(point)\n .rotate(this._bearing)\n ._add(this._getRotatePanePos());\n },\n\n /**\n * Converts a coordinate from the not rotated map pane reference system\n * to the reference system of the rotated pane.\n * \n * (mapPane) --> (rotatePane)\n * (norotatePane) --> (rotatePane)\n * \n * @param {L.Point} point pixel screen coordinates\n * \n * @since leaflet-rotate (v0.1)\n */\n mapPanePointToRotatedPoint: function(point) {\n return L.point(point)\n ._subtract(this._getRotatePanePos())\n .rotate(-this._bearing);\n },\n\n // latLngToLayerPoint: function (latlng) {\n // var projectedPoint = this.project(L.latLng(latlng))._round();\n // return projectedPoint._subtract(this.getPixelOrigin());\n // },\n\n // latLngToContainerPoint: function (latlng) {\n\t// \treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\n\t// },\n\n /**\n * Given latlng bounds, returns the bounds in projected pixel\n * relative to the map container.\n * \n * @see https://github.com/ronikar/Leaflet/blob/5c480ef959b947c3beed7065425a5a36c486262b/src/map/Map.js#L1114-L1135\n * \n * @param {L.LatLngBounds} bounds \n * @returns {L.Bounds}\n * \n * @since leaflet-rotate (v0.2)\n */\n mapBoundsToContainerBounds: function (bounds) {\n if (!this._rotate && mapProto.mapBoundsToContainerBounds) {\n return mapProto.mapBoundsToContainerBounds.apply(this, arguments);\n }\n\n // const nw = this.latLngToContainerPoint(bounds.getNorthWest()),\n // ne = this.latLngToContainerPoint(bounds.getNorthEast()),\n // sw = this.latLngToContainerPoint(bounds.getSouthWest()),\n // se = this.latLngToContainerPoint(bounds.getSouthEast());\n\n // same as `this.latLngToContainerPoint(latlng)` but with floating point precision\n const origin = this.getPixelOrigin();\n const nw = this.layerPointToContainerPoint(this.project(bounds.getNorthWest())._subtract(origin)),\n ne = this.layerPointToContainerPoint(this.project(bounds.getNorthEast())._subtract(origin)),\n sw = this.layerPointToContainerPoint(this.project(bounds.getSouthWest())._subtract(origin)),\n se = this.layerPointToContainerPoint(this.project(bounds.getSouthEast())._subtract(origin));\n\n return L.bounds([\n L.point(Math.min(nw.x, ne.x, se.x, sw.x), Math.min(nw.y, ne.y, se.y, sw.y)), // [ minX, minY ]\n L.point(Math.max(nw.x, ne.x, se.x, sw.x), Math.max(nw.y, ne.y, se.y, sw.y)) // [ maxX, maxY ]\n ]);\n },\n\n /**\n * Returns geographical bounds visible in the current map view\n * \n * @TODO find out if map bounds calculated by `L.Map::getBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n * \n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @returns {L.LatLngBounds}\n */\n getBounds: function() {\n if (!this._rotate) {\n return mapProto.getBounds.apply(this, arguments);\n }\n\n // SEE: https://github.com/fnicollet/Leaflet/pull/22\n //\n // var bounds = this.getPixelBounds(),\n // sw = this.unproject(bounds.getBottomLeft()),\n // ne = this.unproject(bounds.getTopRight());\n // return new LatLngBounds(sw, ne);\n //\n\n // LatLngBounds' constructor automatically\n // extends the bounds to fit the passed points\n var size = this.getSize();\n return new L.LatLngBounds([\n this.containerPointToLatLng([0, 0]), // topleft\n this.containerPointToLatLng([size.x, 0]), // topright \n this.containerPointToLatLng([size.x, size.y]), // bottomright\n this.containerPointToLatLng([0, size.y]), // bottomleft\n ]);\n },\n\n /**\n * Returns the bounds of the current map view in projected pixel\n * coordinates (sometimes useful in layer and overlay implementations).\n * \n * @TODO find out if map bounds calculated by `L.Map::getPixelBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n *\n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @returns {L.Bounds}\n */\n // getPixelBounds(center, zoom) {\n // // const topLeftPoint = map.containerPointToLayerPoint(this._getTopLeftPoint());\n // const topLeftPoint = this._getTopLeftPoint(center, zoom);\n // return new L.Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\n // },\n\n /**\n * Change map rotation\n * \n * @param {number} theta map degrees\n * \n * @since leaflet-rotate (v0.1)\n */\n setBearing: function(theta) {\n if (!L.Browser.any3d || !this._rotate) { return; }\n\n var bearing = L.Util.wrapNum(theta, [0, 360]) * L.DomUtil.DEG_TO_RAD,\n center = this._getPixelCenter(),\n oldPos = this._getRotatePanePos().rotateFrom(-this._bearing, center),\n newPos = oldPos.rotateFrom(bearing, center);\n\n // CSS transform\n L.DomUtil.setPosition(this._rotatePane, oldPos, bearing, center);\n\n this._pivot = center;\n this._bearing = bearing;\n this._rotatePanePos = newPos;\n\n this.fire('rotate');\n },\n\n /**\n * Get current map rotation\n * \n * @returns {number} theta map degrees\n * \n * @since leaflet-rotate (v0.1)\n */\n getBearing: function() {\n return this._bearing * L.DomUtil.RAD_TO_DEG;\n },\n\n /**\n * Creates a new [map pane](#map-pane) with the given name if it doesn't\n * exist already, then returns it. The pane is created as a child of\n * `container`, or as a child of the main map pane if not set.\n * \n * @param {String} name leaflet pane\n * @param {HTMLElement} [container] parent element\n * @returns {HTMLElement} pane container\n */\n // createPane: function(name, container) {\n // if (!this._rotate || name == 'mapPane') {\n // return mapProto.createPane.apply(this, arguments);\n // }\n // // init \"rotatePane\"\n // if (!this._rotatePane) {\n // // this._pivot = this.getSize().divideBy(2);\n // this._rotatePane = mapProto.createPane.call(this, 'rotatePane', this._mapPane);\n // L.DomUtil.setPosition(this._rotatePane, new L.Point(0, 0), this._bearing, this._pivot);\n // }\n // return mapProto.createPane.call(this, name, container || this._rotatePane);\n // },\n\n /**\n * Panes are DOM elements used to control the ordering of layers on\n * the map. You can access panes with [`map.getPane`](#map-getpane)\n * or [`map.getPanes`](#map-getpanes) methods. New panes can be created\n * with the [`map.createPane`](#map-createpane) method.\n * \n * Every map has the following default panes that differ only in zIndex:\n * \n * - mapPane [HTMLElement = 'auto'] - Pane that contains all other map panes\n * - tilePane [HTMLElement = 2] - Pane for tile layers\n * - overlayPane [HTMLElement = 4] - Pane for overlays like polylines and polygons\n * - shadowPane [HTMLElement = 5] - Pane for overlay shadows (e.g. marker shadows)\n * - markerPane [HTMLElement = 6] - Pane for marker icons\n * - tooltipPane [HTMLElement = 650] - Pane for tooltips.\n * - popupPane [HTMLElement = 700] - Pane for popups.\n */\n _initPanes: function() {\n var panes = this._panes = {};\n this._paneRenderers = {};\n\n this._mapPane = this.createPane('mapPane', this._container);\n L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));\n\n if (this._rotate) {\n this._rotatePane = this.createPane('rotatePane', this._mapPane);\n this._norotatePane = this.createPane('norotatePane', this._mapPane);\n // rotatePane\n this.createPane('tilePane', this._rotatePane);\n this.createPane('overlayPane', this._rotatePane);\n // norotatePane\n this.createPane('shadowPane', this._norotatePane);\n this.createPane('markerPane', this._norotatePane);\n this.createPane('tooltipPane', this._norotatePane);\n this.createPane('popupPane', this._norotatePane);\n } else {\n this.createPane('tilePane');\n this.createPane('overlayPane');\n this.createPane('shadowPane');\n this.createPane('markerPane');\n this.createPane('tooltipPane');\n this.createPane('popupPane');\n }\n\n if (!this.options.markerZoomAnimation) {\n L.DomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\n L.DomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\n }\n },\n\n /**\n * Pans the map the minimum amount to make the `latlng` visible. Use\n * padding options to fit the display to more restricted bounds.\n * If `latlng` is already within the (optionally padded) display bounds,\n * the map will not be panned.\n * \n * @see https://github.com/Raruto/leaflet-rotate/issues/18\n * \n * @param {L.LatLng} latlng coordinates\n * @param {Object} [options={}] padding options\n * \n * @returns {L.Map} current map instance\n */\n panInside(latlng, options) {\n if (!this._rotate || Math.abs(this._bearing).toFixed(1) < 0.1) {\n return mapProto.panInside.apply(this, arguments);\n }\n\n options = options || {};\n\n const paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),\n paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]),\n /** @TODO use mapProto.panInside */\n // pixelPoint = this.project(latlng),\n // pixelBounds = this.getPixelBounds(),\n // pixelCenter = this.project(this.getCenter()),\n rect = this._container.getBoundingClientRect(),\n pixelPoint = this.latLngToContainerPoint(latlng),\n pixelBounds = L.bounds([ L.point(rect), L.point(rect).add(this.getSize()) ]),\n pixelCenter = pixelBounds.getCenter(),\n //\n paddedBounds = L.bounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),\n paddedSize = paddedBounds.getSize();\n \n if (!paddedBounds.contains(pixelPoint)) {\n this._enforcingBounds = true;\n const centerOffset = pixelPoint.subtract(paddedBounds.getCenter());\n const offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);\n pixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;\n pixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;\n /** @TODO use mapProto.panInside */\n // this.panTo(this.unproject(pixelCenter), options);\n this.panTo(this.containerPointToLatLng(pixelCenter), options);\n //\n this._enforcingBounds = false;\n }\n return this;\n },\n\n /**\n * Pans the map to the closest view that would lie inside the given bounds\n * (if it's not already), controlling the animation using the options specific,\n * if any.\n * \n * @TODO check if map bounds calculated by `L.Map::panInsideBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n *\n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @param {L.LatLngBounds} bounds coordinates\n * @param {Object} [options] pan options\n * @returns {L.Map} current map instance\n */\n // panInsideBounds: function (bounds, options) {\n // this._enforcingBounds = true;\n // var center = this.getCenter(),\n // newCenter = this._limitCenter(center, this._zoom, L.latLngBounds(bounds));\n //\n // if (!center.equals(newCenter)) {\n // this.panTo(newCenter, options);\n // }\n //\n // this._enforcingBounds = false;\n // return this;\n // },\n\n // adjust center for view to get inside bounds\n // _limitCenter(center, zoom, bounds) {\n //\n // if (!bounds) { return center; }\n //\n // const centerPoint = this.project(center, zoom),\n // viewHalf = this.getSize().divideBy(2),\n // viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\n // offset = this._getBoundsOffset(viewBounds, bounds, zoom);\n //\n // // If offset is less than a pixel, ignore.\n // // This prevents unstable projections from getting into\n // // an infinite loop of tiny offsets.\n // if (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {\n // return center;\n // }\n //\n // return this.unproject(centerPoint.add(offset), zoom);\n // },\n\n // @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\n // Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\n // but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\n // flyToBounds(bounds, options) {\n // const target = this._getBoundsCenterZoom(bounds, options);\n // return this.flyTo(target.center, target.zoom, options);\n // },\n\n // _getBoundsCenterZoom(bounds, options) {\n //\n // options = options || {};\n // bounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\n //\n // const paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),\n // paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]);\n //\n // let zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\n //\n // zoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\n //\n // if (zoom === Infinity) {\n // return { center: bounds.getCenter(), zoom };\n // }\n //\n // return { center, zoom };\n //\n // },\n\n /**\n * Returns the maximum zoom level on which the given bounds fit to the map\n * view in its entirety. If `inside` (optional) is set to `true`, the method\n * instead returns the minimum zoom level on which the map view fits into\n * the given bounds in its entirety.\n * \n * @param {L.LatLngBounds} bounds\n * @param {Boolean} [inside=false]\n * @param {L.Point} [padding=[0,0]]\n * \n * @returns {Number} zoom level\n */\n getBoundsZoom(bounds, inside, padding) {\n if (!this._rotate || Math.abs(this._bearing).toFixed(1) < 0.1) {\n return mapProto.getBoundsZoom.apply(this, arguments);\n }\n\n bounds = L.latLngBounds(bounds);\n padding = L.point(padding || [0, 0]);\n\n let zoom = this.getZoom() || 0;\n const min = this.getMinZoom(),\n max = this.getMaxZoom(),\n /** @TODO use mapProto.getBoundsZoom */\n // nw = bounds.getNorthWest(),\n // se = bounds.getSouthEast(),\n // size = this.getSize().subtract(padding),\n // boundsSize = L.bounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\n size = this.getSize().subtract(padding),\n boundsSize = this.mapBoundsToContainerBounds(bounds).getSize(),\n snap = this.options.zoomSnap,\n scalex = size.x / boundsSize.x,\n scaley = size.y / boundsSize.y,\n scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\n\n zoom = this.getScaleZoom(scale, zoom);\n\n if (snap) {\n zoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\n zoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\n }\n\n return Math.max(min, Math.min(max, zoom));\n },\n\n /**\n * Layer point of the current center\n * \n * @returns {L.Point} layer center\n */\n // _getCenterLayerPoint: function () {\n // return this.containerPointToLayerPoint(this.getSize()._divideBy(2));\n // },\n\n /**\n * Offset of the specified place to the current center in pixels\n * \n * @param {L.LatLng} latlng map coordinates\n */\n _getCenterOffset: function(latlng) {\n var centerOffset = mapProto._getCenterOffset.apply(this, arguments);\n if (this._rotate) {\n centerOffset = centerOffset.rotate(this._bearing);\n }\n return centerOffset;\n },\n\n /**\n * @since leaflet-rotate (v0.1)\n */\n _getRotatePanePos: function() {\n return this._rotatePanePos || new L.Point(0, 0);\n // return L.DomUtil.getPosition(this._rotatePane) || new L.Point(0, 0);\n },\n\n // _latLngToNewLayerPoint(latlng, zoom, center) {\n // const topLeft = this._getNewPixelOrigin(center, zoom);\n // return this.project(latlng, zoom)._subtract(topLeft);\n //},\n\n _getNewPixelOrigin: function(center, zoom) {\n if (!this._rotate) {\n return mapProto._getNewPixelOrigin.apply(this, arguments);\n }\n var viewHalf = this.getSize()._divideBy(2);\n return this.project(center, zoom)\n .rotate(this._bearing)\n ._subtract(viewHalf)\n ._add(this._getMapPanePos())\n ._add(this._getRotatePanePos())\n .rotate(-this._bearing)\n ._round();\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @see src\\layer\\tile\\GridLayer::_getTiledPixelBounds()\n */\n _getNewPixelBounds: function(center, zoom) {\n center = center || this.getCenter();\n zoom = zoom || this.getZoom();\n if (!this._rotate && mapProto._getNewPixelBounds) {\n return mapProto._getNewPixelBounds.apply(this, arguments);\n }\n var mapZoom = this._animatingZoom ? Math.max(this._animateToZoom, this.getZoom()) : this.getZoom(),\n scale = this.getZoomScale(mapZoom, zoom),\n pixelCenter = this.project(center, zoom).floor(),\n size = this.getSize(),\n halfSize = new L.Bounds([\n this.containerPointToLayerPoint([0, 0]).floor(),\n this.containerPointToLayerPoint([size.x, 0]).floor(),\n this.containerPointToLayerPoint([0, size.y]).floor(),\n this.containerPointToLayerPoint([size.x, size.y]).floor()\n ]).getSize().divideBy(scale * 2);\n\n return new L.Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @return {L.Point} map pivot point (center)\n */\n _getPixelCenter: function() {\n if (!this._rotate && mapProto._getPixelCenter) {\n return mapProto._getPixelCenter.apply(this, arguments);\n }\n return this.getSize()._divideBy(2)._subtract(this._getMapPanePos());\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @see src\\layer\\vector\\Renderer::_update()\n */\n _getPaddedPixelBounds: function(padding) {\n if (!this._rotate && mapProto._getPaddedPixelBounds) {\n return mapProto._getPaddedPixelBounds.apply(this, arguments);\n }\n var p = padding,\n size = this.getSize(),\n padMin = size.multiplyBy(-p),\n padMax = size.multiplyBy(1 + p);\n //min = this.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n return new L.Bounds([\n this.containerPointToLayerPoint([padMin.x, padMin.y]).floor(),\n this.containerPointToLayerPoint([padMin.x, padMax.y]).floor(),\n this.containerPointToLayerPoint([padMax.x, padMin.y]).floor(),\n this.containerPointToLayerPoint([padMax.x, padMax.y]).floor()\n ]);\n },\n\n _handleGeolocationResponse: function(pos) {\n if (!this._container._leaflet_id) { return; }\n\n var lat = pos.coords.latitude,\n lng = pos.coords.longitude,\n /** @TODO use mapProto._handleGeolocationResponse */\n hdg = pos.coords.heading,\n latlng = new L.LatLng(lat, lng),\n bounds = latlng.toBounds(pos.coords.accuracy),\n options = this._locateOptions;\n\n if (options.setView) {\n var zoom = this.getBoundsZoom(bounds);\n this.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\n }\n\n var data = {\n latlng: latlng,\n bounds: bounds,\n timestamp: pos.timestamp,\n /** @TODO use mapProto._handleGeolocationResponse */\n heading: hdg\n };\n\n for (var i in pos.coords) {\n if (typeof pos.coords[i] === 'number') {\n data[i] = pos.coords[i];\n }\n }\n\n // @event locationfound: LocationEvent\n // Fired when geolocation (using the [`locate`](#map-locate) method)\n // went successfully.\n this.fire('locationfound', data);\n },\n\n /**\n * @see https://github.com/ronikar/Leaflet/blob/5c480ef959b947c3beed7065425a5a36c486262b/src/geo/LatLngBounds.js#L253-L264\n * \n * @param {L.Bounds} points \n * @returns {L.Bounds}\n */\n // toCircumscribedBounds(points) {\n // var minX = points.reduce(function (pv, v) { return Math.min(pv, v.x); }, points[0].x),\n // maxX = points.reduce(function (pv, v) { return Math.max(pv, v.x); }, points[0].x),\n // minY = points.reduce(function (pv, v) { return Math.min(pv, v.y); }, points[0].y),\n // maxY = points.reduce(function (pv, v) { return Math.max(pv, v.y); }, points[0].y);\n //\n // return L.bounds(L.point(minX, minY), L.point(maxX, maxY));\n // },\n\n});\n","/**\n * Rotates the map according to a smartphone's compass.\n * \n * @typedef L.Map.CompassBearing\n */\n\nL.Map.CompassBearing = L.Handler.extend({\n\n initialize: function(map) {\n this._map = map;\n /** @see https://caniuse.com/?search=DeviceOrientation */\n if ('ondeviceorientationabsolute' in window) {\n this.__deviceOrientationEvent = 'deviceorientationabsolute';\n } else if('ondeviceorientation' in window) {\n this.__deviceOrientationEvent = 'deviceorientation';\n }\n this._throttled = L.Util.throttle(this._onDeviceOrientation, 100, this);\n },\n\n addHooks: function() {\n if (this._map._rotate && this.__deviceOrientationEvent) {\n L.DomEvent.on(window, this.__deviceOrientationEvent, this._throttled, this);\n } else {\n // L.Map.CompassBearing handler will be automatically\n // disabled if device orientation is not supported.\n this.disable();\n }\n },\n\n removeHooks: function() {\n if (this._map._rotate && this.__deviceOrientationEvent) {\n L.DomEvent.off(window, this.__deviceOrientationEvent, this._throttled, this);\n }\n },\n\n /**\n * `DeviceOrientationEvent.absolute` - Indicates whether the device is providing absolute\n * orientation values (relatives to Magnetic North) or\n * using some arbitrary frame determined by the device.\n * \n * `DeviceOrientationEvent.alpha` - Returns the rotation of the device around the Z axis;\n * that is, the number of degrees by which the device is\n * being twisted around the center of the screen.\n * \n * `window.orientation` - Returns the screen orientation in degrees (in 90-degree increments)\n * of the viewport relative to the device's natural orientation.\n * Its only possible values are -90, 0, 90, and 180. Positive\n * values are counterclockwise; negative values are clockwise.\n * \n * @see https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/absolute\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/alpha\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/orientation\n */\n _onDeviceOrientation: function(e) {\n var angle = e.webkitCompassHeading || e.alpha;\n var deviceOrientation = 0;\n\n // Safari iOS\n if (!e.absolute && e.webkitCompassHeading) {\n angle = 360 - angle;\n }\n\n // Older browsers\n if (!e.absolute && 'undefined' !== typeof window.orientation) {\n deviceOrientation = window.orientation;\n }\n\n this._map.setBearing(angle - deviceOrientation);\n },\n\n});\n\n/**\n * Add Compass bearing handler to L.Map (disabled unless `window.DeviceOrientationEvent` is set).\n * \n * @property {L.Map.CompassBearing} compassBearing\n */\nL.Map.addInitHook('addHandler', 'compassBearing', L.Map.CompassBearing);\n","/**\n * Triggers `invalidateResize` when the map's DOM container mutates.\n * \n * @typedef L.Map.ContainerMutation\n */\n\n/**\n * @TODO check again this file after leaflet v1.9.3 (eg. L.Browser.mutation).\n * Mutation Observer support will likely be added by default in next releases.\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map uses mutation observers to\n * detect changes in its container and trigger\n * `invalidateSize`. Disabled by default due to\n * support not being available in all web browsers.\n *\n * @type {Boolean}\n * \n * @see https://developer.mozilla.org/docs/Web/API/MutationObserver\n */\n trackContainerMutation: false\n\n});\n\nL.Map.ContainerMutation = L.Handler.extend({\n\n addHooks: function() {\n // if (!L.Browser.mutation) { return; }\n if (!this._observer) {\n this._observer = new MutationObserver(L.Util.bind(this._map.invalidateSize, this._map));\n }\n this._observer.observe(this._map.getContainer(), {\n childList: false,\n attributes: true,\n characterData: false,\n subtree: false,\n attributeFilter: ['style']\n });\n },\n\n removeHooks: function() {\n // if (!L.Browser.mutation) { return; }\n this._observer.disconnect();\n },\n\n});\n\n/**\n * Add Container mutation handler to L.Map (disabled unless `trackContainerMutation` is set).\n * \n * @property {L.Map.ContainerMutation} trackContainerMutation\n */\nL.Map.addInitHook('addHandler', 'trackContainerMutation', L.Map.ContainerMutation);\n","/**\n * TouchGestures is both TouchZoom plus TouchRotate\n * \n * @see https://github.com/fnicollet/Leaflet/commit/a77af51a6b10f308d1b9a16552091d1d0aee8834\n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/handler/Map.TouchZoom.js\n * \n * @typedef L.Map.TouchGestures\n */\n\nL.Map.mergeOptions({\n\n /**\n * Set it to false if you don't want the map to\n * zoom beyond min/max zoom and then bounce back\n * when pinch-zooming.\n * \n * @type {Boolean}\n */\n bounceAtZoomLimits: true,\n\n});\n\nL.Map.TouchGestures = L.Handler.extend({\n\n initialize: function(map) {\n this._map = map;\n this.rotate = !!this._map.options.touchRotate;\n this.zoom = !!this._map.options.touchZoom;\n },\n\n addHooks: function() {\n L.DomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n },\n\n removeHooks: function() {\n L.DomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n },\n\n _onTouchStart: function(e) {\n var map = this._map;\n\n if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming || this._rotating) { return; }\n\n var p1 = map.mouseEventToContainerPoint(e.touches[0]),\n p2 = map.mouseEventToContainerPoint(e.touches[1]),\n vector = p1.subtract(p2);\n\n this._centerPoint = map.getSize()._divideBy(2);\n this._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\n if (this.zoom) {\n if (map.options.touchZoom !== 'center') {\n this._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n }\n this._startDist = p1.distanceTo(p2);\n this._startZoom = map.getZoom();\n this._zooming = true;\n } else {\n this._zooming = false;\n }\n\n if (this.rotate) {\n this._startTheta = Math.atan(vector.x / vector.y);\n this._startBearing = map.getBearing();\n if (vector.y < 0) { this._startBearing += 180; }\n this._rotating = true;\n } else {\n this._rotating = false;\n }\n\n this._moved = false;\n\n map._stop();\n\n L.DomEvent\n .on(document, 'touchmove', this._onTouchMove, this)\n .on(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n L.DomEvent.preventDefault(e);\n },\n\n _onTouchMove: function(e) {\n if (!e.touches || e.touches.length !== 2 || !(this._zooming || this._rotating)) { return; }\n\n var map = this._map,\n p1 = map.mouseEventToContainerPoint(e.touches[0]),\n p2 = map.mouseEventToContainerPoint(e.touches[1]),\n vector = p1.subtract(p2),\n scale = p1.distanceTo(p2) / this._startDist,\n delta;\n\n if (this._rotating) {\n var theta = Math.atan(vector.x / vector.y);\n var bearingDelta = (theta - this._startTheta) * L.DomUtil.RAD_TO_DEG;\n if (vector.y < 0) { bearingDelta += 180; }\n if (bearingDelta) {\n /**\n * @TODO the pivot should be the last touch point,\n * but zoomAnimation manages to overwrite the rotate\n * pane position. Maybe related to #3529.\n * \n * @see https://github.com/Leaflet/Leaflet/pull/3529\n * @see https://github.com/fnicollet/Leaflet/commit/a77af51a6b10f308d1b9a16552091d1d0aee8834\n */\n map.setBearing(this._startBearing - bearingDelta);\n }\n }\n\n if (this._zooming) {\n this._zoom = map.getScaleZoom(scale, this._startZoom);\n\n if (!map.options.bounceAtZoomLimits && (\n (this._zoom < map.getMinZoom() && scale < 1) ||\n (this._zoom > map.getMaxZoom() && scale > 1))) {\n this._zoom = map._limitZoom(this._zoom);\n }\n\n if (map.options.touchZoom === 'center') {\n this._center = this._startLatLng;\n if (scale === 1) { return; }\n } else {\n // Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n if (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\n var alpha = -map.getBearing() * L.DomUtil.DEG_TO_RAD;\n\n this._center = map.unproject(map.project(this._pinchStartLatLng).subtract(delta.rotate(alpha)));\n }\n\n }\n\n if (!this._moved) {\n map._moveStart(true, false);\n this._moved = true;\n }\n\n L.Util.cancelAnimFrame(this._animRequest);\n\n var moveFn = map._move.bind(map, this._center, this._zoom, { pinch: true, round: false }, undefined);\n this._animRequest = L.Util.requestAnimFrame(moveFn, this, true);\n\n L.DomEvent.preventDefault(e);\n },\n\n _onTouchEnd: function() {\n if (!this._moved || !(this._zooming || this._rotating)) {\n this._zooming = false;\n return;\n }\n\n this._zooming = false;\n this._rotating = false;\n L.Util.cancelAnimFrame(this._animRequest);\n\n L.DomEvent\n .off(document, 'touchmove', this._onTouchMove, this)\n .off(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n if (this.zoom) {\n // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n if (this._map.options.zoomAnimation) {\n this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n } else {\n this._map._resetView(this._center, this._map._limitZoom(this._zoom));\n }\n }\n },\n\n});\n\n/**\n * Add Touch Gestures handler (enabled unless `touchGestures` is unset).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchGestures', L.Map.TouchGestures);\n","/**\n * Rotates the map on two-finger (touch devices).\n * \n * @typedef L.Map.TouchRotate\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be rotated with a two-finger rotation gesture\n * \n * @type {Boolean}\n */\n touchRotate: false,\n\n});\n\nL.Map.TouchRotate = L.Handler.extend({\n\n addHooks: function() {\n this._map.touchGestures.enable();\n this._map.touchGestures.rotate = true;\n },\n\n removeHooks: function() {\n this._map.touchGestures.rotate = false;\n },\n\n});\n\n/**\n * Add Touch Rotate handler (disabled unless `touchGestures` is set).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchRotate', L.Map.TouchRotate);\n","\n/**\n * Rotates the map on shift key + mousewheel scrolling (desktop).\n * \n * @typedef L.Map.ShiftKeyRotate\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be rotated with shift + wheel scroll\n * @type {Boolean}\n */\n shiftKeyRotate: true,\n\n});\n\nL.Map.ShiftKeyRotate = L.Handler.extend({\n\n addHooks: function() {\n L.DomEvent.on(this._map._container, \"wheel\", this._handleShiftScroll, this);\n // this._map.shiftKeyRotate.enable();\n this._map.shiftKeyRotate.rotate = true;\n },\n\n removeHooks: function() {\n L.DomEvent.off(this._map._container, \"wheel\", this._handleShiftScroll, this);\n this._map.shiftKeyRotate.rotate = false;\n },\n\n _handleShiftScroll: function(e) {\n if (e.shiftKey) {\n e.preventDefault();\n this._map.scrollWheelZoom.disable();\n this._map.setBearing((this._map._bearing * L.DomUtil.RAD_TO_DEG) + Math.sign(e.deltaY) * 5);\n } else {\n this._map.scrollWheelZoom.enable();\n }\n },\n\n});\n\n/**\n * Add ShiftKey handler to L.Map (enabled unless `shiftKeyRotate` is unset).\n * \n * @property {L.Map.ShiftKeyRotate} shiftKeyRotate\n */\nL.Map.addInitHook('addHandler', 'shiftKeyRotate', L.Map.ShiftKeyRotate);\n\n// decrease `scrollWheelZoom` handler priority over `shiftKeyRotate` handler\nL.Map.addInitHook(function() {\n if (this.scrollWheelZoom.enabled() && this.shiftKeyRotate.enabled()) {\n this.scrollWheelZoom.disable();\n this.scrollWheelZoom.enable();\n }\n});\n","/**\n * Adds pinch zoom rotation on mobile browsers\n * \n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/handler/Map.TouchZoom.js\n * \n * @external L.Map.TouchZoom\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be zoomed by touch-dragging\n * with two fingers. If passed `'center'`, it will\n * zoom to the center of the view regardless of\n * where the touch events (fingers) were. Enabled\n * for touch-capable web browsers.\n * \n * @type {(Boolean|String)}\n */\n touchZoom: L.Browser.touch,\n\n /**\n * @TODO check if this is a duplicate of `L.Map.TouchGestures::bounceAtZoomLimits`\n * \n * Set it to false if you don't want the map to\n * zoom beyond min/max zoom and then bounce back\n * when pinch-zooming.\n * \n * @type {Boolean}\n */\n bounceAtZoomLimits: false,\n\n});\n\nL.Map.TouchZoom = L.Handler.extend({\n\n addHooks: function() {\n L.DomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n this._map.touchGestures.enable();\n this._map.touchGestures.zoom = true;\n },\n\n removeHooks: function() {\n L.DomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n this._map.touchGestures.zoom = false;\n },\n\n});\n\n/**\n * Add Touch Zoom handler (disabled unless `L.Browser.touch` is set).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchZoom', L.Map.TouchZoom);\n","/**\n * A tri-state control for map rotation, states are:\n * \n * - Locked (default)\n * - Unlocked (user can pinch-rotate)\n * - Follow (rotation follows device orientation, if available)\n * \n * @typedef L.Control.Rotate\n */\n\nL.Control.Rotate = L.Control.extend({\n\n options: {\n position: 'topleft',\n closeOnZeroBearing: true\n },\n\n onAdd: function(map) {\n var container = this._container = L.DomUtil.create('div', 'leaflet-control-rotate leaflet-bar');\n\n // this.button = L.Control.Zoom.prototype._createButton.call(this, 'R', 'leaflet-control-rotate', 'leaflet-control-rotate', container, this._toggleLock);\n\n var arrow = this._arrow = L.DomUtil.create('span', 'leaflet-control-rotate-arrow');\n\n arrow.style.backgroundImage = `url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\")`;\n arrow.style.cursor = 'grab';\n arrow.style.display = 'block';\n arrow.style.width = '100%';\n arrow.style.height = '100%';\n arrow.style.backgroundRepeat = 'no-repeat';\n arrow.style.backgroundPosition = '50%';\n\n // Copy-pasted from L.Control.Zoom\n var link = this._link = L.DomUtil.create('a', 'leaflet-control-rotate-toggle', container);\n link.appendChild(arrow);\n link.href = '#';\n link.title = 'Rotate map';\n\n L.DomEvent\n .on(link, 'dblclick', L.DomEvent.stopPropagation)\n .on(link, 'mousedown', this._handleMouseDown, this)\n .on(link, 'click', L.DomEvent.stop)\n .on(link, 'click', this._cycleState, this)\n .on(link, 'click', this._refocusOnMap, this);\n\n if (!L.Browser.any3d) {\n L.DomUtil.addClass(link, 'leaflet-disabled');\n }\n\n this._restyle();\n\n map.on('rotate', this._restyle, this);\n\n // State flag\n this._follow = false;\n this._canFollow = false;\n\n if (this.options.closeOnZeroBearing && map.getBearing() === 0) {\n container.style.display = 'none';\n }\n\n return container;\n },\n \n onRemove: function(map) {\n map.off('rotate', this._restyle, this);\n },\n\n _handleMouseDown: function(e) {\n L.DomEvent.stop(e);\n this.dragging = true;\n this.dragstartX = e.pageX;\n this.dragstartY = e.pageY;\n L.DomEvent\n .on(document, 'mousemove', this._handleMouseDrag, this)\n .on(document, 'mouseup', this._handleMouseUp, this);\n },\n\n _handleMouseUp: function(e) {\n L.DomEvent.stop(e);\n this.dragging = false;\n\n L.DomEvent\n .off(document, 'mousemove', this._handleMouseDrag, this)\n .off(document, 'mouseup', this._handleMouseUp, this);\n },\n\n _handleMouseDrag: function(e) {\n if (!this.dragging) { return; }\n var deltaX = e.clientX - this.dragstartX;\n this._map.setBearing(deltaX);\n },\n\n _cycleState: function(ev) {\n if (!this._map) {\n return;\n }\n\n var map = this._map;\n\n // Touch mode\n if (!map.touchRotate.enabled() && !map.compassBearing.enabled()) {\n map.touchRotate.enable();\n }\n \n // Compass mode\n else if (!map.compassBearing.enabled()) {\n map.touchRotate.disable();\n (\n DeviceOrientationEvent && DeviceOrientationEvent.requestPermission\n ? DeviceOrientationEvent.requestPermission() // iOS compass\n : Promise.resolve('granted') // others\n ).then(state => \"granted\" === state && map.compassBearing.enable())\n }\n\n // Locked mode\n else {\n map.compassBearing.disable();\n map.setBearing(0);\n if (this.options.closeOnZeroBearing) {\n map.touchRotate.enable();\n }\n }\n this._restyle();\n },\n\n _restyle: function() {\n if (!this._map.options.rotate) {\n L.DomUtil.addClass(this._link, 'leaflet-disabled');\n } else {\n var map = this._map;\n var bearing = map.getBearing();\n\n this._arrow.style.transform = 'rotate(' + bearing + 'deg)';\n\n if (bearing && this.options.closeOnZeroBearing) {\n this._container.style.display = 'block';\n }\n\n // Compass mode\n if (map.compassBearing.enabled()) {\n this._link.style.backgroundColor = 'orange';\n }\n \n // Touch mode\n else if (map.touchRotate.enabled()) {\n this._link.style.backgroundColor = null;\n }\n\n // Locked mode\n else {\n this._link.style.backgroundColor = 'grey';\n if (0 === bearing && this.options.closeOnZeroBearing) {\n this._container.style.display = 'none';\n }\n }\n }\n },\n\n});\n\nL.control.rotate = function(options) {\n return new L.Control.Rotate(options);\n};\n\nL.Map.mergeOptions({\n rotateControl: true,\n});\n\nL.Map.addInitHook(function() {\n if (this.options.rotateControl) {\n var options = typeof this.options.rotateControl === 'object' ? this.options.rotateControl : {};\n this.rotateControl = L.control.rotate(options);\n this.addControl(this.rotateControl);\n }\n});\n"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"leaflet-rotate-src.js","sources":["../src/dom/DomUtil.js","../src/dom/Draggable.js","../src/geometry/Point.js","../src/layer/DivOverlay.js","../src/layer/Popup.js","../src/layer/Tooltip.js","../src/layer/marker/Icon.js","../src/layer/marker/Marker.js","../src/layer/tile/GridLayer.js","../src/layer/vector/Renderer.js","../src/map/Map.js","../src/map/handler/CompassBearing.js","../src/map/handler/ContainerMutation.js","../src/map/handler/TouchGestures.js","../src/map/handler/TouchRotate.js","../src/map/handler/ShiftKeyRotate.js","../src/map/handler/TouchZoom.js","../src/control/Rotate.js"],"sourcesContent":["/**\n * @external L.DomUtil\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/DomUtil.js\n */\n\nconst domUtilProto = L.extend({}, L.DomUtil);\n\nL.extend(L.DomUtil, {\n\n /**\n * Resets the 3D CSS transform of `el` so it is\n * translated by `offset` pixels and optionally\n * scaled by `scale`. Does not have an effect if\n * the browser doesn't support 3D CSS transforms.\n * \n * @param {HTMLElement} el \n * @param {L.Point} offset \n * @param {Number} scale\n * @param {Number} bearing \n * @param {L.Point} pivot \n */\n setTransform: function(el, offset, scale, bearing, pivot) {\n var pos = offset || new L.Point(0, 0);\n\n if (!bearing) {\n offset = pos._round();\n return domUtilProto.setTransform.apply(this, arguments);\n }\n\n pos = pos.rotateFrom(bearing, pivot);\n\n el.style[L.DomUtil.TRANSFORM] =\n 'translate3d(' + pos.x + 'px,' + pos.y + 'px' + ',0)' +\n (scale ? ' scale(' + scale + ')' : '') +\n ' rotate(' + bearing + 'rad)';\n },\n\n /**\n * Sets the position of `el` to coordinates specified by\n * `position`, using CSS translate or top/left positioning\n * depending on the browser (used by Leaflet internally\n * to position its layers).\n * \n * @param {HTMLElement} el \n * @param {L.Point} point \n * @param {Number} bearing\n * @param {L.Point} pivot \n * @param {Number} scale \n */\n setPosition: function(el, point, bearing, pivot, scale) {\n if (!bearing) {\n return domUtilProto.setPosition.apply(this, arguments);\n }\n\n /*eslint-disable */\n el._leaflet_pos = point;\n /*eslint-enable */\n\n if (L.Browser.any3d) {\n L.DomUtil.setTransform(el, point, scale, bearing, pivot);\n } else {\n el.style.left = point.x + 'px';\n el.style.top = point.y + 'px';\n }\n },\n\n /**\n * @constant radians = degrees × π/180°\n */\n DEG_TO_RAD: Math.PI / 180,\n\n /**\n * @constant degrees = radians × 180°/π\n */\n RAD_TO_DEG: 180 / Math.PI,\n\n});\n","/**\n * @external L.Draggable\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/Draggable.js\n */\n\n/**\n * A class for making DOM elements draggable (including touch support).\n * Used internally for map and marker dragging. Only works for elements\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\n */\n\nL.Draggable.include({\n\n /** @TODO */\n // updateMapBearing: function(mapBearing) {\n // this._mapBearing = mapBearing;\n // },\n\n});","/**\n * @external L.Point\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/geometry/Point.js\n */\n\nL.extend(L.Point.prototype, {\n\n /**\n * Rotate around (0,0) by applying the 2D rotation matrix:\n * \n * ⎡ x' ⎤ = ⎡ cos θ -sin θ ⎤ ⎡ x ⎤\n * ⎣ y' ⎦ ⎣ sin θ cos θ ⎦ ⎣ y ⎦\n * \n * @param theta must be given in radians.\n */\n rotate: function(theta) {\n return this.rotateFrom(theta, new L.Point(0,0))\n },\n\n /**\n * Rotate around (pivot.x, pivot.y) by:\n * \n * 1. subtract (pivot.x, pivot.y)\n * 2. rotate around (0, 0)\n * 3. add (pivot.x, pivot.y) back\n * \n * same as `this.subtract(pivot).rotate(theta).add(pivot)`\n * \n * @param {Number} theta \n * @param {L.Point} pivot \n * \n * @returns {L.Point}\n */\n rotateFrom: function(theta, pivot) {\n if (!theta) { return this; }\n var sinTheta = Math.sin(theta);\n var cosTheta = Math.cos(theta);\n var cx = pivot.x,\n cy = pivot.y;\n var x = this.x - cx,\n y = this.y - cy;\n\n return new L.Point(\n x * cosTheta - y * sinTheta + cx,\n x * sinTheta + y * cosTheta + cy\n );\n },\n\n});\n","/**\n * @external L.DivOverlay\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/DivOverlay.js\n */\n\nconst divOverlayProto = L.extend({}, L.DivOverlay.prototype);\n\nL.DivOverlay.include({\n\n /**\n * Update L.Popup and L.Tooltip anchor positions after\n * the map is moved by calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(divOverlayProto.getEvents.apply(this, arguments), { rotate: this._updatePosition });\n },\n\n /**\n * 0. update element anchor point (divOverlayProto v1.9.3)\n * 1. rotate around anchor point (subtract anchor -> rotate point -> add anchor)\n */\n _updatePosition: function() {\n if (!this._map) { return; }\n divOverlayProto._updatePosition.apply(this, arguments);\n if (this._map && this._map._rotate && this._zoomAnimated) {\n var anchor = this._getAnchor();\n var pos = L.DomUtil.getPosition(this._container).subtract(anchor);\n L.DomUtil.setPosition(this._container, this._map.rotatedPointToMapPanePoint(pos).add(anchor));\n }\n\n },\n\n});\n","/**\n * @external L.Popup\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/Popup.js\n */\n\nconst popupProto = L.extend({}, L.Popup.prototype);\n\nL.Popup.include({\n\n /**\n * 0. update element anchor point (popupProto v1.9.3)\n * 1. rotate around anchor point (subtract anchor -> rotate point -> add anchor)\n */\n _animateZoom: function(e) {\n popupProto._animateZoom.apply(this, arguments);\n if (this._map && this._map._rotate) {\n var anchor = this._getAnchor();\n var pos = L.DomUtil.getPosition(this._container).subtract(anchor);\n L.DomUtil.setPosition(this._container, this._map.rotatedPointToMapPanePoint(pos).add(anchor));\n }\n },\n\n /**\n * Fix for L.popup({ keepInView = true })\n * \n * @see https://github.com/fnicollet/Leaflet/pull/21\n */\n _adjustPan: function() {\n if (!this.options.autoPan || (this._map._panAnim && this._map._panAnim._inProgress)) { return; }\n\n // We can endlessly recurse if keepInView is set and the view resets.\n // Let's guard against that by exiting early if we're responding to our own autopan.\n if (this._autopanning) {\n this._autopanning = false;\n return;\n }\n\n var map = this._map,\n marginBottom = parseInt(L.DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0,\n containerHeight = this._container.offsetHeight + marginBottom,\n containerWidth = this._containerWidth,\n layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom);\n\n layerPos._add(L.DomUtil.getPosition(this._container));\n\n /** @TODO use popupProto._adjustPan */\n // var containerPos = map.layerPointToContainerPoint(layerPos);\n var containerPos = layerPos._add(this._map._getMapPanePos()),\n padding = L.point(this.options.autoPanPadding),\n paddingTL = L.point(this.options.autoPanPaddingTopLeft || padding),\n paddingBR = L.point(this.options.autoPanPaddingBottomRight || padding),\n size = map.getSize(),\n dx = 0,\n dy = 0;\n\n if (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\n dx = containerPos.x + containerWidth - size.x + paddingBR.x;\n }\n if (containerPos.x - dx - paddingTL.x < 0) { // left\n dx = containerPos.x - paddingTL.x;\n }\n if (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\n dy = containerPos.y + containerHeight - size.y + paddingBR.y;\n }\n if (containerPos.y - dy - paddingTL.y < 0) { // top\n dy = containerPos.y - paddingTL.y;\n }\n\n // @namespace Map\n // @section Popup events\n // @event autopanstart: Event\n // Fired when the map starts autopanning when opening a popup.\n if (dx || dy) {\n // Track that we're autopanning, as this function will be re-ran on moveend\n if (this.options.keepInView) {\n this._autopanning = true;\n }\n map\n .fire('autopanstart')\n .panBy([dx, dy]);\n }\n },\n\n});\n","/**\n * @external L.Tooltip\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/Tooltip.js\n */\n\nconst tooltipProto = L.extend({}, L.Tooltip.prototype);\n\nL.Tooltip.include({\n\n _animateZoom: function(e) {\n if (!this._map._rotate) {\n return tooltipProto._animateZoom.apply(this, arguments);\n }\n var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\n pos = this._map.rotatedPointToMapPanePoint(pos);\n this._setPosition(pos);\n },\n\n _updatePosition: function() {\n if (!this._map._rotate) {\n return tooltipProto._updatePosition.apply(this, arguments);\n }\n var pos = this._map.latLngToLayerPoint(this._latlng);\n\n pos = this._map.rotatedPointToMapPanePoint(pos);\n this._setPosition(pos);\n },\n\n});\n","/**\n * @external L.Icon\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Icon.js\n */\n\nconst iconProto = L.extend({}, L.Icon.prototype);\n\nL.Icon.include({\n\n _setIconStyles: function(img, name) {\n var options = this.options;\n var sizeOption = options[name + 'Size'];\n\n if (typeof sizeOption === 'number') {\n sizeOption = [sizeOption, sizeOption];\n }\n\n var size = L.point(sizeOption),\n anchor = L.point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\n size && size.divideBy(2, true));\n\n img.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\n\n if (anchor) {\n img.style.marginLeft = (-anchor.x) + 'px';\n img.style.marginTop = (-anchor.y) + 'px';\n /** @TODO use iconProto._setIconStyles */\n img.style[L.DomUtil.TRANSFORM + \"Origin\"] = anchor.x + \"px \" + anchor.y + \"px 0px\";\n }\n\n if (size) {\n img.style.width = size.x + 'px';\n img.style.height = size.y + 'px';\n }\n },\n\n});\n","/**\n * @external L.Marker\n * @external L.Handler.MarkerDrag\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Marker.js\n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Marker.Drag.js\n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/Draggable.js\n */\n\nconst markerProto = L.extend({}, L.Marker.prototype);\n\nL.Marker.mergeOptions({\n\n /**\n * Rotation of this marker in rad\n * \n * @type {Number}\n */\n rotation: 0,\n\n /**\n * Rotate this marker when map rotates\n * \n * @type {Boolean}\n */\n rotateWithView: false,\n\n /**\n * Scale of the marker icon\n * \n * @type {Number}\n */\n scale: undefined,\n\n});\n\nvar markerDragProto; // retrived at runtime (see below: L.Marker::_initInteraction())\n\nvar MarkerDrag = {\n\n // _onDragStart: function() {\n // if (!this._marker._map._rotate) {\n // return markerDragProto._onDragStart.apply(this, arguments);\n // }\n // this._draggable.updateMapBearing(this._marker._map._bearing);\n // },\n\n _onDrag: function(e) {\n var marker = this._marker,\n /** @TODO use markerDragProto._onDrag */\n rotated_marker = marker.options.rotation || marker.options.rotateWithView,\n shadow = marker._shadow,\n iconPos = L.DomUtil.getPosition(marker._icon);\n\n /** @TODO use markerDragProto._onDrag */\n // update shadow position\n if (!rotated_marker && shadow) {\n L.DomUtil.setPosition(shadow, iconPos);\n }\n\n /** @TODO use markerDragProto._onDrag */\n if (marker._map._rotate) {\n // Reverse calculation from mapPane coordinates to rotatePane coordinates\n iconPos = marker._map.mapPanePointToRotatedPoint(iconPos);\n }\n var latlng = marker._map.layerPointToLatLng(iconPos);\n\n marker._latlng = latlng;\n e.latlng = latlng;\n e.oldLatLng = this._oldLatLng;\n\n /** @TODO use markerDragProto._onDrag */\n if (rotated_marker) marker.setLatLng(latlng); // use `setLatLng` to presisit rotation. low efficiency\n else marker.fire('move', e); // `setLatLng` will trig 'move' event. we imitate here.\n\n // @event drag: Event\n // Fired repeatedly while the user drags the marker.\n marker\n .fire('drag', e);\n },\n\n _onDragEnd: function(e) {\n if (this._marker._map._rotate) {\n this._marker.update();\n }\n markerDragProto._onDragEnd.apply(this, arguments);\n },\n\n};\n\nL.Marker.include({\n\n /**\n * Update L.Marker anchor position after the map\n * is moved by calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(markerProto.getEvents.apply(this, arguments), { rotate: this.update });\n },\n\n _initInteraction: function() {\n var ret = markerProto._initInteraction.apply(this, arguments);\n if (this.dragging && this.dragging.enabled() && this._map && this._map._rotate) {\n // L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable\n markerDragProto = markerDragProto || Object.getPrototypeOf(this.dragging);\n this.dragging.disable();\n Object.assign(this.dragging, {\n // _onDragStart: MarkerDrag._onDragStart.bind(this.dragging),\n _onDrag: MarkerDrag._onDrag.bind(this.dragging),\n _onDragEnd: MarkerDrag._onDragEnd.bind(this.dragging),\n });\n this.dragging.enable();\n }\n return ret;\n },\n\n _setPos: function(pos) {\n\n /** @TODO use markerProto._setPos */\n if (this._map._rotate) {\n pos = this._map.rotatedPointToMapPanePoint(pos);\n }\n\n /** @TODO use markerProto._setPos */\n var bearing = this.options.rotation || 0;\n if (this.options.rotateWithView) {\n bearing += this._map._bearing;\n }\n\n /** @TODO use markerProto._setPos */\n if (this._icon) {\n L.DomUtil.setPosition(this._icon, pos, bearing, pos, this.options.scale);\n }\n\n /** @TODO use markerProto._setPos */\n if (this._shadow) {\n L.DomUtil.setPosition(this._shadow, pos, bearing, pos, this.options.scale);\n }\n\n this._zIndex = pos.y + this.options.zIndexOffset;\n\n this._resetZIndex();\n },\n\n // _updateZIndex: function(offset) {\n // if (!this._map._rotate) {\n // return markerProto._updateZIndex.apply(this, arguments);\n // }\n // this._icon.style.zIndex = Math.round(this._zIndex + offset);\n // },\n\n setRotation: function(rotation) {\n this.options.rotation = rotation;\n this.update();\n },\n\n});\n","/**\n * @external L.GridLayer\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/tile/GridLayer.js\n */\n\nconst gridLayerProto = L.extend({}, L.GridLayer.prototype);\n\nL.GridLayer.include({\n\n /**\n * Redraw L.TileLayer bounds after the map is\n * moved by just calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n var events = gridLayerProto.getEvents.apply(this, arguments);\n if (this._map._rotate && !this.options.updateWhenIdle) {\n if (!this._onRotate) {\n this._onRotate = L.Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n }\n events.rotate = this._onRotate;\n }\n return events;\n },\n\n _getTiledPixelBounds: function(center) {\n if (!this._map._rotate) {\n return gridLayerProto._getTiledPixelBounds.apply(this, arguments);\n }\n\n return this._map._getNewPixelBounds(center, this._tileZoom);\n },\n\n});\n","/**\n * @external L.Renderer\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/vector/Renderer.js\n */\n\nconst rendererProto = L.extend({}, L.Renderer.prototype);\n\nL.Renderer.include({\n\n /**\n * Redraw L.Canvas and L.SVG renderer bounds after the\n * map is moved by just calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(rendererProto.getEvents.apply(this, arguments), { rotate: this._update });\n },\n\n /**\n * Fix for `map.flyTo()` when `false === map.options.zoomAnimation`\n * \n * @see https://github.com/Leaflet/Leaflet/pull/8794\n */\n onAdd: function() {\n rendererProto.onAdd.apply(this, arguments);\n if (L.version <= \"1.9.3\") {\n // always keep transform-origin as 0 0\n this._container.classList.add('leaflet-zoom-animated');\n }\n },\n\n /**\n * @FIXME layer drifts on `map.setZoom()` (eg. zoom during animation)\n * \n * the main cause seems to be related to `this._updateTransform(path._center, path._zoom))`\n * and `this._topLeft = this._map.layerPointToLatLng(this._bounds.min);`\n * \n * @example\n * map.setZoom(2);\n * path._renderer._update();\n * path._renderer._updateTransform(path._renderer._center, path._renderer._zoom);\n * \n * @see https://github.com/Leaflet/Leaflet/pull/8794\n * @see https://github.com/Leaflet/Leaflet/pull/8103\n * @see https://github.com/Leaflet/Leaflet/issues/7466\n * \n * @TODO rechek this changes from leaflet@v1.9.3\n * \n * @see https://github.com/Leaflet/Leaflet/compare/v1.7.0...v1.9.3\n */\n _updateTransform: function(center, zoom) {\n if (!this._map._rotate) {\n return rendererProto._updateTransform.apply(this, arguments);\n }\n /**\n * @FIXME see path._renderer._reset();\n */\n var scale = this._map.getZoomScale(zoom, this._zoom),\n offset = this._map._latLngToNewLayerPoint(this._topLeft, zoom, center);\n\n L.DomUtil.setTransform(this._container, offset, scale);\n \n },\n\n // getEvents() {\n // const events = {\n // viewreset: this._reset,\n // zoom: this._onZoom,\n // moveend: this._update,\n // zoomend: this._onZoomEnd\n // };\n // if (this._zoomAnimated) {\n // events.zoomanim = this._onAnimZoom;\n // }\n // return events;\n // },\n\n // _onAnimZoom(ev) {\n // this._updateTransform(ev.center, ev.zoom);\n // },\n\n\t// _onZoom() {\n // this._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t// },\n\n // _onZoomEnd() {\n // for (const id in this._layers) {\n // this._layers[id]._project();\n // }\n // },\n\n // _reset() {\n // this._update();\n // this._updateTransform(this._center, this._zoom);\n\n // for (const id in this._layers) {\n // this._layers[id]._reset();\n // }\n // },\n\n // _updatePaths() {\n // for (const id in this._layers) {\n // this._layers[id]._update();\n // }\n // },\n\n _update: function() {\n if (!this._map._rotate) {\n return rendererProto._update.apply(this, arguments);\n }\n // Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n // Subclasses are responsible of firing the 'update' event.\n this._bounds = this._map._getPaddedPixelBounds(this.options.padding);\n this._topLeft = this._map.layerPointToLatLng(this._bounds.min);\n this._center = this._map.getCenter();\n this._zoom = this._map.getZoom();\n },\n\n});\n","/**\n * @external L.Map\n * \n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/Map.js\n */\n\nconst mapProto = L.extend({}, L.Map.prototype);\n\nL.Map.mergeOptions({ rotate: false, bearing: 0, });\n\nL.Map.include({\n\n /**\n * @param {(HTMLElement|String)} id html selector\n * @param {Object} [options={}] leaflet map options\n */\n initialize: function(id, options) {\n if (options.rotate) {\n this._rotate = true;\n this._bearing = 0;\n }\n mapProto.initialize.apply(this, arguments);\n if(this.options.rotate){\n this.setBearing(this.options.bearing);\n }\n },\n\n /**\n * Given a pixel coordinate relative to the map container,\n * returns the corresponding pixel coordinate relative to\n * the [origin pixel](#map-getpixelorigin).\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point} transformed pixel point\n */\n containerPointToLayerPoint: function(point) {\n if (!this._rotate) {\n return mapProto.containerPointToLayerPoint.apply(this, arguments);\n }\n return L.point(point)\n .subtract(this._getMapPanePos())\n .rotateFrom(-this._bearing, this._getRotatePanePos())\n .subtract(this._getRotatePanePos());\n },\n\n /**\n * Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\n * returns the corresponding pixel coordinate relative to the map container.\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point} transformed pixel point\n */\n layerPointToContainerPoint: function(point) {\n if (!this._rotate) {\n return mapProto.layerPointToContainerPoint.apply(this, arguments);\n }\n return L.point(point)\n .add(this._getRotatePanePos())\n .rotateFrom(this._bearing, this._getRotatePanePos())\n .add(this._getMapPanePos());\n },\n\n /**\n * Converts a coordinate from the rotated pane reference system\n * to the reference system of the not rotated map pane.\n * \n * (rotatePane) --> (mapPane)\n * (rotatePane) --> (norotatePane)\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point}\n * \n * @since leaflet-rotate (v0.1)\n */\n rotatedPointToMapPanePoint: function(point) {\n return L.point(point)\n .rotate(this._bearing)\n ._add(this._getRotatePanePos());\n },\n\n /**\n * Converts a coordinate from the not rotated map pane reference system\n * to the reference system of the rotated pane.\n * \n * (mapPane) --> (rotatePane)\n * (norotatePane) --> (rotatePane)\n * \n * @param {L.Point} point pixel screen coordinates\n * \n * @since leaflet-rotate (v0.1)\n */\n mapPanePointToRotatedPoint: function(point) {\n return L.point(point)\n ._subtract(this._getRotatePanePos())\n .rotate(-this._bearing);\n },\n\n // latLngToLayerPoint: function (latlng) {\n // var projectedPoint = this.project(L.latLng(latlng))._round();\n // return projectedPoint._subtract(this.getPixelOrigin());\n // },\n\n // latLngToContainerPoint: function (latlng) {\n\t// \treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\n\t// },\n\n /**\n * Given latlng bounds, returns the bounds in projected pixel\n * relative to the map container.\n * \n * @see https://github.com/ronikar/Leaflet/blob/5c480ef959b947c3beed7065425a5a36c486262b/src/map/Map.js#L1114-L1135\n * \n * @param {L.LatLngBounds} bounds \n * @returns {L.Bounds}\n * \n * @since leaflet-rotate (v0.2)\n */\n mapBoundsToContainerBounds: function (bounds) {\n if (!this._rotate && mapProto.mapBoundsToContainerBounds) {\n return mapProto.mapBoundsToContainerBounds.apply(this, arguments);\n }\n\n // const nw = this.latLngToContainerPoint(bounds.getNorthWest()),\n // ne = this.latLngToContainerPoint(bounds.getNorthEast()),\n // sw = this.latLngToContainerPoint(bounds.getSouthWest()),\n // se = this.latLngToContainerPoint(bounds.getSouthEast());\n\n // same as `this.latLngToContainerPoint(latlng)` but with floating point precision\n const origin = this.getPixelOrigin();\n const nw = this.layerPointToContainerPoint(this.project(bounds.getNorthWest())._subtract(origin)),\n ne = this.layerPointToContainerPoint(this.project(bounds.getNorthEast())._subtract(origin)),\n sw = this.layerPointToContainerPoint(this.project(bounds.getSouthWest())._subtract(origin)),\n se = this.layerPointToContainerPoint(this.project(bounds.getSouthEast())._subtract(origin));\n\n return L.bounds([\n L.point(Math.min(nw.x, ne.x, se.x, sw.x), Math.min(nw.y, ne.y, se.y, sw.y)), // [ minX, minY ]\n L.point(Math.max(nw.x, ne.x, se.x, sw.x), Math.max(nw.y, ne.y, se.y, sw.y)) // [ maxX, maxY ]\n ]);\n },\n\n /**\n * Returns geographical bounds visible in the current map view\n * \n * @TODO find out if map bounds calculated by `L.Map::getBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n * \n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @returns {L.LatLngBounds}\n */\n getBounds: function() {\n if (!this._rotate) {\n return mapProto.getBounds.apply(this, arguments);\n }\n\n // SEE: https://github.com/fnicollet/Leaflet/pull/22\n //\n // var bounds = this.getPixelBounds(),\n // sw = this.unproject(bounds.getBottomLeft()),\n // ne = this.unproject(bounds.getTopRight());\n // return new LatLngBounds(sw, ne);\n //\n\n // LatLngBounds' constructor automatically\n // extends the bounds to fit the passed points\n var size = this.getSize();\n return new L.LatLngBounds([\n this.containerPointToLatLng([0, 0]), // topleft\n this.containerPointToLatLng([size.x, 0]), // topright \n this.containerPointToLatLng([size.x, size.y]), // bottomright\n this.containerPointToLatLng([0, size.y]), // bottomleft\n ]);\n },\n\n /**\n * Returns the bounds of the current map view in projected pixel\n * coordinates (sometimes useful in layer and overlay implementations).\n * \n * @TODO find out if map bounds calculated by `L.Map::getPixelBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n *\n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @returns {L.Bounds}\n */\n // getPixelBounds(center, zoom) {\n // // const topLeftPoint = map.containerPointToLayerPoint(this._getTopLeftPoint());\n // const topLeftPoint = this._getTopLeftPoint(center, zoom);\n // return new L.Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\n // },\n\n /**\n * Change map rotation\n * \n * @param {number} theta map degrees\n * \n * @since leaflet-rotate (v0.1)\n */\n setBearing: function(theta) {\n if (!L.Browser.any3d || !this._rotate) { return; }\n\n var bearing = L.Util.wrapNum(theta, [0, 360]) * L.DomUtil.DEG_TO_RAD,\n center = this._getPixelCenter(),\n oldPos = this._getRotatePanePos().rotateFrom(-this._bearing, center),\n newPos = oldPos.rotateFrom(bearing, center);\n\n // CSS transform\n L.DomUtil.setPosition(this._rotatePane, oldPos, bearing, center);\n\n this._pivot = center;\n this._bearing = bearing;\n this._rotatePanePos = newPos;\n\n this.fire('rotate');\n },\n\n /**\n * Get current map rotation\n * \n * @returns {number} theta map degrees\n * \n * @since leaflet-rotate (v0.1)\n */\n getBearing: function() {\n return this._bearing * L.DomUtil.RAD_TO_DEG;\n },\n\n /**\n * Creates a new [map pane](#map-pane) with the given name if it doesn't\n * exist already, then returns it. The pane is created as a child of\n * `container`, or as a child of the main map pane if not set.\n * \n * @param {String} name leaflet pane\n * @param {HTMLElement} [container] parent element\n * @returns {HTMLElement} pane container\n */\n // createPane: function(name, container) {\n // if (!this._rotate || name == 'mapPane') {\n // return mapProto.createPane.apply(this, arguments);\n // }\n // // init \"rotatePane\"\n // if (!this._rotatePane) {\n // // this._pivot = this.getSize().divideBy(2);\n // this._rotatePane = mapProto.createPane.call(this, 'rotatePane', this._mapPane);\n // L.DomUtil.setPosition(this._rotatePane, new L.Point(0, 0), this._bearing, this._pivot);\n // }\n // return mapProto.createPane.call(this, name, container || this._rotatePane);\n // },\n\n /**\n * Panes are DOM elements used to control the ordering of layers on\n * the map. You can access panes with [`map.getPane`](#map-getpane)\n * or [`map.getPanes`](#map-getpanes) methods. New panes can be created\n * with the [`map.createPane`](#map-createpane) method.\n * \n * Every map has the following default panes that differ only in zIndex:\n * \n * - mapPane [HTMLElement = 'auto'] - Pane that contains all other map panes\n * - tilePane [HTMLElement = 2] - Pane for tile layers\n * - overlayPane [HTMLElement = 4] - Pane for overlays like polylines and polygons\n * - shadowPane [HTMLElement = 5] - Pane for overlay shadows (e.g. marker shadows)\n * - markerPane [HTMLElement = 6] - Pane for marker icons\n * - tooltipPane [HTMLElement = 650] - Pane for tooltips.\n * - popupPane [HTMLElement = 700] - Pane for popups.\n */\n _initPanes: function() {\n var panes = this._panes = {};\n this._paneRenderers = {};\n\n this._mapPane = this.createPane('mapPane', this._container);\n L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));\n\n if (this._rotate) {\n this._rotatePane = this.createPane('rotatePane', this._mapPane);\n this._norotatePane = this.createPane('norotatePane', this._mapPane);\n // rotatePane\n this.createPane('tilePane', this._rotatePane);\n this.createPane('overlayPane', this._rotatePane);\n // norotatePane\n this.createPane('shadowPane', this._norotatePane);\n this.createPane('markerPane', this._norotatePane);\n this.createPane('tooltipPane', this._norotatePane);\n this.createPane('popupPane', this._norotatePane);\n } else {\n this.createPane('tilePane');\n this.createPane('overlayPane');\n this.createPane('shadowPane');\n this.createPane('markerPane');\n this.createPane('tooltipPane');\n this.createPane('popupPane');\n }\n\n if (!this.options.markerZoomAnimation) {\n L.DomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\n L.DomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\n }\n },\n\n /**\n * Pans the map the minimum amount to make the `latlng` visible. Use\n * padding options to fit the display to more restricted bounds.\n * If `latlng` is already within the (optionally padded) display bounds,\n * the map will not be panned.\n * \n * @see https://github.com/Raruto/leaflet-rotate/issues/18\n * \n * @param {L.LatLng} latlng coordinates\n * @param {Object} [options={}] padding options\n * \n * @returns {L.Map} current map instance\n */\n panInside(latlng, options) {\n if (!this._rotate || Math.abs(this._bearing).toFixed(1) < 0.1) {\n return mapProto.panInside.apply(this, arguments);\n }\n\n options = options || {};\n\n const paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),\n paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]),\n /** @TODO use mapProto.panInside */\n // pixelPoint = this.project(latlng),\n // pixelBounds = this.getPixelBounds(),\n // pixelCenter = this.project(this.getCenter()),\n rect = this._container.getBoundingClientRect(),\n pixelPoint = this.latLngToContainerPoint(latlng),\n pixelBounds = L.bounds([ L.point(rect), L.point(rect).add(this.getSize()) ]),\n pixelCenter = pixelBounds.getCenter(),\n //\n paddedBounds = L.bounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),\n paddedSize = paddedBounds.getSize();\n \n if (!paddedBounds.contains(pixelPoint)) {\n this._enforcingBounds = true;\n const centerOffset = pixelPoint.subtract(paddedBounds.getCenter());\n const offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);\n pixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;\n pixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;\n /** @TODO use mapProto.panInside */\n // this.panTo(this.unproject(pixelCenter), options);\n this.panTo(this.containerPointToLatLng(pixelCenter), options);\n //\n this._enforcingBounds = false;\n }\n return this;\n },\n\n /**\n * Pans the map to the closest view that would lie inside the given bounds\n * (if it's not already), controlling the animation using the options specific,\n * if any.\n * \n * @TODO check if map bounds calculated by `L.Map::panInsideBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n *\n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @param {L.LatLngBounds} bounds coordinates\n * @param {Object} [options] pan options\n * @returns {L.Map} current map instance\n */\n // panInsideBounds: function (bounds, options) {\n // this._enforcingBounds = true;\n // var center = this.getCenter(),\n // newCenter = this._limitCenter(center, this._zoom, L.latLngBounds(bounds));\n //\n // if (!center.equals(newCenter)) {\n // this.panTo(newCenter, options);\n // }\n //\n // this._enforcingBounds = false;\n // return this;\n // },\n\n // adjust center for view to get inside bounds\n // _limitCenter(center, zoom, bounds) {\n //\n // if (!bounds) { return center; }\n //\n // const centerPoint = this.project(center, zoom),\n // viewHalf = this.getSize().divideBy(2),\n // viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\n // offset = this._getBoundsOffset(viewBounds, bounds, zoom);\n //\n // // If offset is less than a pixel, ignore.\n // // This prevents unstable projections from getting into\n // // an infinite loop of tiny offsets.\n // if (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {\n // return center;\n // }\n //\n // return this.unproject(centerPoint.add(offset), zoom);\n // },\n\n // @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\n // Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\n // but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\n // flyToBounds(bounds, options) {\n // const target = this._getBoundsCenterZoom(bounds, options);\n // return this.flyTo(target.center, target.zoom, options);\n // },\n\n // _getBoundsCenterZoom(bounds, options) {\n //\n // options = options || {};\n // bounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\n //\n // const paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),\n // paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]);\n //\n // let zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\n //\n // zoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\n //\n // if (zoom === Infinity) {\n // return { center: bounds.getCenter(), zoom };\n // }\n //\n // return { center, zoom };\n //\n // },\n\n /**\n * Returns the maximum zoom level on which the given bounds fit to the map\n * view in its entirety. If `inside` (optional) is set to `true`, the method\n * instead returns the minimum zoom level on which the map view fits into\n * the given bounds in its entirety.\n * \n * @param {L.LatLngBounds} bounds\n * @param {Boolean} [inside=false]\n * @param {L.Point} [padding=[0,0]]\n * \n * @returns {Number} zoom level\n */\n getBoundsZoom(bounds, inside, padding) {\n if (!this._rotate || Math.abs(this._bearing).toFixed(1) < 0.1) {\n return mapProto.getBoundsZoom.apply(this, arguments);\n }\n\n bounds = L.latLngBounds(bounds);\n padding = L.point(padding || [0, 0]);\n\n let zoom = this.getZoom() || 0;\n const min = this.getMinZoom(),\n max = this.getMaxZoom(),\n /** @TODO use mapProto.getBoundsZoom */\n // nw = bounds.getNorthWest(),\n // se = bounds.getSouthEast(),\n // size = this.getSize().subtract(padding),\n // boundsSize = L.bounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\n size = this.getSize().subtract(padding),\n boundsSize = this.mapBoundsToContainerBounds(bounds).getSize(),\n snap = this.options.zoomSnap,\n scalex = size.x / boundsSize.x,\n scaley = size.y / boundsSize.y,\n scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\n\n zoom = this.getScaleZoom(scale, zoom);\n\n if (snap) {\n zoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\n zoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\n }\n\n return Math.max(min, Math.min(max, zoom));\n },\n\n /**\n * Layer point of the current center\n * \n * @returns {L.Point} layer center\n */\n // _getCenterLayerPoint: function () {\n // return this.containerPointToLayerPoint(this.getSize()._divideBy(2));\n // },\n\n /**\n * Offset of the specified place to the current center in pixels\n * \n * @param {L.LatLng} latlng map coordinates\n */\n _getCenterOffset: function(latlng) {\n var centerOffset = mapProto._getCenterOffset.apply(this, arguments);\n if (this._rotate) {\n centerOffset = centerOffset.rotate(this._bearing);\n }\n return centerOffset;\n },\n\n /**\n * @since leaflet-rotate (v0.1)\n */\n _getRotatePanePos: function() {\n return this._rotatePanePos || new L.Point(0, 0);\n // return L.DomUtil.getPosition(this._rotatePane) || new L.Point(0, 0);\n },\n\n // _latLngToNewLayerPoint(latlng, zoom, center) {\n // const topLeft = this._getNewPixelOrigin(center, zoom);\n // return this.project(latlng, zoom)._subtract(topLeft);\n //},\n\n _getNewPixelOrigin: function(center, zoom) {\n if (!this._rotate) {\n return mapProto._getNewPixelOrigin.apply(this, arguments);\n }\n var viewHalf = this.getSize()._divideBy(2);\n return this.project(center, zoom)\n .rotate(this._bearing)\n ._subtract(viewHalf)\n ._add(this._getMapPanePos())\n ._add(this._getRotatePanePos())\n .rotate(-this._bearing)\n ._round();\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @see src\\layer\\tile\\GridLayer::_getTiledPixelBounds()\n */\n _getNewPixelBounds: function(center, zoom) {\n center = center || this.getCenter();\n zoom = zoom || this.getZoom();\n if (!this._rotate && mapProto._getNewPixelBounds) {\n return mapProto._getNewPixelBounds.apply(this, arguments);\n }\n var mapZoom = this._animatingZoom ? Math.max(this._animateToZoom, this.getZoom()) : this.getZoom(),\n scale = this.getZoomScale(mapZoom, zoom),\n pixelCenter = this.project(center, zoom).floor(),\n size = this.getSize(),\n halfSize = new L.Bounds([\n this.containerPointToLayerPoint([0, 0]).floor(),\n this.containerPointToLayerPoint([size.x, 0]).floor(),\n this.containerPointToLayerPoint([0, size.y]).floor(),\n this.containerPointToLayerPoint([size.x, size.y]).floor()\n ]).getSize().divideBy(scale * 2);\n\n return new L.Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @return {L.Point} map pivot point (center)\n */\n _getPixelCenter: function() {\n if (!this._rotate && mapProto._getPixelCenter) {\n return mapProto._getPixelCenter.apply(this, arguments);\n }\n return this.getSize()._divideBy(2)._subtract(this._getMapPanePos());\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @see src\\layer\\vector\\Renderer::_update()\n */\n _getPaddedPixelBounds: function(padding) {\n if (!this._rotate && mapProto._getPaddedPixelBounds) {\n return mapProto._getPaddedPixelBounds.apply(this, arguments);\n }\n var p = padding,\n size = this.getSize(),\n padMin = size.multiplyBy(-p),\n padMax = size.multiplyBy(1 + p);\n //min = this.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n return new L.Bounds([\n this.containerPointToLayerPoint([padMin.x, padMin.y]).floor(),\n this.containerPointToLayerPoint([padMin.x, padMax.y]).floor(),\n this.containerPointToLayerPoint([padMax.x, padMin.y]).floor(),\n this.containerPointToLayerPoint([padMax.x, padMax.y]).floor()\n ]);\n },\n\n _handleGeolocationResponse: function(pos) {\n if (!this._container._leaflet_id) { return; }\n\n var lat = pos.coords.latitude,\n lng = pos.coords.longitude,\n /** @TODO use mapProto._handleGeolocationResponse */\n hdg = pos.coords.heading,\n latlng = new L.LatLng(lat, lng),\n bounds = latlng.toBounds(pos.coords.accuracy),\n options = this._locateOptions;\n\n if (options.setView) {\n var zoom = this.getBoundsZoom(bounds);\n this.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\n }\n\n var data = {\n latlng: latlng,\n bounds: bounds,\n timestamp: pos.timestamp,\n /** @TODO use mapProto._handleGeolocationResponse */\n heading: hdg\n };\n\n for (var i in pos.coords) {\n if (typeof pos.coords[i] === 'number') {\n data[i] = pos.coords[i];\n }\n }\n\n // @event locationfound: LocationEvent\n // Fired when geolocation (using the [`locate`](#map-locate) method)\n // went successfully.\n this.fire('locationfound', data);\n },\n\n /**\n * @see https://github.com/ronikar/Leaflet/blob/5c480ef959b947c3beed7065425a5a36c486262b/src/geo/LatLngBounds.js#L253-L264\n * \n * @param {L.Bounds} points \n * @returns {L.Bounds}\n */\n // toCircumscribedBounds(points) {\n // var minX = points.reduce(function (pv, v) { return Math.min(pv, v.x); }, points[0].x),\n // maxX = points.reduce(function (pv, v) { return Math.max(pv, v.x); }, points[0].x),\n // minY = points.reduce(function (pv, v) { return Math.min(pv, v.y); }, points[0].y),\n // maxY = points.reduce(function (pv, v) { return Math.max(pv, v.y); }, points[0].y);\n //\n // return L.bounds(L.point(minX, minY), L.point(maxX, maxY));\n // },\n\n});\n","/**\n * Rotates the map according to a smartphone's compass.\n * \n * @typedef L.Map.CompassBearing\n */\n\nL.Map.CompassBearing = L.Handler.extend({\n\n initialize: function(map) {\n this._map = map;\n /** @see https://caniuse.com/?search=DeviceOrientation */\n if ('ondeviceorientationabsolute' in window) {\n this.__deviceOrientationEvent = 'deviceorientationabsolute';\n } else if('ondeviceorientation' in window) {\n this.__deviceOrientationEvent = 'deviceorientation';\n }\n this._throttled = L.Util.throttle(this._onDeviceOrientation, 100, this);\n },\n\n addHooks: function() {\n if (this._map._rotate && this.__deviceOrientationEvent) {\n L.DomEvent.on(window, this.__deviceOrientationEvent, this._throttled, this);\n } else {\n // L.Map.CompassBearing handler will be automatically\n // disabled if device orientation is not supported.\n this.disable();\n }\n },\n\n removeHooks: function() {\n if (this._map._rotate && this.__deviceOrientationEvent) {\n L.DomEvent.off(window, this.__deviceOrientationEvent, this._throttled, this);\n }\n },\n\n /**\n * `DeviceOrientationEvent.absolute` - Indicates whether the device is providing absolute\n * orientation values (relatives to Magnetic North) or\n * using some arbitrary frame determined by the device.\n * \n * `DeviceOrientationEvent.alpha` - Returns the rotation of the device around the Z axis;\n * that is, the number of degrees by which the device is\n * being twisted around the center of the screen.\n * \n * `window.orientation` - Returns the screen orientation in degrees (in 90-degree increments)\n * of the viewport relative to the device's natural orientation.\n * Its only possible values are -90, 0, 90, and 180. Positive\n * values are counterclockwise; negative values are clockwise.\n * \n * @see https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/absolute\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/alpha\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/orientation\n */\n _onDeviceOrientation: function(e) {\n var angle = e.webkitCompassHeading || e.alpha;\n var deviceOrientation = 0;\n\n // Safari iOS\n if (!e.absolute && e.webkitCompassHeading) {\n angle = 360 - angle;\n }\n\n // Older browsers\n if (!e.absolute && 'undefined' !== typeof window.orientation) {\n deviceOrientation = window.orientation;\n }\n\n this._map.setBearing(angle - deviceOrientation);\n },\n\n});\n\n/**\n * Add Compass bearing handler to L.Map (disabled unless `window.DeviceOrientationEvent` is set).\n * \n * @property {L.Map.CompassBearing} compassBearing\n */\nL.Map.addInitHook('addHandler', 'compassBearing', L.Map.CompassBearing);\n","/**\n * Triggers `invalidateResize` when the map's DOM container mutates.\n * \n * @typedef L.Map.ContainerMutation\n */\n\n/**\n * @TODO check again this file after leaflet v1.9.3 (eg. L.Browser.mutation).\n * Mutation Observer support will likely be added by default in next releases.\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map uses mutation observers to\n * detect changes in its container and trigger\n * `invalidateSize`. Disabled by default due to\n * support not being available in all web browsers.\n *\n * @type {Boolean}\n * \n * @see https://developer.mozilla.org/docs/Web/API/MutationObserver\n */\n trackContainerMutation: false\n\n});\n\nL.Map.ContainerMutation = L.Handler.extend({\n\n addHooks: function() {\n // if (!L.Browser.mutation) { return; }\n if (!this._observer) {\n this._observer = new MutationObserver(L.Util.bind(this._map.invalidateSize, this._map));\n }\n this._observer.observe(this._map.getContainer(), {\n childList: false,\n attributes: true,\n characterData: false,\n subtree: false,\n attributeFilter: ['style']\n });\n },\n\n removeHooks: function() {\n // if (!L.Browser.mutation) { return; }\n this._observer.disconnect();\n },\n\n});\n\n/**\n * Add Container mutation handler to L.Map (disabled unless `trackContainerMutation` is set).\n * \n * @property {L.Map.ContainerMutation} trackContainerMutation\n */\nL.Map.addInitHook('addHandler', 'trackContainerMutation', L.Map.ContainerMutation);\n","/**\n * TouchGestures is both TouchZoom plus TouchRotate\n * \n * @see https://github.com/fnicollet/Leaflet/commit/a77af51a6b10f308d1b9a16552091d1d0aee8834\n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/handler/Map.TouchZoom.js\n * \n * @typedef L.Map.TouchGestures\n */\n\nL.Map.mergeOptions({\n\n /**\n * Set it to false if you don't want the map to\n * zoom beyond min/max zoom and then bounce back\n * when pinch-zooming.\n * \n * @type {Boolean}\n */\n bounceAtZoomLimits: true,\n\n});\n\nL.Map.TouchGestures = L.Handler.extend({\n\n initialize: function(map) {\n this._map = map;\n this.rotate = !!this._map.options.touchRotate;\n this.zoom = !!this._map.options.touchZoom;\n },\n\n addHooks: function() {\n L.DomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n },\n\n removeHooks: function() {\n L.DomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n },\n\n _onTouchStart: function(e) {\n var map = this._map;\n\n if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming || this._rotating) { return; }\n\n var p1 = map.mouseEventToContainerPoint(e.touches[0]),\n p2 = map.mouseEventToContainerPoint(e.touches[1]),\n vector = p1.subtract(p2);\n\n this._centerPoint = map.getSize()._divideBy(2);\n this._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\n if (this.zoom) {\n if (map.options.touchZoom !== 'center') {\n this._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n }\n this._startDist = p1.distanceTo(p2);\n this._startZoom = map.getZoom();\n this._zooming = true;\n } else {\n this._zooming = false;\n }\n\n if (this.rotate) {\n this._startTheta = Math.atan(vector.x / vector.y);\n this._startBearing = map.getBearing();\n if (vector.y < 0) { this._startBearing += 180; }\n this._rotating = true;\n } else {\n this._rotating = false;\n }\n\n this._moved = false;\n\n map._stop();\n\n L.DomEvent\n .on(document, 'touchmove', this._onTouchMove, this)\n .on(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n L.DomEvent.preventDefault(e);\n },\n\n _onTouchMove: function(e) {\n if (!e.touches || e.touches.length !== 2 || !(this._zooming || this._rotating)) { return; }\n\n var map = this._map,\n p1 = map.mouseEventToContainerPoint(e.touches[0]),\n p2 = map.mouseEventToContainerPoint(e.touches[1]),\n vector = p1.subtract(p2),\n scale = p1.distanceTo(p2) / this._startDist,\n delta;\n\n if (this._rotating) {\n var theta = Math.atan(vector.x / vector.y);\n var bearingDelta = (theta - this._startTheta) * L.DomUtil.RAD_TO_DEG;\n if (vector.y < 0) { bearingDelta += 180; }\n if (bearingDelta) {\n /**\n * @TODO the pivot should be the last touch point,\n * but zoomAnimation manages to overwrite the rotate\n * pane position. Maybe related to #3529.\n * \n * @see https://github.com/Leaflet/Leaflet/pull/3529\n * @see https://github.com/fnicollet/Leaflet/commit/a77af51a6b10f308d1b9a16552091d1d0aee8834\n */\n map.setBearing(this._startBearing - bearingDelta);\n }\n }\n\n if (this._zooming) {\n this._zoom = map.getScaleZoom(scale, this._startZoom);\n\n if (!map.options.bounceAtZoomLimits && (\n (this._zoom < map.getMinZoom() && scale < 1) ||\n (this._zoom > map.getMaxZoom() && scale > 1))) {\n this._zoom = map._limitZoom(this._zoom);\n }\n\n if (map.options.touchZoom === 'center') {\n this._center = this._startLatLng;\n if (scale === 1) { return; }\n } else {\n // Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n if (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\n var alpha = -map.getBearing() * L.DomUtil.DEG_TO_RAD;\n\n this._center = map.unproject(map.project(this._pinchStartLatLng).subtract(delta.rotate(alpha)));\n }\n\n }\n\n if (!this._moved) {\n map._moveStart(true, false);\n this._moved = true;\n }\n\n L.Util.cancelAnimFrame(this._animRequest);\n\n var moveFn = map._move.bind(map, this._center, this._zoom, { pinch: true, round: false }, undefined);\n this._animRequest = L.Util.requestAnimFrame(moveFn, this, true);\n \n if (this.zoom) {\n // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n if (this._map.options.zoomAnimation) {\n this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n } else {\n this._map._resetView(this._center, this._map._limitZoom(this._zoom));\n }\n }\n\n L.DomEvent.preventDefault(e);\n },\n\n _onTouchEnd: function() {\n if (!this._moved || !(this._zooming || this._rotating)) {\n this._zooming = false;\n return;\n }\n\n this._zooming = false;\n this._rotating = false;\n L.Util.cancelAnimFrame(this._animRequest);\n\n L.DomEvent\n .off(document, 'touchmove', this._onTouchMove, this)\n .off(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n if (this.zoom) {\n // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n if (this._map.options.zoomAnimation) {\n this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n } else {\n this._map._resetView(this._center, this._map._limitZoom(this._zoom));\n }\n }\n },\n\n});\n\n/**\n * Add Touch Gestures handler (enabled unless `touchGestures` is unset).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchGestures', L.Map.TouchGestures);\n","/**\n * Rotates the map on two-finger (touch devices).\n * \n * @typedef L.Map.TouchRotate\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be rotated with a two-finger rotation gesture\n * \n * @type {Boolean}\n */\n touchRotate: false,\n\n});\n\nL.Map.TouchRotate = L.Handler.extend({\n\n addHooks: function() {\n this._map.touchGestures.enable();\n this._map.touchGestures.rotate = true;\n },\n\n removeHooks: function() {\n this._map.touchGestures.rotate = false;\n },\n\n});\n\n/**\n * Add Touch Rotate handler (disabled unless `touchGestures` is set).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchRotate', L.Map.TouchRotate);\n","\n/**\n * Rotates the map on shift key + mousewheel scrolling (desktop).\n * \n * @typedef L.Map.ShiftKeyRotate\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be rotated with shift + wheel scroll\n * @type {Boolean}\n */\n shiftKeyRotate: true,\n\n});\n\nL.Map.ShiftKeyRotate = L.Handler.extend({\n\n addHooks: function() {\n L.DomEvent.on(this._map._container, \"wheel\", this._handleShiftScroll, this);\n // this._map.shiftKeyRotate.enable();\n this._map.shiftKeyRotate.rotate = true;\n },\n\n removeHooks: function() {\n L.DomEvent.off(this._map._container, \"wheel\", this._handleShiftScroll, this);\n this._map.shiftKeyRotate.rotate = false;\n },\n\n _handleShiftScroll: function(e) {\n if (e.shiftKey) {\n e.preventDefault();\n this._map.scrollWheelZoom.disable();\n this._map.setBearing((this._map._bearing * L.DomUtil.RAD_TO_DEG) + Math.sign(e.deltaY) * 5);\n } else {\n this._map.scrollWheelZoom.enable();\n }\n },\n\n});\n\n/**\n * Add ShiftKey handler to L.Map (enabled unless `shiftKeyRotate` is unset).\n * \n * @property {L.Map.ShiftKeyRotate} shiftKeyRotate\n */\nL.Map.addInitHook('addHandler', 'shiftKeyRotate', L.Map.ShiftKeyRotate);\n\n// decrease `scrollWheelZoom` handler priority over `shiftKeyRotate` handler\nL.Map.addInitHook(function() {\n if (this.scrollWheelZoom.enabled() && this.shiftKeyRotate.enabled()) {\n this.scrollWheelZoom.disable();\n this.scrollWheelZoom.enable();\n }\n});\n","/**\n * Adds pinch zoom rotation on mobile browsers\n * \n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/handler/Map.TouchZoom.js\n * \n * @external L.Map.TouchZoom\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be zoomed by touch-dragging\n * with two fingers. If passed `'center'`, it will\n * zoom to the center of the view regardless of\n * where the touch events (fingers) were. Enabled\n * for touch-capable web browsers.\n * \n * @type {(Boolean|String)}\n */\n touchZoom: L.Browser.touch,\n\n /**\n * @TODO check if this is a duplicate of `L.Map.TouchGestures::bounceAtZoomLimits`\n * \n * Set it to false if you don't want the map to\n * zoom beyond min/max zoom and then bounce back\n * when pinch-zooming.\n * \n * @type {Boolean}\n */\n bounceAtZoomLimits: false,\n\n});\n\nL.Map.TouchZoom = L.Handler.extend({\n\n addHooks: function() {\n L.DomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n this._map.touchGestures.enable();\n this._map.touchGestures.zoom = true;\n },\n\n removeHooks: function() {\n L.DomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n this._map.touchGestures.zoom = false;\n },\n\n});\n\n/**\n * Add Touch Zoom handler (disabled unless `L.Browser.touch` is set).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchZoom', L.Map.TouchZoom);\n","/**\n * A tri-state control for map rotation, states are:\n * \n * - Locked (default)\n * - Unlocked (user can pinch-rotate)\n * - Follow (rotation follows device orientation, if available)\n * \n * @typedef L.Control.Rotate\n */\n\nL.Control.Rotate = L.Control.extend({\n\n options: {\n position: 'topleft',\n closeOnZeroBearing: true\n },\n\n onAdd: function(map) {\n var container = this._container = L.DomUtil.create('div', 'leaflet-control-rotate leaflet-bar');\n\n // this.button = L.Control.Zoom.prototype._createButton.call(this, 'R', 'leaflet-control-rotate', 'leaflet-control-rotate', container, this._toggleLock);\n\n var arrow = this._arrow = L.DomUtil.create('span', 'leaflet-control-rotate-arrow');\n\n arrow.style.backgroundImage = `url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\")`;\n arrow.style.cursor = 'grab';\n arrow.style.display = 'block';\n arrow.style.width = '100%';\n arrow.style.height = '100%';\n arrow.style.backgroundRepeat = 'no-repeat';\n arrow.style.backgroundPosition = '50%';\n\n // Copy-pasted from L.Control.Zoom\n var link = this._link = L.DomUtil.create('a', 'leaflet-control-rotate-toggle', container);\n link.appendChild(arrow);\n link.href = '#';\n link.title = 'Rotate map';\n\n L.DomEvent\n .on(link, 'dblclick', L.DomEvent.stopPropagation)\n .on(link, 'mousedown', this._handleMouseDown, this)\n .on(link, 'click', L.DomEvent.stop)\n .on(link, 'click', this._cycleState, this)\n .on(link, 'click', this._refocusOnMap, this);\n\n if (!L.Browser.any3d) {\n L.DomUtil.addClass(link, 'leaflet-disabled');\n }\n\n this._restyle();\n\n map.on('rotate', this._restyle, this);\n\n // State flag\n this._follow = false;\n this._canFollow = false;\n\n if (this.options.closeOnZeroBearing && map.getBearing() === 0) {\n container.style.display = 'none';\n }\n\n return container;\n },\n \n onRemove: function(map) {\n map.off('rotate', this._restyle, this);\n },\n\n _handleMouseDown: function(e) {\n L.DomEvent.stop(e);\n this.dragging = true;\n this.dragstartX = e.pageX;\n this.dragstartY = e.pageY;\n L.DomEvent\n .on(document, 'mousemove', this._handleMouseDrag, this)\n .on(document, 'mouseup', this._handleMouseUp, this);\n },\n\n _handleMouseUp: function(e) {\n L.DomEvent.stop(e);\n this.dragging = false;\n\n L.DomEvent\n .off(document, 'mousemove', this._handleMouseDrag, this)\n .off(document, 'mouseup', this._handleMouseUp, this);\n },\n\n _handleMouseDrag: function(e) {\n if (!this.dragging) { return; }\n var deltaX = e.clientX - this.dragstartX;\n this._map.setBearing(deltaX);\n },\n\n _cycleState: function(ev) {\n if (!this._map) {\n return;\n }\n\n var map = this._map;\n\n // Touch mode\n if (!map.touchRotate.enabled() && !map.compassBearing.enabled()) {\n map.touchRotate.enable();\n }\n \n // Compass mode\n else if (!map.compassBearing.enabled()) {\n map.touchRotate.disable();\n (\n DeviceOrientationEvent && DeviceOrientationEvent.requestPermission\n ? DeviceOrientationEvent.requestPermission() // iOS compass\n : Promise.resolve('granted') // others\n ).then(state => \"granted\" === state && map.compassBearing.enable())\n }\n\n // Locked mode\n else {\n map.compassBearing.disable();\n map.setBearing(0);\n if (this.options.closeOnZeroBearing) {\n map.touchRotate.enable();\n }\n }\n this._restyle();\n },\n\n _restyle: function() {\n if (!this._map.options.rotate) {\n L.DomUtil.addClass(this._link, 'leaflet-disabled');\n } else {\n var map = this._map;\n var bearing = map.getBearing();\n\n this._arrow.style.transform = 'rotate(' + bearing + 'deg)';\n\n if (bearing && this.options.closeOnZeroBearing) {\n this._container.style.display = 'block';\n }\n\n // Compass mode\n if (map.compassBearing.enabled()) {\n this._link.style.backgroundColor = 'orange';\n }\n \n // Touch mode\n else if (map.touchRotate.enabled()) {\n this._link.style.backgroundColor = null;\n }\n\n // Locked mode\n else {\n this._link.style.backgroundColor = 'grey';\n if (0 === bearing && this.options.closeOnZeroBearing) {\n this._container.style.display = 'none';\n }\n }\n }\n },\n\n});\n\nL.control.rotate = function(options) {\n return new L.Control.Rotate(options);\n};\n\nL.Map.mergeOptions({\n rotateControl: true,\n});\n\nL.Map.addInitHook(function() {\n if (this.options.rotateControl) {\n var options = typeof this.options.rotateControl === 'object' ? this.options.rotateControl : {};\n this.rotateControl = L.control.rotate(options);\n this.addControl(this.rotateControl);\n }\n});\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/leaflet-rotate.js b/dist/leaflet-rotate.js index d1b70f9..0d0729a 100644 --- a/dist/leaflet-rotate.js +++ b/dist/leaflet-rotate.js @@ -1,2 +1,2 @@ -!function(t){"function"==typeof define&&define.amd?define(t):t()}((function(){"use strict";const t=L.extend({},L.DomUtil);L.extend(L.DomUtil,{setTransform:function(o,e,i,n,a){var s=e||new L.Point(0,0);if(!n)return e=s._round(),t.setTransform.apply(this,arguments);s=s.rotateFrom(n,a),o.style[L.DomUtil.TRANSFORM]="translate3d("+s.x+"px,"+s.y+"px,0)"+(i?" scale("+i+")":"")+" rotate("+n+"rad)"},setPosition:function(o,e,i,n,a){if(!i)return t.setPosition.apply(this,arguments);o._leaflet_pos=e,L.Browser.any3d?L.DomUtil.setTransform(o,e,a,i,n):(o.style.left=e.x+"px",o.style.top=e.y+"px")},DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI}),L.Draggable.include({}),L.extend(L.Point.prototype,{rotate:function(t){return this.rotateFrom(t,new L.Point(0,0))},rotateFrom:function(t,o){if(!t)return this;var e=Math.sin(t),i=Math.cos(t),n=o.x,a=o.y,s=this.x-n,r=this.y-a;return new L.Point(s*i-r*e+n,s*e+r*i+a)}});const o=L.extend({},L.DivOverlay.prototype);L.DivOverlay.include({getEvents:function(){return L.extend(o.getEvents.apply(this,arguments),{rotate:this._updatePosition})},_updatePosition:function(){if(this._map&&(o._updatePosition.apply(this,arguments),this._map&&this._map._rotate&&this._zoomAnimated)){var t=this._getAnchor(),e=L.DomUtil.getPosition(this._container).subtract(t);L.DomUtil.setPosition(this._container,this._map.rotatedPointToMapPanePoint(e).add(t))}}});const e=L.extend({},L.Popup.prototype);L.Popup.include({_animateZoom:function(t){if(e._animateZoom.apply(this,arguments),this._map&&this._map._rotate){var o=this._getAnchor(),i=L.DomUtil.getPosition(this._container).subtract(o);L.DomUtil.setPosition(this._container,this._map.rotatedPointToMapPanePoint(i).add(o))}},_adjustPan:function(){if(!(!this.options.autoPan||this._map._panAnim&&this._map._panAnim._inProgress))if(this._autopanning)this._autopanning=!1;else{var t=this._map,o=parseInt(L.DomUtil.getStyle(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+o,i=this._containerWidth,n=new L.Point(this._containerLeft,-e-this._containerBottom);n._add(L.DomUtil.getPosition(this._container));var a=n._add(this._map._getMapPanePos()),s=L.point(this.options.autoPanPadding),r=L.point(this.options.autoPanPaddingTopLeft||s),h=L.point(this.options.autoPanPaddingBottomRight||s),_=t.getSize(),d=0,l=0;a.x+i+h.x>_.x&&(d=a.x+i-_.x+h.x),a.x-d-r.x<0&&(d=a.x-r.x),a.y+e+h.y>_.y&&(l=a.y+e-_.y+h.y),a.y-l-r.y<0&&(l=a.y-r.y),(d||l)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([d,l]))}}});const i=L.extend({},L.Tooltip.prototype);L.Tooltip.include({_animateZoom:function(t){if(!this._map._rotate)return i._animateZoom.apply(this,arguments);var o=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o=this._map.rotatedPointToMapPanePoint(o),this._setPosition(o)},_updatePosition:function(){if(!this._map._rotate)return i._updatePosition.apply(this,arguments);var t=this._map.latLngToLayerPoint(this._latlng);t=this._map.rotatedPointToMapPanePoint(t),this._setPosition(t)}}),L.extend({},L.Icon.prototype),L.Icon.include({_setIconStyles:function(t,o){var e=this.options,i=e[o+"Size"];"number"==typeof i&&(i=[i,i]);var n=L.point(i),a=L.point("shadow"===o&&e.shadowAnchor||e.iconAnchor||n&&n.divideBy(2,!0));t.className="leaflet-marker-"+o+" "+(e.className||""),a&&(t.style.marginLeft=-a.x+"px",t.style.marginTop=-a.y+"px",t.style[L.DomUtil.TRANSFORM+"Origin"]=a.x+"px "+a.y+"px 0px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")}});const n=L.extend({},L.Marker.prototype);var a;L.Marker.mergeOptions({rotation:0,rotateWithView:!1,scale:void 0});var s={_onDrag:function(t){var o=this._marker,e=o.options.rotation||o.options.rotateWithView,i=o._shadow,n=L.DomUtil.getPosition(o._icon);!e&&i&&L.DomUtil.setPosition(i,n),o._map._rotate&&(n=o._map.mapPanePointToRotatedPoint(n));var a=o._map.layerPointToLatLng(n);o._latlng=a,t.latlng=a,t.oldLatLng=this._oldLatLng,e?o.setLatLng(a):o.fire("move",t),o.fire("drag",t)},_onDragEnd:function(t){this._marker._map._rotate&&this._marker.update(),a._onDragEnd.apply(this,arguments)}};L.Marker.include({getEvents:function(){return L.extend(n.getEvents.apply(this,arguments),{rotate:this.update})},_initInteraction:function(){var t=n._initInteraction.apply(this,arguments);return this.dragging&&this.dragging.enabled()&&this._map&&this._map._rotate&&(a=a||Object.getPrototypeOf(this.dragging),this.dragging.disable(),Object.assign(this.dragging,{_onDrag:s._onDrag.bind(this.dragging),_onDragEnd:s._onDragEnd.bind(this.dragging)}),this.dragging.enable()),t},_setPos:function(t){this._map._rotate&&(t=this._map.rotatedPointToMapPanePoint(t));var o=this.options.rotation||0;this.options.rotateWithView&&(o+=this._map._bearing),this._icon&&L.DomUtil.setPosition(this._icon,t,o,t,this.options.scale),this._shadow&&L.DomUtil.setPosition(this._shadow,t,o,t,this.options.scale),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},setRotation:function(t){this.options.rotation=t,this.update()}});const r=L.extend({},L.GridLayer.prototype);L.GridLayer.include({getEvents:function(){var t=r.getEvents.apply(this,arguments);return this._map._rotate&&!this.options.updateWhenIdle&&(this._onRotate||(this._onRotate=L.Util.throttle(this._onMoveEnd,this.options.updateInterval,this)),t.rotate=this._onRotate),t},_getTiledPixelBounds:function(t){return this._map._rotate?this._map._getNewPixelBounds(t,this._tileZoom):r._getTiledPixelBounds.apply(this,arguments)}});const h=L.extend({},L.Renderer.prototype);L.Renderer.include({getEvents:function(){return L.extend(h.getEvents.apply(this,arguments),{rotate:this._update})},onAdd:function(){h.onAdd.apply(this,arguments),L.version<="1.9.3"&&this._container.classList.add("leaflet-zoom-animated")},_updateTransform:function(t,o){if(!this._map._rotate)return h._updateTransform.apply(this,arguments);var e=this._map.getZoomScale(o,this._zoom),i=this._map._latLngToNewLayerPoint(this._topLeft,o,t);L.DomUtil.setTransform(this._container,i,e)},_update:function(){if(!this._map._rotate)return h._update.apply(this,arguments);this._bounds=this._map._getPaddedPixelBounds(this.options.padding),this._topLeft=this._map.layerPointToLatLng(this._bounds.min),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}});const _=L.extend({},L.Map.prototype);L.Map.mergeOptions({rotate:!1,bearing:0}),L.Map.include({initialize:function(t,o){o.rotate&&(this._rotate=!0,this._bearing=0),_.initialize.apply(this,arguments),this.options.rotate&&this.setBearing(this.options.bearing)},containerPointToLayerPoint:function(t){return this._rotate?L.point(t).subtract(this._getMapPanePos()).rotateFrom(-this._bearing,this._getRotatePanePos()).subtract(this._getRotatePanePos()):_.containerPointToLayerPoint.apply(this,arguments)},layerPointToContainerPoint:function(t){return this._rotate?L.point(t).add(this._getRotatePanePos()).rotateFrom(this._bearing,this._getRotatePanePos()).add(this._getMapPanePos()):_.layerPointToContainerPoint.apply(this,arguments)},rotatedPointToMapPanePoint:function(t){return L.point(t).rotate(this._bearing)._add(this._getRotatePanePos())},mapPanePointToRotatedPoint:function(t){return L.point(t)._subtract(this._getRotatePanePos()).rotate(-this._bearing)},mapBoundsToContainerBounds:function(t){if(!this._rotate&&_.mapBoundsToContainerBounds)return _.mapBoundsToContainerBounds.apply(this,arguments);const o=this.getPixelOrigin(),e=this.layerPointToContainerPoint(this.project(t.getNorthWest())._subtract(o)),i=this.layerPointToContainerPoint(this.project(t.getNorthEast())._subtract(o)),n=this.layerPointToContainerPoint(this.project(t.getSouthWest())._subtract(o)),a=this.layerPointToContainerPoint(this.project(t.getSouthEast())._subtract(o));return L.bounds([L.point(Math.min(e.x,i.x,a.x,n.x),Math.min(e.y,i.y,a.y,n.y)),L.point(Math.max(e.x,i.x,a.x,n.x),Math.max(e.y,i.y,a.y,n.y))])},getBounds:function(){if(!this._rotate)return _.getBounds.apply(this,arguments);var t=this.getSize();return new L.LatLngBounds([this.containerPointToLatLng([0,0]),this.containerPointToLatLng([t.x,0]),this.containerPointToLatLng([t.x,t.y]),this.containerPointToLatLng([0,t.y])])},setBearing:function(t){if(L.Browser.any3d&&this._rotate){var o=L.Util.wrapNum(t,[0,360])*L.DomUtil.DEG_TO_RAD,e=this._getPixelCenter(),i=this._getRotatePanePos().rotateFrom(-this._bearing,e),n=i.rotateFrom(o,e);L.DomUtil.setPosition(this._rotatePane,i,o,e),this._pivot=e,this._bearing=o,this._rotatePanePos=n,this.fire("rotate")}},getBearing:function(){return this._bearing*L.DomUtil.RAD_TO_DEG},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),L.DomUtil.setPosition(this._mapPane,new L.Point(0,0)),this._rotate?(this._rotatePane=this.createPane("rotatePane",this._mapPane),this._norotatePane=this.createPane("norotatePane",this._mapPane),this.createPane("tilePane",this._rotatePane),this.createPane("overlayPane",this._rotatePane),this.createPane("shadowPane",this._norotatePane),this.createPane("markerPane",this._norotatePane),this.createPane("tooltipPane",this._norotatePane),this.createPane("popupPane",this._norotatePane)):(this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane")),this.options.markerZoomAnimation||(L.DomUtil.addClass(t.markerPane,"leaflet-zoom-hide"),L.DomUtil.addClass(t.shadowPane,"leaflet-zoom-hide"))},panInside(t,o){if(!this._rotate||Math.abs(this._bearing).toFixed(1)<.1)return _.panInside.apply(this,arguments);o=o||{};const e=L.point(o.paddingTopLeft||o.padding||[0,0]),i=L.point(o.paddingBottomRight||o.padding||[0,0]),n=this._container.getBoundingClientRect(),a=this.latLngToContainerPoint(t),s=L.bounds([L.point(n),L.point(n).add(this.getSize())]),r=s.getCenter(),h=L.bounds([s.min.add(e),s.max.subtract(i)]),d=h.getSize();if(!h.contains(a)){this._enforcingBounds=!0;const t=a.subtract(h.getCenter()),e=h.extend(a).getSize().subtract(d);r.x+=t.x<0?-e.x:e.x,r.y+=t.y<0?-e.y:e.y,this.panTo(this.containerPointToLatLng(r),o),this._enforcingBounds=!1}return this},getBoundsZoom(t,o,e){if(!this._rotate||Math.abs(this._bearing).toFixed(1)<.1)return _.getBoundsZoom.apply(this,arguments);t=L.latLngBounds(t),e=L.point(e||[0,0]);let i=this.getZoom()||0;const n=this.getMinZoom(),a=this.getMaxZoom(),s=this.getSize().subtract(e),r=this.mapBoundsToContainerBounds(t).getSize(),h=this.options.zoomSnap,d=s.x/r.x,l=s.y/r.y,p=o?Math.max(d,l):Math.min(d,l);return i=this.getScaleZoom(p,i),h&&(i=Math.round(i/(h/100))*(h/100),i=o?Math.ceil(i/h)*h:Math.floor(i/h)*h),Math.max(n,Math.min(a,i))},_getCenterOffset:function(t){var o=_._getCenterOffset.apply(this,arguments);return this._rotate&&(o=o.rotate(this._bearing)),o},_getRotatePanePos:function(){return this._rotatePanePos||new L.Point(0,0)},_getNewPixelOrigin:function(t,o){if(!this._rotate)return _._getNewPixelOrigin.apply(this,arguments);var e=this.getSize()._divideBy(2);return this.project(t,o).rotate(this._bearing)._subtract(e)._add(this._getMapPanePos())._add(this._getRotatePanePos()).rotate(-this._bearing)._round()},_getNewPixelBounds:function(t,o){if(t=t||this.getCenter(),o=o||this.getZoom(),!this._rotate&&_._getNewPixelBounds)return _._getNewPixelBounds.apply(this,arguments);var e=this._animatingZoom?Math.max(this._animateToZoom,this.getZoom()):this.getZoom(),i=this.getZoomScale(e,o),n=this.project(t,o).floor(),a=this.getSize(),s=new L.Bounds([this.containerPointToLayerPoint([0,0]).floor(),this.containerPointToLayerPoint([a.x,0]).floor(),this.containerPointToLayerPoint([0,a.y]).floor(),this.containerPointToLayerPoint([a.x,a.y]).floor()]).getSize().divideBy(2*i);return new L.Bounds(n.subtract(s),n.add(s))},_getPixelCenter:function(){return!this._rotate&&_._getPixelCenter?_._getPixelCenter.apply(this,arguments):this.getSize()._divideBy(2)._subtract(this._getMapPanePos())},_getPaddedPixelBounds:function(t){if(!this._rotate&&_._getPaddedPixelBounds)return _._getPaddedPixelBounds.apply(this,arguments);var o=t,e=this.getSize(),i=e.multiplyBy(-o),n=e.multiplyBy(1+o);return new L.Bounds([this.containerPointToLayerPoint([i.x,i.y]).floor(),this.containerPointToLayerPoint([i.x,n.y]).floor(),this.containerPointToLayerPoint([n.x,i.y]).floor(),this.containerPointToLayerPoint([n.x,n.y]).floor()])},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var o=t.coords.latitude,e=t.coords.longitude,i=t.coords.heading,n=new L.LatLng(o,e),a=n.toBounds(t.coords.accuracy),s=this._locateOptions;if(s.setView){var r=this.getBoundsZoom(a);this.setView(n,s.maxZoom?Math.min(r,s.maxZoom):r)}var h={latlng:n,bounds:a,timestamp:t.timestamp,heading:i};for(var _ in t.coords)"number"==typeof t.coords[_]&&(h[_]=t.coords[_]);this.fire("locationfound",h)}}}),L.Map.CompassBearing=L.Handler.extend({initialize:function(t){this._map=t,"ondeviceorientationabsolute"in window?this.__deviceOrientationEvent="deviceorientationabsolute":"ondeviceorientation"in window&&(this.__deviceOrientationEvent="deviceorientation"),this._throttled=L.Util.throttle(this._onDeviceOrientation,100,this)},addHooks:function(){this._map._rotate&&this.__deviceOrientationEvent?L.DomEvent.on(window,this.__deviceOrientationEvent,this._throttled,this):this.disable()},removeHooks:function(){this._map._rotate&&this.__deviceOrientationEvent&&L.DomEvent.off(window,this.__deviceOrientationEvent,this._throttled,this)},_onDeviceOrientation:function(t){var o=t.webkitCompassHeading||t.alpha,e=0;!t.absolute&&t.webkitCompassHeading&&(o=360-o),t.absolute||void 0===window.orientation||(e=window.orientation),this._map.setBearing(o-e)}}),L.Map.addInitHook("addHandler","compassBearing",L.Map.CompassBearing),L.Map.mergeOptions({trackContainerMutation:!1}),L.Map.ContainerMutation=L.Handler.extend({addHooks:function(){this._observer||(this._observer=new MutationObserver(L.Util.bind(this._map.invalidateSize,this._map))),this._observer.observe(this._map.getContainer(),{childList:!1,attributes:!0,characterData:!1,subtree:!1,attributeFilter:["style"]})},removeHooks:function(){this._observer.disconnect()}}),L.Map.addInitHook("addHandler","trackContainerMutation",L.Map.ContainerMutation),L.Map.mergeOptions({bounceAtZoomLimits:!0}),L.Map.TouchGestures=L.Handler.extend({initialize:function(t){this._map=t,this.rotate=!!this._map.options.touchRotate,this.zoom=!!this._map.options.touchZoom},addHooks:function(){L.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){L.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var o=this._map;if(t.touches&&2===t.touches.length&&!o._animatingZoom&&!this._zooming&&!this._rotating){var e=o.mouseEventToContainerPoint(t.touches[0]),i=o.mouseEventToContainerPoint(t.touches[1]),n=e.subtract(i);this._centerPoint=o.getSize()._divideBy(2),this._startLatLng=o.containerPointToLatLng(this._centerPoint),this.zoom?("center"!==o.options.touchZoom&&(this._pinchStartLatLng=o.containerPointToLatLng(e.add(i)._divideBy(2))),this._startDist=e.distanceTo(i),this._startZoom=o.getZoom(),this._zooming=!0):this._zooming=!1,this.rotate?(this._startTheta=Math.atan(n.x/n.y),this._startBearing=o.getBearing(),n.y<0&&(this._startBearing+=180),this._rotating=!0):this._rotating=!1,this._moved=!1,o._stop(),L.DomEvent.on(document,"touchmove",this._onTouchMove,this).on(document,"touchend touchcancel",this._onTouchEnd,this),L.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&(this._zooming||this._rotating)){var o,e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),a=i.subtract(n),s=i.distanceTo(n)/this._startDist;if(this._rotating){var r=(Math.atan(a.x/a.y)-this._startTheta)*L.DomUtil.RAD_TO_DEG;a.y<0&&(r+=180),r&&e.setBearing(this._startBearing-r)}if(this._zooming)if(this._zoom=e.getScaleZoom(s,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoome.getMaxZoom()&&s>1)&&(this._zoom=e._limitZoom(this._zoom)),"center"===e.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{if(o=i._add(n)._divideBy(2)._subtract(this._centerPoint),1===s&&0===o.x&&0===o.y)return;var h=-e.getBearing()*L.DomUtil.DEG_TO_RAD;this._center=e.unproject(e.project(this._pinchStartLatLng).subtract(o.rotate(h)))}this._moved||(e._moveStart(!0,!1),this._moved=!0),L.Util.cancelAnimFrame(this._animRequest);var _=e._move.bind(e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=L.Util.requestAnimFrame(_,this,!0),L.DomEvent.preventDefault(t)}},_onTouchEnd:function(){this._moved&&(this._zooming||this._rotating)?(this._zooming=!1,this._rotating=!1,L.Util.cancelAnimFrame(this._animRequest),L.DomEvent.off(document,"touchmove",this._onTouchMove,this).off(document,"touchend touchcancel",this._onTouchEnd,this),this.zoom&&(this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom)))):this._zooming=!1}}),L.Map.addInitHook("addHandler","touchGestures",L.Map.TouchGestures),L.Map.mergeOptions({touchRotate:!1}),L.Map.TouchRotate=L.Handler.extend({addHooks:function(){this._map.touchGestures.enable(),this._map.touchGestures.rotate=!0},removeHooks:function(){this._map.touchGestures.rotate=!1}}),L.Map.addInitHook("addHandler","touchRotate",L.Map.TouchRotate),L.Map.mergeOptions({shiftKeyRotate:!0}),L.Map.ShiftKeyRotate=L.Handler.extend({addHooks:function(){L.DomEvent.on(this._map._container,"wheel",this._handleShiftScroll,this),this._map.shiftKeyRotate.rotate=!0},removeHooks:function(){L.DomEvent.off(this._map._container,"wheel",this._handleShiftScroll,this),this._map.shiftKeyRotate.rotate=!1},_handleShiftScroll:function(t){t.shiftKey?(t.preventDefault(),this._map.scrollWheelZoom.disable(),this._map.setBearing(this._map._bearing*L.DomUtil.RAD_TO_DEG+5*Math.sign(t.deltaY))):this._map.scrollWheelZoom.enable()}}),L.Map.addInitHook("addHandler","shiftKeyRotate",L.Map.ShiftKeyRotate),L.Map.addInitHook((function(){this.scrollWheelZoom.enabled()&&this.shiftKeyRotate.enabled()&&(this.scrollWheelZoom.disable(),this.scrollWheelZoom.enable())})),L.Map.mergeOptions({touchZoom:L.Browser.touch,bounceAtZoomLimits:!1}),L.Map.TouchZoom=L.Handler.extend({addHooks:function(){L.DomUtil.addClass(this._map._container,"leaflet-touch-zoom"),this._map.touchGestures.enable(),this._map.touchGestures.zoom=!0},removeHooks:function(){L.DomUtil.removeClass(this._map._container,"leaflet-touch-zoom"),this._map.touchGestures.zoom=!1}}),L.Map.addInitHook("addHandler","touchZoom",L.Map.TouchZoom),L.Control.Rotate=L.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0},onAdd:function(t){var o=this._container=L.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),e=this._arrow=L.DomUtil.create("span","leaflet-control-rotate-arrow");e.style.backgroundImage="url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\")",e.style.cursor="grab",e.style.display="block",e.style.width="100%",e.style.height="100%",e.style.backgroundRepeat="no-repeat",e.style.backgroundPosition="50%";var i=this._link=L.DomUtil.create("a","leaflet-control-rotate-toggle",o);return i.appendChild(e),i.href="#",i.title="Rotate map",L.DomEvent.on(i,"dblclick",L.DomEvent.stopPropagation).on(i,"mousedown",this._handleMouseDown,this).on(i,"click",L.DomEvent.stop).on(i,"click",this._cycleState,this).on(i,"click",this._refocusOnMap,this),L.Browser.any3d||L.DomUtil.addClass(i,"leaflet-disabled"),this._restyle(),t.on("rotate",this._restyle,this),this._follow=!1,this._canFollow=!1,this.options.closeOnZeroBearing&&0===t.getBearing()&&(o.style.display="none"),o},onRemove:function(t){t.off("rotate",this._restyle,this)},_handleMouseDown:function(t){L.DomEvent.stop(t),this.dragging=!0,this.dragstartX=t.pageX,this.dragstartY=t.pageY,L.DomEvent.on(document,"mousemove",this._handleMouseDrag,this).on(document,"mouseup",this._handleMouseUp,this)},_handleMouseUp:function(t){L.DomEvent.stop(t),this.dragging=!1,L.DomEvent.off(document,"mousemove",this._handleMouseDrag,this).off(document,"mouseup",this._handleMouseUp,this)},_handleMouseDrag:function(t){if(this.dragging){var o=t.clientX-this.dragstartX;this._map.setBearing(o)}},_cycleState:function(t){if(this._map){var o=this._map;o.touchRotate.enabled()||o.compassBearing.enabled()?o.compassBearing.enabled()?(o.compassBearing.disable(),o.setBearing(0),this.options.closeOnZeroBearing&&o.touchRotate.enable()):(o.touchRotate.disable(),(DeviceOrientationEvent&&DeviceOrientationEvent.requestPermission?DeviceOrientationEvent.requestPermission():Promise.resolve("granted")).then((t=>"granted"===t&&o.compassBearing.enable()))):o.touchRotate.enable(),this._restyle()}},_restyle:function(){if(this._map.options.rotate){var t=this._map,o=t.getBearing();this._arrow.style.transform="rotate("+o+"deg)",o&&this.options.closeOnZeroBearing&&(this._container.style.display="block"),t.compassBearing.enabled()?this._link.style.backgroundColor="orange":t.touchRotate.enabled()?this._link.style.backgroundColor=null:(this._link.style.backgroundColor="grey",0===o&&this.options.closeOnZeroBearing&&(this._container.style.display="none"))}else L.DomUtil.addClass(this._link,"leaflet-disabled")}}),L.control.rotate=function(t){return new L.Control.Rotate(t)},L.Map.mergeOptions({rotateControl:!0}),L.Map.addInitHook((function(){if(this.options.rotateControl){var t="object"==typeof this.options.rotateControl?this.options.rotateControl:{};this.rotateControl=L.control.rotate(t),this.addControl(this.rotateControl)}}))})); +!function(t){"function"==typeof define&&define.amd?define(t):t()}((function(){"use strict";const t=L.extend({},L.DomUtil);L.extend(L.DomUtil,{setTransform:function(o,e,i,n,a){var s=e||new L.Point(0,0);if(!n)return e=s._round(),t.setTransform.apply(this,arguments);s=s.rotateFrom(n,a),o.style[L.DomUtil.TRANSFORM]="translate3d("+s.x+"px,"+s.y+"px,0)"+(i?" scale("+i+")":"")+" rotate("+n+"rad)"},setPosition:function(o,e,i,n,a){if(!i)return t.setPosition.apply(this,arguments);o._leaflet_pos=e,L.Browser.any3d?L.DomUtil.setTransform(o,e,a,i,n):(o.style.left=e.x+"px",o.style.top=e.y+"px")},DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI}),L.Draggable.include({}),L.extend(L.Point.prototype,{rotate:function(t){return this.rotateFrom(t,new L.Point(0,0))},rotateFrom:function(t,o){if(!t)return this;var e=Math.sin(t),i=Math.cos(t),n=o.x,a=o.y,s=this.x-n,r=this.y-a;return new L.Point(s*i-r*e+n,s*e+r*i+a)}});const o=L.extend({},L.DivOverlay.prototype);L.DivOverlay.include({getEvents:function(){return L.extend(o.getEvents.apply(this,arguments),{rotate:this._updatePosition})},_updatePosition:function(){if(this._map&&(o._updatePosition.apply(this,arguments),this._map&&this._map._rotate&&this._zoomAnimated)){var t=this._getAnchor(),e=L.DomUtil.getPosition(this._container).subtract(t);L.DomUtil.setPosition(this._container,this._map.rotatedPointToMapPanePoint(e).add(t))}}});const e=L.extend({},L.Popup.prototype);L.Popup.include({_animateZoom:function(t){if(e._animateZoom.apply(this,arguments),this._map&&this._map._rotate){var o=this._getAnchor(),i=L.DomUtil.getPosition(this._container).subtract(o);L.DomUtil.setPosition(this._container,this._map.rotatedPointToMapPanePoint(i).add(o))}},_adjustPan:function(){if(!(!this.options.autoPan||this._map._panAnim&&this._map._panAnim._inProgress))if(this._autopanning)this._autopanning=!1;else{var t=this._map,o=parseInt(L.DomUtil.getStyle(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+o,i=this._containerWidth,n=new L.Point(this._containerLeft,-e-this._containerBottom);n._add(L.DomUtil.getPosition(this._container));var a=n._add(this._map._getMapPanePos()),s=L.point(this.options.autoPanPadding),r=L.point(this.options.autoPanPaddingTopLeft||s),h=L.point(this.options.autoPanPaddingBottomRight||s),_=t.getSize(),d=0,p=0;a.x+i+h.x>_.x&&(d=a.x+i-_.x+h.x),a.x-d-r.x<0&&(d=a.x-r.x),a.y+e+h.y>_.y&&(p=a.y+e-_.y+h.y),a.y-p-r.y<0&&(p=a.y-r.y),(d||p)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([d,p]))}}});const i=L.extend({},L.Tooltip.prototype);L.Tooltip.include({_animateZoom:function(t){if(!this._map._rotate)return i._animateZoom.apply(this,arguments);var o=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o=this._map.rotatedPointToMapPanePoint(o),this._setPosition(o)},_updatePosition:function(){if(!this._map._rotate)return i._updatePosition.apply(this,arguments);var t=this._map.latLngToLayerPoint(this._latlng);t=this._map.rotatedPointToMapPanePoint(t),this._setPosition(t)}}),L.extend({},L.Icon.prototype),L.Icon.include({_setIconStyles:function(t,o){var e=this.options,i=e[o+"Size"];"number"==typeof i&&(i=[i,i]);var n=L.point(i),a=L.point("shadow"===o&&e.shadowAnchor||e.iconAnchor||n&&n.divideBy(2,!0));t.className="leaflet-marker-"+o+" "+(e.className||""),a&&(t.style.marginLeft=-a.x+"px",t.style.marginTop=-a.y+"px",t.style[L.DomUtil.TRANSFORM+"Origin"]=a.x+"px "+a.y+"px 0px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")}});const n=L.extend({},L.Marker.prototype);var a;L.Marker.mergeOptions({rotation:0,rotateWithView:!1,scale:void 0});var s={_onDrag:function(t){var o=this._marker,e=o.options.rotation||o.options.rotateWithView,i=o._shadow,n=L.DomUtil.getPosition(o._icon);!e&&i&&L.DomUtil.setPosition(i,n),o._map._rotate&&(n=o._map.mapPanePointToRotatedPoint(n));var a=o._map.layerPointToLatLng(n);o._latlng=a,t.latlng=a,t.oldLatLng=this._oldLatLng,e?o.setLatLng(a):o.fire("move",t),o.fire("drag",t)},_onDragEnd:function(t){this._marker._map._rotate&&this._marker.update(),a._onDragEnd.apply(this,arguments)}};L.Marker.include({getEvents:function(){return L.extend(n.getEvents.apply(this,arguments),{rotate:this.update})},_initInteraction:function(){var t=n._initInteraction.apply(this,arguments);return this.dragging&&this.dragging.enabled()&&this._map&&this._map._rotate&&(a=a||Object.getPrototypeOf(this.dragging),this.dragging.disable(),Object.assign(this.dragging,{_onDrag:s._onDrag.bind(this.dragging),_onDragEnd:s._onDragEnd.bind(this.dragging)}),this.dragging.enable()),t},_setPos:function(t){this._map._rotate&&(t=this._map.rotatedPointToMapPanePoint(t));var o=this.options.rotation||0;this.options.rotateWithView&&(o+=this._map._bearing),this._icon&&L.DomUtil.setPosition(this._icon,t,o,t,this.options.scale),this._shadow&&L.DomUtil.setPosition(this._shadow,t,o,t,this.options.scale),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},setRotation:function(t){this.options.rotation=t,this.update()}});const r=L.extend({},L.GridLayer.prototype);L.GridLayer.include({getEvents:function(){var t=r.getEvents.apply(this,arguments);return this._map._rotate&&!this.options.updateWhenIdle&&(this._onRotate||(this._onRotate=L.Util.throttle(this._onMoveEnd,this.options.updateInterval,this)),t.rotate=this._onRotate),t},_getTiledPixelBounds:function(t){return this._map._rotate?this._map._getNewPixelBounds(t,this._tileZoom):r._getTiledPixelBounds.apply(this,arguments)}});const h=L.extend({},L.Renderer.prototype);L.Renderer.include({getEvents:function(){return L.extend(h.getEvents.apply(this,arguments),{rotate:this._update})},onAdd:function(){h.onAdd.apply(this,arguments),L.version<="1.9.3"&&this._container.classList.add("leaflet-zoom-animated")},_updateTransform:function(t,o){if(!this._map._rotate)return h._updateTransform.apply(this,arguments);var e=this._map.getZoomScale(o,this._zoom),i=this._map._latLngToNewLayerPoint(this._topLeft,o,t);L.DomUtil.setTransform(this._container,i,e)},_update:function(){if(!this._map._rotate)return h._update.apply(this,arguments);this._bounds=this._map._getPaddedPixelBounds(this.options.padding),this._topLeft=this._map.layerPointToLatLng(this._bounds.min),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}});const _=L.extend({},L.Map.prototype);L.Map.mergeOptions({rotate:!1,bearing:0}),L.Map.include({initialize:function(t,o){o.rotate&&(this._rotate=!0,this._bearing=0),_.initialize.apply(this,arguments),this.options.rotate&&this.setBearing(this.options.bearing)},containerPointToLayerPoint:function(t){return this._rotate?L.point(t).subtract(this._getMapPanePos()).rotateFrom(-this._bearing,this._getRotatePanePos()).subtract(this._getRotatePanePos()):_.containerPointToLayerPoint.apply(this,arguments)},layerPointToContainerPoint:function(t){return this._rotate?L.point(t).add(this._getRotatePanePos()).rotateFrom(this._bearing,this._getRotatePanePos()).add(this._getMapPanePos()):_.layerPointToContainerPoint.apply(this,arguments)},rotatedPointToMapPanePoint:function(t){return L.point(t).rotate(this._bearing)._add(this._getRotatePanePos())},mapPanePointToRotatedPoint:function(t){return L.point(t)._subtract(this._getRotatePanePos()).rotate(-this._bearing)},mapBoundsToContainerBounds:function(t){if(!this._rotate&&_.mapBoundsToContainerBounds)return _.mapBoundsToContainerBounds.apply(this,arguments);const o=this.getPixelOrigin(),e=this.layerPointToContainerPoint(this.project(t.getNorthWest())._subtract(o)),i=this.layerPointToContainerPoint(this.project(t.getNorthEast())._subtract(o)),n=this.layerPointToContainerPoint(this.project(t.getSouthWest())._subtract(o)),a=this.layerPointToContainerPoint(this.project(t.getSouthEast())._subtract(o));return L.bounds([L.point(Math.min(e.x,i.x,a.x,n.x),Math.min(e.y,i.y,a.y,n.y)),L.point(Math.max(e.x,i.x,a.x,n.x),Math.max(e.y,i.y,a.y,n.y))])},getBounds:function(){if(!this._rotate)return _.getBounds.apply(this,arguments);var t=this.getSize();return new L.LatLngBounds([this.containerPointToLatLng([0,0]),this.containerPointToLatLng([t.x,0]),this.containerPointToLatLng([t.x,t.y]),this.containerPointToLatLng([0,t.y])])},setBearing:function(t){if(L.Browser.any3d&&this._rotate){var o=L.Util.wrapNum(t,[0,360])*L.DomUtil.DEG_TO_RAD,e=this._getPixelCenter(),i=this._getRotatePanePos().rotateFrom(-this._bearing,e),n=i.rotateFrom(o,e);L.DomUtil.setPosition(this._rotatePane,i,o,e),this._pivot=e,this._bearing=o,this._rotatePanePos=n,this.fire("rotate")}},getBearing:function(){return this._bearing*L.DomUtil.RAD_TO_DEG},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),L.DomUtil.setPosition(this._mapPane,new L.Point(0,0)),this._rotate?(this._rotatePane=this.createPane("rotatePane",this._mapPane),this._norotatePane=this.createPane("norotatePane",this._mapPane),this.createPane("tilePane",this._rotatePane),this.createPane("overlayPane",this._rotatePane),this.createPane("shadowPane",this._norotatePane),this.createPane("markerPane",this._norotatePane),this.createPane("tooltipPane",this._norotatePane),this.createPane("popupPane",this._norotatePane)):(this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane")),this.options.markerZoomAnimation||(L.DomUtil.addClass(t.markerPane,"leaflet-zoom-hide"),L.DomUtil.addClass(t.shadowPane,"leaflet-zoom-hide"))},panInside(t,o){if(!this._rotate||Math.abs(this._bearing).toFixed(1)<.1)return _.panInside.apply(this,arguments);o=o||{};const e=L.point(o.paddingTopLeft||o.padding||[0,0]),i=L.point(o.paddingBottomRight||o.padding||[0,0]),n=this._container.getBoundingClientRect(),a=this.latLngToContainerPoint(t),s=L.bounds([L.point(n),L.point(n).add(this.getSize())]),r=s.getCenter(),h=L.bounds([s.min.add(e),s.max.subtract(i)]),d=h.getSize();if(!h.contains(a)){this._enforcingBounds=!0;const t=a.subtract(h.getCenter()),e=h.extend(a).getSize().subtract(d);r.x+=t.x<0?-e.x:e.x,r.y+=t.y<0?-e.y:e.y,this.panTo(this.containerPointToLatLng(r),o),this._enforcingBounds=!1}return this},getBoundsZoom(t,o,e){if(!this._rotate||Math.abs(this._bearing).toFixed(1)<.1)return _.getBoundsZoom.apply(this,arguments);t=L.latLngBounds(t),e=L.point(e||[0,0]);let i=this.getZoom()||0;const n=this.getMinZoom(),a=this.getMaxZoom(),s=this.getSize().subtract(e),r=this.mapBoundsToContainerBounds(t).getSize(),h=this.options.zoomSnap,d=s.x/r.x,p=s.y/r.y,l=o?Math.max(d,p):Math.min(d,p);return i=this.getScaleZoom(l,i),h&&(i=Math.round(i/(h/100))*(h/100),i=o?Math.ceil(i/h)*h:Math.floor(i/h)*h),Math.max(n,Math.min(a,i))},_getCenterOffset:function(t){var o=_._getCenterOffset.apply(this,arguments);return this._rotate&&(o=o.rotate(this._bearing)),o},_getRotatePanePos:function(){return this._rotatePanePos||new L.Point(0,0)},_getNewPixelOrigin:function(t,o){if(!this._rotate)return _._getNewPixelOrigin.apply(this,arguments);var e=this.getSize()._divideBy(2);return this.project(t,o).rotate(this._bearing)._subtract(e)._add(this._getMapPanePos())._add(this._getRotatePanePos()).rotate(-this._bearing)._round()},_getNewPixelBounds:function(t,o){if(t=t||this.getCenter(),o=o||this.getZoom(),!this._rotate&&_._getNewPixelBounds)return _._getNewPixelBounds.apply(this,arguments);var e=this._animatingZoom?Math.max(this._animateToZoom,this.getZoom()):this.getZoom(),i=this.getZoomScale(e,o),n=this.project(t,o).floor(),a=this.getSize(),s=new L.Bounds([this.containerPointToLayerPoint([0,0]).floor(),this.containerPointToLayerPoint([a.x,0]).floor(),this.containerPointToLayerPoint([0,a.y]).floor(),this.containerPointToLayerPoint([a.x,a.y]).floor()]).getSize().divideBy(2*i);return new L.Bounds(n.subtract(s),n.add(s))},_getPixelCenter:function(){return!this._rotate&&_._getPixelCenter?_._getPixelCenter.apply(this,arguments):this.getSize()._divideBy(2)._subtract(this._getMapPanePos())},_getPaddedPixelBounds:function(t){if(!this._rotate&&_._getPaddedPixelBounds)return _._getPaddedPixelBounds.apply(this,arguments);var o=t,e=this.getSize(),i=e.multiplyBy(-o),n=e.multiplyBy(1+o);return new L.Bounds([this.containerPointToLayerPoint([i.x,i.y]).floor(),this.containerPointToLayerPoint([i.x,n.y]).floor(),this.containerPointToLayerPoint([n.x,i.y]).floor(),this.containerPointToLayerPoint([n.x,n.y]).floor()])},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var o=t.coords.latitude,e=t.coords.longitude,i=t.coords.heading,n=new L.LatLng(o,e),a=n.toBounds(t.coords.accuracy),s=this._locateOptions;if(s.setView){var r=this.getBoundsZoom(a);this.setView(n,s.maxZoom?Math.min(r,s.maxZoom):r)}var h={latlng:n,bounds:a,timestamp:t.timestamp,heading:i};for(var _ in t.coords)"number"==typeof t.coords[_]&&(h[_]=t.coords[_]);this.fire("locationfound",h)}}}),L.Map.CompassBearing=L.Handler.extend({initialize:function(t){this._map=t,"ondeviceorientationabsolute"in window?this.__deviceOrientationEvent="deviceorientationabsolute":"ondeviceorientation"in window&&(this.__deviceOrientationEvent="deviceorientation"),this._throttled=L.Util.throttle(this._onDeviceOrientation,100,this)},addHooks:function(){this._map._rotate&&this.__deviceOrientationEvent?L.DomEvent.on(window,this.__deviceOrientationEvent,this._throttled,this):this.disable()},removeHooks:function(){this._map._rotate&&this.__deviceOrientationEvent&&L.DomEvent.off(window,this.__deviceOrientationEvent,this._throttled,this)},_onDeviceOrientation:function(t){var o=t.webkitCompassHeading||t.alpha,e=0;!t.absolute&&t.webkitCompassHeading&&(o=360-o),t.absolute||void 0===window.orientation||(e=window.orientation),this._map.setBearing(o-e)}}),L.Map.addInitHook("addHandler","compassBearing",L.Map.CompassBearing),L.Map.mergeOptions({trackContainerMutation:!1}),L.Map.ContainerMutation=L.Handler.extend({addHooks:function(){this._observer||(this._observer=new MutationObserver(L.Util.bind(this._map.invalidateSize,this._map))),this._observer.observe(this._map.getContainer(),{childList:!1,attributes:!0,characterData:!1,subtree:!1,attributeFilter:["style"]})},removeHooks:function(){this._observer.disconnect()}}),L.Map.addInitHook("addHandler","trackContainerMutation",L.Map.ContainerMutation),L.Map.mergeOptions({bounceAtZoomLimits:!0}),L.Map.TouchGestures=L.Handler.extend({initialize:function(t){this._map=t,this.rotate=!!this._map.options.touchRotate,this.zoom=!!this._map.options.touchZoom},addHooks:function(){L.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){L.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var o=this._map;if(t.touches&&2===t.touches.length&&!o._animatingZoom&&!this._zooming&&!this._rotating){var e=o.mouseEventToContainerPoint(t.touches[0]),i=o.mouseEventToContainerPoint(t.touches[1]),n=e.subtract(i);this._centerPoint=o.getSize()._divideBy(2),this._startLatLng=o.containerPointToLatLng(this._centerPoint),this.zoom?("center"!==o.options.touchZoom&&(this._pinchStartLatLng=o.containerPointToLatLng(e.add(i)._divideBy(2))),this._startDist=e.distanceTo(i),this._startZoom=o.getZoom(),this._zooming=!0):this._zooming=!1,this.rotate?(this._startTheta=Math.atan(n.x/n.y),this._startBearing=o.getBearing(),n.y<0&&(this._startBearing+=180),this._rotating=!0):this._rotating=!1,this._moved=!1,o._stop(),L.DomEvent.on(document,"touchmove",this._onTouchMove,this).on(document,"touchend touchcancel",this._onTouchEnd,this),L.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&(this._zooming||this._rotating)){var o,e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),a=i.subtract(n),s=i.distanceTo(n)/this._startDist;if(this._rotating){var r=(Math.atan(a.x/a.y)-this._startTheta)*L.DomUtil.RAD_TO_DEG;a.y<0&&(r+=180),r&&e.setBearing(this._startBearing-r)}if(this._zooming)if(this._zoom=e.getScaleZoom(s,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoome.getMaxZoom()&&s>1)&&(this._zoom=e._limitZoom(this._zoom)),"center"===e.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{if(o=i._add(n)._divideBy(2)._subtract(this._centerPoint),1===s&&0===o.x&&0===o.y)return;var h=-e.getBearing()*L.DomUtil.DEG_TO_RAD;this._center=e.unproject(e.project(this._pinchStartLatLng).subtract(o.rotate(h)))}this._moved||(e._moveStart(!0,!1),this._moved=!0),L.Util.cancelAnimFrame(this._animRequest);var _=e._move.bind(e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=L.Util.requestAnimFrame(_,this,!0),this.zoom&&(this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))),L.DomEvent.preventDefault(t)}},_onTouchEnd:function(){this._moved&&(this._zooming||this._rotating)?(this._zooming=!1,this._rotating=!1,L.Util.cancelAnimFrame(this._animRequest),L.DomEvent.off(document,"touchmove",this._onTouchMove,this).off(document,"touchend touchcancel",this._onTouchEnd,this),this.zoom&&(this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom)))):this._zooming=!1}}),L.Map.addInitHook("addHandler","touchGestures",L.Map.TouchGestures),L.Map.mergeOptions({touchRotate:!1}),L.Map.TouchRotate=L.Handler.extend({addHooks:function(){this._map.touchGestures.enable(),this._map.touchGestures.rotate=!0},removeHooks:function(){this._map.touchGestures.rotate=!1}}),L.Map.addInitHook("addHandler","touchRotate",L.Map.TouchRotate),L.Map.mergeOptions({shiftKeyRotate:!0}),L.Map.ShiftKeyRotate=L.Handler.extend({addHooks:function(){L.DomEvent.on(this._map._container,"wheel",this._handleShiftScroll,this),this._map.shiftKeyRotate.rotate=!0},removeHooks:function(){L.DomEvent.off(this._map._container,"wheel",this._handleShiftScroll,this),this._map.shiftKeyRotate.rotate=!1},_handleShiftScroll:function(t){t.shiftKey?(t.preventDefault(),this._map.scrollWheelZoom.disable(),this._map.setBearing(this._map._bearing*L.DomUtil.RAD_TO_DEG+5*Math.sign(t.deltaY))):this._map.scrollWheelZoom.enable()}}),L.Map.addInitHook("addHandler","shiftKeyRotate",L.Map.ShiftKeyRotate),L.Map.addInitHook((function(){this.scrollWheelZoom.enabled()&&this.shiftKeyRotate.enabled()&&(this.scrollWheelZoom.disable(),this.scrollWheelZoom.enable())})),L.Map.mergeOptions({touchZoom:L.Browser.touch,bounceAtZoomLimits:!1}),L.Map.TouchZoom=L.Handler.extend({addHooks:function(){L.DomUtil.addClass(this._map._container,"leaflet-touch-zoom"),this._map.touchGestures.enable(),this._map.touchGestures.zoom=!0},removeHooks:function(){L.DomUtil.removeClass(this._map._container,"leaflet-touch-zoom"),this._map.touchGestures.zoom=!1}}),L.Map.addInitHook("addHandler","touchZoom",L.Map.TouchZoom),L.Control.Rotate=L.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0},onAdd:function(t){var o=this._container=L.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),e=this._arrow=L.DomUtil.create("span","leaflet-control-rotate-arrow");e.style.backgroundImage="url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\")",e.style.cursor="grab",e.style.display="block",e.style.width="100%",e.style.height="100%",e.style.backgroundRepeat="no-repeat",e.style.backgroundPosition="50%";var i=this._link=L.DomUtil.create("a","leaflet-control-rotate-toggle",o);return i.appendChild(e),i.href="#",i.title="Rotate map",L.DomEvent.on(i,"dblclick",L.DomEvent.stopPropagation).on(i,"mousedown",this._handleMouseDown,this).on(i,"click",L.DomEvent.stop).on(i,"click",this._cycleState,this).on(i,"click",this._refocusOnMap,this),L.Browser.any3d||L.DomUtil.addClass(i,"leaflet-disabled"),this._restyle(),t.on("rotate",this._restyle,this),this._follow=!1,this._canFollow=!1,this.options.closeOnZeroBearing&&0===t.getBearing()&&(o.style.display="none"),o},onRemove:function(t){t.off("rotate",this._restyle,this)},_handleMouseDown:function(t){L.DomEvent.stop(t),this.dragging=!0,this.dragstartX=t.pageX,this.dragstartY=t.pageY,L.DomEvent.on(document,"mousemove",this._handleMouseDrag,this).on(document,"mouseup",this._handleMouseUp,this)},_handleMouseUp:function(t){L.DomEvent.stop(t),this.dragging=!1,L.DomEvent.off(document,"mousemove",this._handleMouseDrag,this).off(document,"mouseup",this._handleMouseUp,this)},_handleMouseDrag:function(t){if(this.dragging){var o=t.clientX-this.dragstartX;this._map.setBearing(o)}},_cycleState:function(t){if(this._map){var o=this._map;o.touchRotate.enabled()||o.compassBearing.enabled()?o.compassBearing.enabled()?(o.compassBearing.disable(),o.setBearing(0),this.options.closeOnZeroBearing&&o.touchRotate.enable()):(o.touchRotate.disable(),(DeviceOrientationEvent&&DeviceOrientationEvent.requestPermission?DeviceOrientationEvent.requestPermission():Promise.resolve("granted")).then((t=>"granted"===t&&o.compassBearing.enable()))):o.touchRotate.enable(),this._restyle()}},_restyle:function(){if(this._map.options.rotate){var t=this._map,o=t.getBearing();this._arrow.style.transform="rotate("+o+"deg)",o&&this.options.closeOnZeroBearing&&(this._container.style.display="block"),t.compassBearing.enabled()?this._link.style.backgroundColor="orange":t.touchRotate.enabled()?this._link.style.backgroundColor=null:(this._link.style.backgroundColor="grey",0===o&&this.options.closeOnZeroBearing&&(this._container.style.display="none"))}else L.DomUtil.addClass(this._link,"leaflet-disabled")}}),L.control.rotate=function(t){return new L.Control.Rotate(t)},L.Map.mergeOptions({rotateControl:!0}),L.Map.addInitHook((function(){if(this.options.rotateControl){var t="object"==typeof this.options.rotateControl?this.options.rotateControl:{};this.rotateControl=L.control.rotate(t),this.addControl(this.rotateControl)}}))})); //# sourceMappingURL=leaflet-rotate.js.map diff --git a/dist/leaflet-rotate.js.map b/dist/leaflet-rotate.js.map index ded9660..ae4921c 100644 --- a/dist/leaflet-rotate.js.map +++ b/dist/leaflet-rotate.js.map @@ -1 +1 @@ -{"version":3,"file":"leaflet-rotate.js","sources":["../src/dom/DomUtil.js","../src/dom/Draggable.js","../src/geometry/Point.js","../src/layer/DivOverlay.js","../src/layer/Popup.js","../src/layer/Tooltip.js","../src/layer/marker/Icon.js","../src/layer/marker/Marker.js","../src/layer/tile/GridLayer.js","../src/layer/vector/Renderer.js","../src/map/Map.js","../src/map/handler/CompassBearing.js","../src/map/handler/ContainerMutation.js","../src/map/handler/TouchGestures.js","../src/map/handler/TouchRotate.js","../src/map/handler/ShiftKeyRotate.js","../src/map/handler/TouchZoom.js","../src/control/Rotate.js"],"sourcesContent":["/**\n * @external L.DomUtil\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/DomUtil.js\n */\n\nconst domUtilProto = L.extend({}, L.DomUtil);\n\nL.extend(L.DomUtil, {\n\n /**\n * Resets the 3D CSS transform of `el` so it is\n * translated by `offset` pixels and optionally\n * scaled by `scale`. Does not have an effect if\n * the browser doesn't support 3D CSS transforms.\n * \n * @param {HTMLElement} el \n * @param {L.Point} offset \n * @param {Number} scale\n * @param {Number} bearing \n * @param {L.Point} pivot \n */\n setTransform: function(el, offset, scale, bearing, pivot) {\n var pos = offset || new L.Point(0, 0);\n\n if (!bearing) {\n offset = pos._round();\n return domUtilProto.setTransform.apply(this, arguments);\n }\n\n pos = pos.rotateFrom(bearing, pivot);\n\n el.style[L.DomUtil.TRANSFORM] =\n 'translate3d(' + pos.x + 'px,' + pos.y + 'px' + ',0)' +\n (scale ? ' scale(' + scale + ')' : '') +\n ' rotate(' + bearing + 'rad)';\n },\n\n /**\n * Sets the position of `el` to coordinates specified by\n * `position`, using CSS translate or top/left positioning\n * depending on the browser (used by Leaflet internally\n * to position its layers).\n * \n * @param {HTMLElement} el \n * @param {L.Point} point \n * @param {Number} bearing\n * @param {L.Point} pivot \n * @param {Number} scale \n */\n setPosition: function(el, point, bearing, pivot, scale) {\n if (!bearing) {\n return domUtilProto.setPosition.apply(this, arguments);\n }\n\n /*eslint-disable */\n el._leaflet_pos = point;\n /*eslint-enable */\n\n if (L.Browser.any3d) {\n L.DomUtil.setTransform(el, point, scale, bearing, pivot);\n } else {\n el.style.left = point.x + 'px';\n el.style.top = point.y + 'px';\n }\n },\n\n /**\n * @constant radians = degrees × π/180°\n */\n DEG_TO_RAD: Math.PI / 180,\n\n /**\n * @constant degrees = radians × 180°/π\n */\n RAD_TO_DEG: 180 / Math.PI,\n\n});\n","/**\n * @external L.Draggable\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/Draggable.js\n */\n\n/**\n * A class for making DOM elements draggable (including touch support).\n * Used internally for map and marker dragging. Only works for elements\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\n */\n\nL.Draggable.include({\n\n /** @TODO */\n // updateMapBearing: function(mapBearing) {\n // this._mapBearing = mapBearing;\n // },\n\n});","/**\n * @external L.Point\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/geometry/Point.js\n */\n\nL.extend(L.Point.prototype, {\n\n /**\n * Rotate around (0,0) by applying the 2D rotation matrix:\n * \n * ⎡ x' ⎤ = ⎡ cos θ -sin θ ⎤ ⎡ x ⎤\n * ⎣ y' ⎦ ⎣ sin θ cos θ ⎦ ⎣ y ⎦\n * \n * @param theta must be given in radians.\n */\n rotate: function(theta) {\n return this.rotateFrom(theta, new L.Point(0,0))\n },\n\n /**\n * Rotate around (pivot.x, pivot.y) by:\n * \n * 1. subtract (pivot.x, pivot.y)\n * 2. rotate around (0, 0)\n * 3. add (pivot.x, pivot.y) back\n * \n * same as `this.subtract(pivot).rotate(theta).add(pivot)`\n * \n * @param {Number} theta \n * @param {L.Point} pivot \n * \n * @returns {L.Point}\n */\n rotateFrom: function(theta, pivot) {\n if (!theta) { return this; }\n var sinTheta = Math.sin(theta);\n var cosTheta = Math.cos(theta);\n var cx = pivot.x,\n cy = pivot.y;\n var x = this.x - cx,\n y = this.y - cy;\n\n return new L.Point(\n x * cosTheta - y * sinTheta + cx,\n x * sinTheta + y * cosTheta + cy\n );\n },\n\n});\n","/**\n * @external L.DivOverlay\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/DivOverlay.js\n */\n\nconst divOverlayProto = L.extend({}, L.DivOverlay.prototype);\n\nL.DivOverlay.include({\n\n /**\n * Update L.Popup and L.Tooltip anchor positions after\n * the map is moved by calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(divOverlayProto.getEvents.apply(this, arguments), { rotate: this._updatePosition });\n },\n\n /**\n * 0. update element anchor point (divOverlayProto v1.9.3)\n * 1. rotate around anchor point (subtract anchor -> rotate point -> add anchor)\n */\n _updatePosition: function() {\n if (!this._map) { return; }\n divOverlayProto._updatePosition.apply(this, arguments);\n if (this._map && this._map._rotate && this._zoomAnimated) {\n var anchor = this._getAnchor();\n var pos = L.DomUtil.getPosition(this._container).subtract(anchor);\n L.DomUtil.setPosition(this._container, this._map.rotatedPointToMapPanePoint(pos).add(anchor));\n }\n\n },\n\n});\n","/**\n * @external L.Popup\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/Popup.js\n */\n\nconst popupProto = L.extend({}, L.Popup.prototype);\n\nL.Popup.include({\n\n /**\n * 0. update element anchor point (popupProto v1.9.3)\n * 1. rotate around anchor point (subtract anchor -> rotate point -> add anchor)\n */\n _animateZoom: function(e) {\n popupProto._animateZoom.apply(this, arguments);\n if (this._map && this._map._rotate) {\n var anchor = this._getAnchor();\n var pos = L.DomUtil.getPosition(this._container).subtract(anchor);\n L.DomUtil.setPosition(this._container, this._map.rotatedPointToMapPanePoint(pos).add(anchor));\n }\n },\n\n /**\n * Fix for L.popup({ keepInView = true })\n * \n * @see https://github.com/fnicollet/Leaflet/pull/21\n */\n _adjustPan: function() {\n if (!this.options.autoPan || (this._map._panAnim && this._map._panAnim._inProgress)) { return; }\n\n // We can endlessly recurse if keepInView is set and the view resets.\n // Let's guard against that by exiting early if we're responding to our own autopan.\n if (this._autopanning) {\n this._autopanning = false;\n return;\n }\n\n var map = this._map,\n marginBottom = parseInt(L.DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0,\n containerHeight = this._container.offsetHeight + marginBottom,\n containerWidth = this._containerWidth,\n layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom);\n\n layerPos._add(L.DomUtil.getPosition(this._container));\n\n /** @TODO use popupProto._adjustPan */\n // var containerPos = map.layerPointToContainerPoint(layerPos);\n var containerPos = layerPos._add(this._map._getMapPanePos()),\n padding = L.point(this.options.autoPanPadding),\n paddingTL = L.point(this.options.autoPanPaddingTopLeft || padding),\n paddingBR = L.point(this.options.autoPanPaddingBottomRight || padding),\n size = map.getSize(),\n dx = 0,\n dy = 0;\n\n if (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\n dx = containerPos.x + containerWidth - size.x + paddingBR.x;\n }\n if (containerPos.x - dx - paddingTL.x < 0) { // left\n dx = containerPos.x - paddingTL.x;\n }\n if (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\n dy = containerPos.y + containerHeight - size.y + paddingBR.y;\n }\n if (containerPos.y - dy - paddingTL.y < 0) { // top\n dy = containerPos.y - paddingTL.y;\n }\n\n // @namespace Map\n // @section Popup events\n // @event autopanstart: Event\n // Fired when the map starts autopanning when opening a popup.\n if (dx || dy) {\n // Track that we're autopanning, as this function will be re-ran on moveend\n if (this.options.keepInView) {\n this._autopanning = true;\n }\n map\n .fire('autopanstart')\n .panBy([dx, dy]);\n }\n },\n\n});\n","/**\n * @external L.Tooltip\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/Tooltip.js\n */\n\nconst tooltipProto = L.extend({}, L.Tooltip.prototype);\n\nL.Tooltip.include({\n\n _animateZoom: function(e) {\n if (!this._map._rotate) {\n return tooltipProto._animateZoom.apply(this, arguments);\n }\n var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\n pos = this._map.rotatedPointToMapPanePoint(pos);\n this._setPosition(pos);\n },\n\n _updatePosition: function() {\n if (!this._map._rotate) {\n return tooltipProto._updatePosition.apply(this, arguments);\n }\n var pos = this._map.latLngToLayerPoint(this._latlng);\n\n pos = this._map.rotatedPointToMapPanePoint(pos);\n this._setPosition(pos);\n },\n\n});\n","/**\n * @external L.Icon\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Icon.js\n */\n\nconst iconProto = L.extend({}, L.Icon.prototype);\n\nL.Icon.include({\n\n _setIconStyles: function(img, name) {\n var options = this.options;\n var sizeOption = options[name + 'Size'];\n\n if (typeof sizeOption === 'number') {\n sizeOption = [sizeOption, sizeOption];\n }\n\n var size = L.point(sizeOption),\n anchor = L.point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\n size && size.divideBy(2, true));\n\n img.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\n\n if (anchor) {\n img.style.marginLeft = (-anchor.x) + 'px';\n img.style.marginTop = (-anchor.y) + 'px';\n /** @TODO use iconProto._setIconStyles */\n img.style[L.DomUtil.TRANSFORM + \"Origin\"] = anchor.x + \"px \" + anchor.y + \"px 0px\";\n }\n\n if (size) {\n img.style.width = size.x + 'px';\n img.style.height = size.y + 'px';\n }\n },\n\n});\n","/**\n * @external L.Marker\n * @external L.Handler.MarkerDrag\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Marker.js\n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Marker.Drag.js\n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/Draggable.js\n */\n\nconst markerProto = L.extend({}, L.Marker.prototype);\n\nL.Marker.mergeOptions({\n\n /**\n * Rotation of this marker in rad\n * \n * @type {Number}\n */\n rotation: 0,\n\n /**\n * Rotate this marker when map rotates\n * \n * @type {Boolean}\n */\n rotateWithView: false,\n\n /**\n * Scale of the marker icon\n * \n * @type {Number}\n */\n scale: undefined,\n\n});\n\nvar markerDragProto; // retrived at runtime (see below: L.Marker::_initInteraction())\n\nvar MarkerDrag = {\n\n // _onDragStart: function() {\n // if (!this._marker._map._rotate) {\n // return markerDragProto._onDragStart.apply(this, arguments);\n // }\n // this._draggable.updateMapBearing(this._marker._map._bearing);\n // },\n\n _onDrag: function(e) {\n var marker = this._marker,\n /** @TODO use markerDragProto._onDrag */\n rotated_marker = marker.options.rotation || marker.options.rotateWithView,\n shadow = marker._shadow,\n iconPos = L.DomUtil.getPosition(marker._icon);\n\n /** @TODO use markerDragProto._onDrag */\n // update shadow position\n if (!rotated_marker && shadow) {\n L.DomUtil.setPosition(shadow, iconPos);\n }\n\n /** @TODO use markerDragProto._onDrag */\n if (marker._map._rotate) {\n // Reverse calculation from mapPane coordinates to rotatePane coordinates\n iconPos = marker._map.mapPanePointToRotatedPoint(iconPos);\n }\n var latlng = marker._map.layerPointToLatLng(iconPos);\n\n marker._latlng = latlng;\n e.latlng = latlng;\n e.oldLatLng = this._oldLatLng;\n\n /** @TODO use markerDragProto._onDrag */\n if (rotated_marker) marker.setLatLng(latlng); // use `setLatLng` to presisit rotation. low efficiency\n else marker.fire('move', e); // `setLatLng` will trig 'move' event. we imitate here.\n\n // @event drag: Event\n // Fired repeatedly while the user drags the marker.\n marker\n .fire('drag', e);\n },\n\n _onDragEnd: function(e) {\n if (this._marker._map._rotate) {\n this._marker.update();\n }\n markerDragProto._onDragEnd.apply(this, arguments);\n },\n\n};\n\nL.Marker.include({\n\n /**\n * Update L.Marker anchor position after the map\n * is moved by calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(markerProto.getEvents.apply(this, arguments), { rotate: this.update });\n },\n\n _initInteraction: function() {\n var ret = markerProto._initInteraction.apply(this, arguments);\n if (this.dragging && this.dragging.enabled() && this._map && this._map._rotate) {\n // L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable\n markerDragProto = markerDragProto || Object.getPrototypeOf(this.dragging);\n this.dragging.disable();\n Object.assign(this.dragging, {\n // _onDragStart: MarkerDrag._onDragStart.bind(this.dragging),\n _onDrag: MarkerDrag._onDrag.bind(this.dragging),\n _onDragEnd: MarkerDrag._onDragEnd.bind(this.dragging),\n });\n this.dragging.enable();\n }\n return ret;\n },\n\n _setPos: function(pos) {\n\n /** @TODO use markerProto._setPos */\n if (this._map._rotate) {\n pos = this._map.rotatedPointToMapPanePoint(pos);\n }\n\n /** @TODO use markerProto._setPos */\n var bearing = this.options.rotation || 0;\n if (this.options.rotateWithView) {\n bearing += this._map._bearing;\n }\n\n /** @TODO use markerProto._setPos */\n if (this._icon) {\n L.DomUtil.setPosition(this._icon, pos, bearing, pos, this.options.scale);\n }\n\n /** @TODO use markerProto._setPos */\n if (this._shadow) {\n L.DomUtil.setPosition(this._shadow, pos, bearing, pos, this.options.scale);\n }\n\n this._zIndex = pos.y + this.options.zIndexOffset;\n\n this._resetZIndex();\n },\n\n // _updateZIndex: function(offset) {\n // if (!this._map._rotate) {\n // return markerProto._updateZIndex.apply(this, arguments);\n // }\n // this._icon.style.zIndex = Math.round(this._zIndex + offset);\n // },\n\n setRotation: function(rotation) {\n this.options.rotation = rotation;\n this.update();\n },\n\n});\n","/**\n * @external L.GridLayer\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/tile/GridLayer.js\n */\n\nconst gridLayerProto = L.extend({}, L.GridLayer.prototype);\n\nL.GridLayer.include({\n\n /**\n * Redraw L.TileLayer bounds after the map is\n * moved by just calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n var events = gridLayerProto.getEvents.apply(this, arguments);\n if (this._map._rotate && !this.options.updateWhenIdle) {\n if (!this._onRotate) {\n this._onRotate = L.Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n }\n events.rotate = this._onRotate;\n }\n return events;\n },\n\n _getTiledPixelBounds: function(center) {\n if (!this._map._rotate) {\n return gridLayerProto._getTiledPixelBounds.apply(this, arguments);\n }\n\n return this._map._getNewPixelBounds(center, this._tileZoom);\n },\n\n});\n","/**\n * @external L.Renderer\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/vector/Renderer.js\n */\n\nconst rendererProto = L.extend({}, L.Renderer.prototype);\n\nL.Renderer.include({\n\n /**\n * Redraw L.Canvas and L.SVG renderer bounds after the\n * map is moved by just calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(rendererProto.getEvents.apply(this, arguments), { rotate: this._update });\n },\n\n /**\n * Fix for `map.flyTo()` when `false === map.options.zoomAnimation`\n * \n * @see https://github.com/Leaflet/Leaflet/pull/8794\n */\n onAdd: function() {\n rendererProto.onAdd.apply(this, arguments);\n if (L.version <= \"1.9.3\") {\n // always keep transform-origin as 0 0\n this._container.classList.add('leaflet-zoom-animated');\n }\n },\n\n /**\n * @FIXME layer drifts on `map.setZoom()` (eg. zoom during animation)\n * \n * the main cause seems to be related to `this._updateTransform(path._center, path._zoom))`\n * and `this._topLeft = this._map.layerPointToLatLng(this._bounds.min);`\n * \n * @example\n * map.setZoom(2);\n * path._renderer._update();\n * path._renderer._updateTransform(path._renderer._center, path._renderer._zoom);\n * \n * @see https://github.com/Leaflet/Leaflet/pull/8794\n * @see https://github.com/Leaflet/Leaflet/pull/8103\n * @see https://github.com/Leaflet/Leaflet/issues/7466\n * \n * @TODO rechek this changes from leaflet@v1.9.3\n * \n * @see https://github.com/Leaflet/Leaflet/compare/v1.7.0...v1.9.3\n */\n _updateTransform: function(center, zoom) {\n if (!this._map._rotate) {\n return rendererProto._updateTransform.apply(this, arguments);\n }\n /**\n * @FIXME see path._renderer._reset();\n */\n var scale = this._map.getZoomScale(zoom, this._zoom),\n offset = this._map._latLngToNewLayerPoint(this._topLeft, zoom, center);\n\n L.DomUtil.setTransform(this._container, offset, scale);\n \n },\n\n // getEvents() {\n // const events = {\n // viewreset: this._reset,\n // zoom: this._onZoom,\n // moveend: this._update,\n // zoomend: this._onZoomEnd\n // };\n // if (this._zoomAnimated) {\n // events.zoomanim = this._onAnimZoom;\n // }\n // return events;\n // },\n\n // _onAnimZoom(ev) {\n // this._updateTransform(ev.center, ev.zoom);\n // },\n\n\t// _onZoom() {\n // this._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t// },\n\n // _onZoomEnd() {\n // for (const id in this._layers) {\n // this._layers[id]._project();\n // }\n // },\n\n // _reset() {\n // this._update();\n // this._updateTransform(this._center, this._zoom);\n\n // for (const id in this._layers) {\n // this._layers[id]._reset();\n // }\n // },\n\n // _updatePaths() {\n // for (const id in this._layers) {\n // this._layers[id]._update();\n // }\n // },\n\n _update: function() {\n if (!this._map._rotate) {\n return rendererProto._update.apply(this, arguments);\n }\n // Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n // Subclasses are responsible of firing the 'update' event.\n this._bounds = this._map._getPaddedPixelBounds(this.options.padding);\n this._topLeft = this._map.layerPointToLatLng(this._bounds.min);\n this._center = this._map.getCenter();\n this._zoom = this._map.getZoom();\n },\n\n});\n","/**\n * @external L.Map\n * \n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/Map.js\n */\n\nconst mapProto = L.extend({}, L.Map.prototype);\n\nL.Map.mergeOptions({ rotate: false, bearing: 0, });\n\nL.Map.include({\n\n /**\n * @param {(HTMLElement|String)} id html selector\n * @param {Object} [options={}] leaflet map options\n */\n initialize: function(id, options) {\n if (options.rotate) {\n this._rotate = true;\n this._bearing = 0;\n }\n mapProto.initialize.apply(this, arguments);\n if(this.options.rotate){\n this.setBearing(this.options.bearing);\n }\n },\n\n /**\n * Given a pixel coordinate relative to the map container,\n * returns the corresponding pixel coordinate relative to\n * the [origin pixel](#map-getpixelorigin).\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point} transformed pixel point\n */\n containerPointToLayerPoint: function(point) {\n if (!this._rotate) {\n return mapProto.containerPointToLayerPoint.apply(this, arguments);\n }\n return L.point(point)\n .subtract(this._getMapPanePos())\n .rotateFrom(-this._bearing, this._getRotatePanePos())\n .subtract(this._getRotatePanePos());\n },\n\n /**\n * Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\n * returns the corresponding pixel coordinate relative to the map container.\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point} transformed pixel point\n */\n layerPointToContainerPoint: function(point) {\n if (!this._rotate) {\n return mapProto.layerPointToContainerPoint.apply(this, arguments);\n }\n return L.point(point)\n .add(this._getRotatePanePos())\n .rotateFrom(this._bearing, this._getRotatePanePos())\n .add(this._getMapPanePos());\n },\n\n /**\n * Converts a coordinate from the rotated pane reference system\n * to the reference system of the not rotated map pane.\n * \n * (rotatePane) --> (mapPane)\n * (rotatePane) --> (norotatePane)\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point}\n * \n * @since leaflet-rotate (v0.1)\n */\n rotatedPointToMapPanePoint: function(point) {\n return L.point(point)\n .rotate(this._bearing)\n ._add(this._getRotatePanePos());\n },\n\n /**\n * Converts a coordinate from the not rotated map pane reference system\n * to the reference system of the rotated pane.\n * \n * (mapPane) --> (rotatePane)\n * (norotatePane) --> (rotatePane)\n * \n * @param {L.Point} point pixel screen coordinates\n * \n * @since leaflet-rotate (v0.1)\n */\n mapPanePointToRotatedPoint: function(point) {\n return L.point(point)\n ._subtract(this._getRotatePanePos())\n .rotate(-this._bearing);\n },\n\n // latLngToLayerPoint: function (latlng) {\n // var projectedPoint = this.project(L.latLng(latlng))._round();\n // return projectedPoint._subtract(this.getPixelOrigin());\n // },\n\n // latLngToContainerPoint: function (latlng) {\n\t// \treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\n\t// },\n\n /**\n * Given latlng bounds, returns the bounds in projected pixel\n * relative to the map container.\n * \n * @see https://github.com/ronikar/Leaflet/blob/5c480ef959b947c3beed7065425a5a36c486262b/src/map/Map.js#L1114-L1135\n * \n * @param {L.LatLngBounds} bounds \n * @returns {L.Bounds}\n * \n * @since leaflet-rotate (v0.2)\n */\n mapBoundsToContainerBounds: function (bounds) {\n if (!this._rotate && mapProto.mapBoundsToContainerBounds) {\n return mapProto.mapBoundsToContainerBounds.apply(this, arguments);\n }\n\n // const nw = this.latLngToContainerPoint(bounds.getNorthWest()),\n // ne = this.latLngToContainerPoint(bounds.getNorthEast()),\n // sw = this.latLngToContainerPoint(bounds.getSouthWest()),\n // se = this.latLngToContainerPoint(bounds.getSouthEast());\n\n // same as `this.latLngToContainerPoint(latlng)` but with floating point precision\n const origin = this.getPixelOrigin();\n const nw = this.layerPointToContainerPoint(this.project(bounds.getNorthWest())._subtract(origin)),\n ne = this.layerPointToContainerPoint(this.project(bounds.getNorthEast())._subtract(origin)),\n sw = this.layerPointToContainerPoint(this.project(bounds.getSouthWest())._subtract(origin)),\n se = this.layerPointToContainerPoint(this.project(bounds.getSouthEast())._subtract(origin));\n\n return L.bounds([\n L.point(Math.min(nw.x, ne.x, se.x, sw.x), Math.min(nw.y, ne.y, se.y, sw.y)), // [ minX, minY ]\n L.point(Math.max(nw.x, ne.x, se.x, sw.x), Math.max(nw.y, ne.y, se.y, sw.y)) // [ maxX, maxY ]\n ]);\n },\n\n /**\n * Returns geographical bounds visible in the current map view\n * \n * @TODO find out if map bounds calculated by `L.Map::getBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n * \n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @returns {L.LatLngBounds}\n */\n getBounds: function() {\n if (!this._rotate) {\n return mapProto.getBounds.apply(this, arguments);\n }\n\n // SEE: https://github.com/fnicollet/Leaflet/pull/22\n //\n // var bounds = this.getPixelBounds(),\n // sw = this.unproject(bounds.getBottomLeft()),\n // ne = this.unproject(bounds.getTopRight());\n // return new LatLngBounds(sw, ne);\n //\n\n // LatLngBounds' constructor automatically\n // extends the bounds to fit the passed points\n var size = this.getSize();\n return new L.LatLngBounds([\n this.containerPointToLatLng([0, 0]), // topleft\n this.containerPointToLatLng([size.x, 0]), // topright \n this.containerPointToLatLng([size.x, size.y]), // bottomright\n this.containerPointToLatLng([0, size.y]), // bottomleft\n ]);\n },\n\n /**\n * Returns the bounds of the current map view in projected pixel\n * coordinates (sometimes useful in layer and overlay implementations).\n * \n * @TODO find out if map bounds calculated by `L.Map::getPixelBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n *\n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @returns {L.Bounds}\n */\n // getPixelBounds(center, zoom) {\n // // const topLeftPoint = map.containerPointToLayerPoint(this._getTopLeftPoint());\n // const topLeftPoint = this._getTopLeftPoint(center, zoom);\n // return new L.Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\n // },\n\n /**\n * Change map rotation\n * \n * @param {number} theta map degrees\n * \n * @since leaflet-rotate (v0.1)\n */\n setBearing: function(theta) {\n if (!L.Browser.any3d || !this._rotate) { return; }\n\n var bearing = L.Util.wrapNum(theta, [0, 360]) * L.DomUtil.DEG_TO_RAD,\n center = this._getPixelCenter(),\n oldPos = this._getRotatePanePos().rotateFrom(-this._bearing, center),\n newPos = oldPos.rotateFrom(bearing, center);\n\n // CSS transform\n L.DomUtil.setPosition(this._rotatePane, oldPos, bearing, center);\n\n this._pivot = center;\n this._bearing = bearing;\n this._rotatePanePos = newPos;\n\n this.fire('rotate');\n },\n\n /**\n * Get current map rotation\n * \n * @returns {number} theta map degrees\n * \n * @since leaflet-rotate (v0.1)\n */\n getBearing: function() {\n return this._bearing * L.DomUtil.RAD_TO_DEG;\n },\n\n /**\n * Creates a new [map pane](#map-pane) with the given name if it doesn't\n * exist already, then returns it. The pane is created as a child of\n * `container`, or as a child of the main map pane if not set.\n * \n * @param {String} name leaflet pane\n * @param {HTMLElement} [container] parent element\n * @returns {HTMLElement} pane container\n */\n // createPane: function(name, container) {\n // if (!this._rotate || name == 'mapPane') {\n // return mapProto.createPane.apply(this, arguments);\n // }\n // // init \"rotatePane\"\n // if (!this._rotatePane) {\n // // this._pivot = this.getSize().divideBy(2);\n // this._rotatePane = mapProto.createPane.call(this, 'rotatePane', this._mapPane);\n // L.DomUtil.setPosition(this._rotatePane, new L.Point(0, 0), this._bearing, this._pivot);\n // }\n // return mapProto.createPane.call(this, name, container || this._rotatePane);\n // },\n\n /**\n * Panes are DOM elements used to control the ordering of layers on\n * the map. You can access panes with [`map.getPane`](#map-getpane)\n * or [`map.getPanes`](#map-getpanes) methods. New panes can be created\n * with the [`map.createPane`](#map-createpane) method.\n * \n * Every map has the following default panes that differ only in zIndex:\n * \n * - mapPane [HTMLElement = 'auto'] - Pane that contains all other map panes\n * - tilePane [HTMLElement = 2] - Pane for tile layers\n * - overlayPane [HTMLElement = 4] - Pane for overlays like polylines and polygons\n * - shadowPane [HTMLElement = 5] - Pane for overlay shadows (e.g. marker shadows)\n * - markerPane [HTMLElement = 6] - Pane for marker icons\n * - tooltipPane [HTMLElement = 650] - Pane for tooltips.\n * - popupPane [HTMLElement = 700] - Pane for popups.\n */\n _initPanes: function() {\n var panes = this._panes = {};\n this._paneRenderers = {};\n\n this._mapPane = this.createPane('mapPane', this._container);\n L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));\n\n if (this._rotate) {\n this._rotatePane = this.createPane('rotatePane', this._mapPane);\n this._norotatePane = this.createPane('norotatePane', this._mapPane);\n // rotatePane\n this.createPane('tilePane', this._rotatePane);\n this.createPane('overlayPane', this._rotatePane);\n // norotatePane\n this.createPane('shadowPane', this._norotatePane);\n this.createPane('markerPane', this._norotatePane);\n this.createPane('tooltipPane', this._norotatePane);\n this.createPane('popupPane', this._norotatePane);\n } else {\n this.createPane('tilePane');\n this.createPane('overlayPane');\n this.createPane('shadowPane');\n this.createPane('markerPane');\n this.createPane('tooltipPane');\n this.createPane('popupPane');\n }\n\n if (!this.options.markerZoomAnimation) {\n L.DomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\n L.DomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\n }\n },\n\n /**\n * Pans the map the minimum amount to make the `latlng` visible. Use\n * padding options to fit the display to more restricted bounds.\n * If `latlng` is already within the (optionally padded) display bounds,\n * the map will not be panned.\n * \n * @see https://github.com/Raruto/leaflet-rotate/issues/18\n * \n * @param {L.LatLng} latlng coordinates\n * @param {Object} [options={}] padding options\n * \n * @returns {L.Map} current map instance\n */\n panInside(latlng, options) {\n if (!this._rotate || Math.abs(this._bearing).toFixed(1) < 0.1) {\n return mapProto.panInside.apply(this, arguments);\n }\n\n options = options || {};\n\n const paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),\n paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]),\n /** @TODO use mapProto.panInside */\n // pixelPoint = this.project(latlng),\n // pixelBounds = this.getPixelBounds(),\n // pixelCenter = this.project(this.getCenter()),\n rect = this._container.getBoundingClientRect(),\n pixelPoint = this.latLngToContainerPoint(latlng),\n pixelBounds = L.bounds([ L.point(rect), L.point(rect).add(this.getSize()) ]),\n pixelCenter = pixelBounds.getCenter(),\n //\n paddedBounds = L.bounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),\n paddedSize = paddedBounds.getSize();\n \n if (!paddedBounds.contains(pixelPoint)) {\n this._enforcingBounds = true;\n const centerOffset = pixelPoint.subtract(paddedBounds.getCenter());\n const offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);\n pixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;\n pixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;\n /** @TODO use mapProto.panInside */\n // this.panTo(this.unproject(pixelCenter), options);\n this.panTo(this.containerPointToLatLng(pixelCenter), options);\n //\n this._enforcingBounds = false;\n }\n return this;\n },\n\n /**\n * Pans the map to the closest view that would lie inside the given bounds\n * (if it's not already), controlling the animation using the options specific,\n * if any.\n * \n * @TODO check if map bounds calculated by `L.Map::panInsideBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n *\n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @param {L.LatLngBounds} bounds coordinates\n * @param {Object} [options] pan options\n * @returns {L.Map} current map instance\n */\n // panInsideBounds: function (bounds, options) {\n // this._enforcingBounds = true;\n // var center = this.getCenter(),\n // newCenter = this._limitCenter(center, this._zoom, L.latLngBounds(bounds));\n //\n // if (!center.equals(newCenter)) {\n // this.panTo(newCenter, options);\n // }\n //\n // this._enforcingBounds = false;\n // return this;\n // },\n\n // adjust center for view to get inside bounds\n // _limitCenter(center, zoom, bounds) {\n //\n // if (!bounds) { return center; }\n //\n // const centerPoint = this.project(center, zoom),\n // viewHalf = this.getSize().divideBy(2),\n // viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\n // offset = this._getBoundsOffset(viewBounds, bounds, zoom);\n //\n // // If offset is less than a pixel, ignore.\n // // This prevents unstable projections from getting into\n // // an infinite loop of tiny offsets.\n // if (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {\n // return center;\n // }\n //\n // return this.unproject(centerPoint.add(offset), zoom);\n // },\n\n // @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\n // Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\n // but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\n // flyToBounds(bounds, options) {\n // const target = this._getBoundsCenterZoom(bounds, options);\n // return this.flyTo(target.center, target.zoom, options);\n // },\n\n // _getBoundsCenterZoom(bounds, options) {\n //\n // options = options || {};\n // bounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\n //\n // const paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),\n // paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]);\n //\n // let zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\n //\n // zoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\n //\n // if (zoom === Infinity) {\n // return { center: bounds.getCenter(), zoom };\n // }\n //\n // return { center, zoom };\n //\n // },\n\n /**\n * Returns the maximum zoom level on which the given bounds fit to the map\n * view in its entirety. If `inside` (optional) is set to `true`, the method\n * instead returns the minimum zoom level on which the map view fits into\n * the given bounds in its entirety.\n * \n * @param {L.LatLngBounds} bounds\n * @param {Boolean} [inside=false]\n * @param {L.Point} [padding=[0,0]]\n * \n * @returns {Number} zoom level\n */\n getBoundsZoom(bounds, inside, padding) {\n if (!this._rotate || Math.abs(this._bearing).toFixed(1) < 0.1) {\n return mapProto.getBoundsZoom.apply(this, arguments);\n }\n\n bounds = L.latLngBounds(bounds);\n padding = L.point(padding || [0, 0]);\n\n let zoom = this.getZoom() || 0;\n const min = this.getMinZoom(),\n max = this.getMaxZoom(),\n /** @TODO use mapProto.getBoundsZoom */\n // nw = bounds.getNorthWest(),\n // se = bounds.getSouthEast(),\n // size = this.getSize().subtract(padding),\n // boundsSize = L.bounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\n size = this.getSize().subtract(padding),\n boundsSize = this.mapBoundsToContainerBounds(bounds).getSize(),\n snap = this.options.zoomSnap,\n scalex = size.x / boundsSize.x,\n scaley = size.y / boundsSize.y,\n scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\n\n zoom = this.getScaleZoom(scale, zoom);\n\n if (snap) {\n zoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\n zoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\n }\n\n return Math.max(min, Math.min(max, zoom));\n },\n\n /**\n * Layer point of the current center\n * \n * @returns {L.Point} layer center\n */\n // _getCenterLayerPoint: function () {\n // return this.containerPointToLayerPoint(this.getSize()._divideBy(2));\n // },\n\n /**\n * Offset of the specified place to the current center in pixels\n * \n * @param {L.LatLng} latlng map coordinates\n */\n _getCenterOffset: function(latlng) {\n var centerOffset = mapProto._getCenterOffset.apply(this, arguments);\n if (this._rotate) {\n centerOffset = centerOffset.rotate(this._bearing);\n }\n return centerOffset;\n },\n\n /**\n * @since leaflet-rotate (v0.1)\n */\n _getRotatePanePos: function() {\n return this._rotatePanePos || new L.Point(0, 0);\n // return L.DomUtil.getPosition(this._rotatePane) || new L.Point(0, 0);\n },\n\n // _latLngToNewLayerPoint(latlng, zoom, center) {\n // const topLeft = this._getNewPixelOrigin(center, zoom);\n // return this.project(latlng, zoom)._subtract(topLeft);\n //},\n\n _getNewPixelOrigin: function(center, zoom) {\n if (!this._rotate) {\n return mapProto._getNewPixelOrigin.apply(this, arguments);\n }\n var viewHalf = this.getSize()._divideBy(2);\n return this.project(center, zoom)\n .rotate(this._bearing)\n ._subtract(viewHalf)\n ._add(this._getMapPanePos())\n ._add(this._getRotatePanePos())\n .rotate(-this._bearing)\n ._round();\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @see src\\layer\\tile\\GridLayer::_getTiledPixelBounds()\n */\n _getNewPixelBounds: function(center, zoom) {\n center = center || this.getCenter();\n zoom = zoom || this.getZoom();\n if (!this._rotate && mapProto._getNewPixelBounds) {\n return mapProto._getNewPixelBounds.apply(this, arguments);\n }\n var mapZoom = this._animatingZoom ? Math.max(this._animateToZoom, this.getZoom()) : this.getZoom(),\n scale = this.getZoomScale(mapZoom, zoom),\n pixelCenter = this.project(center, zoom).floor(),\n size = this.getSize(),\n halfSize = new L.Bounds([\n this.containerPointToLayerPoint([0, 0]).floor(),\n this.containerPointToLayerPoint([size.x, 0]).floor(),\n this.containerPointToLayerPoint([0, size.y]).floor(),\n this.containerPointToLayerPoint([size.x, size.y]).floor()\n ]).getSize().divideBy(scale * 2);\n\n return new L.Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @return {L.Point} map pivot point (center)\n */\n _getPixelCenter: function() {\n if (!this._rotate && mapProto._getPixelCenter) {\n return mapProto._getPixelCenter.apply(this, arguments);\n }\n return this.getSize()._divideBy(2)._subtract(this._getMapPanePos());\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @see src\\layer\\vector\\Renderer::_update()\n */\n _getPaddedPixelBounds: function(padding) {\n if (!this._rotate && mapProto._getPaddedPixelBounds) {\n return mapProto._getPaddedPixelBounds.apply(this, arguments);\n }\n var p = padding,\n size = this.getSize(),\n padMin = size.multiplyBy(-p),\n padMax = size.multiplyBy(1 + p);\n //min = this.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n return new L.Bounds([\n this.containerPointToLayerPoint([padMin.x, padMin.y]).floor(),\n this.containerPointToLayerPoint([padMin.x, padMax.y]).floor(),\n this.containerPointToLayerPoint([padMax.x, padMin.y]).floor(),\n this.containerPointToLayerPoint([padMax.x, padMax.y]).floor()\n ]);\n },\n\n _handleGeolocationResponse: function(pos) {\n if (!this._container._leaflet_id) { return; }\n\n var lat = pos.coords.latitude,\n lng = pos.coords.longitude,\n /** @TODO use mapProto._handleGeolocationResponse */\n hdg = pos.coords.heading,\n latlng = new L.LatLng(lat, lng),\n bounds = latlng.toBounds(pos.coords.accuracy),\n options = this._locateOptions;\n\n if (options.setView) {\n var zoom = this.getBoundsZoom(bounds);\n this.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\n }\n\n var data = {\n latlng: latlng,\n bounds: bounds,\n timestamp: pos.timestamp,\n /** @TODO use mapProto._handleGeolocationResponse */\n heading: hdg\n };\n\n for (var i in pos.coords) {\n if (typeof pos.coords[i] === 'number') {\n data[i] = pos.coords[i];\n }\n }\n\n // @event locationfound: LocationEvent\n // Fired when geolocation (using the [`locate`](#map-locate) method)\n // went successfully.\n this.fire('locationfound', data);\n },\n\n /**\n * @see https://github.com/ronikar/Leaflet/blob/5c480ef959b947c3beed7065425a5a36c486262b/src/geo/LatLngBounds.js#L253-L264\n * \n * @param {L.Bounds} points \n * @returns {L.Bounds}\n */\n // toCircumscribedBounds(points) {\n // var minX = points.reduce(function (pv, v) { return Math.min(pv, v.x); }, points[0].x),\n // maxX = points.reduce(function (pv, v) { return Math.max(pv, v.x); }, points[0].x),\n // minY = points.reduce(function (pv, v) { return Math.min(pv, v.y); }, points[0].y),\n // maxY = points.reduce(function (pv, v) { return Math.max(pv, v.y); }, points[0].y);\n //\n // return L.bounds(L.point(minX, minY), L.point(maxX, maxY));\n // },\n\n});\n","/**\n * Rotates the map according to a smartphone's compass.\n * \n * @typedef L.Map.CompassBearing\n */\n\nL.Map.CompassBearing = L.Handler.extend({\n\n initialize: function(map) {\n this._map = map;\n /** @see https://caniuse.com/?search=DeviceOrientation */\n if ('ondeviceorientationabsolute' in window) {\n this.__deviceOrientationEvent = 'deviceorientationabsolute';\n } else if('ondeviceorientation' in window) {\n this.__deviceOrientationEvent = 'deviceorientation';\n }\n this._throttled = L.Util.throttle(this._onDeviceOrientation, 100, this);\n },\n\n addHooks: function() {\n if (this._map._rotate && this.__deviceOrientationEvent) {\n L.DomEvent.on(window, this.__deviceOrientationEvent, this._throttled, this);\n } else {\n // L.Map.CompassBearing handler will be automatically\n // disabled if device orientation is not supported.\n this.disable();\n }\n },\n\n removeHooks: function() {\n if (this._map._rotate && this.__deviceOrientationEvent) {\n L.DomEvent.off(window, this.__deviceOrientationEvent, this._throttled, this);\n }\n },\n\n /**\n * `DeviceOrientationEvent.absolute` - Indicates whether the device is providing absolute\n * orientation values (relatives to Magnetic North) or\n * using some arbitrary frame determined by the device.\n * \n * `DeviceOrientationEvent.alpha` - Returns the rotation of the device around the Z axis;\n * that is, the number of degrees by which the device is\n * being twisted around the center of the screen.\n * \n * `window.orientation` - Returns the screen orientation in degrees (in 90-degree increments)\n * of the viewport relative to the device's natural orientation.\n * Its only possible values are -90, 0, 90, and 180. Positive\n * values are counterclockwise; negative values are clockwise.\n * \n * @see https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/absolute\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/alpha\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/orientation\n */\n _onDeviceOrientation: function(e) {\n var angle = e.webkitCompassHeading || e.alpha;\n var deviceOrientation = 0;\n\n // Safari iOS\n if (!e.absolute && e.webkitCompassHeading) {\n angle = 360 - angle;\n }\n\n // Older browsers\n if (!e.absolute && 'undefined' !== typeof window.orientation) {\n deviceOrientation = window.orientation;\n }\n\n this._map.setBearing(angle - deviceOrientation);\n },\n\n});\n\n/**\n * Add Compass bearing handler to L.Map (disabled unless `window.DeviceOrientationEvent` is set).\n * \n * @property {L.Map.CompassBearing} compassBearing\n */\nL.Map.addInitHook('addHandler', 'compassBearing', L.Map.CompassBearing);\n","/**\n * Triggers `invalidateResize` when the map's DOM container mutates.\n * \n * @typedef L.Map.ContainerMutation\n */\n\n/**\n * @TODO check again this file after leaflet v1.9.3 (eg. L.Browser.mutation).\n * Mutation Observer support will likely be added by default in next releases.\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map uses mutation observers to\n * detect changes in its container and trigger\n * `invalidateSize`. Disabled by default due to\n * support not being available in all web browsers.\n *\n * @type {Boolean}\n * \n * @see https://developer.mozilla.org/docs/Web/API/MutationObserver\n */\n trackContainerMutation: false\n\n});\n\nL.Map.ContainerMutation = L.Handler.extend({\n\n addHooks: function() {\n // if (!L.Browser.mutation) { return; }\n if (!this._observer) {\n this._observer = new MutationObserver(L.Util.bind(this._map.invalidateSize, this._map));\n }\n this._observer.observe(this._map.getContainer(), {\n childList: false,\n attributes: true,\n characterData: false,\n subtree: false,\n attributeFilter: ['style']\n });\n },\n\n removeHooks: function() {\n // if (!L.Browser.mutation) { return; }\n this._observer.disconnect();\n },\n\n});\n\n/**\n * Add Container mutation handler to L.Map (disabled unless `trackContainerMutation` is set).\n * \n * @property {L.Map.ContainerMutation} trackContainerMutation\n */\nL.Map.addInitHook('addHandler', 'trackContainerMutation', L.Map.ContainerMutation);\n","/**\n * TouchGestures is both TouchZoom plus TouchRotate\n * \n * @see https://github.com/fnicollet/Leaflet/commit/a77af51a6b10f308d1b9a16552091d1d0aee8834\n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/handler/Map.TouchZoom.js\n * \n * @typedef L.Map.TouchGestures\n */\n\nL.Map.mergeOptions({\n\n /**\n * Set it to false if you don't want the map to\n * zoom beyond min/max zoom and then bounce back\n * when pinch-zooming.\n * \n * @type {Boolean}\n */\n bounceAtZoomLimits: true,\n\n});\n\nL.Map.TouchGestures = L.Handler.extend({\n\n initialize: function(map) {\n this._map = map;\n this.rotate = !!this._map.options.touchRotate;\n this.zoom = !!this._map.options.touchZoom;\n },\n\n addHooks: function() {\n L.DomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n },\n\n removeHooks: function() {\n L.DomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n },\n\n _onTouchStart: function(e) {\n var map = this._map;\n\n if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming || this._rotating) { return; }\n\n var p1 = map.mouseEventToContainerPoint(e.touches[0]),\n p2 = map.mouseEventToContainerPoint(e.touches[1]),\n vector = p1.subtract(p2);\n\n this._centerPoint = map.getSize()._divideBy(2);\n this._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\n if (this.zoom) {\n if (map.options.touchZoom !== 'center') {\n this._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n }\n this._startDist = p1.distanceTo(p2);\n this._startZoom = map.getZoom();\n this._zooming = true;\n } else {\n this._zooming = false;\n }\n\n if (this.rotate) {\n this._startTheta = Math.atan(vector.x / vector.y);\n this._startBearing = map.getBearing();\n if (vector.y < 0) { this._startBearing += 180; }\n this._rotating = true;\n } else {\n this._rotating = false;\n }\n\n this._moved = false;\n\n map._stop();\n\n L.DomEvent\n .on(document, 'touchmove', this._onTouchMove, this)\n .on(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n L.DomEvent.preventDefault(e);\n },\n\n _onTouchMove: function(e) {\n if (!e.touches || e.touches.length !== 2 || !(this._zooming || this._rotating)) { return; }\n\n var map = this._map,\n p1 = map.mouseEventToContainerPoint(e.touches[0]),\n p2 = map.mouseEventToContainerPoint(e.touches[1]),\n vector = p1.subtract(p2),\n scale = p1.distanceTo(p2) / this._startDist,\n delta;\n\n if (this._rotating) {\n var theta = Math.atan(vector.x / vector.y);\n var bearingDelta = (theta - this._startTheta) * L.DomUtil.RAD_TO_DEG;\n if (vector.y < 0) { bearingDelta += 180; }\n if (bearingDelta) {\n /**\n * @TODO the pivot should be the last touch point,\n * but zoomAnimation manages to overwrite the rotate\n * pane position. Maybe related to #3529.\n * \n * @see https://github.com/Leaflet/Leaflet/pull/3529\n * @see https://github.com/fnicollet/Leaflet/commit/a77af51a6b10f308d1b9a16552091d1d0aee8834\n */\n map.setBearing(this._startBearing - bearingDelta);\n }\n }\n\n if (this._zooming) {\n this._zoom = map.getScaleZoom(scale, this._startZoom);\n\n if (!map.options.bounceAtZoomLimits && (\n (this._zoom < map.getMinZoom() && scale < 1) ||\n (this._zoom > map.getMaxZoom() && scale > 1))) {\n this._zoom = map._limitZoom(this._zoom);\n }\n\n if (map.options.touchZoom === 'center') {\n this._center = this._startLatLng;\n if (scale === 1) { return; }\n } else {\n // Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n if (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\n var alpha = -map.getBearing() * L.DomUtil.DEG_TO_RAD;\n\n this._center = map.unproject(map.project(this._pinchStartLatLng).subtract(delta.rotate(alpha)));\n }\n\n }\n\n if (!this._moved) {\n map._moveStart(true, false);\n this._moved = true;\n }\n\n L.Util.cancelAnimFrame(this._animRequest);\n\n var moveFn = map._move.bind(map, this._center, this._zoom, { pinch: true, round: false }, undefined);\n this._animRequest = L.Util.requestAnimFrame(moveFn, this, true);\n\n L.DomEvent.preventDefault(e);\n },\n\n _onTouchEnd: function() {\n if (!this._moved || !(this._zooming || this._rotating)) {\n this._zooming = false;\n return;\n }\n\n this._zooming = false;\n this._rotating = false;\n L.Util.cancelAnimFrame(this._animRequest);\n\n L.DomEvent\n .off(document, 'touchmove', this._onTouchMove, this)\n .off(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n if (this.zoom) {\n // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n if (this._map.options.zoomAnimation) {\n this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n } else {\n this._map._resetView(this._center, this._map._limitZoom(this._zoom));\n }\n }\n },\n\n});\n\n/**\n * Add Touch Gestures handler (enabled unless `touchGestures` is unset).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchGestures', L.Map.TouchGestures);\n","/**\n * Rotates the map on two-finger (touch devices).\n * \n * @typedef L.Map.TouchRotate\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be rotated with a two-finger rotation gesture\n * \n * @type {Boolean}\n */\n touchRotate: false,\n\n});\n\nL.Map.TouchRotate = L.Handler.extend({\n\n addHooks: function() {\n this._map.touchGestures.enable();\n this._map.touchGestures.rotate = true;\n },\n\n removeHooks: function() {\n this._map.touchGestures.rotate = false;\n },\n\n});\n\n/**\n * Add Touch Rotate handler (disabled unless `touchGestures` is set).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchRotate', L.Map.TouchRotate);\n","\n/**\n * Rotates the map on shift key + mousewheel scrolling (desktop).\n * \n * @typedef L.Map.ShiftKeyRotate\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be rotated with shift + wheel scroll\n * @type {Boolean}\n */\n shiftKeyRotate: true,\n\n});\n\nL.Map.ShiftKeyRotate = L.Handler.extend({\n\n addHooks: function() {\n L.DomEvent.on(this._map._container, \"wheel\", this._handleShiftScroll, this);\n // this._map.shiftKeyRotate.enable();\n this._map.shiftKeyRotate.rotate = true;\n },\n\n removeHooks: function() {\n L.DomEvent.off(this._map._container, \"wheel\", this._handleShiftScroll, this);\n this._map.shiftKeyRotate.rotate = false;\n },\n\n _handleShiftScroll: function(e) {\n if (e.shiftKey) {\n e.preventDefault();\n this._map.scrollWheelZoom.disable();\n this._map.setBearing((this._map._bearing * L.DomUtil.RAD_TO_DEG) + Math.sign(e.deltaY) * 5);\n } else {\n this._map.scrollWheelZoom.enable();\n }\n },\n\n});\n\n/**\n * Add ShiftKey handler to L.Map (enabled unless `shiftKeyRotate` is unset).\n * \n * @property {L.Map.ShiftKeyRotate} shiftKeyRotate\n */\nL.Map.addInitHook('addHandler', 'shiftKeyRotate', L.Map.ShiftKeyRotate);\n\n// decrease `scrollWheelZoom` handler priority over `shiftKeyRotate` handler\nL.Map.addInitHook(function() {\n if (this.scrollWheelZoom.enabled() && this.shiftKeyRotate.enabled()) {\n this.scrollWheelZoom.disable();\n this.scrollWheelZoom.enable();\n }\n});\n","/**\n * Adds pinch zoom rotation on mobile browsers\n * \n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/handler/Map.TouchZoom.js\n * \n * @external L.Map.TouchZoom\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be zoomed by touch-dragging\n * with two fingers. If passed `'center'`, it will\n * zoom to the center of the view regardless of\n * where the touch events (fingers) were. Enabled\n * for touch-capable web browsers.\n * \n * @type {(Boolean|String)}\n */\n touchZoom: L.Browser.touch,\n\n /**\n * @TODO check if this is a duplicate of `L.Map.TouchGestures::bounceAtZoomLimits`\n * \n * Set it to false if you don't want the map to\n * zoom beyond min/max zoom and then bounce back\n * when pinch-zooming.\n * \n * @type {Boolean}\n */\n bounceAtZoomLimits: false,\n\n});\n\nL.Map.TouchZoom = L.Handler.extend({\n\n addHooks: function() {\n L.DomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n this._map.touchGestures.enable();\n this._map.touchGestures.zoom = true;\n },\n\n removeHooks: function() {\n L.DomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n this._map.touchGestures.zoom = false;\n },\n\n});\n\n/**\n * Add Touch Zoom handler (disabled unless `L.Browser.touch` is set).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchZoom', L.Map.TouchZoom);\n","/**\n * A tri-state control for map rotation, states are:\n * \n * - Locked (default)\n * - Unlocked (user can pinch-rotate)\n * - Follow (rotation follows device orientation, if available)\n * \n * @typedef L.Control.Rotate\n */\n\nL.Control.Rotate = L.Control.extend({\n\n options: {\n position: 'topleft',\n closeOnZeroBearing: true\n },\n\n onAdd: function(map) {\n var container = this._container = L.DomUtil.create('div', 'leaflet-control-rotate leaflet-bar');\n\n // this.button = L.Control.Zoom.prototype._createButton.call(this, 'R', 'leaflet-control-rotate', 'leaflet-control-rotate', container, this._toggleLock);\n\n var arrow = this._arrow = L.DomUtil.create('span', 'leaflet-control-rotate-arrow');\n\n arrow.style.backgroundImage = `url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\")`;\n arrow.style.cursor = 'grab';\n arrow.style.display = 'block';\n arrow.style.width = '100%';\n arrow.style.height = '100%';\n arrow.style.backgroundRepeat = 'no-repeat';\n arrow.style.backgroundPosition = '50%';\n\n // Copy-pasted from L.Control.Zoom\n var link = this._link = L.DomUtil.create('a', 'leaflet-control-rotate-toggle', container);\n link.appendChild(arrow);\n link.href = '#';\n link.title = 'Rotate map';\n\n L.DomEvent\n .on(link, 'dblclick', L.DomEvent.stopPropagation)\n .on(link, 'mousedown', this._handleMouseDown, this)\n .on(link, 'click', L.DomEvent.stop)\n .on(link, 'click', this._cycleState, this)\n .on(link, 'click', this._refocusOnMap, this);\n\n if (!L.Browser.any3d) {\n L.DomUtil.addClass(link, 'leaflet-disabled');\n }\n\n this._restyle();\n\n map.on('rotate', this._restyle, this);\n\n // State flag\n this._follow = false;\n this._canFollow = false;\n\n if (this.options.closeOnZeroBearing && map.getBearing() === 0) {\n container.style.display = 'none';\n }\n\n return container;\n },\n \n onRemove: function(map) {\n map.off('rotate', this._restyle, this);\n },\n\n _handleMouseDown: function(e) {\n L.DomEvent.stop(e);\n this.dragging = true;\n this.dragstartX = e.pageX;\n this.dragstartY = e.pageY;\n L.DomEvent\n .on(document, 'mousemove', this._handleMouseDrag, this)\n .on(document, 'mouseup', this._handleMouseUp, this);\n },\n\n _handleMouseUp: function(e) {\n L.DomEvent.stop(e);\n this.dragging = false;\n\n L.DomEvent\n .off(document, 'mousemove', this._handleMouseDrag, this)\n .off(document, 'mouseup', this._handleMouseUp, this);\n },\n\n _handleMouseDrag: function(e) {\n if (!this.dragging) { return; }\n var deltaX = e.clientX - this.dragstartX;\n this._map.setBearing(deltaX);\n },\n\n _cycleState: function(ev) {\n if (!this._map) {\n return;\n }\n\n var map = this._map;\n\n // Touch mode\n if (!map.touchRotate.enabled() && !map.compassBearing.enabled()) {\n map.touchRotate.enable();\n }\n \n // Compass mode\n else if (!map.compassBearing.enabled()) {\n map.touchRotate.disable();\n (\n DeviceOrientationEvent && DeviceOrientationEvent.requestPermission\n ? DeviceOrientationEvent.requestPermission() // iOS compass\n : Promise.resolve('granted') // others\n ).then(state => \"granted\" === state && map.compassBearing.enable())\n }\n\n // Locked mode\n else {\n map.compassBearing.disable();\n map.setBearing(0);\n if (this.options.closeOnZeroBearing) {\n map.touchRotate.enable();\n }\n }\n this._restyle();\n },\n\n _restyle: function() {\n if (!this._map.options.rotate) {\n L.DomUtil.addClass(this._link, 'leaflet-disabled');\n } else {\n var map = this._map;\n var bearing = map.getBearing();\n\n this._arrow.style.transform = 'rotate(' + bearing + 'deg)';\n\n if (bearing && this.options.closeOnZeroBearing) {\n this._container.style.display = 'block';\n }\n\n // Compass mode\n if (map.compassBearing.enabled()) {\n this._link.style.backgroundColor = 'orange';\n }\n \n // Touch mode\n else if (map.touchRotate.enabled()) {\n this._link.style.backgroundColor = null;\n }\n\n // Locked mode\n else {\n this._link.style.backgroundColor = 'grey';\n if (0 === bearing && this.options.closeOnZeroBearing) {\n this._container.style.display = 'none';\n }\n }\n }\n },\n\n});\n\nL.control.rotate = function(options) {\n return new L.Control.Rotate(options);\n};\n\nL.Map.mergeOptions({\n rotateControl: true,\n});\n\nL.Map.addInitHook(function() {\n if (this.options.rotateControl) {\n var options = typeof this.options.rotateControl === 'object' ? this.options.rotateControl : {};\n this.rotateControl = L.control.rotate(options);\n this.addControl(this.rotateControl);\n }\n});\n"],"names":["domUtilProto","L","extend","DomUtil","setTransform","el","offset","scale","bearing","pivot","pos","Point","_round","apply","this","arguments","rotateFrom","style","TRANSFORM","x","y","setPosition","point","_leaflet_pos","Browser","any3d","left","top","DEG_TO_RAD","Math","PI","RAD_TO_DEG","Draggable","include","prototype","rotate","theta","sinTheta","sin","cosTheta","cos","cx","cy","divOverlayProto","DivOverlay","getEvents","_updatePosition","_map","_rotate","_zoomAnimated","anchor","_getAnchor","getPosition","_container","subtract","rotatedPointToMapPanePoint","add","popupProto","Popup","_animateZoom","e","_adjustPan","options","autoPan","_panAnim","_inProgress","_autopanning","map","marginBottom","parseInt","getStyle","containerHeight","offsetHeight","containerWidth","_containerWidth","layerPos","_containerLeft","_containerBottom","_add","containerPos","_getMapPanePos","padding","autoPanPadding","paddingTL","autoPanPaddingTopLeft","paddingBR","autoPanPaddingBottomRight","size","getSize","dx","dy","keepInView","fire","panBy","tooltipProto","Tooltip","_latLngToNewLayerPoint","_latlng","zoom","center","_setPosition","latLngToLayerPoint","Icon","_setIconStyles","img","name","sizeOption","shadowAnchor","iconAnchor","divideBy","className","marginLeft","marginTop","width","height","markerProto","Marker","markerDragProto","mergeOptions","rotation","rotateWithView","undefined","MarkerDrag","_onDrag","marker","_marker","rotated_marker","shadow","_shadow","iconPos","_icon","mapPanePointToRotatedPoint","latlng","layerPointToLatLng","oldLatLng","_oldLatLng","setLatLng","_onDragEnd","update","_initInteraction","ret","dragging","enabled","Object","getPrototypeOf","disable","assign","bind","enable","_setPos","_bearing","_zIndex","zIndexOffset","_resetZIndex","setRotation","gridLayerProto","GridLayer","events","updateWhenIdle","_onRotate","Util","throttle","_onMoveEnd","updateInterval","_getTiledPixelBounds","_getNewPixelBounds","_tileZoom","rendererProto","Renderer","_update","onAdd","version","classList","_updateTransform","getZoomScale","_zoom","_topLeft","_bounds","_getPaddedPixelBounds","min","_center","getCenter","getZoom","mapProto","Map","initialize","id","setBearing","containerPointToLayerPoint","_getRotatePanePos","layerPointToContainerPoint","_subtract","mapBoundsToContainerBounds","bounds","origin","getPixelOrigin","nw","project","getNorthWest","ne","getNorthEast","sw","getSouthWest","se","getSouthEast","max","getBounds","LatLngBounds","containerPointToLatLng","wrapNum","_getPixelCenter","oldPos","newPos","_rotatePane","_pivot","_rotatePanePos","getBearing","_initPanes","panes","_panes","_paneRenderers","_mapPane","createPane","_norotatePane","markerZoomAnimation","addClass","markerPane","shadowPane","panInside","abs","toFixed","paddingTopLeft","paddingBottomRight","rect","getBoundingClientRect","pixelPoint","latLngToContainerPoint","pixelBounds","pixelCenter","paddedBounds","paddedSize","contains","_enforcingBounds","centerOffset","panTo","getBoundsZoom","inside","latLngBounds","getMinZoom","getMaxZoom","boundsSize","snap","zoomSnap","scalex","scaley","getScaleZoom","round","ceil","floor","_getCenterOffset","_getNewPixelOrigin","viewHalf","_divideBy","mapZoom","_animatingZoom","_animateToZoom","halfSize","Bounds","p","padMin","multiplyBy","padMax","_handleGeolocationResponse","_leaflet_id","lat","coords","latitude","lng","longitude","hdg","heading","LatLng","toBounds","accuracy","_locateOptions","setView","maxZoom","data","timestamp","i","CompassBearing","Handler","window","__deviceOrientationEvent","_throttled","_onDeviceOrientation","addHooks","DomEvent","on","removeHooks","off","angle","webkitCompassHeading","alpha","deviceOrientation","absolute","orientation","addInitHook","trackContainerMutation","ContainerMutation","_observer","MutationObserver","invalidateSize","observe","getContainer","childList","attributes","characterData","subtree","attributeFilter","disconnect","bounceAtZoomLimits","TouchGestures","touchRotate","touchZoom","_onTouchStart","touches","length","_zooming","_rotating","p1","mouseEventToContainerPoint","p2","vector","_centerPoint","_startLatLng","_pinchStartLatLng","_startDist","distanceTo","_startZoom","_startTheta","atan","_startBearing","_moved","_stop","document","_onTouchMove","_onTouchEnd","preventDefault","delta","bearingDelta","_limitZoom","unproject","_moveStart","cancelAnimFrame","_animRequest","moveFn","_move","pinch","requestAnimFrame","zoomAnimation","_resetView","TouchRotate","touchGestures","shiftKeyRotate","ShiftKeyRotate","_handleShiftScroll","shiftKey","scrollWheelZoom","sign","deltaY","touch","TouchZoom","removeClass","Control","Rotate","position","closeOnZeroBearing","container","create","arrow","_arrow","backgroundImage","cursor","display","backgroundRepeat","backgroundPosition","link","_link","appendChild","href","title","stopPropagation","_handleMouseDown","stop","_cycleState","_refocusOnMap","_restyle","_follow","_canFollow","onRemove","dragstartX","pageX","dragstartY","pageY","_handleMouseDrag","_handleMouseUp","deltaX","clientX","ev","compassBearing","DeviceOrientationEvent","requestPermission","Promise","resolve","then","state","transform","backgroundColor","control","rotateControl","addControl"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"leaflet-rotate.js","sources":["../src/dom/DomUtil.js","../src/dom/Draggable.js","../src/geometry/Point.js","../src/layer/DivOverlay.js","../src/layer/Popup.js","../src/layer/Tooltip.js","../src/layer/marker/Icon.js","../src/layer/marker/Marker.js","../src/layer/tile/GridLayer.js","../src/layer/vector/Renderer.js","../src/map/Map.js","../src/map/handler/CompassBearing.js","../src/map/handler/ContainerMutation.js","../src/map/handler/TouchGestures.js","../src/map/handler/TouchRotate.js","../src/map/handler/ShiftKeyRotate.js","../src/map/handler/TouchZoom.js","../src/control/Rotate.js"],"sourcesContent":["/**\n * @external L.DomUtil\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/DomUtil.js\n */\n\nconst domUtilProto = L.extend({}, L.DomUtil);\n\nL.extend(L.DomUtil, {\n\n /**\n * Resets the 3D CSS transform of `el` so it is\n * translated by `offset` pixels and optionally\n * scaled by `scale`. Does not have an effect if\n * the browser doesn't support 3D CSS transforms.\n * \n * @param {HTMLElement} el \n * @param {L.Point} offset \n * @param {Number} scale\n * @param {Number} bearing \n * @param {L.Point} pivot \n */\n setTransform: function(el, offset, scale, bearing, pivot) {\n var pos = offset || new L.Point(0, 0);\n\n if (!bearing) {\n offset = pos._round();\n return domUtilProto.setTransform.apply(this, arguments);\n }\n\n pos = pos.rotateFrom(bearing, pivot);\n\n el.style[L.DomUtil.TRANSFORM] =\n 'translate3d(' + pos.x + 'px,' + pos.y + 'px' + ',0)' +\n (scale ? ' scale(' + scale + ')' : '') +\n ' rotate(' + bearing + 'rad)';\n },\n\n /**\n * Sets the position of `el` to coordinates specified by\n * `position`, using CSS translate or top/left positioning\n * depending on the browser (used by Leaflet internally\n * to position its layers).\n * \n * @param {HTMLElement} el \n * @param {L.Point} point \n * @param {Number} bearing\n * @param {L.Point} pivot \n * @param {Number} scale \n */\n setPosition: function(el, point, bearing, pivot, scale) {\n if (!bearing) {\n return domUtilProto.setPosition.apply(this, arguments);\n }\n\n /*eslint-disable */\n el._leaflet_pos = point;\n /*eslint-enable */\n\n if (L.Browser.any3d) {\n L.DomUtil.setTransform(el, point, scale, bearing, pivot);\n } else {\n el.style.left = point.x + 'px';\n el.style.top = point.y + 'px';\n }\n },\n\n /**\n * @constant radians = degrees × π/180°\n */\n DEG_TO_RAD: Math.PI / 180,\n\n /**\n * @constant degrees = radians × 180°/π\n */\n RAD_TO_DEG: 180 / Math.PI,\n\n});\n","/**\n * @external L.Draggable\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/Draggable.js\n */\n\n/**\n * A class for making DOM elements draggable (including touch support).\n * Used internally for map and marker dragging. Only works for elements\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\n */\n\nL.Draggable.include({\n\n /** @TODO */\n // updateMapBearing: function(mapBearing) {\n // this._mapBearing = mapBearing;\n // },\n\n});","/**\n * @external L.Point\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/geometry/Point.js\n */\n\nL.extend(L.Point.prototype, {\n\n /**\n * Rotate around (0,0) by applying the 2D rotation matrix:\n * \n * ⎡ x' ⎤ = ⎡ cos θ -sin θ ⎤ ⎡ x ⎤\n * ⎣ y' ⎦ ⎣ sin θ cos θ ⎦ ⎣ y ⎦\n * \n * @param theta must be given in radians.\n */\n rotate: function(theta) {\n return this.rotateFrom(theta, new L.Point(0,0))\n },\n\n /**\n * Rotate around (pivot.x, pivot.y) by:\n * \n * 1. subtract (pivot.x, pivot.y)\n * 2. rotate around (0, 0)\n * 3. add (pivot.x, pivot.y) back\n * \n * same as `this.subtract(pivot).rotate(theta).add(pivot)`\n * \n * @param {Number} theta \n * @param {L.Point} pivot \n * \n * @returns {L.Point}\n */\n rotateFrom: function(theta, pivot) {\n if (!theta) { return this; }\n var sinTheta = Math.sin(theta);\n var cosTheta = Math.cos(theta);\n var cx = pivot.x,\n cy = pivot.y;\n var x = this.x - cx,\n y = this.y - cy;\n\n return new L.Point(\n x * cosTheta - y * sinTheta + cx,\n x * sinTheta + y * cosTheta + cy\n );\n },\n\n});\n","/**\n * @external L.DivOverlay\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/DivOverlay.js\n */\n\nconst divOverlayProto = L.extend({}, L.DivOverlay.prototype);\n\nL.DivOverlay.include({\n\n /**\n * Update L.Popup and L.Tooltip anchor positions after\n * the map is moved by calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(divOverlayProto.getEvents.apply(this, arguments), { rotate: this._updatePosition });\n },\n\n /**\n * 0. update element anchor point (divOverlayProto v1.9.3)\n * 1. rotate around anchor point (subtract anchor -> rotate point -> add anchor)\n */\n _updatePosition: function() {\n if (!this._map) { return; }\n divOverlayProto._updatePosition.apply(this, arguments);\n if (this._map && this._map._rotate && this._zoomAnimated) {\n var anchor = this._getAnchor();\n var pos = L.DomUtil.getPosition(this._container).subtract(anchor);\n L.DomUtil.setPosition(this._container, this._map.rotatedPointToMapPanePoint(pos).add(anchor));\n }\n\n },\n\n});\n","/**\n * @external L.Popup\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/Popup.js\n */\n\nconst popupProto = L.extend({}, L.Popup.prototype);\n\nL.Popup.include({\n\n /**\n * 0. update element anchor point (popupProto v1.9.3)\n * 1. rotate around anchor point (subtract anchor -> rotate point -> add anchor)\n */\n _animateZoom: function(e) {\n popupProto._animateZoom.apply(this, arguments);\n if (this._map && this._map._rotate) {\n var anchor = this._getAnchor();\n var pos = L.DomUtil.getPosition(this._container).subtract(anchor);\n L.DomUtil.setPosition(this._container, this._map.rotatedPointToMapPanePoint(pos).add(anchor));\n }\n },\n\n /**\n * Fix for L.popup({ keepInView = true })\n * \n * @see https://github.com/fnicollet/Leaflet/pull/21\n */\n _adjustPan: function() {\n if (!this.options.autoPan || (this._map._panAnim && this._map._panAnim._inProgress)) { return; }\n\n // We can endlessly recurse if keepInView is set and the view resets.\n // Let's guard against that by exiting early if we're responding to our own autopan.\n if (this._autopanning) {\n this._autopanning = false;\n return;\n }\n\n var map = this._map,\n marginBottom = parseInt(L.DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0,\n containerHeight = this._container.offsetHeight + marginBottom,\n containerWidth = this._containerWidth,\n layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom);\n\n layerPos._add(L.DomUtil.getPosition(this._container));\n\n /** @TODO use popupProto._adjustPan */\n // var containerPos = map.layerPointToContainerPoint(layerPos);\n var containerPos = layerPos._add(this._map._getMapPanePos()),\n padding = L.point(this.options.autoPanPadding),\n paddingTL = L.point(this.options.autoPanPaddingTopLeft || padding),\n paddingBR = L.point(this.options.autoPanPaddingBottomRight || padding),\n size = map.getSize(),\n dx = 0,\n dy = 0;\n\n if (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\n dx = containerPos.x + containerWidth - size.x + paddingBR.x;\n }\n if (containerPos.x - dx - paddingTL.x < 0) { // left\n dx = containerPos.x - paddingTL.x;\n }\n if (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\n dy = containerPos.y + containerHeight - size.y + paddingBR.y;\n }\n if (containerPos.y - dy - paddingTL.y < 0) { // top\n dy = containerPos.y - paddingTL.y;\n }\n\n // @namespace Map\n // @section Popup events\n // @event autopanstart: Event\n // Fired when the map starts autopanning when opening a popup.\n if (dx || dy) {\n // Track that we're autopanning, as this function will be re-ran on moveend\n if (this.options.keepInView) {\n this._autopanning = true;\n }\n map\n .fire('autopanstart')\n .panBy([dx, dy]);\n }\n },\n\n});\n","/**\n * @external L.Tooltip\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/Tooltip.js\n */\n\nconst tooltipProto = L.extend({}, L.Tooltip.prototype);\n\nL.Tooltip.include({\n\n _animateZoom: function(e) {\n if (!this._map._rotate) {\n return tooltipProto._animateZoom.apply(this, arguments);\n }\n var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\n pos = this._map.rotatedPointToMapPanePoint(pos);\n this._setPosition(pos);\n },\n\n _updatePosition: function() {\n if (!this._map._rotate) {\n return tooltipProto._updatePosition.apply(this, arguments);\n }\n var pos = this._map.latLngToLayerPoint(this._latlng);\n\n pos = this._map.rotatedPointToMapPanePoint(pos);\n this._setPosition(pos);\n },\n\n});\n","/**\n * @external L.Icon\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Icon.js\n */\n\nconst iconProto = L.extend({}, L.Icon.prototype);\n\nL.Icon.include({\n\n _setIconStyles: function(img, name) {\n var options = this.options;\n var sizeOption = options[name + 'Size'];\n\n if (typeof sizeOption === 'number') {\n sizeOption = [sizeOption, sizeOption];\n }\n\n var size = L.point(sizeOption),\n anchor = L.point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\n size && size.divideBy(2, true));\n\n img.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\n\n if (anchor) {\n img.style.marginLeft = (-anchor.x) + 'px';\n img.style.marginTop = (-anchor.y) + 'px';\n /** @TODO use iconProto._setIconStyles */\n img.style[L.DomUtil.TRANSFORM + \"Origin\"] = anchor.x + \"px \" + anchor.y + \"px 0px\";\n }\n\n if (size) {\n img.style.width = size.x + 'px';\n img.style.height = size.y + 'px';\n }\n },\n\n});\n","/**\n * @external L.Marker\n * @external L.Handler.MarkerDrag\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Marker.js\n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/marker/Marker.Drag.js\n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/dom/Draggable.js\n */\n\nconst markerProto = L.extend({}, L.Marker.prototype);\n\nL.Marker.mergeOptions({\n\n /**\n * Rotation of this marker in rad\n * \n * @type {Number}\n */\n rotation: 0,\n\n /**\n * Rotate this marker when map rotates\n * \n * @type {Boolean}\n */\n rotateWithView: false,\n\n /**\n * Scale of the marker icon\n * \n * @type {Number}\n */\n scale: undefined,\n\n});\n\nvar markerDragProto; // retrived at runtime (see below: L.Marker::_initInteraction())\n\nvar MarkerDrag = {\n\n // _onDragStart: function() {\n // if (!this._marker._map._rotate) {\n // return markerDragProto._onDragStart.apply(this, arguments);\n // }\n // this._draggable.updateMapBearing(this._marker._map._bearing);\n // },\n\n _onDrag: function(e) {\n var marker = this._marker,\n /** @TODO use markerDragProto._onDrag */\n rotated_marker = marker.options.rotation || marker.options.rotateWithView,\n shadow = marker._shadow,\n iconPos = L.DomUtil.getPosition(marker._icon);\n\n /** @TODO use markerDragProto._onDrag */\n // update shadow position\n if (!rotated_marker && shadow) {\n L.DomUtil.setPosition(shadow, iconPos);\n }\n\n /** @TODO use markerDragProto._onDrag */\n if (marker._map._rotate) {\n // Reverse calculation from mapPane coordinates to rotatePane coordinates\n iconPos = marker._map.mapPanePointToRotatedPoint(iconPos);\n }\n var latlng = marker._map.layerPointToLatLng(iconPos);\n\n marker._latlng = latlng;\n e.latlng = latlng;\n e.oldLatLng = this._oldLatLng;\n\n /** @TODO use markerDragProto._onDrag */\n if (rotated_marker) marker.setLatLng(latlng); // use `setLatLng` to presisit rotation. low efficiency\n else marker.fire('move', e); // `setLatLng` will trig 'move' event. we imitate here.\n\n // @event drag: Event\n // Fired repeatedly while the user drags the marker.\n marker\n .fire('drag', e);\n },\n\n _onDragEnd: function(e) {\n if (this._marker._map._rotate) {\n this._marker.update();\n }\n markerDragProto._onDragEnd.apply(this, arguments);\n },\n\n};\n\nL.Marker.include({\n\n /**\n * Update L.Marker anchor position after the map\n * is moved by calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(markerProto.getEvents.apply(this, arguments), { rotate: this.update });\n },\n\n _initInteraction: function() {\n var ret = markerProto._initInteraction.apply(this, arguments);\n if (this.dragging && this.dragging.enabled() && this._map && this._map._rotate) {\n // L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable\n markerDragProto = markerDragProto || Object.getPrototypeOf(this.dragging);\n this.dragging.disable();\n Object.assign(this.dragging, {\n // _onDragStart: MarkerDrag._onDragStart.bind(this.dragging),\n _onDrag: MarkerDrag._onDrag.bind(this.dragging),\n _onDragEnd: MarkerDrag._onDragEnd.bind(this.dragging),\n });\n this.dragging.enable();\n }\n return ret;\n },\n\n _setPos: function(pos) {\n\n /** @TODO use markerProto._setPos */\n if (this._map._rotate) {\n pos = this._map.rotatedPointToMapPanePoint(pos);\n }\n\n /** @TODO use markerProto._setPos */\n var bearing = this.options.rotation || 0;\n if (this.options.rotateWithView) {\n bearing += this._map._bearing;\n }\n\n /** @TODO use markerProto._setPos */\n if (this._icon) {\n L.DomUtil.setPosition(this._icon, pos, bearing, pos, this.options.scale);\n }\n\n /** @TODO use markerProto._setPos */\n if (this._shadow) {\n L.DomUtil.setPosition(this._shadow, pos, bearing, pos, this.options.scale);\n }\n\n this._zIndex = pos.y + this.options.zIndexOffset;\n\n this._resetZIndex();\n },\n\n // _updateZIndex: function(offset) {\n // if (!this._map._rotate) {\n // return markerProto._updateZIndex.apply(this, arguments);\n // }\n // this._icon.style.zIndex = Math.round(this._zIndex + offset);\n // },\n\n setRotation: function(rotation) {\n this.options.rotation = rotation;\n this.update();\n },\n\n});\n","/**\n * @external L.GridLayer\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/tile/GridLayer.js\n */\n\nconst gridLayerProto = L.extend({}, L.GridLayer.prototype);\n\nL.GridLayer.include({\n\n /**\n * Redraw L.TileLayer bounds after the map is\n * moved by just calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n var events = gridLayerProto.getEvents.apply(this, arguments);\n if (this._map._rotate && !this.options.updateWhenIdle) {\n if (!this._onRotate) {\n this._onRotate = L.Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n }\n events.rotate = this._onRotate;\n }\n return events;\n },\n\n _getTiledPixelBounds: function(center) {\n if (!this._map._rotate) {\n return gridLayerProto._getTiledPixelBounds.apply(this, arguments);\n }\n\n return this._map._getNewPixelBounds(center, this._tileZoom);\n },\n\n});\n","/**\n * @external L.Renderer\n * \n * @see https://github.com/Leaflet/Leaflet/tree/v1.9.3/src/layer/vector/Renderer.js\n */\n\nconst rendererProto = L.extend({}, L.Renderer.prototype);\n\nL.Renderer.include({\n\n /**\n * Redraw L.Canvas and L.SVG renderer bounds after the\n * map is moved by just calling `map.setBearing(theta)`\n * \n * @listens L.Map~rotate\n */\n getEvents: function() {\n return L.extend(rendererProto.getEvents.apply(this, arguments), { rotate: this._update });\n },\n\n /**\n * Fix for `map.flyTo()` when `false === map.options.zoomAnimation`\n * \n * @see https://github.com/Leaflet/Leaflet/pull/8794\n */\n onAdd: function() {\n rendererProto.onAdd.apply(this, arguments);\n if (L.version <= \"1.9.3\") {\n // always keep transform-origin as 0 0\n this._container.classList.add('leaflet-zoom-animated');\n }\n },\n\n /**\n * @FIXME layer drifts on `map.setZoom()` (eg. zoom during animation)\n * \n * the main cause seems to be related to `this._updateTransform(path._center, path._zoom))`\n * and `this._topLeft = this._map.layerPointToLatLng(this._bounds.min);`\n * \n * @example\n * map.setZoom(2);\n * path._renderer._update();\n * path._renderer._updateTransform(path._renderer._center, path._renderer._zoom);\n * \n * @see https://github.com/Leaflet/Leaflet/pull/8794\n * @see https://github.com/Leaflet/Leaflet/pull/8103\n * @see https://github.com/Leaflet/Leaflet/issues/7466\n * \n * @TODO rechek this changes from leaflet@v1.9.3\n * \n * @see https://github.com/Leaflet/Leaflet/compare/v1.7.0...v1.9.3\n */\n _updateTransform: function(center, zoom) {\n if (!this._map._rotate) {\n return rendererProto._updateTransform.apply(this, arguments);\n }\n /**\n * @FIXME see path._renderer._reset();\n */\n var scale = this._map.getZoomScale(zoom, this._zoom),\n offset = this._map._latLngToNewLayerPoint(this._topLeft, zoom, center);\n\n L.DomUtil.setTransform(this._container, offset, scale);\n \n },\n\n // getEvents() {\n // const events = {\n // viewreset: this._reset,\n // zoom: this._onZoom,\n // moveend: this._update,\n // zoomend: this._onZoomEnd\n // };\n // if (this._zoomAnimated) {\n // events.zoomanim = this._onAnimZoom;\n // }\n // return events;\n // },\n\n // _onAnimZoom(ev) {\n // this._updateTransform(ev.center, ev.zoom);\n // },\n\n\t// _onZoom() {\n // this._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t// },\n\n // _onZoomEnd() {\n // for (const id in this._layers) {\n // this._layers[id]._project();\n // }\n // },\n\n // _reset() {\n // this._update();\n // this._updateTransform(this._center, this._zoom);\n\n // for (const id in this._layers) {\n // this._layers[id]._reset();\n // }\n // },\n\n // _updatePaths() {\n // for (const id in this._layers) {\n // this._layers[id]._update();\n // }\n // },\n\n _update: function() {\n if (!this._map._rotate) {\n return rendererProto._update.apply(this, arguments);\n }\n // Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n // Subclasses are responsible of firing the 'update' event.\n this._bounds = this._map._getPaddedPixelBounds(this.options.padding);\n this._topLeft = this._map.layerPointToLatLng(this._bounds.min);\n this._center = this._map.getCenter();\n this._zoom = this._map.getZoom();\n },\n\n});\n","/**\n * @external L.Map\n * \n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/Map.js\n */\n\nconst mapProto = L.extend({}, L.Map.prototype);\n\nL.Map.mergeOptions({ rotate: false, bearing: 0, });\n\nL.Map.include({\n\n /**\n * @param {(HTMLElement|String)} id html selector\n * @param {Object} [options={}] leaflet map options\n */\n initialize: function(id, options) {\n if (options.rotate) {\n this._rotate = true;\n this._bearing = 0;\n }\n mapProto.initialize.apply(this, arguments);\n if(this.options.rotate){\n this.setBearing(this.options.bearing);\n }\n },\n\n /**\n * Given a pixel coordinate relative to the map container,\n * returns the corresponding pixel coordinate relative to\n * the [origin pixel](#map-getpixelorigin).\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point} transformed pixel point\n */\n containerPointToLayerPoint: function(point) {\n if (!this._rotate) {\n return mapProto.containerPointToLayerPoint.apply(this, arguments);\n }\n return L.point(point)\n .subtract(this._getMapPanePos())\n .rotateFrom(-this._bearing, this._getRotatePanePos())\n .subtract(this._getRotatePanePos());\n },\n\n /**\n * Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\n * returns the corresponding pixel coordinate relative to the map container.\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point} transformed pixel point\n */\n layerPointToContainerPoint: function(point) {\n if (!this._rotate) {\n return mapProto.layerPointToContainerPoint.apply(this, arguments);\n }\n return L.point(point)\n .add(this._getRotatePanePos())\n .rotateFrom(this._bearing, this._getRotatePanePos())\n .add(this._getMapPanePos());\n },\n\n /**\n * Converts a coordinate from the rotated pane reference system\n * to the reference system of the not rotated map pane.\n * \n * (rotatePane) --> (mapPane)\n * (rotatePane) --> (norotatePane)\n * \n * @param {L.Point} point pixel screen coordinates\n * @returns {L.Point}\n * \n * @since leaflet-rotate (v0.1)\n */\n rotatedPointToMapPanePoint: function(point) {\n return L.point(point)\n .rotate(this._bearing)\n ._add(this._getRotatePanePos());\n },\n\n /**\n * Converts a coordinate from the not rotated map pane reference system\n * to the reference system of the rotated pane.\n * \n * (mapPane) --> (rotatePane)\n * (norotatePane) --> (rotatePane)\n * \n * @param {L.Point} point pixel screen coordinates\n * \n * @since leaflet-rotate (v0.1)\n */\n mapPanePointToRotatedPoint: function(point) {\n return L.point(point)\n ._subtract(this._getRotatePanePos())\n .rotate(-this._bearing);\n },\n\n // latLngToLayerPoint: function (latlng) {\n // var projectedPoint = this.project(L.latLng(latlng))._round();\n // return projectedPoint._subtract(this.getPixelOrigin());\n // },\n\n // latLngToContainerPoint: function (latlng) {\n\t// \treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\n\t// },\n\n /**\n * Given latlng bounds, returns the bounds in projected pixel\n * relative to the map container.\n * \n * @see https://github.com/ronikar/Leaflet/blob/5c480ef959b947c3beed7065425a5a36c486262b/src/map/Map.js#L1114-L1135\n * \n * @param {L.LatLngBounds} bounds \n * @returns {L.Bounds}\n * \n * @since leaflet-rotate (v0.2)\n */\n mapBoundsToContainerBounds: function (bounds) {\n if (!this._rotate && mapProto.mapBoundsToContainerBounds) {\n return mapProto.mapBoundsToContainerBounds.apply(this, arguments);\n }\n\n // const nw = this.latLngToContainerPoint(bounds.getNorthWest()),\n // ne = this.latLngToContainerPoint(bounds.getNorthEast()),\n // sw = this.latLngToContainerPoint(bounds.getSouthWest()),\n // se = this.latLngToContainerPoint(bounds.getSouthEast());\n\n // same as `this.latLngToContainerPoint(latlng)` but with floating point precision\n const origin = this.getPixelOrigin();\n const nw = this.layerPointToContainerPoint(this.project(bounds.getNorthWest())._subtract(origin)),\n ne = this.layerPointToContainerPoint(this.project(bounds.getNorthEast())._subtract(origin)),\n sw = this.layerPointToContainerPoint(this.project(bounds.getSouthWest())._subtract(origin)),\n se = this.layerPointToContainerPoint(this.project(bounds.getSouthEast())._subtract(origin));\n\n return L.bounds([\n L.point(Math.min(nw.x, ne.x, se.x, sw.x), Math.min(nw.y, ne.y, se.y, sw.y)), // [ minX, minY ]\n L.point(Math.max(nw.x, ne.x, se.x, sw.x), Math.max(nw.y, ne.y, se.y, sw.y)) // [ maxX, maxY ]\n ]);\n },\n\n /**\n * Returns geographical bounds visible in the current map view\n * \n * @TODO find out if map bounds calculated by `L.Map::getBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n * \n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @returns {L.LatLngBounds}\n */\n getBounds: function() {\n if (!this._rotate) {\n return mapProto.getBounds.apply(this, arguments);\n }\n\n // SEE: https://github.com/fnicollet/Leaflet/pull/22\n //\n // var bounds = this.getPixelBounds(),\n // sw = this.unproject(bounds.getBottomLeft()),\n // ne = this.unproject(bounds.getTopRight());\n // return new LatLngBounds(sw, ne);\n //\n\n // LatLngBounds' constructor automatically\n // extends the bounds to fit the passed points\n var size = this.getSize();\n return new L.LatLngBounds([\n this.containerPointToLatLng([0, 0]), // topleft\n this.containerPointToLatLng([size.x, 0]), // topright \n this.containerPointToLatLng([size.x, size.y]), // bottomright\n this.containerPointToLatLng([0, size.y]), // bottomleft\n ]);\n },\n\n /**\n * Returns the bounds of the current map view in projected pixel\n * coordinates (sometimes useful in layer and overlay implementations).\n * \n * @TODO find out if map bounds calculated by `L.Map::getPixelBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n *\n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @returns {L.Bounds}\n */\n // getPixelBounds(center, zoom) {\n // // const topLeftPoint = map.containerPointToLayerPoint(this._getTopLeftPoint());\n // const topLeftPoint = this._getTopLeftPoint(center, zoom);\n // return new L.Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\n // },\n\n /**\n * Change map rotation\n * \n * @param {number} theta map degrees\n * \n * @since leaflet-rotate (v0.1)\n */\n setBearing: function(theta) {\n if (!L.Browser.any3d || !this._rotate) { return; }\n\n var bearing = L.Util.wrapNum(theta, [0, 360]) * L.DomUtil.DEG_TO_RAD,\n center = this._getPixelCenter(),\n oldPos = this._getRotatePanePos().rotateFrom(-this._bearing, center),\n newPos = oldPos.rotateFrom(bearing, center);\n\n // CSS transform\n L.DomUtil.setPosition(this._rotatePane, oldPos, bearing, center);\n\n this._pivot = center;\n this._bearing = bearing;\n this._rotatePanePos = newPos;\n\n this.fire('rotate');\n },\n\n /**\n * Get current map rotation\n * \n * @returns {number} theta map degrees\n * \n * @since leaflet-rotate (v0.1)\n */\n getBearing: function() {\n return this._bearing * L.DomUtil.RAD_TO_DEG;\n },\n\n /**\n * Creates a new [map pane](#map-pane) with the given name if it doesn't\n * exist already, then returns it. The pane is created as a child of\n * `container`, or as a child of the main map pane if not set.\n * \n * @param {String} name leaflet pane\n * @param {HTMLElement} [container] parent element\n * @returns {HTMLElement} pane container\n */\n // createPane: function(name, container) {\n // if (!this._rotate || name == 'mapPane') {\n // return mapProto.createPane.apply(this, arguments);\n // }\n // // init \"rotatePane\"\n // if (!this._rotatePane) {\n // // this._pivot = this.getSize().divideBy(2);\n // this._rotatePane = mapProto.createPane.call(this, 'rotatePane', this._mapPane);\n // L.DomUtil.setPosition(this._rotatePane, new L.Point(0, 0), this._bearing, this._pivot);\n // }\n // return mapProto.createPane.call(this, name, container || this._rotatePane);\n // },\n\n /**\n * Panes are DOM elements used to control the ordering of layers on\n * the map. You can access panes with [`map.getPane`](#map-getpane)\n * or [`map.getPanes`](#map-getpanes) methods. New panes can be created\n * with the [`map.createPane`](#map-createpane) method.\n * \n * Every map has the following default panes that differ only in zIndex:\n * \n * - mapPane [HTMLElement = 'auto'] - Pane that contains all other map panes\n * - tilePane [HTMLElement = 2] - Pane for tile layers\n * - overlayPane [HTMLElement = 4] - Pane for overlays like polylines and polygons\n * - shadowPane [HTMLElement = 5] - Pane for overlay shadows (e.g. marker shadows)\n * - markerPane [HTMLElement = 6] - Pane for marker icons\n * - tooltipPane [HTMLElement = 650] - Pane for tooltips.\n * - popupPane [HTMLElement = 700] - Pane for popups.\n */\n _initPanes: function() {\n var panes = this._panes = {};\n this._paneRenderers = {};\n\n this._mapPane = this.createPane('mapPane', this._container);\n L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));\n\n if (this._rotate) {\n this._rotatePane = this.createPane('rotatePane', this._mapPane);\n this._norotatePane = this.createPane('norotatePane', this._mapPane);\n // rotatePane\n this.createPane('tilePane', this._rotatePane);\n this.createPane('overlayPane', this._rotatePane);\n // norotatePane\n this.createPane('shadowPane', this._norotatePane);\n this.createPane('markerPane', this._norotatePane);\n this.createPane('tooltipPane', this._norotatePane);\n this.createPane('popupPane', this._norotatePane);\n } else {\n this.createPane('tilePane');\n this.createPane('overlayPane');\n this.createPane('shadowPane');\n this.createPane('markerPane');\n this.createPane('tooltipPane');\n this.createPane('popupPane');\n }\n\n if (!this.options.markerZoomAnimation) {\n L.DomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\n L.DomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\n }\n },\n\n /**\n * Pans the map the minimum amount to make the `latlng` visible. Use\n * padding options to fit the display to more restricted bounds.\n * If `latlng` is already within the (optionally padded) display bounds,\n * the map will not be panned.\n * \n * @see https://github.com/Raruto/leaflet-rotate/issues/18\n * \n * @param {L.LatLng} latlng coordinates\n * @param {Object} [options={}] padding options\n * \n * @returns {L.Map} current map instance\n */\n panInside(latlng, options) {\n if (!this._rotate || Math.abs(this._bearing).toFixed(1) < 0.1) {\n return mapProto.panInside.apply(this, arguments);\n }\n\n options = options || {};\n\n const paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),\n paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]),\n /** @TODO use mapProto.panInside */\n // pixelPoint = this.project(latlng),\n // pixelBounds = this.getPixelBounds(),\n // pixelCenter = this.project(this.getCenter()),\n rect = this._container.getBoundingClientRect(),\n pixelPoint = this.latLngToContainerPoint(latlng),\n pixelBounds = L.bounds([ L.point(rect), L.point(rect).add(this.getSize()) ]),\n pixelCenter = pixelBounds.getCenter(),\n //\n paddedBounds = L.bounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),\n paddedSize = paddedBounds.getSize();\n \n if (!paddedBounds.contains(pixelPoint)) {\n this._enforcingBounds = true;\n const centerOffset = pixelPoint.subtract(paddedBounds.getCenter());\n const offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);\n pixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;\n pixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;\n /** @TODO use mapProto.panInside */\n // this.panTo(this.unproject(pixelCenter), options);\n this.panTo(this.containerPointToLatLng(pixelCenter), options);\n //\n this._enforcingBounds = false;\n }\n return this;\n },\n\n /**\n * Pans the map to the closest view that would lie inside the given bounds\n * (if it's not already), controlling the animation using the options specific,\n * if any.\n * \n * @TODO check if map bounds calculated by `L.Map::panInsideBounds()`\n * function should match the `rotatePane` or `norotatePane` bounds\n *\n * @see https://github.com/fnicollet/Leaflet/issues/7\n * \n * @param {L.LatLngBounds} bounds coordinates\n * @param {Object} [options] pan options\n * @returns {L.Map} current map instance\n */\n // panInsideBounds: function (bounds, options) {\n // this._enforcingBounds = true;\n // var center = this.getCenter(),\n // newCenter = this._limitCenter(center, this._zoom, L.latLngBounds(bounds));\n //\n // if (!center.equals(newCenter)) {\n // this.panTo(newCenter, options);\n // }\n //\n // this._enforcingBounds = false;\n // return this;\n // },\n\n // adjust center for view to get inside bounds\n // _limitCenter(center, zoom, bounds) {\n //\n // if (!bounds) { return center; }\n //\n // const centerPoint = this.project(center, zoom),\n // viewHalf = this.getSize().divideBy(2),\n // viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\n // offset = this._getBoundsOffset(viewBounds, bounds, zoom);\n //\n // // If offset is less than a pixel, ignore.\n // // This prevents unstable projections from getting into\n // // an infinite loop of tiny offsets.\n // if (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {\n // return center;\n // }\n //\n // return this.unproject(centerPoint.add(offset), zoom);\n // },\n\n // @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\n // Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\n // but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\n // flyToBounds(bounds, options) {\n // const target = this._getBoundsCenterZoom(bounds, options);\n // return this.flyTo(target.center, target.zoom, options);\n // },\n\n // _getBoundsCenterZoom(bounds, options) {\n //\n // options = options || {};\n // bounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\n //\n // const paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),\n // paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]);\n //\n // let zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\n //\n // zoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\n //\n // if (zoom === Infinity) {\n // return { center: bounds.getCenter(), zoom };\n // }\n //\n // return { center, zoom };\n //\n // },\n\n /**\n * Returns the maximum zoom level on which the given bounds fit to the map\n * view in its entirety. If `inside` (optional) is set to `true`, the method\n * instead returns the minimum zoom level on which the map view fits into\n * the given bounds in its entirety.\n * \n * @param {L.LatLngBounds} bounds\n * @param {Boolean} [inside=false]\n * @param {L.Point} [padding=[0,0]]\n * \n * @returns {Number} zoom level\n */\n getBoundsZoom(bounds, inside, padding) {\n if (!this._rotate || Math.abs(this._bearing).toFixed(1) < 0.1) {\n return mapProto.getBoundsZoom.apply(this, arguments);\n }\n\n bounds = L.latLngBounds(bounds);\n padding = L.point(padding || [0, 0]);\n\n let zoom = this.getZoom() || 0;\n const min = this.getMinZoom(),\n max = this.getMaxZoom(),\n /** @TODO use mapProto.getBoundsZoom */\n // nw = bounds.getNorthWest(),\n // se = bounds.getSouthEast(),\n // size = this.getSize().subtract(padding),\n // boundsSize = L.bounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\n size = this.getSize().subtract(padding),\n boundsSize = this.mapBoundsToContainerBounds(bounds).getSize(),\n snap = this.options.zoomSnap,\n scalex = size.x / boundsSize.x,\n scaley = size.y / boundsSize.y,\n scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\n\n zoom = this.getScaleZoom(scale, zoom);\n\n if (snap) {\n zoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\n zoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\n }\n\n return Math.max(min, Math.min(max, zoom));\n },\n\n /**\n * Layer point of the current center\n * \n * @returns {L.Point} layer center\n */\n // _getCenterLayerPoint: function () {\n // return this.containerPointToLayerPoint(this.getSize()._divideBy(2));\n // },\n\n /**\n * Offset of the specified place to the current center in pixels\n * \n * @param {L.LatLng} latlng map coordinates\n */\n _getCenterOffset: function(latlng) {\n var centerOffset = mapProto._getCenterOffset.apply(this, arguments);\n if (this._rotate) {\n centerOffset = centerOffset.rotate(this._bearing);\n }\n return centerOffset;\n },\n\n /**\n * @since leaflet-rotate (v0.1)\n */\n _getRotatePanePos: function() {\n return this._rotatePanePos || new L.Point(0, 0);\n // return L.DomUtil.getPosition(this._rotatePane) || new L.Point(0, 0);\n },\n\n // _latLngToNewLayerPoint(latlng, zoom, center) {\n // const topLeft = this._getNewPixelOrigin(center, zoom);\n // return this.project(latlng, zoom)._subtract(topLeft);\n //},\n\n _getNewPixelOrigin: function(center, zoom) {\n if (!this._rotate) {\n return mapProto._getNewPixelOrigin.apply(this, arguments);\n }\n var viewHalf = this.getSize()._divideBy(2);\n return this.project(center, zoom)\n .rotate(this._bearing)\n ._subtract(viewHalf)\n ._add(this._getMapPanePos())\n ._add(this._getRotatePanePos())\n .rotate(-this._bearing)\n ._round();\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @see src\\layer\\tile\\GridLayer::_getTiledPixelBounds()\n */\n _getNewPixelBounds: function(center, zoom) {\n center = center || this.getCenter();\n zoom = zoom || this.getZoom();\n if (!this._rotate && mapProto._getNewPixelBounds) {\n return mapProto._getNewPixelBounds.apply(this, arguments);\n }\n var mapZoom = this._animatingZoom ? Math.max(this._animateToZoom, this.getZoom()) : this.getZoom(),\n scale = this.getZoomScale(mapZoom, zoom),\n pixelCenter = this.project(center, zoom).floor(),\n size = this.getSize(),\n halfSize = new L.Bounds([\n this.containerPointToLayerPoint([0, 0]).floor(),\n this.containerPointToLayerPoint([size.x, 0]).floor(),\n this.containerPointToLayerPoint([0, size.y]).floor(),\n this.containerPointToLayerPoint([size.x, size.y]).floor()\n ]).getSize().divideBy(scale * 2);\n\n return new L.Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @return {L.Point} map pivot point (center)\n */\n _getPixelCenter: function() {\n if (!this._rotate && mapProto._getPixelCenter) {\n return mapProto._getPixelCenter.apply(this, arguments);\n }\n return this.getSize()._divideBy(2)._subtract(this._getMapPanePos());\n },\n\n /**\n * @since leaflet-rotate (v0.2)\n * \n * @see src\\layer\\vector\\Renderer::_update()\n */\n _getPaddedPixelBounds: function(padding) {\n if (!this._rotate && mapProto._getPaddedPixelBounds) {\n return mapProto._getPaddedPixelBounds.apply(this, arguments);\n }\n var p = padding,\n size = this.getSize(),\n padMin = size.multiplyBy(-p),\n padMax = size.multiplyBy(1 + p);\n //min = this.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n return new L.Bounds([\n this.containerPointToLayerPoint([padMin.x, padMin.y]).floor(),\n this.containerPointToLayerPoint([padMin.x, padMax.y]).floor(),\n this.containerPointToLayerPoint([padMax.x, padMin.y]).floor(),\n this.containerPointToLayerPoint([padMax.x, padMax.y]).floor()\n ]);\n },\n\n _handleGeolocationResponse: function(pos) {\n if (!this._container._leaflet_id) { return; }\n\n var lat = pos.coords.latitude,\n lng = pos.coords.longitude,\n /** @TODO use mapProto._handleGeolocationResponse */\n hdg = pos.coords.heading,\n latlng = new L.LatLng(lat, lng),\n bounds = latlng.toBounds(pos.coords.accuracy),\n options = this._locateOptions;\n\n if (options.setView) {\n var zoom = this.getBoundsZoom(bounds);\n this.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\n }\n\n var data = {\n latlng: latlng,\n bounds: bounds,\n timestamp: pos.timestamp,\n /** @TODO use mapProto._handleGeolocationResponse */\n heading: hdg\n };\n\n for (var i in pos.coords) {\n if (typeof pos.coords[i] === 'number') {\n data[i] = pos.coords[i];\n }\n }\n\n // @event locationfound: LocationEvent\n // Fired when geolocation (using the [`locate`](#map-locate) method)\n // went successfully.\n this.fire('locationfound', data);\n },\n\n /**\n * @see https://github.com/ronikar/Leaflet/blob/5c480ef959b947c3beed7065425a5a36c486262b/src/geo/LatLngBounds.js#L253-L264\n * \n * @param {L.Bounds} points \n * @returns {L.Bounds}\n */\n // toCircumscribedBounds(points) {\n // var minX = points.reduce(function (pv, v) { return Math.min(pv, v.x); }, points[0].x),\n // maxX = points.reduce(function (pv, v) { return Math.max(pv, v.x); }, points[0].x),\n // minY = points.reduce(function (pv, v) { return Math.min(pv, v.y); }, points[0].y),\n // maxY = points.reduce(function (pv, v) { return Math.max(pv, v.y); }, points[0].y);\n //\n // return L.bounds(L.point(minX, minY), L.point(maxX, maxY));\n // },\n\n});\n","/**\n * Rotates the map according to a smartphone's compass.\n * \n * @typedef L.Map.CompassBearing\n */\n\nL.Map.CompassBearing = L.Handler.extend({\n\n initialize: function(map) {\n this._map = map;\n /** @see https://caniuse.com/?search=DeviceOrientation */\n if ('ondeviceorientationabsolute' in window) {\n this.__deviceOrientationEvent = 'deviceorientationabsolute';\n } else if('ondeviceorientation' in window) {\n this.__deviceOrientationEvent = 'deviceorientation';\n }\n this._throttled = L.Util.throttle(this._onDeviceOrientation, 100, this);\n },\n\n addHooks: function() {\n if (this._map._rotate && this.__deviceOrientationEvent) {\n L.DomEvent.on(window, this.__deviceOrientationEvent, this._throttled, this);\n } else {\n // L.Map.CompassBearing handler will be automatically\n // disabled if device orientation is not supported.\n this.disable();\n }\n },\n\n removeHooks: function() {\n if (this._map._rotate && this.__deviceOrientationEvent) {\n L.DomEvent.off(window, this.__deviceOrientationEvent, this._throttled, this);\n }\n },\n\n /**\n * `DeviceOrientationEvent.absolute` - Indicates whether the device is providing absolute\n * orientation values (relatives to Magnetic North) or\n * using some arbitrary frame determined by the device.\n * \n * `DeviceOrientationEvent.alpha` - Returns the rotation of the device around the Z axis;\n * that is, the number of degrees by which the device is\n * being twisted around the center of the screen.\n * \n * `window.orientation` - Returns the screen orientation in degrees (in 90-degree increments)\n * of the viewport relative to the device's natural orientation.\n * Its only possible values are -90, 0, 90, and 180. Positive\n * values are counterclockwise; negative values are clockwise.\n * \n * @see https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/absolute\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/alpha\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/orientation\n */\n _onDeviceOrientation: function(e) {\n var angle = e.webkitCompassHeading || e.alpha;\n var deviceOrientation = 0;\n\n // Safari iOS\n if (!e.absolute && e.webkitCompassHeading) {\n angle = 360 - angle;\n }\n\n // Older browsers\n if (!e.absolute && 'undefined' !== typeof window.orientation) {\n deviceOrientation = window.orientation;\n }\n\n this._map.setBearing(angle - deviceOrientation);\n },\n\n});\n\n/**\n * Add Compass bearing handler to L.Map (disabled unless `window.DeviceOrientationEvent` is set).\n * \n * @property {L.Map.CompassBearing} compassBearing\n */\nL.Map.addInitHook('addHandler', 'compassBearing', L.Map.CompassBearing);\n","/**\n * Triggers `invalidateResize` when the map's DOM container mutates.\n * \n * @typedef L.Map.ContainerMutation\n */\n\n/**\n * @TODO check again this file after leaflet v1.9.3 (eg. L.Browser.mutation).\n * Mutation Observer support will likely be added by default in next releases.\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map uses mutation observers to\n * detect changes in its container and trigger\n * `invalidateSize`. Disabled by default due to\n * support not being available in all web browsers.\n *\n * @type {Boolean}\n * \n * @see https://developer.mozilla.org/docs/Web/API/MutationObserver\n */\n trackContainerMutation: false\n\n});\n\nL.Map.ContainerMutation = L.Handler.extend({\n\n addHooks: function() {\n // if (!L.Browser.mutation) { return; }\n if (!this._observer) {\n this._observer = new MutationObserver(L.Util.bind(this._map.invalidateSize, this._map));\n }\n this._observer.observe(this._map.getContainer(), {\n childList: false,\n attributes: true,\n characterData: false,\n subtree: false,\n attributeFilter: ['style']\n });\n },\n\n removeHooks: function() {\n // if (!L.Browser.mutation) { return; }\n this._observer.disconnect();\n },\n\n});\n\n/**\n * Add Container mutation handler to L.Map (disabled unless `trackContainerMutation` is set).\n * \n * @property {L.Map.ContainerMutation} trackContainerMutation\n */\nL.Map.addInitHook('addHandler', 'trackContainerMutation', L.Map.ContainerMutation);\n","/**\n * TouchGestures is both TouchZoom plus TouchRotate\n * \n * @see https://github.com/fnicollet/Leaflet/commit/a77af51a6b10f308d1b9a16552091d1d0aee8834\n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/handler/Map.TouchZoom.js\n * \n * @typedef L.Map.TouchGestures\n */\n\nL.Map.mergeOptions({\n\n /**\n * Set it to false if you don't want the map to\n * zoom beyond min/max zoom and then bounce back\n * when pinch-zooming.\n * \n * @type {Boolean}\n */\n bounceAtZoomLimits: true,\n\n});\n\nL.Map.TouchGestures = L.Handler.extend({\n\n initialize: function(map) {\n this._map = map;\n this.rotate = !!this._map.options.touchRotate;\n this.zoom = !!this._map.options.touchZoom;\n },\n\n addHooks: function() {\n L.DomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n },\n\n removeHooks: function() {\n L.DomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n },\n\n _onTouchStart: function(e) {\n var map = this._map;\n\n if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming || this._rotating) { return; }\n\n var p1 = map.mouseEventToContainerPoint(e.touches[0]),\n p2 = map.mouseEventToContainerPoint(e.touches[1]),\n vector = p1.subtract(p2);\n\n this._centerPoint = map.getSize()._divideBy(2);\n this._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\n if (this.zoom) {\n if (map.options.touchZoom !== 'center') {\n this._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n }\n this._startDist = p1.distanceTo(p2);\n this._startZoom = map.getZoom();\n this._zooming = true;\n } else {\n this._zooming = false;\n }\n\n if (this.rotate) {\n this._startTheta = Math.atan(vector.x / vector.y);\n this._startBearing = map.getBearing();\n if (vector.y < 0) { this._startBearing += 180; }\n this._rotating = true;\n } else {\n this._rotating = false;\n }\n\n this._moved = false;\n\n map._stop();\n\n L.DomEvent\n .on(document, 'touchmove', this._onTouchMove, this)\n .on(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n L.DomEvent.preventDefault(e);\n },\n\n _onTouchMove: function(e) {\n if (!e.touches || e.touches.length !== 2 || !(this._zooming || this._rotating)) { return; }\n\n var map = this._map,\n p1 = map.mouseEventToContainerPoint(e.touches[0]),\n p2 = map.mouseEventToContainerPoint(e.touches[1]),\n vector = p1.subtract(p2),\n scale = p1.distanceTo(p2) / this._startDist,\n delta;\n\n if (this._rotating) {\n var theta = Math.atan(vector.x / vector.y);\n var bearingDelta = (theta - this._startTheta) * L.DomUtil.RAD_TO_DEG;\n if (vector.y < 0) { bearingDelta += 180; }\n if (bearingDelta) {\n /**\n * @TODO the pivot should be the last touch point,\n * but zoomAnimation manages to overwrite the rotate\n * pane position. Maybe related to #3529.\n * \n * @see https://github.com/Leaflet/Leaflet/pull/3529\n * @see https://github.com/fnicollet/Leaflet/commit/a77af51a6b10f308d1b9a16552091d1d0aee8834\n */\n map.setBearing(this._startBearing - bearingDelta);\n }\n }\n\n if (this._zooming) {\n this._zoom = map.getScaleZoom(scale, this._startZoom);\n\n if (!map.options.bounceAtZoomLimits && (\n (this._zoom < map.getMinZoom() && scale < 1) ||\n (this._zoom > map.getMaxZoom() && scale > 1))) {\n this._zoom = map._limitZoom(this._zoom);\n }\n\n if (map.options.touchZoom === 'center') {\n this._center = this._startLatLng;\n if (scale === 1) { return; }\n } else {\n // Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n if (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\n var alpha = -map.getBearing() * L.DomUtil.DEG_TO_RAD;\n\n this._center = map.unproject(map.project(this._pinchStartLatLng).subtract(delta.rotate(alpha)));\n }\n\n }\n\n if (!this._moved) {\n map._moveStart(true, false);\n this._moved = true;\n }\n\n L.Util.cancelAnimFrame(this._animRequest);\n\n var moveFn = map._move.bind(map, this._center, this._zoom, { pinch: true, round: false }, undefined);\n this._animRequest = L.Util.requestAnimFrame(moveFn, this, true);\n \n if (this.zoom) {\n // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n if (this._map.options.zoomAnimation) {\n this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n } else {\n this._map._resetView(this._center, this._map._limitZoom(this._zoom));\n }\n }\n\n L.DomEvent.preventDefault(e);\n },\n\n _onTouchEnd: function() {\n if (!this._moved || !(this._zooming || this._rotating)) {\n this._zooming = false;\n return;\n }\n\n this._zooming = false;\n this._rotating = false;\n L.Util.cancelAnimFrame(this._animRequest);\n\n L.DomEvent\n .off(document, 'touchmove', this._onTouchMove, this)\n .off(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n if (this.zoom) {\n // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n if (this._map.options.zoomAnimation) {\n this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n } else {\n this._map._resetView(this._center, this._map._limitZoom(this._zoom));\n }\n }\n },\n\n});\n\n/**\n * Add Touch Gestures handler (enabled unless `touchGestures` is unset).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchGestures', L.Map.TouchGestures);\n","/**\n * Rotates the map on two-finger (touch devices).\n * \n * @typedef L.Map.TouchRotate\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be rotated with a two-finger rotation gesture\n * \n * @type {Boolean}\n */\n touchRotate: false,\n\n});\n\nL.Map.TouchRotate = L.Handler.extend({\n\n addHooks: function() {\n this._map.touchGestures.enable();\n this._map.touchGestures.rotate = true;\n },\n\n removeHooks: function() {\n this._map.touchGestures.rotate = false;\n },\n\n});\n\n/**\n * Add Touch Rotate handler (disabled unless `touchGestures` is set).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchRotate', L.Map.TouchRotate);\n","\n/**\n * Rotates the map on shift key + mousewheel scrolling (desktop).\n * \n * @typedef L.Map.ShiftKeyRotate\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be rotated with shift + wheel scroll\n * @type {Boolean}\n */\n shiftKeyRotate: true,\n\n});\n\nL.Map.ShiftKeyRotate = L.Handler.extend({\n\n addHooks: function() {\n L.DomEvent.on(this._map._container, \"wheel\", this._handleShiftScroll, this);\n // this._map.shiftKeyRotate.enable();\n this._map.shiftKeyRotate.rotate = true;\n },\n\n removeHooks: function() {\n L.DomEvent.off(this._map._container, \"wheel\", this._handleShiftScroll, this);\n this._map.shiftKeyRotate.rotate = false;\n },\n\n _handleShiftScroll: function(e) {\n if (e.shiftKey) {\n e.preventDefault();\n this._map.scrollWheelZoom.disable();\n this._map.setBearing((this._map._bearing * L.DomUtil.RAD_TO_DEG) + Math.sign(e.deltaY) * 5);\n } else {\n this._map.scrollWheelZoom.enable();\n }\n },\n\n});\n\n/**\n * Add ShiftKey handler to L.Map (enabled unless `shiftKeyRotate` is unset).\n * \n * @property {L.Map.ShiftKeyRotate} shiftKeyRotate\n */\nL.Map.addInitHook('addHandler', 'shiftKeyRotate', L.Map.ShiftKeyRotate);\n\n// decrease `scrollWheelZoom` handler priority over `shiftKeyRotate` handler\nL.Map.addInitHook(function() {\n if (this.scrollWheelZoom.enabled() && this.shiftKeyRotate.enabled()) {\n this.scrollWheelZoom.disable();\n this.scrollWheelZoom.enable();\n }\n});\n","/**\n * Adds pinch zoom rotation on mobile browsers\n * \n * @see https://github.com/Leaflet/Leaflet/blob/v1.9.3/src/map/handler/Map.TouchZoom.js\n * \n * @external L.Map.TouchZoom\n */\n\nL.Map.mergeOptions({\n\n /**\n * Whether the map can be zoomed by touch-dragging\n * with two fingers. If passed `'center'`, it will\n * zoom to the center of the view regardless of\n * where the touch events (fingers) were. Enabled\n * for touch-capable web browsers.\n * \n * @type {(Boolean|String)}\n */\n touchZoom: L.Browser.touch,\n\n /**\n * @TODO check if this is a duplicate of `L.Map.TouchGestures::bounceAtZoomLimits`\n * \n * Set it to false if you don't want the map to\n * zoom beyond min/max zoom and then bounce back\n * when pinch-zooming.\n * \n * @type {Boolean}\n */\n bounceAtZoomLimits: false,\n\n});\n\nL.Map.TouchZoom = L.Handler.extend({\n\n addHooks: function() {\n L.DomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n this._map.touchGestures.enable();\n this._map.touchGestures.zoom = true;\n },\n\n removeHooks: function() {\n L.DomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n this._map.touchGestures.zoom = false;\n },\n\n});\n\n/**\n * Add Touch Zoom handler (disabled unless `L.Browser.touch` is set).\n * \n * @property {L.Map.TouchGestures} touchGestures\n */\nL.Map.addInitHook('addHandler', 'touchZoom', L.Map.TouchZoom);\n","/**\n * A tri-state control for map rotation, states are:\n * \n * - Locked (default)\n * - Unlocked (user can pinch-rotate)\n * - Follow (rotation follows device orientation, if available)\n * \n * @typedef L.Control.Rotate\n */\n\nL.Control.Rotate = L.Control.extend({\n\n options: {\n position: 'topleft',\n closeOnZeroBearing: true\n },\n\n onAdd: function(map) {\n var container = this._container = L.DomUtil.create('div', 'leaflet-control-rotate leaflet-bar');\n\n // this.button = L.Control.Zoom.prototype._createButton.call(this, 'R', 'leaflet-control-rotate', 'leaflet-control-rotate', container, this._toggleLock);\n\n var arrow = this._arrow = L.DomUtil.create('span', 'leaflet-control-rotate-arrow');\n\n arrow.style.backgroundImage = `url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\")`;\n arrow.style.cursor = 'grab';\n arrow.style.display = 'block';\n arrow.style.width = '100%';\n arrow.style.height = '100%';\n arrow.style.backgroundRepeat = 'no-repeat';\n arrow.style.backgroundPosition = '50%';\n\n // Copy-pasted from L.Control.Zoom\n var link = this._link = L.DomUtil.create('a', 'leaflet-control-rotate-toggle', container);\n link.appendChild(arrow);\n link.href = '#';\n link.title = 'Rotate map';\n\n L.DomEvent\n .on(link, 'dblclick', L.DomEvent.stopPropagation)\n .on(link, 'mousedown', this._handleMouseDown, this)\n .on(link, 'click', L.DomEvent.stop)\n .on(link, 'click', this._cycleState, this)\n .on(link, 'click', this._refocusOnMap, this);\n\n if (!L.Browser.any3d) {\n L.DomUtil.addClass(link, 'leaflet-disabled');\n }\n\n this._restyle();\n\n map.on('rotate', this._restyle, this);\n\n // State flag\n this._follow = false;\n this._canFollow = false;\n\n if (this.options.closeOnZeroBearing && map.getBearing() === 0) {\n container.style.display = 'none';\n }\n\n return container;\n },\n \n onRemove: function(map) {\n map.off('rotate', this._restyle, this);\n },\n\n _handleMouseDown: function(e) {\n L.DomEvent.stop(e);\n this.dragging = true;\n this.dragstartX = e.pageX;\n this.dragstartY = e.pageY;\n L.DomEvent\n .on(document, 'mousemove', this._handleMouseDrag, this)\n .on(document, 'mouseup', this._handleMouseUp, this);\n },\n\n _handleMouseUp: function(e) {\n L.DomEvent.stop(e);\n this.dragging = false;\n\n L.DomEvent\n .off(document, 'mousemove', this._handleMouseDrag, this)\n .off(document, 'mouseup', this._handleMouseUp, this);\n },\n\n _handleMouseDrag: function(e) {\n if (!this.dragging) { return; }\n var deltaX = e.clientX - this.dragstartX;\n this._map.setBearing(deltaX);\n },\n\n _cycleState: function(ev) {\n if (!this._map) {\n return;\n }\n\n var map = this._map;\n\n // Touch mode\n if (!map.touchRotate.enabled() && !map.compassBearing.enabled()) {\n map.touchRotate.enable();\n }\n \n // Compass mode\n else if (!map.compassBearing.enabled()) {\n map.touchRotate.disable();\n (\n DeviceOrientationEvent && DeviceOrientationEvent.requestPermission\n ? DeviceOrientationEvent.requestPermission() // iOS compass\n : Promise.resolve('granted') // others\n ).then(state => \"granted\" === state && map.compassBearing.enable())\n }\n\n // Locked mode\n else {\n map.compassBearing.disable();\n map.setBearing(0);\n if (this.options.closeOnZeroBearing) {\n map.touchRotate.enable();\n }\n }\n this._restyle();\n },\n\n _restyle: function() {\n if (!this._map.options.rotate) {\n L.DomUtil.addClass(this._link, 'leaflet-disabled');\n } else {\n var map = this._map;\n var bearing = map.getBearing();\n\n this._arrow.style.transform = 'rotate(' + bearing + 'deg)';\n\n if (bearing && this.options.closeOnZeroBearing) {\n this._container.style.display = 'block';\n }\n\n // Compass mode\n if (map.compassBearing.enabled()) {\n this._link.style.backgroundColor = 'orange';\n }\n \n // Touch mode\n else if (map.touchRotate.enabled()) {\n this._link.style.backgroundColor = null;\n }\n\n // Locked mode\n else {\n this._link.style.backgroundColor = 'grey';\n if (0 === bearing && this.options.closeOnZeroBearing) {\n this._container.style.display = 'none';\n }\n }\n }\n },\n\n});\n\nL.control.rotate = function(options) {\n return new L.Control.Rotate(options);\n};\n\nL.Map.mergeOptions({\n rotateControl: true,\n});\n\nL.Map.addInitHook(function() {\n if (this.options.rotateControl) {\n var options = typeof this.options.rotateControl === 'object' ? this.options.rotateControl : {};\n this.rotateControl = L.control.rotate(options);\n this.addControl(this.rotateControl);\n }\n});\n"],"names":["domUtilProto","L","extend","DomUtil","setTransform","el","offset","scale","bearing","pivot","pos","Point","_round","apply","this","arguments","rotateFrom","style","TRANSFORM","x","y","setPosition","point","_leaflet_pos","Browser","any3d","left","top","DEG_TO_RAD","Math","PI","RAD_TO_DEG","Draggable","include","prototype","rotate","theta","sinTheta","sin","cosTheta","cos","cx","cy","divOverlayProto","DivOverlay","getEvents","_updatePosition","_map","_rotate","_zoomAnimated","anchor","_getAnchor","getPosition","_container","subtract","rotatedPointToMapPanePoint","add","popupProto","Popup","_animateZoom","e","_adjustPan","options","autoPan","_panAnim","_inProgress","_autopanning","map","marginBottom","parseInt","getStyle","containerHeight","offsetHeight","containerWidth","_containerWidth","layerPos","_containerLeft","_containerBottom","_add","containerPos","_getMapPanePos","padding","autoPanPadding","paddingTL","autoPanPaddingTopLeft","paddingBR","autoPanPaddingBottomRight","size","getSize","dx","dy","keepInView","fire","panBy","tooltipProto","Tooltip","_latLngToNewLayerPoint","_latlng","zoom","center","_setPosition","latLngToLayerPoint","Icon","_setIconStyles","img","name","sizeOption","shadowAnchor","iconAnchor","divideBy","className","marginLeft","marginTop","width","height","markerProto","Marker","markerDragProto","mergeOptions","rotation","rotateWithView","undefined","MarkerDrag","_onDrag","marker","_marker","rotated_marker","shadow","_shadow","iconPos","_icon","mapPanePointToRotatedPoint","latlng","layerPointToLatLng","oldLatLng","_oldLatLng","setLatLng","_onDragEnd","update","_initInteraction","ret","dragging","enabled","Object","getPrototypeOf","disable","assign","bind","enable","_setPos","_bearing","_zIndex","zIndexOffset","_resetZIndex","setRotation","gridLayerProto","GridLayer","events","updateWhenIdle","_onRotate","Util","throttle","_onMoveEnd","updateInterval","_getTiledPixelBounds","_getNewPixelBounds","_tileZoom","rendererProto","Renderer","_update","onAdd","version","classList","_updateTransform","getZoomScale","_zoom","_topLeft","_bounds","_getPaddedPixelBounds","min","_center","getCenter","getZoom","mapProto","Map","initialize","id","setBearing","containerPointToLayerPoint","_getRotatePanePos","layerPointToContainerPoint","_subtract","mapBoundsToContainerBounds","bounds","origin","getPixelOrigin","nw","project","getNorthWest","ne","getNorthEast","sw","getSouthWest","se","getSouthEast","max","getBounds","LatLngBounds","containerPointToLatLng","wrapNum","_getPixelCenter","oldPos","newPos","_rotatePane","_pivot","_rotatePanePos","getBearing","_initPanes","panes","_panes","_paneRenderers","_mapPane","createPane","_norotatePane","markerZoomAnimation","addClass","markerPane","shadowPane","panInside","abs","toFixed","paddingTopLeft","paddingBottomRight","rect","getBoundingClientRect","pixelPoint","latLngToContainerPoint","pixelBounds","pixelCenter","paddedBounds","paddedSize","contains","_enforcingBounds","centerOffset","panTo","getBoundsZoom","inside","latLngBounds","getMinZoom","getMaxZoom","boundsSize","snap","zoomSnap","scalex","scaley","getScaleZoom","round","ceil","floor","_getCenterOffset","_getNewPixelOrigin","viewHalf","_divideBy","mapZoom","_animatingZoom","_animateToZoom","halfSize","Bounds","p","padMin","multiplyBy","padMax","_handleGeolocationResponse","_leaflet_id","lat","coords","latitude","lng","longitude","hdg","heading","LatLng","toBounds","accuracy","_locateOptions","setView","maxZoom","data","timestamp","i","CompassBearing","Handler","window","__deviceOrientationEvent","_throttled","_onDeviceOrientation","addHooks","DomEvent","on","removeHooks","off","angle","webkitCompassHeading","alpha","deviceOrientation","absolute","orientation","addInitHook","trackContainerMutation","ContainerMutation","_observer","MutationObserver","invalidateSize","observe","getContainer","childList","attributes","characterData","subtree","attributeFilter","disconnect","bounceAtZoomLimits","TouchGestures","touchRotate","touchZoom","_onTouchStart","touches","length","_zooming","_rotating","p1","mouseEventToContainerPoint","p2","vector","_centerPoint","_startLatLng","_pinchStartLatLng","_startDist","distanceTo","_startZoom","_startTheta","atan","_startBearing","_moved","_stop","document","_onTouchMove","_onTouchEnd","preventDefault","delta","bearingDelta","_limitZoom","unproject","_moveStart","cancelAnimFrame","_animRequest","moveFn","_move","pinch","requestAnimFrame","zoomAnimation","_resetView","TouchRotate","touchGestures","shiftKeyRotate","ShiftKeyRotate","_handleShiftScroll","shiftKey","scrollWheelZoom","sign","deltaY","touch","TouchZoom","removeClass","Control","Rotate","position","closeOnZeroBearing","container","create","arrow","_arrow","backgroundImage","cursor","display","backgroundRepeat","backgroundPosition","link","_link","appendChild","href","title","stopPropagation","_handleMouseDown","stop","_cycleState","_refocusOnMap","_restyle","_follow","_canFollow","onRemove","dragstartX","pageX","dragstartY","pageY","_handleMouseDrag","_handleMouseUp","deltaX","clientX","ev","compassBearing","DeviceOrientationEvent","requestPermission","Promise","resolve","then","state","transform","backgroundColor","control","rotateControl","addControl"],"mappings":"2FAMA,MAAMA,EAAeC,EAAEC,OAAO,CAAE,EAAED,EAAEE,SAEpCF,EAAEC,OAAOD,EAAEE,QAAS,CAchBC,aAAc,SAASC,EAAIC,EAAQC,EAAOC,EAASC,GAC/C,IAAIC,EAAMJ,GAAU,IAAIL,EAAEU,MAAM,EAAG,GAEnC,IAAKH,EAED,OADAF,EAASI,EAAIE,SACNZ,EAAaI,aAAaS,MAAMC,KAAMC,WAGjDL,EAAMA,EAAIM,WAAWR,EAASC,GAE9BJ,EAAGY,MAAMhB,EAAEE,QAAQe,WACf,eAAiBR,EAAIS,EAAI,MAAQT,EAAIU,EAArC,SACCb,EAAQ,UAAYA,EAAQ,IAAM,IACnC,WAAaC,EAAU,MAC9B,EAcDa,YAAa,SAAShB,EAAIiB,EAAOd,EAASC,EAAOF,GAC7C,IAAKC,EACD,OAAOR,EAAaqB,YAAYR,MAAMC,KAAMC,WAIhDV,EAAGkB,aAAeD,EAGdrB,EAAEuB,QAAQC,MACVxB,EAAEE,QAAQC,aAAaC,EAAIiB,EAAOf,EAAOC,EAASC,IAElDJ,EAAGY,MAAMS,KAAOJ,EAAMH,EAAI,KAC1Bd,EAAGY,MAAMU,IAAML,EAAMF,EAAI,KAEhC,EAKDQ,WAAYC,KAAKC,GAAK,IAKtBC,WAAY,IAAMF,KAAKC,KC/D3B7B,EAAE+B,UAAUC,QAAQ,CAOpB,GCbAhC,EAAEC,OAAOD,EAAEU,MAAMuB,UAAW,CAUxBC,OAAQ,SAASC,GACb,OAAOtB,KAAKE,WAAWoB,EAAO,IAAInC,EAAEU,MAAM,EAAE,GAC/C,EAgBDK,WAAY,SAASoB,EAAO3B,GACxB,IAAK2B,EAAS,OAAOtB,KACrB,IAAIuB,EAAWR,KAAKS,IAAIF,GACpBG,EAAWV,KAAKW,IAAIJ,GACpBK,EAAKhC,EAAMU,EACXuB,EAAKjC,EAAMW,EACXD,EAAIL,KAAKK,EAAIsB,EACbrB,EAAIN,KAAKM,EAAIsB,EAEjB,OAAO,IAAIzC,EAAEU,MACTQ,EAAIoB,EAAWnB,EAAIiB,EAAWI,EAC9BtB,EAAIkB,EAAWjB,EAAImB,EAAWG,EAErC,ICzCL,MAAMC,EAAkB1C,EAAEC,OAAO,CAAA,EAAID,EAAE2C,WAAWV,WAElDjC,EAAE2C,WAAWX,QAAQ,CAQjBY,UAAW,WACP,OAAO5C,EAAEC,OAAOyC,EAAgBE,UAAUhC,MAAMC,KAAMC,WAAY,CAAEoB,OAAQrB,KAAKgC,iBACpF,EAMDA,gBAAiB,WACb,GAAKhC,KAAKiC,OACVJ,EAAgBG,gBAAgBjC,MAAMC,KAAMC,WACxCD,KAAKiC,MAAQjC,KAAKiC,KAAKC,SAAWlC,KAAKmC,eAAe,CACtD,IAAIC,EAASpC,KAAKqC,aACdzC,EAAMT,EAAEE,QAAQiD,YAAYtC,KAAKuC,YAAYC,SAASJ,GAC1DjD,EAAEE,QAAQkB,YAAYP,KAAKuC,WAAYvC,KAAKiC,KAAKQ,2BAA2B7C,GAAK8C,IAAIN,GACxF,CAEJ,IC3BL,MAAMO,EAAaxD,EAAEC,OAAO,CAAA,EAAID,EAAEyD,MAAMxB,WAExCjC,EAAEyD,MAAMzB,QAAQ,CAMZ0B,aAAc,SAASC,GAEnB,GADAH,EAAWE,aAAa9C,MAAMC,KAAMC,WAChCD,KAAKiC,MAAQjC,KAAKiC,KAAKC,QAAS,CAChC,IAAIE,EAASpC,KAAKqC,aACdzC,EAAMT,EAAEE,QAAQiD,YAAYtC,KAAKuC,YAAYC,SAASJ,GAC1DjD,EAAEE,QAAQkB,YAAYP,KAAKuC,WAAYvC,KAAKiC,KAAKQ,2BAA2B7C,GAAK8C,IAAIN,GACxF,CACJ,EAODW,WAAY,WACR,MAAK/C,KAAKgD,QAAQC,SAAYjD,KAAKiC,KAAKiB,UAAYlD,KAAKiC,KAAKiB,SAASC,aAIvE,GAAInD,KAAKoD,aACLpD,KAAKoD,cAAe,MADxB,CAKA,IAAIC,EAAMrD,KAAKiC,KACXqB,EAAeC,SAASpE,EAAEE,QAAQmE,SAASxD,KAAKuC,WAAY,gBAAiB,KAAO,EACpFkB,EAAkBzD,KAAKuC,WAAWmB,aAAeJ,EACjDK,EAAiB3D,KAAK4D,gBACtBC,EAAW,IAAI1E,EAAEU,MAAMG,KAAK8D,gBAAiBL,EAAkBzD,KAAK+D,kBAExEF,EAASG,KAAK7E,EAAEE,QAAQiD,YAAYtC,KAAKuC,aAIzC,IAAI0B,EAAeJ,EAASG,KAAKhE,KAAKiC,KAAKiC,kBACvCC,EAAUhF,EAAEqB,MAAMR,KAAKgD,QAAQoB,gBAC/BC,EAAYlF,EAAEqB,MAAMR,KAAKgD,QAAQsB,uBAAyBH,GAC1DI,EAAYpF,EAAEqB,MAAMR,KAAKgD,QAAQwB,2BAA6BL,GAC9DM,EAAOpB,EAAIqB,UACXC,EAAK,EACLC,EAAK,EAELX,EAAa5D,EAAIsD,EAAiBY,EAAUlE,EAAIoE,EAAKpE,IACrDsE,EAAKV,EAAa5D,EAAIsD,EAAiBc,EAAKpE,EAAIkE,EAAUlE,GAE1D4D,EAAa5D,EAAIsE,EAAKN,EAAUhE,EAAI,IACpCsE,EAAKV,EAAa5D,EAAIgE,EAAUhE,GAEhC4D,EAAa3D,EAAImD,EAAkBc,EAAUjE,EAAImE,EAAKnE,IACtDsE,EAAKX,EAAa3D,EAAImD,EAAkBgB,EAAKnE,EAAIiE,EAAUjE,GAE3D2D,EAAa3D,EAAIsE,EAAKP,EAAU/D,EAAI,IACpCsE,EAAKX,EAAa3D,EAAI+D,EAAU/D,IAOhCqE,GAAMC,KAEF5E,KAAKgD,QAAQ6B,aACb7E,KAAKoD,cAAe,GAExBC,EACKyB,KAAK,gBACLC,MAAM,CAACJ,EAAIC,IA5CnB,CA8CJ,IC5EL,MAAMI,EAAe7F,EAAEC,OAAO,CAAA,EAAID,EAAE8F,QAAQ7D,WAE5CjC,EAAE8F,QAAQ9D,QAAQ,CAEd0B,aAAc,SAASC,GACnB,IAAK9C,KAAKiC,KAAKC,QACX,OAAO8C,EAAanC,aAAa9C,MAAMC,KAAMC,WAEjD,IAAIL,EAAMI,KAAKiC,KAAKiD,uBAAuBlF,KAAKmF,QAASrC,EAAEsC,KAAMtC,EAAEuC,QAEnEzF,EAAMI,KAAKiC,KAAKQ,2BAA2B7C,GAC3CI,KAAKsF,aAAa1F,EACrB,EAEDoC,gBAAiB,WACb,IAAKhC,KAAKiC,KAAKC,QACX,OAAO8C,EAAahD,gBAAgBjC,MAAMC,KAAMC,WAEpD,IAAIL,EAAMI,KAAKiC,KAAKsD,mBAAmBvF,KAAKmF,SAE5CvF,EAAMI,KAAKiC,KAAKQ,2BAA2B7C,GAC3CI,KAAKsF,aAAa1F,EACrB,ICtBaT,EAAEC,OAAO,CAAE,EAAED,EAAEqG,KAAKpE,WAEtCjC,EAAEqG,KAAKrE,QAAQ,CAEXsE,eAAgB,SAASC,EAAKC,GAC1B,IAAI3C,EAAUhD,KAAKgD,QACf4C,EAAa5C,EAAQ2C,EAAO,QAEN,iBAAfC,IACPA,EAAa,CAACA,EAAYA,IAG9B,IAAInB,EAAOtF,EAAEqB,MAAMoF,GACfxD,EAASjD,EAAEqB,MAAe,WAATmF,GAAqB3C,EAAQ6C,cAAgB7C,EAAQ8C,YAClErB,GAAQA,EAAKsB,SAAS,GAAG,IAEjCL,EAAIM,UAAY,kBAAoBL,EAAO,KAAO3C,EAAQgD,WAAa,IAEnE5D,IACAsD,EAAIvF,MAAM8F,YAAe7D,EAAO/B,EAAK,KACrCqF,EAAIvF,MAAM+F,WAAc9D,EAAO9B,EAAK,KAEpCoF,EAAIvF,MAAMhB,EAAEE,QAAQe,UAAY,UAAYgC,EAAO/B,EAAI,MAAQ+B,EAAO9B,EAAI,UAG1EmE,IACAiB,EAAIvF,MAAMgG,MAAQ1B,EAAKpE,EAAI,KAC3BqF,EAAIvF,MAAMiG,OAAS3B,EAAKnE,EAAI,KAEnC,IC1BL,MAAM+F,EAAclH,EAAEC,OAAO,CAAA,EAAID,EAAEmH,OAAOlF,WA2B1C,IAAImF,EAzBJpH,EAAEmH,OAAOE,aAAa,CAOlBC,SAAU,EAOVC,gBAAgB,EAOhBjH,WAAOkH,IAMX,IAAIC,EAAa,CASbC,QAAS,SAAS/D,GACd,IAAIgE,EAAS9G,KAAK+G,QAEdC,EAAiBF,EAAO9D,QAAQyD,UAAYK,EAAO9D,QAAQ0D,eAC3DO,EAASH,EAAOI,QAChBC,EAAUhI,EAAEE,QAAQiD,YAAYwE,EAAOM,QAItCJ,GAAkBC,GACnB9H,EAAEE,QAAQkB,YAAY0G,EAAQE,GAI9BL,EAAO7E,KAAKC,UAEZiF,EAAUL,EAAO7E,KAAKoF,2BAA2BF,IAErD,IAAIG,EAASR,EAAO7E,KAAKsF,mBAAmBJ,GAE5CL,EAAO3B,QAAUmC,EACjBxE,EAAEwE,OAASA,EACXxE,EAAE0E,UAAYxH,KAAKyH,WAGfT,EAAgBF,EAAOY,UAAUJ,GAChCR,EAAOhC,KAAK,OAAQhC,GAIzBgE,EACKhC,KAAK,OAAQhC,EACrB,EAED6E,WAAY,SAAS7E,GACb9C,KAAK+G,QAAQ9E,KAAKC,SAClBlC,KAAK+G,QAAQa,SAEjBrB,EAAgBoB,WAAW5H,MAAMC,KAAMC,UAC1C,GAILd,EAAEmH,OAAOnF,QAAQ,CAQbY,UAAW,WACP,OAAO5C,EAAEC,OAAOiH,EAAYtE,UAAUhC,MAAMC,KAAMC,WAAY,CAAEoB,OAAQrB,KAAK4H,QAChF,EAEDC,iBAAkB,WACd,IAAIC,EAAMzB,EAAYwB,iBAAiB9H,MAAMC,KAAMC,WAYnD,OAXID,KAAK+H,UAAY/H,KAAK+H,SAASC,WAAahI,KAAKiC,MAAQjC,KAAKiC,KAAKC,UAEnEqE,EAAkBA,GAAmB0B,OAAOC,eAAelI,KAAK+H,UAChE/H,KAAK+H,SAASI,UACdF,OAAOG,OAAOpI,KAAK+H,SAAU,CAEzBlB,QAASD,EAAWC,QAAQwB,KAAKrI,KAAK+H,UACtCJ,WAAYf,EAAWe,WAAWU,KAAKrI,KAAK+H,YAEhD/H,KAAK+H,SAASO,UAEXR,CACV,EAEDS,QAAS,SAAS3I,GAGVI,KAAKiC,KAAKC,UACVtC,EAAMI,KAAKiC,KAAKQ,2BAA2B7C,IAI/C,IAAIF,EAAUM,KAAKgD,QAAQyD,UAAY,EACnCzG,KAAKgD,QAAQ0D,iBACbhH,GAAWM,KAAKiC,KAAKuG,UAIrBxI,KAAKoH,OACLjI,EAAEE,QAAQkB,YAAYP,KAAKoH,MAAOxH,EAAKF,EAASE,EAAKI,KAAKgD,QAAQvD,OAIlEO,KAAKkH,SACL/H,EAAEE,QAAQkB,YAAYP,KAAKkH,QAAStH,EAAKF,EAASE,EAAKI,KAAKgD,QAAQvD,OAGxEO,KAAKyI,QAAU7I,EAAIU,EAAIN,KAAKgD,QAAQ0F,aAEpC1I,KAAK2I,cACR,EASDC,YAAa,SAASnC,GAClBzG,KAAKgD,QAAQyD,SAAWA,EACxBzG,KAAK4H,QACR,ICtJL,MAAMiB,EAAiB1J,EAAEC,OAAO,CAAA,EAAID,EAAE2J,UAAU1H,WAEhDjC,EAAE2J,UAAU3H,QAAQ,CAQhBY,UAAW,WACP,IAAIgH,EAASF,EAAe9G,UAAUhC,MAAMC,KAAMC,WAOlD,OANID,KAAKiC,KAAKC,UAAYlC,KAAKgD,QAAQgG,iBAC9BhJ,KAAKiJ,YACNjJ,KAAKiJ,UAAY9J,EAAE+J,KAAKC,SAASnJ,KAAKoJ,WAAYpJ,KAAKgD,QAAQqG,eAAgBrJ,OAEnF+I,EAAO1H,OAASrB,KAAKiJ,WAElBF,CACV,EAEDO,qBAAsB,SAASjE,GAC3B,OAAKrF,KAAKiC,KAAKC,QAIRlC,KAAKiC,KAAKsH,mBAAmBlE,EAAQrF,KAAKwJ,WAHtCX,EAAeS,qBAAqBvJ,MAAMC,KAAMC,UAI9D,IC3BL,MAAMwJ,EAAgBtK,EAAEC,OAAO,CAAA,EAAID,EAAEuK,SAAStI,WAE9CjC,EAAEuK,SAASvI,QAAQ,CAQfY,UAAW,WACP,OAAO5C,EAAEC,OAAOqK,EAAc1H,UAAUhC,MAAMC,KAAMC,WAAY,CAAEoB,OAAQrB,KAAK2J,SAClF,EAODC,MAAO,WACHH,EAAcG,MAAM7J,MAAMC,KAAMC,WAC5Bd,EAAE0K,SAAW,SAEb7J,KAAKuC,WAAWuH,UAAUpH,IAAI,wBAErC,EAqBDqH,iBAAkB,SAAS1E,EAAQD,GAC/B,IAAKpF,KAAKiC,KAAKC,QACX,OAAOuH,EAAcM,iBAAiBhK,MAAMC,KAAMC,WAKtD,IAAIR,EAAQO,KAAKiC,KAAK+H,aAAa5E,EAAMpF,KAAKiK,OAC1CzK,EAASQ,KAAKiC,KAAKiD,uBAAuBlF,KAAKkK,SAAU9E,EAAMC,GAEnElG,EAAEE,QAAQC,aAAaU,KAAKuC,WAAY/C,EAAQC,EAEnD,EA4CDkK,QAAS,WACL,IAAK3J,KAAKiC,KAAKC,QACX,OAAOuH,EAAcE,QAAQ5J,MAAMC,KAAMC,WAI7CD,KAAKmK,QAAUnK,KAAKiC,KAAKmI,sBAAsBpK,KAAKgD,QAAQmB,SAC5DnE,KAAKkK,SAAWlK,KAAKiC,KAAKsF,mBAAmBvH,KAAKmK,QAAQE,KAC1DrK,KAAKsK,QAAUtK,KAAKiC,KAAKsI,YACzBvK,KAAKiK,MAAQjK,KAAKiC,KAAKuI,SAC1B,IChHL,MAAMC,EAAWtL,EAAEC,OAAO,CAAA,EAAID,EAAEuL,IAAItJ,WAEpCjC,EAAEuL,IAAIlE,aAAa,CAAEnF,QAAQ,EAAO3B,QAAS,IAE7CP,EAAEuL,IAAIvJ,QAAQ,CAMVwJ,WAAY,SAASC,EAAI5H,GACjBA,EAAQ3B,SACRrB,KAAKkC,SAAU,EACflC,KAAKwI,SAAW,GAEpBiC,EAASE,WAAW5K,MAAMC,KAAMC,WAC7BD,KAAKgD,QAAQ3B,QACdrB,KAAK6K,WAAW7K,KAAKgD,QAAQtD,QAElC,EAUDoL,2BAA4B,SAAStK,GACjC,OAAKR,KAAKkC,QAGH/C,EAAEqB,MAAMA,GACVgC,SAASxC,KAAKkE,kBACdhE,YAAYF,KAAKwI,SAAUxI,KAAK+K,qBAChCvI,SAASxC,KAAK+K,qBALRN,EAASK,2BAA2B/K,MAAMC,KAAMC,UAM9D,EASD+K,2BAA4B,SAASxK,GACjC,OAAKR,KAAKkC,QAGH/C,EAAEqB,MAAMA,GACVkC,IAAI1C,KAAK+K,qBACT7K,WAAWF,KAAKwI,SAAUxI,KAAK+K,qBAC/BrI,IAAI1C,KAAKkE,kBALHuG,EAASO,2BAA2BjL,MAAMC,KAAMC,UAM9D,EAcDwC,2BAA4B,SAASjC,GACjC,OAAOrB,EAAEqB,MAAMA,GACVa,OAAOrB,KAAKwI,UACZxE,KAAKhE,KAAK+K,oBAClB,EAaD1D,2BAA4B,SAAS7G,GACjC,OAAOrB,EAAEqB,MAAMA,GACVyK,UAAUjL,KAAK+K,qBACf1J,QAAQrB,KAAKwI,SACrB,EAsBD0C,2BAA4B,SAAUC,GAClC,IAAKnL,KAAKkC,SAAWuI,EAASS,2BAC1B,OAAOT,EAASS,2BAA2BnL,MAAMC,KAAMC,WAS3D,MAAMmL,EAASpL,KAAKqL,iBACdC,EAAKtL,KAAKgL,2BAA2BhL,KAAKuL,QAAQJ,EAAOK,gBAAgBP,UAAUG,IACnFK,EAAKzL,KAAKgL,2BAA2BhL,KAAKuL,QAAQJ,EAAOO,gBAAgBT,UAAUG,IACnFO,EAAK3L,KAAKgL,2BAA2BhL,KAAKuL,QAAQJ,EAAOS,gBAAgBX,UAAUG,IACnFS,EAAK7L,KAAKgL,2BAA2BhL,KAAKuL,QAAQJ,EAAOW,gBAAgBb,UAAUG,IAEzF,OAAOjM,EAAEgM,OAAO,CACZhM,EAAEqB,MAAMO,KAAKsJ,IAAIiB,EAAGjL,EAAGoL,EAAGpL,EAAGwL,EAAGxL,EAAGsL,EAAGtL,GAAIU,KAAKsJ,IAAIiB,EAAGhL,EAAGmL,EAAGnL,EAAGuL,EAAGvL,EAAGqL,EAAGrL,IACxEnB,EAAEqB,MAAMO,KAAKgL,IAAIT,EAAGjL,EAAGoL,EAAGpL,EAAGwL,EAAGxL,EAAGsL,EAAGtL,GAAIU,KAAKgL,IAAIT,EAAGhL,EAAGmL,EAAGnL,EAAGuL,EAAGvL,EAAGqL,EAAGrL,KAE/E,EAYD0L,UAAW,WACP,IAAKhM,KAAKkC,QACN,OAAOuI,EAASuB,UAAUjM,MAAMC,KAAMC,WAa1C,IAAIwE,EAAOzE,KAAK0E,UAChB,OAAO,IAAIvF,EAAE8M,aAAa,CACtBjM,KAAKkM,uBAAuB,CAAC,EAAG,IAChClM,KAAKkM,uBAAuB,CAACzH,EAAKpE,EAAG,IACrCL,KAAKkM,uBAAuB,CAACzH,EAAKpE,EAAGoE,EAAKnE,IAC1CN,KAAKkM,uBAAuB,CAAC,EAAGzH,EAAKnE,KAE5C,EA0BDuK,WAAY,SAASvJ,GACjB,GAAKnC,EAAEuB,QAAQC,OAAUX,KAAKkC,QAA9B,CAEA,IAAIxC,EAAUP,EAAE+J,KAAKiD,QAAQ7K,EAAO,CAAC,EAAG,MAAQnC,EAAEE,QAAQyB,WACtDuE,EAASrF,KAAKoM,kBACdC,EAASrM,KAAK+K,oBAAoB7K,YAAYF,KAAKwI,SAAUnD,GAC7DiH,EAASD,EAAOnM,WAAWR,EAAS2F,GAGxClG,EAAEE,QAAQkB,YAAYP,KAAKuM,YAAaF,EAAQ3M,EAAS2F,GAEzDrF,KAAKwM,OAASnH,EACdrF,KAAKwI,SAAW9I,EAChBM,KAAKyM,eAAiBH,EAEtBtM,KAAK8E,KAAK,SAdwC,CAerD,EASD4H,WAAY,WACR,OAAO1M,KAAKwI,SAAWrJ,EAAEE,QAAQ4B,UACpC,EAwCD0L,WAAY,WACR,IAAIC,EAAQ5M,KAAK6M,OAAS,GAC1B7M,KAAK8M,eAAiB,GAEtB9M,KAAK+M,SAAW/M,KAAKgN,WAAW,UAAWhN,KAAKuC,YAChDpD,EAAEE,QAAQkB,YAAYP,KAAK+M,SAAU,IAAI5N,EAAEU,MAAM,EAAG,IAEhDG,KAAKkC,SACLlC,KAAKuM,YAAcvM,KAAKgN,WAAW,aAAchN,KAAK+M,UACtD/M,KAAKiN,cAAgBjN,KAAKgN,WAAW,eAAgBhN,KAAK+M,UAE1D/M,KAAKgN,WAAW,WAAYhN,KAAKuM,aACjCvM,KAAKgN,WAAW,cAAehN,KAAKuM,aAEpCvM,KAAKgN,WAAW,aAAchN,KAAKiN,eACnCjN,KAAKgN,WAAW,aAAchN,KAAKiN,eACnCjN,KAAKgN,WAAW,cAAehN,KAAKiN,eACpCjN,KAAKgN,WAAW,YAAahN,KAAKiN,iBAElCjN,KAAKgN,WAAW,YAChBhN,KAAKgN,WAAW,eAChBhN,KAAKgN,WAAW,cAChBhN,KAAKgN,WAAW,cAChBhN,KAAKgN,WAAW,eAChBhN,KAAKgN,WAAW,cAGfhN,KAAKgD,QAAQkK,sBACd/N,EAAEE,QAAQ8N,SAASP,EAAMQ,WAAY,qBACrCjO,EAAEE,QAAQ8N,SAASP,EAAMS,WAAY,qBAE5C,EAeDC,UAAUhG,EAAQtE,GACd,IAAKhD,KAAKkC,SAAWnB,KAAKwM,IAAIvN,KAAKwI,UAAUgF,QAAQ,GAAK,GACtD,OAAO/C,EAAS6C,UAAUvN,MAAMC,KAAMC,WAG1C+C,EAAUA,GAAW,GAErB,MAAMqB,EAAYlF,EAAEqB,MAAMwC,EAAQyK,gBAAkBzK,EAAQmB,SAAW,CAAC,EAAG,IACvEI,EAAYpF,EAAEqB,MAAMwC,EAAQ0K,oBAAsB1K,EAAQmB,SAAW,CAAC,EAAG,IAKzEwJ,EAAO3N,KAAKuC,WAAWqL,wBACvBC,EAAa7N,KAAK8N,uBAAuBxG,GACzCyG,EAAc5O,EAAEgM,OAAO,CAAEhM,EAAEqB,MAAMmN,GAAOxO,EAAEqB,MAAMmN,GAAMjL,IAAI1C,KAAK0E,aAC/DsJ,EAAcD,EAAYxD,YAE1B0D,EAAe9O,EAAEgM,OAAO,CAAC4C,EAAY1D,IAAI3H,IAAI2B,GAAY0J,EAAYhC,IAAIvJ,SAAS+B,KAClF2J,EAAaD,EAAavJ,UAE9B,IAAKuJ,EAAaE,SAASN,GAAa,CACpC7N,KAAKoO,kBAAmB,EACxB,MAAMC,EAAeR,EAAWrL,SAASyL,EAAa1D,aAChD/K,EAASyO,EAAa7O,OAAOyO,GAAYnJ,UAAUlC,SAAS0L,GAClEF,EAAY3N,GAAKgO,EAAahO,EAAI,GAAKb,EAAOa,EAAIb,EAAOa,EACzD2N,EAAY1N,GAAK+N,EAAa/N,EAAI,GAAKd,EAAOc,EAAId,EAAOc,EAGzDN,KAAKsO,MAAMtO,KAAKkM,uBAAuB8B,GAAchL,GAErDhD,KAAKoO,kBAAmB,CAC3B,CACD,OAAOpO,IACV,EAyFDuO,cAAcpD,EAAQqD,EAAQrK,GAC1B,IAAKnE,KAAKkC,SAAWnB,KAAKwM,IAAIvN,KAAKwI,UAAUgF,QAAQ,GAAK,GACtD,OAAO/C,EAAS8D,cAAcxO,MAAMC,KAAMC,WAG9CkL,EAAShM,EAAEsP,aAAatD,GACxBhH,EAAUhF,EAAEqB,MAAM2D,GAAW,CAAC,EAAG,IAEjC,IAAIiB,EAAOpF,KAAKwK,WAAa,EAC7B,MAAMH,EAAMrK,KAAK0O,aACT3C,EAAM/L,KAAK2O,aAMXlK,EAAOzE,KAAK0E,UAAUlC,SAAS2B,GAC/ByK,EAAa5O,KAAKkL,2BAA2BC,GAAQzG,UACrDmK,EAAO7O,KAAKgD,QAAQ8L,SACpBC,EAAStK,EAAKpE,EAAIuO,EAAWvO,EAC7B2O,EAASvK,EAAKnE,EAAIsO,EAAWtO,EAC7Bb,EAAQ+O,EAASzN,KAAKgL,IAAIgD,EAAQC,GAAUjO,KAAKsJ,IAAI0E,EAAQC,GASrE,OAPA5J,EAAOpF,KAAKiP,aAAaxP,EAAO2F,GAE5ByJ,IACAzJ,EAAOrE,KAAKmO,MAAM9J,GAAQyJ,EAAO,OAASA,EAAO,KACjDzJ,EAAOoJ,EAASzN,KAAKoO,KAAK/J,EAAOyJ,GAAQA,EAAO9N,KAAKqO,MAAMhK,EAAOyJ,GAAQA,GAGvE9N,KAAKgL,IAAI1B,EAAKtJ,KAAKsJ,IAAI0B,EAAK3G,GACtC,EAgBDiK,iBAAkB,SAAS/H,GACvB,IAAI+G,EAAe5D,EAAS4E,iBAAiBtP,MAAMC,KAAMC,WAIzD,OAHID,KAAKkC,UACLmM,EAAeA,EAAahN,OAAOrB,KAAKwI,WAErC6F,CACV,EAKDtD,kBAAmB,WACf,OAAO/K,KAAKyM,gBAAkB,IAAItN,EAAEU,MAAM,EAAG,EAEhD,EAODyP,mBAAoB,SAASjK,EAAQD,GACjC,IAAKpF,KAAKkC,QACN,OAAOuI,EAAS6E,mBAAmBvP,MAAMC,KAAMC,WAEnD,IAAIsP,EAAWvP,KAAK0E,UAAU8K,UAAU,GACxC,OAAOxP,KAAKuL,QAAQlG,EAAQD,GACvB/D,OAAOrB,KAAKwI,UACZyC,UAAUsE,GACVvL,KAAKhE,KAAKkE,kBACVF,KAAKhE,KAAK+K,qBACV1J,QAAQrB,KAAKwI,UACb1I,QACR,EAODyJ,mBAAoB,SAASlE,EAAQD,GAGjC,GAFAC,EAASA,GAAUrF,KAAKuK,YACxBnF,EAAOA,GAAQpF,KAAKwK,WACfxK,KAAKkC,SAAWuI,EAASlB,mBAC1B,OAAOkB,EAASlB,mBAAmBxJ,MAAMC,KAAMC,WAEnD,IAAIwP,EAAUzP,KAAK0P,eAAiB3O,KAAKgL,IAAI/L,KAAK2P,eAAgB3P,KAAKwK,WAAaxK,KAAKwK,UACrF/K,EAAQO,KAAKgK,aAAayF,EAASrK,GACnC4I,EAAchO,KAAKuL,QAAQlG,EAAQD,GAAMgK,QACzC3K,EAAOzE,KAAK0E,UACZkL,EAAW,IAAIzQ,EAAE0Q,OAAO,CACpB7P,KAAK8K,2BAA2B,CAAC,EAAG,IAAIsE,QACxCpP,KAAK8K,2BAA2B,CAACrG,EAAKpE,EAAG,IAAI+O,QAC7CpP,KAAK8K,2BAA2B,CAAC,EAAGrG,EAAKnE,IAAI8O,QAC7CpP,KAAK8K,2BAA2B,CAACrG,EAAKpE,EAAGoE,EAAKnE,IAAI8O,UACnD1K,UAAUqB,SAAiB,EAARtG,GAE1B,OAAO,IAAIN,EAAE0Q,OAAO7B,EAAYxL,SAASoN,GAAW5B,EAAYtL,IAAIkN,GACvE,EAODxD,gBAAiB,WACb,OAAKpM,KAAKkC,SAAWuI,EAAS2B,gBACnB3B,EAAS2B,gBAAgBrM,MAAMC,KAAMC,WAEzCD,KAAK0E,UAAU8K,UAAU,GAAGvE,UAAUjL,KAAKkE,iBACrD,EAODkG,sBAAuB,SAASjG,GAC5B,IAAKnE,KAAKkC,SAAWuI,EAASL,sBAC1B,OAAOK,EAASL,sBAAsBrK,MAAMC,KAAMC,WAEtD,IAAI6P,EAAI3L,EACJM,EAAOzE,KAAK0E,UACZqL,EAAStL,EAAKuL,YAAYF,GAC1BG,EAASxL,EAAKuL,WAAW,EAAIF,GAGjC,OAAO,IAAI3Q,EAAE0Q,OAAO,CAChB7P,KAAK8K,2BAA2B,CAACiF,EAAO1P,EAAG0P,EAAOzP,IAAI8O,QACtDpP,KAAK8K,2BAA2B,CAACiF,EAAO1P,EAAG4P,EAAO3P,IAAI8O,QACtDpP,KAAK8K,2BAA2B,CAACmF,EAAO5P,EAAG0P,EAAOzP,IAAI8O,QACtDpP,KAAK8K,2BAA2B,CAACmF,EAAO5P,EAAG4P,EAAO3P,IAAI8O,SAE7D,EAEDc,2BAA4B,SAAStQ,GACjC,GAAKI,KAAKuC,WAAW4N,YAArB,CAEA,IAAIC,EAAMxQ,EAAIyQ,OAAOC,SACjBC,EAAM3Q,EAAIyQ,OAAOG,UAEjBC,EAAM7Q,EAAIyQ,OAAOK,QACjBpJ,EAAS,IAAInI,EAAEwR,OAAOP,EAAKG,GAC3BpF,EAAS7D,EAAOsJ,SAAShR,EAAIyQ,OAAOQ,UACpC7N,EAAUhD,KAAK8Q,eAEnB,GAAI9N,EAAQ+N,QAAS,CACjB,IAAI3L,EAAOpF,KAAKuO,cAAcpD,GAC9BnL,KAAK+Q,QAAQzJ,EAAQtE,EAAQgO,QAAUjQ,KAAKsJ,IAAIjF,EAAMpC,EAAQgO,SAAW5L,EAC5E,CAED,IAAI6L,EAAO,CACP3J,OAAQA,EACR6D,OAAQA,EACR+F,UAAWtR,EAAIsR,UAEfR,QAASD,GAGb,IAAK,IAAIU,KAAKvR,EAAIyQ,OACe,iBAAlBzQ,EAAIyQ,OAAOc,KAClBF,EAAKE,GAAKvR,EAAIyQ,OAAOc,IAO7BnR,KAAK8E,KAAK,gBAAiBmM,EAhCkB,CAiChD,IC5lBL9R,EAAEuL,IAAI0G,eAAiBjS,EAAEkS,QAAQjS,OAAO,CAEpCuL,WAAY,SAAStH,GACjBrD,KAAKiC,KAAOoB,EAER,gCAAiCiO,OACjCtR,KAAKuR,yBAA2B,4BAC1B,wBAAyBD,SAC/BtR,KAAKuR,yBAA2B,qBAEpCvR,KAAKwR,WAAarS,EAAE+J,KAAKC,SAASnJ,KAAKyR,qBAAsB,IAAKzR,KACrE,EAED0R,SAAU,WACF1R,KAAKiC,KAAKC,SAAWlC,KAAKuR,yBAC1BpS,EAAEwS,SAASC,GAAGN,OAAQtR,KAAKuR,yBAA0BvR,KAAKwR,WAAYxR,MAItEA,KAAKmI,SAEZ,EAED0J,YAAa,WACL7R,KAAKiC,KAAKC,SAAWlC,KAAKuR,0BAC1BpS,EAAEwS,SAASG,IAAIR,OAAQtR,KAAKuR,yBAA0BvR,KAAKwR,WAAYxR,KAE9E,EAoBDyR,qBAAsB,SAAS3O,GAC3B,IAAIiP,EAAQjP,EAAEkP,sBAAwBlP,EAAEmP,MACpCC,EAAoB,GAGnBpP,EAAEqP,UAAYrP,EAAEkP,uBACjBD,EAAQ,IAAMA,GAIbjP,EAAEqP,eAAY,IAAuBb,OAAOc,cAC7CF,EAAoBZ,OAAOc,aAG/BpS,KAAKiC,KAAK4I,WAAWkH,EAAQG,EAChC,IASL/S,EAAEuL,IAAI2H,YAAY,aAAc,iBAAkBlT,EAAEuL,IAAI0G,gBClExDjS,EAAEuL,IAAIlE,aAAa,CAYf8L,wBAAwB,IAI5BnT,EAAEuL,IAAI6H,kBAAoBpT,EAAEkS,QAAQjS,OAAO,CAEvCsS,SAAU,WAED1R,KAAKwS,YACNxS,KAAKwS,UAAY,IAAIC,iBAAiBtT,EAAE+J,KAAKb,KAAKrI,KAAKiC,KAAKyQ,eAAgB1S,KAAKiC,QAErFjC,KAAKwS,UAAUG,QAAQ3S,KAAKiC,KAAK2Q,eAAgB,CAC7CC,WAAW,EACXC,YAAY,EACZC,eAAe,EACfC,SAAS,EACTC,gBAAiB,CAAC,UAEzB,EAEDpB,YAAa,WAET7R,KAAKwS,UAAUU,YAClB,IASL/T,EAAEuL,IAAI2H,YAAY,aAAc,yBAA0BlT,EAAEuL,IAAI6H,mBC9ChEpT,EAAEuL,IAAIlE,aAAa,CASf2M,oBAAoB,IAIxBhU,EAAEuL,IAAI0I,cAAgBjU,EAAEkS,QAAQjS,OAAO,CAEnCuL,WAAY,SAAStH,GACjBrD,KAAKiC,KAAOoB,EACZrD,KAAKqB,SAAWrB,KAAKiC,KAAKe,QAAQqQ,YAClCrT,KAAKoF,OAASpF,KAAKiC,KAAKe,QAAQsQ,SACnC,EAED5B,SAAU,WACNvS,EAAEwS,SAASC,GAAG5R,KAAKiC,KAAKM,WAAY,aAAcvC,KAAKuT,cAAevT,KACzE,EAED6R,YAAa,WACT1S,EAAEwS,SAASG,IAAI9R,KAAKiC,KAAKM,WAAY,aAAcvC,KAAKuT,cAAevT,KAC1E,EAEDuT,cAAe,SAASzQ,GACpB,IAAIO,EAAMrD,KAAKiC,KAEf,GAAKa,EAAE0Q,SAAgC,IAArB1Q,EAAE0Q,QAAQC,SAAgBpQ,EAAIqM,iBAAkB1P,KAAK0T,WAAY1T,KAAK2T,UAAxF,CAEA,IAAIC,EAAKvQ,EAAIwQ,2BAA2B/Q,EAAE0Q,QAAQ,IAC9CM,EAAKzQ,EAAIwQ,2BAA2B/Q,EAAE0Q,QAAQ,IAC9CO,EAASH,EAAGpR,SAASsR,GAEzB9T,KAAKgU,aAAe3Q,EAAIqB,UAAU8K,UAAU,GAC5CxP,KAAKiU,aAAe5Q,EAAI6I,uBAAuBlM,KAAKgU,cAEhDhU,KAAKoF,MACyB,WAA1B/B,EAAIL,QAAQsQ,YACZtT,KAAKkU,kBAAoB7Q,EAAI6I,uBAAuB0H,EAAGlR,IAAIoR,GAAItE,UAAU,KAE7ExP,KAAKmU,WAAaP,EAAGQ,WAAWN,GAChC9T,KAAKqU,WAAahR,EAAImH,UACtBxK,KAAK0T,UAAW,GAEhB1T,KAAK0T,UAAW,EAGhB1T,KAAKqB,QACLrB,KAAKsU,YAAcvT,KAAKwT,KAAKR,EAAO1T,EAAI0T,EAAOzT,GAC/CN,KAAKwU,cAAgBnR,EAAIqJ,aACrBqH,EAAOzT,EAAI,IAAKN,KAAKwU,eAAiB,KAC1CxU,KAAK2T,WAAY,GAEjB3T,KAAK2T,WAAY,EAGrB3T,KAAKyU,QAAS,EAEdpR,EAAIqR,QAEJvV,EAAEwS,SACGC,GAAG+C,SAAU,YAAa3U,KAAK4U,aAAc5U,MAC7C4R,GAAG+C,SAAU,uBAAwB3U,KAAK6U,YAAa7U,MAE5Db,EAAEwS,SAASmD,eAAehS,EArCoF,CAsCjH,EAED8R,aAAc,SAAS9R,GACnB,GAAKA,EAAE0Q,SAAgC,IAArB1Q,EAAE0Q,QAAQC,SAAkBzT,KAAK0T,UAAY1T,KAAK2T,WAApE,CAEA,IAKIoB,EALA1R,EAAMrD,KAAKiC,KACX2R,EAAKvQ,EAAIwQ,2BAA2B/Q,EAAE0Q,QAAQ,IAC9CM,EAAKzQ,EAAIwQ,2BAA2B/Q,EAAE0Q,QAAQ,IAC9CO,EAASH,EAAGpR,SAASsR,GACrBrU,EAAQmU,EAAGQ,WAAWN,GAAM9T,KAAKmU,WAGrC,GAAInU,KAAK2T,UAAW,CAChB,IACIqB,GADQjU,KAAKwT,KAAKR,EAAO1T,EAAI0T,EAAOzT,GACZN,KAAKsU,aAAenV,EAAEE,QAAQ4B,WACtD8S,EAAOzT,EAAI,IAAK0U,GAAgB,KAChCA,GASA3R,EAAIwH,WAAW7K,KAAKwU,cAAgBQ,EAE3C,CAED,GAAIhV,KAAK0T,SASL,GARA1T,KAAKiK,MAAQ5G,EAAI4L,aAAaxP,EAAOO,KAAKqU,aAErChR,EAAIL,QAAQmQ,qBACRnT,KAAKiK,MAAQ5G,EAAIqL,cAAgBjP,EAAQ,GACzCO,KAAKiK,MAAQ5G,EAAIsL,cAAgBlP,EAAQ,KAC9CO,KAAKiK,MAAQ5G,EAAI4R,WAAWjV,KAAKiK,QAGP,WAA1B5G,EAAIL,QAAQsQ,WAEZ,GADAtT,KAAKsK,QAAUtK,KAAKiU,aACN,IAAVxU,EAAe,WAChB,CAGH,GADAsV,EAAQnB,EAAG5P,KAAK8P,GAAItE,UAAU,GAAGvE,UAAUjL,KAAKgU,cAClC,IAAVvU,GAA2B,IAAZsV,EAAM1U,GAAuB,IAAZ0U,EAAMzU,EAAW,OAErD,IAAI2R,GAAS5O,EAAIqJ,aAAevN,EAAEE,QAAQyB,WAE1Cd,KAAKsK,QAAUjH,EAAI6R,UAAU7R,EAAIkI,QAAQvL,KAAKkU,mBAAmB1R,SAASuS,EAAM1T,OAAO4Q,IAC1F,CAIAjS,KAAKyU,SACNpR,EAAI8R,YAAW,GAAM,GACrBnV,KAAKyU,QAAS,GAGlBtV,EAAE+J,KAAKkM,gBAAgBpV,KAAKqV,cAE5B,IAAIC,EAASjS,EAAIkS,MAAMlN,KAAKhF,EAAKrD,KAAKsK,QAAStK,KAAKiK,MAAO,CAAEuL,OAAO,EAAMtG,OAAO,QAASvI,GAC1F3G,KAAKqV,aAAelW,EAAE+J,KAAKuM,iBAAiBH,EAAQtV,MAAM,GAEtDA,KAAKoF,OAEDpF,KAAKiC,KAAKe,QAAQ0S,cAClB1V,KAAKiC,KAAKY,aAAa7C,KAAKsK,QAAStK,KAAKiC,KAAKgT,WAAWjV,KAAKiK,QAAQ,EAAMjK,KAAKiC,KAAKe,QAAQ8L,UAE/F9O,KAAKiC,KAAK0T,WAAW3V,KAAKsK,QAAStK,KAAKiC,KAAKgT,WAAWjV,KAAKiK,SAIrE9K,EAAEwS,SAASmD,eAAehS,EArEiE,CAsE9F,EAED+R,YAAa,WACJ7U,KAAKyU,SAAYzU,KAAK0T,UAAY1T,KAAK2T,YAK5C3T,KAAK0T,UAAW,EAChB1T,KAAK2T,WAAY,EACjBxU,EAAE+J,KAAKkM,gBAAgBpV,KAAKqV,cAE5BlW,EAAEwS,SACGG,IAAI6C,SAAU,YAAa3U,KAAK4U,aAAc5U,MAC9C8R,IAAI6C,SAAU,uBAAwB3U,KAAK6U,YAAa7U,MAEzDA,KAAKoF,OAEDpF,KAAKiC,KAAKe,QAAQ0S,cAClB1V,KAAKiC,KAAKY,aAAa7C,KAAKsK,QAAStK,KAAKiC,KAAKgT,WAAWjV,KAAKiK,QAAQ,EAAMjK,KAAKiC,KAAKe,QAAQ8L,UAE/F9O,KAAKiC,KAAK0T,WAAW3V,KAAKsK,QAAStK,KAAKiC,KAAKgT,WAAWjV,KAAKiK,UAjBjEjK,KAAK0T,UAAW,CAoBvB,IASLvU,EAAEuL,IAAI2H,YAAY,aAAc,gBAAiBlT,EAAEuL,IAAI0I,eCnLvDjU,EAAEuL,IAAIlE,aAAa,CAOf6M,aAAa,IAIjBlU,EAAEuL,IAAIkL,YAAczW,EAAEkS,QAAQjS,OAAO,CAEjCsS,SAAU,WACN1R,KAAKiC,KAAK4T,cAAcvN,SACxBtI,KAAKiC,KAAK4T,cAAcxU,QAAS,CACpC,EAEDwQ,YAAa,WACT7R,KAAKiC,KAAK4T,cAAcxU,QAAS,CACpC,IASLlC,EAAEuL,IAAI2H,YAAY,aAAc,cAAelT,EAAEuL,IAAIkL,aC5BrDzW,EAAEuL,IAAIlE,aAAa,CAMfsP,gBAAgB,IAIpB3W,EAAEuL,IAAIqL,eAAiB5W,EAAEkS,QAAQjS,OAAO,CAEpCsS,SAAU,WACNvS,EAAEwS,SAASC,GAAG5R,KAAKiC,KAAKM,WAAY,QAASvC,KAAKgW,mBAAoBhW,MAEtEA,KAAKiC,KAAK6T,eAAezU,QAAS,CACrC,EAEDwQ,YAAa,WACT1S,EAAEwS,SAASG,IAAI9R,KAAKiC,KAAKM,WAAY,QAASvC,KAAKgW,mBAAoBhW,MACvEA,KAAKiC,KAAK6T,eAAezU,QAAS,CACrC,EAED2U,mBAAoB,SAASlT,GACrBA,EAAEmT,UACFnT,EAAEgS,iBACF9U,KAAKiC,KAAKiU,gBAAgB/N,UAC1BnI,KAAKiC,KAAK4I,WAAY7K,KAAKiC,KAAKuG,SAAWrJ,EAAEE,QAAQ4B,WAAoC,EAAtBF,KAAKoV,KAAKrT,EAAEsT,UAE/EpW,KAAKiC,KAAKiU,gBAAgB5N,QAEjC,IASLnJ,EAAEuL,IAAI2H,YAAY,aAAc,iBAAkBlT,EAAEuL,IAAIqL,gBAGxD5W,EAAEuL,IAAI2H,aAAY,WACVrS,KAAKkW,gBAAgBlO,WAAahI,KAAK8V,eAAe9N,YACtDhI,KAAKkW,gBAAgB/N,UACrBnI,KAAKkW,gBAAgB5N,SAE7B,IC/CAnJ,EAAEuL,IAAIlE,aAAa,CAWf8M,UAAWnU,EAAEuB,QAAQ2V,MAWrBlD,oBAAoB,IAIxBhU,EAAEuL,IAAI4L,UAAYnX,EAAEkS,QAAQjS,OAAO,CAE/BsS,SAAU,WACNvS,EAAEE,QAAQ8N,SAASnN,KAAKiC,KAAKM,WAAY,sBACzCvC,KAAKiC,KAAK4T,cAAcvN,SACxBtI,KAAKiC,KAAK4T,cAAczQ,MAAO,CAClC,EAEDyM,YAAa,WACT1S,EAAEE,QAAQkX,YAAYvW,KAAKiC,KAAKM,WAAY,sBAC5CvC,KAAKiC,KAAK4T,cAAczQ,MAAO,CAClC,IASLjG,EAAEuL,IAAI2H,YAAY,aAAc,YAAalT,EAAEuL,IAAI4L,WC5CnDnX,EAAEqX,QAAQC,OAAStX,EAAEqX,QAAQpX,OAAO,CAEhC4D,QAAS,CACL0T,SAAU,UACVC,oBAAoB,GAGxB/M,MAAO,SAASvG,GACZ,IAAIuT,EAAY5W,KAAKuC,WAAapD,EAAEE,QAAQwX,OAAO,MAAO,sCAItDC,EAAQ9W,KAAK+W,OAAS5X,EAAEE,QAAQwX,OAAO,OAAQ,gCAEnDC,EAAM3W,MAAM6W,gBAAkB,kPAC9BF,EAAM3W,MAAM8W,OAAS,OACrBH,EAAM3W,MAAM+W,QAAU,QACtBJ,EAAM3W,MAAMgG,MAAQ,OACpB2Q,EAAM3W,MAAMiG,OAAS,OACrB0Q,EAAM3W,MAAMgX,iBAAmB,YAC/BL,EAAM3W,MAAMiX,mBAAqB,MAGjC,IAAIC,EAAOrX,KAAKsX,MAAQnY,EAAEE,QAAQwX,OAAO,IAAK,gCAAiCD,GA4B/E,OA3BAS,EAAKE,YAAYT,GACjBO,EAAKG,KAAO,IACZH,EAAKI,MAAQ,aAEbtY,EAAEwS,SACGC,GAAGyF,EAAM,WAAYlY,EAAEwS,SAAS+F,iBAChC9F,GAAGyF,EAAM,YAAarX,KAAK2X,iBAAkB3X,MAC7C4R,GAAGyF,EAAM,QAASlY,EAAEwS,SAASiG,MAC7BhG,GAAGyF,EAAM,QAASrX,KAAK6X,YAAa7X,MACpC4R,GAAGyF,EAAM,QAASrX,KAAK8X,cAAe9X,MAEtCb,EAAEuB,QAAQC,OACXxB,EAAEE,QAAQ8N,SAASkK,EAAM,oBAG7BrX,KAAK+X,WAEL1U,EAAIuO,GAAG,SAAU5R,KAAK+X,SAAU/X,MAGhCA,KAAKgY,SAAU,EACfhY,KAAKiY,YAAa,EAEdjY,KAAKgD,QAAQ2T,oBAA2C,IAArBtT,EAAIqJ,eACvCkK,EAAUzW,MAAM+W,QAAU,QAGvBN,CACV,EAEDsB,SAAU,SAAS7U,GACfA,EAAIyO,IAAI,SAAU9R,KAAK+X,SAAU/X,KACpC,EAED2X,iBAAkB,SAAS7U,GACvB3D,EAAEwS,SAASiG,KAAK9U,GAChB9C,KAAK+H,UAAW,EAChB/H,KAAKmY,WAAarV,EAAEsV,MACpBpY,KAAKqY,WAAavV,EAAEwV,MACpBnZ,EAAEwS,SACGC,GAAG+C,SAAU,YAAa3U,KAAKuY,iBAAkBvY,MACjD4R,GAAG+C,SAAU,UAAW3U,KAAKwY,eAAgBxY,KACrD,EAEDwY,eAAgB,SAAS1V,GACrB3D,EAAEwS,SAASiG,KAAK9U,GAChB9C,KAAK+H,UAAW,EAEhB5I,EAAEwS,SACGG,IAAI6C,SAAU,YAAa3U,KAAKuY,iBAAkBvY,MAClD8R,IAAI6C,SAAU,UAAW3U,KAAKwY,eAAgBxY,KACtD,EAEDuY,iBAAkB,SAASzV,GACvB,GAAK9C,KAAK+H,SAAV,CACA,IAAI0Q,EAAS3V,EAAE4V,QAAU1Y,KAAKmY,WAC9BnY,KAAKiC,KAAK4I,WAAW4N,EAFU,CAGlC,EAEDZ,YAAa,SAASc,GAClB,GAAK3Y,KAAKiC,KAAV,CAIA,IAAIoB,EAAMrD,KAAKiC,KAGVoB,EAAIgQ,YAAYrL,WAAc3E,EAAIuV,eAAe5Q,UAK5C3E,EAAIuV,eAAe5Q,WAWzB3E,EAAIuV,eAAezQ,UACnB9E,EAAIwH,WAAW,GACX7K,KAAKgD,QAAQ2T,oBACbtT,EAAIgQ,YAAY/K,WAbpBjF,EAAIgQ,YAAYlL,WAEZ0Q,wBAA0BA,uBAAuBC,kBAC3CD,uBAAuBC,oBACvBC,QAAQC,QAAQ,YACxBC,MAAKC,GAAS,YAAcA,GAAS7V,EAAIuV,eAAetQ,YAV1DjF,EAAIgQ,YAAY/K,SAqBpBtI,KAAK+X,UA3BJ,CA4BJ,EAEDA,SAAU,WACN,GAAK/X,KAAKiC,KAAKe,QAAQ3B,OAEhB,CACH,IAAIgC,EAAMrD,KAAKiC,KACXvC,EAAU2D,EAAIqJ,aAElB1M,KAAK+W,OAAO5W,MAAMgZ,UAAY,UAAYzZ,EAAU,OAEhDA,GAAWM,KAAKgD,QAAQ2T,qBACxB3W,KAAKuC,WAAWpC,MAAM+W,QAAU,SAIhC7T,EAAIuV,eAAe5Q,UACnBhI,KAAKsX,MAAMnX,MAAMiZ,gBAAkB,SAI9B/V,EAAIgQ,YAAYrL,UACrBhI,KAAKsX,MAAMnX,MAAMiZ,gBAAkB,MAKnCpZ,KAAKsX,MAAMnX,MAAMiZ,gBAAkB,OAC/B,IAAM1Z,GAAWM,KAAKgD,QAAQ2T,qBAC9B3W,KAAKuC,WAAWpC,MAAM+W,QAAU,QAG3C,MA5BG/X,EAAEE,QAAQ8N,SAASnN,KAAKsX,MAAO,mBA6BtC,IAILnY,EAAEka,QAAQhY,OAAS,SAAS2B,GACxB,OAAO,IAAI7D,EAAEqX,QAAQC,OAAOzT,EAChC,EAEA7D,EAAEuL,IAAIlE,aAAa,CACf8S,eAAe,IAGnBna,EAAEuL,IAAI2H,aAAY,WACd,GAAIrS,KAAKgD,QAAQsW,cAAe,CAC5B,IAAItW,EAAgD,iBAA/BhD,KAAKgD,QAAQsW,cAA6BtZ,KAAKgD,QAAQsW,cAAgB,GAC5FtZ,KAAKsZ,cAAgBna,EAAEka,QAAQhY,OAAO2B,GACtChD,KAAKuZ,WAAWvZ,KAAKsZ,cACxB,CACL"} \ No newline at end of file From 7ab3bfd4fdb3ab3442eeb3035b5b4818b46c6671 Mon Sep 17 00:00:00 2001 From: Raruto Date: Tue, 26 Nov 2024 11:15:06 +0100 Subject: [PATCH 3/3] jsdoc --- src/map/handler/TouchGestures.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/map/handler/TouchGestures.js b/src/map/handler/TouchGestures.js index e05d778..513ae60 100644 --- a/src/map/handler/TouchGestures.js +++ b/src/map/handler/TouchGestures.js @@ -140,6 +140,9 @@ L.Map.TouchGestures = L.Handler.extend({ var moveFn = map._move.bind(map, this._center, this._zoom, { pinch: true, round: false }, undefined); this._animRequest = L.Util.requestAnimFrame(moveFn, this, true); + /** + * @see https://github.com/Raruto/leaflet-rotate/issues/43 + */ if (this.zoom) { // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate. if (this._map.options.zoomAnimation) {