@deck.gl/core 9.3.0-alpha.1 → 9.3.0-alpha.3

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 (134) hide show
  1. package/debug.min.js +1 -1
  2. package/dist/controllers/controller.d.ts +5 -4
  3. package/dist/controllers/controller.d.ts.map +1 -1
  4. package/dist/controllers/controller.js +18 -7
  5. package/dist/controllers/controller.js.map +1 -1
  6. package/dist/controllers/first-person-controller.d.ts +3 -2
  7. package/dist/controllers/first-person-controller.d.ts.map +1 -1
  8. package/dist/controllers/first-person-controller.js +13 -5
  9. package/dist/controllers/first-person-controller.js.map +1 -1
  10. package/dist/controllers/globe-controller.d.ts +1 -0
  11. package/dist/controllers/globe-controller.d.ts.map +1 -1
  12. package/dist/controllers/globe-controller.js +66 -5
  13. package/dist/controllers/globe-controller.js.map +1 -1
  14. package/dist/controllers/map-controller.d.ts +7 -18
  15. package/dist/controllers/map-controller.d.ts.map +1 -1
  16. package/dist/controllers/map-controller.js +94 -50
  17. package/dist/controllers/map-controller.js.map +1 -1
  18. package/dist/controllers/orbit-controller.d.ts +12 -4
  19. package/dist/controllers/orbit-controller.d.ts.map +1 -1
  20. package/dist/controllers/orbit-controller.js +118 -10
  21. package/dist/controllers/orbit-controller.js.map +1 -1
  22. package/dist/controllers/orthographic-controller.d.ts +117 -9
  23. package/dist/controllers/orthographic-controller.d.ts.map +1 -1
  24. package/dist/controllers/orthographic-controller.js +302 -37
  25. package/dist/controllers/orthographic-controller.js.map +1 -1
  26. package/dist/controllers/terrain-controller.d.ts +29 -0
  27. package/dist/controllers/terrain-controller.d.ts.map +1 -0
  28. package/dist/controllers/terrain-controller.js +108 -0
  29. package/dist/controllers/terrain-controller.js.map +1 -0
  30. package/dist/controllers/view-state.d.ts +2 -1
  31. package/dist/controllers/view-state.d.ts.map +1 -1
  32. package/dist/controllers/view-state.js +2 -1
  33. package/dist/controllers/view-state.js.map +1 -1
  34. package/dist/debug/loggers.d.ts.map +1 -1
  35. package/dist/debug/loggers.js +1 -4
  36. package/dist/debug/loggers.js.map +1 -1
  37. package/dist/dist.dev.js +3800 -1675
  38. package/dist/effects/lighting/lighting-effect.d.ts +1 -0
  39. package/dist/effects/lighting/lighting-effect.d.ts.map +1 -1
  40. package/dist/effects/lighting/lighting-effect.js +14 -5
  41. package/dist/effects/lighting/lighting-effect.js.map +1 -1
  42. package/dist/index.cjs +775 -123
  43. package/dist/index.cjs.map +4 -4
  44. package/dist/index.d.ts +1 -0
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +1 -0
  47. package/dist/index.js.map +1 -1
  48. package/dist/lib/attribute/attribute-manager.d.ts.map +1 -1
  49. package/dist/lib/attribute/attribute-manager.js +2 -0
  50. package/dist/lib/attribute/attribute-manager.js.map +1 -1
  51. package/dist/lib/deck-picker.d.ts +6 -1
  52. package/dist/lib/deck-picker.d.ts.map +1 -1
  53. package/dist/lib/deck-picker.js +15 -3
  54. package/dist/lib/deck-picker.js.map +1 -1
  55. package/dist/lib/deck-renderer.d.ts +6 -1
  56. package/dist/lib/deck-renderer.d.ts.map +1 -1
  57. package/dist/lib/deck-renderer.js +14 -2
  58. package/dist/lib/deck-renderer.js.map +1 -1
  59. package/dist/lib/deck.d.ts +5 -0
  60. package/dist/lib/deck.d.ts.map +1 -1
  61. package/dist/lib/deck.js +13 -3
  62. package/dist/lib/deck.js.map +1 -1
  63. package/dist/lib/init.js +2 -2
  64. package/dist/lib/layer.d.ts.map +1 -1
  65. package/dist/lib/layer.js +1 -0
  66. package/dist/lib/layer.js.map +1 -1
  67. package/dist/passes/draw-layers-pass.d.ts +2 -0
  68. package/dist/passes/draw-layers-pass.d.ts.map +1 -1
  69. package/dist/passes/draw-layers-pass.js +3 -0
  70. package/dist/passes/draw-layers-pass.js.map +1 -1
  71. package/dist/passes/layers-pass.d.ts +2 -1
  72. package/dist/passes/layers-pass.d.ts.map +1 -1
  73. package/dist/passes/layers-pass.js +3 -0
  74. package/dist/passes/layers-pass.js.map +1 -1
  75. package/dist/passes/pick-layers-pass.d.ts +5 -2
  76. package/dist/passes/pick-layers-pass.d.ts.map +1 -1
  77. package/dist/passes/pick-layers-pass.js +3 -2
  78. package/dist/passes/pick-layers-pass.js.map +1 -1
  79. package/dist/shaderlib/project/project.glsl.d.ts.map +1 -1
  80. package/dist/shaderlib/project/project.glsl.js +3 -0
  81. package/dist/shaderlib/project/project.glsl.js.map +1 -1
  82. package/dist/utils/deep-merge.d.ts +5 -0
  83. package/dist/utils/deep-merge.d.ts.map +1 -0
  84. package/dist/utils/deep-merge.js +31 -0
  85. package/dist/utils/deep-merge.js.map +1 -0
  86. package/dist/utils/math-utils.d.ts +4 -0
  87. package/dist/utils/math-utils.d.ts.map +1 -1
  88. package/dist/utils/math-utils.js +8 -0
  89. package/dist/utils/math-utils.js.map +1 -1
  90. package/dist/viewports/globe-viewport.d.ts +1 -0
  91. package/dist/viewports/globe-viewport.d.ts.map +1 -1
  92. package/dist/viewports/globe-viewport.js +1 -1
  93. package/dist/viewports/globe-viewport.js.map +1 -1
  94. package/dist/viewports/orbit-viewport.d.ts.map +1 -1
  95. package/dist/viewports/orbit-viewport.js +7 -2
  96. package/dist/viewports/orbit-viewport.js.map +1 -1
  97. package/dist/viewports/orthographic-viewport.d.ts +8 -2
  98. package/dist/viewports/orthographic-viewport.d.ts.map +1 -1
  99. package/dist/viewports/orthographic-viewport.js.map +1 -1
  100. package/dist/views/orthographic-view.d.ts +38 -4
  101. package/dist/views/orthographic-view.d.ts.map +1 -1
  102. package/dist/views/orthographic-view.js.map +1 -1
  103. package/dist/views/view.d.ts.map +1 -1
  104. package/dist/views/view.js +2 -8
  105. package/dist/views/view.js.map +1 -1
  106. package/dist.min.js +220 -144
  107. package/package.json +9 -9
  108. package/src/controllers/controller.ts +23 -9
  109. package/src/controllers/first-person-controller.ts +18 -8
  110. package/src/controllers/globe-controller.ts +89 -5
  111. package/src/controllers/map-controller.ts +105 -56
  112. package/src/controllers/orbit-controller.ts +147 -13
  113. package/src/controllers/orthographic-controller.ts +417 -41
  114. package/src/controllers/terrain-controller.ts +146 -0
  115. package/src/controllers/view-state.ts +8 -1
  116. package/src/debug/loggers.ts +1 -5
  117. package/src/effects/lighting/lighting-effect.ts +20 -8
  118. package/src/index.ts +1 -0
  119. package/src/lib/attribute/attribute-manager.ts +1 -0
  120. package/src/lib/deck-picker.ts +18 -4
  121. package/src/lib/deck-renderer.ts +17 -3
  122. package/src/lib/deck.ts +19 -3
  123. package/src/lib/layer.ts +1 -0
  124. package/src/passes/draw-layers-pass.ts +5 -0
  125. package/src/passes/layers-pass.ts +5 -1
  126. package/src/passes/pick-layers-pass.ts +8 -4
  127. package/src/shaderlib/project/project.glsl.ts +3 -0
  128. package/src/utils/deep-merge.ts +33 -0
  129. package/src/utils/math-utils.ts +12 -0
  130. package/src/viewports/globe-viewport.ts +1 -1
  131. package/src/viewports/orbit-viewport.ts +8 -2
  132. package/src/viewports/orthographic-viewport.ts +8 -2
  133. package/src/views/orthographic-view.ts +38 -4
  134. package/src/views/view.ts +2 -8
