@deck.gl/widgets 9.2.11 → 9.3.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.
Files changed (152) hide show
  1. package/dist/compass-widget.js +5 -5
  2. package/dist/compass-widget.js.map +1 -1
  3. package/dist/context-menu-widget.d.ts +27 -20
  4. package/dist/context-menu-widget.d.ts.map +1 -1
  5. package/dist/context-menu-widget.js +45 -48
  6. package/dist/context-menu-widget.js.map +1 -1
  7. package/dist/dist.dev.js +3114 -869
  8. package/dist/fullscreen-widget.js +1 -1
  9. package/dist/fullscreen-widget.js.map +1 -1
  10. package/dist/geocoder-widget.d.ts +2 -4
  11. package/dist/geocoder-widget.d.ts.map +1 -1
  12. package/dist/geocoder-widget.js +16 -20
  13. package/dist/geocoder-widget.js.map +1 -1
  14. package/dist/gimbal-widget.d.ts +0 -3
  15. package/dist/gimbal-widget.d.ts.map +1 -1
  16. package/dist/gimbal-widget.js +4 -22
  17. package/dist/gimbal-widget.js.map +1 -1
  18. package/dist/icon-widget.d.ts +28 -0
  19. package/dist/icon-widget.d.ts.map +1 -0
  20. package/dist/icon-widget.js +35 -0
  21. package/dist/icon-widget.js.map +1 -0
  22. package/dist/index.cjs +1271 -561
  23. package/dist/index.cjs.map +4 -4
  24. package/dist/index.d.ts +16 -12
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +11 -10
  27. package/dist/index.js.map +1 -1
  28. package/dist/info-widget.d.ts +39 -17
  29. package/dist/info-widget.d.ts.map +1 -1
  30. package/dist/info-widget.js +46 -130
  31. package/dist/info-widget.js.map +1 -1
  32. package/dist/lib/components/dropdown-menu.d.ts +12 -5
  33. package/dist/lib/components/dropdown-menu.d.ts.map +1 -1
  34. package/dist/lib/components/dropdown-menu.js +20 -11
  35. package/dist/lib/components/dropdown-menu.js.map +1 -1
  36. package/dist/lib/components/icon-button.d.ts +3 -0
  37. package/dist/lib/components/icon-button.d.ts.map +1 -1
  38. package/dist/lib/components/icon-button.js +10 -2
  39. package/dist/lib/components/icon-button.js.map +1 -1
  40. package/dist/lib/components/popover.d.ts +30 -0
  41. package/dist/lib/components/popover.d.ts.map +1 -0
  42. package/dist/lib/components/popover.js +93 -0
  43. package/dist/lib/components/popover.js.map +1 -0
  44. package/dist/lib/components/range-input.d.ts +26 -0
  45. package/dist/lib/components/range-input.d.ts.map +1 -0
  46. package/dist/lib/components/range-input.js +261 -0
  47. package/dist/lib/components/range-input.js.map +1 -0
  48. package/dist/lib/components/user-content.d.ts +8 -0
  49. package/dist/lib/components/user-content.d.ts.map +1 -0
  50. package/dist/lib/components/user-content.js +15 -0
  51. package/dist/lib/components/user-content.js.map +1 -0
  52. package/dist/lib/data-url.d.ts +5 -0
  53. package/dist/lib/data-url.d.ts.map +1 -0
  54. package/dist/lib/data-url.js +7 -0
  55. package/dist/lib/data-url.js.map +1 -0
  56. package/dist/popup-widget.d.ts +64 -0
  57. package/dist/popup-widget.d.ts.map +1 -0
  58. package/dist/popup-widget.js +76 -0
  59. package/dist/popup-widget.js.map +1 -0
  60. package/dist/reset-view-widget.d.ts +1 -1
  61. package/dist/reset-view-widget.d.ts.map +1 -1
  62. package/dist/reset-view-widget.js +12 -11
  63. package/dist/reset-view-widget.js.map +1 -1
  64. package/dist/scrollbar-widget.d.ts +68 -0
  65. package/dist/scrollbar-widget.d.ts.map +1 -0
  66. package/dist/scrollbar-widget.js +181 -0
  67. package/dist/scrollbar-widget.js.map +1 -0
  68. package/dist/selector-widget.d.ts +44 -0
  69. package/dist/selector-widget.d.ts.map +1 -0
  70. package/dist/selector-widget.js +64 -0
  71. package/dist/selector-widget.js.map +1 -0
  72. package/dist/splitter-widget.d.ts +52 -11
  73. package/dist/splitter-widget.d.ts.map +1 -1
  74. package/dist/splitter-widget.js +177 -76
  75. package/dist/splitter-widget.js.map +1 -1
  76. package/dist/stats-widget.d.ts +6 -1
  77. package/dist/stats-widget.d.ts.map +1 -1
  78. package/dist/stats-widget.js +39 -10
  79. package/dist/stats-widget.js.map +1 -1
  80. package/dist/stylesheet.css +291 -39
  81. package/dist/theme-widget.d.ts.map +1 -1
  82. package/dist/theme-widget.js +7 -5
  83. package/dist/theme-widget.js.map +1 -1
  84. package/dist/themes.d.ts +30 -0
  85. package/dist/themes.d.ts.map +1 -1
  86. package/dist/themes.js +28 -4
  87. package/dist/themes.js.map +1 -1
  88. package/dist/timeline-widget.d.ts +25 -6
  89. package/dist/timeline-widget.d.ts.map +1 -1
  90. package/dist/timeline-widget.js +51 -18
  91. package/dist/timeline-widget.js.map +1 -1
  92. package/dist/toggle-widget.d.ts +38 -0
  93. package/dist/toggle-widget.d.ts.map +1 -0
  94. package/dist/toggle-widget.js +47 -0
  95. package/dist/toggle-widget.js.map +1 -0
  96. package/dist/zoom-widget.d.ts +2 -8
  97. package/dist/zoom-widget.d.ts.map +1 -1
  98. package/dist/zoom-widget.js +23 -18
  99. package/dist/zoom-widget.js.map +1 -1
  100. package/dist.min.js +2 -2
  101. package/package.json +4 -3
  102. package/src/compass-widget.tsx +5 -5
  103. package/src/context-menu-widget.tsx +88 -78
  104. package/src/fullscreen-widget.tsx +1 -1
  105. package/src/geocoder-widget.tsx +17 -24
  106. package/src/gimbal-widget.tsx +4 -26
  107. package/src/icon-widget.tsx +69 -0
  108. package/src/index.ts +22 -15
  109. package/src/info-widget.tsx +100 -157
  110. package/src/lib/components/dropdown-menu.tsx +58 -29
  111. package/src/lib/components/icon-button.tsx +15 -3
  112. package/src/lib/components/popover.tsx +167 -0
  113. package/src/lib/components/range-input.tsx +432 -0
  114. package/src/lib/components/user-content.tsx +30 -0
  115. package/src/lib/data-url.ts +5 -0
  116. package/src/popup-widget.tsx +170 -0
  117. package/src/reset-view-widget.tsx +12 -11
  118. package/src/scrollbar-widget.tsx +288 -0
  119. package/src/selector-widget.tsx +111 -0
  120. package/src/splitter-widget.tsx +281 -96
  121. package/src/stats-widget.tsx +59 -12
  122. package/src/stylesheet.css +291 -39
  123. package/src/theme-widget.tsx +7 -5
  124. package/src/themes.ts +35 -4
  125. package/src/timeline-widget.tsx +103 -33
  126. package/src/toggle-widget.tsx +101 -0
  127. package/src/zoom-widget.tsx +25 -21
  128. package/dist/fps-widget.d.ts +0 -28
  129. package/dist/fps-widget.d.ts.map +0 -1
  130. package/dist/fps-widget.js +0 -51
  131. package/dist/fps-widget.js.map +0 -1
  132. package/dist/lib/components/grouped-icon-button.d.ts +0 -10
  133. package/dist/lib/components/grouped-icon-button.d.ts.map +0 -1
  134. package/dist/lib/components/grouped-icon-button.js +0 -7
  135. package/dist/lib/components/grouped-icon-button.js.map +0 -1
  136. package/dist/lib/components/icon-menu.d.ts +0 -16
  137. package/dist/lib/components/icon-menu.d.ts.map +0 -1
  138. package/dist/lib/components/icon-menu.js +0 -34
  139. package/dist/lib/components/icon-menu.js.map +0 -1
  140. package/dist/lib/components/simple-menu.d.ts +0 -16
  141. package/dist/lib/components/simple-menu.d.ts.map +0 -1
  142. package/dist/lib/components/simple-menu.js +0 -30
  143. package/dist/lib/components/simple-menu.js.map +0 -1
  144. package/dist/view-selector-widget.d.ts +0 -35
  145. package/dist/view-selector-widget.d.ts.map +0 -1
  146. package/dist/view-selector-widget.js +0 -63
  147. package/dist/view-selector-widget.js.map +0 -1
  148. package/src/fps-widget.tsx +0 -77
  149. package/src/lib/components/grouped-icon-button.tsx +0 -27
  150. package/src/lib/components/icon-menu.tsx +0 -71
  151. package/src/lib/components/simple-menu.tsx +0 -52
  152. package/src/view-selector-widget.tsx +0 -151
