@deck.gl/arcgis 9.4.0-alpha.1 → 9.4.0-alpha.2

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.
package/dist/index.cjs CHANGED
@@ -797,14 +797,6 @@ var PROJECTION_MODE = {
797
797
  */
798
798
  IDENTITY: 0
799
799
  };
800
- var RECOGNIZERS = {
801
- multipan: [import_mjolnir.Pan, { threshold: 10, direction: import_mjolnir.InputDirection.Vertical, pointers: 2 }],
802
- pinch: [import_mjolnir.Pinch, {}, null, ["multipan"]],
803
- pan: [import_mjolnir.Pan, { threshold: 1 }, ["pinch"], ["multipan"]],
804
- dblclick: [import_mjolnir.Tap, { event: "dblclick", taps: 2, enable: false }],
805
- dblclickdrag: [import_mjolnir.DoubleClickDrag, { event: "dblclickdrag", enable: false }, ["dblclick"], null],
806
- click: [import_mjolnir.Tap, { event: "click" }, ["dblclickdrag"], ["dblclick", "dblclickdrag"]]
807
- };
808
800
 
809
801
  // ../core/src/viewports/viewport.ts
810
802
  var DEGREES_TO_RADIANS = Math.PI / 180;
@@ -1864,6 +1856,8 @@ var Controller = class {
1864
1856
  this._customEvents = [];
1865
1857
  this._eventStartBlocked = null;
1866
1858
  this._panMove = false;
1859
+ this._multiPanMode = null;
1860
+ this._multiPanStartCenter = null;
1867
1861
  this._doubleClickDragAnchor = null;
1868
1862
  this._suppressDoubleClickUntil = 0;
1869
1863
  this.invertPan = false;
@@ -1876,6 +1870,8 @@ var Controller = class {
1876
1870
  this.doubleClickDragZoom = true;
1877
1871
  this.touchZoom = true;
1878
1872
  this.touchRotate = false;
1873
+ this.multiTouchDrag = null;
1874
+ this.trackpadGesture = false;
1879
1875
  this.keyboard = true;
1880
1876
  this.transitionManager = new TransitionManager({
1881
1877
  ...opts,
@@ -1923,11 +1919,11 @@ var Controller = class {
1923
1919
  case "panend":
1924
1920
  return this._onPanEnd(event);
1925
1921
  case "pinchstart":
1926
- return eventStartBlocked ? false : this._onPinchStart(event);
1922
+ return eventStartBlocked || !this._isTrackpadGestureAllowed(event) ? false : this._onPinchStart(event);
1927
1923
  case "pinchmove":
1928
- return this._onPinch(event);
1924
+ return this._isTrackpadGestureAllowed(event) ? this._onPinch(event) : false;
1929
1925
  case "pinchend":
1930
- return this._onPinchEnd(event);
1926
+ return this._isTrackpadGestureAllowed(event) ? this._onPinchEnd(event) : false;
1931
1927
  case "multipanstart":
1932
1928
  return eventStartBlocked ? false : this._onMultiPanStart(event);
1933
1929
  case "multipanmove":
@@ -2018,13 +2014,18 @@ var Controller = class {
2018
2014
  doubleClickDragZoom = false,
2019
2015
  touchZoom = true,
2020
2016
  touchRotate = false,
2017
+ multiTouchDrag = touchRotate ? "rotate" : null,
2018
+ trackpadGesture = false,
2021
2019
  keyboard = true
2022
2020
  } = props;
2023
2021
  const isInteractive = Boolean(this.onViewStateChange);
2024
2022
  this.toggleEvents(EVENT_TYPES.WHEEL, isInteractive && scrollZoom);
2025
2023
  this.toggleEvents(EVENT_TYPES.PAN, isInteractive);
2026
- this.toggleEvents(EVENT_TYPES.PINCH, isInteractive && (touchZoom || touchRotate));
2027
- this.toggleEvents(EVENT_TYPES.MULTI_PAN, isInteractive && touchRotate);
2024
+ this.toggleEvents(
2025
+ EVENT_TYPES.PINCH,
2026
+ isInteractive && (touchZoom || multiTouchDrag === "rotate")
2027
+ );
2028
+ this.toggleEvents(EVENT_TYPES.MULTI_PAN, isInteractive && Boolean(multiTouchDrag));
2028
2029
  this.toggleEvents(EVENT_TYPES.DOUBLE_CLICK, isInteractive && doubleClickZoom);
2029
2030
  this.toggleEvents(EVENT_TYPES.DOUBLE_CLICK_DRAG, isInteractive && doubleClickDragZoom);
2030
2031
  this.toggleEvents(EVENT_TYPES.KEYBOARD, isInteractive && keyboard);
@@ -2034,7 +2035,9 @@ var Controller = class {
2034
2035
  this.doubleClickZoom = doubleClickZoom;
2035
2036
  this.doubleClickDragZoom = doubleClickDragZoom;
2036
2037
  this.touchZoom = touchZoom;
2037
- this.touchRotate = touchRotate;
2038
+ this.touchRotate = multiTouchDrag === "rotate";
2039
+ this.multiTouchDrag = multiTouchDrag;
2040
+ this.trackpadGesture = trackpadGesture;
2038
2041
  this.keyboard = keyboard;
2039
2042
  const dimensionChanged = !oldProps || oldProps.height !== props.height || oldProps.width !== props.width || oldProps.maxBounds !== props.maxBounds;
2040
2043
  if (dimensionChanged && props.maxBounds) {
@@ -2209,6 +2212,9 @@ var Controller = class {
2209
2212
  if (!this.scrollZoom) {
2210
2213
  return false;
2211
2214
  }
2215
+ if (this.trackpadGesture && event.device !== "mouse") {
2216
+ return false;
2217
+ }
2212
2218
  const pos = this.getCenter(event);
2213
2219
  if (!this.isPointInBounds(pos, event)) {
2214
2220
  return false;
@@ -2236,60 +2242,73 @@ var Controller = class {
2236
2242
  return true;
2237
2243
  }
2238
2244
  _onMultiPanStart(event) {
2239
- const pos = this.getCenter(event);
2240
- if (!this.isPointInBounds(pos, event)) {
2245
+ const { multiTouchDrag } = this;
2246
+ if (!multiTouchDrag || !this._isMultiPanEventAllowed(event, multiTouchDrag)) {
2241
2247
  return false;
2242
2248
  }
2243
- const newControllerState = this.controllerState.rotateStart({ pos });
2249
+ const currentCenter = event.offsetCenter;
2250
+ if (!this.isPointInBounds(this.getCenter(event), event)) {
2251
+ return false;
2252
+ }
2253
+ const isTrackpad = event.pointerType === "trackpad";
2254
+ const startCenter = {
2255
+ x: currentCenter.x - (isTrackpad ? 0 : event.deltaX),
2256
+ y: currentCenter.y - (isTrackpad ? 0 : event.deltaY)
2257
+ };
2258
+ const startEvent = { ...event, offsetCenter: startCenter };
2259
+ const pos = this.getCenter(startEvent);
2260
+ const newControllerState = multiTouchDrag === "pan" ? this.controllerState.panStart({ pos }) : this.controllerState.rotateStart({ pos });
2261
+ this._multiPanMode = multiTouchDrag;
2262
+ this._multiPanStartCenter = startCenter;
2244
2263
  this.updateViewport(newControllerState, NO_TRANSITION_PROPS, { isDragging: true });
2245
2264
  return true;
2246
2265
  }
2247
2266
  _onMultiPan(event) {
2248
- if (!this.touchRotate) {
2249
- return false;
2250
- }
2251
- if (!this.isDragging()) {
2267
+ const { mode, event: panEvent } = this._getMultiPanEvent(event);
2268
+ if (!mode || !panEvent || !this.isDragging()) {
2252
2269
  return false;
2253
2270
  }
2254
- const pos = this.getCenter(event);
2255
- pos[0] -= event.deltaX;
2256
- const newControllerState = this.controllerState.rotate({ pos });
2257
- this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {
2258
- isDragging: true,
2259
- isRotating: true
2260
- });
2261
- return true;
2271
+ return mode === "pan" ? this._onPanMove(panEvent) : this._onPanRotate(panEvent);
2262
2272
  }
2263
2273
  _onMultiPanEnd(event) {
2264
- if (!this.isDragging()) {
2274
+ const { mode, event: panEvent } = this._getMultiPanEvent(event);
2275
+ if (!mode || !panEvent || !this.isDragging()) {
2276
+ this._resetMultiPan();
2265
2277
  return false;
2266
2278
  }
2267
- const { inertia } = this;
2268
- if (this.touchRotate && inertia && event.velocityY) {
2269
- const pos = this.getCenter(event);
2270
- const endPos = [pos[0], pos[1] += event.velocityY * inertia / 2];
2271
- const newControllerState = this.controllerState.rotate({ pos: endPos });
2272
- this.updateViewport(
2273
- newControllerState,
2274
- {
2275
- ...this._getTransitionProps(),
2276
- transitionDuration: inertia,
2277
- transitionEasing: INERTIA_EASING
2278
- },
2279
- {
2280
- isDragging: false,
2281
- isRotating: true
2282
- }
2283
- );
2284
- this.blockEvents(inertia);
2285
- } else {
2286
- const newControllerState = this.controllerState.rotateEnd();
2287
- this.updateViewport(newControllerState, null, {
2288
- isDragging: false,
2289
- isRotating: false
2290
- });
2279
+ const handled = mode === "pan" ? this._onPanMoveEnd(panEvent) : this._onPanRotateEnd(panEvent);
2280
+ this._resetMultiPan();
2281
+ return handled;
2282
+ }
2283
+ _isTrackpadGestureAllowed(event) {
2284
+ return event.pointerType !== "trackpad" || this.trackpadGesture;
2285
+ }
2286
+ _isMultiPanEventAllowed(event, mode) {
2287
+ if (event.pointerType === "trackpad") {
2288
+ return this.trackpadGesture && (mode === "pan" ? this.dragPan : this.dragRotate);
2291
2289
  }
2292
- return true;
2290
+ return event.pointerType === "touch" && (mode === "pan" ? this.dragPan : this.dragRotate);
2291
+ }
2292
+ _getMultiPanEvent(event) {
2293
+ const mode = this._multiPanMode;
2294
+ const startCenter = this._multiPanStartCenter;
2295
+ if (!mode || !startCenter) {
2296
+ return { mode: null, event: null };
2297
+ }
2298
+ return {
2299
+ mode,
2300
+ event: {
2301
+ ...event,
2302
+ offsetCenter: {
2303
+ x: startCenter.x + event.deltaX,
2304
+ y: startCenter.y + event.deltaY
2305
+ }
2306
+ }
2307
+ };
2308
+ }
2309
+ _resetMultiPan() {
2310
+ this._multiPanMode = null;
2311
+ this._multiPanStartCenter = null;
2293
2312
  }
2294
2313
  // Default handler for the `pinchstart` event.
2295
2314
  _onPinchStart(event) {