@@ -1,21 +1,129 @@
1
- import Controller from "./controller.js";
2
- import { OrbitState } from "./orbit-controller.js";
1
+ import Controller, { ControllerProps } from "./controller.js";
2
+ import ViewState from "./view-state.js";
3
+ import type Viewport from "../viewports/viewport.js";
3
4
  import LinearInterpolator from "../transitions/linear-interpolator.js";
4
- declare class OrthographicState extends OrbitState {
5
- zoomAxis: 'X' | 'Y' | 'all';
6
- constructor(props: any);
5
+ export type OrthographicStateProps = {
6
+ width: number;
7
+ height: number;
8
+ target?: number[];
9
+ zoom?: number | number[];
10
+ zoomX?: number;
11
+ zoomY?: number;
12
+ zoomAxis?: 'X' | 'Y' | 'all';
13
+ /** Viewport constraints */
14
+ maxZoomX?: number;
15
+ minZoomX?: number;
16
+ maxZoomY?: number;
17
+ minZoomY?: number;
18
+ maxBounds?: ControllerProps['maxBounds'];
19
+ };
20
+ type OrthographicStateInternal = {
21
+ startPanPosition?: number[];
22
+ startZoomPosition?: number[];
23
+ startZoom?: number[];
24
+ };
25
+ export declare class OrthographicState extends ViewState<OrthographicState, OrthographicStateProps, OrthographicStateInternal> {
26
+ constructor(options: OrthographicStateProps & OrthographicStateInternal & {
27
+ maxZoom?: number;
28
+ minZoom?: number;
29
+ makeViewport: (props: Record<string, any>) => Viewport;
30
+ });
31
+ /**
32
+ * Start panning
33
+ * @param {[Number, Number]} pos - position on screen where the pointer grabs
34
+ */
35
+ panStart({ pos }: {
36
+ pos: [number, number];
37
+ }): OrthographicState;
38
+ /**
39
+ * Pan
40
+ * @param {[Number, Number]} pos - position on screen where the pointer is
41
+ */
42
+ pan({ pos, startPosition }: {
43
+ pos: [number, number];
44
+ startPosition?: number[];
45
+ }): OrthographicState;
46
+ /**
47
+ * End panning
48
+ * Must call if `panStart()` was called
49
+ */
50
+ panEnd(): OrthographicState;
51
+ /**
52
+ * Start rotating
53
+ */
54
+ rotateStart(): OrthographicState;
55
+ /**
56
+ * Rotate
57
+ */
58
+ rotate(): OrthographicState;
59
+ /**
60
+ * End rotating
61
+ */
62
+ rotateEnd(): OrthographicState;
63
+ shortestPathFrom(viewState: OrthographicState): OrthographicStateProps;
64
+ /**
65
+ * Start zooming
66
+ * @param {[Number, Number]} pos - position on screen where the pointer grabs
67
+ */
68
+ zoomStart({ pos }: {
69
+ pos: [number, number];
70
+ }): OrthographicState;
71
+ /**
72
+ * Zoom
73
+ * @param {[Number, Number]} pos - position on screen where the current target is
74
+ * @param {[Number, Number]} startPos - the target position at
75
+ * the start of the operation. Must be supplied of `zoomStart()` was not called
76
+ * @param {Number} scale - a number between [0, 1] specifying the accumulated
77
+ * relative scale.
78
+ */
79
+ zoom({ pos, startPos, scale }: {
80
+ pos: [number, number];
81
+ startPos?: [number, number];
82
+ scale: number;
83
+ }): OrthographicState;
84
+ /**
85
+ * End zooming
86
+ * Must call if `zoomStart()` was called
87
+ */
88
+ zoomEnd(): OrthographicState;
89
+ zoomIn(speed?: number): OrthographicState;
90
+ zoomOut(speed?: number): OrthographicState;
91
+ moveLeft(speed?: number): OrthographicState;
92
+ moveRight(speed?: number): OrthographicState;
93
+ moveUp(speed?: number): OrthographicState;
94
+ moveDown(speed?: number): OrthographicState;
95
+ rotateLeft(speed?: number): OrthographicState;
96
+ rotateRight(speed?: number): OrthographicState;
97
+ rotateUp(speed?: number): OrthographicState;
98
+ rotateDown(speed?: number): OrthographicState;
99
+ _project(pos: number[]): number[];
100
+ _unproject(pos: number[]): number[];
7
101
  _calculateNewZoom({ scale, startZoom }: {
8
- scale: any;
9
- startZoom: any;
10
- }): number | any[];
102
+ scale: number;
103
+ startZoom?: number[];
104
+ }): {
105
+ zoomX: number;
106
+ zoomY: number;
107
+ };
108
+ _panFromCenter(offset: any): OrthographicState;
109
+ _getUpdatedState(newProps: any): OrthographicState;
110
+ applyConstraints(props: Required<OrthographicStateProps>): Required<OrthographicStateProps>;
111
+ _constrainZoom({ zoomX, zoomY }: {
112
+ zoomX: number;
113
+ zoomY: number;
114
+ }, props?: Required<OrthographicStateProps>): {
115
+ zoomX: number;
116
+ zoomY: number;
117
+ };
11
118
  }
