@deck.gl/widgets 9.0.0-beta.1 → 9.0.0-beta.10

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 (53) hide show
  1. package/dist/compass-widget.d.ts +46 -0
  2. package/dist/compass-widget.d.ts.map +1 -0
  3. package/dist/compass-widget.js +75 -0
  4. package/dist/components.d.ts +4 -0
  5. package/dist/components.d.ts.map +1 -0
  6. package/dist/components.js +13 -0
  7. package/dist/dist.dev.js +301 -92
  8. package/{typed → dist}/fullscreen-widget.d.ts +6 -0
  9. package/dist/fullscreen-widget.d.ts.map +1 -0
  10. package/dist/fullscreen-widget.js +108 -0
  11. package/dist/index.cjs +343 -0
  12. package/dist/index.cjs.map +7 -0
  13. package/dist/index.d.ts +5 -0
  14. package/{typed → dist}/index.d.ts.map +1 -1
  15. package/dist/index.js +4 -0
  16. package/dist/{es5/stylesheet.css → stylesheet.css} +81 -11
  17. package/{typed → dist}/themes.d.ts +8 -0
  18. package/dist/themes.d.ts.map +1 -0
  19. package/dist/themes.js +44 -0
  20. package/dist/zoom-widget.d.ts +55 -0
  21. package/dist/zoom-widget.d.ts.map +1 -0
  22. package/dist/zoom-widget.js +68 -0
  23. package/dist.min.js +1 -2
  24. package/package.json +15 -8
  25. package/src/compass-widget.tsx +133 -0
  26. package/src/components.tsx +21 -2
  27. package/src/fullscreen-widget.tsx +6 -0
  28. package/src/index.ts +2 -0
  29. package/src/stylesheet.css +81 -11
  30. package/src/themes.ts +12 -4
  31. package/src/zoom-widget.tsx +128 -0
  32. package/dist/es5/components.js +0 -25
  33. package/dist/es5/components.js.map +0 -1
  34. package/dist/es5/fullscreen-widget.js +0 -272
  35. package/dist/es5/fullscreen-widget.js.map +0 -1
  36. package/dist/es5/index.js +0 -31
  37. package/dist/es5/index.js.map +0 -1
  38. package/dist/es5/themes.js +0 -47
  39. package/dist/es5/themes.js.map +0 -1
  40. package/dist/esm/components.js +0 -18
  41. package/dist/esm/components.js.map +0 -1
  42. package/dist/esm/fullscreen-widget.js +0 -145
  43. package/dist/esm/fullscreen-widget.js.map +0 -1
  44. package/dist/esm/index.js +0 -3
  45. package/dist/esm/index.js.map +0 -1
  46. package/dist/esm/stylesheet.css +0 -79
  47. package/dist/esm/themes.js +0 -37
  48. package/dist/esm/themes.js.map +0 -1
  49. package/typed/components.d.ts +0 -3
  50. package/typed/components.d.ts.map +0 -1
  51. package/typed/fullscreen-widget.d.ts.map +0 -1
  52. package/typed/index.d.ts +0 -3
  53. package/typed/themes.d.ts.map +0 -1