@@ -0,0 +1,76 @@
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 { render } from 'preact';
7
+ import { Popover } from "./lib/components/popover.js";
8
+ import { UserContent } from "./lib/components/user-content.js";
9
+ import { IconButton } from "./lib/components/icon-button.js";
10
+ export class PopupWidget extends Widget {
11
+ constructor(props) {
12
+ super(props);
13
+ this.className = 'deck-widget-popup';
14
+ this.placement = 'fill';
15
+ this.setProps(this.props);
16
+ this.isOpen = this.props.defaultIsOpen;
17
+ }
18
+ setProps(props) {
19
+ this.viewId = props.viewId ?? this.viewId;
20
+ super.setProps(props);
21
+ }
22
+ onAdd({ deck }) {
23
+ this.deck = deck;
24
+ }
25
+ onRemove() {
26
+ // Invoke clean up of preact hooks
27
+ if (this.rootElement) {
28
+ render(null, this.rootElement);
29
+ }
30
+ }
31
+ onViewportChange(viewport) {
32
+ this.viewport = viewport;
33
+ this.updateHTML();
34
+ }
35
+ onClick() {
36
+ if (this.props.closeOnClickOutside) {
37
+ this._setIsOpen(false);
38
+ }
39
+ }
40
+ _setIsOpen(isOpen) {
41
+ if (this.isOpen === isOpen)
42
+ return;
43
+ this.isOpen = isOpen;
44
+ this.props.onOpenChange?.(isOpen);
45
+ this.updateHTML();
46
+ }
47
+ onRenderHTML(rootElement) {
48
+ if (!this.viewport) {
49
+ render(null, rootElement);
50
+ return;
51
+ }
52
+ const { marker, content, style } = this.props;
53
+ // Project the clicked geographic coordinate to canvas (x, y)
54
+ const [x, y] = this.viewport.project(this.props.position);
55
+ // Render the popup container with a content box and a placeholder for the arrow.
56
+ // The container is positioned absolutely (initially at 0,0) and will be repositioned after measuring.
57
+ const ui = (_jsxs("div", { children: [marker && (_jsx("div", { style: { position: 'absolute', left: x, top: y, pointerEvents: 'all', cursor: 'pointer' }, children: _jsx(UserContent, { ...marker, onClick: () => this._setIsOpen(true) }) })), this.isOpen && (_jsx(Popover, { x: x, y: y, placement: this.props.placement, arrow: this.props.arrow, arrowColor: "var(--menu-background, #fff)", offset: this.props.offset, children: _jsxs("div", { className: `deck-widget-popup-content ${this.props.className}`, style: style, children: [this.props.closeButton && (_jsx("div", { className: "deck-widget-popup-controls", style: { width: '100%', display: 'flex', justifyContent: 'end' }, children: _jsx(IconButton, { className: "deck-widget-popup-close-button", onClick: () => this._setIsOpen(false) }) })), _jsx(UserContent, { ...(typeof content === 'string' ? { text: content } : content) })] }) }))] }));
58
+ render(ui, rootElement);
59
+ }
60
+ }
61
+ PopupWidget.defaultProps = {
62
+ ...Widget.defaultProps,
63
+ id: 'info',
64
+ viewId: null,
65
+ position: [0, 0],
66
+ marker: null,
67
+ defaultIsOpen: true,
68
+ content: '',
69
+ placement: 'right',
70
+ offset: 10,
71
+ arrow: 10,
72
+ closeButton: true,
73
+ closeOnClickOutside: false,
74
+ onOpenChange: () => { }
75
+ };
76
+ //# sourceMappingURL=popup-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup-widget.js","sourceRoot":"","sources":["../src/popup-widget.tsx"],"names":[],"mappings":";AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAErC,OAAO,EAAC,MAAM,EAAM,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAC,OAAO,EAAoB,oCAAiC;AACpE,OAAO,EAAC,WAAW,EAAC,yCAAsC;AAC1D,OAAO,EAAC,UAAU,EAAC,wCAAqC;AA8CxD,MAAM,OAAO,WAAY,SAAQ,MAAwB;IAsBvD,YAAY,KAAuB;QACjC,KAAK,CAAC,KAAK,CAAC,CAAC;QANf,cAAS,GAAG,mBAAmB,CAAC;QAChC,cAAS,GAAG,MAAe,CAAC;QAM1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IACzC,CAAC;IAED,QAAQ,CAAC,KAAgC;QACvC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC1C,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,EAAC,IAAI,EAA2C;QACpD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,QAAQ;QACN,kCAAkC;QAClC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,QAAQ;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAES,UAAU,CAAC,MAAe;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,WAAwB;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,MAAM,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5C,6DAA6D;QAC7D,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE1D,iFAAiF;QACjF,sGAAsG;QACtG,MAAM,EAAE,GAAG,CACT,0BACG,MAAM,IAAI,CACT,cACE,KAAK,EAAE,EAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAC,YAEvF,KAAC,WAAW,OAAK,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAI,GAC7D,CACP,EACA,IAAI,CAAC,MAAM,IAAI,CACd,KAAC,OAAO,IACN,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,UAAU,EAAC,8BAA8B,EACzC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,YAEzB,eACE,SAAS,EAAE,6BAA6B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAC9D,KAAK,EAAE,KAA0B,aAEhC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CACzB,cACE,SAAS,EAAC,4BAA4B,EACtC,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAC,YAE9D,KAAC,UAAU,IACT,SAAS,EAAC,gCAAgC,EAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GACrC,GACE,CACP,EACD,KAAC,WAAW,OAAK,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAI,IAC1E,GACE,CACX,IACG,CACP,CAAC;QACF,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC1B,CAAC;;AAhHM,wBAAY,GAA+B;IAChD,GAAG,MAAM,CAAC,YAAY;IACtB,EAAE,EAAE,MAAM;IACV,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,EAAE,IAAI;IACZ,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,OAAO;IAClB,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,EAAE;IACT,WAAW,EAAE,IAAI;IACjB,mBAAmB,EAAE,KAAK;IAC1B,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;CACvB,AAdkB,CAcjB"}
@@ -25,7 +25,7 @@ export declare class ResetViewWidget<ViewsT extends ViewOrViews = null> extends
25
25
  setProps(props: Partial<ResetViewWidgetProps<ViewsT>>): void;