12
- export default class OrthographicController extends Controller<OrbitState> {
119
+ export default class OrthographicController extends Controller<OrthographicState> {
13
120
  ControllerState: typeof OrthographicState;
14
121
  transition: {
15
122
  transitionDuration: number;
16
123
  transitionInterpolator: LinearInterpolator;
17
124
  };
18
125
  dragMode: 'pan' | 'rotate';
126
+ setProps(props: ControllerProps & OrthographicStateProps): void;
19
127
  _onPanRotate(): boolean;
20
128
  }
21
129
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"orthographic-controller.d.ts","sourceRoot":"","sources":["../../src/controllers/orthographic-controller.ts"],"names":[],"mappings":"AAKA,OAAO,UAAU,wBAAqB;AACtC,OAAO,EAAC,UAAU,EAAC,8BAA2B;AAC9C,OAAO,kBAAkB,8CAA2C;AAEpE,cAAM,iBAAkB,SAAQ,UAAU;IACxC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;gBAEhB,KAAK,KAAA;IAMjB,iBAAiB,CAAC,EAAC,KAAK,EAAE,SAAS,EAAC;;;KAAA;CAqCrC;AAED,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,UAAU,CAAC,UAAU,CAAC;IACxE,eAAe,2BAAqB;IACpC,UAAU;;;MAGR;IACF,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAS;IAEnC,YAAY;CAIb"}
1
+ {"version":3,"file":"orthographic-controller.d.ts","sourceRoot":"","sources":["../../src/controllers/orthographic-controller.ts"],"names":[],"mappings":"AAKA,OAAO,UAAU,EAAE,EAAC,eAAe,EAAC,wBAAqB;AACzD,OAAO,SAAS,wBAAqB;AAErC,OAAO,KAAK,QAAQ,iCAA8B;AAClD,OAAO,kBAAkB,8CAA2C;AAEpE,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;IAE7B,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;CAC1C,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAmBF,qBAAa,iBAAkB,SAAQ,SAAS,CAC9C,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,CAC1B;gBAEG,OAAO,EAAE,sBAAsB,GAC7B,yBAAyB,GAAG;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,QAAQ,CAAC;KACxD;IAsDL;;;OAGG;IACH,QAAQ,CAAC,EAAC,GAAG,EAAC,EAAE;QAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAC,GAAG,iBAAiB;IAM3D;;;OAGG;IACH,GAAG,CAAC,EAAC,GAAG,EAAE,aAAa,EAAC,EAAE;QAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KAAC,GAAG,iBAAiB;IAa/F;;;OAGG;IACH,MAAM,IAAI,iBAAiB;IAM3B;;OAEG;IACH,WAAW,IAAI,iBAAiB;IAIhC;;OAEG;IACH,MAAM,IAAI,iBAAiB;IAI3B;;OAEG;IACH,SAAS,IAAI,iBAAiB;IAK9B,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,GAAG,sBAAsB;IAMtE;;;OAGG;IACH,SAAS,CAAC,EAAC,GAAG,EAAC,EAAE;QAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAC,GAAG,iBAAiB;IAQ5D;;;;;;;OAOG;IACH,IAAI,CAAC,EACH,GAAG,EACH,QAAQ,EACR,KAAK,EACN,EAAE;QACD,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,iBAAiB;IAyBrB;;;OAGG;IACH,OAAO,IAAI,iBAAiB;IAO5B,MAAM,CAAC,KAAK,GAAE,MAAU,GAAG,iBAAiB;IAI5C,OAAO,CAAC,KAAK,GAAE,MAAU,GAAG,iBAAiB;IAI7C,QAAQ,CAAC,KAAK,GAAE,MAAW,GAAG,iBAAiB;IAI/C,SAAS,CAAC,KAAK,GAAE,MAAW,GAAG,iBAAiB;IAIhD,MAAM,CAAC,KAAK,GAAE,MAAW,GAAG,iBAAiB;IAI7C,QAAQ,CAAC,KAAK,GAAE,MAAW,GAAG,iBAAiB;IAI/C,UAAU,CAAC,KAAK,GAAE,MAAW,GAAG,iBAAiB;IAIjD,WAAW,CAAC,KAAK,GAAE,MAAW,GAAG,iBAAiB;IAIlD,QAAQ,CAAC,KAAK,GAAE,MAAW,GAAG,iBAAiB;IAI/C,UAAU,CAAC,KAAK,GAAE,MAAW,GAAG,iBAAiB;IAMjD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAIjC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAMnC,iBAAiB,CAAC,EAAC,KAAK,EAAE,SAAS,EAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAC,GAAG;QAC5E,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf;IA2BD,cAAc,CAAC,MAAM,KAAA;IASrB,gBAAgB,CAAC,QAAQ,KAAA,GAAG,iBAAiB;IAW7C,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,QAAQ,CAAC,sBAAsB,CAAC;IAiC3F,cAAc,CACZ,EAAC,KAAK,EAAE,KAAK,EAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,EAC9C,KAAK,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACvC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;CA0ClC;AAED,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,UAAU,CAAC,iBAAiB,CAAC;IAC/E,eAAe,2BAAqB;IACpC,UAAU;;;MAGR;IACF,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAS;IAEnC,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,sBAAsB;IAKxD,YAAY;CAIb"}
@@ -3,49 +3,310 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  import { clamp } from '@math.gl/core';
5
5
  import Controller from "./controller.js";
