@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.
- package/dist/compass-widget.js +5 -5
- package/dist/compass-widget.js.map +1 -1
- package/dist/context-menu-widget.d.ts +27 -20
- package/dist/context-menu-widget.d.ts.map +1 -1
- package/dist/context-menu-widget.js +45 -48
- package/dist/context-menu-widget.js.map +1 -1
- package/dist/dist.dev.js +3114 -869
- package/dist/fullscreen-widget.js +1 -1
- package/dist/fullscreen-widget.js.map +1 -1
- package/dist/geocoder-widget.d.ts +2 -4
- package/dist/geocoder-widget.d.ts.map +1 -1
- package/dist/geocoder-widget.js +16 -20
- package/dist/geocoder-widget.js.map +1 -1
- package/dist/gimbal-widget.d.ts +0 -3
- package/dist/gimbal-widget.d.ts.map +1 -1
- package/dist/gimbal-widget.js +4 -22
- package/dist/gimbal-widget.js.map +1 -1
- package/dist/icon-widget.d.ts +28 -0
- package/dist/icon-widget.d.ts.map +1 -0
- package/dist/icon-widget.js +35 -0
- package/dist/icon-widget.js.map +1 -0
- package/dist/index.cjs +1271 -561
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +16 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -10
- package/dist/index.js.map +1 -1
- package/dist/info-widget.d.ts +39 -17
- package/dist/info-widget.d.ts.map +1 -1
- package/dist/info-widget.js +46 -130
- package/dist/info-widget.js.map +1 -1
- package/dist/lib/components/dropdown-menu.d.ts +12 -5
- package/dist/lib/components/dropdown-menu.d.ts.map +1 -1
- package/dist/lib/components/dropdown-menu.js +20 -11
- package/dist/lib/components/dropdown-menu.js.map +1 -1
- package/dist/lib/components/icon-button.d.ts +3 -0
- package/dist/lib/components/icon-button.d.ts.map +1 -1
- package/dist/lib/components/icon-button.js +10 -2
- package/dist/lib/components/icon-button.js.map +1 -1
- package/dist/lib/components/popover.d.ts +30 -0
- package/dist/lib/components/popover.d.ts.map +1 -0
- package/dist/lib/components/popover.js +93 -0
- package/dist/lib/components/popover.js.map +1 -0
- package/dist/lib/components/range-input.d.ts +26 -0
- package/dist/lib/components/range-input.d.ts.map +1 -0
- package/dist/lib/components/range-input.js +261 -0
- package/dist/lib/components/range-input.js.map +1 -0
- package/dist/lib/components/user-content.d.ts +8 -0
- package/dist/lib/components/user-content.d.ts.map +1 -0
- package/dist/lib/components/user-content.js +15 -0
- package/dist/lib/components/user-content.js.map +1 -0
- package/dist/lib/data-url.d.ts +5 -0
- package/dist/lib/data-url.d.ts.map +1 -0
- package/dist/lib/data-url.js +7 -0
- package/dist/lib/data-url.js.map +1 -0
- package/dist/popup-widget.d.ts +64 -0
- package/dist/popup-widget.d.ts.map +1 -0
- package/dist/popup-widget.js +76 -0
- package/dist/popup-widget.js.map +1 -0
- package/dist/reset-view-widget.d.ts +1 -1
- package/dist/reset-view-widget.d.ts.map +1 -1
- package/dist/reset-view-widget.js +12 -11
- package/dist/reset-view-widget.js.map +1 -1
- package/dist/scrollbar-widget.d.ts +68 -0
- package/dist/scrollbar-widget.d.ts.map +1 -0
- package/dist/scrollbar-widget.js +181 -0
- package/dist/scrollbar-widget.js.map +1 -0
- package/dist/selector-widget.d.ts +44 -0
- package/dist/selector-widget.d.ts.map +1 -0
- package/dist/selector-widget.js +64 -0
- package/dist/selector-widget.js.map +1 -0
- package/dist/splitter-widget.d.ts +52 -11
- package/dist/splitter-widget.d.ts.map +1 -1
- package/dist/splitter-widget.js +177 -76
- package/dist/splitter-widget.js.map +1 -1
- package/dist/stats-widget.d.ts +6 -1
- package/dist/stats-widget.d.ts.map +1 -1
- package/dist/stats-widget.js +39 -10
- package/dist/stats-widget.js.map +1 -1
- package/dist/stylesheet.css +291 -39
- package/dist/theme-widget.d.ts.map +1 -1
- package/dist/theme-widget.js +7 -5
- package/dist/theme-widget.js.map +1 -1
- package/dist/themes.d.ts +30 -0
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +28 -4
- package/dist/themes.js.map +1 -1
- package/dist/timeline-widget.d.ts +25 -6
- package/dist/timeline-widget.d.ts.map +1 -1
- package/dist/timeline-widget.js +51 -18
- package/dist/timeline-widget.js.map +1 -1
- package/dist/toggle-widget.d.ts +38 -0
- package/dist/toggle-widget.d.ts.map +1 -0
- package/dist/toggle-widget.js +47 -0
- package/dist/toggle-widget.js.map +1 -0
- package/dist/zoom-widget.d.ts +2 -8
- package/dist/zoom-widget.d.ts.map +1 -1
- package/dist/zoom-widget.js +23 -18
- package/dist/zoom-widget.js.map +1 -1
- package/dist.min.js +2 -2
- package/package.json +4 -3
- package/src/compass-widget.tsx +5 -5
- package/src/context-menu-widget.tsx +88 -78
- package/src/fullscreen-widget.tsx +1 -1
- package/src/geocoder-widget.tsx +17 -24
- package/src/gimbal-widget.tsx +4 -26
- package/src/icon-widget.tsx +69 -0
- package/src/index.ts +22 -15
- package/src/info-widget.tsx +100 -157
- package/src/lib/components/dropdown-menu.tsx +58 -29
- package/src/lib/components/icon-button.tsx +15 -3
- package/src/lib/components/popover.tsx +167 -0
- package/src/lib/components/range-input.tsx +432 -0
- package/src/lib/components/user-content.tsx +30 -0
- package/src/lib/data-url.ts +5 -0
- package/src/popup-widget.tsx +170 -0
- package/src/reset-view-widget.tsx +12 -11
- package/src/scrollbar-widget.tsx +288 -0
- package/src/selector-widget.tsx +111 -0
- package/src/splitter-widget.tsx +281 -96
- package/src/stats-widget.tsx +59 -12
- package/src/stylesheet.css +291 -39
- package/src/theme-widget.tsx +7 -5
- package/src/themes.ts +35 -4
- package/src/timeline-widget.tsx +103 -33
- package/src/toggle-widget.tsx +101 -0
- package/src/zoom-widget.tsx +25 -21
- package/dist/fps-widget.d.ts +0 -28
- package/dist/fps-widget.d.ts.map +0 -1
- package/dist/fps-widget.js +0 -51
- package/dist/fps-widget.js.map +0 -1
- package/dist/lib/components/grouped-icon-button.d.ts +0 -10
- package/dist/lib/components/grouped-icon-button.d.ts.map +0 -1
- package/dist/lib/components/grouped-icon-button.js +0 -7
- package/dist/lib/components/grouped-icon-button.js.map +0 -1
- package/dist/lib/components/icon-menu.d.ts +0 -16
- package/dist/lib/components/icon-menu.d.ts.map +0 -1
- package/dist/lib/components/icon-menu.js +0 -34
- package/dist/lib/components/icon-menu.js.map +0 -1
- package/dist/lib/components/simple-menu.d.ts +0 -16
- package/dist/lib/components/simple-menu.d.ts.map +0 -1
- package/dist/lib/components/simple-menu.js +0 -30
- package/dist/lib/components/simple-menu.js.map +0 -1
- package/dist/view-selector-widget.d.ts +0 -35
- package/dist/view-selector-widget.d.ts.map +0 -1
- package/dist/view-selector-widget.js +0 -63
- package/dist/view-selector-widget.js.map +0 -1
- package/src/fps-widget.tsx +0 -77
- package/src/lib/components/grouped-icon-button.tsx +0 -27
- package/src/lib/components/icon-menu.tsx +0 -71
- package/src/lib/components/simple-menu.tsx +0 -52
- 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":"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"}
|
|
@@ -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
|
-
|
|
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,
|
|
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.
|
|
25
|
+
this.resetViewState(initialViewState);
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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,
|
|
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
|
-
/**
|
|
5
|
-
|
|
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?: (
|
|
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,
|
|
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"}
|