26
26
  onRenderHTML(rootElement: HTMLElement): void;
27
27
  handleClick(): void;
28
- setViewState(viewState?: ViewStateMap<ViewsT>): void;
28
+ resetViewState(viewState?: ViewStateMap<ViewsT>): void;
29
29
  }
30
30
  export {};
31
31
  //# sourceMappingURL=reset-view-widget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reset-view-widget.d.ts","sourceRoot":"","sources":["../src/reset-view-widget.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAC,YAAY,EAAE,IAAI,EAAC,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAGrC,sFAAsF;AACtF,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;AAExC,yCAAyC;AACzC,MAAM,MAAM,oBAAoB,CAAC,MAAM,SAAS,WAAW,GAAG,IAAI,IAAI,WAAW,GAAG;IAClF,8DAA8D;IAC9D,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe,CAAC,MAAM,SAAS,WAAW,GAAG,IAAI,CAAE,SAAQ,MAAM,CAC5E,oBAAoB,CAAC,MAAM,CAAC,EAC5B,MAAM,CACP;IACC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAOjD;IAEF,SAAS,SAA4B;IACrC,SAAS,EAAE,eAAe,CAAc;gBAE5B,KAAK,GAAE,oBAAoB,CAAC,MAAM,CAAM;IAKpD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAMrD,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAW5C,WAAW;IAKX,YAAY,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC;CAW9C"}
