@deck.gl/widgets 9.1.12 → 9.2.0-alpha.1

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 (157) hide show
  1. package/dist/compass-widget.d.ts +11 -34
  2. package/dist/compass-widget.d.ts.map +1 -1
  3. package/dist/compass-widget.js +27 -62
  4. package/dist/compass-widget.js.map +1 -1
  5. package/dist/context-menu-widget.d.ts +37 -0
  6. package/dist/context-menu-widget.d.ts.map +1 -0
  7. package/dist/context-menu-widget.js +74 -0
  8. package/dist/context-menu-widget.js.map +1 -0
  9. package/dist/dist.dev.js +2271 -581
  10. package/dist/fps-widget.d.ts +29 -0
  11. package/dist/fps-widget.d.ts.map +1 -0
  12. package/dist/fps-widget.js +51 -0
  13. package/dist/fps-widget.js.map +1 -0
  14. package/dist/fullscreen-widget.d.ts +15 -33
  15. package/dist/fullscreen-widget.d.ts.map +1 -1
  16. package/dist/fullscreen-widget.js +20 -51
  17. package/dist/fullscreen-widget.js.map +1 -1
  18. package/dist/geocoder-widget.d.ts +51 -0
  19. package/dist/geocoder-widget.d.ts.map +1 -0
  20. package/dist/geocoder-widget.js +138 -0
  21. package/dist/geocoder-widget.js.map +1 -0
  22. package/dist/gimbal-widget.d.ts +33 -0
  23. package/dist/gimbal-widget.d.ts.map +1 -0
  24. package/dist/gimbal-widget.js +116 -0
  25. package/dist/gimbal-widget.js.map +1 -0
  26. package/dist/index.cjs +1587 -341
  27. package/dist/index.cjs.map +4 -4
  28. package/dist/index.d.ts +37 -8
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +27 -7
  31. package/dist/index.js.map +1 -1
  32. package/dist/info-widget.d.ts +37 -0
  33. package/dist/info-widget.d.ts.map +1 -0
  34. package/dist/info-widget.js +183 -0
  35. package/dist/info-widget.js.map +1 -0
  36. package/dist/lib/components/button-group.d.ts +8 -0
  37. package/dist/lib/components/button-group.d.ts.map +1 -0
  38. package/dist/lib/components/button-group.js +7 -0
  39. package/dist/lib/components/button-group.js.map +1 -0
  40. package/dist/lib/components/dropdown-menu.d.ts +8 -0
  41. package/dist/lib/components/dropdown-menu.d.ts.map +1 -0
  42. package/dist/lib/components/dropdown-menu.js +55 -0
  43. package/dist/lib/components/dropdown-menu.js.map +1 -0
  44. package/dist/lib/components/grouped-icon-button.d.ts +8 -0
  45. package/dist/lib/components/grouped-icon-button.d.ts.map +1 -0
  46. package/dist/lib/components/grouped-icon-button.js +7 -0
  47. package/dist/lib/components/grouped-icon-button.js.map +1 -0
  48. package/dist/lib/components/icon-button.d.ts +11 -0
  49. package/dist/lib/components/icon-button.d.ts.map +1 -0
  50. package/dist/lib/components/icon-button.js +7 -0
  51. package/dist/lib/components/icon-button.js.map +1 -0
  52. package/dist/lib/components/icon-menu.d.ts +16 -0
  53. package/dist/lib/components/icon-menu.d.ts.map +1 -0
  54. package/dist/lib/components/icon-menu.js +49 -0
  55. package/dist/lib/components/icon-menu.js.map +1 -0
  56. package/dist/lib/components/simple-menu.d.ts +16 -0
  57. package/dist/lib/components/simple-menu.d.ts.map +1 -0
  58. package/dist/lib/components/simple-menu.js +30 -0
  59. package/dist/lib/components/simple-menu.js.map +1 -0
  60. package/dist/lib/geocode/geocoder-history.d.ts +23 -0
  61. package/dist/lib/geocode/geocoder-history.d.ts.map +1 -0
  62. package/dist/lib/geocode/geocoder-history.js +64 -0
  63. package/dist/lib/geocode/geocoder-history.js.map +1 -0
  64. package/dist/lib/geocode/geocoder.d.ts +15 -0
  65. package/dist/lib/geocode/geocoder.d.ts.map +1 -0
  66. package/dist/lib/geocode/geocoder.js +5 -0
  67. package/dist/lib/geocode/geocoder.js.map +1 -0
  68. package/dist/lib/geocode/geocoders.d.ts +68 -0
  69. package/dist/lib/geocode/geocoders.d.ts.map +1 -0
  70. package/dist/lib/geocode/geocoders.js +182 -0
  71. package/dist/lib/geocode/geocoders.js.map +1 -0
  72. package/dist/loading-widget.d.ts +26 -0
  73. package/dist/loading-widget.d.ts.map +1 -0
  74. package/dist/loading-widget.js +41 -0
  75. package/dist/loading-widget.js.map +1 -0
  76. package/dist/reset-view-widget.d.ts +4 -4
  77. package/dist/reset-view-widget.d.ts.map +1 -1
  78. package/dist/reset-view-widget.js +7 -10
  79. package/dist/reset-view-widget.js.map +1 -1
  80. package/dist/scale-widget.d.ts +28 -0
  81. package/dist/scale-widget.d.ts.map +1 -0
  82. package/dist/scale-widget.js +111 -0
  83. package/dist/scale-widget.js.map +1 -0
  84. package/dist/screenshot-widget.d.ts +4 -4
  85. package/dist/screenshot-widget.d.ts.map +1 -1
  86. package/dist/screenshot-widget.js +7 -14
  87. package/dist/screenshot-widget.js.map +1 -1
  88. package/dist/splitter-widget.d.ts +32 -0
  89. package/dist/splitter-widget.d.ts.map +1 -0
  90. package/dist/splitter-widget.js +123 -0
  91. package/dist/splitter-widget.js.map +1 -0
  92. package/dist/stats-widget.d.ts +36 -0
  93. package/dist/stats-widget.d.ts.map +1 -0
  94. package/dist/stats-widget.js +115 -0
  95. package/dist/stats-widget.js.map +1 -0
  96. package/dist/stylesheet.css +121 -4
  97. package/dist/theme-widget.d.ts +31 -0
  98. package/dist/theme-widget.d.ts.map +1 -0
  99. package/dist/theme-widget.js +83 -0
  100. package/dist/theme-widget.js.map +1 -0
  101. package/dist/themes.d.ts +65 -36
  102. package/dist/themes.d.ts.map +1 -1
  103. package/dist/themes.js +20 -8
  104. package/dist/themes.js.map +1 -1
  105. package/dist/timeline-widget.d.ts +59 -0
  106. package/dist/timeline-widget.d.ts.map +1 -0
  107. package/dist/timeline-widget.js +83 -0
  108. package/dist/timeline-widget.js.map +1 -0
  109. package/dist/view-selector-widget.d.ts +33 -0
  110. package/dist/view-selector-widget.d.ts.map +1 -0
  111. package/dist/view-selector-widget.js +62 -0
  112. package/dist/view-selector-widget.js.map +1 -0
  113. package/dist/zoom-widget.d.ts +14 -43
  114. package/dist/zoom-widget.d.ts.map +1 -1
  115. package/dist/zoom-widget.js +14 -56
  116. package/dist/zoom-widget.js.map +1 -1
  117. package/dist.min.js +3 -1
  118. package/package.json +4 -3
  119. package/src/compass-widget.tsx +44 -106
  120. package/src/context-menu-widget.tsx +115 -0
  121. package/src/fps-widget.tsx +67 -0
  122. package/src/fullscreen-widget.tsx +33 -86
  123. package/src/geocoder-widget.tsx +209 -0
  124. package/src/gimbal-widget.tsx +188 -0
  125. package/src/index.ts +58 -8
  126. package/src/info-widget.tsx +225 -0
  127. package/src/lib/components/button-group.tsx +16 -0
  128. package/src/lib/components/dropdown-menu.tsx +98 -0
  129. package/src/lib/components/grouped-icon-button.tsx +24 -0
  130. package/src/lib/components/icon-button.tsx +30 -0
  131. package/src/lib/components/icon-menu.tsx +89 -0
  132. package/src/lib/components/simple-menu.tsx +52 -0
  133. package/src/lib/geocode/geocoder-history.ts +73 -0
  134. package/src/lib/geocode/geocoder.ts +15 -0
  135. package/src/lib/geocode/geocoders.ts +199 -0
  136. package/src/loading-widget.tsx +67 -0
  137. package/src/reset-view-widget.tsx +8 -11
  138. package/src/scale-widget.tsx +183 -0
  139. package/src/screenshot-widget.tsx +9 -11
  140. package/src/splitter-widget.tsx +179 -0
  141. package/src/stats-widget.tsx +166 -0
  142. package/src/stylesheet.css +121 -4
  143. package/src/theme-widget.tsx +120 -0
  144. package/src/themes.ts +45 -12
  145. package/src/timeline-widget.tsx +155 -0
  146. package/src/view-selector-widget.tsx +108 -0
  147. package/src/zoom-widget.tsx +39 -113
  148. package/dist/components.d.ts +0 -4
  149. package/dist/components.d.ts.map +0 -1
  150. package/dist/components.js +0 -17
  151. package/dist/components.js.map +0 -1
  152. package/dist/widget-impl.d.ts +0 -29
  153. package/dist/widget-impl.d.ts.map +0 -1
  154. package/dist/widget-impl.js +0 -60
  155. package/dist/widget-impl.js.map +0 -1
  156. package/src/components.tsx +0 -38
  157. package/src/widget-impl.ts +0 -88
