track/node_modules/pigeon-maps/lib/index.cjs.js

2099 lines
70 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var React = require('react');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
enumerableOnly && (symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
})), keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = null != arguments[i] ? arguments[i] : {};
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
_defineProperty(target, key, source[key]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
_setPrototypeOf(subClass, superClass);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function debounce(func, wait) {
var timeout;
return function () {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var context = this;
clearTimeout(timeout);
timeout = setTimeout(function () {
return func.apply(context, args);
}, wait);
};
}
function parentHasClass(element, className) {
while (element) {
if (element.classList && element.classList.contains(className)) {
return true;
}
element = element.parentElement;
}
return false;
}
function parentPosition(element) {
var rect = element.getBoundingClientRect();
return {
x: rect.left,
y: rect.top
};
}
function osm(x, y, z) {
return "https://tile.openstreetmap.org/" + z + "/" + x + "/" + y + ".png";
}
var ANIMATION_TIME = 300;
var DIAGONAL_THROW_TIME = 1500;
var SCROLL_PIXELS_FOR_ZOOM_LEVEL = 150;
var MIN_DRAG_FOR_THROW = 40;
var CLICK_TOLERANCE = 2;
var DOUBLE_CLICK_DELAY = 300;
var DEBOUNCE_DELAY = 60;
var PINCH_RELEASE_THROW_DELAY = 300;
var WARNING_DISPLAY_TIMEOUT = 300;
var NOOP = function NOOP() {
return true;
};
var lng2tile = function lng2tile(lon, zoom) {
return (lon + 180) / 360 * Math.pow(2, zoom);
};
var lat2tile = function lat2tile(lat, zoom) {
return (1 - Math.log(Math.tan(lat * Math.PI / 180) + 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom);
};
function tile2lng(x, z) {
return x / Math.pow(2, z) * 360 - 180;
}
function tile2lat(y, z) {
var n = Math.PI - 2 * Math.PI * y / Math.pow(2, z);
return 180 / Math.PI * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));
}
function getMousePixel(dom, event) {
var parent = parentPosition(dom);
return [event.clientX - parent.x, event.clientY - parent.y];
}
function easeOutQuad(t) {
return t * (2 - t);
}
var absoluteMinMax = [tile2lat(Math.pow(2, 10), 10), tile2lat(0, 10), tile2lng(0, 10), tile2lng(Math.pow(2, 10), 10)];
var hasWindow = typeof window !== 'undefined';
var performanceNow = hasWindow && window.performance && window.performance.now ? function () {
return window.performance.now();
} : function () {
var timeStart = new Date().getTime();
return function () {
return new Date().getTime() - timeStart;
};
}();
var requestAnimationFrame = function requestAnimationFrame(callback) {
if (hasWindow) {
return (window.requestAnimationFrame || window.setTimeout)(callback);
} else {
callback(new Date().getTime());
return null;
}
};
var cancelAnimationFrame = function cancelAnimationFrame(animFrame) {
return hasWindow && animFrame ? (window.cancelAnimationFrame || window.clearTimeout)(animFrame) : false;
};
function srcSet(dprs, url, x, y, z) {
if (!dprs || dprs.length === 0) {
return '';
}
return dprs.map(function (dpr) {
return url(x, y, z, dpr) + (dpr === 1 ? '' : " " + dpr + "x");
}).join(', ');
}
var ImgTile = function ImgTile(_ref) {
var tile = _ref.tile,
tileLoaded = _ref.tileLoaded;
return /*#__PURE__*/React__default["default"].createElement("img", {
src: tile.url,
srcSet: tile.srcSet,
width: tile.width,
height: tile.height,
loading: 'lazy',
onLoad: tileLoaded,
alt: '',
style: {
position: 'absolute',
left: tile.left,
top: tile.top,
willChange: 'transform',
transformOrigin: 'top left',
opacity: 1
}
});
};
var Map = /*#__PURE__*/function (_Component) {
_inheritsLoose(Map, _Component);
function Map(props) {
var _ref2, _props$defaultZoom, _ref3, _props$defaultCenter, _ref4, _props$width, _ref5, _props$height;
var _this;
_this = _Component.call(this, props) || this;
_defineProperty(_assertThisInitialized(_this), "_containerRef", void 0);
_defineProperty(_assertThisInitialized(_this), "_mousePosition", void 0);
_defineProperty(_assertThisInitialized(_this), "_loadTracker", void 0);
_defineProperty(_assertThisInitialized(_this), "_dragStart", null);
_defineProperty(_assertThisInitialized(_this), "_mouseDown", false);
_defineProperty(_assertThisInitialized(_this), "_moveEvents", []);
_defineProperty(_assertThisInitialized(_this), "_lastClick", null);
_defineProperty(_assertThisInitialized(_this), "_lastTap", null);
_defineProperty(_assertThisInitialized(_this), "_lastWheel", null);
_defineProperty(_assertThisInitialized(_this), "_touchStartPixel", null);
_defineProperty(_assertThisInitialized(_this), "_touchStartMidPoint", null);
_defineProperty(_assertThisInitialized(_this), "_touchStartDistance", null);
_defineProperty(_assertThisInitialized(_this), "_secondTouchEnd", null);
_defineProperty(_assertThisInitialized(_this), "_warningClearTimeout", null);
_defineProperty(_assertThisInitialized(_this), "_isAnimating", false);
_defineProperty(_assertThisInitialized(_this), "_animationStart", null);
_defineProperty(_assertThisInitialized(_this), "_animationEnd", null);
_defineProperty(_assertThisInitialized(_this), "_zoomStart", null);
_defineProperty(_assertThisInitialized(_this), "_centerTarget", null);
_defineProperty(_assertThisInitialized(_this), "_zoomTarget", null);
_defineProperty(_assertThisInitialized(_this), "_zoomAround", null);
_defineProperty(_assertThisInitialized(_this), "_animFrame", null);
_defineProperty(_assertThisInitialized(_this), "_boundsSynced", false);
_defineProperty(_assertThisInitialized(_this), "_minMaxCache", null);
_defineProperty(_assertThisInitialized(_this), "_lastZoom", void 0);
_defineProperty(_assertThisInitialized(_this), "_lastCenter", void 0);
_defineProperty(_assertThisInitialized(_this), "_centerStart", void 0);
_defineProperty(_assertThisInitialized(_this), "_resizeObserver", null);
_defineProperty(_assertThisInitialized(_this), "updateWidthHeight", function () {
if (_this._containerRef) {
var rect = _this._containerRef.getBoundingClientRect();
if (rect && rect.width > 0 && rect.height > 0) {
_this.setState({
width: rect.width,
height: rect.height
});
return true;
}
}
return false;
});
_defineProperty(_assertThisInitialized(_this), "wa", function () {
var _window;
return (_window = window).addEventListener.apply(_window, arguments);
});
_defineProperty(_assertThisInitialized(_this), "wr", function () {
var _window2;
return (_window2 = window).removeEventListener.apply(_window2, arguments);
});
_defineProperty(_assertThisInitialized(_this), "bindMouseEvents", function () {
_this.wa('mousedown', _this.handleMouseDown);
_this.wa('mouseup', _this.handleMouseUp);
_this.wa('mousemove', _this.handleMouseMove);
});
_defineProperty(_assertThisInitialized(_this), "bindTouchEvents", function () {
_this.wa('touchstart', _this.handleTouchStart, {
passive: false
});
_this.wa('touchmove', _this.handleTouchMove, {
passive: false
});
_this.wa('touchend', _this.handleTouchEnd, {
passive: false
});
});
_defineProperty(_assertThisInitialized(_this), "unbindMouseEvents", function () {
_this.wr('mousedown', _this.handleMouseDown);
_this.wr('mouseup', _this.handleMouseUp);
_this.wr('mousemove', _this.handleMouseMove);
});
_defineProperty(_assertThisInitialized(_this), "unbindTouchEvents", function () {
_this.wr('touchstart', _this.handleTouchStart);
_this.wr('touchmove', _this.handleTouchMove);
_this.wr('touchend', _this.handleTouchEnd);
});
_defineProperty(_assertThisInitialized(_this), "bindResizeEvent", function () {
_this.wa('resize', _this.updateWidthHeight);
});
_defineProperty(_assertThisInitialized(_this), "unbindResizeEvent", function () {
_this.wr('resize', _this.updateWidthHeight);
});
_defineProperty(_assertThisInitialized(_this), "bindWheelEvent", function () {
if (_this._containerRef) {
_this._containerRef.addEventListener('wheel', _this.handleWheel, {
passive: false
});
}
});
_defineProperty(_assertThisInitialized(_this), "unbindWheelEvent", function () {
if (_this._containerRef) {
_this._containerRef.removeEventListener('wheel', _this.handleWheel);
}
});
_defineProperty(_assertThisInitialized(_this), "setCenterZoomTarget", function (center, zoom, fromProps, zoomAround, animationDuration) {
if (fromProps === void 0) {
fromProps = false;
}
if (zoomAround === void 0) {
zoomAround = null;
}
if (animationDuration === void 0) {
animationDuration = ANIMATION_TIME;
}
if (_this.props.animate && (!fromProps || _this.distanceInScreens(center, zoom, _this.state.center, _this.state.zoom) <= _this.props.animateMaxScreens)) {
if (_this._isAnimating) {
cancelAnimationFrame(_this._animFrame);
var _this$animationStep = _this.animationStep(performanceNow()),
centerStep = _this$animationStep.centerStep,
zoomStep = _this$animationStep.zoomStep;
_this._centerStart = centerStep;
_this._zoomStart = zoomStep;
} else {
_this._isAnimating = true;
_this._centerStart = _this.limitCenterAtZoom([_this._lastCenter[0], _this._lastCenter[1]], _this._lastZoom);
_this._zoomStart = _this._lastZoom;
_this.onAnimationStart();
}
_this._animationStart = performanceNow();
_this._animationEnd = _this._animationStart + animationDuration;
if (zoomAround) {
_this._zoomAround = zoomAround;
_this._centerTarget = _this.calculateZoomCenter(_this._lastCenter, zoomAround, _this._lastZoom, zoom);
} else {
_this._zoomAround = null;
_this._centerTarget = center;
}
_this._zoomTarget = zoom;
_this._animFrame = requestAnimationFrame(_this.animate);
} else {
_this.stopAnimating();
if (zoomAround) {
var _center = _this.calculateZoomCenter(_this._lastCenter, zoomAround, _this._lastZoom, zoom);
_this.setCenterZoom(_center, zoom, fromProps);
} else {
_this.setCenterZoom(center || _this.state.center, zoom, fromProps);
}
}
});
_defineProperty(_assertThisInitialized(_this), "setCenterZoomForChildren", function (center, zoom) {
_this.setCenterZoomTarget(center || _this.state.center, zoom || _this.state.zoom, true);
});
_defineProperty(_assertThisInitialized(_this), "distanceInScreens", function (centerTarget, zoomTarget, center, zoom) {
var _this$state = _this.state,
width = _this$state.width,
height = _this$state.height;
var l1 = _this.latLngToPixel(center, center, zoom);
var l2 = _this.latLngToPixel(centerTarget, center, zoom);
var z1 = _this.latLngToPixel(center, center, zoomTarget);
var z2 = _this.latLngToPixel(centerTarget, center, zoomTarget);
var w = (Math.abs(l1[0] - l2[0]) + Math.abs(z1[0] - z2[0])) / 2 / width;
var h = (Math.abs(l1[1] - l2[1]) + Math.abs(z1[1] - z2[1])) / 2 / height;
return Math.sqrt(w * w + h * h);
});
_defineProperty(_assertThisInitialized(_this), "animationStep", function (timestamp) {
if (!_this._animationEnd || !_this._animationStart || !_this._zoomTarget || !_this._zoomStart || !_this._centerStart || !_this._centerTarget) {
return {
centerStep: _this.state.center,
zoomStep: _this.state.zoom
};
}
var length = _this._animationEnd - _this._animationStart;
var progress = Math.max(timestamp - _this._animationStart, 0);
var percentage = easeOutQuad(progress / length);
var zoomDiff = (_this._zoomTarget - _this._zoomStart) * percentage;
var zoomStep = _this._zoomStart + zoomDiff;
if (_this._zoomAround) {
var centerStep = _this.calculateZoomCenter(_this._centerStart, _this._zoomAround, _this._zoomStart, zoomStep);
return {
centerStep: centerStep,
zoomStep: zoomStep
};
} else {
var _centerStep = [_this._centerStart[0] + (_this._centerTarget[0] - _this._centerStart[0]) * percentage, _this._centerStart[1] + (_this._centerTarget[1] - _this._centerStart[1]) * percentage];
return {
centerStep: _centerStep,
zoomStep: zoomStep
};
}
});
_defineProperty(_assertThisInitialized(_this), "animate", function (timestamp) {
if (!_this._animationEnd || timestamp >= _this._animationEnd) {
_this._isAnimating = false;
_this.setCenterZoom(_this._centerTarget, _this._zoomTarget, true);
_this.onAnimationStop();
} else {
var _this$animationStep2 = _this.animationStep(timestamp),
centerStep = _this$animationStep2.centerStep,
zoomStep = _this$animationStep2.zoomStep;
_this.setCenterZoom(centerStep, zoomStep);
_this._animFrame = requestAnimationFrame(_this.animate);
}
});
_defineProperty(_assertThisInitialized(_this), "stopAnimating", function () {
if (_this._isAnimating) {
_this._isAnimating = false;
_this.onAnimationStop();
cancelAnimationFrame(_this._animFrame);
}
});
_defineProperty(_assertThisInitialized(_this), "limitCenterAtZoom", function (center, zoom) {
var minMax = _this.getBoundsMinMax(zoom || _this.state.zoom);
return [Math.max(Math.min(!center || isNaN(center[0]) ? _this.state.center[0] : center[0], minMax[1]), minMax[0]), Math.max(Math.min(!center || isNaN(center[1]) ? _this.state.center[1] : center[1], minMax[3]), minMax[2])];
});
_defineProperty(_assertThisInitialized(_this), "onAnimationStart", function () {
_this.props.onAnimationStart && _this.props.onAnimationStart();
});
_defineProperty(_assertThisInitialized(_this), "onAnimationStop", function () {
_this.props.onAnimationStop && _this.props.onAnimationStop();
});
_defineProperty(_assertThisInitialized(_this), "setCenterZoom", function (center, zoom, animationEnded) {
if (animationEnded === void 0) {
animationEnded = false;
}
var limitedCenter = _this.limitCenterAtZoom(center, zoom);
if (zoom && Math.round(_this.state.zoom) !== Math.round(zoom)) {
var tileValues = _this.tileValues(_this.state);
var nextValues = _this.tileValues({
center: limitedCenter,
zoom: zoom,
width: _this.state.width,
height: _this.state.height
});
var oldTiles = _this.state.oldTiles;
_this.setState({
oldTiles: oldTiles.filter(function (o) {
return o.roundedZoom !== tileValues.roundedZoom;
}).concat(tileValues)
}, NOOP);
var loadTracker = {};
for (var x = nextValues.tileMinX; x <= nextValues.tileMaxX; x++) {
for (var y = nextValues.tileMinY; y <= nextValues.tileMaxY; y++) {
var key = x + "-" + y + "-" + nextValues.roundedZoom;
loadTracker[key] = false;
}
}
_this._loadTracker = loadTracker;
}
_this.setState({
center: limitedCenter,
zoom: zoom || _this.state.zoom
}, NOOP);
var maybeZoom = _this.props.zoom ? _this.props.zoom : _this._lastZoom;
var maybeCenter = _this.props.center ? _this.props.center : _this._lastCenter;
if (zoom && (animationEnded || Math.abs(maybeZoom - zoom) > 0.001 || Math.abs(maybeCenter[0] - limitedCenter[0]) > 0.00001 || Math.abs(maybeCenter[1] - limitedCenter[1]) > 0.00001)) {
_this._lastZoom = zoom;
_this._lastCenter = [].concat(limitedCenter);
_this.syncToProps(limitedCenter, zoom);
}
});
_defineProperty(_assertThisInitialized(_this), "getBoundsMinMax", function (zoom) {
if (_this.props.limitBounds === 'center') {
return absoluteMinMax;
}
var _this$state2 = _this.state,
width = _this$state2.width,
height = _this$state2.height;
if (_this._minMaxCache && _this._minMaxCache[0] === zoom && _this._minMaxCache[1] === width && _this._minMaxCache[2] === height) {
return _this._minMaxCache[3];
}
var pixelsAtZoom = Math.pow(2, zoom) * 256;
var minLng = width > pixelsAtZoom ? 0 : tile2lng(width / 512, zoom);
var minLat = height > pixelsAtZoom ? 0 : tile2lat(Math.pow(2, zoom) - height / 512, zoom);
var maxLng = width > pixelsAtZoom ? 0 : tile2lng(Math.pow(2, zoom) - width / 512, zoom);
var maxLat = height > pixelsAtZoom ? 0 : tile2lat(height / 512, zoom);
var minMax = [minLat, maxLat, minLng, maxLng];
_this._minMaxCache = [zoom, width, height, minMax];
return minMax;
});
_defineProperty(_assertThisInitialized(_this), "tileLoaded", function (key) {
if (_this._loadTracker && key in _this._loadTracker) {
_this._loadTracker[key] = true;
var unloadedCount = Object.values(_this._loadTracker).filter(function (v) {
return !v;
}).length;
if (unloadedCount === 0) {
_this.setState({
oldTiles: []
}, NOOP);
}
}
});
_defineProperty(_assertThisInitialized(_this), "handleTouchStart", function (event) {
if (!_this._containerRef) {
return;
}
if (event.target && parentHasClass(event.target, 'pigeon-drag-block')) {
return;
}
if (event.touches.length === 1) {
var touch = event.touches[0];
var pixel = getMousePixel(_this._containerRef, touch);
if (_this.coordsInside(pixel)) {
_this._touchStartPixel = [pixel];
if (!_this.props.twoFingerDrag) {
_this.stopAnimating();
if (_this._lastTap && performanceNow() - _this._lastTap < DOUBLE_CLICK_DELAY) {
event.preventDefault();
var latLngNow = _this.pixelToLatLng(_this._touchStartPixel[0]);
_this.setCenterZoomTarget(null, Math.max(_this.props.minZoom, Math.min(_this.state.zoom + 1, _this.props.maxZoom)), false, latLngNow);
} else {
_this._lastTap = performanceNow();
_this.trackMoveEvents(pixel);
}
}
}
} else if (event.touches.length === 2 && _this._touchStartPixel) {
event.preventDefault();
_this.stopTrackingMoveEvents();
if (_this.state.pixelDelta || _this.state.zoomDelta) {
_this.sendDeltaChange();
}
var t1 = getMousePixel(_this._containerRef, event.touches[0]);
var t2 = getMousePixel(_this._containerRef, event.touches[1]);
_this._touchStartPixel = [t1, t2];
_this._touchStartMidPoint = [(t1[0] + t2[0]) / 2, (t1[1] + t2[1]) / 2];
_this._touchStartDistance = Math.sqrt(Math.pow(t1[0] - t2[0], 2) + Math.pow(t1[1] - t2[1], 2));
}
});
_defineProperty(_assertThisInitialized(_this), "handleTouchMove", function (event) {
if (!_this._containerRef) {
_this._touchStartPixel = null;
return;
}
if (event.touches.length === 1 && _this._touchStartPixel) {
var touch = event.touches[0];
var pixel = getMousePixel(_this._containerRef, touch);
if (_this.props.twoFingerDrag) {
if (_this.coordsInside(pixel)) {
_this.showWarning('fingers');
}
} else {
event.preventDefault();
_this.trackMoveEvents(pixel);
_this.setState({
pixelDelta: [pixel[0] - _this._touchStartPixel[0][0], pixel[1] - _this._touchStartPixel[0][1]]
}, NOOP);
}
} else if (event.touches.length === 2 && _this._touchStartPixel && _this._touchStartMidPoint && _this._touchStartDistance) {
var _this$state3 = _this.state,
width = _this$state3.width,
height = _this$state3.height,
zoom = _this$state3.zoom;
event.preventDefault();
var t1 = getMousePixel(_this._containerRef, event.touches[0]);
var t2 = getMousePixel(_this._containerRef, event.touches[1]);
var midPoint = [(t1[0] + t2[0]) / 2, (t1[1] + t2[1]) / 2];
var midPointDiff = [midPoint[0] - _this._touchStartMidPoint[0], midPoint[1] - _this._touchStartMidPoint[1]];
var distance = Math.sqrt(Math.pow(t1[0] - t2[0], 2) + Math.pow(t1[1] - t2[1], 2));
var zoomDelta = Math.max(_this.props.minZoom, Math.min(_this.props.maxZoom, zoom + Math.log2(distance / _this._touchStartDistance))) - zoom;
var scale = Math.pow(2, zoomDelta);
var centerDiffDiff = [(width / 2 - midPoint[0]) * (scale - 1), (height / 2 - midPoint[1]) * (scale - 1)];
_this.setState({
zoomDelta: zoomDelta,
pixelDelta: [centerDiffDiff[0] + midPointDiff[0] * scale, centerDiffDiff[1] + midPointDiff[1] * scale]
}, NOOP);
}
});
_defineProperty(_assertThisInitialized(_this), "handleTouchEnd", function (event) {
if (!_this._containerRef) {
_this._touchStartPixel = null;
return;
}
if (_this._touchStartPixel) {
var _this$props = _this.props,
zoomSnap = _this$props.zoomSnap,
twoFingerDrag = _this$props.twoFingerDrag,
minZoom = _this$props.minZoom,
maxZoom = _this$props.maxZoom;
var zoomDelta = _this.state.zoomDelta;
var _this$sendDeltaChange = _this.sendDeltaChange(),
center = _this$sendDeltaChange.center,
zoom = _this$sendDeltaChange.zoom;
if (event.touches.length === 0) {
if (twoFingerDrag) {
_this.clearWarning();
} else {
var oldTouchPixel = _this._touchStartPixel[0];
var newTouchPixel = getMousePixel(_this._containerRef, event.changedTouches[0]);
if (Math.abs(oldTouchPixel[0] - newTouchPixel[0]) > CLICK_TOLERANCE || Math.abs(oldTouchPixel[1] - newTouchPixel[1]) > CLICK_TOLERANCE) {
if (!_this._secondTouchEnd || performanceNow() - _this._secondTouchEnd > PINCH_RELEASE_THROW_DELAY) {
event.preventDefault();
_this.throwAfterMoving(newTouchPixel, center, zoom);
}
}
_this._touchStartPixel = null;
_this._secondTouchEnd = null;
}
} else if (event.touches.length === 1) {
event.preventDefault();
var touch = getMousePixel(_this._containerRef, event.touches[0]);
_this._secondTouchEnd = performanceNow();
_this._touchStartPixel = [touch];
_this.trackMoveEvents(touch);
if (zoomSnap) {
var latLng = _this._touchStartMidPoint ? _this.pixelToLatLng(_this._touchStartMidPoint) : _this.state.center;
var zoomTarget;
if (twoFingerDrag && Math.round(_this.state.zoom) === Math.round(_this.state.zoom + zoomDelta)) {
zoomTarget = Math.round(_this.state.zoom);
} else {
zoomTarget = zoomDelta > 0 ? Math.ceil(_this.state.zoom) : Math.floor(_this.state.zoom);
}
var _zoom = Math.max(minZoom, Math.min(zoomTarget, maxZoom));
_this.setCenterZoomTarget(latLng, _zoom, false, latLng);
}
}
}
});
_defineProperty(_assertThisInitialized(_this), "handleMouseDown", function (event) {
if (!_this._containerRef) {
return;
}
var pixel = getMousePixel(_this._containerRef, event);
if (event.button === 0 && (!event.target || !parentHasClass(event.target, 'pigeon-drag-block')) && _this.coordsInside(pixel)) {
_this.stopAnimating();
event.preventDefault();
if (_this._lastClick && performanceNow() - _this._lastClick < DOUBLE_CLICK_DELAY) {
if (!parentHasClass(event.target, 'pigeon-click-block')) {
var latLngNow = _this.pixelToLatLng(_this._mousePosition || pixel);
_this.setCenterZoomTarget(null, Math.max(_this.props.minZoom, Math.min(_this.state.zoom + 1, _this.props.maxZoom)), false, latLngNow);
}
} else {
_this._lastClick = performanceNow();
_this._mouseDown = true;
_this._dragStart = pixel;
_this.trackMoveEvents(pixel);
}
}
});
_defineProperty(_assertThisInitialized(_this), "handleMouseMove", function (event) {
if (!_this._containerRef) {
return;
}
_this._mousePosition = getMousePixel(_this._containerRef, event);
if (_this._mouseDown && _this._dragStart) {
_this.trackMoveEvents(_this._mousePosition);
_this.setState({
pixelDelta: [_this._mousePosition[0] - _this._dragStart[0], _this._mousePosition[1] - _this._dragStart[1]]
}, NOOP);
}
});
_defineProperty(_assertThisInitialized(_this), "handleMouseUp", function (event) {
if (!_this._containerRef) {
_this._mouseDown = false;
return;
}
var pixelDelta = _this.state.pixelDelta;
if (_this._mouseDown) {
_this._mouseDown = false;
var pixel = getMousePixel(_this._containerRef, event);
if (_this.props.onClick && (!event.target || !parentHasClass(event.target, 'pigeon-click-block')) && (!pixelDelta || Math.abs(pixelDelta[0]) + Math.abs(pixelDelta[1]) <= CLICK_TOLERANCE)) {
var latLng = _this.pixelToLatLng(pixel);
_this.props.onClick({
event: event,
latLng: latLng,
pixel: pixel
});
_this.setState({
pixelDelta: undefined
}, NOOP);
} else {
var _this$sendDeltaChange2 = _this.sendDeltaChange(),
center = _this$sendDeltaChange2.center,
zoom = _this$sendDeltaChange2.zoom;
_this.throwAfterMoving(pixel, center, zoom);
}
}
});
_defineProperty(_assertThisInitialized(_this), "stopTrackingMoveEvents", function () {
_this._moveEvents = [];
});
_defineProperty(_assertThisInitialized(_this), "trackMoveEvents", function (coords) {
var timestamp = performanceNow();
if (_this._moveEvents.length === 0 || timestamp - _this._moveEvents[_this._moveEvents.length - 1].timestamp > 40) {
_this._moveEvents.push({
timestamp: timestamp,
coords: coords
});
if (_this._moveEvents.length > 2) {
_this._moveEvents.shift();
}
}
});
_defineProperty(_assertThisInitialized(_this), "throwAfterMoving", function (coords, center, zoom) {
var _this$state4 = _this.state,
width = _this$state4.width,
height = _this$state4.height;
var animate = _this.props.animate;
var timestamp = performanceNow();
var lastEvent = _this._moveEvents.shift();
if (lastEvent && animate) {
var deltaMs = Math.max(timestamp - lastEvent.timestamp, 1);
var delta = [(coords[0] - lastEvent.coords[0]) / deltaMs * 120, (coords[1] - lastEvent.coords[1]) / deltaMs * 120];
var distance = Math.sqrt(delta[0] * delta[0] + delta[1] * delta[1]);
if (distance > MIN_DRAG_FOR_THROW) {
var diagonal = Math.sqrt(width * width + height * height);
var throwTime = DIAGONAL_THROW_TIME * distance / diagonal;
var lng = tile2lng(lng2tile(center[1], zoom) - delta[0] / 256.0, zoom);
var lat = tile2lat(lat2tile(center[0], zoom) - delta[1] / 256.0, zoom);
_this.setCenterZoomTarget([lat, lng], zoom, false, null, throwTime);
}
}
_this.stopTrackingMoveEvents();
});
_defineProperty(_assertThisInitialized(_this), "sendDeltaChange", function () {
var _this$state5 = _this.state,
center = _this$state5.center,
zoom = _this$state5.zoom,
pixelDelta = _this$state5.pixelDelta,
zoomDelta = _this$state5.zoomDelta;
var lat = center[0];
var lng = center[1];
if (pixelDelta || zoomDelta !== 0) {
lng = tile2lng(lng2tile(center[1], zoom + zoomDelta) - (pixelDelta ? pixelDelta[0] / 256.0 : 0), zoom + zoomDelta);
lat = tile2lat(lat2tile(center[0], zoom + zoomDelta) - (pixelDelta ? pixelDelta[1] / 256.0 : 0), zoom + zoomDelta);
_this.setCenterZoom([lat, lng], zoom + zoomDelta);
}
_this.setState({
pixelDelta: undefined,
zoomDelta: 0
}, NOOP);
return {
center: _this.limitCenterAtZoom([lat, lng], zoom + zoomDelta),
zoom: zoom + zoomDelta
};
});
_defineProperty(_assertThisInitialized(_this), "getBounds", function (center, zoom) {
if (center === void 0) {
center = _this.state.center;
}
if (zoom === void 0) {
zoom = _this.zoomPlusDelta();
}
var _this$state6 = _this.state,
width = _this$state6.width,
height = _this$state6.height;
return {
ne: _this.pixelToLatLng([width - 1, 0], center, zoom),
sw: _this.pixelToLatLng([0, height - 1], center, zoom)
};
});
_defineProperty(_assertThisInitialized(_this), "syncToProps", function (center, zoom) {
if (center === void 0) {
center = _this.state.center;
}
if (zoom === void 0) {
zoom = _this.state.zoom;
}
var onBoundsChanged = _this.props.onBoundsChanged;
if (onBoundsChanged) {
var bounds = _this.getBounds(center, zoom);
onBoundsChanged({
center: center,
zoom: zoom,
bounds: bounds,
initial: !_this._boundsSynced
});
_this._boundsSynced = true;
}
});
_defineProperty(_assertThisInitialized(_this), "handleWheel", function (event) {
var _this$props2 = _this.props,
mouseEvents = _this$props2.mouseEvents,
metaWheelZoom = _this$props2.metaWheelZoom,
zoomSnap = _this$props2.zoomSnap,
animate = _this$props2.animate;
if (!mouseEvents) {
return;
}
if (!metaWheelZoom || event.metaKey || event.ctrlKey) {
event.preventDefault();
var addToZoom = -event.deltaY / SCROLL_PIXELS_FOR_ZOOM_LEVEL;
if (!zoomSnap && _this._zoomTarget) {
var stillToAdd = _this._zoomTarget - _this.state.zoom;
_this.zoomAroundMouse(addToZoom + stillToAdd, event);
} else {
if (animate) {
_this.zoomAroundMouse(addToZoom, event);
} else {
if (!_this._lastWheel || performanceNow() - _this._lastWheel > ANIMATION_TIME) {
_this._lastWheel = performanceNow();
_this.zoomAroundMouse(addToZoom, event);
}
}
}
} else {
_this.showWarning('wheel');
}
});
_defineProperty(_assertThisInitialized(_this), "showWarning", function (warningType) {
if (!_this.state.showWarning || _this.state.warningType !== warningType) {
_this.setState({
showWarning: true,
warningType: warningType
});
}
if (_this._warningClearTimeout) {
window.clearTimeout(_this._warningClearTimeout);
}
_this._warningClearTimeout = window.setTimeout(_this.clearWarning, WARNING_DISPLAY_TIMEOUT);
});
_defineProperty(_assertThisInitialized(_this), "clearWarning", function () {
if (_this.state.showWarning) {
_this.setState({
showWarning: false
});
}
});
_defineProperty(_assertThisInitialized(_this), "zoomAroundMouse", function (zoomDiff, event) {
if (!_this._containerRef) {
return;
}
var zoom = _this.state.zoom;
var _this$props3 = _this.props,
minZoom = _this$props3.minZoom,
maxZoom = _this$props3.maxZoom,
zoomSnap = _this$props3.zoomSnap;
_this._mousePosition = getMousePixel(_this._containerRef, event);
if (!_this._mousePosition || zoom === minZoom && zoomDiff < 0 || zoom === maxZoom && zoomDiff > 0) {
return;
}
var latLngNow = _this.pixelToLatLng(_this._mousePosition);
var zoomTarget = zoom + zoomDiff;
if (zoomSnap) {
zoomTarget = zoomDiff < 0 ? Math.floor(zoomTarget) : Math.ceil(zoomTarget);
}
zoomTarget = Math.max(minZoom, Math.min(zoomTarget, maxZoom));
_this.setCenterZoomTarget(null, zoomTarget, false, latLngNow);
});
_defineProperty(_assertThisInitialized(_this), "zoomPlusDelta", function () {
return _this.state.zoom + _this.state.zoomDelta;
});
_defineProperty(_assertThisInitialized(_this), "pixelToLatLng", function (pixel, center, zoom) {
if (center === void 0) {
center = _this.state.center;
}
if (zoom === void 0) {
zoom = _this.zoomPlusDelta();
}
var _this$state7 = _this.state,
width = _this$state7.width,
height = _this$state7.height,
pixelDelta = _this$state7.pixelDelta;
var pointDiff = [(pixel[0] - width / 2 - (pixelDelta ? pixelDelta[0] : 0)) / 256.0, (pixel[1] - height / 2 - (pixelDelta ? pixelDelta[1] : 0)) / 256.0];
var tileX = lng2tile(center[1], zoom) + pointDiff[0];
var tileY = lat2tile(center[0], zoom) + pointDiff[1];
return [Math.max(absoluteMinMax[0], Math.min(absoluteMinMax[1], tile2lat(tileY, zoom))), Math.max(absoluteMinMax[2], Math.min(absoluteMinMax[3], tile2lng(tileX, zoom)))];
});
_defineProperty(_assertThisInitialized(_this), "latLngToPixel", function (latLng, center, zoom) {
if (center === void 0) {
center = _this.state.center;
}
if (zoom === void 0) {
zoom = _this.zoomPlusDelta();
}
var _this$state8 = _this.state,
width = _this$state8.width,
height = _this$state8.height,
pixelDelta = _this$state8.pixelDelta;
var tileCenterX = lng2tile(center[1], zoom);
var tileCenterY = lat2tile(center[0], zoom);
var tileX = lng2tile(latLng[1], zoom);
var tileY = lat2tile(latLng[0], zoom);
return [(tileX - tileCenterX) * 256.0 + width / 2 + (pixelDelta ? pixelDelta[0] : 0), (tileY - tileCenterY) * 256.0 + height / 2 + (pixelDelta ? pixelDelta[1] : 0)];
});
_defineProperty(_assertThisInitialized(_this), "calculateZoomCenter", function (center, coords, oldZoom, newZoom) {
var _this$state9 = _this.state,
width = _this$state9.width,
height = _this$state9.height;
var pixelBefore = _this.latLngToPixel(coords, center, oldZoom);
var pixelAfter = _this.latLngToPixel(coords, center, newZoom);
var newCenter = _this.pixelToLatLng([width / 2 + pixelAfter[0] - pixelBefore[0], height / 2 + pixelAfter[1] - pixelBefore[1]], center, newZoom);
return _this.limitCenterAtZoom(newCenter, newZoom);
});
_defineProperty(_assertThisInitialized(_this), "setRef", function (dom) {
_this._containerRef = dom;
});
_this.syncToProps = debounce(_this.syncToProps, DEBOUNCE_DELAY);
_this._lastZoom = (_ref2 = (_props$defaultZoom = props.defaultZoom) !== null && _props$defaultZoom !== void 0 ? _props$defaultZoom : props.zoom) !== null && _ref2 !== void 0 ? _ref2 : 14;
_this._lastCenter = (_ref3 = (_props$defaultCenter = props.defaultCenter) !== null && _props$defaultCenter !== void 0 ? _props$defaultCenter : props.center) !== null && _ref3 !== void 0 ? _ref3 : [0, 0];
_this.state = {
zoom: _this._lastZoom,
center: _this._lastCenter,
width: (_ref4 = (_props$width = props.width) !== null && _props$width !== void 0 ? _props$width : props.defaultWidth) !== null && _ref4 !== void 0 ? _ref4 : -1,
height: (_ref5 = (_props$height = props.height) !== null && _props$height !== void 0 ? _props$height : props.defaultHeight) !== null && _ref5 !== void 0 ? _ref5 : -1,
zoomDelta: 0,
pixelDelta: undefined,
oldTiles: [],
showWarning: false,
warningType: undefined
};
return _this;
}
var _proto = Map.prototype;
_proto.componentDidMount = function componentDidMount() {
var _this2 = this;
this.props.mouseEvents && this.bindMouseEvents();
this.props.touchEvents && this.bindTouchEvents();
if (!this.props.width || !this.props.height) {
if (!this.updateWidthHeight()) {
requestAnimationFrame(this.updateWidthHeight);
}
this.bindResizeEvent();
}
this.bindWheelEvent();
this.syncToProps();
if (typeof window.ResizeObserver !== 'undefined') {
this._resizeObserver = new window.ResizeObserver(function () {
_this2.updateWidthHeight();
});
this._resizeObserver.observe(this._containerRef);
}
};
_proto.componentWillUnmount = function componentWillUnmount() {
this.props.mouseEvents && this.unbindMouseEvents();
this.props.touchEvents && this.unbindTouchEvents();
this.unbindWheelEvent();
if (!this.props.width || !this.props.height) {
this.unbindResizeEvent();
}
if (this._resizeObserver) {
this._resizeObserver.disconnect();
}
};
_proto.componentDidUpdate = function componentDidUpdate(prevProps) {
var _prevProps$center;
if (this.props.mouseEvents !== prevProps.mouseEvents) {
this.props.mouseEvents ? this.bindMouseEvents() : this.unbindMouseEvents();
}
if (this.props.touchEvents !== prevProps.touchEvents) {
this.props.touchEvents ? this.bindTouchEvents() : this.unbindTouchEvents();
}
if (this.props.width && this.props.width !== prevProps.width) {
this.setState({
width: this.props.width
});
}
if (this.props.height && this.props.height !== prevProps.height) {
this.setState({
height: this.props.height
});
}
if (!this.props.center && !this.props.zoom) {
return;
}
if ((!this.props.center || this.props.center[0] === (prevProps === null || prevProps === void 0 ? void 0 : (_prevProps$center = prevProps.center) === null || _prevProps$center === void 0 ? void 0 : _prevProps$center[0]) && this.props.center[1] === prevProps.center[1]) && this.props.zoom === prevProps.zoom) {
return;
}
var currentCenter = this._isAnimating ? this._centerTarget : this.state.center;
var currentZoom = this._isAnimating ? this._zoomTarget : this.state.zoom;
if (currentCenter && currentZoom) {
var _this$props$center, _this$props$zoom;
var nextCenter = (_this$props$center = this.props.center) !== null && _this$props$center !== void 0 ? _this$props$center : currentCenter;
var nextZoom = (_this$props$zoom = this.props.zoom) !== null && _this$props$zoom !== void 0 ? _this$props$zoom : currentZoom;
if (Math.abs(nextZoom - currentZoom) > 0.001 || Math.abs(nextCenter[0] - currentCenter[0]) > 0.0001 || Math.abs(nextCenter[1] - currentCenter[1]) > 0.0001) {
this.setCenterZoomTarget(nextCenter, nextZoom, true);
}
}
};
_proto.coordsInside = function coordsInside(pixel) {
var _this$state10 = this.state,
width = _this$state10.width,
height = _this$state10.height;
if (pixel[0] < 0 || pixel[1] < 0 || pixel[0] >= width || pixel[1] >= height) {
return false;
}
var parent = this._containerRef;
if (parent) {
var pos = parentPosition(parent);
var element = document.elementFromPoint(pixel[0] + pos.x, pixel[1] + pos.y);
return parent === element || parent.contains(element);
} else {
return false;
}
};
_proto.tileValues = function tileValues(_ref6) {
var center = _ref6.center,
zoom = _ref6.zoom,
pixelDelta = _ref6.pixelDelta,
zoomDelta = _ref6.zoomDelta,
width = _ref6.width,
height = _ref6.height;
var roundedZoom = Math.round(zoom + (zoomDelta || 0));
var zoomDiff = zoom + (zoomDelta || 0) - roundedZoom;
var scale = Math.pow(2, zoomDiff);
var scaleWidth = width / scale;
var scaleHeight = height / scale;
var tileCenterX = lng2tile(center[1], roundedZoom) - (pixelDelta ? pixelDelta[0] / 256.0 / scale : 0);
var tileCenterY = lat2tile(center[0], roundedZoom) - (pixelDelta ? pixelDelta[1] / 256.0 / scale : 0);
var halfWidth = scaleWidth / 2 / 256.0;
var halfHeight = scaleHeight / 2 / 256.0;
var tileMinX = Math.floor(tileCenterX - halfWidth);
var tileMaxX = Math.floor(tileCenterX + halfWidth);
var tileMinY = Math.floor(tileCenterY - halfHeight);
var tileMaxY = Math.floor(tileCenterY + halfHeight);
return {
tileMinX: tileMinX,
tileMaxX: tileMaxX,
tileMinY: tileMinY,
tileMaxY: tileMaxY,
tileCenterX: tileCenterX,
tileCenterY: tileCenterY,
roundedZoom: roundedZoom,
zoomDelta: zoomDelta || 0,
scaleWidth: scaleWidth,
scaleHeight: scaleHeight,
scale: scale
};
};
_proto.renderTiles = function renderTiles() {
var _this3 = this;
var _this$state11 = this.state,
oldTiles = _this$state11.oldTiles,
width = _this$state11.width,
height = _this$state11.height;
var dprs = this.props.dprs;
var mapUrl = this.props.provider || osm;
var _this$tileValues = this.tileValues(this.state),
tileMinX = _this$tileValues.tileMinX,
tileMaxX = _this$tileValues.tileMaxX,
tileMinY = _this$tileValues.tileMinY,
tileMaxY = _this$tileValues.tileMaxY,
tileCenterX = _this$tileValues.tileCenterX,
tileCenterY = _this$tileValues.tileCenterY,
roundedZoom = _this$tileValues.roundedZoom,
scaleWidth = _this$tileValues.scaleWidth,
scaleHeight = _this$tileValues.scaleHeight,
scale = _this$tileValues.scale;
var tiles = [];
for (var i = 0; i < oldTiles.length; i++) {
var old = oldTiles[i];
var zoomDiff = old.roundedZoom - roundedZoom;
if (Math.abs(zoomDiff) > 4 || zoomDiff === 0) {
continue;
}
var pow = 1 / Math.pow(2, zoomDiff);
var xDiff = -(tileMinX - old.tileMinX * pow) * 256;
var yDiff = -(tileMinY - old.tileMinY * pow) * 256;
var _xMin = Math.max(old.tileMinX, 0);
var _yMin = Math.max(old.tileMinY, 0);
var _xMax = Math.min(old.tileMaxX, Math.pow(2, old.roundedZoom) - 1);
var _yMax = Math.min(old.tileMaxY, Math.pow(2, old.roundedZoom) - 1);
for (var x = _xMin; x <= _xMax; x++) {
for (var y = _yMin; y <= _yMax; y++) {
tiles.push({
key: x + "-" + y + "-" + old.roundedZoom,
url: mapUrl(x, y, old.roundedZoom),
srcSet: srcSet(dprs, mapUrl, x, y, old.roundedZoom),
left: xDiff + (x - old.tileMinX) * 256 * pow,
top: yDiff + (y - old.tileMinY) * 256 * pow,
width: 256 * pow,
height: 256 * pow,
active: false
});
}
}
}
var xMin = Math.max(tileMinX, 0);
var yMin = Math.max(tileMinY, 0);
var xMax = Math.min(tileMaxX, Math.pow(2, roundedZoom) - 1);
var yMax = Math.min(tileMaxY, Math.pow(2, roundedZoom) - 1);
for (var _x = xMin; _x <= xMax; _x++) {
for (var _y = yMin; _y <= yMax; _y++) {
tiles.push({
key: _x + "-" + _y + "-" + roundedZoom,
url: mapUrl(_x, _y, roundedZoom),
srcSet: srcSet(dprs, mapUrl, _x, _y, roundedZoom),
left: (_x - tileMinX) * 256,
top: (_y - tileMinY) * 256,
width: 256,
height: 256,
active: true
});
}
}
var boxStyle = {
width: scaleWidth,
height: scaleHeight,
position: 'absolute',
top: "calc((100% - " + height + "px) / 2)",
left: "calc((100% - " + width + "px) / 2)",
overflow: 'hidden',
willChange: 'transform',
transform: "scale(" + scale + ", " + scale + ")",
transformOrigin: 'top left'
};
var boxClassname = this.props.boxClassname || 'pigeon-tiles-box';
var left = -((tileCenterX - tileMinX) * 256 - scaleWidth / 2);
var top = -((tileCenterY - tileMinY) * 256 - scaleHeight / 2);
var tilesStyle = {
position: 'absolute',
width: (tileMaxX - tileMinX + 1) * 256,
height: (tileMaxY - tileMinY + 1) * 256,
willChange: 'transform',
transform: "translate(" + left + "px, " + top + "px)"
};
var Tile = this.props.tileComponent;
return /*#__PURE__*/React__default["default"].createElement("div", {
style: boxStyle,
className: boxClassname
}, /*#__PURE__*/React__default["default"].createElement("div", {
className: "pigeon-tiles",
style: tilesStyle
}, tiles.map(function (tile) {
return /*#__PURE__*/React__default["default"].createElement(Tile, {
key: tile.key,
tile: tile,
tileLoaded: function tileLoaded() {
return _this3.tileLoaded(tile.key);
}
});
})));
};
_proto.renderOverlays = function renderOverlays() {
var _this4 = this;
var _this$state12 = this.state,
width = _this$state12.width,
height = _this$state12.height,
center = _this$state12.center;
var mapState = {
bounds: this.getBounds(),
zoom: this.zoomPlusDelta(),
center: center,
width: width,
height: height
};
var childrenWithProps = React__default["default"].Children.map(this.props.children, function (child) {
if (!child) {
return null;
}
if (! /*#__PURE__*/React__default["default"].isValidElement(child)) {
return child;
}
var _child$props = child.props,
anchor = _child$props.anchor,
position = _child$props.position,
offset = _child$props.offset;
var c = _this4.latLngToPixel(anchor || position || center);
return /*#__PURE__*/React__default["default"].cloneElement(child, {
left: c[0] - (offset ? offset[0] : 0),
top: c[1] - (offset ? offset[1] : 0),
latLngToPixel: _this4.latLngToPixel,
pixelToLatLng: _this4.pixelToLatLng,
setCenterZoom: _this4.setCenterZoomForChildren,
mapProps: _this4.props,
mapState: mapState
});
});
var childrenStyle = {
position: 'absolute',
width: width,
height: height,
top: "calc((100% - " + height + "px) / 2)",
left: "calc((100% - " + width + "px) / 2)"
};
return /*#__PURE__*/React__default["default"].createElement("div", {
className: "pigeon-overlays",
style: childrenStyle
}, childrenWithProps);
};
_proto.renderAttribution = function renderAttribution() {
var _this$props4 = this.props,
attribution = _this$props4.attribution,
attributionPrefix = _this$props4.attributionPrefix;
if (attribution === false) {
return null;
}
var style = {
position: 'absolute',
bottom: 0,
right: 0,
fontSize: '11px',
padding: '2px 5px',
background: 'rgba(255, 255, 255, 0.7)',
fontFamily: "'Helvetica Neue', Helvetica, Arial, sans-serif",
color: '#333'
};
var linkStyle = {
color: '#0078A8',
textDecoration: 'none'
};
return /*#__PURE__*/React__default["default"].createElement("div", {
key: "attr",
className: "pigeon-attribution",
style: style
}, attributionPrefix === false ? null : /*#__PURE__*/React__default["default"].createElement("span", null, attributionPrefix || /*#__PURE__*/React__default["default"].createElement("a", {
href: "https://pigeon-maps.js.org/",
style: linkStyle,
target: "_blank",
rel: "noreferrer noopener"
}, "Pigeon"), ' | '), attribution || /*#__PURE__*/React__default["default"].createElement("span", null, ' © ', /*#__PURE__*/React__default["default"].createElement("a", {
href: "https://www.openstreetmap.org/copyright",
style: linkStyle,
target: "_blank",
rel: "noreferrer noopener"
}, "OpenStreetMap"), ' contributors'));
};
_proto.renderWarning = function renderWarning() {
var _this$props5 = this.props,
metaWheelZoom = _this$props5.metaWheelZoom,
metaWheelZoomWarning = _this$props5.metaWheelZoomWarning,
twoFingerDrag = _this$props5.twoFingerDrag,
twoFingerDragWarning = _this$props5.twoFingerDragWarning,
warningZIndex = _this$props5.warningZIndex;
var _this$state13 = this.state,
showWarning = _this$state13.showWarning,
warningType = _this$state13.warningType,
width = _this$state13.width,
height = _this$state13.height;
if (metaWheelZoom && metaWheelZoomWarning || twoFingerDrag && twoFingerDragWarning) {
var style = {
position: 'absolute',
top: 0,
left: 0,
width: width,
height: height,
overflow: 'hidden',
pointerEvents: 'none',
opacity: showWarning ? 100 : 0,
transition: 'opacity 300ms',
background: 'rgba(0,0,0,0.5)',
color: '#fff',
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
fontSize: 22,
fontFamily: '"Arial", sans-serif',
textAlign: 'center',
zIndex: warningZIndex
};
var meta = typeof window !== 'undefined' && window.navigator && window.navigator.platform.toUpperCase().indexOf('MAC') >= 0 ? '⌘' : 'ctrl';
var warningText = warningType === 'fingers' ? twoFingerDragWarning : metaWheelZoomWarning;
return /*#__PURE__*/React__default["default"].createElement("div", {
className: "pigeon-overlay-warning",
style: style
}, warningText.replace('META', meta));
} else {
return null;
}
};
_proto.render = function render() {
var _this$props6 = this.props,
touchEvents = _this$props6.touchEvents,
twoFingerDrag = _this$props6.twoFingerDrag;
var _this$state14 = this.state,
width = _this$state14.width,
height = _this$state14.height;
var containerStyle = {
width: this.props.width ? width : '100%',
height: this.props.height ? height : '100%',
position: 'relative',
display: 'inline-block',
overflow: 'hidden',
background: '#dddddd',
touchAction: touchEvents ? twoFingerDrag ? 'pan-x pan-y' : 'none' : 'auto'
};
var hasSize = !!(width && height);
return /*#__PURE__*/React__default["default"].createElement("div", {
style: containerStyle,
ref: this.setRef,
dir: "ltr"
}, hasSize && this.renderTiles(), hasSize && this.renderOverlays(), hasSize && this.renderAttribution(), hasSize && this.renderWarning());
};
return Map;
}(React.Component);
_defineProperty(Map, "defaultProps", {
animate: true,
metaWheelZoom: false,
metaWheelZoomWarning: 'Use META + wheel to zoom!',
twoFingerDrag: false,
twoFingerDragWarning: 'Use two fingers to move the map',
zoomSnap: true,
mouseEvents: true,
touchEvents: true,
warningZIndex: 100,
animateMaxScreens: 5,
minZoom: 1,
maxZoom: 18,
limitBounds: 'center',
dprs: [],
tileComponent: ImgTile
});
function Marker(props) {
var width = typeof props.width !== 'undefined' ? props.width : typeof props.height !== 'undefined' ? props.height * 29 / 34 : 29;
var height = typeof props.height !== 'undefined' ? props.height : typeof props.width !== 'undefined' ? props.width * 34 / 29 : 34;
var _useState = React.useState(props.hover || false),
internalHover = _useState[0],
setInternalHover = _useState[1];
var hover = typeof props.hover === 'undefined' ? internalHover : props.hover;
var color = props.color || '#93C0D0';
var eventParameters = function eventParameters(event) {
return {
event: event,
anchor: props.anchor,
payload: props.payload
};
};
return /*#__PURE__*/React__default["default"].createElement("div", {
style: _objectSpread2({
position: 'absolute',
transform: "translate(" + (props.left - width / 2) + "px, " + (props.top - (height - 1)) + "px)",
filter: hover ? 'drop-shadow(0 0 4px rgba(0, 0, 0, .3))' : '',
pointerEvents: 'none',
cursor: 'pointer'
}, props.style || {}),
className: props.className ? props.className + " pigeon-click-block" : 'pigeon-click-block',
onClick: props.onClick ? function (event) {
return props.onClick(eventParameters(event));
} : null,
onContextMenu: props.onContextMenu ? function (event) {
return props.onContextMenu(eventParameters(event));
} : null,
onMouseOver: function onMouseOver(event) {
props.onMouseOver && props.onMouseOver(eventParameters(event));
setInternalHover(true);
},
onMouseOut: function onMouseOut(event) {
props.onMouseOut && props.onMouseOut(eventParameters(event));
setInternalHover(false);
}
}, props.children || /*#__PURE__*/React__default["default"].createElement("svg", {
width: width,
height: height,
viewBox: "0 0 61 71",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, /*#__PURE__*/React__default["default"].createElement("g", {
style: {
pointerEvents: 'auto'
}
}, /*#__PURE__*/React__default["default"].createElement("path", {
d: "M52 31.5C52 36.8395 49.18 42.314 45.0107 47.6094C40.8672 52.872 35.619 57.678 31.1763 61.6922C30.7916 62.0398 30.2084 62.0398 29.8237 61.6922C25.381 57.678 20.1328 52.872 15.9893 47.6094C11.82 42.314 9 36.8395 9 31.5C9 18.5709 18.6801 9 30.5 9C42.3199 9 52 18.5709 52 31.5Z",
fill: color,
stroke: "white",
strokeWidth: "4"
}), /*#__PURE__*/React__default["default"].createElement("circle", {
cx: "30.5",
cy: "30.5",
r: "8.5",
fill: "white",
opacity: hover ? 0.98 : 0.6
}))));
}
function Overlay(props) {
return /*#__PURE__*/React__default["default"].createElement("div", {
style: _objectSpread2({
position: 'absolute',
transform: "translate(" + props.left + "px, " + props.top + "px)"
}, props.style || {}),
className: props.className ? props.className + " pigeon-click-block" : 'pigeon-click-block'
}, props.children);
}
var defaultSvgAttributes = {
fill: '#93c0d099',
strokeWidth: '2',
stroke: 'white',
r: '30'
};
function PointComponent(props) {
var _props$svgAttributes;
var latLngToPixel = props.latLngToPixel;
var _props$coordinates = props.coordinates,
y = _props$coordinates[0],
x = _props$coordinates[1];
var _latLngToPixel = latLngToPixel([x, y]),
cx = _latLngToPixel[0],
cy = _latLngToPixel[1];
if ((_props$svgAttributes = props.svgAttributes) !== null && _props$svgAttributes !== void 0 && _props$svgAttributes.path) {
var path = "M" + cx + "," + cy + "c" + props.svgAttributes.path.split(/[c|C|L|l|v|V|h|H]([\s\S]*)/)[1];
return /*#__PURE__*/React__default["default"].createElement("path", _objectSpread2({
d: path
}, props.svgAttributes));
}
return /*#__PURE__*/React__default["default"].createElement("circle", _objectSpread2({
cx: cx,
cy: cy
}, props.svgAttributes));
}
function MultiPoint(props) {
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, props.coordinates.map(function (point, i) {
return /*#__PURE__*/React__default["default"].createElement(PointComponent, _objectSpread2(_objectSpread2({}, props), {}, {
coordinates: point,
key: i
}));
}));
}
function LineString(props) {
var latLngToPixel = props.latLngToPixel;
var p = 'M' + props.coordinates.reduce(function (a, _ref) {
var y = _ref[0],
x = _ref[1];
var _latLngToPixel2 = latLngToPixel([x, y]),
v = _latLngToPixel2[0],
w = _latLngToPixel2[1];
return a + ' ' + v + ' ' + w;
}, '');
return /*#__PURE__*/React__default["default"].createElement("path", _objectSpread2({
d: p
}, props.svgAttributes));
}
function MultiLineString(props) {
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, props.coordinates.map(function (line, i) {
return /*#__PURE__*/React__default["default"].createElement(LineString, _objectSpread2(_objectSpread2({}, props), {}, {
coordinates: line,
key: i
}));
}));
}
function Polygon(props) {
var latLngToPixel = props.latLngToPixel;
var p = props.coordinates.reduce(function (a, part) {
return a + ' M' + part.reduce(function (a, _ref2) {
var y = _ref2[0],
x = _ref2[1];
var _latLngToPixel3 = latLngToPixel([x, y]),
v = _latLngToPixel3[0],
w = _latLngToPixel3[1];
return a + ' ' + v + ' ' + w;
}, '') + 'Z';
}, '');
return /*#__PURE__*/React__default["default"].createElement("path", _objectSpread2({
d: p
}, props.svgAttributes));
}
function MultiPolygon(props) {
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, props.coordinates.map(function (polygon, i) {
return /*#__PURE__*/React__default["default"].createElement(Polygon, _objectSpread2(_objectSpread2({}, props), {}, {
coordinates: polygon,
key: i
}));
}));
}
function GeometryCollection(props) {
var renderer = {
Point: PointComponent,
MultiPoint: MultiPoint,
LineString: LineString,
MultiLineString: MultiLineString,
Polygon: Polygon,
MultiPolygon: MultiPolygon
};
var _props$geometry = props.geometry,
type = _props$geometry.type,
coordinates = _props$geometry.coordinates,
geometries = _props$geometry.geometries;
if (type === 'GeometryCollection') {
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, geometries.map(function (geometry, i) {
return /*#__PURE__*/React__default["default"].createElement(GeometryCollection, _objectSpread2(_objectSpread2({
key: i
}, props), {}, {
geometry: geometry
}));
}));
}
var Component = renderer[type];
if (Component === undefined) {
console.warn("The GeoJson Type " + type + " is not known");
return null;
}
return /*#__PURE__*/React__default["default"].createElement(Component, {
latLngToPixel: props.latLngToPixel,
geometry: props.geometry,
coordinates: coordinates,
svgAttributes: props.svgAttributes
});
}
function GeoJsonFeature(props) {
var _useState = React.useState(props.hover || false),
internalHover = _useState[0],
setInternalHover = _useState[1];
var hover = props.hover !== undefined ? props.hover : internalHover;
var callbackSvgAttributes = props.styleCallback && props.styleCallback(props.feature, hover);
var svgAttributes = callbackSvgAttributes ? props.svgAttributes ? _objectSpread2(_objectSpread2({}, props.svgAttributes), callbackSvgAttributes) : callbackSvgAttributes : props.svgAttributes ? props.svgAttributes : defaultSvgAttributes;
var eventParameters = function eventParameters(event) {
return {
event: event,
anchor: props.anchor,
payload: props.feature
};
};
return /*#__PURE__*/React__default["default"].createElement("g", {
clipRule: "evenodd",
style: {
pointerEvents: 'auto'
},
onClick: props.onClick ? function (event) {
return props.onClick(eventParameters(event));
} : null,
onContextMenu: props.onContextMenu ? function (event) {
return props.onContextMenu(eventParameters(event));
} : null,
onMouseOver: function onMouseOver(event) {
props.onMouseOver && props.onMouseOver(eventParameters(event));
setInternalHover(true);
},
onMouseOut: function onMouseOut(event) {
props.onMouseOut && props.onMouseOut(eventParameters(event));
setInternalHover(false);
}
}, /*#__PURE__*/React__default["default"].createElement(GeometryCollection, _objectSpread2(_objectSpread2(_objectSpread2({}, props), props.feature), {}, {
svgAttributes: svgAttributes
})));
}
function GeoJson(props) {
var _props$mapState = props.mapState,
width = _props$mapState.width,
height = _props$mapState.height;
return /*#__PURE__*/React__default["default"].createElement("div", {
style: _objectSpread2({
position: 'absolute',
left: '0',
top: '0',
pointerEvents: 'none',
cursor: 'pointer'
}, props.style || {}),
className: props.className ? props.className + " pigeon-click-block" : 'pigeon-click-block'
}, /*#__PURE__*/React__default["default"].createElement("svg", {
width: width,
height: height,
viewBox: "0 0 " + width + " " + height,
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, props.data && props.data.features.map(function (feature, i) {
return /*#__PURE__*/React__default["default"].createElement(GeoJsonFeature, _objectSpread2(_objectSpread2({
key: i
}, props), {}, {
feature: feature
}));
}), React__default["default"].Children.map(props.children, function (child) {
if (!child) {
return null;
}
if (! /*#__PURE__*/React__default["default"].isValidElement(child)) {
return child;
}
return /*#__PURE__*/React__default["default"].cloneElement(child, props);
})));
}
function GeoJsonLoader(props) {
var _useState2 = React.useState(props.data ? props.data : null),
data = _useState2[0],
setData = _useState2[1];
React.useEffect(function () {
fetch(props.link).then(function (response) {
return response.json();
}).then(function (data) {
return setData(data);
});
}, [props.link]);
return data ? /*#__PURE__*/React__default["default"].createElement(GeoJson, _objectSpread2({
data: data
}, props)) : null;
}
function isDescendentOf(element, ancestor) {
while (element) {
if (element === ancestor) {
return true;
}
element = element.parentElement;
}
return false;
}
var defaultState = {
isDragging: false,
startX: undefined,
startY: undefined,
startLeft: undefined,
startTop: undefined,
deltaX: 0,
deltaY: 0
};
function Draggable(props) {
var dragRef = React.useRef();
var propsRef = React.useRef(props);
var stateRef = React.useRef(_objectSpread2({}, defaultState));
var _useState = React.useState(defaultState),
_state = _useState[0],
_setState = _useState[1];
propsRef.current = props;
var setState = function setState(stateUpdate) {
var newState = _objectSpread2(_objectSpread2({}, stateRef.current), stateUpdate);
stateRef.current = newState;
_setState(newState);
};
var _props$mapProps = props.mapProps,
mouseEvents = _props$mapProps.mouseEvents,
touchEvents = _props$mapProps.touchEvents;
React.useEffect(function () {
var handleDragStart = function handleDragStart(event) {
if (isDescendentOf(event.target, dragRef.current)) {
event.preventDefault();
setState({
isDragging: true,
startX: ('touches' in event ? event.touches[0] : event).clientX,
startY: ('touches' in event ? event.touches[0] : event).clientY,
startLeft: propsRef.current.left,
startTop: propsRef.current.top,
deltaX: 0,
deltaY: 0
});
if (propsRef.current.onDragStart) {
var _propsRef$current = propsRef.current,
_left = _propsRef$current.left,
_top = _propsRef$current.top,
offset = _propsRef$current.offset,
pixelToLatLng = _propsRef$current.pixelToLatLng;
propsRef.current.onDragMove(pixelToLatLng([_left + (offset ? offset[0] : 0), _top + (offset ? offset[1] : 0)]));
}
}
};
var handleDragMove = function handleDragMove(event) {
if (!stateRef.current.isDragging) {
return;
}
event.preventDefault();
var x = ('touches' in event ? event.touches[0] : event).clientX;
var y = ('touches' in event ? event.touches[0] : event).clientY;
var deltaX = x - stateRef.current.startX;
var deltaY = y - stateRef.current.startY;
setState({
deltaX: deltaX,
deltaY: deltaY
});
if (propsRef.current.onDragMove) {
var _propsRef$current2 = propsRef.current,
offset = _propsRef$current2.offset,
pixelToLatLng = _propsRef$current2.pixelToLatLng;
var _stateRef$current = stateRef.current,
_startLeft = _stateRef$current.startLeft,
_startTop = _stateRef$current.startTop;
propsRef.current.onDragMove(pixelToLatLng([_startLeft + deltaX + (offset ? offset[0] : 0), _startTop + deltaY + (offset ? offset[1] : 0)]));
}
};
var handleDragEnd = function handleDragEnd(event) {
var _propsRef$current$onD, _propsRef$current4;
if (!stateRef.current.isDragging) {
return;
}
event.preventDefault();
var _propsRef$current3 = propsRef.current,
offset = _propsRef$current3.offset,
pixelToLatLng = _propsRef$current3.pixelToLatLng;
var _stateRef$current2 = stateRef.current,
deltaX = _stateRef$current2.deltaX,
deltaY = _stateRef$current2.deltaY,
startLeft = _stateRef$current2.startLeft,
startTop = _stateRef$current2.startTop;
(_propsRef$current$onD = (_propsRef$current4 = propsRef.current).onDragEnd) === null || _propsRef$current$onD === void 0 ? void 0 : _propsRef$current$onD.call(_propsRef$current4, pixelToLatLng([startLeft + deltaX + (offset ? offset[0] : 0), startTop + deltaY + (offset ? offset[1] : 0)]));
setState({
isDragging: false,
startX: undefined,
startY: undefined,
startLeft: undefined,
startTop: undefined,
deltaX: 0,
deltaY: 0
});
};
var wa = function wa(e, t, o) {
return window.addEventListener(e, t, o);
};
var wr = function wr(e, t) {
return window.removeEventListener(e, t);
};
if (mouseEvents) {
wa('mousedown', handleDragStart);
wa('mousemove', handleDragMove);
wa('mouseup', handleDragEnd);
}
if (touchEvents) {
wa('touchstart', handleDragStart, {
passive: false
});
wa('touchmove', handleDragMove, {
passive: false
});
wa('touchend', handleDragEnd, {
passive: false
});
}
return function () {
if (mouseEvents) {
wr('mousedown', handleDragStart);
wr('mousemove', handleDragMove);
wr('mouseup', handleDragEnd);
}
if (touchEvents) {
wr('touchstart', handleDragStart);
wr('touchmove', handleDragMove);
wr('touchend', handleDragEnd);
}
};
}, [mouseEvents, touchEvents]);
var left = props.left,
top = props.top,
className = props.className,
style = props.style;
var deltaX = _state.deltaX,
deltaY = _state.deltaY,
startLeft = _state.startLeft,
startTop = _state.startTop,
isDragging = _state.isDragging;
return /*#__PURE__*/React__default["default"].createElement("div", {
style: _objectSpread2(_objectSpread2({
cursor: isDragging ? 'grabbing' : 'grab'
}, style || {}), {}, {
position: 'absolute',
transform: "translate(" + (isDragging ? startLeft + deltaX : left) + "px, " + (isDragging ? startTop + deltaY : top) + "px)"
}),
ref: dragRef,
className: "pigeon-drag-block" + (className ? " " + className : '')
}, props.children);
}
var commonStyle = {
position: 'absolute',
top: 10,
left: 10
};
var commonButtonStyle = {
width: 28,
height: 28,
borderRadius: 2,
boxShadow: '0 1px 4px -1px rgba(0,0,0,.3)',
background: 'white',
lineHeight: '26px',
fontSize: '20px',
fontWeight: 700,
color: '#666',
marginBottom: 1,
cursor: 'pointer',
border: 'none',
display: 'block',
outline: 'none'
};
function ZoomControl(_ref) {
var style = _ref.style,
buttonStyle = _ref.buttonStyle,
setCenterZoom = _ref.setCenterZoom,
mapState = _ref.mapState,
mapProps = _ref.mapProps;
return /*#__PURE__*/React__default["default"].createElement("div", {
className: "pigeon-zoom-buttons pigeon-drag-block",
style: style ? _objectSpread2(_objectSpread2({}, commonStyle), style) : commonStyle
}, /*#__PURE__*/React__default["default"].createElement("button", {
className: "pigeon-zoom-in",
type: "button",
style: buttonStyle ? _objectSpread2(_objectSpread2({}, commonButtonStyle), buttonStyle) : commonButtonStyle,
onClick: function onClick() {
return setCenterZoom(mapState.center, Math.min(mapState.zoom + 1, mapProps.maxZoom));
}
}, "+"), /*#__PURE__*/React__default["default"].createElement("button", {
className: "pigeon-zoom-out",
type: "button",
style: buttonStyle ? _objectSpread2(_objectSpread2({}, commonButtonStyle), buttonStyle) : commonButtonStyle,
onClick: function onClick() {
return setCenterZoom(mapState.center, Math.max(mapState.zoom - 1, mapProps.minZoom));
}
}, "\u2013"));
}
exports.Draggable = Draggable;
exports.GeoJson = GeoJson;
exports.GeoJsonFeature = GeoJsonFeature;
exports.GeoJsonLoader = GeoJsonLoader;
exports.Map = Map;
exports.Marker = Marker;
exports.Overlay = Overlay;
exports.ZoomControl = ZoomControl;