@@ -0,0 +1,108 @@
1
+ import { jsx as _jsx } from "preact/jsx-runtime";
2
+ /* global document */
3
+ import { _deepEqual as deepEqual } from '@deck.gl/core';
4
+ import { render } from 'preact';
5
+ import { IconButton } from "./components.js";
6
+ export class FullscreenWidget {
7
+ constructor(props) {
8
+ this.id = 'fullscreen';
9
+ this.placement = 'top-left';
10
+ this.fullscreen = false;
11
+ this.id = props.id || 'fullscreen';
12
+ this.placement = props.placement || 'top-left';
13
+ props.enterLabel = props.enterLabel || 'Enter Fullscreen';
14
+ props.exitLabel = props.exitLabel || 'Exit Fullscreen';
15
+ props.style = props.style || {};
16
+ this.props = props;
17
+ }
18
+ onAdd({ deck }) {
19
+ const { style, className } = this.props;
20
+ const el = document.createElement('div');
21
+ el.classList.add('deck-widget', 'deck-widget-fullscreen');
22
+ if (className)
23
+ el.classList.add(className);
24
+ if (style) {
25
+ Object.entries(style).map(([key, value]) => el.style.setProperty(key, value));
26
+ }
27
+ this.deck = deck;
28
+ this.element = el;
29
+ this.update();
30
+ document.addEventListener('fullscreenchange', this.onFullscreenChange.bind(this));
31
+ return el;
32
+ }
33
+ onRemove() {
34
+ this.deck = undefined;
35
+ this.element = undefined;
36
+ document.removeEventListener('fullscreenchange', this.onFullscreenChange.bind(this));
37
+ }
38
+ update() {
39
+ const { enterLabel, exitLabel } = this.props;
40
+ const el = this.element;
41
+ if (!el) {
42
+ return;
43
+ }
44
+ 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' }));
45
+ render(ui, el);
46
+ }
47
+ setProps(props) {
48
+ const oldProps = this.props;
49
+ const el = this.element;
50
+ if (el) {
51
+ if (oldProps.className !== props.className) {
52
+ if (oldProps.className)
53
+ el.classList.remove(oldProps.className);
54
+ if (props.className)
55
+ el.classList.add(props.className);
56
+ }
57
+ if (!deepEqual(oldProps.style, props.style, 1)) {
58
+ if (oldProps.style) {
59
+ Object.entries(oldProps.style).map(([key]) => el.style.removeProperty(key));
60
+ }
61
+ if (props.style) {
62
+ Object.entries(props.style).map(([key, value]) => el.style.setProperty(key, value));
63
+ }
64
+ }
65
+ }
66
+ Object.assign(this.props, props);
67
+ }
68
+ getContainer() {
69
+ return this.props.container || this.deck?.getCanvas()?.parentElement;
70
+ }
71
+ onFullscreenChange() {
72
+ const prevFullscreen = this.fullscreen;
73
+ const fullscreen = document.fullscreenElement === this.getContainer();
74
+ if (prevFullscreen !== fullscreen) {
75
+ this.fullscreen = !this.fullscreen;
76
+ }
77
+ this.update();
78
+ }
79
+ async handleClick() {
80
+ if (this.fullscreen) {
81
+ await this.exitFullscreen();
82
+ }
83
+ else {
84
+ await this.requestFullscreen();
85
+ }
86
+ this.update();
87
+ }
88
+ async requestFullscreen() {
89
+ const container = this.getContainer();
90
+ if (container?.requestFullscreen) {
91
+ await container.requestFullscreen({ navigationUI: 'hide' });
92
+ }
93
+ else {
94
+ this.togglePseudoFullscreen();
95
+ }
96
+ }
97
+ async exitFullscreen() {
98
+ if (document.exitFullscreen) {
99
+ await document.exitFullscreen();
100
+ }
101
+ else {
102
+ this.togglePseudoFullscreen();
103
+ }
104
+ }
105
+ togglePseudoFullscreen() {
106
+ this.getContainer()?.classList.toggle('deck-pseudo-fullscreen');
107
+ }
108
+ }
package/dist/index.cjs ADDED
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // dist/index.js
21
+ var dist_exports = {};
22
+ __export(dist_exports, {
23
+ CompassWidget: () => CompassWidget,
24
+ DarkGlassTheme: () => DarkGlassTheme,
25
+ DarkTheme: () => DarkTheme,
26
+ FullscreenWidget: () => FullscreenWidget,
27
+ LightGlassTheme: () => LightGlassTheme,
28
+ LightTheme: () => LightTheme,
29
+ ZoomWidget: () => ZoomWidget
30
+ });
31
+ module.exports = __toCommonJS(dist_exports);
32
+
33
+ // dist/fullscreen-widget.js
34
+ var import_jsx_runtime2 = require("preact/jsx-runtime");
35
+ var import_core = require("@deck.gl/core");
36
+ var import_preact = require("preact");
37
+
38
+ // dist/components.js
39
+ var import_jsx_runtime = require("preact/jsx-runtime");
40
+ var IconButton = (props) => {
41
+ const { className, label, onClick } = props;
42
+ return (0, import_jsx_runtime.jsx)("div", { className: "deck-widget-button", children: (0, import_jsx_runtime.jsx)("button", { className: `deck-widget-icon-button ${className}`, type: "button", onClick, title: label, children: (0, import_jsx_runtime.jsx)("div", { className: "deck-widget-icon" }) }) });
43
+ };
44
+ var ButtonGroup = (props) => {
45
+ const { children, orientation } = props;
46
+ return (0, import_jsx_runtime.jsx)("div", { className: `deck-widget-button-group ${orientation}`, children });
47
+ };
48
+ var GroupedIconButton = (props) => {
49
+ const { className, label, onClick } = props;
50
+ return (0, import_jsx_runtime.jsx)("button", { className: `deck-widget-icon-button ${className}`, type: "button", onClick, title: label, children: (0, import_jsx_runtime.jsx)("div", { className: "deck-widget-icon" }) });
51
+ };
52
+
53
+ // dist/fullscreen-widget.js
54
+ var FullscreenWidget = class {
55
+ constructor(props) {
56
+ this.id = "fullscreen";
57
+ this.placement = "top-left";
58
+ this.fullscreen = false;
59
+ this.id = props.id || "fullscreen";
60
+ this.placement = props.placement || "top-left";
61
+ props.enterLabel = props.enterLabel || "Enter Fullscreen";
62
+ props.exitLabel = props.exitLabel || "Exit Fullscreen";
63
+ props.style = props.style || {};
64
+ this.props = props;
65
+ }
66
+ onAdd({ deck }) {
67
+ const { style, className } = this.props;
68
+ const el = document.createElement("div");
69
+ el.classList.add("deck-widget", "deck-widget-fullscreen");
70
+ if (className)
71
+ el.classList.add(className);
72
+ if (style) {
73
+ Object.entries(style).map(([key, value]) => el.style.setProperty(key, value));
74
+ }
75
+ this.deck = deck;
76
+ this.element = el;
77
+ this.update();
78
+ document.addEventListener("fullscreenchange", this.onFullscreenChange.bind(this));
79
+ return el;
80
+ }
81
+ onRemove() {
82
+ this.deck = void 0;
83
+ this.element = void 0;
84
+ document.removeEventListener("fullscreenchange", this.onFullscreenChange.bind(this));
85
+ }
86
+ update() {
87
+ const { enterLabel, exitLabel } = this.props;
88
+ const el = this.element;
89
+ if (!el) {
90
+ return;
91
+ }
92
+ const ui = (0, import_jsx_runtime2.jsx)(IconButton, { onClick: this.handleClick.bind(this), label: this.fullscreen ? exitLabel : enterLabel, className: this.fullscreen ? "deck-widget-fullscreen-exit" : "deck-widget-fullscreen-enter" });
93
+ (0, import_preact.render)(ui, el);
94
+ }
95
+ setProps(props) {
96
+ const oldProps = this.props;
97
+ const el = this.element;
98
+ if (el) {
99
+ if (oldProps.className !== props.className) {
100
+ if (oldProps.className)
101
+ el.classList.remove(oldProps.className);
102
+ if (props.className)
103
+ el.classList.add(props.className);
104
+ }
105
+ if (!(0, import_core._deepEqual)(oldProps.style, props.style, 1)) {
106
+ if (oldProps.style) {
107
+ Object.entries(oldProps.style).map(([key]) => el.style.removeProperty(key));
108
+ }
109
+ if (props.style) {
110
+ Object.entries(props.style).map(([key, value]) => el.style.setProperty(key, value));
111
+ }
112
+ }
113
+ }
114
+ Object.assign(this.props, props);
115
+ }
116
+ getContainer() {
117
+ var _a, _b;
118
+ return this.props.container || ((_b = (_a = this.deck) == null ? void 0 : _a.getCanvas()) == null ? void 0 : _b.parentElement);
119
+ }
120
+ onFullscreenChange() {
121
+ const prevFullscreen = this.fullscreen;
122
+ const fullscreen = document.fullscreenElement === this.getContainer();
123
+ if (prevFullscreen !== fullscreen) {
124
+ this.fullscreen = !this.fullscreen;
125
+ }
126
+ this.update();
127
+ }
128
+ async handleClick() {
129
+ if (this.fullscreen) {
130
+ await this.exitFullscreen();
131
+ } else {
132
+ await this.requestFullscreen();
133
+ }
134
+ this.update();
135
+ }
136
+ async requestFullscreen() {
137
+ const container = this.getContainer();
138
+ if (container == null ? void 0 : container.requestFullscreen) {
139
+ await container.requestFullscreen({ navigationUI: "hide" });
140
+ } else {
141
+ this.togglePseudoFullscreen();
142
+ }
143
+ }
144
+ async exitFullscreen() {
145
+ if (document.exitFullscreen) {
146
+ await document.exitFullscreen();
147
+ } else {
148
+ this.togglePseudoFullscreen();
149
+ }
150
+ }
151
+ togglePseudoFullscreen() {
152
+ var _a;
153
+ (_a = this.getContainer()) == null ? void 0 : _a.classList.toggle("deck-pseudo-fullscreen");
154
+ }
155
+ };
156
+
157
+ // dist/compass-widget.js
158
+ var import_jsx_runtime3 = require("preact/jsx-runtime");
159
+ var import_core2 = require("@deck.gl/core");
160
+ var import_preact2 = require("preact");
161
+ var CompassWidget = class {
162
+ constructor(props) {
163
+ this.id = "compass";
164
+ this.placement = "top-left";
165
+ this.viewId = null;
166
+ this.id = props.id || "compass";
167
+ this.viewId = props.viewId || null;
168
+ this.placement = props.placement || "top-left";
169
+ props.transitionDuration = props.transitionDuration || 200;
170
+ props.label = props.label || "Compass";
171
+ props.style = props.style || {};
172
+ this.props = props;
173
+ }
174
+ setProps(props) {
175
+ Object.assign(this.props, props);
176
+ }
177
+ onViewportChange(viewport) {
178
+ this.viewport = viewport;
179
+ this.update();
180
+ }
181
+ onAdd({ deck }) {
182
+ const { style, className } = this.props;
183
+ const element = document.createElement("div");
184
+ element.classList.add("deck-widget", "deck-widget-compass");
185
+ if (className)
186
+ element.classList.add(className);
187
+ if (style) {
188
+ Object.entries(style).map(([key, value]) => element.style.setProperty(key, value));
189
+ }
190
+ this.deck = deck;
191
+ this.element = element;
192
+ this.update();
193
+ return element;
194
+ }
195
+ getRotation() {
196
+ if (this.viewport instanceof import_core2.WebMercatorViewport) {
197
+ return [-this.viewport.bearing, this.viewport.pitch];
198
+ } else if (this.viewport instanceof import_core2._GlobeViewport) {
199
+ return [0, Math.max(-80, Math.min(80, this.viewport.latitude))];
200
+ }
201
+ return [0, 0];
202
+ }
203
+ update() {
204
+ const [rz, rx] = this.getRotation();
205
+ const element = this.element;
206
+ if (!element) {
207
+ return;
208
+ }
209
+ const ui = (0, import_jsx_runtime3.jsx)("div", { className: "deck-widget-button", style: { perspective: 100 }, children: (0, import_jsx_runtime3.jsx)("button", { type: "button", onClick: () => this.handleCompassReset(), label: this.props.label, style: { transform: `rotateX(${rx}deg)` }, children: (0, import_jsx_runtime3.jsx)("svg", { fill: "none", width: "100%", height: "100%", viewBox: "0 0 26 26", children: (0, import_jsx_runtime3.jsxs)("g", { transform: `rotate(${rz},13,13)`, children: [(0, import_jsx_runtime3.jsx)("path", { d: "M10 13.0001L12.9999 5L15.9997 13.0001H10Z", fill: "var(--icon-compass-north-color, #F05C44)" }), (0, import_jsx_runtime3.jsx)("path", { d: "M16.0002 12.9999L13.0004 21L10.0005 12.9999H16.0002Z", fill: "var(--icon-compass-south-color, #C2C2CC)" })] }) }) }) });
210
+ (0, import_preact2.render)(ui, element);
211
+ }
212
+ onRemove() {
213
+ this.deck = void 0;
214
+ this.element = void 0;
215
+ }
216
+ handleCompassReset() {
217
+ const viewId = this.viewId || "default-view";
218
+ if (this.viewport instanceof import_core2.WebMercatorViewport) {
219
+ const nextViewState = {
220
+ ...this.viewport,
221
+ bearing: 0,
222
+ ...this.getRotation()[0] === 0 ? { pitch: 0 } : {},
223
+ transitionDuration: this.props.transitionDuration,
224
+ transitionInterpolator: new import_core2.FlyToInterpolator()
225
+ };
226
+ this.deck._onViewStateChange({ viewId, viewState: nextViewState, interactionState: {} });
227
+ }
228
+ }
229
+ };
230
+
231
+ // dist/zoom-widget.js
232
+ var import_jsx_runtime4 = require("preact/jsx-runtime");
233
+ var import_core3 = require("@deck.gl/core");
234
+ var import_preact3 = require("preact");
235
+ var ZoomWidget = class {
236
+ constructor(props) {
237
+ this.id = "zoom";
238
+ this.placement = "top-left";
239
+ this.orientation = "vertical";
240
+ this.viewId = null;
241
+ this.id = props.id || "zoom";
242
+ this.viewId = props.viewId || null;
243
+ this.placement = props.placement || "top-left";
244
+ this.orientation = props.orientation || "vertical";
245
+ props.transitionDuration = props.transitionDuration || 200;
246
+ props.zoomInLabel = props.zoomInLabel || "Zoom In";
247
+ props.zoomOutLabel = props.zoomOutLabel || "Zoom Out";
248
+ props.style = props.style || {};
249
+ this.props = props;
250
+ }
251
+ onAdd({ deck }) {
252
+ const { style, className } = this.props;
253
+ const element = document.createElement("div");
254
+ element.classList.add("deck-widget", "deck-widget-zoom");
255
+ if (className)
256
+ element.classList.add(className);
257
+ if (style) {
258
+ Object.entries(style).map(([key, value]) => element.style.setProperty(key, value));
259
+ }
260
+ const ui = (0, import_jsx_runtime4.jsxs)(ButtonGroup, { orientation: this.orientation, children: [(0, import_jsx_runtime4.jsx)(GroupedIconButton, { onClick: () => this.handleZoomIn(), label: this.props.zoomInLabel, className: "deck-widget-zoom-in" }), (0, import_jsx_runtime4.jsx)(GroupedIconButton, { onClick: () => this.handleZoomOut(), label: this.props.zoomOutLabel, className: "deck-widget-zoom-out" })] });
261
+ (0, import_preact3.render)(ui, element);
262
+ this.deck = deck;
263
+ this.element = element;
264
+ return element;
265
+ }
266
+ onRemove() {
267
+ this.deck = void 0;
268
+ this.element = void 0;
269
+ }
270
+ setProps(props) {
271
+ Object.assign(this.props, props);
272
+ }
273
+ onViewportChange(viewport) {
274
+ this.viewport = viewport;
275
+ }
276
+ handleZoom(nextZoom) {
277
+ const viewId = this.viewId || "default-view";
278
+ const nextViewState = {
279
+ ...this.viewport,
280
+ zoom: nextZoom,
281
+ transitionDuration: this.props.transitionDuration,
282
+ transitionInterpolator: new import_core3.FlyToInterpolator()
283
+ };
284
+ this.deck._onViewStateChange({ viewId, viewState: nextViewState, interactionState: {} });
285
+ }
286
+ handleZoomIn() {
287
+ if (this.viewport) {
288
+ this.handleZoom(this.viewport.zoom + 1);
289
+ }
290
+ }
291
+ handleZoomOut() {
292
+ if (this.viewport) {
293
+ this.handleZoom(this.viewport.zoom - 1);
294
+ }
295
+ }
296
+ };
297
+
298
+ // dist/themes.js
299
+ var LightTheme = {
300
+ "--button-background": "#fff",
301
+ "--button-stroke": "rgba(255, 255, 255, 0.3)",
302
+ "--button-inner-stroke": "unset",
303
+ "--button-shadow": "0px 0px 8px 0px rgba(0, 0, 0, 0.25)",
304
+ "--button-backdrop-filter": "unset",
305
+ "--button-icon-idle": "rgba(97, 97, 102, 1)",
306
+ "--button-icon-hover": "rgba(24, 24, 26, 1)",
307
+ "--icon-compass-north-color": "#F05C44",
308
+ "--icon-compass-south-color": "#C2C2CC"
309
+ };
310
+ var DarkTheme = {
311
+ "--button-background": "rgba(18, 18, 20, 1)",
312
+ "--button-stroke": "rgba(18, 18, 20, 0.30)",
313
+ "--button-inner-stroke": "unset",
314
+ "--button-shadow": "0px 0px 8px 0px rgba(0, 0, 0, 0.25)",
315
+ "--button-backdrop-filter": "unset",
316
+ "--button-icon-idle": "rgba(158, 157, 168, 1)",
317
+ "--button-icon-hover": "rgba(215, 214, 229, 1)",
318
+ "--icon-compass-north-color": "#F05C44",
319
+ "--icon-compass-south-color": "#C2C2CC"
320
+ };
321
+ var LightGlassTheme = {
322
+ "--button-background": "rgba(255, 255, 255, 0.6)",
323
+ "--button-stroke": "rgba(255, 255, 255, 0.3)",
324
+ "--button-inner-stroke": "1px solid rgba(255, 255, 255, 0.6)",
325
+ "--button-shadow": "0px 0px 8px 0px rgba(0, 0, 0, 0.25), 0px 0px 8px 0px rgba(0, 0, 0, 0.1) inset",
326
+ "--button-backdrop-filter": "blur(4px)",
327
+ "--button-icon-idle": "rgba(97, 97, 102, 1)",
328
+ "--button-icon-hover": "rgba(24, 24, 26, 1)",
329
+ "--icon-compass-north-color": "#F05C44",
330
+ "--icon-compass-south-color": "#C2C2CC"
331
+ };
332
+ var DarkGlassTheme = {
333
+ "--button-background": "rgba(18, 18, 20, 0.75)",
334
+ "--button-stroke": "rgba(18, 18, 20, 0.30)",
335
+ "--button-inner-stroke": "1px solid rgba(18, 18, 20, 0.75)",
336
+ "--button-shadow": "0px 0px 8px 0px rgba(0, 0, 0, 0.25), 0px 0px 8px 0px rgba(0, 0, 0, 0.1) inset",
337
+ "--button-backdrop-filter": "blur(4px)",
338
+ "--button-icon-idle": "rgba(158, 157, 168, 1)",
339
+ "--button-icon-hover": "rgba(215, 214, 229, 1)",
340
+ "--icon-compass-north-color": "#F05C44",
341
+ "--icon-compass-south-color": "#C2C2CC"
342
+ };
343
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["index.js", "fullscreen-widget.js", "components.js", "compass-widget.js", "zoom-widget.js", "themes.js"],
4
+ "sourcesContent": ["export { FullscreenWidget } from \"./fullscreen-widget.js\";\nexport { CompassWidget } from \"./compass-widget.js\";\nexport { ZoomWidget } from \"./zoom-widget.js\";\nexport * from \"./themes.js\";\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\n/* global document */\nimport { _deepEqual as deepEqual } from '@deck.gl/core';\nimport { render } from 'preact';\nimport { IconButton } from \"./components.js\";\nexport class FullscreenWidget {\n constructor(props) {\n this.id = 'fullscreen';\n this.placement = 'top-left';\n this.fullscreen = false;\n this.id = props.id || 'fullscreen';\n this.placement = props.placement || 'top-left';\n props.enterLabel = props.enterLabel || 'Enter Fullscreen';\n props.exitLabel = props.exitLabel || 'Exit Fullscreen';\n props.style = props.style || {};\n this.props = props;\n }\n onAdd({ deck }) {\n const { style, className } = this.props;\n const el = document.createElement('div');\n el.classList.add('deck-widget', 'deck-widget-fullscreen');\n if (className)\n el.classList.add(className);\n if (style) {\n Object.entries(style).map(([key, value]) => el.style.setProperty(key, value));\n }\n this.deck = deck;\n this.element = el;\n this.update();\n document.addEventListener('fullscreenchange', this.onFullscreenChange.bind(this));\n return el;\n }\n onRemove() {\n this.deck = undefined;\n this.element = undefined;\n document.removeEventListener('fullscreenchange', this.onFullscreenChange.bind(this));\n }\n update() {\n const { enterLabel, exitLabel } = this.props;\n const el = this.element;\n if (!el) {\n return;\n }\n 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' }));\n render(ui, el);\n }\n setProps(props) {\n const oldProps = this.props;\n const el = this.element;\n if (el) {\n if (oldProps.className !== props.className) {\n if (oldProps.className)\n el.classList.remove(oldProps.className);\n if (props.className)\n el.classList.add(props.className);\n }\n if (!deepEqual(oldProps.style, props.style, 1)) {\n if (oldProps.style) {\n Object.entries(oldProps.style).map(([key]) => el.style.removeProperty(key));\n }\n if (props.style) {\n Object.entries(props.style).map(([key, value]) => el.style.setProperty(key, value));\n }\n }\n }\n Object.assign(this.props, props);\n }\n getContainer() {\n return this.props.container || this.deck?.getCanvas()?.parentElement;\n }\n onFullscreenChange() {\n const prevFullscreen = this.fullscreen;\n const fullscreen = document.fullscreenElement === this.getContainer();\n if (prevFullscreen !== fullscreen) {\n this.fullscreen = !this.fullscreen;\n }\n this.update();\n }\n async handleClick() {\n if (this.fullscreen) {\n await this.exitFullscreen();\n }\n else {\n await this.requestFullscreen();\n }\n this.update();\n }\n async requestFullscreen() {\n const container = this.getContainer();\n if (container?.requestFullscreen) {\n await container.requestFullscreen({ navigationUI: 'hide' });\n }\n else {\n this.togglePseudoFullscreen();\n }\n }\n async exitFullscreen() {\n if (document.exitFullscreen) {\n await document.exitFullscreen();\n }\n else {\n this.togglePseudoFullscreen();\n }\n }\n togglePseudoFullscreen() {\n this.getContainer()?.classList.toggle('deck-pseudo-fullscreen');\n }\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nexport const IconButton = props => {\n const { className, label, onClick } = props;\n return (_jsx(\"div\", { className: \"deck-widget-button\", children: _jsx(\"button\", { className: `deck-widget-icon-button ${className}`, type: \"button\", onClick: onClick, title: label, children: _jsx(\"div\", { className: \"deck-widget-icon\" }) }) }));\n};\nexport const ButtonGroup = props => {\n const { children, orientation } = props;\n return _jsx(\"div\", { className: `deck-widget-button-group ${orientation}`, children: children });\n};\nexport const GroupedIconButton = props => {\n const { className, label, onClick } = props;\n return (_jsx(\"button\", { className: `deck-widget-icon-button ${className}`, type: \"button\", onClick: onClick, title: label, children: _jsx(\"div\", { className: \"deck-widget-icon\" }) }));\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\n/* global document */\nimport { FlyToInterpolator, WebMercatorViewport, _GlobeViewport } from '@deck.gl/core';\nimport { render } from 'preact';\nexport class CompassWidget {\n constructor(props) {\n this.id = 'compass';\n this.placement = 'top-left';\n this.viewId = null;\n this.id = props.id || 'compass';\n this.viewId = props.viewId || null;\n this.placement = props.placement || 'top-left';\n props.transitionDuration = props.transitionDuration || 200;\n props.label = props.label || 'Compass';\n props.style = props.style || {};\n this.props = props;\n }\n setProps(props) {\n Object.assign(this.props, props);\n }\n onViewportChange(viewport) {\n this.viewport = viewport;\n this.update();\n }\n onAdd({ deck }) {\n const { style, className } = this.props;\n const element = document.createElement('div');\n element.classList.add('deck-widget', 'deck-widget-compass');\n if (className)\n element.classList.add(className);\n if (style) {\n Object.entries(style).map(([key, value]) => element.style.setProperty(key, value));\n }\n this.deck = deck;\n this.element = element;\n this.update();\n return element;\n }\n getRotation() {\n if (this.viewport instanceof WebMercatorViewport) {\n return [-this.viewport.bearing, this.viewport.pitch];\n }\n else if (this.viewport instanceof _GlobeViewport) {\n return [0, Math.max(-80, Math.min(80, this.viewport.latitude))];\n }\n return [0, 0];\n }\n update() {\n const [rz, rx] = this.getRotation();\n const element = this.element;\n if (!element) {\n return;\n }\n const ui = (_jsx(\"div\", { className: \"deck-widget-button\", style: { perspective: 100 }, children: _jsx(\"button\", { type: \"button\", onClick: () => this.handleCompassReset(), label: this.props.label, style: { transform: `rotateX(${rx}deg)` }, children: _jsx(\"svg\", { fill: \"none\", width: \"100%\", height: \"100%\", viewBox: \"0 0 26 26\", children: _jsxs(\"g\", { transform: `rotate(${rz},13,13)`, children: [_jsx(\"path\", { d: \"M10 13.0001L12.9999 5L15.9997 13.0001H10Z\", fill: \"var(--icon-compass-north-color, #F05C44)\" }), _jsx(\"path\", { d: \"M16.0002 12.9999L13.0004 21L10.0005 12.9999H16.0002Z\", fill: \"var(--icon-compass-south-color, #C2C2CC)\" })] }) }) }) }));\n render(ui, element);\n }\n onRemove() {\n this.deck = undefined;\n this.element = undefined;\n }\n handleCompassReset() {\n const viewId = this.viewId || 'default-view';\n if (this.viewport instanceof WebMercatorViewport) {\n const nextViewState = {\n ...this.viewport,\n bearing: 0,\n ...(this.getRotation()[0] === 0 ? { pitch: 0 } : {}),\n transitionDuration: this.props.transitionDuration,\n transitionInterpolator: new FlyToInterpolator()\n };\n // @ts-ignore Using private method temporary until there's a public one\n this.deck._onViewStateChange({ viewId, viewState: nextViewState, interactionState: {} });\n }\n }\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\n/* global document */\nimport { FlyToInterpolator } from '@deck.gl/core';\nimport { render } from 'preact';\nimport { ButtonGroup, GroupedIconButton } from \"./components.js\";\nexport class ZoomWidget {\n constructor(props) {\n this.id = 'zoom';\n this.placement = 'top-left';\n this.orientation = 'vertical';\n this.viewId = null;\n this.id = props.id || 'zoom';\n this.viewId = props.viewId || null;\n this.placement = props.placement || 'top-left';\n this.orientation = props.orientation || 'vertical';\n props.transitionDuration = props.transitionDuration || 200;\n props.zoomInLabel = props.zoomInLabel || 'Zoom In';\n props.zoomOutLabel = props.zoomOutLabel || 'Zoom Out';\n props.style = props.style || {};\n this.props = props;\n }\n onAdd({ deck }) {\n const { style, className } = this.props;\n const element = document.createElement('div');\n element.classList.add('deck-widget', 'deck-widget-zoom');\n if (className)\n element.classList.add(className);\n if (style) {\n Object.entries(style).map(([key, value]) => element.style.setProperty(key, value));\n }\n const ui = (_jsxs(ButtonGroup, { orientation: this.orientation, children: [_jsx(GroupedIconButton, { onClick: () => this.handleZoomIn(), label: this.props.zoomInLabel, className: \"deck-widget-zoom-in\" }), _jsx(GroupedIconButton, { onClick: () => this.handleZoomOut(), label: this.props.zoomOutLabel, className: \"deck-widget-zoom-out\" })] }));\n render(ui, element);\n this.deck = deck;\n this.element = element;\n return element;\n }\n onRemove() {\n this.deck = undefined;\n this.element = undefined;\n }\n setProps(props) {\n Object.assign(this.props, props);\n }\n onViewportChange(viewport) {\n this.viewport = viewport;\n }\n handleZoom(nextZoom) {\n const viewId = this.viewId || 'default-view';\n const nextViewState = {\n ...this.viewport,\n zoom: nextZoom,\n transitionDuration: this.props.transitionDuration,\n transitionInterpolator: new FlyToInterpolator()\n };\n // @ts-ignore Using private method temporary until there's a public one\n this.deck._onViewStateChange({ viewId, viewState: nextViewState, interactionState: {} });\n }\n handleZoomIn() {\n if (this.viewport) {\n this.handleZoom(this.viewport.zoom + 1);\n }\n }\n handleZoomOut() {\n if (this.viewport) {\n this.handleZoom(this.viewport.zoom - 1);\n }\n }\n}\n", "export const LightTheme = {\n '--button-background': '#fff',\n '--button-stroke': 'rgba(255, 255, 255, 0.3)',\n '--button-inner-stroke': 'unset',\n '--button-shadow': '0px 0px 8px 0px rgba(0, 0, 0, 0.25)',\n '--button-backdrop-filter': 'unset',\n '--button-icon-idle': 'rgba(97, 97, 102, 1)',\n '--button-icon-hover': 'rgba(24, 24, 26, 1)',\n '--icon-compass-north-color': '#F05C44',\n '--icon-compass-south-color': '#C2C2CC'\n};\nexport const DarkTheme = {\n '--button-background': 'rgba(18, 18, 20, 1)',\n '--button-stroke': 'rgba(18, 18, 20, 0.30)',\n '--button-inner-stroke': 'unset',\n '--button-shadow': '0px 0px 8px 0px rgba(0, 0, 0, 0.25)',\n '--button-backdrop-filter': 'unset',\n '--button-icon-idle': 'rgba(158, 157, 168, 1)',\n '--button-icon-hover': 'rgba(215, 214, 229, 1)',\n '--icon-compass-north-color': '#F05C44',\n '--icon-compass-south-color': '#C2C2CC'\n};\nexport const LightGlassTheme = {\n '--button-background': 'rgba(255, 255, 255, 0.6)',\n '--button-stroke': 'rgba(255, 255, 255, 0.3)',\n '--button-inner-stroke': '1px solid rgba(255, 255, 255, 0.6)',\n '--button-shadow': '0px 0px 8px 0px rgba(0, 0, 0, 0.25), 0px 0px 8px 0px rgba(0, 0, 0, 0.1) inset',\n '--button-backdrop-filter': 'blur(4px)',\n '--button-icon-idle': 'rgba(97, 97, 102, 1)',\n '--button-icon-hover': 'rgba(24, 24, 26, 1)',\n '--icon-compass-north-color': '#F05C44',\n '--icon-compass-south-color': '#C2C2CC'\n};\nexport const DarkGlassTheme = {\n '--button-background': 'rgba(18, 18, 20, 0.75)',\n '--button-stroke': 'rgba(18, 18, 20, 0.30)',\n '--button-inner-stroke': '1px solid rgba(18, 18, 20, 0.75)',\n '--button-shadow': '0px 0px 8px 0px rgba(0, 0, 0, 0.25), 0px 0px 8px 0px rgba(0, 0, 0, 0.1) inset',\n '--button-backdrop-filter': 'blur(4px)',\n '--button-icon-idle': 'rgba(158, 157, 168, 1)',\n '--button-icon-hover': 'rgba(215, 214, 229, 1)',\n '--icon-compass-north-color': '#F05C44',\n '--icon-compass-south-color': '#C2C2CC'\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_jsx_runtime", "_jsx", "_jsx", "deepEqual", "import_jsx_runtime", "import_core", "import_preact", "_jsx", "_jsxs", "import_jsx_runtime", "import_core", "import_preact", "_jsxs", "_jsx"]
7
+ }
@@ -0,0 +1,5 @@
1
+ export { FullscreenWidget } from "./fullscreen-widget.js";
2
+ export { CompassWidget } from "./compass-widget.js";
3
+ export { ZoomWidget } from "./zoom-widget.js";
4
+ export * from "./themes.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAErD,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,+BAA4B;AACrD,OAAO,EAAC,aAAa,EAAC,4BAAyB;AAC/C,OAAO,EAAC,UAAU,EAAC,yBAAsB;AAEzC,4BAAyB"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { FullscreenWidget } from "./fullscreen-widget.js";
2
+ export { CompassWidget } from "./compass-widget.js";
3
+ export { ZoomWidget } from "./zoom-widget.js";
4
+ export * from "./themes.js";
@@ -2,12 +2,9 @@
2
2
  margin: var(--widget-margin, 12px);
