@antv/l7-map 2.9.21 → 2.9.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/es/camera.js +115 -85
  2. package/es/css/l7.css +98 -0
  3. package/es/earthmap.js +27 -43
  4. package/es/geo/edge_insets.js +44 -14
  5. package/es/geo/lng_lat.js +15 -11
  6. package/es/geo/lng_lat_bounds.js +6 -10
  7. package/es/geo/mercator.js +24 -12
  8. package/es/geo/point.js +2 -8
  9. package/es/geo/simple.js +24 -12
  10. package/es/geo/transform.js +421 -120
  11. package/es/handler/IHandler.js +1 -2
  12. package/es/handler/blockable_map_event.js +13 -14
  13. package/es/handler/box_zoom.js +43 -27
  14. package/es/handler/click_zoom.js +3 -8
  15. package/es/handler/events/event.js +3 -6
  16. package/es/handler/events/index.js +4 -5
  17. package/es/handler/events/map_mouse_event.js +30 -20
  18. package/es/handler/events/map_touch_event.js +55 -25
  19. package/es/handler/events/map_wheel_event.js +24 -15
  20. package/es/handler/events/render_event.js +3 -6
  21. package/es/handler/handler_inertia.js +10 -12
  22. package/es/handler/handler_manager.js +75 -72
  23. package/es/handler/handler_util.js +2 -2
  24. package/es/handler/keyboard.js +20 -15
  25. package/es/handler/map_event.js +23 -12
  26. package/es/handler/mouse/index.js +4 -5
  27. package/es/handler/mouse/mouse_handler.js +17 -21
  28. package/es/handler/mouse/mousepan_handler.js +5 -5
  29. package/es/handler/mouse/mousepitch_hander.js +7 -5
  30. package/es/handler/mouse/mouserotate_hander.js +7 -5
  31. package/es/handler/mouse/util.js +3 -3
  32. package/es/handler/scroll_zoom.js +103 -67
  33. package/es/handler/shim/dblclick_zoom.js +35 -8
  34. package/es/handler/shim/drag_pan.js +48 -12
  35. package/es/handler/shim/drag_rotate.js +39 -10
  36. package/es/handler/shim/touch_zoom_rotate.js +59 -16
  37. package/es/handler/tap/single_tap_recognizer.js +7 -17
  38. package/es/handler/tap/tap_drag_zoom.js +5 -18
  39. package/es/handler/tap/tap_recognizer.js +4 -15
  40. package/es/handler/tap/tap_zoom.js +4 -13
  41. package/es/handler/touch/index.js +5 -6
  42. package/es/handler/touch/touch_pan.js +9 -20
  43. package/es/handler/touch/touch_pitch.js +11 -23
  44. package/es/handler/touch/touch_rotate.js +15 -18
  45. package/es/handler/touch/touch_zoom.js +5 -19
  46. package/es/handler/touch/two_touch.js +14 -21
  47. package/es/hash.js +28 -16
  48. package/es/index.js +2 -3
  49. package/es/interface.js +1 -2
  50. package/es/map.js +26 -47
  51. package/es/util.js +15 -6
  52. package/es/utils/Aabb.js +11 -12
  53. package/es/utils/dom.js +30 -11
  54. package/es/utils/performance.js +10 -6
  55. package/es/utils/primitives.js +11 -10
  56. package/es/utils/task_queue.js +6 -13
  57. package/lib/camera.js +508 -721
  58. package/lib/css/l7.css +98 -0
  59. package/lib/earthmap.js +222 -392
  60. package/lib/geo/edge_insets.js +64 -83
  61. package/lib/geo/lng_lat.js +65 -81
  62. package/lib/geo/lng_lat_bounds.js +124 -165
  63. package/lib/geo/mercator.js +62 -78
  64. package/lib/geo/point.js +171 -239
  65. package/lib/geo/simple.js +61 -80
  66. package/lib/geo/transform.js +470 -653
  67. package/lib/handler/IHandler.js +17 -2
  68. package/lib/handler/blockable_map_event.js +63 -83
  69. package/lib/handler/box_zoom.js +123 -176
  70. package/lib/handler/click_zoom.js +56 -68
  71. package/lib/handler/events/event.js +35 -23
  72. package/lib/handler/events/index.js +35 -29
  73. package/lib/handler/events/map_mouse_event.js +42 -72
  74. package/lib/handler/events/map_touch_event.js +45 -80
  75. package/lib/handler/events/map_wheel_event.js +34 -58
  76. package/lib/handler/events/render_event.js +31 -52
  77. package/lib/handler/handler_inertia.js +113 -160
  78. package/lib/handler/handler_manager.js +379 -620
  79. package/lib/handler/handler_util.js +28 -10
  80. package/lib/handler/keyboard.js +114 -146
  81. package/lib/handler/map_event.js +84 -120
  82. package/lib/handler/mouse/index.js +35 -29
  83. package/lib/handler/mouse/mouse_handler.js +90 -123
  84. package/lib/handler/mouse/mousepan_handler.js +46 -65
  85. package/lib/handler/mouse/mousepitch_hander.js +44 -63
  86. package/lib/handler/mouse/mouserotate_hander.js +44 -63
  87. package/lib/handler/mouse/util.js +38 -20
  88. package/lib/handler/scroll_zoom.js +175 -258
  89. package/lib/handler/shim/dblclick_zoom.js +42 -48
  90. package/lib/handler/shim/drag_pan.js +48 -59
  91. package/lib/handler/shim/drag_rotate.js +43 -51
  92. package/lib/handler/shim/touch_zoom_rotate.js +58 -78
  93. package/lib/handler/tap/single_tap_recognizer.js +84 -117
  94. package/lib/handler/tap/tap_drag_zoom.js +92 -115
  95. package/lib/handler/tap/tap_recognizer.js +60 -78
  96. package/lib/handler/tap/tap_zoom.js +88 -119
  97. package/lib/handler/touch/index.js +38 -37
  98. package/lib/handler/touch/touch_pan.js +98 -132
  99. package/lib/handler/touch/touch_pitch.js +73 -117
  100. package/lib/handler/touch/touch_rotate.js +58 -94
  101. package/lib/handler/touch/touch_zoom.js +49 -84
  102. package/lib/handler/touch/two_touch.js +88 -128
  103. package/lib/hash.js +100 -133
  104. package/lib/index.js +19 -31
  105. package/lib/interface.js +17 -2
  106. package/lib/map.js +238 -420
  107. package/lib/util.js +67 -78
  108. package/lib/utils/Aabb.js +80 -132
  109. package/lib/utils/dom.js +84 -141
  110. package/lib/utils/performance.js +54 -42
  111. package/lib/utils/primitives.js +59 -51
  112. package/lib/utils/task_queue.js +61 -108
  113. package/package.json +11 -8
  114. package/es/camera.js.map +0 -1
  115. package/es/earthmap.js.map +0 -1
  116. package/es/geo/edge_insets.js.map +0 -1
  117. package/es/geo/lng_lat.js.map +0 -1
  118. package/es/geo/lng_lat_bounds.js.map +0 -1
  119. package/es/geo/mercator.js.map +0 -1
  120. package/es/geo/point.js.map +0 -1
  121. package/es/geo/simple.js.map +0 -1
  122. package/es/geo/transform.js.map +0 -1
  123. package/es/handler/IHandler.js.map +0 -1
  124. package/es/handler/blockable_map_event.js.map +0 -1
  125. package/es/handler/box_zoom.js.map +0 -1
  126. package/es/handler/click_zoom.js.map +0 -1
  127. package/es/handler/events/event.js.map +0 -1
  128. package/es/handler/events/index.js.map +0 -1
  129. package/es/handler/events/map_mouse_event.js.map +0 -1
  130. package/es/handler/events/map_touch_event.js.map +0 -1
  131. package/es/handler/events/map_wheel_event.js.map +0 -1
  132. package/es/handler/events/render_event.js.map +0 -1
  133. package/es/handler/handler_inertia.js.map +0 -1
  134. package/es/handler/handler_manager.js.map +0 -1
  135. package/es/handler/handler_util.js.map +0 -1
  136. package/es/handler/keyboard.js.map +0 -1
  137. package/es/handler/map_event.js.map +0 -1
  138. package/es/handler/mouse/index.js.map +0 -1
  139. package/es/handler/mouse/mouse_handler.js.map +0 -1
  140. package/es/handler/mouse/mousepan_handler.js.map +0 -1
  141. package/es/handler/mouse/mousepitch_hander.js.map +0 -1
  142. package/es/handler/mouse/mouserotate_hander.js.map +0 -1
  143. package/es/handler/mouse/util.js.map +0 -1
  144. package/es/handler/scroll_zoom.js.map +0 -1
  145. package/es/handler/shim/dblclick_zoom.js.map +0 -1
  146. package/es/handler/shim/drag_pan.js.map +0 -1
  147. package/es/handler/shim/drag_rotate.js.map +0 -1
  148. package/es/handler/shim/touch_zoom_rotate.js.map +0 -1
  149. package/es/handler/tap/single_tap_recognizer.js.map +0 -1
  150. package/es/handler/tap/tap_drag_zoom.js.map +0 -1
  151. package/es/handler/tap/tap_recognizer.js.map +0 -1
  152. package/es/handler/tap/tap_zoom.js.map +0 -1
  153. package/es/handler/touch/index.js.map +0 -1
  154. package/es/handler/touch/touch_pan.js.map +0 -1
  155. package/es/handler/touch/touch_pitch.js.map +0 -1
  156. package/es/handler/touch/touch_rotate.js.map +0 -1
  157. package/es/handler/touch/touch_zoom.js.map +0 -1
  158. package/es/handler/touch/two_touch.js.map +0 -1
  159. package/es/hash.js.map +0 -1
  160. package/es/index.js.map +0 -1
  161. package/es/interface.js.map +0 -1
  162. package/es/map.js.map +0 -1
  163. package/es/util.js.map +0 -1
  164. package/es/utils/Aabb.js.map +0 -1
  165. package/es/utils/dom.js.map +0 -1
  166. package/es/utils/performance.js.map +0 -1
  167. package/es/utils/primitives.js.map +0 -1
  168. package/es/utils/task_queue.js.map +0 -1
  169. package/lib/camera.js.map +0 -1
  170. package/lib/earthmap.js.map +0 -1
  171. package/lib/geo/edge_insets.js.map +0 -1
  172. package/lib/geo/lng_lat.js.map +0 -1
  173. package/lib/geo/lng_lat_bounds.js.map +0 -1
  174. package/lib/geo/mercator.js.map +0 -1
  175. package/lib/geo/point.js.map +0 -1
  176. package/lib/geo/simple.js.map +0 -1
  177. package/lib/geo/transform.js.map +0 -1
  178. package/lib/handler/IHandler.js.map +0 -1
  179. package/lib/handler/blockable_map_event.js.map +0 -1
  180. package/lib/handler/box_zoom.js.map +0 -1
  181. package/lib/handler/click_zoom.js.map +0 -1
  182. package/lib/handler/events/event.js.map +0 -1
  183. package/lib/handler/events/index.js.map +0 -1
  184. package/lib/handler/events/map_mouse_event.js.map +0 -1
  185. package/lib/handler/events/map_touch_event.js.map +0 -1
  186. package/lib/handler/events/map_wheel_event.js.map +0 -1
  187. package/lib/handler/events/render_event.js.map +0 -1
  188. package/lib/handler/handler_inertia.js.map +0 -1
  189. package/lib/handler/handler_manager.js.map +0 -1
  190. package/lib/handler/handler_util.js.map +0 -1
  191. package/lib/handler/keyboard.js.map +0 -1
  192. package/lib/handler/map_event.js.map +0 -1
  193. package/lib/handler/mouse/index.js.map +0 -1
  194. package/lib/handler/mouse/mouse_handler.js.map +0 -1
  195. package/lib/handler/mouse/mousepan_handler.js.map +0 -1
  196. package/lib/handler/mouse/mousepitch_hander.js.map +0 -1
  197. package/lib/handler/mouse/mouserotate_hander.js.map +0 -1
  198. package/lib/handler/mouse/util.js.map +0 -1
  199. package/lib/handler/scroll_zoom.js.map +0 -1
  200. package/lib/handler/shim/dblclick_zoom.js.map +0 -1
  201. package/lib/handler/shim/drag_pan.js.map +0 -1
  202. package/lib/handler/shim/drag_rotate.js.map +0 -1
  203. package/lib/handler/shim/touch_zoom_rotate.js.map +0 -1
  204. package/lib/handler/tap/single_tap_recognizer.js.map +0 -1
  205. package/lib/handler/tap/tap_drag_zoom.js.map +0 -1
  206. package/lib/handler/tap/tap_recognizer.js.map +0 -1
  207. package/lib/handler/tap/tap_zoom.js.map +0 -1
  208. package/lib/handler/touch/index.js.map +0 -1
  209. package/lib/handler/touch/touch_pan.js.map +0 -1
  210. package/lib/handler/touch/touch_pitch.js.map +0 -1
  211. package/lib/handler/touch/touch_rotate.js.map +0 -1
  212. package/lib/handler/touch/touch_zoom.js.map +0 -1
  213. package/lib/handler/touch/two_touch.js.map +0 -1
  214. package/lib/hash.js.map +0 -1
  215. package/lib/index.js.map +0 -1
  216. package/lib/interface.js.map +0 -1
  217. package/lib/map.js.map +0 -1
  218. package/lib/util.js.map +0 -1
  219. package/lib/utils/Aabb.js.map +0 -1
  220. package/lib/utils/dom.js.map +0 -1
  221. package/lib/utils/performance.js.map +0 -1
  222. package/lib/utils/primitives.js.map +0 -1
  223. package/lib/utils/task_queue.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/geo/transform.ts"],"names":["EXTENT","Transform","minZoom","maxZoom","minPitch","maxPitch","renderWorldCopies","tileSize","maxValidLatitude","_renderWorldCopies","undefined","_minZoom","_maxZoom","_minPitch","_maxPitch","setMaxBounds","width","height","_center","LngLat","zoom","angle","_fov","_pitch","unmodified","edgeInsets","EdgeInsets","posMatrixCache","alignedPosMatrixCache","Math","max","min","pitch","scale","centerPoint","_sub","size","_div","Point","PI","bearing","b","calcMatrices","rotationMatrix","mat2","create","rotate","p","fov","_zoom","z","zoomScale","tileZoom","floor","zoomFraction","constrain","center","lat","lng","toJSON","padding","equals","interpolate","getCenter","project","clone","latRange","start","target","t","options","roundZoom","round","scaleZoom","pixelsToGLUnits","pow","log","LN2","lnglat","worldSize","point","MercatorCoordinate","x","y","toLngLat","a","pointCoordinate","loc","locationCoordinate","newCenter","coordinateLocation","wrap","targetZ","coord0","Float64Array","coord1","vec4","transformMat4","pixelMatrixInverse","w0","w1","x0","x1","y0","y1","z0","z1","LngLatBounds","extend","pointLocation","length","lngRange","bounds","getWest","getEast","getSouth","getNorth","mercatorMatrix","slice","coord","Float32Array","topPoint","pixelMatrix","cameraToCenterDistance","yOffset","tan","add","queryGeometry","c","getCameraPoint","minX","minY","maxX","maxY","fromValues","coordinatePoint","fromLngLat","projMatrix","constraining","sy","sx","x2","y2","s","unproject","isMini","h2","w2","halfFov","offset","centerOffset","groundAngle","fovAboveCenter","topHalfSurfaceDistance","sin","furthestDistance","cos","farZ","nearZ","m","mat4","perspective","translate","rotateX","rotateZ","invProjMatrix","invert","xShift","yShift","angleCos","angleSin","dx","dy","alignedM","alignedProjMatrix","labelPlaneMatrix","glCoordMatrix","multiply","Error"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { isMini } from '@antv/l7-utils';\nimport { mat2, mat4, vec3, vec4 } from 'gl-matrix';\nimport Point, { PointLike } from '../geo/point';\nimport { clamp, interpolate, wrap } from '../util';\nimport Aabb from '../utils/Aabb';\nimport Frustum from '../utils/primitives';\nimport EdgeInsets, { IPaddingOptions } from './edge_insets';\nimport LngLat from './lng_lat';\nimport LngLatBounds from './lng_lat_bounds';\nimport MercatorCoordinate, {\n mercatorXfromLng,\n mercatorYfromLat,\n mercatorZfromAltitude,\n} from './mercator';\nexport const EXTENT = 8192;\nexport default class Transform {\n get minZoom(): number {\n return this._minZoom;\n }\n set minZoom(zoom: number) {\n if (this._minZoom === zoom) {\n return;\n }\n this._minZoom = zoom;\n this.zoom = Math.max(this.zoom, zoom);\n }\n\n get maxZoom(): number {\n return this._maxZoom;\n }\n set maxZoom(zoom: number) {\n if (this._maxZoom === zoom) {\n return;\n }\n this._maxZoom = zoom;\n this.zoom = Math.min(this.zoom, zoom);\n }\n\n get minPitch(): number {\n return this._minPitch;\n }\n set minPitch(pitch: number) {\n if (this._minPitch === pitch) {\n return;\n }\n this._minPitch = pitch;\n this._pitch = Math.max(this._pitch, pitch);\n }\n\n get maxPitch(): number {\n return this._maxPitch;\n }\n set maxPitch(pitch: number) {\n if (this._maxPitch === pitch) {\n return;\n }\n this._maxPitch = pitch;\n this._pitch = Math.min(this._pitch, pitch);\n }\n\n get renderWorldCopies(): boolean {\n return this._renderWorldCopies;\n }\n set renderWorldCopies(renderWorldCopies: boolean) {\n if (renderWorldCopies === undefined) {\n renderWorldCopies = true;\n } else if (renderWorldCopies === null) {\n renderWorldCopies = false;\n }\n\n this._renderWorldCopies = renderWorldCopies;\n }\n\n get worldSize(): number {\n return this.tileSize * this.scale;\n }\n\n get centerOffset(): Point {\n return this.centerPoint._sub(this.size._div(2));\n }\n\n get size(): Point {\n return new Point(this.width, this.height);\n }\n\n get bearing(): number {\n return (-this.angle / Math.PI) * 180;\n }\n set bearing(bearing: number) {\n const b = (-wrap(bearing, -180, 180) * Math.PI) / 180;\n if (this.angle === b) {\n return;\n }\n this.unmodified = false;\n this.angle = b;\n this.calcMatrices();\n\n // 2x2 matrix for rotating points\n this.rotationMatrix = mat2.create();\n mat2.rotate(this.rotationMatrix, this.rotationMatrix, this.angle);\n }\n\n get pitch(): number {\n return (this._pitch / Math.PI) * 180;\n }\n set pitch(pitch: number) {\n const p = (clamp(pitch, this._minPitch, this._maxPitch) / 180) * Math.PI;\n if (this._pitch === p) {\n return;\n }\n this.unmodified = false;\n this._pitch = p;\n this.calcMatrices();\n }\n\n get fov(): number {\n return (this._fov / Math.PI) * 180;\n }\n\n set fov(fov: number) {\n fov = Math.max(0.01, Math.min(60, fov));\n if (this._fov === fov) {\n return;\n }\n this.unmodified = false;\n this._fov = (fov / 180) * Math.PI;\n this.calcMatrices();\n }\n\n get zoom(): number {\n return this._zoom;\n }\n\n set zoom(zoom: number) {\n const z = Math.min(Math.max(zoom, this._minZoom), this._maxZoom);\n if (this._zoom === z) {\n return;\n }\n this.unmodified = false;\n this._zoom = z;\n this.scale = this.zoomScale(z);\n this.tileZoom = Math.floor(z);\n this.zoomFraction = z - this.tileZoom;\n this.constrain();\n this.calcMatrices();\n }\n\n get center(): LngLat {\n return this._center;\n }\n\n set center(center: LngLat) {\n if (center.lat === this._center.lat && center.lng === this._center.lng) {\n return;\n }\n this.unmodified = false;\n this._center = center;\n this.constrain();\n this.calcMatrices();\n }\n\n get padding(): IPaddingOptions {\n return this.edgeInsets.toJSON();\n }\n\n set padding(padding: IPaddingOptions) {\n if (this.edgeInsets.equals(padding)) {\n return;\n }\n this.unmodified = false;\n // Update edge-insets inplace\n this.edgeInsets.interpolate(this.edgeInsets, padding, 1);\n this.calcMatrices();\n }\n\n /**\n * The center of the screen in pixels with the top-left corner being (0,0)\n * and +y axis pointing downwards. This accounts for padding.\n *\n * @readonly\n * @type {Point}\n * @memberof Transform\n */\n get centerPoint(): Point {\n return this.edgeInsets.getCenter(this.width, this.height);\n }\n\n get point(): Point {\n return this.project(this.center);\n }\n public tileSize: number;\n public tileZoom: number;\n public lngRange?: [number, number];\n public latRange?: [number, number];\n public maxValidLatitude: number;\n public scale: number;\n public width: number;\n public height: number;\n public angle: number;\n public rotationMatrix: mat2;\n public pixelsToGLUnits: [number, number];\n public cameraToCenterDistance: number;\n public mercatorMatrix: mat4;\n public projMatrix: mat4;\n public invProjMatrix: mat4;\n public alignedProjMatrix: mat4;\n public pixelMatrix: mat4;\n public pixelMatrixInverse: mat4;\n public glCoordMatrix: mat4;\n public labelPlaneMatrix: mat4;\n // tslint:disable:variable-name\n private _fov: number;\n private _pitch: number;\n private _zoom: number;\n private _renderWorldCopies: boolean;\n private _minZoom: number;\n private _maxZoom: number;\n private _minPitch: number;\n private _maxPitch: number;\n private _center: LngLat;\n // tslint:enable\n private zoomFraction: number;\n private unmodified: boolean;\n private edgeInsets: EdgeInsets;\n private constraining: boolean;\n private posMatrixCache: { [_: string]: Float32Array };\n private alignedPosMatrixCache: { [_: string]: Float32Array };\n constructor(\n minZoom: number,\n maxZoom: number,\n minPitch: number,\n maxPitch: number,\n renderWorldCopies: boolean | void,\n ) {\n this.tileSize = 512; // constant\n this.maxValidLatitude = 85.051129; // constant\n\n this._renderWorldCopies = (renderWorldCopies === undefined\n ? true\n : renderWorldCopies) as boolean;\n this._minZoom = minZoom || 0;\n this._maxZoom = maxZoom || 22;\n\n this._minPitch = minPitch === undefined || minPitch === null ? 0 : minPitch;\n this._maxPitch =\n maxPitch === undefined || maxPitch === null ? 60 : maxPitch;\n\n this.setMaxBounds();\n\n this.width = 0;\n this.height = 0;\n this._center = new LngLat(0, 0);\n this.zoom = 0;\n this.angle = 0;\n this._fov = 0.6435011087932844;\n this._pitch = 0;\n this.unmodified = true;\n this.edgeInsets = new EdgeInsets();\n this.posMatrixCache = {};\n this.alignedPosMatrixCache = {};\n }\n\n public clone(): Transform {\n const clone = new Transform(\n this._minZoom,\n this._maxZoom,\n this._minPitch,\n this._maxPitch,\n this._renderWorldCopies,\n );\n clone.tileSize = this.tileSize;\n clone.latRange = this.latRange;\n clone.width = this.width;\n clone.height = this.height;\n clone.center = this._center;\n clone.zoom = this.zoom;\n clone.angle = this.angle;\n clone.fov = this._fov;\n clone.pitch = this._pitch;\n clone.unmodified = this.unmodified;\n clone.edgeInsets = this.edgeInsets.clone();\n clone.calcMatrices();\n return clone;\n }\n\n /**\n * Returns if the padding params match\n *\n * @param {IPaddingOptions} padding\n * @returns {boolean}\n * @memberof Transform\n */\n public isPaddingEqual(padding: IPaddingOptions): boolean {\n return this.edgeInsets.equals(padding);\n }\n\n /**\n * Helper method to upadte edge-insets inplace\n *\n * @param {IPaddingOptions} target\n * @param {number} t\n * @memberof Transform\n */\n public interpolatePadding(\n start: IPaddingOptions,\n target: IPaddingOptions,\n t: number,\n ) {\n this.unmodified = false;\n this.edgeInsets.interpolate(start, target, t);\n this.constrain();\n this.calcMatrices();\n }\n\n /**\n * Return a zoom level that will cover all tiles the transform\n * @param {Object} options options\n * @param {number} options.tileSize Tile size, expressed in screen pixels.\n * @param {boolean} options.roundZoom Target zoom level. If true, the value will be rounded to the closest integer. Otherwise the value will be floored.\n * @returns {number} zoom level An integer zoom level at which all tiles will be visible.\n */\n public coveringZoomLevel(options: { roundZoom?: boolean; tileSize: number }) {\n const z = (options.roundZoom ? Math.round : Math.floor)(\n this.zoom + this.scaleZoom(this.tileSize / options.tileSize),\n );\n // At negative zoom levels load tiles from z0 because negative tile zoom levels don't exist.\n return Math.max(0, z);\n }\n\n /**\n * Return any \"wrapped\" copies of a given tile coordinate that are visible\n * in the current view.\n *\n * @private\n */\n // public getVisibleUnwrappedCoordinates(tileID: CanonicalTileID) {\n // const result = [new UnwrappedTileID(0, tileID)];\n // if (this._renderWorldCopies) {\n // const utl = this.pointCoordinate(new Point(0, 0));\n // const utr = this.pointCoordinate(new Point(this.width, 0));\n // const ubl = this.pointCoordinate(new Point(this.width, this.height));\n // const ubr = this.pointCoordinate(new Point(0, this.height));\n // const w0 = Math.floor(Math.min(utl.x, utr.x, ubl.x, ubr.x));\n // const w1 = Math.floor(Math.max(utl.x, utr.x, ubl.x, ubr.x));\n\n // // Add an extra copy of the world on each side to properly render ImageSources and CanvasSources.\n // // Both sources draw outside the tile boundaries of the tile that \"contains them\" so we need\n // // to add extra copies on both sides in case offscreen tiles need to draw into on-screen ones.\n // const extraWorldCopy = 1;\n\n // for (let w = w0 - extraWorldCopy; w <= w1 + extraWorldCopy; w++) {\n // if (w === 0) {\n // continue;\n // }\n // result.push(new UnwrappedTileID(w, tileID));\n // }\n // }\n // return result;\n // }\n\n /**\n * Return all coordinates that could cover this transform for a covering\n * zoom level.\n * @param {Object} options\n * @param {number} options.tileSize\n * @param {number} options.minzoom\n * @param {number} options.maxzoom\n * @param {boolean} options.roundZoom\n * @param {boolean} options.reparseOverscaled\n * @param {boolean} options.renderWorldCopies\n * @returns {Array<OverscaledTileID>} OverscaledTileIDs\n * @private\n */\n // public coveringTiles(options: {\n // tileSize: number;\n // minzoom?: number;\n // maxzoom?: number;\n // roundZoom?: boolean;\n // reparseOverscaled?: boolean;\n // renderWorldCopies?: boolean;\n // }): OverscaledTileID[] {\n // let z = this.coveringZoomLevel(options);\n // const actualZ = z;\n\n // if (options.minzoom !== undefined && z < options.minzoom) {\n // return [];\n // }\n // if (options.maxzoom !== undefined && z > options.maxzoom) {\n // z = options.maxzoom;\n // }\n\n // const centerCoord = MercatorCoordinate.fromLngLat(this.center);\n // const numTiles = Math.pow(2, z);\n // const centerPoint = [numTiles * centerCoord.x, numTiles * centerCoord.y, 0];\n // const cameraFrustum = Frustum.fromInvProjectionMatrix(\n // this.invProjMatrix,\n // this.worldSize,\n // z,\n // );\n\n // // No change of LOD behavior for pitch lower than 60 and when there is no top padding: return only tile ids from the requested zoom level\n // let minZoom = options.minzoom || 0;\n // // Use 0.1 as an epsilon to avoid for explicit == 0.0 floating point checks\n // if (this._pitch <= 60.0 && this.edgeInsets.top < 0.1) {\n // minZoom = z;\n // }\n\n // // There should always be a certain number of maximum zoom level tiles surrounding the center location\n // const radiusOfMaxLvlLodInTiles = 3;\n\n // const newRootTile = (wrap: number): any => {\n // return {\n // // All tiles are on zero elevation plane => z difference is zero\n // aabb: new Aabb(\n // [wrap * numTiles, 0, 0],\n // [(wrap + 1) * numTiles, numTiles, 0],\n // ),\n // zoom: 0,\n // x: 0,\n // y: 0,\n // wrap,\n // fullyVisible: false,\n // };\n // };\n\n // // Do a depth-first traversal to find visible tiles and proper levels of detail\n // const stack = [];\n // const result = [];\n // const maxZoom = z;\n // const overscaledZ = options.reparseOverscaled ? actualZ : z;\n\n // if (this._renderWorldCopies) {\n // // Render copy of the globe thrice on both sides\n // for (let i = 1; i <= 3; i++) {\n // stack.push(newRootTile(-i));\n // stack.push(newRootTile(i));\n // }\n // }\n\n // stack.push(newRootTile(0));\n\n // while (stack.length > 0) {\n // const it = stack.pop();\n // const x = it.x;\n // const y = it.y;\n // let fullyVisible = it.fullyVisible;\n\n // // Visibility of a tile is not required if any of its ancestor if fully inside the frustum\n // if (!fullyVisible) {\n // const intersectResult = it.aabb.intersects(cameraFrustum);\n\n // if (intersectResult === 0) {\n // continue;\n // }\n\n // fullyVisible = intersectResult === 2;\n // }\n\n // const distanceX = it.aabb.distanceX(centerPoint);\n // const distanceY = it.aabb.distanceY(centerPoint);\n // const longestDim = Math.max(Math.abs(distanceX), Math.abs(distanceY));\n\n // // We're using distance based heuristics to determine if a tile should be split into quadrants or not.\n // // radiusOfMaxLvlLodInTiles defines that there's always a certain number of maxLevel tiles next to the map center.\n // // Using the fact that a parent node in quadtree is twice the size of its children (per dimension)\n // // we can define distance thresholds for each relative level:\n // // f(k) = offset + 2 + 4 + 8 + 16 + ... + 2^k. This is the same as \"offset+2^(k+1)-2\"\n // const distToSplit =\n // radiusOfMaxLvlLodInTiles + (1 << (maxZoom - it.zoom)) - 2;\n\n // // Have we reached the target depth or is the tile too far away to be any split further?\n // if (\n // it.zoom === maxZoom ||\n // (longestDim > distToSplit && it.zoom >= minZoom)\n // ) {\n // result.push({\n // tileID: new OverscaledTileID(\n // it.zoom === maxZoom ? overscaledZ : it.zoom,\n // it.wrap,\n // it.zoom,\n // x,\n // y,\n // ),\n // distanceSq: vec2.sqrLen([\n // centerPoint[0] - 0.5 - x,\n // centerPoint[1] - 0.5 - y,\n // ]),\n // });\n // continue;\n // }\n\n // for (let i = 0; i < 4; i++) {\n // const childX = (x << 1) + (i % 2);\n // const childY = (y << 1) + (i >> 1);\n\n // stack.push({\n // aabb: it.aabb.quadrant(i),\n // zoom: it.zoom + 1,\n // x: childX,\n // y: childY,\n // wrap: it.wrap,\n // fullyVisible,\n // });\n // }\n // }\n\n // return result\n // .sort((a, b) => a.distanceSq - b.distanceSq)\n // .map((a) => a.tileID);\n // }\n\n public resize(width: number, height: number) {\n this.width = width;\n this.height = height;\n\n this.pixelsToGLUnits = [2 / width, -2 / height];\n this.constrain();\n this.calcMatrices();\n }\n\n public zoomScale(zoom: number) {\n return Math.pow(2, zoom);\n }\n public scaleZoom(scale: number) {\n return Math.log(scale) / Math.LN2;\n }\n\n public project(lnglat: LngLat) {\n const lat = clamp(\n lnglat.lat,\n -this.maxValidLatitude,\n this.maxValidLatitude,\n );\n return new Point(\n mercatorXfromLng(lnglat.lng) * this.worldSize,\n mercatorYfromLat(lat) * this.worldSize,\n );\n }\n\n public unproject(point: Point): LngLat {\n return new MercatorCoordinate(\n point.x / this.worldSize,\n point.y / this.worldSize,\n ).toLngLat();\n }\n\n public setLocationAtPoint(lnglat: LngLat, point: Point) {\n const a = this.pointCoordinate(point);\n const b = this.pointCoordinate(this.centerPoint);\n const loc = this.locationCoordinate(lnglat);\n const newCenter = new MercatorCoordinate(\n loc.x - (a.x - b.x),\n loc.y - (a.y - b.y),\n );\n this.center = this.coordinateLocation(newCenter);\n if (this._renderWorldCopies) {\n this.center = this.center.wrap();\n }\n }\n\n public pointCoordinate(p: Point) {\n const targetZ = 0;\n // since we don't know the correct projected z value for the point,\n // unproject two points to get a line and then find the point on that\n // line with z=0\n\n const coord0 = new Float64Array([p.x, p.y, 0, 1]);\n const coord1 = new Float64Array([p.x, p.y, 1, 1]);\n\n // @ts-ignore\n vec4.transformMat4(coord0, coord0, this.pixelMatrixInverse);\n // @ts-ignore\n vec4.transformMat4(coord1, coord1, this.pixelMatrixInverse);\n\n const w0 = coord0[3];\n const w1 = coord1[3];\n const x0 = coord0[0] / w0;\n const x1 = coord1[0] / w1;\n const y0 = coord0[1] / w0;\n const y1 = coord1[1] / w1;\n const z0 = coord0[2] / w0;\n const z1 = coord1[2] / w1;\n\n const t = z0 === z1 ? 0 : (targetZ - z0) / (z1 - z0);\n\n return new MercatorCoordinate(\n interpolate(x0, x1, t) / this.worldSize,\n interpolate(y0, y1, t) / this.worldSize,\n );\n }\n\n /**\n * Returns the map's geographical bounds. When the bearing or pitch is non-zero, the visible region is not\n * an axis-aligned rectangle, and the result is the smallest bounds that encompasses the visible region.\n * @returns {LngLatBounds} Returns a {@link LngLatBounds} object describing the map's geographical bounds.\n */\n public getBounds(): LngLatBounds {\n return new LngLatBounds()\n .extend(this.pointLocation(new Point(0, 0)))\n .extend(this.pointLocation(new Point(this.width, 0)))\n .extend(this.pointLocation(new Point(this.width, this.height)))\n .extend(this.pointLocation(new Point(0, this.height)));\n }\n\n /**\n * Returns the maximum geographical bounds the map is constrained to, or `null` if none set.\n * @returns {LngLatBounds} {@link LngLatBounds}\n */\n public getMaxBounds(): LngLatBounds | null {\n if (\n !this.latRange ||\n this.latRange.length !== 2 ||\n !this.lngRange ||\n this.lngRange.length !== 2\n ) {\n return null;\n }\n\n return new LngLatBounds(\n [this.lngRange[0], this.latRange[0]],\n [this.lngRange[1], this.latRange[1]],\n );\n }\n\n /**\n * Sets or clears the map's geographical constraints.\n * @param {LngLatBounds} bounds A {@link LngLatBounds} object describing the new geographic boundaries of the map.\n */\n public setMaxBounds(bounds?: LngLatBounds) {\n if (bounds) {\n this.lngRange = [bounds.getWest(), bounds.getEast()];\n this.latRange = [bounds.getSouth(), bounds.getNorth()];\n this.constrain();\n } else {\n this.lngRange = undefined;\n this.latRange = [-this.maxValidLatitude, this.maxValidLatitude];\n }\n }\n\n public customLayerMatrix(): number[] {\n return (this.mercatorMatrix as number[]).slice();\n }\n\n public maxPitchScaleFactor() {\n // calcMatrices hasn't run yet\n if (!this.pixelMatrixInverse) {\n return 1;\n }\n\n const coord = this.pointCoordinate(new Point(0, 0));\n const p = new Float32Array([\n coord.x * this.worldSize,\n coord.y * this.worldSize,\n 0,\n 1,\n ]);\n const topPoint = vec4.transformMat4(p, p, this.pixelMatrix);\n return topPoint[3] / this.cameraToCenterDistance;\n }\n\n /*\n * The camera looks at the map from a 3D (lng, lat, altitude) location. Let's use `cameraLocation`\n * as the name for the location under the camera and on the surface of the earth (lng, lat, 0).\n * `cameraPoint` is the projected position of the `cameraLocation`.\n *\n * This point is useful to us because only fill-extrusions that are between `cameraPoint` and\n * the query point on the surface of the earth can extend and intersect the query.\n *\n * When the map is not pitched the `cameraPoint` is equivalent to the center of the map because\n * the camera is right above the center of the map.\n */\n public getCameraPoint() {\n const pitch = this._pitch;\n const yOffset = Math.tan(pitch) * (this.cameraToCenterDistance || 1);\n return this.centerPoint.add(new Point(0, yOffset));\n }\n\n /*\n * When the map is pitched, some of the 3D features that intersect a query will not intersect\n * the query at the surface of the earth. Instead the feature may be closer and only intersect\n * the query because it extrudes into the air.\n *\n * This returns a geometry that includes all of the original query as well as all possible ares of the\n * screen where the *base* of a visible extrusion could be.\n * - For point queries, the line from the query point to the \"camera point\"\n * - For other geometries, the envelope of the query geometry and the \"camera point\"\n */\n public getCameraQueryGeometry(queryGeometry: Point[]): Point[] {\n const c = this.getCameraPoint();\n\n if (queryGeometry.length === 1) {\n return [queryGeometry[0], c];\n } else {\n let minX = c.x;\n let minY = c.y;\n let maxX = c.x;\n let maxY = c.y;\n for (const p of queryGeometry) {\n minX = Math.min(minX, p.x);\n minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x);\n maxY = Math.max(maxY, p.y);\n }\n return [\n new Point(minX, minY),\n new Point(maxX, minY),\n new Point(maxX, maxY),\n new Point(minX, maxY),\n new Point(minX, minY),\n ];\n }\n }\n\n /**\n * Given a coordinate, return the screen point that corresponds to it\n * @param {Coordinate} coord\n * @returns {Point} screen point\n * @private\n */\n public coordinatePoint(coord: MercatorCoordinate) {\n const p = vec4.fromValues(\n coord.x * this.worldSize,\n coord.y * this.worldSize,\n 0,\n 1,\n );\n vec4.transformMat4(p, p, this.pixelMatrix);\n return new Point(p[0] / p[3], p[1] / p[3]);\n }\n /**\n * Given a location, return the screen point that corresponds to it\n * @param {LngLat} lnglat location\n * @returns {Point} screen point\n * @private\n */\n public locationPoint(lnglat: LngLat) {\n return this.coordinatePoint(this.locationCoordinate(lnglat));\n }\n\n /**\n * Given a point on screen, return its lnglat\n * @param {Point} p screen point\n * @returns {LngLat} lnglat location\n * @private\n */\n public pointLocation(p: Point) {\n // if(p.x !== 0 && p.x !== 1001) {\n // console.log(p.x)\n // }\n\n return this.coordinateLocation(this.pointCoordinate(p));\n }\n\n /**\n * Given a geographical lnglat, return an unrounded\n * coordinate that represents it at this transform's zoom level.\n * @param {LngLat} lnglat\n * @returns {Coordinate}\n * @private\n */\n public locationCoordinate(lnglat: LngLat) {\n return MercatorCoordinate.fromLngLat(lnglat);\n }\n\n /**\n * Given a Coordinate, return its geographical position.\n * @param {Coordinate} coord\n * @returns {LngLat} lnglat\n * @private\n */\n public coordinateLocation(coord: MercatorCoordinate) {\n return coord.toLngLat();\n }\n\n public getProjectionMatrix(): mat4 {\n return this.projMatrix;\n }\n /**\n * Calculate the posMatrix that, given a tile coordinate, would be used to display the tile on a map.\n * @param {UnwrappedTileID} unwrappedTileID;\n * @private\n */\n // private calculatePosMatrix(\n // unwrappedTileID: UnwrappedTileID,\n // aligned: boolean = false,\n // ): Float32Array {\n // const posMatrixKey = unwrappedTileID.key;\n // const cache = aligned ? this.alignedPosMatrixCache : this.posMatrixCache;\n // if (cache[posMatrixKey]) {\n // return cache[posMatrixKey];\n // }\n\n // const canonical = unwrappedTileID.canonical;\n // const scale = this.worldSize / this.zoomScale(canonical.z);\n // const unwrappedX =\n // canonical.x + Math.pow(2, canonical.z) * unwrappedTileID.wrap;\n\n // const posMatrix = mat4.identity(new Float64Array(16));\n // mat4.translate(posMatrix, posMatrix, [\n // unwrappedX * scale,\n // canonical.y * scale,\n // 0,\n // ]);\n // mat4.scale(posMatrix, posMatrix, [scale / EXTENT, scale / EXTENT, 1]);\n // mat4.multiply(\n // posMatrix,\n // aligned ? this.alignedProjMatrix : this.projMatrix,\n // posMatrix,\n // );\n\n // cache[posMatrixKey] = new Float32Array(posMatrix);\n // return cache[posMatrixKey];\n // }\n\n private constrain() {\n if (!this.center || !this.width || !this.height || this.constraining) {\n return;\n }\n\n this.constraining = true;\n\n let minY = -90;\n let maxY = 90;\n let minX = -180;\n let maxX = 180;\n let sy;\n let sx;\n let x2;\n let y2;\n const size = this.size;\n const unmodified = this.unmodified;\n if (this.latRange) {\n const latRange = this.latRange;\n minY = mercatorYfromLat(latRange[1]) * this.worldSize;\n maxY = mercatorYfromLat(latRange[0]) * this.worldSize;\n sy = maxY - minY < size.y ? size.y / (maxY - minY) : 0;\n }\n\n if (this.lngRange) {\n const lngRange = this.lngRange;\n minX = mercatorXfromLng(lngRange[0]) * this.worldSize;\n maxX = mercatorXfromLng(lngRange[1]) * this.worldSize;\n sx = maxX - minX < size.x ? size.x / (maxX - minX) : 0;\n }\n\n const point = this.point;\n\n // how much the map should scale to fit the screen into given latitude/longitude ranges\n const s = Math.max(sx || 0, sy || 0);\n\n if (s) {\n this.center = this.unproject(\n new Point(\n sx ? (maxX + minX) / 2 : point.x,\n sy ? (maxY + minY) / 2 : point.y,\n ),\n );\n if (isMini) {\n this.zoom = Math.max(this.zoom, Math.max(-1, this.minZoom));\n } else {\n this.zoom += this.scaleZoom(s);\n }\n\n this.unmodified = unmodified;\n this.constraining = false;\n return;\n }\n\n if (this.latRange) {\n const y = point.y;\n const h2 = size.y / 2;\n\n if (y - h2 < minY) {\n y2 = minY + h2;\n }\n if (y + h2 > maxY) {\n y2 = maxY - h2;\n }\n }\n\n if (this.lngRange) {\n const x = point.x;\n const w2 = size.x / 2;\n\n if (x - w2 < minX) {\n x2 = minX + w2;\n }\n if (x + w2 > maxX) {\n x2 = maxX - w2;\n }\n }\n\n // pan the map if the screen goes off the range\n if (x2 !== undefined || y2 !== undefined) {\n this.center = this.unproject(\n new Point(\n x2 !== undefined ? x2 : point.x,\n y2 !== undefined ? y2 : point.y,\n ),\n );\n }\n\n this.unmodified = unmodified;\n this.constraining = false;\n }\n\n private calcMatrices() {\n if (!this.height) {\n return;\n }\n\n const halfFov = this._fov / 2;\n const offset = this.centerOffset;\n this.cameraToCenterDistance = (0.5 / Math.tan(halfFov)) * this.height;\n\n // Find the distance from the center point [width/2 + offset.x, height/2 + offset.y] to the\n // center top point [width/2 + offset.x, 0] in Z units, using the law of sines.\n // 1 Z unit is equivalent to 1 horizontal px at the center of the map\n // (the distance between[width/2, height/2] and [width/2 + 1, height/2])\n const groundAngle = Math.PI / 2 + this._pitch;\n const fovAboveCenter = this._fov * (0.5 + offset.y / this.height);\n const topHalfSurfaceDistance =\n (Math.sin(fovAboveCenter) * this.cameraToCenterDistance) /\n Math.sin(\n clamp(Math.PI - groundAngle - fovAboveCenter, 0.01, Math.PI - 0.01),\n );\n const point = this.point;\n const x = point.x;\n const y = point.y;\n\n // Calculate z distance of the farthest fragment that should be rendered.\n const furthestDistance =\n Math.cos(Math.PI / 2 - this._pitch) * topHalfSurfaceDistance +\n this.cameraToCenterDistance;\n // Add a bit extra to avoid precision problems when a fragment's distance is exactly `furthestDistance`\n const farZ = furthestDistance * 1.01;\n\n // The larger the value of nearZ is\n // - the more depth precision is available for features (good)\n // - clipping starts appearing sooner when the camera is close to 3d features (bad)\n //\n // Smaller values worked well for mapbox-gl-js but deckgl was encountering precision issues\n // when rendering it's layers using custom layers. This value was experimentally chosen and\n // seems to solve z-fighting issues in deckgl while not clipping buildings too close to the camera.\n const nearZ = this.height / 50;\n\n // matrix for conversion from location to GL coordinates (-1 .. 1)\n // TODO: 使用 Float64Array 的原因是为了避免计算精度问题、 mat4.create() 默认使用 Float32Array\n let m = new Float64Array(16);\n // @ts-ignore\n mat4.perspective(m, this._fov, this.width / this.height, nearZ, farZ);\n\n // Apply center of perspective offset\n m[8] = (-offset.x * 2) / this.width;\n m[9] = (offset.y * 2) / this.height;\n\n // @ts-ignore\n mat4.scale(m, m, [1, -1, 1]);\n // @ts-ignore\n mat4.translate(m, m, [0, 0, -this.cameraToCenterDistance]);\n // @ts-ignore\n mat4.rotateX(m, m, this._pitch);\n // @ts-ignore\n mat4.rotateZ(m, m, this.angle);\n // @ts-ignore\n mat4.translate(m, m, [-x, -y, 0]);\n\n // The mercatorMatrix can be used to transform points from mercator coordinates\n // ([0, 0] nw, [1, 1] se) to GL coordinates.\n // @ts-ignore\n this.mercatorMatrix = mat4.scale([], m, [\n this.worldSize,\n this.worldSize,\n this.worldSize,\n ]);\n // scale vertically to meters per pixel (inverse of ground resolution):\n\n // @ts-ignore\n mat4.scale(m, m, [\n 1,\n 1,\n mercatorZfromAltitude(1, this.center.lat) * this.worldSize,\n 1,\n ]);\n // @ts-ignore\n this.projMatrix = m;\n // @ts-ignore\n this.invProjMatrix = mat4.invert([], this.projMatrix);\n\n // Make a second projection matrix that is aligned to a pixel grid for rendering raster tiles.\n // We're rounding the (floating point) x/y values to achieve to avoid rendering raster images to fractional\n // coordinates. Additionally, we adjust by half a pixel in either direction in case that viewport dimension\n // is an odd integer to preserve rendering to the pixel grid. We're rotating this shift based on the angle\n // of the transformation so that 0°, 90°, 180°, and 270° rasters are crisp, and adjust the shift so that\n // it is always <= 0.5 pixels.\n const xShift = (this.width % 2) / 2;\n const yShift = (this.height % 2) / 2;\n const angleCos = Math.cos(this.angle);\n const angleSin = Math.sin(this.angle);\n const dx = x - Math.round(x) + angleCos * xShift + angleSin * yShift;\n const dy = y - Math.round(y) + angleCos * yShift + angleSin * xShift;\n // const alignedM = mat4.clone(m);\n const alignedM = new Float64Array(m);\n // @ts-ignore\n mat4.translate(alignedM, alignedM, [\n dx > 0.5 ? dx - 1 : dx,\n dy > 0.5 ? dy - 1 : dy,\n 0,\n ]);\n // @ts-ignore\n this.alignedProjMatrix = alignedM;\n\n // @ts-ignore\n m = mat4.create();\n // @ts-ignore\n mat4.scale(m, m, [this.width / 2, -this.height / 2, 1]);\n // @ts-ignore\n mat4.translate(m, m, [1, -1, 0]);\n // @ts-ignore\n this.labelPlaneMatrix = m;\n\n // @ts-ignore\n m = mat4.create();\n // @ts-ignore\n mat4.scale(m, m, [1, -1, 1]);\n // @ts-ignore\n mat4.translate(m, m, [-1, -1, 0]);\n // @ts-ignore\n mat4.scale(m, m, [2 / this.width, 2 / this.height, 1]);\n // @ts-ignore\n this.glCoordMatrix = m;\n\n // matrix for conversion from location to screen coordinates\n this.pixelMatrix = mat4.multiply(\n // @ts-ignore\n new Float64Array(16),\n this.labelPlaneMatrix,\n this.projMatrix,\n );\n\n // inverse matrix for conversion from screen coordinaes to location\n // @ts-ignore\n m = mat4.invert(new Float64Array(16), this.pixelMatrix);\n if (!m) {\n throw new Error('failed to invert matrix');\n }\n // @ts-ignore\n this.pixelMatrixInverse = m;\n\n this.posMatrixCache = {};\n this.alignedPosMatrixCache = {};\n }\n}\n"],"file":"transform.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"IHandler.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/handler/blockable_map_event.ts"],"names":["BlockableMapEventHandler","map","delayContextMenu","contextMenuEvent","e","emit","type","MapMouseEvent","listeners","preventDefault"],"mappings":";;;;;;;;;;;;;;;AAIA;;IACqBA,wB;AAKnB,oCAAYC,GAAZ,EAAiC;AAAA;AAAA;AAAA;AAAA;AAC/B,SAAKA,GAAL,GAAWA,GAAX;AACD;;;;WAED,iBAAe;AACb,WAAKC,gBAAL,GAAwB,KAAxB;AAEA,aAAO,KAAKC,gBAAZ;AACD;;;WAED,mBAAiBC,CAAjB,EAAgC;AAE9B,WAAKH,GAAL,CAASI,IAAT,CAAcD,CAAC,CAACE,IAAhB,EAAsB,IAAIC,qBAAJ,CAAkBH,CAAC,CAACE,IAApB,EAA0B,KAAKL,GAA/B,EAAoCG,CAApC,CAAtB;AACD;;;WAED,qBAAmB;AACjB,WAAKF,gBAAL,GAAwB,IAAxB;AACD;;;WAED,mBAAiB;AACf,WAAKA,gBAAL,GAAwB,KAAxB;;AACA,UAAI,KAAKC,gBAAT,EAA2B;AACzB,aAAKF,GAAL,CAASI,IAAT,CACE,aADF,EAEE,IAAIE,qBAAJ,CAAkB,aAAlB,EAAiC,KAAKN,GAAtC,EAA2C,KAAKE,gBAAhD,CAFF;AAKA,eAAO,KAAKA,gBAAZ;AACD;AACF;;;WACD,qBAAmBC,CAAnB,EAAkC;AAChC,UAAI,KAAKF,gBAAT,EAA2B;AAEzB,aAAKC,gBAAL,GAAwBC,CAAxB;AACD,OAHD,MAGO;AAEL,aAAKH,GAAL,CAASI,IAAT,CAAcD,CAAC,CAACE,IAAhB,EAAsB,IAAIC,qBAAJ,CAAkBH,CAAC,CAACE,IAApB,EAA0B,KAAKL,GAA/B,EAAoCG,CAApC,CAAtB;AACD;;AAGD,UAAI,KAAKH,GAAL,CAASO,SAAT,CAAmB,aAAnB,CAAJ,EAAuC;AACrCJ,QAAAA,CAAC,CAACK,cAAF;AACD;AACF;;;WAED,qBAAmB;AACjB,aAAO,IAAP;AACD;;;WAED,oBAAkB;AAChB,aAAO,KAAP;AACD;;;WACD,kBAAgB;AACd,aAAO,IAAP;AACD;;;WACD,mBAAiB;AACf,aAAO,KAAP;AACD","sourcesContent":["// @ts-ignore\nimport { EarthMap } from '../earthmap';\nimport Point from '../geo/point';\nimport { Map } from '../map';\nimport { MapMouseEvent, MapTouchEvent, MapWheelEvent } from './events';\nexport default class BlockableMapEventHandler {\n private map: Map | EarthMap;\n private delayContextMenu: boolean;\n private contextMenuEvent: MouseEvent;\n\n constructor(map: Map | EarthMap) {\n this.map = map;\n }\n\n public reset() {\n this.delayContextMenu = false;\n // @ts-ignore\n delete this.contextMenuEvent;\n }\n\n public mousemove(e: MouseEvent) {\n // mousemove map events should not be fired when interaction handlers (pan, rotate, etc) are active\n this.map.emit(e.type, new MapMouseEvent(e.type, this.map, e));\n }\n\n public mousedown() {\n this.delayContextMenu = true;\n }\n\n public mouseup() {\n this.delayContextMenu = false;\n if (this.contextMenuEvent) {\n this.map.emit(\n 'contextmenu',\n new MapMouseEvent('contextmenu', this.map, this.contextMenuEvent),\n );\n // @ts-ignore\n delete this.contextMenuEvent;\n }\n }\n public contextmenu(e: MouseEvent) {\n if (this.delayContextMenu) {\n // Mac: contextmenu fired on mousedown; we save it until mouseup for consistency's sake\n this.contextMenuEvent = e;\n } else {\n // Windows: contextmenu fired on mouseup, so fire event now\n this.map.emit(e.type, new MapMouseEvent(e.type, this.map, e));\n }\n\n // prevent browser context menu when necessary\n if (this.map.listeners('contextmenu')) {\n e.preventDefault();\n }\n }\n\n public isEnabled() {\n return true;\n }\n\n public isActive() {\n return false;\n }\n public enable() {\n return true;\n }\n public disable() {\n return false;\n }\n}\n"],"file":"blockable_map_event.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/handler/box_zoom.ts"],"names":["BoxZoomHandler","map","options","el","getCanvasContainer","container","getContainer","clickTolerance","enabled","active","isEnabled","e","point","shiftKey","button","DOM","disableDrag","startPos","lastPos","pos","equals","box","dist","p0","create","classList","add","fireEvent","minX","Math","min","x","maxX","max","minY","y","maxY","setTransform","style","width","height","p1","reset","suppressClick","emit","Event","originalEvent","cameraAnimation","fitScreenCoordinates","getBearing","linear","keyCode","remove","enableDrag","type"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { EarthMap } from '../earthmap';\nimport Point from '../geo/point';\nimport { Map } from '../map';\nimport DOM from '../utils/dom';\nimport { Event } from './events/event';\n\n/**\n * The `BoxZoomHandler` allows the user to zoom the map to fit within a bounding box.\n * The bounding box is defined by clicking and holding `shift` while dragging the cursor.\n */\nclass BoxZoomHandler {\n private map: Map | EarthMap;\n private el: HTMLElement;\n private container: HTMLElement;\n private enabled: boolean;\n private active: boolean;\n private startPos: Point;\n private lastPos: Point;\n private box: HTMLElement | null;\n private clickTolerance: number;\n\n /**\n * @private\n */\n constructor(\n map: Map | EarthMap,\n options: {\n clickTolerance: number;\n },\n ) {\n this.map = map;\n this.el = map.getCanvasContainer();\n this.container = map.getContainer();\n this.clickTolerance = options.clickTolerance || 1;\n }\n\n /**\n * Returns a Boolean indicating whether the \"box zoom\" interaction is enabled.\n *\n * @returns {boolean} `true` if the \"box zoom\" interaction is enabled.\n */\n public isEnabled() {\n return !!this.enabled;\n }\n\n /**\n * Returns a Boolean indicating whether the \"box zoom\" interaction is active, i.e. currently being used.\n *\n * @returns {boolean} `true` if the \"box zoom\" interaction is active.\n */\n public isActive() {\n return !!this.active;\n }\n\n /**\n * Enables the \"box zoom\" interaction.\n *\n * @example\n * map.boxZoom.enable();\n */\n public enable() {\n if (this.isEnabled()) {\n return;\n }\n this.enabled = true;\n }\n\n /**\n * Disables the \"box zoom\" interaction.\n *\n * @example\n * map.boxZoom.disable();\n */\n public disable() {\n if (!this.isEnabled()) {\n return;\n }\n this.enabled = false;\n }\n\n public mousedown(e: MouseEvent, point: Point) {\n if (!this.isEnabled()) {\n return;\n }\n if (!(e.shiftKey && e.button === 0)) {\n return;\n }\n\n DOM.disableDrag();\n this.startPos = this.lastPos = point;\n this.active = true;\n }\n\n public mousemoveWindow(e: MouseEvent, point: Point) {\n if (!this.active) {\n return;\n }\n\n const pos = point;\n\n if (\n this.lastPos.equals(pos) ||\n (!this.box && pos.dist(this.startPos) < this.clickTolerance)\n ) {\n return;\n }\n\n const p0 = this.startPos;\n this.lastPos = pos;\n\n if (!this.box) {\n this.box = DOM.create('div', 'l7-boxzoom', this.container);\n this.container.classList.add('l7-crosshair');\n this.fireEvent('boxzoomstart', e);\n }\n const minX = Math.min(p0.x, pos.x);\n const maxX = Math.max(p0.x, pos.x);\n const minY = Math.min(p0.y, pos.y);\n const maxY = Math.max(p0.y, pos.y);\n\n DOM.setTransform(this.box, `translate(${minX}px,${minY}px)`);\n if (this.box) {\n this.box.style.width = `${maxX - minX}px`;\n this.box.style.height = `${maxY - minY}px`;\n }\n }\n\n public mouseupWindow(e: MouseEvent, point: Point) {\n if (!this.active) {\n return;\n }\n\n if (e.button !== 0) {\n return;\n }\n\n const p0 = this.startPos;\n const p1 = point;\n\n this.reset();\n\n DOM.suppressClick();\n\n if (p0.x === p1.x && p0.y === p1.y) {\n this.fireEvent('boxzoomcancel', e);\n } else {\n this.map.emit(\n 'boxzoomend',\n new Event('boxzoomend', { originalEvent: e }),\n );\n return {\n cameraAnimation: (map: Map) =>\n map.fitScreenCoordinates(p0, p1, this.map.getBearing(), {\n linear: true,\n }),\n };\n }\n }\n\n public keydown(e: KeyboardEvent) {\n if (!this.active) {\n return;\n }\n\n if (e.keyCode === 27) {\n this.reset();\n this.fireEvent('boxzoomcancel', e);\n }\n }\n\n public reset() {\n this.active = false;\n\n this.container.classList.remove('l7-crosshair');\n\n if (this.box) {\n DOM.remove(this.box);\n this.box = null;\n }\n\n DOM.enableDrag();\n // @ts-ignore\n delete this.startPos;\n // @ts-ignore\n delete this.lastPos;\n }\n\n public fireEvent(type: string, e: any) {\n return this.map.emit(type, new Event(type, { originalEvent: e }));\n }\n}\n\nexport default BoxZoomHandler;\n"],"file":"box_zoom.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/handler/click_zoom.ts"],"names":["ClickZoomHandler","reset","active","e","point","preventDefault","cameraAnimation","map","easeTo","duration","zoom","getZoom","shiftKey","around","unproject","originalEvent","enabled"],"mappings":";;;;;;;;;;;;;;;IAKqBA,gB;AAInB,8BAAc;AAAA;AAAA;AAAA;AACZ,SAAKC,KAAL;AACD;;;;WAED,iBAAe;AACb,WAAKC,MAAL,GAAc,KAAd;AACD;;;WAED,kBAAgBC,CAAhB,EAA+BC,KAA/B,EAA6C;AAC3CD,MAAAA,CAAC,CAACE,cAAF;AACA,aAAO;AACLC,QAAAA,eAAe,EAAE,yBAACC,GAAD,EAAyB;AACxCA,UAAAA,GAAG,CAACC,MAAJ,CACE;AACEC,YAAAA,QAAQ,EAAE,GADZ;AAEEC,YAAAA,IAAI,EAAEH,GAAG,CAACI,OAAJ,MAAiBR,CAAC,CAACS,QAAF,GAAa,CAAC,CAAd,GAAkB,CAAnC,CAFR;AAGEC,YAAAA,MAAM,EAAEN,GAAG,CAACO,SAAJ,CAAcV,KAAd;AAHV,WADF,EAME;AAAEW,YAAAA,aAAa,EAAEZ;AAAjB,WANF;AAQD;AAVI,OAAP;AAYD;;;WAED,kBAAgB;AACd,WAAKa,OAAL,GAAe,IAAf;AACD;;;WACD,mBAAiB;AACf,WAAKA,OAAL,GAAe,KAAf;AACA,WAAKf,KAAL;AACD;;;WAED,qBAAmB;AACjB,aAAO,KAAKe,OAAZ;AACD;;;WAED,oBAAkB;AAChB,aAAO,KAAKd,MAAZ;AACD","sourcesContent":["// @ts-ignore\nimport { EarthMap } from '../earthmap';\nimport Point from '../geo/point';\nimport { Map } from '../map';\n\nexport default class ClickZoomHandler {\n private enabled: boolean;\n private active: boolean;\n\n constructor() {\n this.reset();\n }\n\n public reset() {\n this.active = false;\n }\n\n public dblclick(e: MouseEvent, point: Point) {\n e.preventDefault();\n return {\n cameraAnimation: (map: Map | EarthMap) => {\n map.easeTo(\n {\n duration: 300,\n zoom: map.getZoom() + (e.shiftKey ? -1 : 1),\n around: map.unproject(point),\n },\n { originalEvent: e },\n );\n },\n };\n }\n\n public enable() {\n this.enabled = true;\n }\n public disable() {\n this.enabled = false;\n this.reset();\n }\n\n public isEnabled() {\n return this.enabled;\n }\n\n public isActive() {\n return this.active;\n }\n}\n"],"file":"click_zoom.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/events/event.ts"],"names":["Event","type","data"],"mappings":";;;;;;;;;;;;;;;AACA;;IACaA,K,8BAEX,eAAYC,IAAZ,EAA0C;AAAA,MAAhBC,IAAgB,uEAAJ,EAAI;AAAA;AAAA;AACxC,sBAAM,IAAN,EAAYA,IAAZ;AACA,OAAKD,IAAL,GAAYA,IAAZ;AACD,C","sourcesContent":["// tslint:disable-next-line:no-submodule-imports\nimport merge from 'lodash/merge';\nexport class Event {\n public type: string;\n constructor(type: string, data: any = {}) {\n merge(this, data);\n this.type = type;\n }\n}\n"],"file":"event.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/events/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA","sourcesContent":["import MapMouseEvent from './map_mouse_event';\nimport MapTouchEvent from './map_touch_event';\nimport MapWheelEvent, { IMapBoxZoomEvent } from './map_wheel_event';\n\nexport { MapMouseEvent, MapTouchEvent, MapWheelEvent };\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/events/map_mouse_event.ts"],"names":["MapMouseEvent","type","map","originalEvent","data","point","DOM","mousePos","getCanvasContainer","lngLat","unproject","defaultPrevented","target","Event"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA;;AAKA;;AACA;;;;;;IACqBA,a;;;;;AA2CnB,yBACEC,IADF,EAEEC,GAFF,EAGEC,aAHF,EAKE;AAAA;;AAAA,QADAC,IACA,uEADY,EACZ;AAAA;;AACA,QAAMC,KAAK,GAAGC,aAAIC,QAAJ,CAAaL,GAAG,CAACM,kBAAJ,EAAb,EAAuCL,aAAvC,CAAd;;AACA,QAAMM,MAAM,GAAGP,GAAG,CAACQ,SAAJ,CAAcL,KAAd,CAAf;AACA,8BAAMJ,IAAN,EAAY,oBAAM;AAAEI,MAAAA,KAAK,EAALA,KAAF;AAASI,MAAAA,MAAM,EAANA,MAAT;AAAiBN,MAAAA,aAAa,EAAbA;AAAjB,KAAN,EAAwCC,IAAxC,CAAZ;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,UAAKO,gBAAL,GAAwB,KAAxB;AACA,UAAKC,MAAL,GAAcV,GAAd;AALA;AAMD;;;;WACD,0BAAwB;AACtB,WAAKS,gBAAL,GAAwB,IAAxB;AACD;;;EAzDwCE,Y","sourcesContent":["// @ts-ignore\n// tslint:disable-next-line:no-submodule-imports\nimport merge from 'lodash/merge';\nimport { EarthMap } from '../../earthmap';\nimport LngLat from '../../geo/lng_lat';\nimport Point from '../../geo/point';\nimport { Map } from '../../map';\nimport DOM from '../../utils/dom';\nimport { Event } from './event';\nexport default class MapMouseEvent extends Event {\n /**\n * `true` if `preventDefault` has been called.\n * @private\n */\n\n public type:\n | 'mousedown'\n | 'mouseup'\n | 'click'\n | 'dblclick'\n | 'mousemove'\n | 'mouseover'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseout'\n | 'contextmenu';\n\n /**\n * The `Map` object that fired the event.\n */\n public target: Map | EarthMap;\n\n /**\n * The DOM event which caused the map event.\n */\n public originalEvent: MouseEvent;\n\n /**\n * The pixel coordinates of the mouse cursor, relative to the map and measured from the top left corner.\n */\n public point: Point;\n\n /**\n * The geographic location on the map of the mouse cursor.\n */\n public lngLat: LngLat;\n\n public defaultPrevented: boolean;\n\n /**\n * @private\n */\n constructor(\n type: string,\n map: Map | EarthMap,\n originalEvent: MouseEvent,\n data: any = {},\n ) {\n const point = DOM.mousePos(map.getCanvasContainer(), originalEvent);\n const lngLat = map.unproject(point);\n super(type, merge({ point, lngLat, originalEvent }, data));\n this.defaultPrevented = false;\n this.target = map;\n }\n public preventDefault() {\n this.defaultPrevented = true;\n }\n}\n"],"file":"map_mouse_event.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/events/map_touch_event.ts"],"names":["MapTouchEvent","type","map","originalEvent","touches","changedTouches","points","DOM","touchPos","getCanvasContainer","lngLats","t","unproject","point","reduce","prev","curr","i","arr","add","div","length","Point","lngLat","defaultPrevented","Event"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;;AAEA;;AACA;;;;;;IACqBA,a;;;;;AAiDnB,yBAAYC,IAAZ,EAA0BC,GAA1B,EAA+CC,aAA/C,EAA0E;AAAA;;AAAA;AACxE,QAAMC,OAAO,GACXH,IAAI,KAAK,UAAT,GACIE,aAAa,CAACE,cADlB,GAEIF,aAAa,CAACC,OAHpB;;AAIA,QAAME,MAAM,GAAGC,aAAIC,QAAJ,CAAaN,GAAG,CAACO,kBAAJ,EAAb,EAAuCL,OAAvC,CAAf;;AACA,QAAMM,OAAO,GAAGJ,MAAM,CAACJ,GAAP,CAAW,UAACS,CAAD;AAAA,aAAcT,GAAG,CAACU,SAAJ,CAAcD,CAAd,CAAd;AAAA,KAAX,CAAhB;AACA,QAAME,KAAK,GAAGP,MAAM,CAACQ,MAAP,CACZ,UAACC,IAAD,EAAcC,IAAd,EAA2BC,CAA3B,EAAsCC,GAAtC,EAAuD;AACrD,aAAOH,IAAI,CAACI,GAAL,CAASH,IAAI,CAACI,GAAL,CAASF,GAAG,CAACG,MAAb,CAAT,CAAP;AACD,KAHW,EAIZ,IAAIC,cAAJ,CAAU,CAAV,EAAa,CAAb,CAJY,CAAd;AAMA,QAAMC,MAAM,GAAGrB,GAAG,CAACU,SAAJ,CAAcC,KAAd,CAAf;AACA,8BAAMZ,IAAN,EAAY;AAAEK,MAAAA,MAAM,EAANA,MAAF;AAAUO,MAAAA,KAAK,EAALA,KAAV;AAAiBH,MAAAA,OAAO,EAAPA,OAAjB;AAA0Ba,MAAAA,MAAM,EAANA,MAA1B;AAAkCpB,MAAAA,aAAa,EAAbA;AAAlC,KAAZ;AAdwE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAexE,UAAKqB,gBAAL,GAAwB,KAAxB;AAfwE;AAgBzE;;;;WAWD,0BAAyB;AACvB,WAAKA,gBAAL,GAAwB,IAAxB;AACD;;;EA9EwCC,Y","sourcesContent":["// @ts-ignore\nimport { EarthMap } from '../../earthmap';\nimport LngLat from '../../geo/lng_lat';\nimport Point from '../../geo/point';\nimport { Map } from '../../map';\nimport DOM from '../../utils/dom';\nimport { Event } from './event';\nexport default class MapTouchEvent extends Event {\n /**\n * The event type.\n */\n public type: 'touchstart' | 'touchend' | 'touchcancel';\n\n /**\n * The `Map` object that fired the event.\n */\n public target: Map | EarthMap;\n\n /**\n * The DOM event which caused the map event.\n */\n public originalEvent: TouchEvent;\n\n /**\n * The geographic location on the map of the center of the touch event points.\n */\n public lngLat: LngLat;\n\n /**\n * The pixel coordinates of the center of the touch event points, relative to the map and measured from the top left\n * corner.\n */\n public point: Point;\n\n /**\n * The array of pixel coordinates corresponding to a\n * [touch event's `touches`](https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/touches) property.\n */\n public points: Point[];\n\n /**\n * The geographical locations on the map corresponding to a\n * [touch event's `touches`](https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/touches) property.\n */\n public lngLats: LngLat[];\n\n /**\n * `true` if `preventDefault` has been called.\n * @private\n */\n\n public defaultPrevented: boolean;\n\n /**\n * @private\n */\n constructor(type: string, map: Map | EarthMap, originalEvent: TouchEvent) {\n const touches =\n type === 'touchend'\n ? originalEvent.changedTouches\n : originalEvent.touches;\n const points = DOM.touchPos(map.getCanvasContainer(), touches);\n const lngLats = points.map((t: Point) => map.unproject(t));\n const point = points.reduce(\n (prev: Point, curr: Point, i: number, arr: Point[]) => {\n return prev.add(curr.div(arr.length));\n },\n new Point(0, 0),\n );\n const lngLat = map.unproject(point);\n super(type, { points, point, lngLats, lngLat, originalEvent });\n this.defaultPrevented = false;\n }\n\n /**\n * Prevents subsequent default processing of the event by the map.\n *\n * Calling this method will prevent the following default map behaviors:\n *\n * * On `touchstart` events, the behavior of {@link DragPanHandler}\n * * On `touchstart` events, the behavior of {@link TouchZoomRotateHandler}\n *\n */\n private preventDefault() {\n this.defaultPrevented = true;\n }\n}\n"],"file":"map_touch_event.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/events/map_wheel_event.ts"],"names":["MapWheelEvent","type","map","originalEvent","defaultPrevented","Event"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA;;;;;;IAOqBA,a;;;;;AAqBnB,yBAAYC,IAAZ,EAA0BC,GAA1B,EAA+CC,aAA/C,EAA0E;AAAA;;AAAA;AACxE,8BAAMF,IAAN,EAAY;AAAEE,MAAAA,aAAa,EAAbA;AAAF,KAAZ;AADwE;AAAA;AAAA;AAAA;AAExE,UAAKC,gBAAL,GAAwB,KAAxB;AAFwE;AAGzE;;;;WAOD,0BAAyB;AACvB,WAAKA,gBAAL,GAAwB,IAAxB;AACD;;;EAjCwCC,Y","sourcesContent":["import { EarthMap } from '../../earthmap';\nimport { Map } from '../../map';\nimport { Event } from './event';\n\nexport interface IMapBoxZoomEvent {\n type: 'boxzoomstart' | 'boxzoomend' | 'boxzoomcancel';\n target: Map | EarthMap;\n originalEvent: MouseEvent;\n}\nexport default class MapWheelEvent extends Event {\n /**\n * The event type.\n */\n public type: 'wheel';\n\n /**\n * The DOM event which caused the map event.\n */\n public originalEvent: WheelEvent;\n\n public defaultPrevented: boolean;\n\n /**\n * The `Map` object that fired the event.\n */\n public target: Map | EarthMap;\n\n /**\n * @private\n */\n constructor(type: string, map: Map | EarthMap, originalEvent: WheelEvent) {\n super(type, { originalEvent });\n this.defaultPrevented = false;\n }\n\n /**\n * Prevents subsequent default processing of the event by the map.\n *\n * Calling this method will prevent the the behavior of {@link ScrollZoomHandler}.\n */\n private preventDefault() {\n this.defaultPrevented = true;\n }\n}\n"],"file":"map_wheel_event.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/events/render_event.ts"],"names":["RenderFrameEvent","Event"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;IACqBA,gB;;;;;;;;;;;;;;;uFACU,a;;;;;;EADeC,Y","sourcesContent":["import { Event } from './event';\nexport default class RenderFrameEvent extends Event {\n public type: 'renderFrame' = 'renderFrame';\n public timeStamp: number;\n}\n"],"file":"render_event.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/handler/handler_inertia.ts"],"names":["defaultInertiaOptions","linearity","easing","defaultPanInertiaOptions","deceleration","maxSpeed","defaultZoomInertiaOptions","defaultBearingInertiaOptions","defaultPitchInertiaOptions","HandlerInertia","map","clear","inertiaBuffer","settings","drainInertiaBuffer","push","time","inertia","nowTime","cutoff","length","shift","panInertiaOptions","deltas","zoom","bearing","pitch","pan","Point","pinchAround","undefined","around","zoomDelta","bearingDelta","pitchDelta","panDelta","_add","lastEntry","duration","easeOptions","mag","result","calculateEasing","offset","mult","amount","center","transform","extendDuration","last","unproject","getCenter","noMoveStart","inertiaDuration","inertiaOptions","speed","Math","abs"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport Point from '../geo/point';\n\n// tslint:disable-next-line:no-submodule-imports\nimport merge from 'lodash/merge';\nimport { EarthMap } from '../earthmap';\nimport { Map } from '../map';\nimport { bezier, clamp, now } from '../util';\nimport { IDragPanOptions } from './shim/drag_pan';\n\nconst defaultInertiaOptions = {\n linearity: 0.3,\n easing: bezier(0, 0, 0.3, 1),\n};\n\nconst defaultPanInertiaOptions = merge(\n {\n deceleration: 2500,\n maxSpeed: 1400,\n },\n defaultInertiaOptions,\n);\n\nconst defaultZoomInertiaOptions = merge(\n {\n deceleration: 20,\n maxSpeed: 1400,\n },\n defaultInertiaOptions,\n);\n\nconst defaultBearingInertiaOptions = merge(\n {\n deceleration: 1000,\n maxSpeed: 360,\n },\n defaultInertiaOptions,\n);\n\nconst defaultPitchInertiaOptions = merge(\n {\n deceleration: 1000,\n maxSpeed: 90,\n },\n defaultInertiaOptions,\n);\n\nexport interface IInertiaOptions {\n linearity: number;\n easing: (t: number) => number;\n deceleration: number;\n maxSpeed: number;\n}\n\nexport type InputEvent = MouseEvent | TouchEvent | KeyboardEvent | WheelEvent;\n\nexport default class HandlerInertia {\n private map: Map | EarthMap;\n private inertiaBuffer: Array<{\n time: number;\n settings: { [key: string]: any };\n }>;\n\n constructor(map: Map | EarthMap) {\n this.map = map;\n this.clear();\n }\n\n public clear() {\n this.inertiaBuffer = [];\n }\n\n public record(settings: any) {\n this.drainInertiaBuffer();\n this.inertiaBuffer.push({ time: now(), settings });\n }\n\n public drainInertiaBuffer() {\n const inertia = this.inertiaBuffer;\n const nowTime = now();\n const cutoff = 160; // msec\n\n while (inertia.length > 0 && nowTime - inertia[0].time > cutoff) {\n inertia.shift();\n }\n }\n\n public onMoveEnd(panInertiaOptions?: IDragPanOptions) {\n this.drainInertiaBuffer();\n if (this.inertiaBuffer.length < 2) {\n return;\n }\n\n const deltas = {\n zoom: 0,\n bearing: 0,\n pitch: 0,\n pan: new Point(0, 0),\n pinchAround: undefined,\n around: undefined,\n };\n\n for (const { settings } of this.inertiaBuffer) {\n deltas.zoom += settings.zoomDelta || 0;\n deltas.bearing += settings.bearingDelta || 0;\n deltas.pitch += settings.pitchDelta || 0;\n if (settings.panDelta) {\n deltas.pan._add(settings.panDelta);\n }\n if (settings.around) {\n deltas.around = settings.around;\n }\n if (settings.pinchAround) {\n deltas.pinchAround = settings.pinchAround;\n }\n }\n\n const lastEntry = this.inertiaBuffer[this.inertiaBuffer.length - 1];\n const duration = lastEntry.time - this.inertiaBuffer[0].time;\n\n const easeOptions: { [key: string]: any } = {};\n\n if (deltas.pan.mag()) {\n const result = calculateEasing(\n deltas.pan.mag(),\n duration,\n merge({}, defaultPanInertiaOptions, panInertiaOptions || {}),\n );\n easeOptions.offset = deltas.pan.mult(result.amount / deltas.pan.mag());\n easeOptions.center = this.map.transform.center;\n extendDuration(easeOptions, result);\n }\n\n if (deltas.zoom) {\n const result = calculateEasing(\n deltas.zoom,\n duration,\n defaultZoomInertiaOptions,\n );\n easeOptions.zoom = this.map.transform.zoom + result.amount;\n extendDuration(easeOptions, result);\n }\n\n if (deltas.bearing) {\n const result = calculateEasing(\n deltas.bearing,\n duration,\n defaultBearingInertiaOptions,\n );\n easeOptions.bearing =\n this.map.transform.bearing + clamp(result.amount, -179, 179);\n extendDuration(easeOptions, result);\n }\n\n if (deltas.pitch) {\n const result = calculateEasing(\n deltas.pitch,\n duration,\n defaultPitchInertiaOptions,\n );\n easeOptions.pitch = this.map.transform.pitch + result.amount;\n extendDuration(easeOptions, result);\n }\n\n if (easeOptions.zoom || easeOptions.bearing) {\n const last =\n deltas.pinchAround === undefined ? deltas.around : deltas.pinchAround;\n easeOptions.around = last\n ? this.map.unproject(last)\n : this.map.getCenter();\n }\n\n this.clear();\n return merge(easeOptions, {\n noMoveStart: true,\n });\n }\n}\n\n// Unfortunately zoom, bearing, etc can't have different durations and easings so\n// we need to choose one. We use the longest duration and it's corresponding easing.\nfunction extendDuration(easeOptions: any, result: any) {\n if (!easeOptions.duration || easeOptions.duration < result.duration) {\n easeOptions.duration = result.duration;\n easeOptions.easing = result.easing;\n }\n}\n\nfunction calculateEasing(\n amount: number,\n inertiaDuration: number,\n inertiaOptions: IInertiaOptions,\n) {\n const { maxSpeed, linearity, deceleration } = inertiaOptions;\n const speed = clamp(\n (amount * linearity) / (inertiaDuration / 1000),\n -maxSpeed,\n maxSpeed,\n );\n const duration = Math.abs(speed) / (deceleration * linearity);\n return {\n easing: inertiaOptions.easing,\n duration: duration * 1000,\n amount: speed * (duration / 2),\n };\n}\n"],"file":"handler_inertia.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/handler/handler_manager.ts"],"names":["isMoving","p","zoom","drag","pitch","rotate","hasChange","result","panDelta","mag","zoomDelta","bearingDelta","pitchDelta","HandlerManager","map","options","e","handleEvent","type","eventName","stop","updatingCamera","inputEvent","undefined","mergedIHandlerResult","needsRenderFrame","eventsInProgress","activeHandlers","mapTouches","touches","getMapTouches","points","DOM","touchPos","el","mousePos","handlers","handlerName","handler","allowed","isEnabled","data","blockedByActive","reset","handerName","mergeIHandlerResult","triggerRenderFrame","isActive","deactivatedHandlers","name","previousActiveHandlers","Object","keys","length","changes","push","cameraAnimation","inertia","clear","fireEvents","getCanvasContainer","handlersById","HandlerInertia","bearingSnap","rotateEnabled","pitchEnabled","addDefaultHandlers","listeners","isMini","passive","window","document","capture","target","listenerOptions","addEventListener","handleWindowEvent","$window","removeEventListener","scrollZoom","isZooming","Boolean","HandlerResult","eventData","originalEvent","frameId","requestRenderFrame","timeStamp","RenderFrameEvent","applyChanges","add","MapEventHandler","boxZoom","BoxZoomHandler","tapZoom","TapZoomHandler","clickZoom","ClickZoomHandler","doubleClickZoom","DoubleClickZoomHandler","tapDragZoom","TapDragZoomHandler","touchPitch","TouchPitchHandler","mouseRotate","MouseRotateHandler","mousePitch","MousePitchHandler","dragRotate","DragRotateHandler","mousePan","MousePanHandler","touchPan","TouchPanHandler","dragPan","DragPanHandler","touchRotate","TouchRotateHandler","touchZoom","TouchZoomHandler","touchZoomRotate","TouchZoomRotateHandler","ScrollZoomHandler","keyboard","KeyboardHandler","BlockableMapEventHandler","interactive","enable","myName","indexOf","t","contains","combined","combinedEventsInProgress","combinedDeactivatedHandlers","change","Point","_add","around","pinchAround","noInertia","updateMapTransform","combinedResult","tr","transform","centerPoint","loc","pointLocation","sub","bearing","setLocationAtPoint","update","record","newEventsInProgress","wasMoving","nowMoving","startEvents","fireEvent","bearingChanged","endEvents","originalEndEvent","stillMoving","inertialEase","onMoveEnd","inertiaOptions","shouldSnapToNorth","getBearing","easeTo","emit","Event","resetNorth"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA;;AAGA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AASA,IAAMA,SAAQ,GAAG,SAAXA,QAAW,CAACC,CAAD;AAAA,SAAYA,CAAC,CAACC,IAAF,IAAUD,CAAC,CAACE,IAAZ,IAAoBF,CAAC,CAACG,KAAtB,IAA+BH,CAAC,CAACI,MAA7C;AAAA,CAAjB;;AAEA,SAASC,SAAT,CAAmBC,MAAnB,EAA2C;AACzC,SACGA,MAAM,CAACC,QAAP,IAAmBD,MAAM,CAACC,QAAP,CAAgBC,GAAhB,EAApB,IACAF,MAAM,CAACG,SADP,IAEAH,MAAM,CAACI,YAFP,IAGAJ,MAAM,CAACK,UAJT;AAMD;;IAoBKC,c;AAuBJ,0BAAYC,GAAZ,EAAiCC,OAAjC,EAA2D;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6DAsJhC,UAACC,CAAD,EAAmB;AAC5C,MAAA,KAAI,CAACC,WAAL,CAAiBD,CAAjB,YAAuBA,CAAC,CAACE,IAAzB;AACD,KAxJ0D;AAAA,uDA0JtC,UACnBF,CADmB,EAEnBG,SAFmB,EAGhB;AACH,UAAIH,CAAC,CAACE,IAAF,KAAW,MAAf,EAAuB;AACrB,QAAA,KAAI,CAACE,IAAL;;AACA;AACD;;AACD,MAAA,KAAI,CAACC,cAAL,GAAsB,IAAtB;AACA,UAAMC,UAAU,GAAGN,CAAC,CAACE,IAAF,KAAW,aAAX,GAA2BK,SAA3B,GAAwCP,CAA3D;AAOA,UAAMQ,oBAAoC,GAAG;AAAEC,QAAAA,gBAAgB,EAAE;AAApB,OAA7C;AACA,UAAMC,gBAAwC,GAAG,EAAjD;AACA,UAAMC,cAAsC,GAAG,EAA/C;AAEA,UAAMC,UAAU,GAAGZ,CAAC,CAACa,OAAF,GAEf,KAAI,CAACC,aAAL,CAAmBd,CAAC,CAACa,OAArB,CAFe,GAGfN,SAHJ;AAIA,UAAMQ,MAAM,GAAGH,UAAU,GACrBI,aAAIC,QAAJ,CAAa,KAAI,CAACC,EAAlB,EAAsBN,UAAtB,CADqB,GAErBI,aAAIG,QAAJ,CAAa,KAAI,CAACD,EAAlB,EAAsBlB,CAAtB,CAFJ;;AArBG,iDAyB6C,KAAI,CAACoB,QAzBlD;AAAA;;AAAA;AAyBH,4DAA+D;AAAA;AAAA,cAAlDC,WAAkD,eAAlDA,WAAkD;AAAA,cAArCC,OAAqC,eAArCA,OAAqC;AAAA,cAA5BC,OAA4B,eAA5BA,OAA4B;;AAC7D,cAAI,CAACD,OAAO,CAACE,SAAR,EAAL,EAA0B;AACxB;AACD;;AACD,cAAIC,IAAoB,SAAxB;;AACA,cAAI,KAAI,CAACC,eAAL,CAAqBf,cAArB,EAAqCY,OAArC,EAA8CF,WAA9C,CAAJ,EAAgE;AAC9DC,YAAAA,OAAO,CAACK,KAAR;AACD,WAFD,MAEO;AACL,gBAAMC,UAAU,GAAGzB,SAAS,IAAIH,CAAC,CAACE,IAAlC;;AAEA,gBAAIoB,OAAO,IAAIA,OAAO,CAACM,UAAD,CAAtB,EAAoC;AAElCH,cAAAA,IAAI,GAAGH,OAAO,CAACM,UAAD,CAAP,CAAoB5B,CAApB,EAAuBe,MAAvB,EAA+BH,UAA/B,CAAP;;AACA,cAAA,KAAI,CAACiB,mBAAL,CACErB,oBADF,EAEEE,gBAFF,EAGEe,IAHF,EAIEJ,WAJF,EAKEf,UALF;;AAOA,kBAAImB,IAAI,IAAIA,IAAI,CAAChB,gBAAjB,EAAmC;AACjC,gBAAA,KAAI,CAACqB,kBAAL;AACD;AACF;AACF;;AAED,cAAIL,IAAI,IAAIH,OAAO,CAACS,QAAR,EAAZ,EAAgC;AAC9BpB,YAAAA,cAAc,CAACU,WAAD,CAAd,GAA8BC,OAA9B;AACD;AACF;AAtDE;AAAA;AAAA;AAAA;AAAA;;AAwDH,UAAMU,mBAA2C,GAAG,EAApD;;AACA,WAAK,IAAMC,IAAX,IAAmB,KAAI,CAACC,sBAAxB,EAAgD;AAC9C,YAAI,CAACvB,cAAc,CAACsB,IAAD,CAAnB,EAA2B;AACzBD,UAAAA,mBAAmB,CAACC,IAAD,CAAnB,GAA4B3B,UAA5B;AACD;AACF;;AACD,MAAA,KAAI,CAAC4B,sBAAL,GAA8BvB,cAA9B;;AACA,UACEwB,MAAM,CAACC,IAAP,CAAYJ,mBAAZ,EAAiCK,MAAjC,IACA/C,SAAS,CAACkB,oBAAD,CAFX,EAGE;AACA,QAAA,KAAI,CAAC8B,OAAL,CAAaC,IAAb,CAAkB,CAChB/B,oBADgB,EAEhBE,gBAFgB,EAGhBsB,mBAHgB,CAAlB;;AAKA,QAAA,KAAI,CAACF,kBAAL;AACD;;AAED,UAAIK,MAAM,CAACC,IAAP,CAAYzB,cAAZ,EAA4B0B,MAA5B,IAAsC/C,SAAS,CAACkB,oBAAD,CAAnD,EAA2E;AACzE,QAAA,KAAI,CAACV,GAAL,CAASM,IAAT,CAAc,IAAd;AACD;;AAED,MAAA,KAAI,CAACC,cAAL,GAAsB,KAAtB;AAEA,UAAQmC,eAAR,GAA4BhC,oBAA5B,CAAQgC,eAAR;;AACA,UAAIA,eAAJ,EAAqB;AACnB,QAAA,KAAI,CAACC,OAAL,CAAaC,KAAb;;AACA,QAAA,KAAI,CAACC,UAAL,CAAgB,EAAhB,EAAoB,EAApB;;AACA,QAAA,KAAI,CAACL,OAAL,GAAe,EAAf;AACAE,QAAAA,eAAe,CAAC,KAAI,CAAC1C,GAAN,CAAf;AACD;AACF,KArP0D;AACzD,SAAKA,GAAL,GAAWA,GAAX;AACA,SAAKoB,EAAL,GAAU,KAAKpB,GAAL,CAAS8C,kBAAT,EAAV;AACA,SAAKxB,QAAL,GAAgB,EAAhB;AACA,SAAKyB,YAAL,GAAoB,EAApB;AACA,SAAKP,OAAL,GAAe,EAAf;AAEA,SAAKG,OAAL,GAAe,IAAIK,wBAAJ,CAAmBhD,GAAnB,CAAf;AACA,SAAKiD,WAAL,GAAmBhD,OAAO,CAACgD,WAA3B;AACA,SAAKC,aAAL,GAAqBjD,OAAO,CAACiD,aAA7B;AACA,SAAKC,YAAL,GAAoBlD,OAAO,CAACkD,YAA5B;AACA,SAAKf,sBAAL,GAA8B,EAA9B;AAGA,SAAKxB,gBAAL,GAAwB,EAAxB;AAEA,SAAKwC,kBAAL,CAAwBnD,OAAxB;AAEA,QAAMmB,EAAE,GAAG,KAAKA,EAAhB;AACA,SAAKiC,SAAL,GAAiB,EAAjB;;AACA,QAAI,CAACC,eAAL,EAAa;AAEX,WAAKD,SAAL,GAAiB,CAMf,CAACjC,EAAD,EAAK,YAAL,EAAmB;AAAEmC,QAAAA,OAAO,EAAE;AAAX,OAAnB,CANe,EAOf,CAACnC,EAAD,EAAK,WAAL,EAAkB;AAAEmC,QAAAA,OAAO,EAAE;AAAX,OAAlB,CAPe,EAQf,CAACnC,EAAD,EAAK,UAAL,EAAiBX,SAAjB,CARe,EASf,CAACW,EAAD,EAAK,aAAL,EAAoBX,SAApB,CATe,EAWf,CAACW,EAAD,EAAK,WAAL,EAAkBX,SAAlB,CAXe,EAYf,CAACW,EAAD,EAAK,WAAL,EAAkBX,SAAlB,CAZe,EAaf,CAACW,EAAD,EAAK,SAAL,EAAgBX,SAAhB,CAbe,EAqBf,CAAC+C,MAAM,CAACC,QAAR,EAAkB,WAAlB,EAA+B;AAAEC,QAAAA,OAAO,EAAE;AAAX,OAA/B,CArBe,EAuBf,CAACF,MAAM,CAACC,QAAR,EAAkB,SAAlB,EAA6BhD,SAA7B,CAvBe,EAyBf,CAACW,EAAD,EAAK,WAAL,EAAkBX,SAAlB,CAzBe,EA0Bf,CAACW,EAAD,EAAK,UAAL,EAAiBX,SAAjB,CA1Be,EA2Bf,CAACW,EAAD,EAAK,UAAL,EAAiBX,SAAjB,CA3Be,EA4Bf,CAACW,EAAD,EAAK,OAAL,EAAcX,SAAd,CA5Be,EA8Bf,CAACW,EAAD,EAAK,SAAL,EAAgB;AAAEsC,QAAAA,OAAO,EAAE;AAAX,OAAhB,CA9Be,EA+Bf,CAACtC,EAAD,EAAK,OAAL,EAAcX,SAAd,CA/Be,EAiCf,CAACW,EAAD,EAAK,OAAL,EAAc;AAAEmC,QAAAA,OAAO,EAAE;AAAX,OAAd,CAjCe,EAkCf,CAACnC,EAAD,EAAK,aAAL,EAAoBX,SAApB,CAlCe,EAoCf,CAAC+C,MAAD,EAAS,MAAT,EAAiB/C,SAAjB,CApCe,CAAjB;;AAFW,kDAwCmC,KAAK4C,SAxCxC;AAAA;;AAAA;AAwCX,+DAA8D;AAAA;AAAA,cAAlDM,MAAkD;AAAA,cAA1CvD,IAA0C;AAAA,cAApCwD,eAAoC;;AAE5D1C,uBAAI2C,gBAAJ,CACEF,MADF,EAEEvD,IAFF,EAIEuD,MAAM,KAAKH,MAAM,CAACC,QAAlB,GACI,KAAKK,iBADT,GAEI,KAAK3D,WANX,EAOEyD,eAPF;AASD;AAnDU;AAAA;AAAA;AAAA;AAAA;AAoDZ,KApDD,MAoDO;AACLG,uBAAQN,QAAR,CAAiBI,gBAAjB,CACE,YADF,EAEE,UAAC3D,CAAD,EAAY;AACV,QAAA,KAAI,CAACC,WAAL,CAAiBD,CAAjB;AACD,OAJH,EAKE,EALF;;AAOA6D,uBAAQN,QAAR,CAAiBI,gBAAjB,CACE,WADF,EAEE,UAAC3D,CAAD,EAAY;AACV,QAAA,KAAI,CAACC,WAAL,CAAiBD,CAAjB;AACD,OAJH,EAKE,EALF;;AAOA6D,uBAAQN,QAAR,CAAiBI,gBAAjB,CACE,UADF,EAEE,UAAC3D,CAAD,EAAY;AACV,QAAA,KAAI,CAACC,WAAL,CAAiBD,CAAjB;AACD,OAJH,EAKE,EALF;;AAOA6D,uBAAQN,QAAR,CAAiBI,gBAAjB,CACE,aADF,EAEE,UAAC3D,CAAD,EAAY;AACV,QAAA,KAAI,CAACC,WAAL,CAAiBD,CAAjB;AACD,OAJH,EAKE,EALF;AAOD;AACF;;;;WACD,mBAAiB;AAAA,kDAC+B,KAAKmD,SADpC;AAAA;;AAAA;AACf,+DAA8D;AAAA;AAAA,cAAlDM,MAAkD;AAAA,cAA1CvD,IAA0C;AAAA,cAApCwD,eAAoC;;AAE5D1C,uBAAI8C,mBAAJ,CACEL,MADF,EAEEvD,IAFF,EAIEuD,MAAM,KAAKH,MAAM,CAACC,QAAlB,GAA6B,KAAKK,iBAAlC,GAAsD,KAAK3D,WAJ7D,EAKEyD,eALF;AAOD;AAVc;AAAA;AAAA;AAAA;AAAA;AAWhB;;;WAED,gBAAc;AAEZ,UAAI,KAAKrD,cAAT,EAAyB;AACvB;AACD;;AAJW,kDAMc,KAAKe,QANnB;AAAA;;AAAA;AAMZ,+DAAyC;AAAA,cAA5BE,OAA4B,gBAA5BA,OAA4B;AACvCA,UAAAA,OAAO,CAACK,KAAR;AACD;AARW;AAAA;AAAA;AAAA;AAAA;;AASZ,WAAKc,OAAL,CAAaC,KAAb;AACA,WAAKC,UAAL,CAAgB,EAAhB,EAAoB,EAApB;AACA,WAAKL,OAAL,GAAe,EAAf;AACD;;;WAED,oBAAkB;AAAA,kDACU,KAAKlB,QADf;AAAA;;AAAA;AAChB,+DAAyC;AAAA,cAA5BE,OAA4B,gBAA5BA,OAA4B;;AACvC,cAAIA,OAAO,CAACS,QAAR,EAAJ,EAAwB;AACtB,mBAAO,IAAP;AACD;AACF;AALe;AAAA;AAAA;AAAA;AAAA;;AAMhB,aAAO,KAAP;AACD;;;WAED,qBAAmB;AACjB,aAAO,CAAC,CAAC,KAAKrB,gBAAL,CAAsBxB,IAAxB,IAAgC,KAAKY,GAAL,CAASiE,UAAT,CAAoBC,SAApB,EAAvC;AACD;;;WACD,sBAAoB;AAClB,aAAO,CAAC,CAAC,KAAKtD,gBAAL,CAAsBrB,MAA/B;AACD;;;WAED,oBAAkB;AAChB,aAAO4E,OAAO,CAACjF,SAAQ,CAAC,KAAK0B,gBAAN,CAAT,CAAP,IAA4C,KAAKsD,SAAL,EAAnD;AACD;;;WAmGD,6BACExD,oBADF,EAEEE,gBAFF,EAGEwD,aAHF,EAIEjC,IAJF,EAKEjC,CALF,EAME;AACA,UAAI,CAACkE,aAAL,EAAoB;AAClB;AACD;;AAED,2BAAM1D,oBAAN,EAA4B0D,aAA5B;AAEA,UAAMC,SAAS,GAAG;AAChB9C,QAAAA,WAAW,EAAEY,IADG;AAEhBmC,QAAAA,aAAa,EAAEF,aAAa,CAACE,aAAd,IAA+BpE;AAF9B,OAAlB;;AAMA,UAAIkE,aAAa,CAACxE,SAAd,KAA4Ba,SAAhC,EAA2C;AACzCG,QAAAA,gBAAgB,CAACxB,IAAjB,GAAwBiF,SAAxB;AACD;;AACD,UAAID,aAAa,CAAC1E,QAAd,KAA2Be,SAA/B,EAA0C;AACxCG,QAAAA,gBAAgB,CAACvB,IAAjB,GAAwBgF,SAAxB;AACD;;AACD,UAAID,aAAa,CAACtE,UAAd,KAA6BW,SAAjC,EAA4C;AAC1CG,QAAAA,gBAAgB,CAACtB,KAAjB,GAAyB+E,SAAzB;AACD;;AACD,UAAID,aAAa,CAACvE,YAAd,KAA+BY,SAAnC,EAA8C;AAC5CG,QAAAA,gBAAgB,CAACrB,MAAjB,GAA0B8E,SAA1B;AACD;AACF;;;WAED,8BAA4B;AAAA;;AAC1B,UAAI,KAAKE,OAAL,KAAiB9D,SAArB,EAAgC;AAC9B,aAAK8D,OAAL,GAAe,KAAKvE,GAAL,CAASwE,kBAAT,CAA4B,UAACC,SAAD,EAAuB;AAEhE,iBAAO,MAAI,CAACF,OAAZ;;AACA,UAAA,MAAI,CAACpE,WAAL,CAAiB,IAAIuE,qBAAJ,CAAqB,aAArB,EAAoC;AAAED,YAAAA,SAAS,EAATA;AAAF,WAApC,CAAjB;;AACA,UAAA,MAAI,CAACE,YAAL;AACD,SALc,CAAf;AAMD;AACF;;;WAED,4BAA2B1E,OAA3B,EAAqD;AACnD,UAAMD,GAAG,GAAG,KAAKA,GAAjB;AACA,UAAMoB,EAAE,GAAGpB,GAAG,CAAC8C,kBAAJ,EAAX;AACA,WAAK8B,GAAL,CAAS,UAAT,EAAqB,IAAIC,kBAAJ,CAAoB7E,GAApB,EAAyBC,OAAzB,CAArB;AAEA,UAAM6E,OAAO,GAAI9E,GAAG,CAAC8E,OAAJ,GAAc,IAAIC,iBAAJ,CAAmB/E,GAAnB,EAAwBC,OAAxB,CAA/B;AACA,WAAK2E,GAAL,CAAS,SAAT,EAAoBE,OAApB;AAEA,UAAME,OAAO,GAAG,IAAIC,iBAAJ,EAAhB;AACA,UAAMC,SAAS,GAAG,IAAIC,mBAAJ,EAAlB;AACAnF,MAAAA,GAAG,CAACoF,eAAJ,GAAsB,IAAIC,sBAAJ,CAA2BH,SAA3B,EAAsCF,OAAtC,CAAtB;AACA,WAAKJ,GAAL,CAAS,SAAT,EAAoBI,OAApB;AACA,WAAKJ,GAAL,CAAS,WAAT,EAAsBM,SAAtB;AAEA,UAAMI,WAAW,GAAG,IAAIC,sBAAJ,EAApB;AACA,WAAKX,GAAL,CAAS,aAAT,EAAwBU,WAAxB;AAEA,UAAME,UAAU,GAAIxF,GAAG,CAACwF,UAAJ,GAAiB,IAAIC,wBAAJ,EAArC;AACA,WAAKb,GAAL,CAAS,YAAT,EAAuBY,UAAvB;AAEA,UAAME,WAAW,GAAG,IAAIC,yBAAJ,CAAuB1F,OAAvB,CAApB;AACA,UAAM2F,UAAU,GAAG,IAAIC,wBAAJ,CAAsB5F,OAAtB,CAAnB;AACAD,MAAAA,GAAG,CAAC8F,UAAJ,GAAiB,IAAIC,oBAAJ,CAAsB9F,OAAtB,EAA+ByF,WAA/B,EAA4CE,UAA5C,CAAjB;AACA,WAAKhB,GAAL,CAAS,aAAT,EAAwBc,WAAxB,EAAqC,CAAC,YAAD,CAArC;AACA,WAAKd,GAAL,CAAS,YAAT,EAAuBgB,UAAvB,EAAmC,CAAC,aAAD,CAAnC;AAEA,UAAMI,QAAQ,GAAG,IAAIC,sBAAJ,CAAoBhG,OAApB,CAAjB;AACA,UAAMiG,QAAQ,GAAG,IAAIC,sBAAJ,CAAoBlG,OAApB,CAAjB;AACAD,MAAAA,GAAG,CAACoG,OAAJ,GAAc,IAAIC,iBAAJ,CAAmBjF,EAAnB,EAAuB4E,QAAvB,EAAiCE,QAAjC,CAAd;AACA,WAAKtB,GAAL,CAAS,UAAT,EAAqBoB,QAArB;AACA,WAAKpB,GAAL,CAAS,UAAT,EAAqBsB,QAArB,EAA+B,CAAC,WAAD,EAAc,aAAd,CAA/B;AAEA,UAAMI,WAAW,GAAG,IAAIC,yBAAJ,EAApB;AACA,UAAMC,SAAS,GAAG,IAAIC,uBAAJ,EAAlB;AACAzG,MAAAA,GAAG,CAAC0G,eAAJ,GAAsB,IAAIC,0BAAJ,CACpBvF,EADoB,EAEpBoF,SAFoB,EAGpBF,WAHoB,EAIpBhB,WAJoB,CAAtB;AAMA,WAAKV,GAAL,CAAS,aAAT,EAAwB0B,WAAxB,EAAqC,CAAC,UAAD,EAAa,WAAb,CAArC;AACA,WAAK1B,GAAL,CAAS,WAAT,EAAsB4B,SAAtB,EAAiC,CAAC,UAAD,EAAa,aAAb,CAAjC;AAEA,UAAMvC,UAAU,GAAIjE,GAAG,CAACiE,UAAJ,GAAiB,IAAI2C,oBAAJ,CAAsB5G,GAAtB,EAA2B,IAA3B,CAArC;AACA,WAAK4E,GAAL,CAAS,YAAT,EAAuBX,UAAvB,EAAmC,CAAC,UAAD,CAAnC;AAEA,UAAM4C,QAAQ,GAAI7G,GAAG,CAAC6G,QAAJ,GAAe,IAAIC,iBAAJ,EAAjC;AACA,WAAKlC,GAAL,CAAS,UAAT,EAAqBiC,QAArB;AAEA,WAAKjC,GAAL,CAAS,mBAAT,EAA8B,IAAImC,4BAAJ,CAA6B/G,GAA7B,CAA9B;;AAEA,8BAAmB,CACjB,SADiB,EAEjB,iBAFiB,EAGjB,aAHiB,EAIjB,YAJiB,EAKjB,YALiB,EAMjB,SANiB,EAOjB,iBAPiB,EAQjB,YARiB,EASjB,UATiB,CAAnB,0BAUG;AAVE,YAAMmC,IAAI,WAAV;;AAYH,YAAIlC,OAAO,CAAC+G,WAAR,IAAuB/G,OAAO,CAACkC,IAAD,CAAlC,EAA0C;AAExCnC,UAAAA,GAAG,CAACmC,IAAD,CAAH,CAAU8E,MAAV,CAAiBhH,OAAO,CAACkC,IAAD,CAAxB;AACD;AACF;AACF;;;WAED,aAAYZ,WAAZ,EAAiCC,OAAjC,EAAoDC,OAApD,EAAwE;AACtE,WAAKH,QAAL,CAAcmB,IAAd,CAAmB;AAAElB,QAAAA,WAAW,EAAXA,WAAF;AAAeC,QAAAA,OAAO,EAAPA,OAAf;AAAwBC,QAAAA,OAAO,EAAPA;AAAxB,OAAnB;AACA,WAAKsB,YAAL,CAAkBxB,WAAlB,IAAiCC,OAAjC;AACD;;;WAED,yBACEX,cADF,EAEEY,OAFF,EAGEyF,MAHF,EAIE;AACA,WAAK,IAAM/E,IAAX,IAAmBtB,cAAnB,EAAmC;AACjC,YAAIsB,IAAI,KAAK+E,MAAb,EAAqB;AACnB;AACD;;AACD,YAAI,CAACzF,OAAD,IAAYA,OAAO,CAAC0F,OAAR,CAAgBhF,IAAhB,IAAwB,CAAxC,EAA2C;AACzC,iBAAO,IAAP;AACD;AACF;;AACD,aAAO,KAAP;AACD;;;WAED,uBAAsBpB,OAAtB,EAAiD;AAC/C,UAAMD,UAAU,GAAG,EAAnB;;AAD+C,kDAE/BC,OAF+B;AAAA;;AAAA;AAE/C,+DAAyB;AAAA,cAAdqG,CAAc;AACvB,cAAMzD,MAAM,GAAGyD,CAAC,CAACzD,MAAjB;;AACA,cAAIL,mBAAU,KAAKlC,EAAL,CAAQiG,QAAR,CAAiB1D,MAAjB,CAAd,EAAwC;AACtC7C,YAAAA,UAAU,CAAC2B,IAAX,CAAgB2E,CAAhB;AACD;AACF;AAP8C;AAAA;AAAA;AAAA;AAAA;;AAQ/C,aAAOtG,UAAP;AACD;;;WAED,wBAAuB;AACrB,UAAMwG,QAAgC,GAAG,EAAzC;AACA,UAAMC,wBAAwB,GAAG,EAAjC;AACA,UAAMC,2BAA2B,GAAG,EAApC;;AAHqB,kDAKyC,KAC3DhF,OANkB;AAAA;;AAAA;AAKrB,+DACY;AAAA;AAAA,cADAiF,MACA;AAAA,cADQ7G,gBACR;AAAA,cAD0BsB,mBAC1B;;AACV,cAAIuF,MAAM,CAAC/H,QAAX,EAAqB;AACnB4H,YAAAA,QAAQ,CAAC5H,QAAT,GAAoB,CAAC4H,QAAQ,CAAC5H,QAAT,IAAqB,IAAIgI,cAAJ,CAAU,CAAV,EAAa,CAAb,CAAtB,EAAuCC,IAAvC,CAClBF,MAAM,CAAC/H,QADW,CAApB;AAGD;;AACD,cAAI+H,MAAM,CAAC7H,SAAX,EAAsB;AACpB0H,YAAAA,QAAQ,CAAC1H,SAAT,GAAqB,CAAC0H,QAAQ,CAAC1H,SAAT,IAAsB,CAAvB,IAA4B6H,MAAM,CAAC7H,SAAxD;AACD;;AACD,cAAI6H,MAAM,CAAC5H,YAAX,EAAyB;AACvByH,YAAAA,QAAQ,CAACzH,YAAT,GACE,CAACyH,QAAQ,CAACzH,YAAT,IAAyB,CAA1B,IAA+B4H,MAAM,CAAC5H,YADxC;AAED;;AACD,cAAI4H,MAAM,CAAC3H,UAAX,EAAuB;AACrBwH,YAAAA,QAAQ,CAACxH,UAAT,GAAsB,CAACwH,QAAQ,CAACxH,UAAT,IAAuB,CAAxB,IAA6B2H,MAAM,CAAC3H,UAA1D;AACD;;AACD,cAAI2H,MAAM,CAACG,MAAP,KAAkBnH,SAAtB,EAAiC;AAC/B6G,YAAAA,QAAQ,CAACM,MAAT,GAAkBH,MAAM,CAACG,MAAzB;AACD;;AACD,cAAIH,MAAM,CAACI,WAAP,KAAuBpH,SAA3B,EAAsC;AACpC6G,YAAAA,QAAQ,CAACO,WAAT,GAAuBJ,MAAM,CAACI,WAA9B;AACD;;AACD,cAAIJ,MAAM,CAACK,SAAX,EAAsB;AACpBR,YAAAA,QAAQ,CAACQ,SAAT,GAAqBL,MAAM,CAACK,SAA5B;AACD;;AAED,+BAAMP,wBAAN,EAAgC3G,gBAAhC;AACA,+BAAM4G,2BAAN,EAAmCtF,mBAAnC;AACD;AAlCoB;AAAA;AAAA;AAAA;AAAA;;AAoCrB,WAAK6F,kBAAL,CACET,QADF,EAEEC,wBAFF,EAGEC,2BAHF;AAKA,WAAKhF,OAAL,GAAe,EAAf;AACD;;;WAED,4BACEwF,cADF,EAEET,wBAFF,EAGErF,mBAHF,EAIE;AACA,UAAMlC,GAAG,GAAG,KAAKA,GAAjB;AACA,UAAMiI,EAAE,GAAGjI,GAAG,CAACkI,SAAf;;AAEA,UAAI,CAAC1I,SAAS,CAACwI,cAAD,CAAd,EAAgC;AAC9B,eAAO,KAAKnF,UAAL,CAAgB0E,wBAAhB,EAA0CrF,mBAA1C,CAAP;AACD;;AACD,UACExC,QADF,GAMIsI,cANJ,CACEtI,QADF;AAAA,UAEEE,SAFF,GAMIoI,cANJ,CAEEpI,SAFF;AAAA,UAGEC,YAHF,GAMImI,cANJ,CAGEnI,YAHF;AAAA,UAIEC,UAJF,GAMIkI,cANJ,CAIElI,UAJF;AAAA,UAKE+H,WALF,GAMIG,cANJ,CAKEH,WALF;AAOA,UAAMD,MAAN,GAAiBI,cAAjB,CAAMJ,MAAN;;AAEA,UAAIC,WAAW,KAAKpH,SAApB,EAA+B;AAC7BmH,QAAAA,MAAM,GAAGC,WAAT;AACD;;AAGD7H,MAAAA,GAAG,CAACM,IAAJ,CAAS,IAAT;AAEAsH,MAAAA,MAAM,GAAGA,MAAM,IAAI5H,GAAG,CAACkI,SAAJ,CAAcC,WAAjC;AACA,UAAMC,GAAG,GAAGH,EAAE,CAACI,aAAH,CAAiB3I,QAAQ,GAAGkI,MAAM,CAACU,GAAP,CAAW5I,QAAX,CAAH,GAA0BkI,MAAnD,CAAZ;;AACA,UAAI/H,YAAY,IAAI,KAAKqD,aAAzB,EAAwC;AACtC+E,QAAAA,EAAE,CAACM,OAAH,IAAc1I,YAAd;AACD;;AACD,UAAIC,UAAU,IAAI,KAAKqD,YAAvB,EAAqC;AACnC8E,QAAAA,EAAE,CAAC3I,KAAH,IAAYQ,UAAZ;AACD;;AACD,UAAIF,SAAJ,EAAe;AACbqI,QAAAA,EAAE,CAAC7I,IAAH,IAAWQ,SAAX;AACD;;AACDqI,MAAAA,EAAE,CAACO,kBAAH,CAAsBJ,GAAtB,EAA2BR,MAA3B;AAEA,WAAK5H,GAAL,CAASyI,MAAT;;AACA,UAAI,CAACT,cAAc,CAACF,SAApB,EAA+B;AAC7B,aAAKnF,OAAL,CAAa+F,MAAb,CAAoBV,cAApB;AACD;;AACD,WAAKnF,UAAL,CAAgB0E,wBAAhB,EAA0CrF,mBAA1C;AACD;;;WAED,oBACEyG,mBADF,EAEEzG,mBAFF,EAGE;AAAA;;AACA,UAAM0G,SAAS,GAAG1J,SAAQ,CAAC,KAAK0B,gBAAN,CAA1B;;AACA,UAAMiI,SAAS,GAAG3J,SAAQ,CAACyJ,mBAAD,CAA1B;;AAEA,UAAMG,WAAmC,GAAG,EAA5C;;AAEA,WAAK,IAAMzI,SAAX,IAAwBsI,mBAAxB,EAA6C;AAC3C,YAAIA,mBAAmB,CAACtI,SAAD,CAAvB,EAAoC;AAClC,cAAQiE,aAAR,GAA0BqE,mBAAmB,CAACtI,SAAD,CAA7C,CAAQiE,aAAR;;AACA,cAAI,CAAC,KAAK1D,gBAAL,CAAsBP,SAAtB,CAAL,EAAuC;AACrCyI,YAAAA,WAAW,WAAIzI,SAAJ,WAAX,GAAmCiE,aAAnC;AACD;;AAED,eAAK1D,gBAAL,CAAsBP,SAAtB,IAAmCsI,mBAAmB,CAACtI,SAAD,CAAtD;AACD;AACF;;AAGD,UAAI,CAACuI,SAAD,IAAcC,SAAlB,EAA6B;AAC3B,aAAKE,SAAL,CAAe,WAAf,EAA4BF,SAAS,CAACvE,aAAtC;AACD;;AAED,WAAK,IAAMnC,IAAX,IAAmB2G,WAAnB,EAAgC;AAC9B,YAAIA,WAAW,CAAC3G,IAAD,CAAf,EAAuB;AACrB,eAAK4G,SAAL,CAAe5G,IAAf,EAAqB2G,WAAW,CAAC3G,IAAD,CAAhC;AACD;AACF;;AAED,UAAIwG,mBAAmB,CAACpJ,MAAxB,EAAgC;AAC9B,aAAKyJ,cAAL,GAAsB,IAAtB;AACD;;AAED,UAAIH,SAAJ,EAAe;AACb,aAAKE,SAAL,CAAe,MAAf,EAAuBF,SAAS,CAACvE,aAAjC;AACD;;AAED,WAAK,IAAMjE,UAAX,IAAwBsI,mBAAxB,EAA6C;AAC3C,YAAIA,mBAAmB,CAACtI,UAAD,CAAvB,EAAoC;AAClC,cAAQiE,cAAR,GAA0BqE,mBAAmB,CAACtI,UAAD,CAA7C,CAAQiE,aAAR;AACA,eAAKyE,SAAL,CAAe1I,UAAf,EAA0BiE,cAA1B;AACD;AACF;;AAED,UAAM2E,SAAiC,GAAG,EAA1C;AAEA,UAAIC,gBAAJ;;AACA,WAAK,IAAM7I,WAAX,IAAwB,KAAKO,gBAA7B,EAA+C;AAC7C,YAAI,KAAKA,gBAAL,CAAsBP,WAAtB,CAAJ,EAAsC;AACpC,sCAAuC,KAAKO,gBAAL,CAAsBP,WAAtB,CAAvC;AAAA,cAAQkB,WAAR,yBAAQA,WAAR;AAAA,cAAqB+C,eAArB,yBAAqBA,aAArB;;AACA,cAAI,CAAC,KAAKvB,YAAL,CAAkBxB,WAAlB,EAA+BU,QAA/B,EAAL,EAAgD;AAC9C,mBAAO,KAAKrB,gBAAL,CAAsBP,WAAtB,CAAP;AACA6I,YAAAA,gBAAgB,GAAGhH,mBAAmB,CAACX,WAAD,CAAnB,IAAoC+C,eAAvD;AACA2E,YAAAA,SAAS,WAAI5I,WAAJ,SAAT,GAA+B6I,gBAA/B;AACD;AACF;AACF;;AAED,WAAK,IAAM/G,KAAX,IAAmB8G,SAAnB,EAA8B;AAC5B,YAAIA,SAAS,CAAC9G,KAAD,CAAb,EAAqB;AACnB,eAAK4G,SAAL,CAAe5G,KAAf,EAAqB8G,SAAS,CAAC9G,KAAD,CAA9B;AACD;AACF;;AAED,UAAMgH,WAAW,GAAGjK,SAAQ,CAAC,KAAK0B,gBAAN,CAA5B;;AACA,UAAI,CAACgI,SAAS,IAAIC,SAAd,KAA4B,CAACM,WAAjC,EAA8C;AAC5C,aAAK5I,cAAL,GAAsB,IAAtB;AACA,YAAM6I,YAAY,GAAG,KAAKzG,OAAL,CAAa0G,SAAb,CACnB,KAAKrJ,GAAL,CAASoG,OAAT,CAAiBkD,cADE,CAArB;;AAIA,YAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAAChB,OAAD;AAAA,iBACxBA,OAAO,KAAK,CAAZ,IACA,CAAC,MAAI,CAACtF,WAAN,GAAoBsF,OADpB,IAEAA,OAAO,GAAG,MAAI,CAACtF,WAHS;AAAA,SAA1B;;AAKA,YAAImG,YAAJ,EAAkB;AAChB,cAAIG,iBAAiB,CAACH,YAAY,CAACb,OAAb,IAAwB,KAAKvI,GAAL,CAASwJ,UAAT,EAAzB,CAArB,EAAsE;AACpEJ,YAAAA,YAAY,CAACb,OAAb,GAAuB,CAAvB;AACD;;AACD,eAAKvI,GAAL,CAASyJ,MAAT,CAAgBL,YAAhB,EAA8B;AAAE9E,YAAAA,aAAa,EAAE4E;AAAjB,WAA9B;AACD,SALD,MAKO;AACL,eAAKlJ,GAAL,CAAS0J,IAAT,CACE,SADF,EAEE,IAAIC,YAAJ,CAAU,SAAV,EAAqB;AAAErF,YAAAA,aAAa,EAAE4E;AAAjB,WAArB,CAFF;;AAIA,cAAIK,iBAAiB,CAAC,KAAKvJ,GAAL,CAASwJ,UAAT,EAAD,CAArB,EAA8C;AAC5C,iBAAKxJ,GAAL,CAAS4J,UAAT;AACD;AACF;;AACD,aAAKZ,cAAL,GAAsB,KAAtB;AACA,aAAKzI,cAAL,GAAsB,KAAtB;AACD;AACF;;;WAED,mBAAkBH,IAAlB,EAAgCF,CAAhC,EAAwC;AACtC,WAAKF,GAAL,CAAS0J,IAAT,CAActJ,IAAd,EAAoB,IAAIuJ,YAAJ,CAAUvJ,IAAV,EAAgBF,CAAC,GAAG;AAAEoE,QAAAA,aAAa,EAAEpE;AAAjB,OAAH,GAA0B,EAA3C,CAApB;AACD;;;;;eAGYH,c","sourcesContent":["// @ts-ignore\n// tslint:disable-next-line: no-submodule-imports\nimport { $window, isMini } from '@antv/l7-utils';\nimport { merge } from 'lodash';\nimport { EarthMap } from '../earthmap';\nimport Point from '../geo/point';\nimport { Map } from '../map';\nimport DOM from '../utils/dom';\nimport BlockableMapEventHandler from './blockable_map_event';\nimport BoxZoomHandler from './box_zoom';\nimport ClickZoomHandler from './click_zoom';\nimport { Event } from './events/event';\nimport RenderFrameEvent from './events/render_event';\nimport HandlerInertia from './handler_inertia';\nimport { IHandler, IHandlerResult } from './IHandler';\nimport KeyboardHandler from './keyboard';\nimport MapEventHandler from './map_event';\nimport {\n MousePanHandler,\n MousePitchHandler,\n MouseRotateHandler,\n} from './mouse';\nimport ScrollZoomHandler from './scroll_zoom';\nimport DoubleClickZoomHandler from './shim/dblclick_zoom';\nimport DragPanHandler from './shim/drag_pan';\nimport DragRotateHandler from './shim/drag_rotate';\nimport TouchZoomRotateHandler from './shim/touch_zoom_rotate';\nimport TapDragZoomHandler from './tap/tap_drag_zoom';\nimport TapZoomHandler from './tap/tap_zoom';\nimport {\n TouchPanHandler,\n TouchPitchHandler,\n TouchRotateHandler,\n TouchZoomHandler,\n} from './touch';\n\nexport type InputEvent = MouseEvent | TouchEvent | KeyboardEvent | WheelEvent;\n\nconst isMoving = (p: any) => p.zoom || p.drag || p.pitch || p.rotate;\n\nfunction hasChange(result: IHandlerResult) {\n return (\n (result.panDelta && result.panDelta.mag()) ||\n result.zoomDelta ||\n result.bearingDelta ||\n result.pitchDelta\n );\n}\n\nexport interface IHandlerOptions {\n interactive: boolean;\n boxZoom: boolean;\n dragRotate: boolean;\n dragPan: boolean;\n keyboard: boolean;\n doubleClickZoom: boolean;\n touchZoomRotate: boolean;\n touchPitch: boolean;\n trackResize: boolean;\n renderWorldCopies: boolean;\n bearingSnap: number;\n clickTolerance: number;\n pitchWithRotate: boolean;\n pitchEnabled: boolean;\n rotateEnabled: boolean;\n}\n\nclass HandlerManager {\n private map: Map | EarthMap;\n private el: HTMLElement;\n private handlers: Array<{\n handlerName: string;\n handler: IHandler;\n allowed: any;\n }>;\n private eventsInProgress: any;\n private frameId: number;\n private inertia: HandlerInertia;\n private bearingSnap: number;\n private handlersById: { [key: string]: IHandler };\n private updatingCamera: boolean;\n private changes: Array<[IHandlerResult, any, any]>;\n private previousActiveHandlers: { [key: string]: IHandler };\n private bearingChanged: boolean;\n private rotateEnabled: boolean;\n private pitchEnabled: boolean;\n private listeners: Array<\n [HTMLElement, string, void | { passive?: boolean; capture?: boolean }]\n >;\n\n constructor(map: Map | EarthMap, options: IHandlerOptions) {\n this.map = map;\n this.el = this.map.getCanvasContainer();\n this.handlers = [];\n this.handlersById = {};\n this.changes = [];\n\n this.inertia = new HandlerInertia(map);\n this.bearingSnap = options.bearingSnap;\n this.rotateEnabled = options.rotateEnabled;\n this.pitchEnabled = options.pitchEnabled;\n this.previousActiveHandlers = {};\n\n // Track whether map is currently moving, to compute start/move/end events\n this.eventsInProgress = {};\n\n this.addDefaultHandlers(options);\n\n const el = this.el;\n this.listeners = [];\n if (!isMini) {\n // l7 - mini\n this.listeners = [\n // Bind touchstart and touchmove with passive: false because, even though\n // they only fire a map events and therefore could theoretically be\n // passive, binding with passive: true causes iOS not to respect\n // e.preventDefault() in _other_ handlers, even if they are non-passive\n // (see https://bugs.webkit.org/show_bug.cgi?id=184251)\n [el, 'touchstart', { passive: false }],\n [el, 'touchmove', { passive: false }],\n [el, 'touchend', undefined],\n [el, 'touchcancel', undefined],\n\n [el, 'mousedown', undefined],\n [el, 'mousemove', undefined],\n [el, 'mouseup', undefined],\n\n // Bind window-level event listeners for move and up/end events. In the absence of\n // the pointer capture API, which is not supported by all necessary platforms,\n // window-level event listeners give us the best shot at capturing events that\n // fall outside the map canvas element. Use `{capture: true}` for the move event\n // to prevent map move events from being fired during a drag.\n // @ts-ignore\n [window.document, 'mousemove', { capture: true }],\n // @ts-ignore\n [window.document, 'mouseup', undefined],\n\n [el, 'mouseover', undefined],\n [el, 'mouseout', undefined],\n [el, 'dblclick', undefined],\n [el, 'click', undefined],\n\n [el, 'keydown', { capture: false }],\n [el, 'keyup', undefined],\n\n [el, 'wheel', { passive: false }],\n [el, 'contextmenu', undefined],\n // @ts-ignore\n [window, 'blur', undefined],\n ];\n for (const [target, type, listenerOptions] of this.listeners) {\n // @ts-ignore\n DOM.addEventListener(\n target,\n type,\n // @ts-ignore\n target === window.document\n ? this.handleWindowEvent\n : this.handleEvent,\n listenerOptions,\n );\n }\n } else {\n $window.document.addEventListener(\n 'touchstart',\n (e: any) => {\n this.handleEvent(e);\n },\n {},\n );\n $window.document.addEventListener(\n 'touchmove',\n (e: any) => {\n this.handleEvent(e);\n },\n {},\n );\n $window.document.addEventListener(\n 'touchend',\n (e: any) => {\n this.handleEvent(e);\n },\n {},\n );\n $window.document.addEventListener(\n 'touchcancel',\n (e: any) => {\n this.handleEvent(e);\n },\n {},\n );\n }\n }\n public destroy() {\n for (const [target, type, listenerOptions] of this.listeners) {\n // @ts-ignore\n DOM.removeEventListener(\n target,\n type,\n // @ts-ignore\n target === window.document ? this.handleWindowEvent : this.handleEvent,\n listenerOptions,\n );\n }\n }\n\n public stop() {\n // do nothing if this method was triggered by a gesture update\n if (this.updatingCamera) {\n return;\n }\n\n for (const { handler } of this.handlers) {\n handler.reset();\n }\n this.inertia.clear();\n this.fireEvents({}, {});\n this.changes = [];\n }\n\n public isActive() {\n for (const { handler } of this.handlers) {\n if (handler.isActive()) {\n return true;\n }\n }\n return false;\n }\n\n public isZooming() {\n return !!this.eventsInProgress.zoom || this.map.scrollZoom.isZooming();\n }\n public isRotating() {\n return !!this.eventsInProgress.rotate;\n }\n\n public isMoving() {\n return Boolean(isMoving(this.eventsInProgress)) || this.isZooming();\n }\n\n public handleWindowEvent = (e: InputEvent) => {\n this.handleEvent(e, `${e.type}Window`);\n };\n\n public handleEvent = (\n e: InputEvent | RenderFrameEvent,\n eventName?: string,\n ) => {\n if (e.type === 'blur') {\n this.stop();\n return;\n }\n this.updatingCamera = true;\n const inputEvent = e.type === 'renderFrame' ? undefined : (e as InputEvent);\n\n /*\n * We don't call e.preventDefault() for any events by default.\n * Handlers are responsible for calling it where necessary.\n */\n\n const mergedIHandlerResult: IHandlerResult = { needsRenderFrame: false };\n const eventsInProgress: { [key: string]: any } = {};\n const activeHandlers: { [key: string]: any } = {};\n // @ts-ignore\n const mapTouches = e.touches\n ? // @ts-ignore\n this.getMapTouches(e.touches as Touch[])\n : undefined;\n const points = mapTouches\n ? DOM.touchPos(this.el, mapTouches)\n : DOM.mousePos(this.el, e as MouseEvent);\n\n for (const { handlerName, handler, allowed } of this.handlers) {\n if (!handler.isEnabled()) {\n continue;\n }\n let data: IHandlerResult;\n if (this.blockedByActive(activeHandlers, allowed, handlerName)) {\n handler.reset();\n } else {\n const handerName = eventName || e.type;\n // @ts-ignore\n if (handler && handler[handerName]) {\n // @ts-ignore\n data = handler[handerName](e, points, mapTouches);\n this.mergeIHandlerResult(\n mergedIHandlerResult,\n eventsInProgress,\n data,\n handlerName,\n inputEvent,\n );\n if (data && data.needsRenderFrame) {\n this.triggerRenderFrame();\n }\n }\n }\n // @ts-ignore\n if (data || handler.isActive()) {\n activeHandlers[handlerName] = handler;\n }\n }\n\n const deactivatedHandlers: { [key: string]: any } = {};\n for (const name in this.previousActiveHandlers) {\n if (!activeHandlers[name]) {\n deactivatedHandlers[name] = inputEvent;\n }\n }\n this.previousActiveHandlers = activeHandlers;\n if (\n Object.keys(deactivatedHandlers).length ||\n hasChange(mergedIHandlerResult)\n ) {\n this.changes.push([\n mergedIHandlerResult,\n eventsInProgress,\n deactivatedHandlers,\n ]);\n this.triggerRenderFrame();\n }\n\n if (Object.keys(activeHandlers).length || hasChange(mergedIHandlerResult)) {\n this.map.stop(true);\n }\n\n this.updatingCamera = false;\n\n const { cameraAnimation } = mergedIHandlerResult;\n if (cameraAnimation) {\n this.inertia.clear();\n this.fireEvents({}, {});\n this.changes = [];\n cameraAnimation(this.map);\n }\n };\n\n public mergeIHandlerResult(\n mergedIHandlerResult: IHandlerResult,\n eventsInProgress: { [key: string]: any },\n HandlerResult: IHandlerResult,\n name: string,\n e?: InputEvent,\n ) {\n if (!HandlerResult) {\n return;\n }\n\n merge(mergedIHandlerResult, HandlerResult);\n\n const eventData = {\n handlerName: name,\n originalEvent: HandlerResult.originalEvent || e,\n };\n\n // track which handler changed which camera property\n if (HandlerResult.zoomDelta !== undefined) {\n eventsInProgress.zoom = eventData;\n }\n if (HandlerResult.panDelta !== undefined) {\n eventsInProgress.drag = eventData;\n }\n if (HandlerResult.pitchDelta !== undefined) {\n eventsInProgress.pitch = eventData;\n }\n if (HandlerResult.bearingDelta !== undefined) {\n eventsInProgress.rotate = eventData;\n }\n }\n\n public triggerRenderFrame() {\n if (this.frameId === undefined) {\n this.frameId = this.map.requestRenderFrame((timeStamp: number) => {\n // @ts-ignore\n delete this.frameId;\n this.handleEvent(new RenderFrameEvent('renderFrame', { timeStamp }));\n this.applyChanges();\n });\n }\n }\n\n private addDefaultHandlers(options: IHandlerOptions) {\n const map = this.map;\n const el = map.getCanvasContainer();\n this.add('mapEvent', new MapEventHandler(map, options));\n\n const boxZoom = (map.boxZoom = new BoxZoomHandler(map, options));\n this.add('boxZoom', boxZoom);\n\n const tapZoom = new TapZoomHandler();\n const clickZoom = new ClickZoomHandler();\n map.doubleClickZoom = new DoubleClickZoomHandler(clickZoom, tapZoom);\n this.add('tapZoom', tapZoom);\n this.add('clickZoom', clickZoom);\n\n const tapDragZoom = new TapDragZoomHandler();\n this.add('tapDragZoom', tapDragZoom);\n\n const touchPitch = (map.touchPitch = new TouchPitchHandler());\n this.add('touchPitch', touchPitch);\n\n const mouseRotate = new MouseRotateHandler(options);\n const mousePitch = new MousePitchHandler(options);\n map.dragRotate = new DragRotateHandler(options, mouseRotate, mousePitch);\n this.add('mouseRotate', mouseRotate, ['mousePitch']);\n this.add('mousePitch', mousePitch, ['mouseRotate']);\n\n const mousePan = new MousePanHandler(options);\n const touchPan = new TouchPanHandler(options);\n map.dragPan = new DragPanHandler(el, mousePan, touchPan);\n this.add('mousePan', mousePan);\n this.add('touchPan', touchPan, ['touchZoom', 'touchRotate']);\n\n const touchRotate = new TouchRotateHandler();\n const touchZoom = new TouchZoomHandler();\n map.touchZoomRotate = new TouchZoomRotateHandler(\n el,\n touchZoom,\n touchRotate,\n tapDragZoom,\n );\n this.add('touchRotate', touchRotate, ['touchPan', 'touchZoom']);\n this.add('touchZoom', touchZoom, ['touchPan', 'touchRotate']);\n\n const scrollZoom = (map.scrollZoom = new ScrollZoomHandler(map, this));\n this.add('scrollZoom', scrollZoom, ['mousePan']);\n\n const keyboard = (map.keyboard = new KeyboardHandler());\n this.add('keyboard', keyboard);\n\n this.add('blockableMapEvent', new BlockableMapEventHandler(map));\n\n for (const name of [\n 'boxZoom',\n 'doubleClickZoom',\n 'tapDragZoom',\n 'touchPitch',\n 'dragRotate',\n 'dragPan',\n 'touchZoomRotate',\n 'scrollZoom',\n 'keyboard',\n ]) {\n // @ts-ignore\n if (options.interactive && options[name]) {\n // @ts-ignore\n map[name].enable(options[name]);\n }\n }\n }\n\n private add(handlerName: string, handler: IHandler, allowed?: string[]) {\n this.handlers.push({ handlerName, handler, allowed });\n this.handlersById[handlerName] = handler;\n }\n\n private blockedByActive(\n activeHandlers: { [key: string]: IHandler },\n allowed: string[],\n myName: string,\n ) {\n for (const name in activeHandlers) {\n if (name === myName) {\n continue;\n }\n if (!allowed || allowed.indexOf(name) < 0) {\n return true;\n }\n }\n return false;\n }\n\n private getMapTouches(touches: Touch[]): Touch[] {\n const mapTouches = [];\n for (const t of touches) {\n const target = t.target as Node;\n if (isMini || this.el.contains(target)) {\n mapTouches.push(t);\n }\n }\n return mapTouches;\n }\n\n private applyChanges() {\n const combined: { [key: string]: any } = {};\n const combinedEventsInProgress = {};\n const combinedDeactivatedHandlers = {};\n\n for (const [change, eventsInProgress, deactivatedHandlers] of this\n .changes) {\n if (change.panDelta) {\n combined.panDelta = (combined.panDelta || new Point(0, 0))._add(\n change.panDelta,\n );\n }\n if (change.zoomDelta) {\n combined.zoomDelta = (combined.zoomDelta || 0) + change.zoomDelta;\n }\n if (change.bearingDelta) {\n combined.bearingDelta =\n (combined.bearingDelta || 0) + change.bearingDelta;\n }\n if (change.pitchDelta) {\n combined.pitchDelta = (combined.pitchDelta || 0) + change.pitchDelta;\n }\n if (change.around !== undefined) {\n combined.around = change.around;\n }\n if (change.pinchAround !== undefined) {\n combined.pinchAround = change.pinchAround;\n }\n if (change.noInertia) {\n combined.noInertia = change.noInertia;\n }\n\n merge(combinedEventsInProgress, eventsInProgress);\n merge(combinedDeactivatedHandlers, deactivatedHandlers);\n }\n\n this.updateMapTransform(\n combined,\n combinedEventsInProgress,\n combinedDeactivatedHandlers,\n );\n this.changes = [];\n }\n\n private updateMapTransform(\n combinedResult: any,\n combinedEventsInProgress: any,\n deactivatedHandlers: any,\n ) {\n const map = this.map;\n const tr = map.transform;\n\n if (!hasChange(combinedResult)) {\n return this.fireEvents(combinedEventsInProgress, deactivatedHandlers);\n }\n const {\n panDelta,\n zoomDelta,\n bearingDelta,\n pitchDelta,\n pinchAround,\n } = combinedResult;\n let { around } = combinedResult;\n\n if (pinchAround !== undefined) {\n around = pinchAround;\n }\n\n // stop any ongoing camera animations (easeTo, flyTo)\n map.stop(true);\n\n around = around || map.transform.centerPoint;\n const loc = tr.pointLocation(panDelta ? around.sub(panDelta) : around);\n if (bearingDelta && this.rotateEnabled) {\n tr.bearing += bearingDelta;\n }\n if (pitchDelta && this.pitchEnabled) {\n tr.pitch += pitchDelta;\n }\n if (zoomDelta) {\n tr.zoom += zoomDelta;\n }\n tr.setLocationAtPoint(loc, around);\n\n this.map.update();\n if (!combinedResult.noInertia) {\n this.inertia.record(combinedResult);\n }\n this.fireEvents(combinedEventsInProgress, deactivatedHandlers);\n }\n\n private fireEvents(\n newEventsInProgress: { [key: string]: any },\n deactivatedHandlers: { [key: string]: any },\n ) {\n const wasMoving = isMoving(this.eventsInProgress);\n const nowMoving = isMoving(newEventsInProgress);\n\n const startEvents: { [key: string]: any } = {};\n\n for (const eventName in newEventsInProgress) {\n if (newEventsInProgress[eventName]) {\n const { originalEvent } = newEventsInProgress[eventName];\n if (!this.eventsInProgress[eventName]) {\n startEvents[`${eventName}start`] = originalEvent;\n }\n\n this.eventsInProgress[eventName] = newEventsInProgress[eventName];\n }\n }\n\n // fire start events only after this.eventsInProgress has been updated\n if (!wasMoving && nowMoving) {\n this.fireEvent('movestart', nowMoving.originalEvent);\n }\n\n for (const name in startEvents) {\n if (startEvents[name]) {\n this.fireEvent(name, startEvents[name]);\n }\n }\n\n if (newEventsInProgress.rotate) {\n this.bearingChanged = true;\n }\n\n if (nowMoving) {\n this.fireEvent('move', nowMoving.originalEvent);\n }\n\n for (const eventName in newEventsInProgress) {\n if (newEventsInProgress[eventName]) {\n const { originalEvent } = newEventsInProgress[eventName];\n this.fireEvent(eventName, originalEvent);\n }\n }\n\n const endEvents: { [key: string]: any } = {};\n\n let originalEndEvent;\n for (const eventName in this.eventsInProgress) {\n if (this.eventsInProgress[eventName]) {\n const { handlerName, originalEvent } = this.eventsInProgress[eventName];\n if (!this.handlersById[handlerName].isActive()) {\n delete this.eventsInProgress[eventName];\n originalEndEvent = deactivatedHandlers[handlerName] || originalEvent;\n endEvents[`${eventName}end`] = originalEndEvent;\n }\n }\n }\n\n for (const name in endEvents) {\n if (endEvents[name]) {\n this.fireEvent(name, endEvents[name]);\n }\n }\n\n const stillMoving = isMoving(this.eventsInProgress);\n if ((wasMoving || nowMoving) && !stillMoving) {\n this.updatingCamera = true;\n const inertialEase = this.inertia.onMoveEnd(\n this.map.dragPan.inertiaOptions,\n );\n\n const shouldSnapToNorth = (bearing: number) =>\n bearing !== 0 &&\n -this.bearingSnap < bearing &&\n bearing < this.bearingSnap;\n\n if (inertialEase) {\n if (shouldSnapToNorth(inertialEase.bearing || this.map.getBearing())) {\n inertialEase.bearing = 0;\n }\n this.map.easeTo(inertialEase, { originalEvent: originalEndEvent });\n } else {\n this.map.emit(\n 'moveend',\n new Event('moveend', { originalEvent: originalEndEvent }),\n );\n if (shouldSnapToNorth(this.map.getBearing())) {\n this.map.resetNorth();\n }\n }\n this.bearingChanged = false;\n this.updatingCamera = false;\n }\n }\n\n private fireEvent(type: string, e: any) {\n this.map.emit(type, new Event(type, e ? { originalEvent: e } : {}));\n }\n}\n\nexport default HandlerManager;\n"],"file":"handler_manager.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/handler/handler_util.ts"],"names":["indexTouches","touches","points","obj","i","length","identifier"],"mappings":";;;;;;;AAGO,SAASA,YAAT,CAAsBC,OAAtB,EAAwCC,MAAxC,EAAyD;AAC9D,MAAMC,GAA2B,GAAG,EAApC;;AACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,OAAO,CAACI,MAA5B,EAAoCD,CAAC,EAArC,EAAyC;AACvCD,IAAAA,GAAG,CAACF,OAAO,CAACG,CAAD,CAAP,CAAWE,UAAZ,CAAH,GAA6BJ,MAAM,CAACE,CAAD,CAAnC;AACD;;AACD,SAAOD,GAAP;AACD","sourcesContent":["// @ts-ignore\nimport Point from '../geo/point';\n\nexport function indexTouches(touches: Touch[], points: Point[]) {\n const obj: { [key: string]: any } = {};\n for (let i = 0; i < touches.length; i++) {\n obj[touches[i].identifier] = points[i];\n }\n return obj;\n}\n"],"file":"handler_util.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/handler/keyboard.ts"],"names":["defaultOptions","panStep","bearingStep","pitchStep","KeyboardHandler","stepOptions","active","e","altKey","ctrlKey","metaKey","zoomDir","bearingDir","pitchDir","xDir","yDir","keyCode","shiftKey","preventDefault","cameraAnimation","map","zoom","getZoom","easeTo","duration","easeId","easing","easeOut","Math","round","bearing","getBearing","pitch","getPitch","offset","center","getCenter","originalEvent","enabled","reset","t"],"mappings":"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","sourcesContent":["import { EarthMap } from '../earthmap';\nimport { Map } from '../map';\n\nconst defaultOptions = {\n panStep: 100,\n bearingStep: 15,\n pitchStep: 10,\n};\n\n/**\n * The `KeyboardHandler` allows the user to zoom, rotate, and pan the map using\n * the following keyboard shortcuts:\n *\n * - `=` / `+`: Increase the zoom level by 1.\n * - `Shift-=` / `Shift-+`: Increase the zoom level by 2.\n * - `-`: Decrease the zoom level by 1.\n * - `Shift--`: Decrease the zoom level by 2.\n * - Arrow keys: Pan by 100 pixels.\n * - `Shift+⇢`: Increase the rotation by 15 degrees.\n * - `Shift+⇠`: Decrease the rotation by 15 degrees.\n * - `Shift+⇡`: Increase the pitch by 10 degrees.\n * - `Shift+⇣`: Decrease the pitch by 10 degrees.\n */\nclass KeyboardHandler {\n private enabled: boolean;\n private active: boolean;\n private panStep: number;\n private bearingStep: number;\n private pitchStep: number;\n\n /**\n * @private\n */\n constructor() {\n const stepOptions = defaultOptions;\n this.panStep = stepOptions.panStep;\n this.bearingStep = stepOptions.bearingStep;\n this.pitchStep = stepOptions.pitchStep;\n }\n\n public reset() {\n this.active = false;\n }\n\n public keydown(e: KeyboardEvent) {\n if (e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n let zoomDir = 0;\n let bearingDir = 0;\n let pitchDir = 0;\n let xDir = 0;\n let yDir = 0;\n\n switch (e.keyCode) {\n case 61:\n case 107:\n case 171:\n case 187:\n zoomDir = 1;\n break;\n\n case 189:\n case 109:\n case 173:\n zoomDir = -1;\n break;\n\n case 37:\n if (e.shiftKey) {\n bearingDir = -1;\n } else {\n e.preventDefault();\n xDir = -1;\n }\n break;\n\n case 39:\n if (e.shiftKey) {\n bearingDir = 1;\n } else {\n e.preventDefault();\n xDir = 1;\n }\n break;\n\n case 38:\n if (e.shiftKey) {\n pitchDir = 1;\n } else {\n e.preventDefault();\n yDir = -1;\n }\n break;\n\n case 40:\n if (e.shiftKey) {\n pitchDir = -1;\n } else {\n e.preventDefault();\n yDir = 1;\n }\n break;\n\n default:\n return;\n }\n\n return {\n cameraAnimation: (map: Map | EarthMap) => {\n const zoom = map.getZoom();\n map.easeTo(\n {\n duration: 300,\n easeId: 'keyboardHandler',\n easing: easeOut,\n\n zoom: zoomDir\n ? Math.round(zoom) + zoomDir * (e.shiftKey ? 2 : 1)\n : zoom,\n bearing: map.getBearing() + bearingDir * this.bearingStep,\n pitch: map.getPitch() + pitchDir * this.pitchStep,\n offset: [-xDir * this.panStep, -yDir * this.panStep],\n center: map.getCenter(),\n },\n { originalEvent: e },\n );\n },\n };\n }\n\n public enable() {\n this.enabled = true;\n }\n\n public disable() {\n this.enabled = false;\n this.reset();\n }\n\n public isEnabled() {\n return this.enabled;\n }\n\n public isActive() {\n return this.active;\n }\n}\n\nfunction easeOut(t: number) {\n return t * (2 - t);\n}\n\nexport default KeyboardHandler;\n"],"file":"keyboard.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/handler/map_event.ts"],"names":["MapEventHandler","map","options","clickTolerance","mousedownPos","e","firePreventable","MapWheelEvent","type","point","MapMouseEvent","emit","dist","MapTouchEvent","mapEvent","defaultPrevented"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { EarthMap } from '../earthmap';\nimport Point from '../geo/point';\nimport { Map } from '../map';\nimport { MapMouseEvent, MapTouchEvent, MapWheelEvent } from './events';\n\nexport default class MapEventHandler {\n private mousedownPos: Point;\n private clickTolerance: number;\n private map: Map | EarthMap;\n\n constructor(map: Map | EarthMap, options: { clickTolerance: number }) {\n this.map = map;\n this.clickTolerance = options.clickTolerance;\n }\n\n public reset() {\n // @ts-ignore\n delete this.mousedownPos;\n }\n\n public wheel(e: WheelEvent) {\n // If mapEvent.preventDefault() is called by the user, prevent handlers such as:\n // - ScrollZoom\n return this.firePreventable(new MapWheelEvent(e.type, this.map, e));\n }\n\n public mousedown(e: MouseEvent, point: Point) {\n this.mousedownPos = point;\n // If mapEvent.preventDefault() is called by the user, prevent handlers such as:\n // - MousePan\n // - MouseRotate\n // - MousePitch\n // - DblclickHandler\n return this.firePreventable(new MapMouseEvent(e.type, this.map, e));\n }\n\n public mouseup(e: MouseEvent) {\n this.map.emit(e.type, new MapMouseEvent(e.type, this.map, e));\n }\n\n public click(e: MouseEvent, point: Point) {\n if (\n this.mousedownPos &&\n this.mousedownPos.dist(point) >= this.clickTolerance\n ) {\n return;\n }\n this.map.emit(e.type, new MapMouseEvent(e.type, this.map, e));\n }\n\n public dblclick(e: MouseEvent) {\n // If mapEvent.preventDefault() is called by the user, prevent handlers such as:\n // - DblClickZoom\n return this.firePreventable(new MapMouseEvent(e.type, this.map, e));\n }\n\n public mouseover(e: MouseEvent) {\n this.map.emit(e.type, new MapMouseEvent(e.type, this.map, e));\n }\n\n public mouseout(e: MouseEvent) {\n this.map.emit(e.type, new MapMouseEvent(e.type, this.map, e));\n }\n\n public touchstart(e: TouchEvent) {\n // If mapEvent.preventDefault() is called by the user, prevent handlers such as:\n // - TouchPan\n // - TouchZoom\n // - TouchRotate\n // - TouchPitch\n // - TapZoom\n // - SwipeZoom\n return this.firePreventable(new MapTouchEvent(e.type, this.map, e));\n }\n\n public touchmove(e: TouchEvent) {\n this.map.emit(e.type, new MapTouchEvent(e.type, this.map, e));\n }\n\n public touchend(e: TouchEvent) {\n this.map.emit(e.type, new MapTouchEvent(e.type, this.map, e));\n }\n\n public touchcancel(e: TouchEvent) {\n this.map.emit(e.type, new MapTouchEvent(e.type, this.map, e));\n }\n\n public firePreventable(\n mapEvent: MapMouseEvent | MapTouchEvent | MapWheelEvent,\n ) {\n this.map.emit(mapEvent.type, mapEvent);\n if (mapEvent.defaultPrevented) {\n // returning an object marks the handler as active and resets other handlers\n return {};\n }\n }\n\n public isEnabled() {\n return true;\n }\n\n public isActive() {\n return false;\n }\n public enable() {\n return false;\n }\n public disable() {\n return false;\n }\n}\n"],"file":"map_event.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/mouse/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA","sourcesContent":["import MousePanHandler from './mousepan_handler';\nimport MouseRotateHandler from './mousepitch_hander';\nimport MousePitchHandler from './mouserotate_hander';\n\nexport { MousePanHandler, MouseRotateHandler, MousePitchHandler };\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/mouse/mouse_handler.ts"],"names":["MouseHandler","options","reset","clickTolerance","active","moved","lastPoint","eventButton","e","point","DOM","mouseButton","correctButton","preventDefault","dist","move","suppressClick","enabled","button"],"mappings":";;;;;;;;;;;;;;;AAEA;;AACA;;IACqBA,Y;AAQnB,wBAAYC,OAAZ,EAAiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC/C,SAAKC,KAAL;AACA,SAAKC,cAAL,GAAsBF,OAAO,CAACE,cAAR,IAA0B,CAAhD;AACD;;;;WAED,iBAAe;AACb,WAAKC,MAAL,GAAc,KAAd;AACA,WAAKC,KAAL,GAAa,KAAb;AACA,aAAO,KAAKC,SAAZ;AACA,aAAO,KAAKC,WAAZ;AACD;;;WAED,mBAAiBC,CAAjB,EAAgCC,KAAhC,EAA8C;AAC5C,UAAI,KAAKH,SAAT,EAAoB;AAClB;AACD;;AAED,UAAMC,WAAW,GAAGG,aAAIC,WAAJ,CAAgBH,CAAhB,CAApB;;AACA,UAAI,CAAC,KAAKI,aAAL,CAAmBJ,CAAnB,EAAsBD,WAAtB,CAAL,EAAyC;AACvC;AACD;;AAED,WAAKD,SAAL,GAAiBG,KAAjB;AACA,WAAKF,WAAL,GAAmBA,WAAnB;AACD;;;WAED,yBAAuBC,CAAvB,EAAsCC,KAAtC,EAAoD;AAClD,UAAMH,SAAS,GAAG,KAAKA,SAAvB;;AACA,UAAI,CAACA,SAAL,EAAgB;AACd;AACD;;AACDE,MAAAA,CAAC,CAACK,cAAF;;AAEA,UAAI,8BAAmBL,CAAnB,EAAsB,KAAKD,WAA3B,CAAJ,EAA6C;AAO3C,aAAKL,KAAL;AACA;AACD;;AAED,UAAI,CAAC,KAAKG,KAAN,IAAeI,KAAK,CAACK,IAAN,CAAWR,SAAX,IAAwB,KAAKH,cAAhD,EAAgE;AAC9D;AACD;;AACD,WAAKE,KAAL,GAAa,IAAb;AACA,WAAKC,SAAL,GAAiBG,KAAjB;AAGA,aAAO,KAAKM,IAAL,CAAUT,SAAV,EAAqBG,KAArB,CAAP;AACD;;;WAED,uBAAqBD,CAArB,EAAoC;AAClC,UAAI,CAAC,KAAKF,SAAV,EAAqB;AACnB;AACD;;AACD,UAAMC,WAAW,GAAGG,aAAIC,WAAJ,CAAgBH,CAAhB,CAApB;;AACA,UAAID,WAAW,KAAK,KAAKA,WAAzB,EAAsC;AACpC;AACD;;AACD,UAAI,KAAKF,KAAT,EAAgB;AACdK,qBAAIM,aAAJ;AACD;;AACD,WAAKd,KAAL;AACD;;;WAED,kBAAgB;AACd,WAAKe,OAAL,GAAe,IAAf;AACD;;;WAED,mBAAiB;AACf,WAAKA,OAAL,GAAe,KAAf;AACA,WAAKf,KAAL;AACD;;;WAED,qBAAmB;AACjB,aAAO,KAAKe,OAAZ;AACD;;;WAED,oBAAkB;AAChB,aAAO,KAAKb,MAAZ;AACD;;;WAED,uBAAwBI,CAAxB,EAAuCU,MAAvC,EAAuD;AAErD,aAAO,KAAP;AACD;;;WAED,cAAeZ,SAAf,EAAiCG,KAAjC,EAA+C;AAE7C;AACD","sourcesContent":["// @ts-ignore\nimport Point from '../../geo/point';\nimport DOM from '../../utils/dom';\nimport { buttonStillPressed } from './util';\nexport default class MouseHandler {\n protected enabled: boolean;\n protected active: boolean;\n protected lastPoint: Point;\n protected eventButton: 1 | 2;\n protected moved: boolean;\n protected clickTolerance: number;\n\n constructor(options: { clickTolerance: number }) {\n this.reset();\n this.clickTolerance = options.clickTolerance || 1;\n }\n\n public reset() {\n this.active = false;\n this.moved = false;\n delete this.lastPoint;\n delete this.eventButton;\n }\n\n public mousedown(e: MouseEvent, point: Point) {\n if (this.lastPoint) {\n return;\n }\n\n const eventButton = DOM.mouseButton(e);\n if (!this.correctButton(e, eventButton)) {\n return;\n }\n\n this.lastPoint = point;\n this.eventButton = eventButton;\n }\n\n public mousemoveWindow(e: MouseEvent, point: Point) {\n const lastPoint = this.lastPoint;\n if (!lastPoint) {\n return;\n }\n e.preventDefault();\n\n if (buttonStillPressed(e, this.eventButton)) {\n // Some browsers don't fire a `mouseup` when the mouseup occurs outside\n // the window or iframe:\n // https://github.com/mapbox/mapbox-gl-js/issues/4622\n //\n // If the button is no longer pressed during this `mousemove` it may have\n // been released outside of the window or iframe.\n this.reset();\n return;\n }\n\n if (!this.moved && point.dist(lastPoint) < this.clickTolerance) {\n return;\n }\n this.moved = true;\n this.lastPoint = point;\n\n // implemented by child class\n return this.move(lastPoint, point);\n }\n\n public mouseupWindow(e: MouseEvent) {\n if (!this.lastPoint) {\n return;\n }\n const eventButton = DOM.mouseButton(e);\n if (eventButton !== this.eventButton) {\n return;\n }\n if (this.moved) {\n DOM.suppressClick();\n }\n this.reset();\n }\n\n public enable() {\n this.enabled = true;\n }\n\n public disable() {\n this.enabled = false;\n this.reset();\n }\n\n public isEnabled() {\n return this.enabled;\n }\n\n public isActive() {\n return this.active;\n }\n\n protected correctButton(e: MouseEvent, button: number) {\n // eslint-disable-line\n return false; // implemented by child\n }\n\n protected move(lastPoint: Point, point: Point) {\n // eslint-disable-line\n return; // implemented by child\n }\n}\n"],"file":"mouse_handler.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/mouse/mousepan_handler.ts"],"names":["MousePanHandler","e","point","lastPoint","active","around","panDelta","sub","button","LEFT_BUTTON","ctrlKey","MouseHandler"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAGA;;AACA;;;;;;IACqBA,e;;;;;;;;;;;;WACnB,mBAAiBC,CAAjB,EAAgCC,KAAhC,EAA8C;AAC5C,iHAAgBD,CAAhB,EAAmBC,KAAnB;;AACA,UAAI,KAAKC,SAAT,EAAoB;AAClB,aAAKC,MAAL,GAAc,IAAd;AACD;AACF;;;WAED,cAAYD,SAAZ,EAA8BD,KAA9B,EAA4C;AAC1C,aAAO;AACLG,QAAAA,MAAM,EAAEH,KADH;AAELI,QAAAA,QAAQ,EAAEJ,KAAK,CAACK,GAAN,CAAUJ,SAAV;AAFL,OAAP;AAID;;;WACD,uBAAwBF,CAAxB,EAAuCO,MAAvC,EAAuD;AACrD,aAAOA,MAAM,KAAKC,iBAAX,IAA0B,CAACR,CAAC,CAACS,OAApC;AACD;;;EAhB0CC,sB","sourcesContent":["// @ts-ignore\nimport Point from '../../geo/point';\nimport DOM from '../../utils/dom';\nimport MouseHandler from './mouse_handler';\nimport { buttonStillPressed, LEFT_BUTTON } from './util';\nexport default class MousePanHandler extends MouseHandler {\n public mousedown(e: MouseEvent, point: Point) {\n super.mousedown(e, point);\n if (this.lastPoint) {\n this.active = true;\n }\n }\n\n public move(lastPoint: Point, point: Point) {\n return {\n around: point,\n panDelta: point.sub(lastPoint),\n };\n }\n protected correctButton(e: MouseEvent, button: number) {\n return button === LEFT_BUTTON && !e.ctrlKey;\n }\n}\n"],"file":"mousepan_handler.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/mouse/mousepitch_hander.ts"],"names":["MousePitchHandler","e","button","LEFT_BUTTON","ctrlKey","RIGHT_BUTTON","lastPoint","point","degreesPerPixelMoved","pitchDelta","y","active","preventDefault","MouseHandler"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;IACqBA,iB;;;;;;;;;;;;WACnB,uBAAqBC,CAArB,EAAoCC,MAApC,EAAoD;AAClD,aAAQA,MAAM,KAAKC,iBAAX,IAA0BF,CAAC,CAACG,OAA7B,IAAyCF,MAAM,KAAKG,kBAA3D;AACD;;;WAED,cAAYC,SAAZ,EAA8BC,KAA9B,EAA4C;AAC1C,UAAMC,oBAAoB,GAAG,CAAC,GAA9B;AACA,UAAMC,UAAU,GAAG,CAACF,KAAK,CAACG,CAAN,GAAUJ,SAAS,CAACI,CAArB,IAA0BF,oBAA7C;;AACA,UAAIC,UAAJ,EAAgB;AACd,aAAKE,MAAL,GAAc,IAAd;AACA,eAAO;AAAEF,UAAAA,UAAU,EAAVA;AAAF,SAAP;AACD;AACF;;;WAED,qBAAmBR,CAAnB,EAAkC;AAGhCA,MAAAA,CAAC,CAACW,cAAF;AACD;;;EAlB4CC,sB","sourcesContent":["// @ts-ignore\nimport Point from '../../geo/point';\nimport MouseHandler from './mouse_handler';\nimport { LEFT_BUTTON, RIGHT_BUTTON } from './util';\nexport default class MousePitchHandler extends MouseHandler {\n public correctButton(e: MouseEvent, button: number) {\n return (button === LEFT_BUTTON && e.ctrlKey) || button === RIGHT_BUTTON;\n }\n\n public move(lastPoint: Point, point: Point) {\n const degreesPerPixelMoved = -0.5;\n const pitchDelta = (point.y - lastPoint.y) * degreesPerPixelMoved;\n if (pitchDelta) {\n this.active = true;\n return { pitchDelta };\n }\n }\n\n public contextmenu(e: MouseEvent) {\n // prevent browser context menu when necessary; we don't allow it with rotation\n // because we can't discern rotation gesture start from contextmenu on Mac\n e.preventDefault();\n }\n}\n"],"file":"mousepitch_hander.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/mouse/mouserotate_hander.ts"],"names":["MouseRotateHandler","e","preventDefault","button","LEFT_BUTTON","ctrlKey","RIGHT_BUTTON","lastPoint","point","degreesPerPixelMoved","bearingDelta","x","active","MouseHandler"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;IACqBA,kB;;;;;;;;;;;;WACnB,qBAAmBC,CAAnB,EAAkC;AAGhCA,MAAAA,CAAC,CAACC,cAAF;AACD;;;WACD,uBAAwBD,CAAxB,EAAuCE,MAAvC,EAAuD;AACrD,aAAQA,MAAM,KAAKC,iBAAX,IAA0BH,CAAC,CAACI,OAA7B,IAAyCF,MAAM,KAAKG,kBAA3D;AACD;;;WAED,cAAeC,SAAf,EAAiCC,KAAjC,EAA+C;AAC7C,UAAMC,oBAAoB,GAAG,GAA7B;AACA,UAAMC,YAAY,GAAG,CAACF,KAAK,CAACG,CAAN,GAAUJ,SAAS,CAACI,CAArB,IAA0BF,oBAA/C;;AACA,UAAIC,YAAJ,EAAkB;AAChB,aAAKE,MAAL,GAAc,IAAd;AACA,eAAO;AAAEF,UAAAA,YAAY,EAAZA;AAAF,SAAP;AACD;AACF;;;EAjB6CG,sB","sourcesContent":["// @ts-ignore\nimport Point from '../../geo/point';\nimport MouseHandler from './mouse_handler';\nimport { LEFT_BUTTON, RIGHT_BUTTON } from './util';\nexport default class MouseRotateHandler extends MouseHandler {\n public contextmenu(e: MouseEvent) {\n // prevent browser context menu when necessary; we don't allow it with rotation\n // because we can't discern rotation gesture start from contextmenu on Mac\n e.preventDefault();\n }\n protected correctButton(e: MouseEvent, button: number) {\n return (button === LEFT_BUTTON && e.ctrlKey) || button === RIGHT_BUTTON;\n }\n\n protected move(lastPoint: Point, point: Point) {\n const degreesPerPixelMoved = 0.8;\n const bearingDelta = (point.x - lastPoint.x) * degreesPerPixelMoved;\n if (bearingDelta) {\n this.active = true;\n return { bearingDelta };\n }\n }\n}\n"],"file":"mouserotate_hander.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/mouse/util.ts"],"names":["LEFT_BUTTON","RIGHT_BUTTON","BUTTONS_FLAGS","buttonStillPressed","e","button","flag","buttons","undefined"],"mappings":";;;;;;;;;;;;;;AAAO,IAAMA,WAAW,GAAG,CAApB;;AACA,IAAMC,YAAY,GAAG,CAArB;;AAGA,IAAMC,aAAwC,uEAClDF,WADkD,EACpC,CADoC,iDAElDC,YAFkD,EAEnC,CAFmC,kBAA9C;;;AAKA,SAASE,kBAAT,CAA4BC,CAA5B,EAA2CC,MAA3C,EAA0D;AAC/D,MAAMC,IAAI,GAAGJ,aAAa,CAACG,MAAD,CAA1B;AACA,SAAOD,CAAC,CAACG,OAAF,KAAcC,SAAd,IAA2B,CAACJ,CAAC,CAACG,OAAF,GAAYD,IAAb,MAAuBA,IAAzD;AACD","sourcesContent":["export const LEFT_BUTTON = 0;\nexport const RIGHT_BUTTON = 2;\n\n// the values for each button in MouseEvent.buttons\nexport const BUTTONS_FLAGS: { [key: number]: number } = {\n [LEFT_BUTTON]: 1,\n [RIGHT_BUTTON]: 2,\n};\n\nexport function buttonStillPressed(e: MouseEvent, button: 1 | 2) {\n const flag = BUTTONS_FLAGS[button];\n return e.buttons === undefined || (e.buttons & flag) !== flag;\n}\n"],"file":"util.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/handler/scroll_zoom.ts"],"names":["wheelZoomDelta","defaultZoomRate","wheelZoomRate","maxScalePerFrame","ScrollZoomHandler","map","handler","frameId","isActive","tr","transform","delta","zoomRate","type","Math","abs","scale","exp","fromScale","targetZoom","zoomScale","min","maxZoom","max","minZoom","scaleZoom","startZoom","zoom","easing","smoothOutEasing","finished","t","lastWheelEventTime","k","active","finishTimeout","setTimeout","zooming","triggerRenderFrame","noInertia","needsRenderFrame","zoomDelta","around","aroundPoint","originalEvent","lastWheelEvent","el","getCanvasContainer","enabled","undefined","options","isEnabled","aroundCenter","e","value","deltaMode","window","WheelEvent","DOM_DELTA_LINE","deltaY","nowTime","timeDelta","lastValue","timeout","onTimeout","clearTimeout","shiftKey","start","preventDefault","onScrollFrame","initialEvent","isZooming","pos","DOM","mousePos","LngLat","convert","getCenter","unproject","locationPoint","duration","ease","prevEase","preEase","speed","x","sqrt","y"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { EarthMap } from '../earthmap';\nimport LngLat from '../geo/lng_lat';\nimport Point from '../geo/point';\nimport { Map } from '../map';\nimport { bezier, ease, interpolate, now } from '../util';\nimport DOM from '../utils/dom';\nimport HandlerManager from './handler_manager';\n\n// deltaY value for mouse scroll wheel identification\nconst wheelZoomDelta = 4.000244140625;\n\n// These magic numbers control the rate of zoom. Trackpad events fire at a greater\n// frequency than mouse scroll wheel, so reduce the zoom rate per wheel tick\nconst defaultZoomRate = 1 / 100;\nconst wheelZoomRate = 1 / 450;\n\n// upper bound on how much we scale the map in any single render frame; this\n// is used to limit zoom rate in the case of very fast scrolling\nconst maxScalePerFrame = 2;\n\n/**\n * The `ScrollZoomHandler` allows the user to zoom the map by scrolling.\n */\nclass ScrollZoomHandler {\n private map: Map | EarthMap;\n private el: HTMLElement;\n private enabled: boolean;\n private active: boolean;\n private zooming: boolean;\n private aroundCenter: boolean;\n private around: LngLat;\n private aroundPoint: Point;\n private type: 'wheel' | 'trackpad' | null;\n private lastValue: number;\n private timeout: number | null; // used for delayed-handling of a single wheel movement\n private finishTimeout: number; // used to delay final '{move,zoom}end' events\n\n private lastWheelEvent: any;\n private lastWheelEventTime: number;\n\n private startZoom: number;\n private targetZoom: number;\n private delta: number;\n private easing: (time: number) => number;\n private prevEase: {\n start: number;\n duration: number;\n easing: (_: number) => number;\n };\n\n private frameId: boolean | null;\n private handler: HandlerManager;\n\n private defaultZoomRate: number;\n private wheelZoomRate: number;\n\n /**\n * @private\n */\n constructor(map: Map | EarthMap, handler: HandlerManager) {\n this.map = map;\n this.el = map.getCanvasContainer();\n this.handler = handler;\n\n this.delta = 0;\n this.defaultZoomRate = defaultZoomRate;\n this.wheelZoomRate = wheelZoomRate;\n }\n\n /**\n * Set the zoom rate of a trackpad\n * @param {number} [zoomRate=1/100] The rate used to scale trackpad movement to a zoom value.\n * @example\n * // Speed up trackpad zoom\n * map.scrollZoom.setZoomRate(1/25);\n */\n public setZoomRate(zoomRate: number) {\n this.defaultZoomRate = zoomRate;\n }\n\n /**\n * Set the zoom rate of a mouse wheel\n * @param {number} [wheelZoomRate=1/450] The rate used to scale mouse wheel movement to a zoom value.\n * @example\n * // Slow down zoom of mouse wheel\n * map.scrollZoom.setWheelZoomRate(1/600);\n */\n public setWheelZoomRate(zoomRate: number) {\n this.wheelZoomRate = zoomRate;\n }\n\n /**\n * Returns a Boolean indicating whether the \"scroll to zoom\" interaction is enabled.\n *\n * @returns {boolean} `true` if the \"scroll to zoom\" interaction is enabled.\n */\n public isEnabled() {\n return !!this.enabled;\n }\n\n /*\n * Active state is turned on and off with every scroll wheel event and is set back to false before the map\n * render is called, so _active is not a good candidate for determining if a scroll zoom animation is in\n * progress.\n */\n public isActive() {\n return !!this.active || this.finishTimeout !== undefined;\n }\n\n public isZooming() {\n return !!this.zooming;\n }\n\n /**\n * Enables the \"scroll to zoom\" interaction.\n *\n * @param {Object} [options] Options object.\n * @param {string} [options.around] If \"center\" is passed, map will zoom around center of map\n *\n * @example\n * map.scrollZoom.enable();\n * @example\n * map.scrollZoom.enable({ around: 'center' })\n */\n public enable(options?: any) {\n if (this.isEnabled()) {\n return;\n }\n this.enabled = true;\n this.aroundCenter = options && options.around === 'center';\n }\n\n /**\n * Disables the \"scroll to zoom\" interaction.\n *\n * @example\n * map.scrollZoom.disable();\n */\n public disable() {\n if (!this.isEnabled()) {\n return;\n }\n this.enabled = false;\n }\n\n public wheel(e: WheelEvent) {\n if (!this.isEnabled()) {\n return;\n }\n // Remove `any` cast when https://github.com/facebook/flow/issues/4879 is fixed.\n let value =\n e.deltaMode === window.WheelEvent.DOM_DELTA_LINE\n ? e.deltaY * 40\n : e.deltaY;\n const nowTime = now();\n const timeDelta = nowTime - (this.lastWheelEventTime || 0);\n\n this.lastWheelEventTime = nowTime;\n\n if (value !== 0 && value % wheelZoomDelta === 0) {\n // This one is definitely a mouse wheel event.\n this.type = 'wheel';\n } else if (value !== 0 && Math.abs(value) < 4) {\n // This one is definitely a trackpad event because it is so small.\n this.type = 'trackpad';\n } else if (timeDelta > 400) {\n // This is likely a new scroll action.\n this.type = null;\n this.lastValue = value;\n\n // Start a timeout in case this was a singular event, and dely it by up to 40ms.\n // @ts-ignore\n this.timeout = setTimeout(this.onTimeout, 40, e);\n } else if (!this.type) {\n // This is a repeating event, but we don't know the type of event just yet.\n // If the delta per time is small, we assume it's a fast trackpad; otherwise we switch into wheel mode.\n this.type = Math.abs(timeDelta * value) < 200 ? 'trackpad' : 'wheel';\n\n // Make sure our delayed event isn't fired again, because we accumulate\n // the previous event (which was less than 40ms ago) into this event.\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n value += this.lastValue;\n }\n }\n\n // Slow down zoom if shift key is held for more precise zooming\n if (e.shiftKey && value) {\n value = value / 4;\n }\n // Only fire the callback if we actually know what type of scrolling device the user uses.\n if (this.type) {\n this.lastWheelEvent = e;\n this.delta -= value;\n if (!this.active) {\n this.start(e);\n }\n }\n\n e.preventDefault();\n }\n\n public renderFrame() {\n return this.onScrollFrame();\n }\n\n public reset() {\n this.active = false;\n }\n\n private onScrollFrame = () => {\n if (!this.frameId) {\n return;\n }\n this.frameId = null;\n\n if (!this.isActive()) {\n return;\n }\n const tr = this.map.transform;\n\n // if we've had scroll events since the last render frame, consume the\n // accumulated delta, and update the target zoom level accordingly\n if (this.delta !== 0) {\n // For trackpad events and single mouse wheel ticks, use the default zoom rate\n const zoomRate =\n this.type === 'wheel' && Math.abs(this.delta) > wheelZoomDelta\n ? this.wheelZoomRate\n : this.defaultZoomRate;\n // Scale by sigmoid of scroll wheel delta.\n let scale =\n maxScalePerFrame / (1 + Math.exp(-Math.abs(this.delta * zoomRate)));\n\n if (this.delta < 0 && scale !== 0) {\n scale = 1 / scale;\n }\n\n const fromScale =\n typeof this.targetZoom === 'number'\n ? tr.zoomScale(this.targetZoom)\n : tr.scale;\n this.targetZoom = Math.min(\n tr.maxZoom,\n Math.max(tr.minZoom, tr.scaleZoom(fromScale * scale)),\n );\n\n // if this is a mouse wheel, refresh the starting zoom and easing\n // function we're using to smooth out the zooming between wheel\n // events\n if (this.type === 'wheel') {\n this.startZoom = tr.zoom;\n this.easing = this.smoothOutEasing(200);\n }\n\n this.delta = 0;\n }\n\n const targetZoom =\n typeof this.targetZoom === 'number' ? this.targetZoom : tr.zoom;\n const startZoom = this.startZoom;\n const easing = this.easing;\n\n let finished = false;\n let zoom;\n if (this.type === 'wheel' && startZoom && easing) {\n const t = Math.min((now() - this.lastWheelEventTime) / 200, 1);\n const k = easing(t);\n zoom = interpolate(startZoom, targetZoom, k);\n if (t < 1) {\n if (!this.frameId) {\n this.frameId = true;\n }\n } else {\n finished = true;\n }\n } else {\n zoom = targetZoom;\n finished = true;\n }\n\n this.active = true;\n\n if (finished) {\n this.active = false;\n // @ts-ignore\n this.finishTimeout = setTimeout(() => {\n this.zooming = false;\n this.handler.triggerRenderFrame();\n // @ts-ignore\n delete this.targetZoom;\n // @ts-ignore\n delete this.finishTimeout;\n }, 200);\n }\n\n return {\n noInertia: true,\n needsRenderFrame: !finished,\n zoomDelta: zoom - tr.zoom,\n around: this.aroundPoint,\n originalEvent: this.lastWheelEvent,\n };\n };\n\n private onTimeout(initialEvent: any) {\n this.type = 'wheel';\n this.delta -= this.lastValue;\n if (!this.active && this.start) {\n this.start(initialEvent);\n }\n }\n\n private start(e: any) {\n if (!this.delta) {\n return;\n }\n\n if (this.frameId) {\n this.frameId = null;\n }\n\n this.active = true;\n if (!this.isZooming()) {\n this.zooming = true;\n }\n\n if (this.finishTimeout) {\n clearTimeout(this.finishTimeout);\n // @ts-ignore\n delete this.finishTimeout;\n }\n\n const pos = DOM.mousePos(this.el, e);\n\n this.around = LngLat.convert(\n this.aroundCenter ? this.map.getCenter() : this.map.unproject(pos),\n );\n this.aroundPoint = this.map.transform.locationPoint(this.around);\n if (!this.frameId) {\n this.frameId = true;\n this.handler.triggerRenderFrame();\n }\n }\n\n private smoothOutEasing(duration: number) {\n let easing = ease;\n\n if (this.prevEase) {\n const preEase = this.prevEase;\n const t = (now() - preEase.start) / preEase.duration;\n const speed = preEase.easing(t + 0.01) - preEase.easing(t);\n\n // Quick hack to make new bezier that is continuous with last\n const x = (0.27 / Math.sqrt(speed * speed + 0.0001)) * 0.01;\n const y = Math.sqrt(0.27 * 0.27 - x * x);\n\n easing = bezier(x, y, 0.25, 1);\n }\n\n this.prevEase = {\n start: now(),\n duration,\n easing,\n };\n\n return easing;\n }\n}\n\nexport default ScrollZoomHandler;\n"],"file":"scroll_zoom.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/shim/dblclick_zoom.ts"],"names":["DoubleClickZoomHandler","clickZoom","TapZoom","tapZoom","enable","disable","isEnabled","isActive"],"mappings":";;;;;;;;;;;;;;;IAOqBA,sB;AAOnB,kCAAYC,SAAZ,EAAyCC,OAAzC,EAAkE;AAAA;AAAA;AAAA;AAChE,SAAKD,SAAL,GAAiBA,SAAjB;AACA,SAAKE,OAAL,GAAeD,OAAf;AACD;;;;WAQD,kBAAgB;AACd,WAAKD,SAAL,CAAeG,MAAf;AACA,WAAKD,OAAL,CAAaC,MAAb;AACD;;;WAQD,mBAAiB;AACf,WAAKH,SAAL,CAAeI,OAAf;AACA,WAAKF,OAAL,CAAaE,OAAb;AACD;;;WAOD,qBAAmB;AACjB,aAAO,KAAKJ,SAAL,CAAeK,SAAf,MAA8B,KAAKH,OAAL,CAAaG,SAAb,EAArC;AACD;;;WAOD,oBAAkB;AAChB,aAAO,KAAKL,SAAL,CAAeM,QAAf,MAA6B,KAAKJ,OAAL,CAAaI,QAAb,EAApC;AACD","sourcesContent":["import ClickZoomHandler from '../click_zoom';\nimport TapZoomHandler from '../tap/tap_zoom';\n\n/**\n * The `DoubleClickZoomHandler` allows the user to zoom the map at a point by\n * double clicking or double tapping.\n */\nexport default class DoubleClickZoomHandler {\n private clickZoom: ClickZoomHandler;\n private tapZoom: TapZoomHandler;\n\n /**\n * @private\n */\n constructor(clickZoom: ClickZoomHandler, TapZoom: TapZoomHandler) {\n this.clickZoom = clickZoom;\n this.tapZoom = TapZoom;\n }\n\n /**\n * Enables the \"double click to zoom\" interaction.\n *\n * @example\n * map.doubleClickZoom.enable();\n */\n public enable() {\n this.clickZoom.enable();\n this.tapZoom.enable();\n }\n\n /**\n * Disables the \"double click to zoom\" interaction.\n *\n * @example\n * map.doubleClickZoom.disable();\n */\n public disable() {\n this.clickZoom.disable();\n this.tapZoom.disable();\n }\n\n /**\n * Returns a Boolean indicating whether the \"double click to zoom\" interaction is enabled.\n *\n * @returns {boolean} `true` if the \"double click to zoom\" interaction is enabled.\n */\n public isEnabled() {\n return this.clickZoom.isEnabled() && this.tapZoom.isEnabled();\n }\n\n /**\n * Returns a Boolean indicating whether the \"double click to zoom\" interaction is active, i.e. currently being used.\n *\n * @returns {boolean} `true` if the \"double click to zoom\" interaction is active.\n */\n public isActive() {\n return this.clickZoom.isActive() || this.tapZoom.isActive();\n }\n}\n"],"file":"dblclick_zoom.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/shim/drag_pan.ts"],"names":["DragPanHandler","el","mousePan","touchPan","options","inertiaOptions","enable","isMini","classList","add","disable","remove","isEnabled","isActive"],"mappings":";;;;;;;;;;;;;;;AAAA;;IAeqBA,c;AAQnB,0BACEC,EADF,EAEEC,QAFF,EAGEC,QAHF,EAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,SAAKF,EAAL,GAAUA,EAAV;AACA,SAAKC,QAAL,GAAgBA,QAAhB;AACA,SAAKC,QAAL,GAAgBA,QAAhB;AACD;;;;WAqBD,gBAAcC,OAAd,EAAyC;AACvC,WAAKC,cAAL,GAAsBD,OAAO,IAAI,EAAjC;AACA,WAAKF,QAAL,CAAcI,MAAd;AACA,WAAKH,QAAL,CAAcG,MAAd;;AACA,UAAI,CAACC,eAAL,EAAa;AACX,aAAKN,EAAL,CAAQO,SAAR,CAAkBC,GAAlB,CAAsB,mBAAtB;AACD;AACF;;;WAQD,mBAAiB;AACf,WAAKP,QAAL,CAAcQ,OAAd;AACA,WAAKP,QAAL,CAAcO,OAAd;;AACA,UAAI,CAACH,eAAL,EAAa;AACX,aAAKN,EAAL,CAAQO,SAAR,CAAkBG,MAAlB,CAAyB,mBAAzB;AACD;AACF;;;WAOD,qBAAmB;AACjB,aAAO,KAAKT,QAAL,CAAcU,SAAd,MAA6B,KAAKT,QAAL,CAAcS,SAAd,EAApC;AACD;;;WAOD,oBAAkB;AAChB,aAAO,KAAKV,QAAL,CAAcW,QAAd,MAA4B,KAAKV,QAAL,CAAcU,QAAd,EAAnC;AACD","sourcesContent":["import { isMini } from '@antv/l7-utils';\nimport { MousePanHandler } from '../mouse/';\nimport { TouchPanHandler } from '../touch/';\n\nexport interface IDragPanOptions {\n linearity?: number;\n easing?: (t: number) => number;\n deceleration?: number;\n maxSpeed?: number;\n}\n\n/**\n * The `DragPanHandler` allows the user to pan the map by clicking and dragging\n * the cursor.\n */\nexport default class DragPanHandler {\n public inertiaOptions: IDragPanOptions;\n private el: HTMLElement;\n private mousePan: MousePanHandler;\n private touchPan: TouchPanHandler;\n /**\n * @private\n */\n constructor(\n el: HTMLElement,\n mousePan: MousePanHandler,\n touchPan: TouchPanHandler,\n ) {\n this.el = el;\n this.mousePan = mousePan;\n this.touchPan = touchPan;\n }\n\n /**\n * Enables the \"drag to pan\" interaction.\n *\n * @param {Object} [options] Options object\n * @param {number} [options.linearity=0] factor used to scale the drag velocity\n * @param {Function} [options.easing=bezier(0, 0, 0.3, 1)] easing function applled to `map.panTo` when applying the drag.\n * @param {number} [options.maxSpeed=1400] the maximum value of the drag velocity.\n * @param {number} [options.deceleration=2500] the rate at which the speed reduces after the pan ends.\n *\n * @example\n * map.dragPan.enable();\n * @example\n * map.dragPan.enable({\n * linearity: 0.3,\n * easing: bezier(0, 0, 0.3, 1),\n * maxSpeed: 1400,\n * deceleration: 2500,\n * });\n */\n public enable(options?: IDragPanOptions) {\n this.inertiaOptions = options || {};\n this.mousePan.enable();\n this.touchPan.enable();\n if (!isMini) {\n this.el.classList.add('l7-touch-drag-pan');\n }\n }\n\n /**\n * Disables the \"drag to pan\" interaction.\n *\n * @example\n * map.dragPan.disable();\n */\n public disable() {\n this.mousePan.disable();\n this.touchPan.disable();\n if (!isMini) {\n this.el.classList.remove('l7-touch-drag-pan');\n }\n }\n\n /**\n * Returns a Boolean indicating whether the \"drag to pan\" interaction is enabled.\n *\n * @returns {boolean} `true` if the \"drag to pan\" interaction is enabled.\n */\n public isEnabled() {\n return this.mousePan.isEnabled() && this.touchPan.isEnabled();\n }\n\n /**\n * Returns a Boolean indicating whether the \"drag to pan\" interaction is active, i.e. currently being used.\n *\n * @returns {boolean} `true` if the \"drag to pan\" interaction is active.\n */\n public isActive() {\n return this.mousePan.isActive() || this.touchPan.isActive();\n }\n}\n"],"file":"drag_pan.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/shim/drag_rotate.ts"],"names":["DragRotateHandler","options","mouseRotate","mousePitch","pitchWithRotate","enable","disable","isEnabled","isActive"],"mappings":";;;;;;;;;;;;;;;IAMqBA,iB;AAYnB,6BACEC,OADF,EAEEC,WAFF,EAGEC,UAHF,EAIE;AAAA;AAAA;AAAA;AAAA;AACA,SAAKC,eAAL,GAAuBH,OAAO,CAACG,eAA/B;AACA,SAAKF,WAAL,GAAmBA,WAAnB;AACA,SAAKC,UAAL,GAAkBA,UAAlB;AACD;;;;WAQD,kBAAgB;AACd,WAAKD,WAAL,CAAiBG,MAAjB;;AACA,UAAI,KAAKD,eAAT,EAA0B;AACxB,aAAKD,UAAL,CAAgBE,MAAhB;AACD;AACF;;;WAQD,mBAAiB;AACf,WAAKH,WAAL,CAAiBI,OAAjB;AACA,WAAKH,UAAL,CAAgBG,OAAhB;AACD;;;WAOD,qBAAmB;AACjB,aACE,KAAKJ,WAAL,CAAiBK,SAAjB,OACC,CAAC,KAAKH,eAAN,IAAyB,KAAKD,UAAL,CAAgBI,SAAhB,EAD1B,CADF;AAID;;;WAOD,oBAAkB;AAChB,aAAO,KAAKL,WAAL,CAAiBM,QAAjB,MAA+B,KAAKL,UAAL,CAAgBK,QAAhB,EAAtC;AACD","sourcesContent":["import { MousePitchHandler, MouseRotateHandler } from '../mouse';\n\n/**\n * The `DragRotateHandler` allows the user to rotate the map by clicking and\n * dragging the cursor while holding the right mouse button or `ctrl` key.\n */\nexport default class DragRotateHandler {\n private mouseRotate: MouseRotateHandler;\n private mousePitch: MousePitchHandler;\n private pitchWithRotate: boolean;\n\n /**\n * @param {Object} [options]\n * @param {number} [options.bearingSnap] The threshold, measured in degrees, that determines when the map's\n * bearing will snap to north.\n * @param {bool} [options.pitchWithRotate=true] Control the map pitch in addition to the bearing\n * @private\n */\n constructor(\n options: { pitchWithRotate: boolean },\n mouseRotate: MouseRotateHandler,\n mousePitch: MousePitchHandler,\n ) {\n this.pitchWithRotate = options.pitchWithRotate;\n this.mouseRotate = mouseRotate;\n this.mousePitch = mousePitch;\n }\n\n /**\n * Enables the \"drag to rotate\" interaction.\n *\n * @example\n * map.dragRotate.enable();\n */\n public enable() {\n this.mouseRotate.enable();\n if (this.pitchWithRotate) {\n this.mousePitch.enable();\n }\n }\n\n /**\n * Disables the \"drag to rotate\" interaction.\n *\n * @example\n * map.dragRotate.disable();\n */\n public disable() {\n this.mouseRotate.disable();\n this.mousePitch.disable();\n }\n\n /**\n * Returns a Boolean indicating whether the \"drag to rotate\" interaction is enabled.\n *\n * @returns {boolean} `true` if the \"drag to rotate\" interaction is enabled.\n */\n public isEnabled() {\n return (\n this.mouseRotate.isEnabled() &&\n (!this.pitchWithRotate || this.mousePitch.isEnabled())\n );\n }\n\n /**\n * Returns a Boolean indicating whether the \"drag to rotate\" interaction is active, i.e. currently being used.\n *\n * @returns {boolean} `true` if the \"drag to rotate\" interaction is active.\n */\n public isActive() {\n return this.mouseRotate.isActive() || this.mousePitch.isActive();\n }\n}\n"],"file":"drag_rotate.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/shim/touch_zoom_rotate.ts"],"names":["TouchZoomRotateHandler","el","touchZoom","touchRotate","tapDragZoom","rotationDisabled","enabled","options","enable","isMini","classList","add","disable","remove","isEnabled","isActive"],"mappings":";;;;;;;;;;;;;;;AAAA;;IAWqBA,sB;AAWnB,kCACEC,EADF,EAEEC,SAFF,EAGEC,WAHF,EAIEC,WAJF,EAKE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,SAAKH,EAAL,GAAUA,EAAV;AACA,SAAKC,SAAL,GAAiBA,SAAjB;AACA,SAAKC,WAAL,GAAmBA,WAAnB;AACA,SAAKC,WAAL,GAAmBA,WAAnB;AACA,SAAKC,gBAAL,GAAwB,KAAxB;AACA,SAAKC,OAAL,GAAe,IAAf;AACD;;;;WAaD,gBAAcC,OAAd,EAA8C;AAC5C,WAAKL,SAAL,CAAeM,MAAf,CAAsBD,OAAtB;;AACA,UAAI,CAAC,KAAKF,gBAAV,EAA4B;AAC1B,aAAKF,WAAL,CAAiBK,MAAjB,CAAwBD,OAAxB;AACD;;AACD,WAAKH,WAAL,CAAiBI,MAAjB;;AACA,UAAI,CAACC,eAAL,EAAa;AACX,aAAKR,EAAL,CAAQS,SAAR,CAAkBC,GAAlB,CAAsB,sBAAtB;AACD;AACF;;;WAQD,mBAAiB;AACf,WAAKT,SAAL,CAAeU,OAAf;AACA,WAAKT,WAAL,CAAiBS,OAAjB;AACA,WAAKR,WAAL,CAAiBQ,OAAjB;;AACA,UAAI,CAACH,eAAL,EAAa;AACX,aAAKR,EAAL,CAAQS,SAAR,CAAkBG,MAAlB,CAAyB,sBAAzB;AACD;AACF;;;WAOD,qBAAmB;AACjB,aACE,KAAKX,SAAL,CAAeY,SAAf,OACC,KAAKT,gBAAL,IAAyB,KAAKF,WAAL,CAAiBW,SAAjB,EAD1B,KAEA,KAAKV,WAAL,CAAiBU,SAAjB,EAHF;AAKD;;;WAOD,oBAAkB;AAChB,aACE,KAAKZ,SAAL,CAAea,QAAf,MACA,KAAKZ,WAAL,CAAiBY,QAAjB,EADA,IAEA,KAAKX,WAAL,CAAiBW,QAAjB,EAHF;AAKD;;;WASD,2BAAyB;AACvB,WAAKV,gBAAL,GAAwB,IAAxB;AACA,WAAKF,WAAL,CAAiBS,OAAjB;AACD;;;WASD,0BAAwB;AACtB,WAAKP,gBAAL,GAAwB,KAAxB;;AACA,UAAI,KAAKH,SAAL,CAAeY,SAAf,EAAJ,EAAgC;AAC9B,aAAKX,WAAL,CAAiBK,MAAjB;AACD;AACF","sourcesContent":["import { isMini } from '@antv/l7-utils';\nimport TapDragZoomHandler from '../tap/tap_drag_zoom';\nimport { TouchRotateHandler, TouchZoomHandler } from '../touch';\n\n/**\n * The `TouchZoomRotateHandler` allows the user to zoom and rotate the map by\n * pinching on a touchscreen.\n *\n * They can zoom with one finger by double tapping and dragging. On the second tap,\n * hold the finger down and drag up or down to zoom in or out.\n */\nexport default class TouchZoomRotateHandler {\n private el: HTMLElement;\n private touchZoom: TouchZoomHandler;\n private touchRotate: TouchRotateHandler;\n private tapDragZoom: TapDragZoomHandler;\n private rotationDisabled: boolean;\n private enabled: boolean;\n\n /**\n * @private\n */\n constructor(\n el: HTMLElement,\n touchZoom: TouchZoomHandler,\n touchRotate: TouchRotateHandler,\n tapDragZoom: TapDragZoomHandler,\n ) {\n this.el = el;\n this.touchZoom = touchZoom;\n this.touchRotate = touchRotate;\n this.tapDragZoom = tapDragZoom;\n this.rotationDisabled = false;\n this.enabled = true;\n }\n\n /**\n * Enables the \"pinch to rotate and zoom\" interaction.\n *\n * @param {Object} [options] Options object.\n * @param {string} [options.around] If \"center\" is passed, map will zoom around the center\n *\n * @example\n * map.touchZoomRotate.enable();\n * @example\n * map.touchZoomRotate.enable({ around: 'center' });\n */\n public enable(options: { around?: 'center' }) {\n this.touchZoom.enable(options);\n if (!this.rotationDisabled) {\n this.touchRotate.enable(options);\n }\n this.tapDragZoom.enable();\n if (!isMini) {\n this.el.classList.add('l7-touch-zoom-rotate');\n }\n }\n\n /**\n * Disables the \"pinch to rotate and zoom\" interaction.\n *\n * @example\n * map.touchZoomRotate.disable();\n */\n public disable() {\n this.touchZoom.disable();\n this.touchRotate.disable();\n this.tapDragZoom.disable();\n if (!isMini) {\n this.el.classList.remove('l7-touch-zoom-rotate');\n }\n }\n\n /**\n * Returns a Boolean indicating whether the \"pinch to rotate and zoom\" interaction is enabled.\n *\n * @returns {boolean} `true` if the \"pinch to rotate and zoom\" interaction is enabled.\n */\n public isEnabled() {\n return (\n this.touchZoom.isEnabled() &&\n (this.rotationDisabled || this.touchRotate.isEnabled()) &&\n this.tapDragZoom.isEnabled()\n );\n }\n\n /**\n * Returns true if the handler is enabled and has detected the start of a zoom/rotate gesture.\n *\n * @returns {boolean} //eslint-disable-line\n */\n public isActive() {\n return (\n this.touchZoom.isActive() ||\n this.touchRotate.isActive() ||\n this.tapDragZoom.isActive()\n );\n }\n\n /**\n * Disables the \"pinch to rotate\" interaction, leaving the \"pinch to zoom\"\n * interaction enabled.\n *\n * @example\n * map.touchZoomRotate.disableRotation();\n */\n public disableRotation() {\n this.rotationDisabled = true;\n this.touchRotate.disable();\n }\n\n /**\n * Enables the \"pinch to rotate\" interaction.\n *\n * @example\n * map.touchZoomRotate.enable();\n * map.touchZoomRotate.enableRotation();\n */\n public enableRotation() {\n this.rotationDisabled = false;\n if (this.touchZoom.isEnabled()) {\n this.touchRotate.enable();\n }\n }\n}\n"],"file":"touch_zoom_rotate.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/tap/single_tap_recognizer.ts"],"names":["getCentroid","points","sum","Point","point","_add","div","length","MAX_TAP_INTERVAL","MAX_TOUCH_TIME","MAX_DIST","SingleTapRecognizer","options","reset","numTouches","centroid","startTime","touches","aborted","e","mapTouches","undefined","timeStamp","newTouches","id","prevPos","pos","dist"],"mappings":";;;;;;;;;;;;;;;AACA;;AACA;;;;;;;;AAEA,SAASA,WAAT,CAAqBC,MAArB,EAAsC;AACpC,MAAMC,GAAG,GAAG,IAAIC,cAAJ,CAAU,CAAV,EAAa,CAAb,CAAZ;;AADoC,6CAEhBF,MAFgB;AAAA;;AAAA;AAEpC,wDAA4B;AAAA,UAAjBG,KAAiB;;AAC1BF,MAAAA,GAAG,CAACG,IAAJ,CAASD,KAAT;AACD;AAJmC;AAAA;AAAA;AAAA;AAAA;;AAMpC,SAAOF,GAAG,CAACI,GAAJ,CAAQL,MAAM,CAACM,MAAf,CAAP;AACD;;AAEM,IAAMC,gBAAgB,GAAG,GAAzB;;AACA,IAAMC,cAAc,GAAG,GAAvB;;AACA,IAAMC,QAAQ,GAAG,EAAjB;;;IAEcC,mB;AAOnB,+BAAYC,OAAZ,EAA6C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC3C,SAAKC,KAAL;AACA,SAAKC,UAAL,GAAkBF,OAAO,CAACE,UAA1B;AACD;;;;WAED,iBAAe;AACb,aAAO,KAAKC,QAAZ;AACA,aAAO,KAAKC,SAAZ;AACA,aAAO,KAAKC,OAAZ;AACA,WAAKC,OAAL,GAAe,KAAf;AACD;;;WAED,oBAAkBC,CAAlB,EAAiClB,MAAjC,EAAkDmB,UAAlD,EAAuE;AACrE,UAAI,KAAKL,QAAL,IAAiBK,UAAU,CAACb,MAAX,GAAoB,KAAKO,UAA9C,EAA0D;AACxD,aAAKI,OAAL,GAAe,IAAf;AACD;;AACD,UAAI,KAAKA,OAAT,EAAkB;AAChB;AACD;;AAED,UAAI,KAAKF,SAAL,KAAmBK,SAAvB,EAAkC;AAChC,aAAKL,SAAL,GAAiBG,CAAC,CAACG,SAAnB;AACD;;AAED,UAAIF,UAAU,CAACb,MAAX,KAAsB,KAAKO,UAA/B,EAA2C;AACzC,aAAKC,QAAL,GAAgBf,WAAW,CAACC,MAAD,CAA3B;AACA,aAAKgB,OAAL,GAAe,gCAAaG,UAAb,EAAyBnB,MAAzB,CAAf;AACD;AACF;;;WAED,mBAAiBkB,CAAjB,EAAgClB,MAAhC,EAAiDmB,UAAjD,EAAsE;AACpE,UAAI,KAAKF,OAAL,IAAgB,CAAC,KAAKH,QAA1B,EAAoC;AAClC;AACD;;AAED,UAAMQ,UAAU,GAAG,gCAAaH,UAAb,EAAyBnB,MAAzB,CAAnB;;AACA,WAAK,IAAMuB,EAAX,IAAiB,KAAKP,OAAtB,EAA+B;AAC7B,YAAI,KAAKA,OAAL,CAAaO,EAAb,CAAJ,EAAsB;AACpB,cAAMC,OAAO,GAAG,KAAKR,OAAL,CAAaO,EAAb,CAAhB;AACA,cAAME,GAAG,GAAGH,UAAU,CAACC,EAAD,CAAtB;;AACA,cAAI,CAACE,GAAD,IAAQA,GAAG,CAACC,IAAJ,CAASF,OAAT,IAAoBf,QAAhC,EAA0C;AACxC,iBAAKQ,OAAL,GAAe,IAAf;AACD;AACF;AACF;AACF;;;WAED,kBAAgBC,CAAhB,EAA+BlB,MAA/B,EAAgDmB,UAAhD,EAAqE;AACnE,UAAI,CAAC,KAAKL,QAAN,IAAkBI,CAAC,CAACG,SAAF,GAAc,KAAKN,SAAnB,GAA+BP,cAArD,EAAqE;AACnE,aAAKS,OAAL,GAAe,IAAf;AACD;;AAED,UAAIE,UAAU,CAACb,MAAX,KAAsB,CAA1B,EAA6B;AAC3B,YAAMQ,QAAQ,GAAG,CAAC,KAAKG,OAAN,IAAiB,KAAKH,QAAvC;AACA,aAAKF,KAAL;;AACA,YAAIE,QAAJ,EAAc;AACZ,iBAAOA,QAAP;AACD;AACF;AACF","sourcesContent":["// @ts-ignore\nimport Point from '../../geo/point';\nimport { indexTouches } from '../handler_util';\n\nfunction getCentroid(points: Point[]) {\n const sum = new Point(0, 0);\n for (const point of points) {\n sum._add(point);\n }\n // @ts-ignore\n return sum.div(points.length);\n}\n\nexport const MAX_TAP_INTERVAL = 500;\nexport const MAX_TOUCH_TIME = 500;\nexport const MAX_DIST = 30;\n\nexport default class SingleTapRecognizer {\n public numTouches: number;\n public centroid: Point;\n public startTime: number;\n public aborted: boolean;\n public touches: { [key: string]: Point };\n\n constructor(options: { numTouches: number }) {\n this.reset();\n this.numTouches = options.numTouches;\n }\n\n public reset() {\n delete this.centroid;\n delete this.startTime;\n delete this.touches;\n this.aborted = false;\n }\n\n public touchstart(e: TouchEvent, points: Point[], mapTouches: Touch[]) {\n if (this.centroid || mapTouches.length > this.numTouches) {\n this.aborted = true;\n }\n if (this.aborted) {\n return;\n }\n\n if (this.startTime === undefined) {\n this.startTime = e.timeStamp;\n }\n\n if (mapTouches.length === this.numTouches) {\n this.centroid = getCentroid(points);\n this.touches = indexTouches(mapTouches, points);\n }\n }\n\n public touchmove(e: TouchEvent, points: Point[], mapTouches: Touch[]) {\n if (this.aborted || !this.centroid) {\n return;\n }\n\n const newTouches = indexTouches(mapTouches, points);\n for (const id in this.touches) {\n if (this.touches[id]) {\n const prevPos = this.touches[id];\n const pos = newTouches[id];\n if (!pos || pos.dist(prevPos) > MAX_DIST) {\n this.aborted = true;\n }\n }\n }\n }\n\n public touchend(e: TouchEvent, points: Point[], mapTouches: Touch[]) {\n if (!this.centroid || e.timeStamp - this.startTime > MAX_TOUCH_TIME) {\n this.aborted = true;\n }\n\n if (mapTouches.length === 0) {\n const centroid = !this.aborted && this.centroid;\n this.reset();\n if (centroid) {\n return centroid;\n }\n }\n }\n}\n"],"file":"single_tap_recognizer.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/tap/tap_drag_zoom.ts"],"names":["TapDragZoomHandler","tap","TapRecognizer","numTouches","numTaps","reset","active","swipePoint","swipeTouch","tapTime","e","points","mapTouches","timeStamp","MAX_TAP_INTERVAL","touchstart","length","identifier","touchmove","newSwipePoint","dist","y","preventDefault","zoomDelta","point","touchend","enabled"],"mappings":";;;;;;;;;;;;;;;AAEA;;AACA;;IAEqBA,kB;AAQnB,gCAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACZ,SAAKC,GAAL,GAAW,IAAIC,uBAAJ,CAAkB;AAC3BC,MAAAA,UAAU,EAAE,CADe;AAE3BC,MAAAA,OAAO,EAAE;AAFkB,KAAlB,CAAX;AAKA,SAAKC,KAAL;AACD;;;;WAED,iBAAe;AACb,WAAKC,MAAL,GAAc,KAAd;AACA,aAAO,KAAKC,UAAZ;AACA,aAAO,KAAKC,UAAZ;AACA,aAAO,KAAKC,OAAZ;AACA,WAAKR,GAAL,CAASI,KAAT;AACD;;;WAED,oBAAkBK,CAAlB,EAAiCC,MAAjC,EAAkDC,UAAlD,EAAuE;AACrE,UAAI,KAAKL,UAAT,EAAqB;AACnB;AACD;;AAED,UAAI,KAAKE,OAAL,IAAgBC,CAAC,CAACG,SAAF,GAAc,KAAKJ,OAAnB,GAA6BK,uCAAjD,EAAmE;AACjE,aAAKT,KAAL;AACD;;AAED,UAAI,CAAC,KAAKI,OAAV,EAAmB;AACjB,aAAKR,GAAL,CAASc,UAAT,CAAoBL,CAApB,EAAuBC,MAAvB,EAA+BC,UAA/B;AACD,OAFD,MAEO,IAAIA,UAAU,CAACI,MAAX,GAAoB,CAAxB,EAA2B;AAChC,aAAKT,UAAL,GAAkBI,MAAM,CAAC,CAAD,CAAxB;AACA,aAAKH,UAAL,GAAkBI,UAAU,CAAC,CAAD,CAAV,CAAcK,UAAhC;AACD;AACF;;;WAED,mBAAiBP,CAAjB,EAAgCC,MAAhC,EAAiDC,UAAjD,EAAsE;AACpE,UAAI,CAAC,KAAKH,OAAV,EAAmB;AACjB,aAAKR,GAAL,CAASiB,SAAT,CAAmBR,CAAnB,EAAsBC,MAAtB,EAA8BC,UAA9B;AACD,OAFD,MAEO,IAAI,KAAKL,UAAT,EAAqB;AAC1B,YAAIK,UAAU,CAAC,CAAD,CAAV,CAAcK,UAAd,KAA6B,KAAKT,UAAtC,EAAkD;AAChD;AACD;;AAED,YAAMW,aAAa,GAAGR,MAAM,CAAC,CAAD,CAA5B;AACA,YAAMS,IAAI,GAAGD,aAAa,CAACE,CAAd,GAAkB,KAAKd,UAAL,CAAgBc,CAA/C;AACA,aAAKd,UAAL,GAAkBY,aAAlB;AAEAT,QAAAA,CAAC,CAACY,cAAF;AACA,aAAKhB,MAAL,GAAc,IAAd;AAEA,eAAO;AACLiB,UAAAA,SAAS,EAAEH,IAAI,GAAG;AADb,SAAP;AAGD;AACF;;;WAED,kBAAgBV,CAAhB,EAA+BC,MAA/B,EAAgDC,UAAhD,EAAqE;AACnE,UAAI,CAAC,KAAKH,OAAV,EAAmB;AACjB,YAAMe,KAAK,GAAG,KAAKvB,GAAL,CAASwB,QAAT,CAAkBf,CAAlB,EAAqBC,MAArB,EAA6BC,UAA7B,CAAd;;AACA,YAAIY,KAAJ,EAAW;AACT,eAAKf,OAAL,GAAeC,CAAC,CAACG,SAAjB;AACD;AACF,OALD,MAKO,IAAI,KAAKN,UAAT,EAAqB;AAC1B,YAAIK,UAAU,CAACI,MAAX,KAAsB,CAA1B,EAA6B;AAC3B,eAAKX,KAAL;AACD;AACF;AACF;;;WAED,uBAAqB;AACnB,WAAKA,KAAL;AACD;;;WAED,kBAAgB;AACd,WAAKqB,OAAL,GAAe,IAAf;AACD;;;WAED,mBAAiB;AACf,WAAKA,OAAL,GAAe,KAAf;AACA,WAAKrB,KAAL;AACD;;;WAED,qBAAmB;AACjB,aAAO,KAAKqB,OAAZ;AACD;;;WAED,oBAAkB;AAChB,aAAO,KAAKpB,MAAZ;AACD","sourcesContent":["// @ts-ignore\nimport Point from '../../geo/point';\nimport { MAX_TAP_INTERVAL } from './single_tap_recognizer';\nimport TapRecognizer from './tap_recognizer';\n\nexport default class TapDragZoomHandler {\n public enabled: boolean;\n public active: boolean;\n public swipePoint: Point;\n public swipeTouch: number;\n public tapTime: number;\n public tap: TapRecognizer;\n\n constructor() {\n this.tap = new TapRecognizer({\n numTouches: 1,\n numTaps: 1,\n });\n\n this.reset();\n }\n\n public reset() {\n this.active = false;\n delete this.swipePoint;\n delete this.swipeTouch;\n delete this.tapTime;\n this.tap.reset();\n }\n\n public touchstart(e: TouchEvent, points: Point[], mapTouches: Touch[]) {\n if (this.swipePoint) {\n return;\n }\n\n if (this.tapTime && e.timeStamp - this.tapTime > MAX_TAP_INTERVAL) {\n this.reset();\n }\n\n if (!this.tapTime) {\n this.tap.touchstart(e, points, mapTouches);\n } else if (mapTouches.length > 0) {\n this.swipePoint = points[0];\n this.swipeTouch = mapTouches[0].identifier;\n }\n }\n\n public touchmove(e: TouchEvent, points: Point[], mapTouches: Touch[]) {\n if (!this.tapTime) {\n this.tap.touchmove(e, points, mapTouches);\n } else if (this.swipePoint) {\n if (mapTouches[0].identifier !== this.swipeTouch) {\n return;\n }\n\n const newSwipePoint = points[0];\n const dist = newSwipePoint.y - this.swipePoint.y;\n this.swipePoint = newSwipePoint;\n\n e.preventDefault();\n this.active = true;\n\n return {\n zoomDelta: dist / 128,\n };\n }\n }\n\n public touchend(e: TouchEvent, points: Point[], mapTouches: Touch[]) {\n if (!this.tapTime) {\n const point = this.tap.touchend(e, points, mapTouches);\n if (point) {\n this.tapTime = e.timeStamp;\n }\n } else if (this.swipePoint) {\n if (mapTouches.length === 0) {\n this.reset();\n }\n }\n }\n\n public touchcancel() {\n this.reset();\n }\n\n public enable() {\n this.enabled = true;\n }\n\n public disable() {\n this.enabled = false;\n this.reset();\n }\n\n public isEnabled() {\n return this.enabled;\n }\n\n public isActive() {\n return this.active;\n }\n}\n"],"file":"tap_drag_zoom.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/handler/tap/tap_recognizer.ts"],"names":["TapRecognizer","options","singleTap","SingleTapRecognizer","numTaps","reset","lastTime","Infinity","lastTap","count","e","points","mapTouches","touchstart","touchmove","tap","touchend","soonEnough","timeStamp","MAX_TAP_INTERVAL","closeEnough","dist","MAX_DIST"],"mappings":";;;;;;;;;;;;;;;;;AAEA;;;;;;IAKqBA,a;AAOnB,yBAAYC,OAAZ,EAA8D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC5D,SAAKC,SAAL,GAAiB,IAAIC,8BAAJ,CAAwBF,OAAxB,CAAjB;AACA,SAAKG,OAAL,GAAeH,OAAO,CAACG,OAAvB;AACA,SAAKC,KAAL;AACD;;;;WAED,iBAAe;AACb,WAAKC,QAAL,GAAgBC,QAAhB;AACA,aAAO,KAAKC,OAAZ;AACA,WAAKC,KAAL,GAAa,CAAb;AACA,WAAKP,SAAL,CAAeG,KAAf;AACD;;;WAED,oBAAkBK,CAAlB,EAAiCC,MAAjC,EAAkDC,UAAlD,EAAuE;AACrE,WAAKV,SAAL,CAAeW,UAAf,CAA0BH,CAA1B,EAA6BC,MAA7B,EAAqCC,UAArC;AACD;;;WAED,mBAAiBF,CAAjB,EAAgCC,MAAhC,EAAiDC,UAAjD,EAAsE;AACpE,WAAKV,SAAL,CAAeY,SAAf,CAAyBJ,CAAzB,EAA4BC,MAA5B,EAAoCC,UAApC;AACD;;;WAED,kBAAgBF,CAAhB,EAA+BC,MAA/B,EAAgDC,UAAhD,EAAqE;AACnE,UAAMG,GAAG,GAAG,KAAKb,SAAL,CAAec,QAAf,CAAwBN,CAAxB,EAA2BC,MAA3B,EAAmCC,UAAnC,CAAZ;;AACA,UAAIG,GAAJ,EAAS;AACP,YAAME,UAAU,GAAGP,CAAC,CAACQ,SAAF,GAAc,KAAKZ,QAAnB,GAA8Ba,uCAAjD;;AACA,YAAMC,WAAW,GAAG,CAAC,KAAKZ,OAAN,IAAiB,KAAKA,OAAL,CAAaa,IAAb,CAAkBN,GAAlB,IAAyBO,+BAA9D;;AAEA,YAAI,CAACL,UAAD,IAAe,CAACG,WAApB,EAAiC;AAC/B,eAAKf,KAAL;AACD;;AAED,aAAKI,KAAL;AACA,aAAKH,QAAL,GAAgBI,CAAC,CAACQ,SAAlB;AACA,aAAKV,OAAL,GAAeO,GAAf;;AAEA,YAAI,KAAKN,KAAL,KAAe,KAAKL,OAAxB,EAAiC;AAC/B,eAAKC,KAAL;AACA,iBAAOU,GAAP;AACD;AACF;AACF","sourcesContent":["// @ts-ignore\nimport Point from '../../geo/point';\nimport SingleTapRecognizer, {\n MAX_DIST,\n MAX_TAP_INTERVAL,\n} from './single_tap_recognizer';\n\nexport default class TapRecognizer {\n public singleTap: SingleTapRecognizer;\n public numTaps: number;\n public lastTime: number;\n public lastTap: Point;\n public count: number;\n\n constructor(options: { numTaps: number; numTouches: number }) {\n this.singleTap = new SingleTapRecognizer(options);\n this.numTaps = options.numTaps;\n this.reset();\n }\n\n public reset() {\n this.lastTime = Infinity;\n delete this.lastTap;\n this.count = 0;\n this.singleTap.reset();\n }\n\n public touchstart(e: TouchEvent, points: Point[], mapTouches: Touch[]) {\n this.singleTap.touchstart(e, points, mapTouches);\n }\n\n public touchmove(e: TouchEvent, points: Point[], mapTouches: Touch[]) {\n this.singleTap.touchmove(e, points, mapTouches);\n }\n\n public touchend(e: TouchEvent, points: Point[], mapTouches: Touch[]) {\n const tap = this.singleTap.touchend(e, points, mapTouches);\n if (tap) {\n const soonEnough = e.timeStamp - this.lastTime < MAX_TAP_INTERVAL;\n const closeEnough = !this.lastTap || this.lastTap.dist(tap) < MAX_DIST;\n\n if (!soonEnough || !closeEnough) {\n this.reset();\n }\n\n this.count++;\n this.lastTime = e.timeStamp;\n this.lastTap = tap;\n\n if (this.count === this.numTaps) {\n this.reset();\n return tap;\n }\n }\n }\n}\n"],"file":"tap_recognizer.js"}