@deck.gl/widgets 9.1.11 → 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.
- package/dist/compass-widget.d.ts +11 -34
- package/dist/compass-widget.d.ts.map +1 -1
- package/dist/compass-widget.js +27 -62
- package/dist/compass-widget.js.map +1 -1
- package/dist/context-menu-widget.d.ts +37 -0
- package/dist/context-menu-widget.d.ts.map +1 -0
- package/dist/context-menu-widget.js +74 -0
- package/dist/context-menu-widget.js.map +1 -0
- package/dist/dist.dev.js +2271 -581
- package/dist/fps-widget.d.ts +29 -0
- package/dist/fps-widget.d.ts.map +1 -0
- package/dist/fps-widget.js +51 -0
- package/dist/fps-widget.js.map +1 -0
- package/dist/fullscreen-widget.d.ts +15 -33
- package/dist/fullscreen-widget.d.ts.map +1 -1
- package/dist/fullscreen-widget.js +20 -51
- package/dist/fullscreen-widget.js.map +1 -1
- package/dist/geocoder-widget.d.ts +51 -0
- package/dist/geocoder-widget.d.ts.map +1 -0
- package/dist/geocoder-widget.js +138 -0
- package/dist/geocoder-widget.js.map +1 -0
- package/dist/gimbal-widget.d.ts +33 -0
- package/dist/gimbal-widget.d.ts.map +1 -0
- package/dist/gimbal-widget.js +116 -0
- package/dist/gimbal-widget.js.map +1 -0
- package/dist/index.cjs +1587 -341
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +37 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -7
- package/dist/index.js.map +1 -1
- package/dist/info-widget.d.ts +37 -0
- package/dist/info-widget.d.ts.map +1 -0
- package/dist/info-widget.js +183 -0
- package/dist/info-widget.js.map +1 -0
- package/dist/lib/components/button-group.d.ts +8 -0
- package/dist/lib/components/button-group.d.ts.map +1 -0
- package/dist/lib/components/button-group.js +7 -0
- package/dist/lib/components/button-group.js.map +1 -0
- package/dist/lib/components/dropdown-menu.d.ts +8 -0
- package/dist/lib/components/dropdown-menu.d.ts.map +1 -0
- package/dist/lib/components/dropdown-menu.js +55 -0
- package/dist/lib/components/dropdown-menu.js.map +1 -0
- package/dist/lib/components/grouped-icon-button.d.ts +8 -0
- package/dist/lib/components/grouped-icon-button.d.ts.map +1 -0
- package/dist/lib/components/grouped-icon-button.js +7 -0
- package/dist/lib/components/grouped-icon-button.js.map +1 -0
- package/dist/lib/components/icon-button.d.ts +11 -0
- package/dist/lib/components/icon-button.d.ts.map +1 -0
- package/dist/lib/components/icon-button.js +7 -0
- package/dist/lib/components/icon-button.js.map +1 -0
- package/dist/lib/components/icon-menu.d.ts +16 -0
- package/dist/lib/components/icon-menu.d.ts.map +1 -0
- package/dist/lib/components/icon-menu.js +49 -0
- package/dist/lib/components/icon-menu.js.map +1 -0
- package/dist/lib/components/simple-menu.d.ts +16 -0
- package/dist/lib/components/simple-menu.d.ts.map +1 -0
- package/dist/lib/components/simple-menu.js +30 -0
- package/dist/lib/components/simple-menu.js.map +1 -0
- package/dist/lib/geocode/geocoder-history.d.ts +23 -0
- package/dist/lib/geocode/geocoder-history.d.ts.map +1 -0
- package/dist/lib/geocode/geocoder-history.js +64 -0
- package/dist/lib/geocode/geocoder-history.js.map +1 -0
- package/dist/lib/geocode/geocoder.d.ts +15 -0
- package/dist/lib/geocode/geocoder.d.ts.map +1 -0
- package/dist/lib/geocode/geocoder.js +5 -0
- package/dist/lib/geocode/geocoder.js.map +1 -0
- package/dist/lib/geocode/geocoders.d.ts +68 -0
- package/dist/lib/geocode/geocoders.d.ts.map +1 -0
- package/dist/lib/geocode/geocoders.js +182 -0
- package/dist/lib/geocode/geocoders.js.map +1 -0
- package/dist/loading-widget.d.ts +26 -0
- package/dist/loading-widget.d.ts.map +1 -0
- package/dist/loading-widget.js +41 -0
- package/dist/loading-widget.js.map +1 -0
- package/dist/reset-view-widget.d.ts +4 -4
- package/dist/reset-view-widget.d.ts.map +1 -1
- package/dist/reset-view-widget.js +7 -10
- package/dist/reset-view-widget.js.map +1 -1
- package/dist/scale-widget.d.ts +28 -0
- package/dist/scale-widget.d.ts.map +1 -0
- package/dist/scale-widget.js +111 -0
- package/dist/scale-widget.js.map +1 -0
- package/dist/screenshot-widget.d.ts +4 -4
- package/dist/screenshot-widget.d.ts.map +1 -1
- package/dist/screenshot-widget.js +7 -14
- package/dist/screenshot-widget.js.map +1 -1
- package/dist/splitter-widget.d.ts +32 -0
- package/dist/splitter-widget.d.ts.map +1 -0
- package/dist/splitter-widget.js +123 -0
- package/dist/splitter-widget.js.map +1 -0
- package/dist/stats-widget.d.ts +36 -0
- package/dist/stats-widget.d.ts.map +1 -0
- package/dist/stats-widget.js +115 -0
- package/dist/stats-widget.js.map +1 -0
- package/dist/stylesheet.css +121 -4
- package/dist/theme-widget.d.ts +31 -0
- package/dist/theme-widget.d.ts.map +1 -0
- package/dist/theme-widget.js +83 -0
- package/dist/theme-widget.js.map +1 -0
- package/dist/themes.d.ts +65 -36
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +20 -8
- package/dist/themes.js.map +1 -1
- package/dist/timeline-widget.d.ts +59 -0
- package/dist/timeline-widget.d.ts.map +1 -0
- package/dist/timeline-widget.js +83 -0
- package/dist/timeline-widget.js.map +1 -0
- package/dist/view-selector-widget.d.ts +33 -0
- package/dist/view-selector-widget.d.ts.map +1 -0
- package/dist/view-selector-widget.js +62 -0
- package/dist/view-selector-widget.js.map +1 -0
- package/dist/zoom-widget.d.ts +14 -43
- package/dist/zoom-widget.d.ts.map +1 -1
- package/dist/zoom-widget.js +14 -56
- package/dist/zoom-widget.js.map +1 -1
- package/dist.min.js +3 -1
- package/package.json +4 -3
- package/src/compass-widget.tsx +44 -106
- package/src/context-menu-widget.tsx +115 -0
- package/src/fps-widget.tsx +67 -0
- package/src/fullscreen-widget.tsx +33 -86
- package/src/geocoder-widget.tsx +209 -0
- package/src/gimbal-widget.tsx +188 -0
- package/src/index.ts +58 -8
- package/src/info-widget.tsx +225 -0
- package/src/lib/components/button-group.tsx +16 -0
- package/src/lib/components/dropdown-menu.tsx +98 -0
- package/src/lib/components/grouped-icon-button.tsx +24 -0
- package/src/lib/components/icon-button.tsx +30 -0
- package/src/lib/components/icon-menu.tsx +89 -0
- package/src/lib/components/simple-menu.tsx +52 -0
- package/src/lib/geocode/geocoder-history.ts +73 -0
- package/src/lib/geocode/geocoder.ts +15 -0
- package/src/lib/geocode/geocoders.ts +199 -0
- package/src/loading-widget.tsx +67 -0
- package/src/reset-view-widget.tsx +8 -11
- package/src/scale-widget.tsx +183 -0
- package/src/screenshot-widget.tsx +9 -11
- package/src/splitter-widget.tsx +179 -0
- package/src/stats-widget.tsx +166 -0
- package/src/stylesheet.css +121 -4
- package/src/theme-widget.tsx +120 -0
- package/src/themes.ts +45 -12
- package/src/timeline-widget.tsx +155 -0
- package/src/view-selector-widget.tsx +108 -0
- package/src/zoom-widget.tsx +39 -113
- package/dist/components.d.ts +0 -4
- package/dist/components.d.ts.map +0 -1
- package/dist/components.js +0 -17
- package/dist/components.js.map +0 -1
- package/dist/widget-impl.d.ts +0 -29
- package/dist/widget-impl.d.ts.map +0 -1
- package/dist/widget-impl.js +0 -60
- package/dist/widget-impl.js.map +0 -1
- package/src/components.tsx +0 -38
- 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
|
|
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
|
-
*
|
|
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
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Additional CSS class.
|
|
27
|
-
*/
|
|
28
|
-
className?: string;
|
|
14
|
+
container?: HTMLElement;
|
|
29
15
|
};
|
|
30
|
-
export declare class FullscreenWidget
|
|
31
|
-
|
|
32
|
-
|
|
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
|
|
38
|
-
onAdd(
|
|
39
|
-
deck: Deck<any>;
|
|
40
|
-
}): HTMLDivElement;
|
|
21
|
+
constructor(props?: FullscreenWidgetProps);
|
|
22
|
+
onAdd(): void;
|
|
41
23
|
onRemove(): void;
|
|
42
|
-
|
|
24
|
+
onRenderHTML(rootElement: HTMLElement): void;
|
|
43
25
|
setProps(props: Partial<FullscreenWidgetProps>): void;
|
|
44
|
-
getContainer(): HTMLElement
|
|
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":"
|
|
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 {
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
42
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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":";AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,qBAAqB;AACrB,OAAO,
|
|
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"}
|