3
3
  }
4
4
 
5
- .deck-widget-button-border {
6
- width: var(--button-size, 28px);
7
- height: var(--button-size, 28px);
8
- box-sizing: border-box;
9
- flex-shrink: 0;
10
-
5
+ /* Common button container styles */
6
+ .deck-widget-button,
7
+ .deck-widget-button-group {
11
8
  background: var(--button-stroke, rgba(255, 255, 255, 0.3));
12
9
  border-radius: var(--button-corner-radius, 8px);
13
10
  box-shadow: var(--button-shadow, 0px 0px 8px 0px rgba(0, 0, 0, 0.25));
@@ -17,12 +14,34 @@
17
14
  justify-content: center;
18
15
  }
19
16
 
20
- .deck-widget-button-border button {
17
+ /* Single button */
18
+ .deck-widget-button {
19
+ width: var(--button-size, 28px);
20
+ height: var(--button-size, 28px);
21
+ }
22
+
23
+ /* Button group */
24
+ .deck-widget-button-group {
25
+ width: calc(var(--button-size, 28px) - 2);
26
+ height: calc((var(--button-size, 28px) * 2) - 1);
27
+
28
+ flex-direction: row;
29
+ padding: 1px;
30
+ gap: 1px;
31
+ }
32
+
33
+ .deck-widget-button-group.vertical {
34
+ display: inline-flex;
35
+ flex-direction: column;
36
+ }
37
+
38
+ /* Common button styles */
39
+ .deck-widget-button-group button,
40
+ .deck-widget-button button {
21
41
  width: calc(var(--button-size, 28px) - 2px);
22
42
  height: calc(var(--button-size, 28px) - 2px);
23
- box-sizing: border-box;
24
- flex-shrink: 0;
25
43
 
44
+ box-sizing: border-box;
26
45
  background: var(--button-background, #fff);
27
46
  backdrop-filter: var(--button-backdrop-filter, unset);
28
47
  border: var(--button-inner-stroke, unset);
@@ -34,8 +53,35 @@
34
53
  padding: 0;
35
54
  }
36
55
 
56
+ /* Border radius adjustments for grouped buttons */
57
+ .deck-widget-button-group.vertical > *:not(:last-child),
58
+ .deck-widget-button-group.vertical > *:not(:last-child) > button {
59
+ border-bottom-left-radius: 0;
60
+ border-bottom-right-radius: 0;
61
+ }
62
+
63
+ .deck-widget-button-group.vertical > *:not(:first-child),
64
+ .deck-widget-button-group.vertical > *:not(:first-child) > button {
65
+ border-top-left-radius: 0;
66
+ border-top-right-radius: 0;
67
+ }
68
+
69
+
70
+ .deck-widget-button-group.horizontal > *:not(:last-child),
71
+ .deck-widget-button-group.horizontal > *:not(:last-child) > button {
72
+ border-top-right-radius: 0;
73
+ border-bottom-right-radius: 0;
74
+ }
75
+
76
+ .deck-widget-button-group.horizontal > *:not(:first-child),
77
+ .deck-widget-button-group.horizontal > *:not(:first-child) > button {
78
+ border-top-left-radius: 0;
79
+ border-bottom-left-radius: 0;
80
+ }
81
+
82
+ /* Icon button styles */
37
83
  .deck-widget button .deck-widget-icon {
38
- background-color: var(--button-icon-idle, rgba(97, 97, 102, 1));
84
+ background-color: var(--button-icon-idle, #616166);
39
85
  background-position: 50%;
40
86
  background-repeat: no-repeat;
41
87
  display: block;
@@ -44,9 +90,10 @@
44
90
  }
45
91
 
46
92
  .deck-widget button .deck-widget-icon:hover {
47
- background-color: var(--button-icon-hover, rgba(24, 24, 26, 1));
93
+ background-color: var(--button-icon-hover, rgb(24, 24, 26));
48
94
  }
49
95
 
96
+ /* Fullscreen styles */
50
97
  .deck-widget.deck-widget-fullscreen button.deck-widget-fullscreen-enter .deck-widget-icon {
51
98
  mask-image: var(
52
99
  --icon-fullscreen-enter,
@@ -77,3 +124,26 @@
77
124
  width: 100% !important;
78
125
  z-index: 99999;
79
126
  }
127
+
128
+ /* Zoom styles */
129
+ .deck-widget.deck-widget-zoom button.deck-widget-zoom-in .deck-widget-icon {
130
+ mask-image: var(
131
+ --icon-zoom-in,
132
+ url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 26 26" fill="black"><path d="M12.1029 13.8971H7.89332C7.64334 13.8971 7.43196 13.8105 7.25918 13.6373C7.08639 13.4641 7 13.2521 7 13.0014C7 12.7508 7.08639 12.5396 7.25918 12.368C7.43196 12.1963 7.64334 12.1105 7.89332 12.1105H12.1029V7.90097C12.1029 7.65161 12.1895 7.43912 12.3627 7.26348C12.5359 7.08783 12.7479 7 12.9986 7C13.2492 7 13.4604 7.08783 13.632 7.26348C13.8037 7.43912 13.8895 7.65161 13.8895 7.90097V12.1105H18.099C18.3484 12.1105 18.5609 12.1971 18.7365 12.3703C18.9122 12.5436 19 12.7555 19 13.0062C19 13.2569 18.9122 13.468 18.7365 13.6397C18.5609 13.8113 18.3484 13.8971 18.099 13.8971H13.8895V18.1067C13.8895 18.3567 13.8029 18.568 13.6297 18.7408C13.4564 18.9136 13.2445 19 12.9938 19C12.7431 19 12.532 18.9136 12.3603 18.7408C12.1887 18.568 12.1029 18.3567 12.1029 18.1067V13.8971Z"/></svg>')
133
+ );
134
+ -webkit-mask-image: var(
135
+ --icon-zoom-in,
136
+ url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 26 26" fill="black"><path d="M12.1029 13.8971H7.89332C7.64334 13.8971 7.43196 13.8105 7.25918 13.6373C7.08639 13.4641 7 13.2521 7 13.0014C7 12.7508 7.08639 12.5396 7.25918 12.368C7.43196 12.1963 7.64334 12.1105 7.89332 12.1105H12.1029V7.90097C12.1029 7.65161 12.1895 7.43912 12.3627 7.26348C12.5359 7.08783 12.7479 7 12.9986 7C13.2492 7 13.4604 7.08783 13.632 7.26348C13.8037 7.43912 13.8895 7.65161 13.8895 7.90097V12.1105H18.099C18.3484 12.1105 18.5609 12.1971 18.7365 12.3703C18.9122 12.5436 19 12.7555 19 13.0062C19 13.2569 18.9122 13.468 18.7365 13.6397C18.5609 13.8113 18.3484 13.8971 18.099 13.8971H13.8895V18.1067C13.8895 18.3567 13.8029 18.568 13.6297 18.7408C13.4564 18.9136 13.2445 19 12.9938 19C12.7431 19 12.532 18.9136 12.3603 18.7408C12.1887 18.568 12.1029 18.3567 12.1029 18.1067V13.8971Z"/></svg>')
137
+ );
138
+ }
139
+
140
+ .deck-widget.deck-widget-zoom button.deck-widget-zoom-out .deck-widget-icon {
141
+ mask-image: var(
142
+ --icon-zoom-out,
143
+ url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 26 26" fill="black"> wBox="0 0 26 26" fill="none"><path d="M7.89332 13.8866C7.64334 13.8866 7.43196 13.8 7.25918 13.6268C7.08639 13.4535 7 13.2416 7 12.9909C7 12.7403 7.08639 12.5291 7.25918 12.3575C7.43196 12.1858 7.64334 12.1 7.89332 12.1H18.099C18.349 12.1 18.5617 12.1866 18.737 12.3598C18.9123 12.5331 19 12.745 19 12.9957C19 13.2463 18.9123 13.4575 18.737 13.6291C18.5617 13.8008 18.349 13.8866 18.099 13.8866H7.89332Z"/></svg>')
144
+ );
145
+ -webkit-mask-image: var(
146
+ --icon-zoom-out,
147
+ url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 26 26" fill="black"> wBox="0 0 26 26" fill="none"><path d="M7.89332 13.8866C7.64334 13.8866 7.43196 13.8 7.25918 13.6268C7.08639 13.4535 7 13.2416 7 12.9909C7 12.7403 7.08639 12.5291 7.25918 12.3575C7.43196 12.1858 7.64334 12.1 7.89332 12.1H18.099C18.349 12.1 18.5617 12.1866 18.737 12.3598C18.9123 12.5331 19 12.745 19 12.9957C19 13.2463 18.9123 13.4575 18.737 13.6291C18.5617 13.8008 18.349 13.8866 18.099 13.8866H7.89332Z"/></svg>')
148
+ );
149
+ }