@@ -0,0 +1,29 @@
1
+ import { Widget, WidgetProps } from '@deck.gl/core';
2
+ import type { WidgetPlacement, Deck } from '@deck.gl/core';
3
+ /** Properties for the FpsWidget. */
4
+ export type FpsWidgetProps = WidgetProps & {
5
+ /** Widget positioning within the view. Default 'top-left'. */
6
+ placement?: WidgetPlacement;
7
+ };
8
+ /**
9
+ * Displays the average frames per second reported by the Deck instance.
10
+ */
11
+ export declare class FpsWidget extends Widget<FpsWidgetProps> {
12
+ static defaultProps: Required<FpsWidgetProps>;
13
+ className: string;
14
+ placement: WidgetPlacement;
15
+ private _lastFps;
16
+ constructor(props?: FpsWidgetProps);
17
+ setProps(props: Partial<FpsWidgetProps>): void;
18
+ onRenderHTML(rootElement: HTMLElement): void;
19
+ onRedraw({}: {
20
+ viewports: any[];
21
+ layers: any[];
22
+ }): void;
23
+ onAdd({}: {
24
+ deck: Deck<any>;
25
+ viewId: string | null;
26
+ }): void;
27
+ _getFps(): number;
28
+ }
29
+ //# sourceMappingURL=fps-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fps-widget.d.ts","sourceRoot":"","sources":["../src/fps-widget.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAC,eAAe,EAAE,IAAI,EAAC,MAAM,eAAe,CAAC;AAEzD,oCAAoC;AACpC,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG;IACzC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAU,SAAQ,MAAM,CAAC,cAAc,CAAC;IACnD,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,CAI3C;IAEF,SAAS,SAAqB;IAC9B,SAAS,EAAE,eAAe,CAAc;IAExC,OAAO,CAAC,QAAQ,CAAc;gBAElB,KAAK,GAAE,cAAmB;IAKtC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAO9C,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAS5C,QAAQ,CAAC,EAAE,EAAE;QAAC,SAAS,EAAE,GAAG,EAAE,CAAC;QAAC,MAAM,EAAE,GAAG,EAAE,CAAA;KAAC,GAAG,IAAI;IAQrD,KAAK,CAAC,EAAE,EAAE;QAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,GAAG,IAAI;IAKzD,OAAO,IAAI,MAAM;CAIlB"}
@@ -0,0 +1,51 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Widget } from '@deck.gl/core';
5
+ /**
6
+ * Displays the average frames per second reported by the Deck instance.
7
+ */
8
+ export class FpsWidget extends Widget {
9
+ constructor(props = {}) {
10
+ super(props, FpsWidget.defaultProps);
11
+ this.className = 'deck-widget-fps';
12
+ this.placement = 'top-left';
13
+ this._lastFps = -1;
14
+ this.placement = props.placement ?? this.placement;
15
+ }
16
+ setProps(props) {
17
+ if (props.placement) {
18
+ this.placement = props.placement;
19
+ }
20
+ super.setProps(props);
21
+ }
22
+ onRenderHTML(rootElement) {
23
+ const fps = this._getFps();
24
+ rootElement.innerText = `FPS:\n${fps}`;
25
+ rootElement.style.backgroundColor = 'white';
26
+ rootElement.style.fontFamily = 'monospace';
27
+ rootElement.style.fontSize = '8px';
28
+ rootElement.style.fontWeight = '700'; // Make font bolder on click
29
+ }
30
+ onRedraw({}) {
31
+ const fps = this._getFps();
32
+ if (fps !== this._lastFps) {
33
+ this._lastFps = fps;
34
+ this.updateHTML();
35
+ }
36
+ }
37
+ onAdd({}) {
38
+ this._lastFps = this._getFps();
39
+ this.updateHTML();
40
+ }
41
+ _getFps() {
42
+ // @ts-expect-error protected
43
+ return Math.round(this.deck.metrics.fps ?? 0);
44
+ }
45
+ }
46
+ FpsWidget.defaultProps = {
47
+ ...Widget.defaultProps,
48
+ id: 'fps',
49
+ placement: 'top-left'
50
+ };
51
+ //# sourceMappingURL=fps-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fps-widget.js","sourceRoot":"","sources":["../src/fps-widget.tsx"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,MAAM,EAAc,MAAM,eAAe,CAAC;AASlD;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,MAAsB;IAYnD,YAAY,QAAwB,EAAE;QACpC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;QANvC,cAAS,GAAG,iBAAiB,CAAC;QAC9B,cAAS,GAAoB,UAAU,CAAC;QAEhC,aAAQ,GAAW,CAAC,CAAC,CAAC;QAI5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;IACrD,CAAC;IAED,QAAQ,CAAC,KAA8B;QACrC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,WAAwB;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,WAAW,CAAC,SAAS,GAAG,SAAS,GAAG,EAAE,CAAC;QACvC,WAAW,CAAC,KAAK,CAAC,eAAe,GAAG,OAAO,CAAC;QAC5C,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC;QAC3C,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QACnC,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,4BAA4B;IACpE,CAAC;IAED,QAAQ,CAAC,EAAqC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;YACpB,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,EAA4C;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,OAAO;QACL,6BAA6B;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;;AAhDM,sBAAY,GAA6B;IAC9C,GAAG,MAAM,CAAC,YAAY;IACtB,EAAE,EAAE,KAAK;IACT,SAAS,EAAE,UAAU;CACtB,AAJkB,CAIjB"}
@@ -1,47 +1,29 @@
1
- import type { Deck, Widget, WidgetPlacement } from '@deck.gl/core';
2
- export type FullscreenWidgetProps = {
1
+ import { Widget, type WidgetProps, type WidgetPlacement } from '@deck.gl/core';
2
+ export type FullscreenWidgetProps = WidgetProps & {
3
3
  id?: string;
4
- /**
5
- * Widget positioning within the view. Default 'top-left'.
6
- */
4
+ /** Widget positioning within the view. Default 'top-left'. */
7
5
  placement?: WidgetPlacement;
8
- /**
9
- * A [compatible DOM element](https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#Compatible_elements) which should be made full screen.
10
- * By default, the map container element will be made full screen.
11
- */
12
- container?: HTMLElement;
13
- /**
14
- * Tooltip message when out of fullscreen.
15
- */
6
+ /** Tooltip message when out of fullscreen. */
16
7
  enterLabel?: string;
17
- /**
18
- * Tooltip message when fullscreen.
19
- */
8
+ /** Tooltip message when fullscreen. */
20
9
  exitLabel?: string;
21
10
  /**
22
- * CSS inline style overrides.
11
+ * A compatible DOM element which should be made full screen. By default, the map container element will be made full screen.
12
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#Compatible_elements
23
13
  */
24
- style?: Partial<CSSStyleDeclaration>;
25
- /**
26
- * Additional CSS class.
27
- */
28
- className?: string;
14
+ container?: HTMLElement;
29
15
  };
30
- export declare class FullscreenWidget implements Widget<FullscreenWidgetProps> {
31
- id: string;
32
- props: FullscreenWidgetProps;
16
+ export declare class FullscreenWidget extends Widget<FullscreenWidgetProps> {
17
+ static defaultProps: Required<FullscreenWidgetProps>;
18
+ className: string;
33
19
  placement: WidgetPlacement;
34
- deck?: Deck<any>;
35
- element?: HTMLDivElement;
36
20
  fullscreen: boolean;
37
- constructor(props: FullscreenWidgetProps);
38
- onAdd({ deck }: {
39
- deck: Deck<any>;
40
- }): HTMLDivElement;
21
+ constructor(props?: FullscreenWidgetProps);
22
+ onAdd(): void;
41
23
  onRemove(): void;
42
- private update;
24
+ onRenderHTML(rootElement: HTMLElement): void;
43
25
  setProps(props: Partial<FullscreenWidgetProps>): void;
44
- getContainer(): HTMLElement | null | undefined;
26
+ getContainer(): HTMLElement;
45
27
  onFullscreenChange(): void;
46
28
  handleClick(): Promise<void>;
47
29
  requestFullscreen(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"fullscreen-widget.d.ts","sourceRoot":"","sources":["../src/fullscreen-widget.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAIjE,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;OAGG;IAEH,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,gBAAiB,YAAW,MAAM,CAAC,qBAAqB,CAAC;IACpE,EAAE,SAAgB;IAClB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,SAAS,EAAE,eAAe,CAAc;IAExC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB,UAAU,EAAE,OAAO,CAAS;gBAEhB,KAAK,EAAE,qBAAqB;IAYxC,KAAK,CAAC,EAAC,IAAI,EAAC,EAAE;QAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;KAAC,GAAG,cAAc;IAahD,QAAQ;IAMR,OAAO,CAAC,MAAM;IAiBd,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAoB9C,YAAY;IAIZ,kBAAkB;IASZ,WAAW;IASX,iBAAiB;IASjB,cAAc;IAQpB,sBAAsB;CAGvB"}
1
+ {"version":3,"file":"fullscreen-widget.d.ts","sourceRoot":"","sources":["../src/fullscreen-widget.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAC,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAC,MAAM,eAAe,CAAC;AAM7E,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,MAAM,CAAC,qBAAqB,CAAC;IACjE,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAOlD;IAEF,SAAS,SAA4B;IACrC,SAAS,EAAE,eAAe,CAAc;IACxC,UAAU,EAAE,OAAO,CAAS;gBAEhB,KAAK,GAAE,qBAA0B;IAK7C,KAAK,IAAI,IAAI;IAIb,QAAQ;IAIR,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAW5C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAK9C,YAAY;IAIZ,kBAAkB;IASZ,WAAW;IASX,iBAAiB;IASjB,cAAc;IAQpB,sBAAsB;CAGvB"}
@@ -3,68 +3,29 @@ import { jsx as _jsx } from "preact/jsx-runtime";
3
3
  // SPDX-License-Identifier: MIT
4
4
  // Copyright (c) vis.gl contributors
5
5
  /* global document */
6
- import { _deepEqual as deepEqual, _applyStyles as applyStyles, _removeStyles as removeStyles } from '@deck.gl/core';
6
+ import { Widget } from '@deck.gl/core';
7
7
  import { render } from 'preact';
8
- import { IconButton } from "./components.js";
9
- export class FullscreenWidget {
10
- constructor(props) {
11
- this.id = 'fullscreen';
8
+ import { IconButton } from "./lib/components/icon-button.js";
9
+ export class FullscreenWidget extends Widget {
10
+ constructor(props = {}) {
11
+ super(props, FullscreenWidget.defaultProps);
12
+ this.className = 'deck-widget-fullscreen';
12
13
  this.placement = 'top-left';
13
14
  this.fullscreen = false;
14
- this.id = props.id ?? this.id;
15
15
  this.placement = props.placement ?? this.placement;
16
- this.props = {
17
- ...props,
18
- enterLabel: props.enterLabel ?? 'Enter Fullscreen',
19
- exitLabel: props.exitLabel ?? 'Exit Fullscreen',
20
- style: props.style ?? {}
21
- };
22
16
  }
23
- onAdd({ deck }) {
24
- const { style, className } = this.props;
25
- const el = document.createElement('div');
26
- el.classList.add('deck-widget', 'deck-widget-fullscreen');
27
- if (className)
28
- el.classList.add(className);
29
- applyStyles(el, style);
30
- this.deck = deck;
31
- this.element = el;
32
- this.update();
17
+ onAdd() {
33
18
  document.addEventListener('fullscreenchange', this.onFullscreenChange.bind(this));
34
- return el;
35
19
  }
36
20
  onRemove() {
37
- this.deck = undefined;
38
- this.element = undefined;
39
21
  document.removeEventListener('fullscreenchange', this.onFullscreenChange.bind(this));
40
22
  }
41
- update() {
42
- const { enterLabel, exitLabel } = this.props;
43
- const element = this.element;
44
- if (!element) {
45
- return;
46
- }
47
- const ui = (_jsx(IconButton, { onClick: this.handleClick.bind(this), label: this.fullscreen ? exitLabel : enterLabel, className: this.fullscreen ? 'deck-widget-fullscreen-exit' : 'deck-widget-fullscreen-enter' }));
48
- render(ui, element);
23
+ onRenderHTML(rootElement) {
24
+ render(_jsx(IconButton, { onClick: this.handleClick.bind(this), label: this.fullscreen ? this.props.exitLabel : this.props.enterLabel, className: this.fullscreen ? 'deck-widget-fullscreen-exit' : 'deck-widget-fullscreen-enter' }), rootElement);
49
25
  }
50
26
  setProps(props) {
51
27
  this.placement = props.placement ?? this.placement;
52
- const oldProps = this.props;
53
- const el = this.element;
54
- if (el) {
55
- if (oldProps.className !== props.className) {
56
- if (oldProps.className)
57
- el.classList.remove(oldProps.className);
58
- if (props.className)
59
- el.classList.add(props.className);
60
- }
61
- if (!deepEqual(oldProps.style, props.style, 1)) {
62
- removeStyles(el, oldProps.style);
63
- applyStyles(el, props.style);
64
- }
65
- }
66
- Object.assign(this.props, props);
67
- this.update();
28
+ super.setProps(props);
68
29
  }
69
30
  getContainer() {
70
31
  return this.props.container || this.deck?.getCanvas()?.parentElement;
@@ -75,7 +36,7 @@ export class FullscreenWidget {
75
36
  if (prevFullscreen !== fullscreen) {
76
37
  this.fullscreen = !this.fullscreen;
77
38
  }
78
- this.update();
39
+ this.updateHTML();
79
40
  }
80
41
  async handleClick() {
81
42
  if (this.fullscreen) {
@@ -84,7 +45,7 @@ export class FullscreenWidget {
84
45
  else {
85
46
  await this.requestFullscreen();
86
47
  }
87
- this.update();
48
+ this.updateHTML();
88
49
  }
89
50
  async requestFullscreen() {
90
51
  const container = this.getContainer();
@@ -107,4 +68,12 @@ export class FullscreenWidget {
107
68
  this.getContainer()?.classList.toggle('deck-pseudo-fullscreen');
108
69
  }
109
70
  }
71
+ FullscreenWidget.defaultProps = {
72
+ ...Widget.defaultProps,
73
+ id: 'fullscreen',
74
+ placement: 'top-left',
75
+ enterLabel: 'Enter Fullscreen',
76
+ exitLabel: 'Exit Fullscreen',
77
+ container: undefined
78
+ };
110
79
  //# sourceMappingURL=fullscreen-widget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fullscreen-widget.js","sourceRoot":"","sources":["../src/fullscreen-widget.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fullscreen-widget.js","sourceRoot":"","sources":["../src/fullscreen-widget.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { Widget, WidgetProps } from '@deck.gl/core';
2
+ import type { WidgetPlacement, Viewport } from '@deck.gl/core';
3
+ import { type Geocoder } from "./lib/geocode/geocoder.js";
4
+ import { GeocoderHistory } from "./lib/geocode/geocoder-history.js";
5
+ /** @todo - is the the best we can do? */
6
+ type ViewState = Record<string, unknown>;
7
+ /** Properties for the GeocoderWidget */
8
+ export type GeocoderWidgetProps = WidgetProps & {
9
+ viewId?: string;
10
+ /** Widget positioning within the view. Default 'top-left'. */
11
+ placement?: WidgetPlacement;
12
+ /** Tooltip message */
13
+ label?: string;
14
+ transitionDuration?: number;
15
+ /** Geocoding service selector, for declarative usage */
16
+ geocoder?: 'google' | 'mapbox' | 'opencage' | 'coordinates' | 'custom';
17
+ /** Custom geocoding service (Used when geocoder = 'custom') */
18
+ customGeocoder?: Geocoder;
19
+ /** API key used for geocoding services */
20
+ apiKey?: string;
21
+ /** Whether to use geolocation @note Experimental*/
22
+ _geolocation?: boolean;
23
+ };
24
+ /**
25
+ * A widget that display a text box that lets user type in a location
26
+ * and a button that moves the view to that location.
27
+ * @todo For now only supports coordinates, Could be extended with location service integrations.
28
+ */
29
+ export declare class GeocoderWidget extends Widget<GeocoderWidgetProps> {
30
+ static defaultProps: Required<GeocoderWidgetProps>;
31
+ className: string;
32
+ placement: WidgetPlacement;
33
+ geocodeHistory: GeocoderHistory;
34
+ addressText: string;
35
+ geocoder: Geocoder;
36
+ constructor(props?: GeocoderWidgetProps);
37
+ setProps(props: Partial<GeocoderWidgetProps>): void;
38
+ onRenderHTML(rootElement: HTMLElement): void;
39
+ setInput: (text: string) => void;
40
+ handleKeyPress: (e: any) => void;
41
+ handleSelect: (address: string) => void;
42
+ /** Sync wrapper for async geocode() */
43
+ handleSubmit: () => void;
44
+ /** Perform geocoding */
45
+ geocode: (address: string) => Promise<void>;
46
+ setViewState(viewState: ViewState): void;
47
+ onViewportChange(viewport: Viewport): void;
48
+ viewports: Record<string, Viewport>;
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=geocoder-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoder-widget.d.ts","sourceRoot":"","sources":["../src/geocoder-widget.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAC,eAAe,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAI7D,OAAO,EAAC,KAAK,QAAQ,EAAC,kCAA+B;AACrD,OAAO,EAAC,eAAe,EAAC,0CAAuC;AAS/D,yCAAyC;AACzC,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAIzC,wCAAwC;AACxC,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,QAAQ,CAAC;IACvE,+DAA+D;IAC/D,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,MAAM,CAAC,mBAAmB,CAAC;IAC7D,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAWhD;IAEF,SAAS,SAA0B;IACnC,SAAS,EAAE,eAAe,CAAc;IAExC,cAAc,kBAA2B;IACzC,WAAW,EAAE,MAAM,CAAM;IACzB,QAAQ,EAAE,QAAQ,CAAuB;gBAE7B,KAAK,GAAE,mBAAwB;IAO3C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IASnD,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IA8C5C,QAAQ,SAAU,MAAM,UAEtB;IAEF,cAAc,mBAIZ;IAEF,YAAY,YAAa,MAAM,UAG7B;IAEF,uCAAuC;IACvC,YAAY,aAGV;IAEF,wBAAwB;IACxB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAWzC;IAGF,YAAY,CAAC,SAAS,EAAE,SAAS;IAiBjC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ;IAInC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAM;CAC1C"}
@@ -0,0 +1,138 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ // deck.gl
3
+ // SPDX-License-Identifier: MIT
4
+ // Copyright (c) vis.gl contributors
5
+ import { Widget } from '@deck.gl/core';
6
+ import { FlyToInterpolator, LinearInterpolator } from '@deck.gl/core';
7
+ import { render } from 'preact';
8
+ import { DropdownMenu } from "./lib/components/dropdown-menu.js";
9
+ import { GeocoderHistory } from "./lib/geocode/geocoder-history.js";
10
+ import { GoogleGeocoder, MapboxGeocoder, OpenCageGeocoder, CoordinatesGeocoder, CurrentLocationGeocoder } from "./lib/geocode/geocoders.js";
11
+ const CURRENT_LOCATION = 'current';
12
+ /**
13
+ * A widget that display a text box that lets user type in a location
14
+ * and a button that moves the view to that location.
15
+ * @todo For now only supports coordinates, Could be extended with location service integrations.
16
+ */
17
+ export class GeocoderWidget extends Widget {
18
+ constructor(props = {}) {
19
+ super(props, GeocoderWidget.defaultProps);
20
+ this.className = 'deck-widget-geocoder';
21
+ this.placement = 'top-left';
22
+ this.geocodeHistory = new GeocoderHistory({});
23
+ this.addressText = '';
24
+ this.geocoder = CoordinatesGeocoder;
25
+ this.setInput = (text) => {
26
+ this.addressText = text;
27
+ };
28
+ this.handleKeyPress = e => {
29
+ if (e.key === 'Enter') {
30
+ this.handleSubmit();
31
+ }
32
+ };
33
+ this.handleSelect = (address) => {
34
+ this.setInput(address);
35
+ this.handleSubmit();
36
+ };
37
+ /** Sync wrapper for async geocode() */
38
+ this.handleSubmit = () => {
39
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
40
+ this.geocode(this.addressText);
41
+ };
42
+ /** Perform geocoding */
43
+ this.geocode = async (address) => {
44
+ const useGeolocation = this.props._geolocation && address === CURRENT_LOCATION;
45
+ const geocoder = useGeolocation ? CurrentLocationGeocoder : this.geocoder;
46
+ const coordinates = await this.geocodeHistory.geocode(geocoder, this.addressText, this.props.apiKey);
47
+ if (coordinates) {
48
+ this.setViewState(coordinates);
49
+ }
50
+ };
51
+ this.viewports = {};
52
+ this.placement = props.placement ?? this.placement;
53
+ this.setProps(props);
54
+ this.geocoder = getGeocoder(props);
55
+ }
56
+ setProps(props) {
57
+ super.setProps(props);
58
+ this.placement = props.placement ?? this.placement;
59
+ this.geocoder = getGeocoder(this.props);
60
+ if (this.geocoder.requiresApiKey && !this.props.apiKey) {
61
+ throw new Error(`API key is required for the ${this.geocoder.name} geocoder`);
62
+ }
63
+ }
64
+ onRenderHTML(rootElement) {
65
+ const menuItems = this.props._geolocation
66
+ ? [CURRENT_LOCATION, ...this.geocodeHistory.addressHistory]
67
+ : [...this.geocodeHistory.addressHistory];
68
+ render(_jsxs("div", { className: "deck-widget-geocoder", style: {
69
+ pointerEvents: 'auto',
70
+ display: 'flex',
71
+ alignItems: 'center',
72
+ flexWrap: 'wrap' // Allows wrapping on smaller screens
73
+ }, children: [_jsx("input", { type: "text", placeholder: this.geocoder.placeholderLocation ?? 'Enter address or location', value: this.geocodeHistory.addressText,
74
+ // @ts-expect-error event type
75
+ onInput: e => this.setInput(e.target?.value || ''), onKeyPress: this.handleKeyPress, style: {
76
+ flex: '1 1 auto',
77
+ minWidth: '200px',
78
+ margin: 0,
79
+ padding: '8px',
80
+ boxSizing: 'border-box'
81
+ } }), _jsx(DropdownMenu, { menuItems: menuItems, onSelect: this.handleSelect, style: {
82
+ margin: 2,
83
+ padding: '4px 2px',
84
+ boxSizing: 'border-box'
85
+ } }), this.geocodeHistory.errorText && (_jsx("div", { className: "error", children: this.geocodeHistory.errorText }))] }), rootElement);
86
+ }
87
+ // TODO - MOVE TO WIDGETIMPL?
88
+ setViewState(viewState) {
89
+ const viewId = this.props.viewId || viewState?.id || 'default-view';
90
+ const viewport = this.viewports[viewId] || {};
91
+ const nextViewState = {
92
+ ...viewport,
93
+ ...viewState
94
+ };
95
+ if (this.props.transitionDuration > 0) {
96
+ nextViewState.transitionDuration = this.props.transitionDuration;
97
+ nextViewState.transitionInterpolator =
98
+ 'latitude' in nextViewState ? new FlyToInterpolator() : new LinearInterpolator();
99
+ }
100
+ // @ts-ignore Using private method temporary until there's a public one
101
+ this.deck._onViewStateChange({ viewId, viewState: nextViewState, interactionState: {} });
102
+ }
103
+ onViewportChange(viewport) {
104
+ this.viewports[viewport.id] = viewport;
105
+ }
106
+ }
107
+ GeocoderWidget.defaultProps = {
108
+ ...Widget.defaultProps,
109
+ id: 'geolocate',
110
+ viewId: undefined,
111
+ placement: 'top-left',
112
+ label: 'Geolocate',
113
+ transitionDuration: 200,
114
+ geocoder: 'coordinates',
115
+ customGeocoder: CoordinatesGeocoder,
116
+ apiKey: '',
117
+ _geolocation: false
118
+ };
119
+ function getGeocoder(props) {
120
+ switch (props.geocoder) {
121
+ case 'google':
122
+ return GoogleGeocoder;
123
+ case 'mapbox':
124
+ return MapboxGeocoder;
125
+ case 'opencage':
126
+ return OpenCageGeocoder;
127
+ case 'coordinates':
128
+ return CoordinatesGeocoder;
129
+ case 'custom':
130
+ if (!props.customGeocoder) {
131
+ throw new Error('Custom geocoder is not defined');
132
+ }
133
+ return props.customGeocoder;
134
+ default:
135
+ throw new Error(`Unknown geocoder: ${props.geocoder}`);
136
+ }
137
+ }
138
+ //# sourceMappingURL=geocoder-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoder-widget.js","sourceRoot":"","sources":["../src/geocoder-widget.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Widget } from '@deck.gl/core';
2
+ import type { Viewport, WidgetPlacement, WidgetProps } from '@deck.gl/core';
3
+ export type GimbalWidgetProps = WidgetProps & {
4
+ placement?: WidgetPlacement;
5
+ /** View to attach to and interact with. Required when using multiple views. */
6
+ viewId?: string | null;
7
+ /** Tooltip message. */
8
+ label?: string;
9
+ /** Width of gimbal lines */
10
+ strokeWidth?: number;
11
+ /** Transition duration in ms when resetting rotation. */
12
+ transitionDuration?: number;
13
+ };
14
+ export declare class GimbalWidget extends Widget<GimbalWidgetProps> {
15
+ static defaultProps: Required<GimbalWidgetProps>;
16
+ className: string;
17
+ placement: WidgetPlacement;
18
+ viewId?: string | null;
19
+ constructor(props?: GimbalWidgetProps);
20
+ setProps(props: Partial<GimbalWidgetProps>): void;
21
+ onRenderHTML(rootElement: HTMLElement): void;
22
+ onViewportChange(viewport: Viewport): void;
23
+ resetOrbitView(): void;
24
+ getNormalizedRotation(): {
25
+ rotationOrbit: number;
26
+ rotationX: number;
27
+ };
28
+ getRotation(viewState?: any): [number, number];
29
+ getViewId(): string;
30
+ getViewState(viewId: string): import("modules/core/src/lib/view-manager").ViewStateObject<import("@deck.gl/core").View<import("modules/core/src/controllers/transition-manager").TransitionProps, import("modules/core/src/views/view").CommonViewProps<import("modules/core/src/controllers/transition-manager").TransitionProps>>[]>;
31
+ getViewManager(): import("modules/core/src/lib/view-manager").default<import("@deck.gl/core").View<import("modules/core/src/controllers/transition-manager").TransitionProps, import("modules/core/src/views/view").CommonViewProps<import("modules/core/src/controllers/transition-manager").TransitionProps>>[]>;
32
+ }
33
+ //# sourceMappingURL=gimbal-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gimbal-widget.d.ts","sourceRoot":"","sources":["../src/gimbal-widget.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAqB,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAC,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAG1E,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAC5C,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,qBAAa,YAAa,SAAQ,MAAM,CAAC,iBAAiB,CAAC;IACzD,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAQ9C;IAEF,SAAS,SAAwB;IACjC,SAAS,EAAE,eAAe,CAAc;IACxC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAElB,KAAK,GAAE,iBAAsB;IAKzC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAM1C,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAiE5C,gBAAgB,CAAC,QAAQ,EAAE,QAAQ;IAInC,cAAc;IAkBd,qBAAqB;;;;IAQrB,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAS9C,SAAS;IAKT,YAAY,CAAC,MAAM,EAAE,MAAM;IAM3B,cAAc;CAQf"}