1
+ {"version":3,"file":"reset-view-widget.d.ts","sourceRoot":"","sources":["../src/reset-view-widget.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAC,YAAY,EAAE,IAAI,EAAC,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAGrC,sFAAsF;AACtF,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;AAExC,yCAAyC;AACzC,MAAM,MAAM,oBAAoB,CAAC,MAAM,SAAS,WAAW,GAAG,IAAI,IAAI,WAAW,GAAG;IAClF,8DAA8D;IAC9D,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe,CAAC,MAAM,SAAS,WAAW,GAAG,IAAI,CAAE,SAAQ,MAAM,CAC5E,oBAAoB,CAAC,MAAM,CAAC,EAC5B,MAAM,CACP;IACC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAOjD;IAEF,SAAS,SAA4B;IACrC,SAAS,EAAE,eAAe,CAAc;gBAE5B,KAAK,GAAE,oBAAoB,CAAC,MAAM,CAAM;IAKpD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAMrD,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAW5C,WAAW;IAKX,cAAc,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC;CAYhD"}
@@ -22,18 +22,19 @@ export class ResetViewWidget extends Widget {
22
22
  }
23
23
  handleClick() {
24
24
  const initialViewState = this.props.initialViewState || this.deck?.props.initialViewState;
25
- this.setViewState(initialViewState);
25
+ this.resetViewState(initialViewState);
26
26
  }
27
- setViewState(viewState) {
28
- const viewId = (this.props.viewId || 'default-view');
29
- const nextViewState = {
30
- ...(viewId !== 'default-view' ? viewState?.[viewId] : viewState)
31
- // only works for geospatial?
32
- // transitionDuration: this.props.transitionDuration,
33
- // transitionInterpolator: new FlyToInterpolator()
34
- };
35
- // @ts-ignore Using private method temporary until there's a public one
36
- this.deck._onViewStateChange({ viewId, viewState: nextViewState, interactionState: {} });
27
+ resetViewState(viewState) {
28
+ const viewIds = this.viewId ? [this.viewId] : (this.deck?.getViews().map(v => v.id) ?? []);
29
+ for (const viewId of viewIds) {
30
+ const nextViewState = {
31
+ ...(viewState?.[viewId] ?? viewState)
32
+ // only works for geospatial?
33
+ // transitionDuration: this.props.transitionDuration,
34
+ // transitionInterpolator: new FlyToInterpolator()
35
+ };
36
+ this.setViewState(viewId, nextViewState);
37
+ }
37
38
  }
38
39
  }
39
40
  ResetViewWidget.defaultProps = {
@@ -1 +1 @@
1
- {"version":3,"file":"reset-view-widget.js","sourceRoot":"","sources":["../src/reset-view-widget.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,UAAU,EAAC,wCAAqC;AAiBxD;;GAEG;AACH,MAAM,OAAO,eAAmD,SAAQ,MAGvE;IAaC,YAAY,QAAsC,EAAE;QAClD,KAAK,CAAC,KAAK,CAAC,CAAC;QAJf,cAAS,GAAG,wBAAwB,CAAC;QACrC,cAAS,GAAoB,UAAU,CAAC;QAItC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,KAA4C;QACnD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC1C,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,WAAwB;QACnC,MAAM,CACJ,KAAC,UAAU,IACT,SAAS,EAAC,yBAAyB,EACnC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GACpC,EACF,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,WAAW;QACT,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,gBAAgB,CAAC;QAC1F,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACtC,CAAC;IAED,YAAY,CAAC,SAAgC;QAC3C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,cAAc,CAAsB,CAAC;QAC1E,MAAM,aAAa,GAAG;YACpB,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAChE,6BAA6B;YAC7B,qDAAqD;YACrD,kDAAkD;SACnD,CAAC;QACF,uEAAuE;QACvE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,EAAE,EAAC,CAAC,CAAC;IACzF,CAAC;;AAjDM,4BAAY,GAAmC;IACpD,GAAG,MAAM,CAAC,YAAY;IACtB,EAAE,EAAE,YAAY;IAChB,SAAS,EAAE,UAAU;IACrB,KAAK,EAAE,YAAY;IACnB,gBAAgB,EAAE,SAAU;IAC5B,MAAM,EAAE,IAAI;CACb,AAPkB,CAOjB"}
1
+ {"version":3,"file":"reset-view-widget.js","sourceRoot":"","sources":["../src/reset-view-widget.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,UAAU,EAAC,wCAAqC;AAiBxD;;GAEG;AACH,MAAM,OAAO,eAAmD,SAAQ,MAGvE;IAaC,YAAY,QAAsC,EAAE;QAClD,KAAK,CAAC,KAAK,CAAC,CAAC;QAJf,cAAS,GAAG,wBAAwB,CAAC;QACrC,cAAS,GAAoB,UAAU,CAAC;QAItC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,KAA4C;QACnD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC1C,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,WAAwB;QACnC,MAAM,CACJ,KAAC,UAAU,IACT,SAAS,EAAC,yBAAyB,EACnC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GACpC,EACF,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,WAAW;QACT,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,gBAAgB,CAAC;QAC1F,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC;IAED,cAAc,CAAC,SAAgC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG;gBACpB,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;gBACrC,6BAA6B;gBAC7B,qDAAqD;gBACrD,kDAAkD;aACnD,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;;AAlDM,4BAAY,GAAmC;IACpD,GAAG,MAAM,CAAC,YAAY;IACtB,EAAE,EAAE,YAAY;IAChB,SAAS,EAAE,UAAU;IACrB,KAAK,EAAE,YAAY;IACnB,gBAAgB,EAAE,SAAU;IAC5B,MAAM,EAAE,IAAI;CACb,AAPkB,CAOjB"}
@@ -0,0 +1,68 @@
1
+ import { Widget } from '@deck.gl/core';
2
+ import type { Position, Viewport, WidgetPlacement, WidgetProps } from '@deck.gl/core';
3
+ export type ScrollbarOrientation = 'vertical' | 'horizontal';
4
+ export type ContentBounds = [min: Position, max: Position];
5
+ export type ScrollbarDecoration = {
6
+ contentBounds: ContentBounds;
7
+ color: string;
8
+ title?: string;
9
+ /** Callback when the decoration is clicked. Return `true` to mark the event as handled, and prevent the default behavior. */
10
+ onClick?: (evt: MouseEvent) => boolean;
11
+ };
12
+ export type ScrollbarWidgetProps = WidgetProps & {
13
+ /** The full extent of the scrollable content, in world coordinates.
14
+ * The widget relies on this value to calculate the position and size of the slider button and track.
15
+ * If not supplied, the scrollbar will always be hidden.
16
+ */
17
+ contentBounds?: ContentBounds | null;
18
+ placement?: WidgetPlacement;
19
+ viewId?: string | null;
20
+ /** Direction of the scrollbar. `'horizontal'` scrolls the camera along the X axis, and `'vertical'` scrolls the camera along the Y axis.
21
+ * @default 'vertical'
22
+ */
23
+ orientation?: ScrollbarOrientation;
24
+ stepSize?: number | null;
25
+ pageSize?: number | null;
26
+ /** Label of the step button at the start.
27
+ * @default 'Scroll left' | 'Scroll up'
28
+ */
29
+ startButtonAriaLabel?: string;
30
+ /** Label of the end button at the start.
31
+ * @default 'Scroll right' | 'Scroll down'
32
+ */
33
+ endButtonAriaLabel?: string;
34
+ /** If `true`, mouse wheel events over the canvas will be intercepted by this scrollbar.
35
+ * Useful when simulating the native scrollbar's behavior.
36
+ * @default false
37
+ */
38
+ captureWheel?: boolean;
39
+ /** Custom markers to overlay on the track. */
40
+ decorations?: ScrollbarDecoration[];
41
+ };
42
+ type ScrollbarWidgetRequiredProps = Required<ScrollbarWidgetProps>;
43
+ /** A scrollbar widget to be used with OrthographicView */
44
+ export declare class ScrollbarWidget extends Widget<ScrollbarWidgetProps> {
45
+ static defaultProps: ScrollbarWidgetRequiredProps;
46
+ className: string;
47
+ placement: WidgetPlacement;
48
+ private viewport?;
49
+ private contentSize;
50
+ private viewportSize;
51
+ private scrollOffset;
52
+ constructor(props: ScrollbarWidgetProps);
53
+ onViewportChange(viewport: Viewport): void;
54
+ onRenderHTML(): void;
55
+ onRemove(): void;
56
+ private updateViewport;
57
+ private getDecorations;
58
+ private getWheelEventTarget;
59
+ private getMaxScroll;
60
+ private getClampedOffset;
61
+ private isVertical;
62
+ private getEffectiveStep;
63
+ private getEffectivePage;
64
+ private emitScroll;
65
+ private handleRangeChange;
66
+ }
67
+ export {};
68
+ //# sourceMappingURL=scrollbar-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollbar-widget.d.ts","sourceRoot":"","sources":["../src/scrollbar-widget.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAIpF,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,YAAY,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AAE3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6HAA6H;IAC7H,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;CACxC,CAAC;AAYF,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG;IAC/C;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;IAInC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAIzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACrC,CAAC;AAEF,KAAK,4BAA4B,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AAEnE,0DAA0D;AAC1D,qBAAa,eAAgB,SAAQ,MAAM,CAAC,oBAAoB,CAAC;IAC/D,OAAgB,YAAY,EAAE,4BAA4B,CAYxD;IAEO,SAAS,SAA2B;IAE7C,SAAS,EAAE,eAAe,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;gBAEb,KAAK,EAAE,oBAAoB;IAS9B,gBAAgB,CAAC,QAAQ,EAAE,QAAQ;IAKnC,YAAY,IAAI,IAAI;IAsCpB,QAAQ,IAAI,IAAI;IAOzB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,cAAc;IAsCtB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,iBAAiB,CAEvB;CACH"}
@@ -0,0 +1,181 @@
1
+ import { jsx as _jsx } from "preact/jsx-runtime";
2
+ import { Widget } from '@deck.gl/core';
3
+ import { render } from 'preact';
4
+ import { RangeInput } from "./lib/components/range-input.js";
5
+ const clamp = (value, min, max) => {
6
+ if (value < min) {
7
+ return min;
8
+ }
9
+ if (value > max) {
10
+ return max;
11
+ }
12
+ return value;
13
+ };
14
+ /** A scrollbar widget to be used with OrthographicView */
15
+ export class ScrollbarWidget extends Widget {
16
+ constructor(props) {
17
+ const resolved = {
18
+ ...ScrollbarWidget.defaultProps,
19
+ ...props
20
+ };
21
+ super(resolved);
22
+ this.className = 'deck-widget-scrollbar';
23
+ this.placement = 'fill';
24
+ this.contentSize = 0;
25
+ this.viewportSize = 0;
26
+ this.scrollOffset = 0;
27
+ this.handleRangeChange = (nextValue) => {
28
+ this.emitScroll(nextValue[0]);
29
+ };
30
+ this.viewId = resolved.viewId ?? null;
31
+ }
32
+ onViewportChange(viewport) {
33
+ this.viewport = viewport;
34
+ this.onRenderHTML();
35
+ }
36
+ onRenderHTML() {
37
+ const element = this.rootElement;
38
+ if (!element) {
39
+ return;
40
+ }
41
+ element.dataset.placement = this.props.placement;
42
+ const viewport = this.viewport;
43
+ this.updateViewport(viewport);
44
+ const clampedOffset = this.getClampedOffset();
45
+ const wheelTarget = this.getWheelEventTarget(this.props.captureWheel ? 'global' : 'local');
46
+ const decorations = this.getDecorations(viewport);
47
+ const isVertical = this.isVertical();
48
+ const startLabel = this.props.startButtonAriaLabel ?? (isVertical ? 'Scroll up' : 'Scroll left');
49
+ const endLabel = this.props.endButtonAriaLabel ?? (isVertical ? 'Scroll down' : 'Scroll right');
50
+ const ui = (_jsx(RangeInput, { min: 0, max: Math.max(0, this.contentSize), step: this.getEffectiveStep(), pageSize: this.getEffectivePage(), value: [clampedOffset, clampedOffset + this.viewportSize], orientation: this.props.orientation, stepButtons: true, startButtonAriaLabel: startLabel, endButtonAriaLabel: endLabel, eventTarget: wheelTarget, decorations: decorations, onChange: this.handleRangeChange }));
51
+ render(ui, element);
52
+ }
53
+ onRemove() {
54
+ if (this.rootElement) {
55
+ render(null, this.rootElement);
56
+ }
57
+ super.onRemove();
58
+ }
59
+ updateViewport(viewport) {
60
+ if (!viewport) {
61
+ this.contentSize = 0;
62
+ this.scrollOffset = 0;
63
+ this.viewportSize = 0;
64
+ return;
65
+ }
66
+ const { contentBounds } = this.props;
67
+ const isVertical = this.isVertical();
68
+ const projectedBounds = contentBounds
69
+ ? projectBounds(contentBounds, viewport, isVertical)
70
+ : [0, 0];
71
+ this.contentSize = projectedBounds[1] - projectedBounds[0];
72
+ this.scrollOffset = -projectedBounds[0];
73
+ this.viewportSize = isVertical ? viewport.height : viewport.width;
74
+ }
75
+ getDecorations(viewport) {
76
+ const { decorations = [], contentBounds } = this.props;
77
+ if (!viewport || !contentBounds || decorations.length === 0) {
78
+ return [];
79
+ }
80
+ const isVertical = this.isVertical();
81
+ const [contentStart] = projectBounds(contentBounds, viewport, isVertical);
82
+ return decorations.map(decoration => {
83
+ const [start, end] = projectBounds(decoration.contentBounds, viewport, isVertical);
84
+ const onClick = decoration.onClick
85
+ ? (e) => {
86
+ const handled = decoration.onClick?.(e);
87
+ if (handled) {
88
+ e.stopPropagation();
89
+ e.preventDefault();
90
+ }
91
+ }
92
+ : undefined;
93
+ return {
94
+ position: [start - contentStart, end - contentStart],
95
+ element: (_jsx("div", { style: {
96
+ pointerEvents: onClick ? 'all' : 'none',
97
+ width: '100%',
98
+ height: '100%',
99
+ backgroundColor: decoration.color
100
+ }, title: decoration.title, onClick: onClick }))
101
+ };
102
+ });
103
+ }
104
+ getWheelEventTarget(mode) {
105
+ if (mode === null)
106
+ return null;
107
+ if (mode === 'local')
108
+ return this.rootElement;
109
+ return this.deck?.props.parent || this.deck?.getCanvas()?.parentElement || this.rootElement;
110
+ }
111
+ getMaxScroll() {
112
+ return Math.max(0, this.contentSize - this.viewportSize);
113
+ }
114
+ getClampedOffset() {
115
+ const maxScroll = this.getMaxScroll();
116
+ return clamp(this.scrollOffset, 0, maxScroll);
117
+ }
118
+ isVertical() {
119
+ return this.props.orientation !== 'horizontal';
120
+ }
121
+ getEffectiveStep() {
122
+ if (typeof this.props.stepSize === 'number' && !Number.isNaN(this.props.stepSize)) {
123
+ return this.props.stepSize;
124
+ }
125
+ return Math.max(1, this.viewportSize / 10 || 1);
126
+ }
127
+ getEffectivePage() {
128
+ if (typeof this.props.pageSize === 'number' && !Number.isNaN(this.props.pageSize)) {
129
+ return this.props.pageSize;
130
+ }
131
+ return this.viewportSize;
132
+ }
133
+ emitScroll(next) {
134
+ const maxScroll = this.getMaxScroll();
135
+ const target = clamp(Math.round(next), 0, maxScroll);
136
+ const viewport = this.viewport;
137
+ if (viewport && target !== this.getClampedOffset()) {
138
+ const pixel = viewport.project(viewport.position);
139
+ if (this.isVertical()) {
140
+ pixel[1] -= target - this.scrollOffset;
141
+ }
142
+ else {
143
+ pixel[0] -= target - this.scrollOffset;
144
+ }
145
+ const { target: newTarget } = viewport.panByPosition(viewport.position, pixel);
146
+ // @ts-expect-error Using private method temporary until there's a public one
147
+ this.deck._onViewStateChange({
148
+ viewId: viewport.id,
149
+ viewState: {
150
+ ...this.getViewState(viewport.id),
151
+ target: newTarget
152
+ },
153
+ interactionState: {}
154
+ });
155
+ }
156
+ }
157
+ }
158
+ ScrollbarWidget.defaultProps = {
159
+ ...Widget.defaultProps,
160
+ contentBounds: null,
161
+ placement: 'top-right',
162
+ viewId: null,
163
+ orientation: 'vertical',
164
+ stepSize: null,
165
+ pageSize: null,
166
+ startButtonAriaLabel: '',
167
+ endButtonAriaLabel: '',
168
+ captureWheel: false,
169
+ decorations: []
170
+ };
171
+ function projectBounds(bounds, viewport, isVertical) {
172
+ return bounds
173
+ .map(([x, y]) => viewport.project([x, y, 0]))
174
+ .reduce((range, [x, y]) => {
175
+ const value = isVertical ? y : x;
176
+ range[0] = Math.min(range[0], value);
177
+ range[1] = Math.max(range[1], value);
178
+ return range;
179
+ }, [Infinity, -Infinity]);
180
+ }
181
+ //# sourceMappingURL=scrollbar-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollbar-widget.js","sourceRoot":"","sources":["../src/scrollbar-widget.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { Widget, type WidgetProps, type WidgetPlacement } from '@deck.gl/core';
2
+ import { type PopoverProps } from "./lib/components/popover.js";
3
+ export type SelectorWidgetOption<ValueT = string> = {
4
+ value: ValueT;
5
+ icon: string;
6
+ label?: string;
7
+ };
8
+ /** Properties for the ViewSelectorWidget */
9
+ export type SelectorWidgetProps<ValueT = string> = WidgetProps & {
10
+ /** Widget positioning within the view. Default 'top-left'. */
11
+ placement?: WidgetPlacement;
12
+ /** View to attach to and interact with. Required when using multiple views. */
13
+ viewId?: string | null;
14
+ options: SelectorWidgetOption<ValueT>[];
15
+ /** The initial value. Default to the first option. */
16
+ initialValue?: ValueT;
17
+ /** Callback invoked when the value changes */
18
+ onChange?: (value: ValueT) => void;
19
+ };
20
+ /**
21
+ * A widget that renders a popup menu for selecting a view mode.
22
+ * It displays a button with the current view mode icon. Clicking the button
23
+ * toggles a popup that shows three icons for:
24
+ * - Single view
25
+ * - Two views, split horizontally
26
+ * - Two views, split vertically
27
+ */
28
+ export declare class SelectorWidget<ValueT = string> extends Widget<SelectorWidgetProps<ValueT>> {
29
+ static defaultProps: Required<SelectorWidgetProps>;
30
+ className: string;
31
+ placement: WidgetPlacement;
32
+ value: ValueT;
33
+ isOpen: {
34
+ x: number;
35
+ y: number;
36
+ placement: PopoverProps['placement'];
37
+ } | false;
38
+ constructor(props: SelectorWidgetProps<ValueT>);
39
+ setProps(props: Partial<SelectorWidgetProps<ValueT>>): void;
40
+ onRenderHTML(rootElement: HTMLElement): void;
41
+ private _toggleMenu;
42
+ private _handleSelectMode;
43
+ }
44
+ //# sourceMappingURL=selector-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-widget.d.ts","sourceRoot":"","sources":["../src/selector-widget.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAC,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAC,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAU,KAAK,YAAY,EAAC,oCAAiC;AAGpE,MAAM,MAAM,oBAAoB,CAAC,MAAM,GAAG,MAAM,IAAI;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,CAAC,MAAM,GAAG,MAAM,IAAI,WAAW,GAAG;IAC/D,8DAA8D;IAC9D,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;IACxC,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF;;;;;;;GAOG;AACH,qBAAa,cAAc,CAAC,MAAM,GAAG,MAAM,CAAE,SAAQ,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACtF,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAQhD;IAEF,SAAS,SAA0B;IACnC,SAAS,EAAE,eAAe,CAAc;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,CAAA;KAAC,GAAG,KAAK,CAAS;gBAEzE,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC;IAM9C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAMpD,YAAY,CAAC,WAAW,EAAE,WAAW;IA2BrC,OAAO,CAAC,WAAW,CAWjB;IAEF,OAAO,CAAC,iBAAiB,CAIvB;CACH"}
@@ -0,0 +1,64 @@
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 { render } from 'preact';
6
+ import { Widget } from '@deck.gl/core';
7
+ import { SimpleMenu } from "./lib/components/dropdown-menu.js";
8
+ import { Popover } from "./lib/components/popover.js";
9
+ import { IconButton } from "./lib/components/icon-button.js";
10
+ /**
11
+ * A widget that renders a popup menu for selecting a view mode.
12
+ * It displays a button with the current view mode icon. Clicking the button
13
+ * toggles a popup that shows three icons for:
14
+ * - Single view
15
+ * - Two views, split horizontally
16
+ * - Two views, split vertically
17
+ */
18
+ export class SelectorWidget extends Widget {
19
+ constructor(props) {
20
+ super(props);
21
+ this.className = 'deck-widget-selector';
22
+ this.placement = 'top-left';
23
+ this.isOpen = false;
24
+ this._toggleMenu = () => {
25
+ if (this.isOpen) {
26
+ this.isOpen = false;
27
+ }
28
+ else if (this.rootElement) {
29
+ this.isOpen = {
30
+ x: this.rootElement.offsetLeft,
31
+ y: this.rootElement.offsetTop,
32
+ placement: this.props.placement.includes('right') ? 'left-start' : 'right-start'
33
+ };
34
+ }
35
+ this.updateHTML();
36
+ };
37
+ this._handleSelectMode = (value) => {
38
+ this.value = value;
39
+ this.props.onChange(value);
40
+ this.updateHTML();
41
+ };
42
+ this.value = this.props.initialValue;
43
+ this.setProps(this.props);
44
+ }
45
+ setProps(props) {
46
+ this.placement = props.placement ?? this.placement;
47
+ this.viewId = props.viewId ?? this.viewId;
48
+ super.setProps(props);
49
+ }
50
+ onRenderHTML(rootElement) {
51
+ const selectedOption = this.props.options.find(opt => opt.value === this.value) ?? this.props.options[0];
52
+ render(_jsxs("div", { children: [_jsx(IconButton, { icon: selectedOption.icon, label: selectedOption.label, onClick: this._toggleMenu }), this.isOpen && (_jsx(Popover, { ...this.isOpen, children: _jsx(SimpleMenu, { isOpen: true, style: { pointerEvents: 'auto', position: 'static' }, menuItems: this.props.options, onSelect: this._handleSelectMode, onClose: this._toggleMenu }) }))] }), rootElement);
53
+ }
54
+ }
55
+ SelectorWidget.defaultProps = {
56
+ ...Widget.defaultProps,
57
+ id: 'view-selector',
58
+ placement: 'top-left',
59
+ viewId: null,
60
+ initialValue: '',
61
+ options: [],
62
+ onChange: () => { }
63
+ };
64
+ //# sourceMappingURL=selector-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-widget.js","sourceRoot":"","sources":["../src/selector-widget.tsx"],"names":[],"mappings":"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"}
@@ -1,16 +1,46 @@
1
- import { Widget, type WidgetProps } from '@deck.gl/core';
1
+ import { Widget, type WidgetProps, type View } from '@deck.gl/core';
2
+ export type ViewLayout = {
3
+ /** Stacking orientation of the sub views */
4
+ orientation: 'vertical' | 'horizontal';
5
+ /** Initial instances that describe the sub views.
6
+ * x, y, width and height of the views' props will be overwritten by the SplitterWidget as split changes. */
7
+ views: [view1: View | ViewLayout, view2: View | ViewLayout];
8
+ /** The ratio of view1's share over the whole available height (vertical) or width (horizontal). Between 0-1.
9
+ * @default 0.5
10
+ */
11
+ initialSplit?: number;
12
+ /** Whether the split can be changed by dragging the border between the two views.
13
+ * @default true
14
+ */
15
+ editable?: boolean;
16
+ /** Min value of the split
17
+ * @default 0.05
18
+ */
19
+ minSplit?: number;
20
+ /** Max value of the split
21
+ * @default 0.95
22
+ */
23
+ maxSplit?: number;
24
+ };
25
+ type ManagedViewLayout = {
26
+ id: number;
27
+ orientation: 'vertical' | 'horizontal';
28
+ views: [view1: View | ManagedViewLayout, view2: View | ManagedViewLayout];
29
+ split: number;
30
+ editable: boolean;
31
+ minSplit: number;
32
+ maxSplit: number;
33
+ x: number;
34
+ y: number;
35
+ width: number;
36
+ height: number;
37
+ };
2
38
  /** Properties for the SplitterWidget */
3
39
  export type SplitterWidgetProps = WidgetProps & {
4
- /** The view id for the first (resizable) view */
5
- viewId1: string;
6
- /** The view id for the second view */
7
- viewId2: string;
8
- /** Orientation of the splitter: vertical (default) or horizontal */
9
- orientation?: 'vertical' | 'horizontal';
10
- /** The initial split percentage (0 to 1) for the first view, default 0.5 */
11
- initialSplit?: number;
40
+ /** Stacking views descriptor */
41
+ viewLayout: ViewLayout;
12
42
  /** Callback invoked when the splitter is dragged with the new split value */
13
- onChange?: (newSplit: number) => void;
43
+ onChange?: (views: View[]) => void;
14
44
  /** Callback invoked when dragging starts */
15
45
  onDragStart?: () => void;
16
46
  /** Callback invoked when dragging ends */
@@ -21,12 +51,23 @@ export type SplitterWidgetProps = WidgetProps & {
21
51
  * across the deck.gl canvas. It positions itself based on the split percentage
22
52
  * of the first view and provides callbacks when dragged.
23
53
  */
24
- export declare class SplitterWidget extends Widget<SplitterWidgetProps> {
54
+ export declare class SplitterWidget extends Widget<SplitterWidgetProps, View[]> {
25
55
  static defaultProps: Required<SplitterWidgetProps>;
26
56
  className: string;
27
57
  placement: "fill";
58
+ viewLayouts: ManagedViewLayout[];
59
+ /** evaluated from the current viewLayouts */
60
+ views: View[];
61
+ /** views set in the last update */
62
+ lastViews?: View[];
63
+ needsUpdate: boolean;
28
64
  constructor(props: SplitterWidgetProps);
29
65
  setProps(props: Partial<SplitterWidgetProps>): void;
66
+ onRedraw(): void;
67
+ updateHTML(): void;
68
+ private doUpdate;
69
+ private onChange;
30
70
  onRenderHTML(rootElement: HTMLElement): void;
31
71
  }
72
+ export {};
32
73
  //# sourceMappingURL=splitter-widget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"splitter-widget.d.ts","sourceRoot":"","sources":["../src/splitter-widget.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAC,MAAM,EAAE,KAAK,WAAW,EAAC,MAAM,eAAe,CAAC;AAEvD,wCAAwC;AACxC,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC9C,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,MAAM,CAAC,mBAAmB,CAAC;IAC7D,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAUhD;IAEF,SAAS,SAA0B;IACnC,SAAS,SAAmB;gBAEhB,KAAK,EAAE,mBAAmB;IAItC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAI5C,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;CAqB7C"}
1
+ {"version":3,"file":"splitter-widget.d.ts","sourceRoot":"","sources":["../src/splitter-widget.tsx"],"names":[],"mappings":"AAMA,OAAO,EACL,MAAM,EAGN,KAAK,WAAW,EAChB,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,UAAU,GAAG;IACvB,4CAA4C;IAC5C,WAAW,EAAE,UAAU,GAAG,YAAY,CAAC;IACvC;gHAC4G;IAC5G,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,UAAU,EAAE,KAAK,EAAE,IAAI,GAAG,UAAU,CAAC,CAAC;IAC5D;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,UAAU,GAAG,YAAY,CAAC;IACvC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,iBAAiB,EAAE,KAAK,EAAE,IAAI,GAAG,iBAAiB,CAAC,CAAC;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAmGF,wCAAwC;AACxC,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC9C,gCAAgC;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACnC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,MAAM,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;IACrE,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAOhD;IAEF,SAAS,SAA0B;IACnC,SAAS,SAAmB;IAC5B,WAAW,EAAG,iBAAiB,EAAE,CAAC;IAClC,6CAA6C;IAC7C,KAAK,EAAG,IAAI,EAAE,CAAC;IACf,mCAAmC;IACnC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;IACnB,WAAW,UAAQ;gBAEP,KAAK,EAAE,mBAAmB;IAKtC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAQ5C,QAAQ;IAQR,UAAU;IAcV,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,QAAQ;IAShB,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;CAkB7C"}