6
- import { OrbitState } from "./orbit-controller.js";
6
+ import ViewState from "./view-state.js";
7
7
  import LinearInterpolator from "../transitions/linear-interpolator.js";
8
- class OrthographicState extends OrbitState {
9
- constructor(props) {
10
- super(props);
11
- this.zoomAxis = props.zoomAxis || 'all';
8
+ function normalizeZoom({ zoom = 0, zoomX, zoomY }) {
9
+ zoomX = zoomX ?? (Array.isArray(zoom) ? zoom[0] : zoom);
10
+ zoomY = zoomY ?? (Array.isArray(zoom) ? zoom[1] : zoom);
11
+ return { zoomX, zoomY };
12
+ }
13
+ export class OrthographicState extends ViewState {
14
+ constructor(options) {
15
+ const {
16
+ /* Viewport arguments */
17
+ width, // Width of viewport
18
+ height, // Height of viewport
19
+ target = [0, 0, 0], zoom = 0, zoomAxis = 'all',
20
+ /* Viewport constraints */
21
+ minZoom = -Infinity, maxZoom = Infinity, minZoomX = minZoom, maxZoomX = maxZoom, minZoomY = minZoom, maxZoomY = maxZoom, maxBounds = null,
22
+ /** Interaction states, required to calculate change during transform */
23
+ // Model state when the pan operation first started
24
+ startPanPosition,
25
+ // Model state when the zoom operation first started
26
+ startZoomPosition, startZoom } = options;
27
+ const { zoomX, zoomY } = normalizeZoom(options);
28
+ super({
29
+ width,
30
+ height,
31
+ target,
32
+ zoom,
33
+ zoomX,
34
+ zoomY,
35
+ zoomAxis,
36
+ minZoomX,
37
+ maxZoomX,
38
+ minZoomY,
39
+ maxZoomY,
40
+ maxBounds
41
+ }, {
42
+ startPanPosition,
43
+ startZoomPosition,
44
+ startZoom
45
+ }, options.makeViewport);
46
+ }
47
+ /**
48
+ * Start panning
49
+ * @param {[Number, Number]} pos - position on screen where the pointer grabs
50
+ */
51
+ panStart({ pos }) {
52
+ return this._getUpdatedState({
53
+ startPanPosition: this._unproject(pos)
54
+ });
55
+ }
56
+ /**
57
+ * Pan
58
+ * @param {[Number, Number]} pos - position on screen where the pointer is
59
+ */
60
+ pan({ pos, startPosition }) {
61
+ const startPanPosition = this.getState().startPanPosition || startPosition;
62
+ if (!startPanPosition) {
63
+ return this;
64
+ }
65
+ const viewport = this.makeViewport(this.getViewportProps());
66
+ const newProps = viewport.panByPosition(startPanPosition, pos);
67
+ return this._getUpdatedState(newProps);
68
+ }
69
+ /**
70
+ * End panning
71
+ * Must call if `panStart()` was called
72
+ */
73
+ panEnd() {
74
+ return this._getUpdatedState({
75
+ startPanPosition: null
76
+ });
77
+ }
78
+ /**
79
+ * Start rotating
80
+ */
81
+ rotateStart() {
82
+ return this;
83
+ }
84
+ /**
85
+ * Rotate
86
+ */
87
+ rotate() {
88
+ return this;
89
+ }
90
+ /**
91
+ * End rotating
92
+ */
93
+ rotateEnd() {
94
+ return this;
95
+ }
96
+ // shortest path between two view states
97
+ shortestPathFrom(viewState) {
98
+ const fromProps = viewState.getViewportProps();
99
+ const props = { ...this.getViewportProps() };
100
+ return props;
101
+ }
102
+ /**
103
+ * Start zooming
104
+ * @param {[Number, Number]} pos - position on screen where the pointer grabs
105
+ */
106
+ zoomStart({ pos }) {
107
+ const { zoomX, zoomY } = this.getViewportProps();
108
+ return this._getUpdatedState({
109
+ startZoomPosition: this._unproject(pos),
110
+ startZoom: [zoomX, zoomY]
111
+ });
112
+ }
113
+ /**
114
+ * Zoom
115
+ * @param {[Number, Number]} pos - position on screen where the current target is
116
+ * @param {[Number, Number]} startPos - the target position at
117
+ * the start of the operation. Must be supplied of `zoomStart()` was not called
118
+ * @param {Number} scale - a number between [0, 1] specifying the accumulated
119
+ * relative scale.
120
+ */
121
+ zoom({ pos, startPos, scale }) {
122
+ let { startZoom, startZoomPosition } = this.getState();
123
+ if (!startZoomPosition) {
124
+ // We have two modes of zoom:
125
+ // scroll zoom that are discrete events (transform from the current zoom level),
126
+ // and pinch zoom that are continuous events (transform from the zoom level when
127
+ // pinch started).
128
+ // If startZoom state is defined, then use the startZoom state;
129
+ // otherwise assume discrete zooming
130
+ const { zoomX, zoomY } = this.getViewportProps();
131
+ startZoom = [zoomX, zoomY];
132
+ startZoomPosition = this._unproject(startPos || pos);
133
+ }
134
+ if (!startZoomPosition) {
135
+ return this;
136
+ }
137
+ const newZoomProps = this._constrainZoom(this._calculateNewZoom({ scale, startZoom }));
138
+ const zoomedViewport = this.makeViewport({ ...this.getViewportProps(), ...newZoomProps });
139
+ return this._getUpdatedState({
140
+ ...newZoomProps,
141
+ ...zoomedViewport.panByPosition(startZoomPosition, pos)
142
+ });
143
+ }
144
+ /**
145
+ * End zooming
146
+ * Must call if `zoomStart()` was called
147
+ */
148
+ zoomEnd() {
149
+ return this._getUpdatedState({
150
+ startZoomPosition: null,
151
+ startZoom: null
152
+ });
153
+ }
154
+ zoomIn(speed = 2) {
155
+ return this._getUpdatedState(this._calculateNewZoom({ scale: speed }));
156
+ }
157
+ zoomOut(speed = 2) {
158
+ return this._getUpdatedState(this._calculateNewZoom({ scale: 1 / speed }));
159
+ }
160
+ moveLeft(speed = 50) {
161
+ return this._panFromCenter([-speed, 0]);
162
+ }
163
+ moveRight(speed = 50) {
164
+ return this._panFromCenter([speed, 0]);
165
+ }
166
+ moveUp(speed = 50) {
167
+ return this._panFromCenter([0, -speed]);
12
168
  }
169
+ moveDown(speed = 50) {
170
+ return this._panFromCenter([0, speed]);
171
+ }
172
+ rotateLeft(speed = 15) {
173
+ return this;
174
+ }
175
+ rotateRight(speed = 15) {
176
+ return this;
177
+ }
178
+ rotateUp(speed = 10) {
179
+ return this;
180
+ }
181
+ rotateDown(speed = 10) {
182
+ return this;
183
+ }
184
+ /* Private methods */
185
+ _project(pos) {
186
+ const viewport = this.makeViewport(this.getViewportProps());
187
+ return viewport.project(pos);
188
+ }
189
+ _unproject(pos) {
190
+ const viewport = this.makeViewport(this.getViewportProps());
191
+ return viewport.unproject(pos);
192
+ }
193
+ // Calculates new zoom
13
194
  _calculateNewZoom({ scale, startZoom }) {
14
- const { maxZoom, minZoom } = this.getViewportProps();
195
+ const { zoomX, zoomY, zoomAxis } = this.getViewportProps();
15
196
  if (startZoom === undefined) {
16
- startZoom = this.getViewportProps().zoom;
197
+ startZoom = [zoomX, zoomY];
198
+ }
199
+ const deltaZoom = Math.log2(scale);
200
+ let [newZoomX, newZoomY] = startZoom;
201
+ switch (zoomAxis) {
202
+ case 'X':
203
+ // Scale x only
204
+ newZoomX += deltaZoom;
205
+ break;
206
+ case 'Y':
207
+ // Scale y only
208
+ newZoomY += deltaZoom;
209
+ break;
210
+ default:
211
+ // Lock aspect ratio
212
+ newZoomX += deltaZoom;
213
+ newZoomY += deltaZoom;
214
+ }
215
+ return {
216
+ zoomX: newZoomX,
217
+ zoomY: newZoomY
218
+ };
219
+ }
220
+ _panFromCenter(offset) {
221
+ const { target } = this.getViewportProps();
222
+ const center = this._project(target);
223
+ return this.pan({
224
+ startPosition: target,
225
+ pos: [center[0] + offset[0], center[1] + offset[1]]
226
+ });
227
+ }
228
+ _getUpdatedState(newProps) {
229
+ // @ts-ignore
230
+ return new this.constructor({
231
+ makeViewport: this.makeViewport,
232
+ ...this.getViewportProps(),
233
+ ...this.getState(),
234
+ ...newProps
235
+ });
236
+ }
237
+ // Apply any constraints (mathematical or defined by _viewportProps) to map state
238
+ applyConstraints(props) {
239
+ // Ensure zoom is within specified range
240
+ const { zoomX, zoomY } = this._constrainZoom(props, props);
241
+ props.zoomX = zoomX;
242
+ props.zoomY = zoomY;
243
+ // Backward compatibility: update zoom to reflect new view state
244
+ // zoom will always be ignored when zoomX and zoomY are specified, but legacy apps may still read zoom in `onViewStateChange`
245
+ props.zoom =
246
+ Array.isArray(props.zoom) || props.zoomX !== props.zoomY
247
+ ? [props.zoomX, props.zoomY]
248
+ : props.zoomX;
249
+ const { maxBounds, target } = props;
250
+ if (maxBounds) {
251
+ // only calculate center and zoom ranges at rotation=0
252
+ // to maintain visual stability when rotating
253
+ const halfWidth = props.width / 2 / 2 ** zoomX;
254
+ const halfHeight = props.height / 2 / 2 ** zoomY;
255
+ const minX = maxBounds[0][0] + halfWidth;
256
+ const maxX = maxBounds[1][0] - halfWidth;
257
+ const minY = maxBounds[0][1] + halfHeight;
258
+ const maxY = maxBounds[1][1] - halfHeight;
259
+ const x = clamp(target[0], minX, maxX);
260
+ const y = clamp(target[1], minY, maxY);
261
+ if (x !== target[0] || y !== target[1]) {
262
+ props.target = target.slice();
263
+ props.target[0] = x;
264
+ props.target[1] = y;
265
+ }
17
266
  }
18
- let deltaZoom = Math.log2(scale);
19
- if (Array.isArray(startZoom)) {
20
- let [newZoomX, newZoomY] = startZoom;
21
- switch (this.zoomAxis) {
22
- case 'X':
23
- // Scale x only
24
- newZoomX = clamp(newZoomX + deltaZoom, minZoom, maxZoom);
25
- break;
26
- case 'Y':
27
- // Scale y only
28
- newZoomY = clamp(newZoomY + deltaZoom, minZoom, maxZoom);
29
- break;
30
- default:
31
- // Lock aspect ratio
32
- let z = Math.min(newZoomX + deltaZoom, newZoomY + deltaZoom);
33
- if (z < minZoom) {
34
- deltaZoom += minZoom - z;
35
- }
36
- z = Math.max(newZoomX + deltaZoom, newZoomY + deltaZoom);
37
- if (z > maxZoom) {
38
- deltaZoom += maxZoom - z;
39
- }
40
- newZoomX += deltaZoom;
41
- newZoomY += deltaZoom;
267
+ return props;
268
+ }
269
+ _constrainZoom({ zoomX, zoomY }, props) {
270
+ props || (props = this.getViewportProps());
271
+ const { zoomAxis, maxZoomX, maxZoomY, maxBounds } = props;
272
+ let { minZoomX, minZoomY } = props;
273
+ const shouldApplyMaxBounds = maxBounds !== null && props.width > 0 && props.height > 0;
274
+ if (shouldApplyMaxBounds) {
275
+ const bl = maxBounds[0];
276
+ const tr = maxBounds[1];
277
+ const w = tr[0] - bl[0];
278
+ const h = tr[1] - bl[1];
279
+ // ignore bound size of 0 or Infinity
280
+ if (Number.isFinite(w) && w > 0) {
281
+ minZoomX = Math.max(minZoomX, Math.log2(props.width / w));
282
+ if (minZoomX > maxZoomX)
283
+ minZoomX = maxZoomX;
284
+ }
285
+ if (Number.isFinite(h) && h > 0) {
286
+ minZoomY = Math.max(minZoomY, Math.log2(props.height / h));
287
+ if (minZoomY > maxZoomY)
288
+ minZoomY = maxZoomY;
42
289
  }
43
- return [newZoomX, newZoomY];
44
290
  }
45
- // Ignore `zoomAxis`
46
- // `LinearTransitionInterpolator` does not support interpolation between a number and an array
47
- // So if zoom is a number (legacy use case), new zoom still has to be a number
48
- return clamp(startZoom + deltaZoom, minZoom, maxZoom);
291
+ switch (zoomAxis) {
292
+ case 'X':
293
+ zoomX = clamp(zoomX, minZoomX, maxZoomX);
294
+ break;
295
+ case 'Y':
296
+ zoomY = clamp(zoomY, minZoomY, maxZoomY);
297
+ break;
298
+ default:
299
+ // Lock aspect ratio
300
+ let delta = Math.min(maxZoomX - zoomX, maxZoomY - zoomY, 0);
301
+ if (delta === 0) {
302
+ delta = Math.max(minZoomX - zoomX, minZoomY - zoomY, 0);
303
+ }
304
+ if (delta !== 0) {
305
+ zoomX += delta;
306
+ zoomY += delta;
307
+ }
308
+ }
309
+ return { zoomX, zoomY };
49
310
  }
50
311
  }
51
312
  export default class OrthographicController extends Controller {
@@ -54,10 +315,14 @@ export default class OrthographicController extends Controller {
54
315
  this.ControllerState = OrthographicState;
55
316
  this.transition = {
56
317
  transitionDuration: 300,
57
- transitionInterpolator: new LinearInterpolator(['target', 'zoom'])
318
+ transitionInterpolator: new LinearInterpolator(['target', 'zoomX', 'zoomY'])
58
319
  };
59
320
  this.dragMode = 'pan';
60
321
  }
322
+ setProps(props) {
323
+ Object.assign(props, normalizeZoom(props));
324
+ super.setProps(props);
325
+ }
61
326
  _onPanRotate() {
62
327
  // No rotation in orthographic view
63
328
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"orthographic-controller.js","sourceRoot":"","sources":["../../src/controllers/orthographic-controller.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AACpC,OAAO,UAAU,wBAAqB;AACtC,OAAO,EAAC,UAAU,EAAC,8BAA2B;AAC9C,OAAO,kBAAkB,8CAA2C;AAEpE,MAAM,iBAAkB,SAAQ,UAAU;IAGxC,YAAY,KAAK;QACf,KAAK,CAAC,KAAK,CAAC,CAAC;QAEb,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC1C,CAAC;IAED,iBAAiB,CAAC,EAAC,KAAK,EAAE,SAAS,EAAC;QAClC,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC;QAC3C,CAAC;QACD,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC;YACrC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtB,KAAK,GAAG;oBACN,eAAe;oBACf,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBACzD,MAAM;gBACR,KAAK,GAAG;oBACN,eAAe;oBACf,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBACzD,MAAM;gBACR;oBACE,oBAAoB;oBACpB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;oBAC7D,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;wBAChB,SAAS,IAAI,OAAO,GAAG,CAAC,CAAC;oBAC3B,CAAC;oBACD,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;oBACzD,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;wBAChB,SAAS,IAAI,OAAO,GAAG,CAAC,CAAC;oBAC3B,CAAC;oBACD,QAAQ,IAAI,SAAS,CAAC;oBACtB,QAAQ,IAAI,SAAS,CAAC;YAC1B,CAAC;YACD,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC;QACD,oBAAoB;QACpB,8FAA8F;QAC9F,8EAA8E;QAC9E,OAAO,KAAK,CAAC,SAAS,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;CACF;AAED,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,UAAsB;IAA1E;;QACE,oBAAe,GAAG,iBAAiB,CAAC;QACpC,eAAU,GAAG;YACX,kBAAkB,EAAE,GAAG;YACvB,sBAAsB,EAAE,IAAI,kBAAkB,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SACnE,CAAC;QACF,aAAQ,GAAqB,KAAK,CAAC;IAMrC,CAAC;IAJC,YAAY;QACV,mCAAmC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"orthographic-controller.js","sourceRoot":"","sources":["../../src/controllers/orthographic-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import MapController from "./map-controller.js";
2
+ import { MapState, MapStateProps } from "./map-controller.js";
3
+ import type { ControllerProps, InteractionState } from "./controller.js";
4
+ import type { MjolnirGestureEvent, MjolnirWheelEvent } from 'mjolnir.js';
5
+ /**
6
+ * Controller that extends MapController with terrain-aware behavior.
7
+ * The camera smoothly follows terrain elevation during pan/zoom.
8
+ */
9
+ export default class TerrainController extends MapController {
10
+ /** Cached terrain altitude from depth picking at viewport center (smoothed) */
11
+ private _terrainAltitude?;
12
+ /** Raw (unsmoothed) terrain altitude from latest pick */
13
+ private _terrainAltitudeTarget?;
14
+ setProps(props: ControllerProps & MapStateProps & {
15
+ rotationPivot?: 'center' | '2d' | '3d';
16
+ getAltitude?: (pos: [number, number]) => number | undefined;
17
+ }): void;
18
+ protected updateViewport(newControllerState: MapState, extraProps?: Record<string, any> | null, interactionState?: InteractionState): void;
19
+ protected _onPanStart(event: MjolnirGestureEvent): boolean;
20
+ protected _onWheel(event: MjolnirWheelEvent): boolean;
21
+ protected _onDoubleClick(event: MjolnirGestureEvent): boolean;
22
+ private _pickTerrainCenterAltitude;
23
+ /**
24
+ * Utility function to return viewport that looks the same, but with
25
+ * a position shifted to [0, 0, altitude]
26
+ */
27
+ private _rebaseViewport;
28
+ }
29
+ //# sourceMappingURL=terrain-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terrain-controller.d.ts","sourceRoot":"","sources":["../../src/controllers/terrain-controller.ts"],"names":[],"mappings":"AAIA,OAAO,aAAa,4BAAyB;AAC7C,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,4BAAyB;AACzD,OAAO,KAAK,EAAC,eAAe,EAAE,gBAAgB,EAAC,wBAAqB;AACpE,OAAO,KAAK,EAAC,mBAAmB,EAAE,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAEvE;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,aAAa;IAC1D,+EAA+E;IAC/E,OAAO,CAAC,gBAAgB,CAAC,CAAqB;IAC9C,yDAAyD;IACzD,OAAO,CAAC,sBAAsB,CAAC,CAAqB;IAEpD,QAAQ,CACN,KAAK,EAAE,eAAe,GACpB,aAAa,GAAG;QACd,aAAa,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;QACvC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;KAC7D;IAoBL,SAAS,CAAC,cAAc,CACtB,kBAAkB,EAAE,QAAQ,EAC5B,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,EAC7C,gBAAgB,GAAE,gBAAqB,GACtC,IAAI;IA6BP,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO;IAK1D,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO;IAKrD,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO;IAK7D,OAAO,CAAC,0BAA0B;IAYlC;;;OAGG;IACH,OAAO,CAAC,eAAe;CAqCxB"}