@deck.gl-community/experimental 9.1.0-beta.8 → 9.2.0-beta.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/LICENSE +1 -1
- package/dist/data-driven-tile-3d-layer/utils/colorize-tile.d.ts.map +1 -1
- package/dist/data-driven-tile-3d-layer/utils/filter-tile.d.ts.map +1 -1
- package/dist/index.cjs +423 -0
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/widgets/long-press-button.d.ts +22 -0
- package/dist/widgets/long-press-button.d.ts.map +1 -0
- package/dist/widgets/long-press-button.js +84 -0
- package/dist/widgets/long-press-button.js.map +1 -0
- package/dist/widgets/pan-widget.d.ts +33 -0
- package/dist/widgets/pan-widget.d.ts.map +1 -0
- package/dist/widgets/pan-widget.js +134 -0
- package/dist/widgets/pan-widget.js.map +1 -0
- package/dist/widgets/zoom-range-widget.d.ts +43 -0
- package/dist/widgets/zoom-range-widget.d.ts.map +1 -0
- package/dist/widgets/zoom-range-widget.js +184 -0
- package/dist/widgets/zoom-range-widget.js.map +1 -0
- package/package.json +10 -10
- package/src/index.ts +3 -0
- package/src/widgets/long-press-button.tsx +125 -0
- package/src/widgets/pan-widget.tsx +178 -0
- package/src/widgets/zoom-range-widget.tsx +279 -0
package/LICENSE
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Copyright (c) 2015 - 2021 Uber Technologies, Inc.
|
|
2
|
-
Copyright (c) 2022 -
|
|
2
|
+
Copyright (c) 2022 - 2025 vis.gl contributors
|
|
3
3
|
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colorize-tile.d.ts","sourceRoot":"","sources":["../../../src/data-driven-tile-3d-layer/utils/colorize-tile.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,iBAAiB,EAAC,wCAAqC;AAE/D;;;GAGG;AACH,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"colorize-tile.d.ts","sourceRoot":"","sources":["../../../src/data-driven-tile-3d-layer/utils/colorize-tile.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,iBAAiB,EAAC,wCAAqC;AAE/D;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,mBAAmB,iBAAiB,GAAG,IAAI,KAC1C,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,CAqC1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-tile.d.ts","sourceRoot":"","sources":["../../../src/data-driven-tile-3d-layer/utils/filter-tile.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,kBAAkB,EAAC,wCAAqC;AAOhE;;;;;GAKG;AACH,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"filter-tile.d.ts","sourceRoot":"","sources":["../../../src/data-driven-tile-3d-layer/utils/filter-tile.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,kBAAkB,EAAC,wCAAqC;AAOhE;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,oBAAoB,kBAAkB,GAAG,IAAI,KAC5C,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,CA8B3C,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -25,6 +25,8 @@ var __publicField = (obj, key, value) => {
|
|
|
25
25
|
var dist_exports = {};
|
|
26
26
|
__export(dist_exports, {
|
|
27
27
|
DataDrivenTile3DLayer: () => DataDrivenTile3DLayer,
|
|
28
|
+
PanWidget: () => PanWidget,
|
|
29
|
+
ZoomRangeWidget: () => ZoomRangeWidget,
|
|
28
30
|
colorizeTile: () => colorizeTile,
|
|
29
31
|
filterTile: () => filterTile
|
|
30
32
|
});
|
|
@@ -335,4 +337,425 @@ function getAttributeValueType(attribute) {
|
|
|
335
337
|
}
|
|
336
338
|
return "";
|
|
337
339
|
}
|
|
340
|
+
|
|
341
|
+
// dist/widgets/pan-widget.js
|
|
342
|
+
var import_jsx_runtime2 = require("preact/jsx-runtime");
|
|
343
|
+
var import_preact2 = require("preact");
|
|
344
|
+
|
|
345
|
+
// dist/widgets/long-press-button.js
|
|
346
|
+
var import_jsx_runtime = require("preact/jsx-runtime");
|
|
347
|
+
var import_preact = require("preact");
|
|
348
|
+
var REPEAT_DELAY_MS = 300;
|
|
349
|
+
var REPEAT_INTERVAL_MS = 100;
|
|
350
|
+
var LongPressButton = class extends import_preact.Component {
|
|
351
|
+
buttonPressTimer = null;
|
|
352
|
+
usingPointerEvents = false;
|
|
353
|
+
stopEvent(event) {
|
|
354
|
+
event.stopPropagation();
|
|
355
|
+
if (typeof event.stopImmediatePropagation === "function") {
|
|
356
|
+
event.stopImmediatePropagation();
|
|
357
|
+
}
|
|
358
|
+
if (typeof event.preventDefault === "function") {
|
|
359
|
+
event.preventDefault();
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
repeat = () => {
|
|
363
|
+
if (this.buttonPressTimer) {
|
|
364
|
+
this.props.onClick();
|
|
365
|
+
this.buttonPressTimer = setTimeout(this.repeat, REPEAT_INTERVAL_MS);
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
startPress(event) {
|
|
369
|
+
this.stopEvent(event);
|
|
370
|
+
this.props.onClick();
|
|
371
|
+
this.buttonPressTimer = setTimeout(this.repeat, REPEAT_DELAY_MS);
|
|
372
|
+
}
|
|
373
|
+
endPress(event) {
|
|
374
|
+
if (event) {
|
|
375
|
+
this.stopEvent(event);
|
|
376
|
+
}
|
|
377
|
+
if (this.buttonPressTimer) {
|
|
378
|
+
clearTimeout(this.buttonPressTimer);
|
|
379
|
+
}
|
|
380
|
+
this.buttonPressTimer = null;
|
|
381
|
+
}
|
|
382
|
+
handlePointerDown = (event) => {
|
|
383
|
+
var _a, _b;
|
|
384
|
+
this.usingPointerEvents = true;
|
|
385
|
+
(_b = (_a = event.currentTarget) == null ? void 0 : _a.setPointerCapture) == null ? void 0 : _b.call(_a, event.pointerId);
|
|
386
|
+
this.startPress(event);
|
|
387
|
+
};
|
|
388
|
+
handlePointerUp = (event) => {
|
|
389
|
+
var _a, _b;
|
|
390
|
+
(_b = (_a = event.currentTarget) == null ? void 0 : _a.releasePointerCapture) == null ? void 0 : _b.call(_a, event.pointerId);
|
|
391
|
+
this.endPress(event);
|
|
392
|
+
};
|
|
393
|
+
handlePointerCancel = (event) => {
|
|
394
|
+
var _a, _b;
|
|
395
|
+
(_b = (_a = event.currentTarget) == null ? void 0 : _a.releasePointerCapture) == null ? void 0 : _b.call(_a, event.pointerId);
|
|
396
|
+
this.endPress(event);
|
|
397
|
+
};
|
|
398
|
+
handleMouseDown = (event) => {
|
|
399
|
+
if (this.usingPointerEvents) {
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
this.startPress(event);
|
|
403
|
+
document.addEventListener("mouseup", this.handleMouseUp, { once: true });
|
|
404
|
+
};
|
|
405
|
+
handleMouseUp = (event) => {
|
|
406
|
+
if (this.usingPointerEvents) {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
this.endPress(event);
|
|
410
|
+
};
|
|
411
|
+
handleTouchStart = (event) => {
|
|
412
|
+
if (this.usingPointerEvents) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
this.startPress(event);
|
|
416
|
+
document.addEventListener("touchend", this.handleTouchEnd, { once: true });
|
|
417
|
+
document.addEventListener("touchcancel", this.handleTouchEnd, { once: true });
|
|
418
|
+
};
|
|
419
|
+
handleTouchEnd = (event) => {
|
|
420
|
+
if (this.usingPointerEvents) {
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
this.endPress(event);
|
|
424
|
+
};
|
|
425
|
+
render() {
|
|
426
|
+
return (0, import_jsx_runtime.jsx)("div", { className: "deck-widget-button", children: (0, import_jsx_runtime.jsx)("div", { style: { pointerEvents: "auto" }, onPointerDown: this.handlePointerDown, onPointerUp: this.handlePointerUp, onPointerCancel: this.handlePointerCancel, onPointerMove: (event) => this.stopEvent(event), onPointerLeave: this.handlePointerCancel, onPointerOut: this.handlePointerCancel, onMouseDown: this.handleMouseDown, onMouseUp: this.handleMouseUp, onMouseMove: (event) => this.stopEvent(event), onTouchStart: this.handleTouchStart, onTouchEnd: this.handleTouchEnd, onTouchMove: (event) => this.stopEvent(event), onContextMenu: (event) => event.preventDefault(), onWheel: (event) => this.stopEvent(event), onClick: (event) => this.stopEvent(event), children: this.props.children }) });
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
// dist/widgets/pan-widget.js
|
|
431
|
+
var import_core3 = require("@deck.gl/core");
|
|
432
|
+
var WRAPPER_STYLE = {
|
|
433
|
+
position: "absolute",
|
|
434
|
+
display: "flex",
|
|
435
|
+
flexDirection: "column",
|
|
436
|
+
alignItems: "center",
|
|
437
|
+
zIndex: "99",
|
|
438
|
+
userSelect: "none"
|
|
439
|
+
};
|
|
440
|
+
var NAVIGATION_CONTAINER_STYLE = {
|
|
441
|
+
position: "relative",
|
|
442
|
+
background: "#f7f7f7",
|
|
443
|
+
borderRadius: "23px",
|
|
444
|
+
border: "0.5px solid #eaeaea",
|
|
445
|
+
boxShadow: "inset 11px 11px 5px -7px rgba(230, 230, 230, 0.49)",
|
|
446
|
+
height: "46px",
|
|
447
|
+
width: "46px"
|
|
448
|
+
};
|
|
449
|
+
var NAVIGATION_BUTTON_STYLE = {
|
|
450
|
+
color: "#848484",
|
|
451
|
+
cursor: "pointer",
|
|
452
|
+
position: "absolute",
|
|
453
|
+
pointerEvents: "auto"
|
|
454
|
+
};
|
|
455
|
+
var _PanWidget = class extends import_core3.Widget {
|
|
456
|
+
placement = "top-left";
|
|
457
|
+
className = "deck-widget-pan";
|
|
458
|
+
deck = null;
|
|
459
|
+
step;
|
|
460
|
+
constructor(props = {}) {
|
|
461
|
+
super({ ..._PanWidget.defaultProps, ...props });
|
|
462
|
+
this.viewId = props.viewId ?? null;
|
|
463
|
+
this.placement = props.placement ?? "top-left";
|
|
464
|
+
this.step = props.step ?? _PanWidget.defaultProps.step;
|
|
465
|
+
}
|
|
466
|
+
setProps(props) {
|
|
467
|
+
if (props.viewId !== void 0) {
|
|
468
|
+
this.viewId = props.viewId;
|
|
469
|
+
}
|
|
470
|
+
if (props.placement !== void 0) {
|
|
471
|
+
this.placement = props.placement;
|
|
472
|
+
}
|
|
473
|
+
if (props.step !== void 0) {
|
|
474
|
+
this.step = props.step;
|
|
475
|
+
}
|
|
476
|
+
super.setProps(props);
|
|
477
|
+
}
|
|
478
|
+
onAdd({ deck, viewId }) {
|
|
479
|
+
this.deck = deck;
|
|
480
|
+
if (this.viewId === void 0) {
|
|
481
|
+
this.viewId = viewId;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
onRemove() {
|
|
485
|
+
this.deck = null;
|
|
486
|
+
}
|
|
487
|
+
onRenderHTML(rootElement) {
|
|
488
|
+
const style = { ...WRAPPER_STYLE, ...this.props.style };
|
|
489
|
+
Object.assign(rootElement.style, style);
|
|
490
|
+
const buttons = [
|
|
491
|
+
{ top: -2, left: 14, onClick: () => this.handlePan(0, this.step), label: "\u25B2", key: "up" },
|
|
492
|
+
{ top: 12, left: 0, onClick: () => this.handlePan(this.step, 0), label: "\u25C0", key: "left" },
|
|
493
|
+
{ top: 12, left: 28, onClick: () => this.handlePan(-this.step, 0), label: "\u25B6", key: "right" },
|
|
494
|
+
{ top: 25, left: 14, onClick: () => this.handlePan(0, -this.step), label: "\u25BC", key: "down" }
|
|
495
|
+
];
|
|
496
|
+
const ui = (0, import_jsx_runtime2.jsx)("div", { style: NAVIGATION_CONTAINER_STYLE, children: buttons.map((button) => (0, import_jsx_runtime2.jsx)("div", { style: {
|
|
497
|
+
...NAVIGATION_BUTTON_STYLE,
|
|
498
|
+
top: `${button.top}px`,
|
|
499
|
+
left: `${button.left}px`
|
|
500
|
+
}, children: (0, import_jsx_runtime2.jsx)(LongPressButton, { onClick: button.onClick, children: button.label }) }, button.key)) });
|
|
501
|
+
(0, import_preact2.render)(ui, rootElement);
|
|
502
|
+
}
|
|
503
|
+
getTargetViewports() {
|
|
504
|
+
var _a;
|
|
505
|
+
const deck = this.deck;
|
|
506
|
+
if (!deck) {
|
|
507
|
+
return [];
|
|
508
|
+
}
|
|
509
|
+
if (this.viewId) {
|
|
510
|
+
const viewport = (_a = deck.viewManager) == null ? void 0 : _a.getViewport(this.viewId);
|
|
511
|
+
return viewport ? [viewport] : [];
|
|
512
|
+
}
|
|
513
|
+
return deck.getViewports();
|
|
514
|
+
}
|
|
515
|
+
getViewState(viewport) {
|
|
516
|
+
var _a;
|
|
517
|
+
const viewManager = (_a = this.deck) == null ? void 0 : _a.viewManager;
|
|
518
|
+
const viewId = this.viewId || viewport.id;
|
|
519
|
+
if (viewManager) {
|
|
520
|
+
try {
|
|
521
|
+
return { ...viewManager.getViewState(viewId) };
|
|
522
|
+
} catch (err) {
|
|
523
|
+
return { ...viewManager.viewState };
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
return { ...viewport };
|
|
527
|
+
}
|
|
528
|
+
handlePan(deltaX, deltaY) {
|
|
529
|
+
if (!this.deck) {
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
const viewports = this.getTargetViewports();
|
|
533
|
+
for (const viewport of viewports) {
|
|
534
|
+
const center = viewport.unproject([viewport.width / 2, viewport.height / 2]);
|
|
535
|
+
if (!center) {
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
const nextPixel = [
|
|
539
|
+
viewport.width / 2 + deltaX,
|
|
540
|
+
viewport.height / 2 + deltaY
|
|
541
|
+
];
|
|
542
|
+
const viewState = this.getViewState(viewport);
|
|
543
|
+
const panUpdate = viewport.panByPosition(center, nextPixel);
|
|
544
|
+
const nextViewState = { ...viewState, ...panUpdate };
|
|
545
|
+
const viewId = this.viewId || viewport.id || "default-view";
|
|
546
|
+
this.deck._onViewStateChange({ viewId, viewState: nextViewState, interactionState: {} });
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
var PanWidget = _PanWidget;
|
|
551
|
+
__publicField(PanWidget, "defaultProps", {
|
|
552
|
+
id: "pan",
|
|
553
|
+
viewId: null,
|
|
554
|
+
placement: "top-left",
|
|
555
|
+
step: 48,
|
|
556
|
+
style: {},
|
|
557
|
+
className: ""
|
|
558
|
+
});
|
|
559
|
+
|
|
560
|
+
// dist/widgets/zoom-range-widget.js
|
|
561
|
+
var import_jsx_runtime3 = require("preact/jsx-runtime");
|
|
562
|
+
var import_preact3 = require("preact");
|
|
563
|
+
var import_core4 = require("@deck.gl/core");
|
|
564
|
+
var WRAPPER_STYLE2 = {
|
|
565
|
+
position: "absolute",
|
|
566
|
+
display: "flex",
|
|
567
|
+
flexDirection: "column",
|
|
568
|
+
alignItems: "center",
|
|
569
|
+
background: "#f7f7f7",
|
|
570
|
+
border: "0.5px solid #eaeaea",
|
|
571
|
+
marginTop: "6px",
|
|
572
|
+
padding: "2px 0",
|
|
573
|
+
width: "18px",
|
|
574
|
+
userSelect: "none",
|
|
575
|
+
pointerEvents: "auto"
|
|
576
|
+
};
|
|
577
|
+
var ZOOM_BUTTON_STYLE = {
|
|
578
|
+
cursor: "pointer",
|
|
579
|
+
fontSize: "14px",
|
|
580
|
+
fontWeight: "500",
|
|
581
|
+
margin: "-4px"
|
|
582
|
+
};
|
|
583
|
+
var SLIDER_CONTAINER_STYLE = {
|
|
584
|
+
display: "inline-block",
|
|
585
|
+
height: "100px",
|
|
586
|
+
padding: "0",
|
|
587
|
+
width: "10px"
|
|
588
|
+
};
|
|
589
|
+
var _ZoomRangeWidget = class extends import_core4.Widget {
|
|
590
|
+
placement = "top-left";
|
|
591
|
+
className = "deck-widget-zoom-range";
|
|
592
|
+
deck = null;
|
|
593
|
+
step;
|
|
594
|
+
currentZoom = 0;
|
|
595
|
+
inferredMinZoom = null;
|
|
596
|
+
inferredMaxZoom = null;
|
|
597
|
+
constructor(props = {}) {
|
|
598
|
+
super({ ..._ZoomRangeWidget.defaultProps, ...props });
|
|
599
|
+
this.viewId = props.viewId ?? null;
|
|
600
|
+
this.placement = props.placement ?? "top-left";
|
|
601
|
+
this.step = props.step ?? _ZoomRangeWidget.defaultProps.step;
|
|
602
|
+
}
|
|
603
|
+
setProps(props) {
|
|
604
|
+
if (props.viewId !== void 0) {
|
|
605
|
+
this.viewId = props.viewId;
|
|
606
|
+
}
|
|
607
|
+
if (props.placement !== void 0) {
|
|
608
|
+
this.placement = props.placement;
|
|
609
|
+
}
|
|
610
|
+
if (props.step !== void 0) {
|
|
611
|
+
this.step = props.step;
|
|
612
|
+
}
|
|
613
|
+
super.setProps(props);
|
|
614
|
+
}
|
|
615
|
+
onAdd({ deck, viewId }) {
|
|
616
|
+
this.deck = deck;
|
|
617
|
+
if (this.viewId === void 0) {
|
|
618
|
+
this.viewId = viewId;
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
onRemove() {
|
|
622
|
+
this.deck = null;
|
|
623
|
+
}
|
|
624
|
+
onRenderHTML(rootElement) {
|
|
625
|
+
const style = { ...WRAPPER_STYLE2, ...this.props.style };
|
|
626
|
+
Object.assign(rootElement.style, style);
|
|
627
|
+
const { minZoom, maxZoom } = this.getZoomBounds();
|
|
628
|
+
const clampedZoom = Math.max(minZoom, Math.min(maxZoom, this.currentZoom));
|
|
629
|
+
const stopEventPropagation = (event) => {
|
|
630
|
+
event.stopPropagation();
|
|
631
|
+
if (typeof event.stopImmediatePropagation === "function") {
|
|
632
|
+
event.stopImmediatePropagation();
|
|
633
|
+
}
|
|
634
|
+
};
|
|
635
|
+
const ui = (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [(0, import_jsx_runtime3.jsx)("div", { style: ZOOM_BUTTON_STYLE, children: (0, import_jsx_runtime3.jsx)(LongPressButton, { onClick: () => this.handleZoomDelta(this.step), children: "+" }) }), (0, import_jsx_runtime3.jsx)("div", { style: SLIDER_CONTAINER_STYLE, onPointerDown: stopEventPropagation, onPointerMove: stopEventPropagation, onPointerUp: stopEventPropagation, onMouseDown: stopEventPropagation, onMouseMove: stopEventPropagation, onMouseUp: stopEventPropagation, onClick: stopEventPropagation, onWheel: stopEventPropagation, onTouchStart: stopEventPropagation, onTouchMove: stopEventPropagation, onTouchEnd: stopEventPropagation, children: (0, import_jsx_runtime3.jsx)("input", {
|
|
636
|
+
type: "range",
|
|
637
|
+
value: clampedZoom,
|
|
638
|
+
min: minZoom,
|
|
639
|
+
max: maxZoom,
|
|
640
|
+
step: this.step,
|
|
641
|
+
onInput: (event) => this.handleZoomTo(Number(event.target.value)),
|
|
642
|
+
onChange: (event) => this.handleZoomTo(Number(event.target.value)),
|
|
643
|
+
onPointerDown: stopEventPropagation,
|
|
644
|
+
onPointerMove: stopEventPropagation,
|
|
645
|
+
onPointerUp: stopEventPropagation,
|
|
646
|
+
onMouseDown: stopEventPropagation,
|
|
647
|
+
onMouseMove: stopEventPropagation,
|
|
648
|
+
onMouseUp: stopEventPropagation,
|
|
649
|
+
onClick: stopEventPropagation,
|
|
650
|
+
onWheel: stopEventPropagation,
|
|
651
|
+
onTouchStart: stopEventPropagation,
|
|
652
|
+
onTouchMove: stopEventPropagation,
|
|
653
|
+
onTouchEnd: stopEventPropagation,
|
|
654
|
+
/* @ts-expect-error - non-standard attribute for vertical sliders */
|
|
655
|
+
orient: "vertical",
|
|
656
|
+
style: {
|
|
657
|
+
writingMode: "vertical-lr",
|
|
658
|
+
height: "100px",
|
|
659
|
+
padding: "0",
|
|
660
|
+
margin: "0",
|
|
661
|
+
width: "10px"
|
|
662
|
+
}
|
|
663
|
+
}) }), (0, import_jsx_runtime3.jsx)("div", { style: ZOOM_BUTTON_STYLE, children: (0, import_jsx_runtime3.jsx)(LongPressButton, { onClick: () => this.handleZoomDelta(-this.step), children: "-" }) })] });
|
|
664
|
+
(0, import_preact3.render)(ui, rootElement);
|
|
665
|
+
}
|
|
666
|
+
onViewportChange(viewport) {
|
|
667
|
+
const viewState = this.getViewState(viewport);
|
|
668
|
+
const zoom = Number(viewState == null ? void 0 : viewState.zoom);
|
|
669
|
+
if (Number.isFinite(zoom)) {
|
|
670
|
+
this.currentZoom = zoom;
|
|
671
|
+
}
|
|
672
|
+
if (this.props.minZoom === void 0) {
|
|
673
|
+
const minZoom = Number(viewState == null ? void 0 : viewState.minZoom);
|
|
674
|
+
if (Number.isFinite(minZoom)) {
|
|
675
|
+
this.inferredMinZoom = minZoom;
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
if (this.props.maxZoom === void 0) {
|
|
679
|
+
const maxZoom = Number(viewState == null ? void 0 : viewState.maxZoom);
|
|
680
|
+
if (Number.isFinite(maxZoom)) {
|
|
681
|
+
this.inferredMaxZoom = maxZoom;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
this.updateHTML();
|
|
685
|
+
}
|
|
686
|
+
getZoomBounds() {
|
|
687
|
+
const minZoom = this.props.minZoom ?? this.inferredMinZoom ?? Number.NEGATIVE_INFINITY;
|
|
688
|
+
const maxZoom = this.props.maxZoom ?? this.inferredMaxZoom ?? Number.POSITIVE_INFINITY;
|
|
689
|
+
if (minZoom > maxZoom) {
|
|
690
|
+
return { minZoom: maxZoom, maxZoom: minZoom };
|
|
691
|
+
}
|
|
692
|
+
return {
|
|
693
|
+
minZoom: Number.isFinite(minZoom) ? minZoom : -20,
|
|
694
|
+
maxZoom: Number.isFinite(maxZoom) ? maxZoom : 20
|
|
695
|
+
};
|
|
696
|
+
}
|
|
697
|
+
getTargetViewports() {
|
|
698
|
+
var _a;
|
|
699
|
+
const deck = this.deck;
|
|
700
|
+
if (!deck) {
|
|
701
|
+
return [];
|
|
702
|
+
}
|
|
703
|
+
if (this.viewId) {
|
|
704
|
+
const viewport = (_a = deck.viewManager) == null ? void 0 : _a.getViewport(this.viewId);
|
|
705
|
+
return viewport ? [viewport] : [];
|
|
706
|
+
}
|
|
707
|
+
return deck.getViewports();
|
|
708
|
+
}
|
|
709
|
+
getViewState(viewport) {
|
|
710
|
+
var _a;
|
|
711
|
+
const viewManager = (_a = this.deck) == null ? void 0 : _a.viewManager;
|
|
712
|
+
const viewId = this.viewId || viewport.id;
|
|
713
|
+
if (viewManager) {
|
|
714
|
+
try {
|
|
715
|
+
return { ...viewManager.getViewState(viewId) };
|
|
716
|
+
} catch (err) {
|
|
717
|
+
return { ...viewManager.viewState };
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
return { ...viewport };
|
|
721
|
+
}
|
|
722
|
+
handleZoomDelta(delta) {
|
|
723
|
+
const { minZoom, maxZoom } = this.getZoomBounds();
|
|
724
|
+
for (const viewport of this.getTargetViewports()) {
|
|
725
|
+
const viewState = this.getViewState(viewport);
|
|
726
|
+
const baseZoom = Number(viewState.zoom);
|
|
727
|
+
const current = Number.isFinite(baseZoom) ? baseZoom : this.currentZoom;
|
|
728
|
+
const nextZoom = Math.max(minZoom, Math.min(maxZoom, current + delta));
|
|
729
|
+
this.updateViewState(viewport, { ...viewState, zoom: nextZoom });
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
handleZoomTo(zoom) {
|
|
733
|
+
const { minZoom, maxZoom } = this.getZoomBounds();
|
|
734
|
+
const nextZoom = Math.max(minZoom, Math.min(maxZoom, zoom));
|
|
735
|
+
for (const viewport of this.getTargetViewports()) {
|
|
736
|
+
const viewState = this.getViewState(viewport);
|
|
737
|
+
this.updateViewState(viewport, { ...viewState, zoom: nextZoom });
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
updateViewState(viewport, viewState) {
|
|
741
|
+
if (!this.deck) {
|
|
742
|
+
return;
|
|
743
|
+
}
|
|
744
|
+
const viewId = this.viewId || viewport.id || "default-view";
|
|
745
|
+
this.currentZoom = Number(viewState.zoom) || this.currentZoom;
|
|
746
|
+
this.updateHTML();
|
|
747
|
+
this.deck._onViewStateChange({ viewId, viewState, interactionState: {} });
|
|
748
|
+
}
|
|
749
|
+
};
|
|
750
|
+
var ZoomRangeWidget = _ZoomRangeWidget;
|
|
751
|
+
__publicField(ZoomRangeWidget, "defaultProps", {
|
|
752
|
+
id: "zoom-range",
|
|
753
|
+
viewId: null,
|
|
754
|
+
placement: "top-left",
|
|
755
|
+
minZoom: void 0,
|
|
756
|
+
maxZoom: void 0,
|
|
757
|
+
step: 0.1,
|
|
758
|
+
style: {},
|
|
759
|
+
className: ""
|
|
760
|
+
});
|
|
338
761
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../src/data-driven-tile-3d-layer/data-driven-tile-3d-layer.ts", "../src/data-driven-tile-3d-layer/utils/colorize-tile.ts", "../src/data-driven-tile-3d-layer/utils/filter-tile.ts"],
|
|
4
|
-
"sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {DataDrivenTile3DLayer} from './data-driven-tile-3d-layer/data-driven-tile-3d-layer';\n\nexport {colorizeTile} from './data-driven-tile-3d-layer/utils/colorize-tile';\nexport {filterTile} from './data-driven-tile-3d-layer/utils/filter-tile';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Tile3DLayer, Tile3DLayerProps} from '@deck.gl/geo-layers';\nimport {UpdateParameters, Viewport, DefaultProps} from '@deck.gl/core';\nimport {TILE_TYPE, Tile3D, Tileset3D} from '@loaders.gl/tiles';\nimport {load} from '@loaders.gl/core';\n\nconst defaultProps: DefaultProps<DataDrivenTile3DLayerProps> = {\n colorsByAttribute: null,\n filtersByAttribute: null\n};\n\ntype DataDrivenTile3DLayerProps<DataT = any> = _DataDrivenTile3DLayerProps &\n Tile3DLayerProps<DataT>;\n\ntype _DataDrivenTile3DLayerProps = {\n onTraversalComplete?: (selectedTiles: Tile3D[]) => Tile3D[];\n colorsByAttribute?: ColorsByAttribute | null;\n customizeColors?: (\n tile: Tile3D,\n colorsByAttribute: ColorsByAttribute | null\n ) => Promise<{isColored: boolean; id: string}>;\n filtersByAttribute?: FiltersByAttribute | null;\n filterTile?: (\n tile: Tile3D,\n filtersByAttribute: FiltersByAttribute | null\n ) => Promise<{isFiltered: boolean; id: string}>;\n};\n\nexport type ColorsByAttribute = {\n /** Feature attribute name */\n attributeName: string;\n /** Minimum attribute value */\n minValue: number;\n /** Maximum attribute value */\n maxValue: number;\n /** Minimum color. 3DObject will be colorized with gradient from `minColor to `maxColor` */\n minColor: [number, number, number, number];\n /** Maximum color. 3DObject will be colorized with gradient from `minColor to `maxColor` */\n maxColor: [number, number, number, number];\n /** Colorization mode. `replace` - replace vertex colors with a new colors, `multiply` - multiply vertex colors with new colors */\n mode: string;\n};\n\nexport type FiltersByAttribute = {\n /** Feature attribute name */\n attributeName: string;\n /** Filter value */\n value: number;\n};\n\n// @ts-expect-error call of private method of the base class\nexport class DataDrivenTile3DLayer<\n DataT = any,\n ExtraProps extends Record<string, unknown> = Record<string, unknown>\n> extends Tile3DLayer<DataT, Required<_DataDrivenTile3DLayerProps> & ExtraProps> {\n static layerName = 'DataDrivenTile3DLayer';\n static defaultProps = defaultProps as any;\n\n state: {\n activeViewports: any;\n frameNumber?: number;\n lastUpdatedViewports: {[viewportId: string]: Viewport} | null;\n layerMap: {[layerId: string]: any};\n tileset3d: Tileset3D | null;\n\n colorsByAttribute: ColorsByAttribute | null;\n filtersByAttribute: FiltersByAttribute | null;\n loadingCounter: number;\n } = undefined!;\n\n initializeState() {\n super.initializeState();\n\n this.setState({\n colorsByAttribute: this.props.colorsByAttribute,\n filtersByAttribute: this.props.filtersByAttribute,\n loadingCounter: 0\n });\n }\n\n updateState(params: UpdateParameters<this>): void {\n const {props, oldProps, changeFlags} = params;\n\n if (props.data && props.data !== oldProps.data) {\n this._loadTileset(props.data);\n } else if (props.colorsByAttribute !== oldProps.colorsByAttribute) {\n this.setState({\n colorsByAttribute: props.colorsByAttribute\n });\n this._colorizeTileset();\n } else if (props.filtersByAttribute !== oldProps.filtersByAttribute) {\n this.setState({\n filtersByAttribute: props.filtersByAttribute\n });\n this._filterTileset();\n } else if (changeFlags.viewportChanged) {\n const {activeViewports} = this.state;\n const viewportsNumber = Object.keys(activeViewports).length;\n if (viewportsNumber) {\n if (!this.state.loadingCounter) {\n // @ts-expect-error call of private method of the base class\n super._updateTileset(activeViewports);\n }\n this.state.lastUpdatedViewports = activeViewports;\n this.state.activeViewports = {};\n }\n } else {\n super.updateState(params);\n }\n }\n\n private override async _loadTileset(tilesetUrl) {\n const {loadOptions = {}} = this.props;\n\n // TODO: deprecate `loader` in v9.0\n let loader: any = this.props.loader || this.props.loaders;\n if (Array.isArray(loader)) {\n loader = loader[0];\n }\n\n const options = {loadOptions: {...loadOptions}};\n if (loader.preload) {\n const preloadOptions = await loader.preload(tilesetUrl, loadOptions);\n\n if (preloadOptions.headers) {\n options.loadOptions.fetch = {\n ...options.loadOptions.fetch,\n headers: preloadOptions.headers\n };\n }\n Object.assign(options, preloadOptions);\n }\n const tilesetJson = await load(tilesetUrl, loader, options.loadOptions);\n\n const tileset3d = new Tileset3D(tilesetJson, {\n onTileLoad: this._onTileLoad.bind(this),\n // @ts-expect-error call of private method of the base class\n onTileUnload: super._onTileUnload.bind(this),\n onTileError: this.props.onTileError,\n // New code ------------------\n onTraversalComplete: this._onTraversalComplete.bind(this),\n // ---------------------------\n ...options\n });\n\n this.setState({\n tileset3d,\n layerMap: {}\n });\n\n // @ts-expect-error call of private method of the base class\n super._updateTileset(this.state.activeViewports);\n this.props.onTilesetLoad(tileset3d);\n }\n\n private override _onTileLoad(tileHeader: Tile3D): void {\n const {lastUpdatedViewports} = this.state;\n // New code ------------------\n this._colorizeTiles([tileHeader]);\n this._filterTiles([tileHeader]);\n // ---------------------------\n this.props.onTileLoad(tileHeader);\n // New code ------------------ condition is added\n if (!this.state.colorsByAttribute && !this.state.filtersByAttribute) {\n // ---------------------------\n // @ts-expect-error call of private method of the base class\n super._updateTileset(lastUpdatedViewports);\n this.setNeedsUpdate();\n // New code ------------------\n }\n // ------------------\n }\n\n private _onTraversalComplete(selectedTiles: Tile3D[]): Tile3D[] {\n this._colorizeTiles(selectedTiles);\n this._filterTiles(selectedTiles);\n return this.props.onTraversalComplete\n ? this.props.onTraversalComplete(selectedTiles)\n : selectedTiles;\n }\n\n private _colorizeTiles(tiles: Tile3D[]): void {\n if (this.props.customizeColors && tiles[0]?.type === TILE_TYPE.MESH) {\n const {layerMap, colorsByAttribute} = this.state;\n const promises: Promise<{isColored: boolean; id: string}>[] = [];\n for (const tile of tiles) {\n promises.push(this.props.customizeColors(tile, colorsByAttribute));\n }\n this.setState({\n loadingCounter: this.state.loadingCounter + 1\n });\n Promise.allSettled(promises).then((result) => {\n this.setState({\n loadingCounter: this.state.loadingCounter - 1\n });\n let isTileChanged = false;\n for (const item of result) {\n if (item.status === 'fulfilled' && item.value.isColored) {\n isTileChanged = true;\n delete layerMap[item.value.id];\n }\n }\n if (isTileChanged && !this.state.loadingCounter) {\n // @ts-expect-error call of private method of the base class\n super._updateTileset(this.state.activeViewports);\n this.setNeedsUpdate();\n }\n });\n }\n }\n\n private _colorizeTileset(): void {\n const {tileset3d} = this.state;\n\n if (tileset3d) {\n this._colorizeTiles(tileset3d.selectedTiles);\n }\n }\n\n private _filterTiles(tiles: Tile3D[]): void {\n if (this.props.filterTile && tiles[0]?.type === TILE_TYPE.MESH) {\n const {layerMap, filtersByAttribute} = this.state;\n const promises: Promise<{isFiltered: boolean; id: string}>[] = [];\n for (const tile of tiles) {\n promises.push(this.props.filterTile(tile, filtersByAttribute));\n }\n this.setState({\n loadingCounter: this.state.loadingCounter + 1\n });\n Promise.allSettled(promises).then((result) => {\n this.setState({\n loadingCounter: this.state.loadingCounter - 1\n });\n let isTileChanged = false;\n for (const item of result) {\n if (item.status === 'fulfilled' && item.value.isFiltered) {\n isTileChanged = true;\n delete layerMap[item.value.id];\n }\n }\n if (isTileChanged && !this.state.loadingCounter) {\n // @ts-expect-error call of private method of the base class\n super._updateTileset(this.state.activeViewports);\n this.setNeedsUpdate();\n }\n });\n }\n }\n\n private _filterTileset(): void {\n const {tileset3d} = this.state;\n\n if (tileset3d) {\n this._filterTiles(tileset3d.selectedTiles);\n }\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {customizeColors} from '@loaders.gl/i3s';\nimport {Tile3D} from '@loaders.gl/tiles';\nimport {ColorsByAttribute} from '../data-driven-tile-3d-layer';\n\n/**\n * Update tile colors with the custom colors assigned to the I3S Loader\n * @returns {Promise<{isColored: boolean; id: string}>} Result of the tile colorization - isColored: true/false and tile id\n */\nexport const colorizeTile = async (\n tile: Tile3D,\n colorsByAttribute: ColorsByAttribute | null\n): Promise<{isColored: boolean; id: string}> => {\n const result = {isColored: false, id: tile.id};\n\n if (tile.content.customColors !== colorsByAttribute) {\n if (tile.content && colorsByAttribute) {\n if (!tile.content.originalColorsAttributes) {\n tile.content.originalColorsAttributes = {\n ...tile.content.attributes.colors,\n value: new Uint8Array(tile.content.attributes.colors.value)\n };\n } else if (colorsByAttribute.mode === 'multiply') {\n tile.content.attributes.colors.value.set(tile.content.originalColorsAttributes.value);\n }\n\n tile.content.customColors = colorsByAttribute;\n\n const newColors = await customizeColors(\n tile.content.attributes.colors,\n tile.content.featureIds,\n tile.header.attributeUrls,\n tile.tileset.tileset.fields,\n tile.tileset.tileset.attributeStorageInfo,\n colorsByAttribute,\n (tile.tileset.loadOptions as any).i3s.token\n );\n // Make sure custom colors is not changed during async customizeColors execution\n if (tile.content.customColors === colorsByAttribute) {\n tile.content.attributes.colors = newColors;\n result.isColored = true;\n }\n } else if (tile.content && tile.content.originalColorsAttributes) {\n tile.content.attributes.colors.value = tile.content.originalColorsAttributes.value;\n tile.content.customColors = null;\n result.isColored = true;\n }\n }\n return result;\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Tile3D} from '@loaders.gl/tiles';\nimport {FiltersByAttribute} from '../data-driven-tile-3d-layer';\nimport {AttributeStorageInfo, I3SAttributeLoader} from '@loaders.gl/i3s';\nimport {load} from '@loaders.gl/core';\nimport {TypedArray} from '@loaders.gl/schema';\n\ntype I3STileAttributes = Record<string, string[] | TypedArray | null>;\n\n/**\n * Filter tile indices by attribute value\n * @param tile - tile to be filtered\n * @param filtersByAttribute - custom filters patameters\n * @returns {Promise<{isFiltered: boolean; id: string}>} Result of the tile filtering - isFiltered: true/false and tile id\n */\nexport const filterTile = async (\n tile: Tile3D,\n filtersByAttribute: FiltersByAttribute | null\n): Promise<{isFiltered: boolean; id: string}> => {\n const result = {isFiltered: false, id: tile.id};\n\n if (tile.content.userData?.customFilters !== filtersByAttribute) {\n if (tile.content && filtersByAttribute) {\n if (tile.content.userData?.originalIndices === undefined) {\n tile.content.userData = {};\n // save original indices for filtring cancellation\n tile.content.userData.originalIndices = tile.content.indices;\n }\n tile.content.indices = tile.content.userData?.originalIndices;\n tile.content.userData.customFilters = filtersByAttribute;\n\n const {indices} = await filterTileIndices(\n tile,\n filtersByAttribute,\n (tile.tileset.loadOptions as any).i3s.token\n );\n // Make sure custom filters is not changed during async filtring execution\n if (indices && tile.content.userData.customFilters === filtersByAttribute) {\n tile.content.indices = indices;\n result.isFiltered = true;\n }\n } else if (tile.content && tile.content.userData?.originalIndices !== undefined) {\n tile.content.indices = tile.content.userData.originalIndices;\n tile.content.userData.customFilters = null;\n result.isFiltered = true;\n }\n }\n return result;\n};\n\n// eslint-disable-next-line max-statements, complexity\nasync function filterTileIndices(\n tile: Tile3D,\n filtersByAttribute: FiltersByAttribute,\n token: string\n): Promise<{success: boolean; indices?: Uint32Array}> {\n if (!filtersByAttribute.attributeName.length) {\n return {success: false};\n }\n\n const filterAttributeField = tile.tileset.tileset.fields.find(\n ({name}) => name === filtersByAttribute?.attributeName\n );\n\n if (\n !filterAttributeField ||\n !['esriFieldTypeDouble', 'esriFieldTypeInteger', 'esriFieldTypeSmallInteger'].includes(\n filterAttributeField.type\n )\n ) {\n return {success: false};\n }\n\n const tileFilterAttributeData = await loadFeatureAttributeData(\n filterAttributeField.name,\n tile.header.attributeUrls,\n tile.tileset.tileset.attributeStorageInfo,\n token\n );\n if (!tileFilterAttributeData) {\n return {success: false};\n }\n\n const objectIdField = tile.tileset.tileset.fields.find(({type}) => type === 'esriFieldTypeOID');\n if (!objectIdField) {\n return {success: false};\n }\n\n const objectIdAttributeData = await loadFeatureAttributeData(\n objectIdField.name,\n tile.header.attributeUrls,\n tile.tileset.tileset.attributeStorageInfo,\n token\n );\n if (!objectIdAttributeData) {\n return {success: false};\n }\n\n const attributeValuesMap = {};\n objectIdAttributeData[objectIdField.name]?.forEach((elem, index) => {\n attributeValuesMap[elem] = tileFilterAttributeData[filterAttributeField.name][index];\n });\n\n if (!tile.content.indices) {\n const triangles: number[] = [];\n for (let i = 0; i < tile.content.featureIds.length; i += 3) {\n if (attributeValuesMap[tile.content.featureIds[i]] === filtersByAttribute.value) {\n triangles.push(i);\n }\n }\n\n const indices = new Uint32Array(3 * triangles.length);\n\n triangles.forEach((vertex, index) => {\n indices[index * 3] = vertex;\n indices[index * 3 + 1] = vertex + 1;\n indices[index * 3 + 2] = vertex + 2;\n });\n return {success: true, indices};\n }\n const triangles: number[] = [];\n for (let i = 0; i < tile.content.indices.length; i += 3) {\n if (\n attributeValuesMap[tile.content.featureIds[tile.content.indices[i]]] ===\n filtersByAttribute.value\n ) {\n triangles.push(i);\n }\n }\n\n const indices = new Uint32Array(3 * triangles.length);\n\n triangles.forEach((vertex, index) => {\n indices[index * 3] = tile.content.indices[vertex];\n indices[index * 3 + 1] = tile.content.indices[vertex + 1];\n indices[index * 3 + 2] = tile.content.indices[vertex + 2];\n });\n return {success: true, indices};\n}\n\nasync function loadFeatureAttributeData(\n attributeName: string,\n attributeUrls: string[],\n attributesStorageInfo: AttributeStorageInfo[],\n token?: string\n): Promise<I3STileAttributes | null> {\n const attributeIndex = attributesStorageInfo.findIndex(({name}) => attributeName === name);\n if (attributeIndex === -1) {\n return null;\n }\n const objectIdAttributeUrl = getUrlWithToken(attributeUrls[attributeIndex], token);\n const attributeType = getAttributeValueType(attributesStorageInfo[attributeIndex]);\n const objectIdAttributeData = await load(objectIdAttributeUrl, I3SAttributeLoader, {\n attributeName,\n attributeType\n });\n\n return objectIdAttributeData;\n}\n\nfunction getUrlWithToken(url: string, token: string | null = null): string {\n return token ? `${url}?token=${token}` : url;\n}\n\nfunction getAttributeValueType(attribute: AttributeStorageInfo) {\n // eslint-disable-next-line no-prototype-builtins\n if (attribute.hasOwnProperty('objectIds')) {\n return 'Oid32';\n // eslint-disable-next-line no-prototype-builtins\n } else if (attribute.hasOwnProperty('attributeValues')) {\n return attribute.attributeValues?.valueType;\n }\n return '';\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_i3s", "import_core", "triangles", "indices"]
|
|
3
|
+
"sources": ["../src/index.ts", "../src/data-driven-tile-3d-layer/data-driven-tile-3d-layer.ts", "../src/data-driven-tile-3d-layer/utils/colorize-tile.ts", "../src/data-driven-tile-3d-layer/utils/filter-tile.ts", "../src/widgets/pan-widget.tsx", "../src/widgets/long-press-button.tsx", "../src/widgets/zoom-range-widget.tsx"],
|
|
4
|
+
"sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {DataDrivenTile3DLayer} from './data-driven-tile-3d-layer/data-driven-tile-3d-layer';\n\nexport {colorizeTile} from './data-driven-tile-3d-layer/utils/colorize-tile';\nexport {filterTile} from './data-driven-tile-3d-layer/utils/filter-tile';\n\nexport {PanWidget} from './widgets/pan-widget';\nexport {ZoomRangeWidget} from './widgets/zoom-range-widget';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Tile3DLayer, Tile3DLayerProps} from '@deck.gl/geo-layers';\nimport {UpdateParameters, Viewport, DefaultProps} from '@deck.gl/core';\nimport {TILE_TYPE, Tile3D, Tileset3D} from '@loaders.gl/tiles';\nimport {load} from '@loaders.gl/core';\n\nconst defaultProps: DefaultProps<DataDrivenTile3DLayerProps> = {\n colorsByAttribute: null,\n filtersByAttribute: null\n};\n\ntype DataDrivenTile3DLayerProps<DataT = any> = _DataDrivenTile3DLayerProps &\n Tile3DLayerProps<DataT>;\n\ntype _DataDrivenTile3DLayerProps = {\n onTraversalComplete?: (selectedTiles: Tile3D[]) => Tile3D[];\n colorsByAttribute?: ColorsByAttribute | null;\n customizeColors?: (\n tile: Tile3D,\n colorsByAttribute: ColorsByAttribute | null\n ) => Promise<{isColored: boolean; id: string}>;\n filtersByAttribute?: FiltersByAttribute | null;\n filterTile?: (\n tile: Tile3D,\n filtersByAttribute: FiltersByAttribute | null\n ) => Promise<{isFiltered: boolean; id: string}>;\n};\n\nexport type ColorsByAttribute = {\n /** Feature attribute name */\n attributeName: string;\n /** Minimum attribute value */\n minValue: number;\n /** Maximum attribute value */\n maxValue: number;\n /** Minimum color. 3DObject will be colorized with gradient from `minColor to `maxColor` */\n minColor: [number, number, number, number];\n /** Maximum color. 3DObject will be colorized with gradient from `minColor to `maxColor` */\n maxColor: [number, number, number, number];\n /** Colorization mode. `replace` - replace vertex colors with a new colors, `multiply` - multiply vertex colors with new colors */\n mode: string;\n};\n\nexport type FiltersByAttribute = {\n /** Feature attribute name */\n attributeName: string;\n /** Filter value */\n value: number;\n};\n\n// @ts-expect-error call of private method of the base class\nexport class DataDrivenTile3DLayer<\n DataT = any,\n ExtraProps extends Record<string, unknown> = Record<string, unknown>\n> extends Tile3DLayer<DataT, Required<_DataDrivenTile3DLayerProps> & ExtraProps> {\n static layerName = 'DataDrivenTile3DLayer';\n static defaultProps = defaultProps as any;\n\n state: {\n activeViewports: any;\n frameNumber?: number;\n lastUpdatedViewports: {[viewportId: string]: Viewport} | null;\n layerMap: {[layerId: string]: any};\n tileset3d: Tileset3D | null;\n\n colorsByAttribute: ColorsByAttribute | null;\n filtersByAttribute: FiltersByAttribute | null;\n loadingCounter: number;\n } = undefined!;\n\n initializeState() {\n super.initializeState();\n\n this.setState({\n colorsByAttribute: this.props.colorsByAttribute,\n filtersByAttribute: this.props.filtersByAttribute,\n loadingCounter: 0\n });\n }\n\n updateState(params: UpdateParameters<this>): void {\n const {props, oldProps, changeFlags} = params;\n\n if (props.data && props.data !== oldProps.data) {\n this._loadTileset(props.data);\n } else if (props.colorsByAttribute !== oldProps.colorsByAttribute) {\n this.setState({\n colorsByAttribute: props.colorsByAttribute\n });\n this._colorizeTileset();\n } else if (props.filtersByAttribute !== oldProps.filtersByAttribute) {\n this.setState({\n filtersByAttribute: props.filtersByAttribute\n });\n this._filterTileset();\n } else if (changeFlags.viewportChanged) {\n const {activeViewports} = this.state;\n const viewportsNumber = Object.keys(activeViewports).length;\n if (viewportsNumber) {\n if (!this.state.loadingCounter) {\n // @ts-expect-error call of private method of the base class\n super._updateTileset(activeViewports);\n }\n this.state.lastUpdatedViewports = activeViewports;\n this.state.activeViewports = {};\n }\n } else {\n super.updateState(params);\n }\n }\n\n private override async _loadTileset(tilesetUrl) {\n const {loadOptions = {}} = this.props;\n\n // TODO: deprecate `loader` in v9.0\n let loader: any = this.props.loader || this.props.loaders;\n if (Array.isArray(loader)) {\n loader = loader[0];\n }\n\n const options = {loadOptions: {...loadOptions}};\n if (loader.preload) {\n const preloadOptions = await loader.preload(tilesetUrl, loadOptions);\n\n if (preloadOptions.headers) {\n options.loadOptions.fetch = {\n ...options.loadOptions.fetch,\n headers: preloadOptions.headers\n };\n }\n Object.assign(options, preloadOptions);\n }\n const tilesetJson = await load(tilesetUrl, loader, options.loadOptions);\n\n const tileset3d = new Tileset3D(tilesetJson, {\n onTileLoad: this._onTileLoad.bind(this),\n // @ts-expect-error call of private method of the base class\n onTileUnload: super._onTileUnload.bind(this),\n onTileError: this.props.onTileError,\n // New code ------------------\n onTraversalComplete: this._onTraversalComplete.bind(this),\n // ---------------------------\n ...options\n });\n\n this.setState({\n tileset3d,\n layerMap: {}\n });\n\n // @ts-expect-error call of private method of the base class\n super._updateTileset(this.state.activeViewports);\n this.props.onTilesetLoad(tileset3d);\n }\n\n private override _onTileLoad(tileHeader: Tile3D): void {\n const {lastUpdatedViewports} = this.state;\n // New code ------------------\n this._colorizeTiles([tileHeader]);\n this._filterTiles([tileHeader]);\n // ---------------------------\n this.props.onTileLoad(tileHeader);\n // New code ------------------ condition is added\n if (!this.state.colorsByAttribute && !this.state.filtersByAttribute) {\n // ---------------------------\n // @ts-expect-error call of private method of the base class\n super._updateTileset(lastUpdatedViewports);\n this.setNeedsUpdate();\n // New code ------------------\n }\n // ------------------\n }\n\n private _onTraversalComplete(selectedTiles: Tile3D[]): Tile3D[] {\n this._colorizeTiles(selectedTiles);\n this._filterTiles(selectedTiles);\n return this.props.onTraversalComplete\n ? this.props.onTraversalComplete(selectedTiles)\n : selectedTiles;\n }\n\n private _colorizeTiles(tiles: Tile3D[]): void {\n if (this.props.customizeColors && tiles[0]?.type === TILE_TYPE.MESH) {\n const {layerMap, colorsByAttribute} = this.state;\n const promises: Promise<{isColored: boolean; id: string}>[] = [];\n for (const tile of tiles) {\n promises.push(this.props.customizeColors(tile, colorsByAttribute));\n }\n this.setState({\n loadingCounter: this.state.loadingCounter + 1\n });\n Promise.allSettled(promises).then((result) => {\n this.setState({\n loadingCounter: this.state.loadingCounter - 1\n });\n let isTileChanged = false;\n for (const item of result) {\n if (item.status === 'fulfilled' && item.value.isColored) {\n isTileChanged = true;\n delete layerMap[item.value.id];\n }\n }\n if (isTileChanged && !this.state.loadingCounter) {\n // @ts-expect-error call of private method of the base class\n super._updateTileset(this.state.activeViewports);\n this.setNeedsUpdate();\n }\n });\n }\n }\n\n private _colorizeTileset(): void {\n const {tileset3d} = this.state;\n\n if (tileset3d) {\n this._colorizeTiles(tileset3d.selectedTiles);\n }\n }\n\n private _filterTiles(tiles: Tile3D[]): void {\n if (this.props.filterTile && tiles[0]?.type === TILE_TYPE.MESH) {\n const {layerMap, filtersByAttribute} = this.state;\n const promises: Promise<{isFiltered: boolean; id: string}>[] = [];\n for (const tile of tiles) {\n promises.push(this.props.filterTile(tile, filtersByAttribute));\n }\n this.setState({\n loadingCounter: this.state.loadingCounter + 1\n });\n Promise.allSettled(promises).then((result) => {\n this.setState({\n loadingCounter: this.state.loadingCounter - 1\n });\n let isTileChanged = false;\n for (const item of result) {\n if (item.status === 'fulfilled' && item.value.isFiltered) {\n isTileChanged = true;\n delete layerMap[item.value.id];\n }\n }\n if (isTileChanged && !this.state.loadingCounter) {\n // @ts-expect-error call of private method of the base class\n super._updateTileset(this.state.activeViewports);\n this.setNeedsUpdate();\n }\n });\n }\n }\n\n private _filterTileset(): void {\n const {tileset3d} = this.state;\n\n if (tileset3d) {\n this._filterTiles(tileset3d.selectedTiles);\n }\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {customizeColors} from '@loaders.gl/i3s';\nimport {Tile3D} from '@loaders.gl/tiles';\nimport {ColorsByAttribute} from '../data-driven-tile-3d-layer';\n\n/**\n * Update tile colors with the custom colors assigned to the I3S Loader\n * @returns {Promise<{isColored: boolean; id: string}>} Result of the tile colorization - isColored: true/false and tile id\n */\nexport const colorizeTile = async (\n tile: Tile3D,\n colorsByAttribute: ColorsByAttribute | null\n): Promise<{isColored: boolean; id: string}> => {\n const result = {isColored: false, id: tile.id};\n\n if (tile.content.customColors !== colorsByAttribute) {\n if (tile.content && colorsByAttribute) {\n if (!tile.content.originalColorsAttributes) {\n tile.content.originalColorsAttributes = {\n ...tile.content.attributes.colors,\n value: new Uint8Array(tile.content.attributes.colors.value)\n };\n } else if (colorsByAttribute.mode === 'multiply') {\n tile.content.attributes.colors.value.set(tile.content.originalColorsAttributes.value);\n }\n\n tile.content.customColors = colorsByAttribute;\n\n const newColors = await customizeColors(\n tile.content.attributes.colors,\n tile.content.featureIds,\n tile.header.attributeUrls,\n tile.tileset.tileset.fields,\n tile.tileset.tileset.attributeStorageInfo,\n colorsByAttribute,\n (tile.tileset.loadOptions as any).i3s.token\n );\n // Make sure custom colors is not changed during async customizeColors execution\n if (tile.content.customColors === colorsByAttribute) {\n tile.content.attributes.colors = newColors;\n result.isColored = true;\n }\n } else if (tile.content && tile.content.originalColorsAttributes) {\n tile.content.attributes.colors.value = tile.content.originalColorsAttributes.value;\n tile.content.customColors = null;\n result.isColored = true;\n }\n }\n return result;\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Tile3D} from '@loaders.gl/tiles';\nimport {FiltersByAttribute} from '../data-driven-tile-3d-layer';\nimport {AttributeStorageInfo, I3SAttributeLoader} from '@loaders.gl/i3s';\nimport {load} from '@loaders.gl/core';\nimport {TypedArray} from '@loaders.gl/schema';\n\ntype I3STileAttributes = Record<string, string[] | TypedArray | null>;\n\n/**\n * Filter tile indices by attribute value\n * @param tile - tile to be filtered\n * @param filtersByAttribute - custom filters patameters\n * @returns {Promise<{isFiltered: boolean; id: string}>} Result of the tile filtering - isFiltered: true/false and tile id\n */\nexport const filterTile = async (\n tile: Tile3D,\n filtersByAttribute: FiltersByAttribute | null\n): Promise<{isFiltered: boolean; id: string}> => {\n const result = {isFiltered: false, id: tile.id};\n\n if (tile.content.userData?.customFilters !== filtersByAttribute) {\n if (tile.content && filtersByAttribute) {\n if (tile.content.userData?.originalIndices === undefined) {\n tile.content.userData = {};\n // save original indices for filtring cancellation\n tile.content.userData.originalIndices = tile.content.indices;\n }\n tile.content.indices = tile.content.userData?.originalIndices;\n tile.content.userData.customFilters = filtersByAttribute;\n\n const {indices} = await filterTileIndices(\n tile,\n filtersByAttribute,\n (tile.tileset.loadOptions as any).i3s.token\n );\n // Make sure custom filters is not changed during async filtring execution\n if (indices && tile.content.userData.customFilters === filtersByAttribute) {\n tile.content.indices = indices;\n result.isFiltered = true;\n }\n } else if (tile.content && tile.content.userData?.originalIndices !== undefined) {\n tile.content.indices = tile.content.userData.originalIndices;\n tile.content.userData.customFilters = null;\n result.isFiltered = true;\n }\n }\n return result;\n};\n\n// eslint-disable-next-line max-statements, complexity\nasync function filterTileIndices(\n tile: Tile3D,\n filtersByAttribute: FiltersByAttribute,\n token: string\n): Promise<{success: boolean; indices?: Uint32Array}> {\n if (!filtersByAttribute.attributeName.length) {\n return {success: false};\n }\n\n const filterAttributeField = tile.tileset.tileset.fields.find(\n ({name}) => name === filtersByAttribute?.attributeName\n );\n\n if (\n !filterAttributeField ||\n !['esriFieldTypeDouble', 'esriFieldTypeInteger', 'esriFieldTypeSmallInteger'].includes(\n filterAttributeField.type\n )\n ) {\n return {success: false};\n }\n\n const tileFilterAttributeData = await loadFeatureAttributeData(\n filterAttributeField.name,\n tile.header.attributeUrls,\n tile.tileset.tileset.attributeStorageInfo,\n token\n );\n if (!tileFilterAttributeData) {\n return {success: false};\n }\n\n const objectIdField = tile.tileset.tileset.fields.find(({type}) => type === 'esriFieldTypeOID');\n if (!objectIdField) {\n return {success: false};\n }\n\n const objectIdAttributeData = await loadFeatureAttributeData(\n objectIdField.name,\n tile.header.attributeUrls,\n tile.tileset.tileset.attributeStorageInfo,\n token\n );\n if (!objectIdAttributeData) {\n return {success: false};\n }\n\n const attributeValuesMap = {};\n objectIdAttributeData[objectIdField.name]?.forEach((elem, index) => {\n attributeValuesMap[elem] = tileFilterAttributeData[filterAttributeField.name][index];\n });\n\n if (!tile.content.indices) {\n const triangles: number[] = [];\n for (let i = 0; i < tile.content.featureIds.length; i += 3) {\n if (attributeValuesMap[tile.content.featureIds[i]] === filtersByAttribute.value) {\n triangles.push(i);\n }\n }\n\n const indices = new Uint32Array(3 * triangles.length);\n\n triangles.forEach((vertex, index) => {\n indices[index * 3] = vertex;\n indices[index * 3 + 1] = vertex + 1;\n indices[index * 3 + 2] = vertex + 2;\n });\n return {success: true, indices};\n }\n const triangles: number[] = [];\n for (let i = 0; i < tile.content.indices.length; i += 3) {\n if (\n attributeValuesMap[tile.content.featureIds[tile.content.indices[i]]] ===\n filtersByAttribute.value\n ) {\n triangles.push(i);\n }\n }\n\n const indices = new Uint32Array(3 * triangles.length);\n\n triangles.forEach((vertex, index) => {\n indices[index * 3] = tile.content.indices[vertex];\n indices[index * 3 + 1] = tile.content.indices[vertex + 1];\n indices[index * 3 + 2] = tile.content.indices[vertex + 2];\n });\n return {success: true, indices};\n}\n\nasync function loadFeatureAttributeData(\n attributeName: string,\n attributeUrls: string[],\n attributesStorageInfo: AttributeStorageInfo[],\n token?: string\n): Promise<I3STileAttributes | null> {\n const attributeIndex = attributesStorageInfo.findIndex(({name}) => attributeName === name);\n if (attributeIndex === -1) {\n return null;\n }\n const objectIdAttributeUrl = getUrlWithToken(attributeUrls[attributeIndex], token);\n const attributeType = getAttributeValueType(attributesStorageInfo[attributeIndex]);\n const objectIdAttributeData = await load(objectIdAttributeUrl, I3SAttributeLoader, {\n attributeName,\n attributeType\n });\n\n return objectIdAttributeData;\n}\n\nfunction getUrlWithToken(url: string, token: string | null = null): string {\n return token ? `${url}?token=${token}` : url;\n}\n\nfunction getAttributeValueType(attribute: AttributeStorageInfo) {\n // eslint-disable-next-line no-prototype-builtins\n if (attribute.hasOwnProperty('objectIds')) {\n return 'Oid32';\n // eslint-disable-next-line no-prototype-builtins\n } else if (attribute.hasOwnProperty('attributeValues')) {\n return attribute.attributeValues?.valueType;\n }\n return '';\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {render} from 'preact';\nimport type {JSX} from 'preact';\nimport {LongPressButton} from './long-press-button';\nimport {\n Widget,\n type Deck,\n type Viewport,\n type WidgetPlacement,\n type WidgetProps\n} from '@deck.gl/core';\n\nexport type PanWidgetProps = WidgetProps & {\n viewId?: string | null;\n placement?: WidgetPlacement;\n /** Amount in screen pixels to pan by when a button is pressed. */\n step?: number;\n};\n\nconst WRAPPER_STYLE: Partial<CSSStyleDeclaration> = {\n position: 'absolute',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n zIndex: '99',\n userSelect: 'none'\n};\n\nconst NAVIGATION_CONTAINER_STYLE: JSX.CSSProperties = {\n position: 'relative',\n background: '#f7f7f7',\n borderRadius: '23px',\n border: '0.5px solid #eaeaea',\n boxShadow: 'inset 11px 11px 5px -7px rgba(230, 230, 230, 0.49)',\n height: '46px',\n width: '46px'\n};\n\nconst NAVIGATION_BUTTON_STYLE: JSX.CSSProperties = {\n color: '#848484',\n cursor: 'pointer',\n position: 'absolute',\n pointerEvents: 'auto'\n};\n\nexport class PanWidget extends Widget<PanWidgetProps> {\n static override defaultProps = {\n id: 'pan',\n viewId: null,\n placement: 'top-left',\n step: 48,\n style: {},\n className: ''\n } satisfies Required<WidgetProps> & Required<Pick<PanWidgetProps, 'step'>> & PanWidgetProps;\n\n placement: WidgetPlacement = 'top-left';\n className = 'deck-widget-pan';\n deck?: Deck | null = null;\n step: number;\n\n constructor(props: PanWidgetProps = {}) {\n super({...PanWidget.defaultProps, ...props});\n this.viewId = props.viewId ?? null;\n this.placement = props.placement ?? 'top-left';\n this.step = props.step ?? PanWidget.defaultProps.step;\n }\n\n override setProps(props: Partial<PanWidgetProps>): void {\n if (props.viewId !== undefined) {\n this.viewId = props.viewId;\n }\n if (props.placement !== undefined) {\n this.placement = props.placement;\n }\n if (props.step !== undefined) {\n this.step = props.step;\n }\n super.setProps(props);\n }\n\n override onAdd({deck, viewId}: {deck: Deck; viewId: string | null}): void {\n this.deck = deck;\n if (this.viewId === undefined) {\n this.viewId = viewId;\n }\n }\n\n override onRemove(): void {\n this.deck = null;\n }\n\n override onRenderHTML(rootElement: HTMLElement): void {\n const style = {...WRAPPER_STYLE, ...this.props.style};\n Object.assign(rootElement.style, style);\n\n const buttons = [\n {top: -2, left: 14, onClick: () => this.handlePan(0, this.step), label: '\u25B2', key: 'up'},\n {top: 12, left: 0, onClick: () => this.handlePan(this.step, 0), label: '\u25C0', key: 'left'},\n {top: 12, left: 28, onClick: () => this.handlePan(-this.step, 0), label: '\u25B6', key: 'right'},\n {top: 25, left: 14, onClick: () => this.handlePan(0, -this.step), label: '\u25BC', key: 'down'}\n ] as const;\n\n const ui = (\n <div style={NAVIGATION_CONTAINER_STYLE}>\n {buttons.map((button) => (\n <div\n key={button.key}\n style={{\n ...NAVIGATION_BUTTON_STYLE,\n top: `${button.top}px`,\n left: `${button.left}px`\n } as JSX.CSSProperties}\n >\n <LongPressButton onClick={button.onClick}>{button.label}</LongPressButton>\n </div>\n ))}\n </div>\n );\n\n render(ui, rootElement);\n }\n\n private getTargetViewports(): Viewport[] {\n const deck = this.deck as (Deck & {viewManager?: any}) | null;\n if (!deck) {\n return [];\n }\n\n if (this.viewId) {\n const viewport = deck.viewManager?.getViewport(this.viewId);\n return viewport ? [viewport] : [];\n }\n return deck.getViewports();\n }\n\n private getViewState(viewport: Viewport): any {\n const viewManager = (this.deck as (Deck & {viewManager?: any}) | null)?.viewManager;\n const viewId = this.viewId || viewport.id;\n if (viewManager) {\n try {\n return {...viewManager.getViewState(viewId)};\n } catch (err) {\n return {...(viewManager.viewState as any)};\n }\n }\n return {...(viewport as any)};\n }\n\n private handlePan(deltaX: number, deltaY: number) {\n if (!this.deck) {\n return;\n }\n\n const viewports = this.getTargetViewports();\n for (const viewport of viewports) {\n const center = viewport.unproject([viewport.width / 2, viewport.height / 2]);\n if (!center) {\n continue;\n }\n\n const nextPixel: [number, number] = [\n viewport.width / 2 + deltaX,\n viewport.height / 2 + deltaY\n ];\n\n const viewState = this.getViewState(viewport);\n const panUpdate = viewport.panByPosition(center, nextPixel);\n const nextViewState = {...viewState, ...panUpdate};\n const viewId = this.viewId || viewport.id || 'default-view';\n\n // @ts-ignore Using private method until a public alternative is available\n this.deck._onViewStateChange({viewId, viewState: nextViewState, interactionState: {}});\n }\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Component, type ComponentChildren} from 'preact';\n\nconst REPEAT_DELAY_MS = 300;\nconst REPEAT_INTERVAL_MS = 100;\n\nexport type LongPressButtonProps = {\n onClick: () => void;\n children: ComponentChildren;\n};\n\nexport class LongPressButton extends Component<LongPressButtonProps> {\n buttonPressTimer: ReturnType<typeof setTimeout> | null = null;\n usingPointerEvents = false;\n\n private stopEvent(event: Event) {\n event.stopPropagation();\n if (typeof (event as any).stopImmediatePropagation === 'function') {\n (event as any).stopImmediatePropagation();\n }\n if (typeof (event as any).preventDefault === 'function') {\n (event as any).preventDefault();\n }\n }\n\n private repeat = () => {\n if (this.buttonPressTimer) {\n this.props.onClick();\n this.buttonPressTimer = setTimeout(this.repeat, REPEAT_INTERVAL_MS);\n }\n };\n\n private startPress(event: Event) {\n this.stopEvent(event);\n this.props.onClick();\n this.buttonPressTimer = setTimeout(this.repeat, REPEAT_DELAY_MS);\n }\n\n private endPress(event?: Event) {\n if (event) {\n this.stopEvent(event);\n }\n if (this.buttonPressTimer) {\n clearTimeout(this.buttonPressTimer);\n }\n this.buttonPressTimer = null;\n }\n\n private handlePointerDown = (event: PointerEvent) => {\n this.usingPointerEvents = true;\n (event.currentTarget as HTMLElement | null)?.setPointerCapture?.(event.pointerId);\n this.startPress(event);\n };\n\n private handlePointerUp = (event: PointerEvent) => {\n (event.currentTarget as HTMLElement | null)?.releasePointerCapture?.(event.pointerId);\n this.endPress(event);\n };\n\n private handlePointerCancel = (event: PointerEvent) => {\n (event.currentTarget as HTMLElement | null)?.releasePointerCapture?.(event.pointerId);\n this.endPress(event);\n };\n\n private handleMouseDown = (event: MouseEvent) => {\n if (this.usingPointerEvents) {\n return;\n }\n this.startPress(event);\n document.addEventListener('mouseup', this.handleMouseUp, {once: true});\n };\n\n private handleMouseUp = (event: MouseEvent) => {\n if (this.usingPointerEvents) {\n return;\n }\n this.endPress(event);\n };\n\n private handleTouchStart = (event: TouchEvent) => {\n if (this.usingPointerEvents) {\n return;\n }\n this.startPress(event);\n document.addEventListener('touchend', this.handleTouchEnd, {once: true});\n document.addEventListener('touchcancel', this.handleTouchEnd, {once: true});\n };\n\n private handleTouchEnd = (event: TouchEvent) => {\n if (this.usingPointerEvents) {\n return;\n }\n this.endPress(event);\n };\n\n render() {\n return (\n <div className=\"deck-widget-button\">\n <div\n style={{pointerEvents: 'auto'}}\n onPointerDown={this.handlePointerDown}\n onPointerUp={this.handlePointerUp}\n onPointerCancel={this.handlePointerCancel}\n onPointerMove={(event) => this.stopEvent(event)}\n onPointerLeave={this.handlePointerCancel}\n onPointerOut={this.handlePointerCancel}\n onMouseDown={this.handleMouseDown}\n onMouseUp={this.handleMouseUp}\n onMouseMove={(event) => this.stopEvent(event)}\n onTouchStart={this.handleTouchStart}\n onTouchEnd={this.handleTouchEnd}\n onTouchMove={(event) => this.stopEvent(event)}\n onContextMenu={(event) => event.preventDefault()}\n onWheel={(event) => this.stopEvent(event)}\n onClick={(event) => this.stopEvent(event)}\n >\n {this.props.children}\n </div>\n </div>\n );\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {render} from 'preact';\nimport type {JSX} from 'preact';\nimport {LongPressButton} from './long-press-button';\nimport {\n Widget,\n type Deck,\n type Viewport,\n type WidgetPlacement,\n type WidgetProps\n} from '@deck.gl/core';\n\nexport type ZoomRangeWidgetProps = WidgetProps & {\n viewId?: string | null;\n placement?: WidgetPlacement;\n minZoom?: number;\n maxZoom?: number;\n step?: number;\n};\n\nconst WRAPPER_STYLE: Partial<CSSStyleDeclaration> = {\n position: 'absolute',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n background: '#f7f7f7',\n border: '0.5px solid #eaeaea',\n marginTop: '6px',\n padding: '2px 0',\n width: '18px',\n userSelect: 'none',\n pointerEvents: 'auto'\n};\n\nconst ZOOM_BUTTON_STYLE: JSX.CSSProperties = {\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500',\n margin: '-4px'\n};\n\nconst SLIDER_CONTAINER_STYLE: JSX.CSSProperties = {\n display: 'inline-block',\n height: '100px',\n padding: '0',\n width: '10px'\n};\n\nexport class ZoomRangeWidget extends Widget<ZoomRangeWidgetProps> {\n static override defaultProps = {\n id: 'zoom-range',\n viewId: null,\n placement: 'top-left',\n minZoom: undefined,\n maxZoom: undefined,\n step: 0.1,\n style: {},\n className: ''\n } satisfies Required<WidgetProps> & Required<Pick<ZoomRangeWidgetProps, 'step'>> & ZoomRangeWidgetProps;\n\n placement: WidgetPlacement = 'top-left';\n className = 'deck-widget-zoom-range';\n deck?: Deck | null = null;\n step: number;\n currentZoom = 0;\n inferredMinZoom: number | null = null;\n inferredMaxZoom: number | null = null;\n\n constructor(props: ZoomRangeWidgetProps = {}) {\n super({...ZoomRangeWidget.defaultProps, ...props});\n this.viewId = props.viewId ?? null;\n this.placement = props.placement ?? 'top-left';\n this.step = props.step ?? ZoomRangeWidget.defaultProps.step;\n }\n\n override setProps(props: Partial<ZoomRangeWidgetProps>): void {\n if (props.viewId !== undefined) {\n this.viewId = props.viewId;\n }\n if (props.placement !== undefined) {\n this.placement = props.placement;\n }\n if (props.step !== undefined) {\n this.step = props.step;\n }\n super.setProps(props);\n }\n\n override onAdd({deck, viewId}: {deck: Deck; viewId: string | null}): void {\n this.deck = deck;\n if (this.viewId === undefined) {\n this.viewId = viewId;\n }\n }\n\n override onRemove(): void {\n this.deck = null;\n }\n\n override onRenderHTML(rootElement: HTMLElement): void {\n const style = {...WRAPPER_STYLE, ...this.props.style};\n Object.assign(rootElement.style, style);\n\n const {minZoom, maxZoom} = this.getZoomBounds();\n const clampedZoom = Math.max(minZoom, Math.min(maxZoom, this.currentZoom));\n\n const stopEventPropagation = (event: Event) => {\n event.stopPropagation();\n if (typeof (event as any).stopImmediatePropagation === 'function') {\n (event as any).stopImmediatePropagation();\n }\n };\n\n const ui = (\n <>\n <div style={ZOOM_BUTTON_STYLE}>\n <LongPressButton onClick={() => this.handleZoomDelta(this.step)}>{'+'}</LongPressButton>\n </div>\n <div\n style={SLIDER_CONTAINER_STYLE}\n onPointerDown={stopEventPropagation}\n onPointerMove={stopEventPropagation}\n onPointerUp={stopEventPropagation}\n onMouseDown={stopEventPropagation}\n onMouseMove={stopEventPropagation}\n onMouseUp={stopEventPropagation}\n onClick={stopEventPropagation}\n onWheel={stopEventPropagation}\n onTouchStart={stopEventPropagation}\n onTouchMove={stopEventPropagation}\n onTouchEnd={stopEventPropagation}\n >\n <input\n type=\"range\"\n value={clampedZoom}\n min={minZoom}\n max={maxZoom}\n step={this.step}\n onInput={(event) =>\n this.handleZoomTo(Number((event.target as HTMLInputElement).value))\n }\n onChange={(event) =>\n this.handleZoomTo(Number((event.target as HTMLInputElement).value))\n }\n onPointerDown={stopEventPropagation}\n onPointerMove={stopEventPropagation}\n onPointerUp={stopEventPropagation}\n onMouseDown={stopEventPropagation}\n onMouseMove={stopEventPropagation}\n onMouseUp={stopEventPropagation}\n onClick={stopEventPropagation}\n onWheel={stopEventPropagation}\n onTouchStart={stopEventPropagation}\n onTouchMove={stopEventPropagation}\n onTouchEnd={stopEventPropagation}\n /* @ts-expect-error - non-standard attribute for vertical sliders */\n orient=\"vertical\"\n style={\n {\n writingMode: 'vertical-lr',\n height: '100px',\n padding: '0',\n margin: '0',\n width: '10px'\n } as JSX.CSSProperties\n }\n />\n </div>\n <div style={ZOOM_BUTTON_STYLE}>\n <LongPressButton onClick={() => this.handleZoomDelta(-this.step)}>{'-'}</LongPressButton>\n </div>\n </>\n );\n\n render(ui, rootElement);\n }\n\n override onViewportChange(viewport: Viewport): void {\n const viewState = this.getViewState(viewport);\n const zoom = Number(viewState?.zoom);\n if (Number.isFinite(zoom)) {\n this.currentZoom = zoom;\n }\n\n if (this.props.minZoom === undefined) {\n const minZoom = Number(viewState?.minZoom);\n if (Number.isFinite(minZoom)) {\n this.inferredMinZoom = minZoom;\n }\n }\n\n if (this.props.maxZoom === undefined) {\n const maxZoom = Number(viewState?.maxZoom);\n if (Number.isFinite(maxZoom)) {\n this.inferredMaxZoom = maxZoom;\n }\n }\n\n this.updateHTML();\n }\n\n private getZoomBounds(): {minZoom: number; maxZoom: number} {\n const minZoom =\n this.props.minZoom ?? this.inferredMinZoom ?? Number.NEGATIVE_INFINITY;\n const maxZoom =\n this.props.maxZoom ?? this.inferredMaxZoom ?? Number.POSITIVE_INFINITY;\n\n if (minZoom > maxZoom) {\n return {minZoom: maxZoom, maxZoom: minZoom};\n }\n return {\n minZoom: Number.isFinite(minZoom) ? minZoom : -20,\n maxZoom: Number.isFinite(maxZoom) ? maxZoom : 20\n };\n }\n\n private getTargetViewports(): Viewport[] {\n const deck = this.deck as (Deck & {viewManager?: any}) | null;\n if (!deck) {\n return [];\n }\n if (this.viewId) {\n const viewport = deck.viewManager?.getViewport(this.viewId);\n return viewport ? [viewport] : [];\n }\n return deck.getViewports();\n }\n\n private getViewState(viewport: Viewport): any {\n const viewManager = (this.deck as (Deck & {viewManager?: any}) | null)?.viewManager;\n const viewId = this.viewId || viewport.id;\n if (viewManager) {\n try {\n return {...viewManager.getViewState(viewId)};\n } catch (err) {\n return {...(viewManager.viewState as any)};\n }\n }\n return {...(viewport as any)};\n }\n\n private handleZoomDelta(delta: number) {\n const {minZoom, maxZoom} = this.getZoomBounds();\n\n for (const viewport of this.getTargetViewports()) {\n const viewState = this.getViewState(viewport);\n const baseZoom = Number(viewState.zoom);\n const current = Number.isFinite(baseZoom) ? baseZoom : this.currentZoom;\n const nextZoom = Math.max(minZoom, Math.min(maxZoom, current + delta));\n this.updateViewState(viewport, {...viewState, zoom: nextZoom});\n }\n }\n\n private handleZoomTo(zoom: number) {\n const {minZoom, maxZoom} = this.getZoomBounds();\n const nextZoom = Math.max(minZoom, Math.min(maxZoom, zoom));\n\n for (const viewport of this.getTargetViewports()) {\n const viewState = this.getViewState(viewport);\n this.updateViewState(viewport, {...viewState, zoom: nextZoom});\n }\n }\n\n private updateViewState(viewport: Viewport, viewState: any) {\n if (!this.deck) {\n return;\n }\n\n const viewId = this.viewId || viewport.id || 'default-view';\n this.currentZoom = Number(viewState.zoom) || this.currentZoom;\n this.updateHTML();\n\n // @ts-ignore Using private method until a public alternative is available\n this.deck._onViewStateChange({viewId, viewState, interactionState: {}});\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;ACIA,wBAA4C;AAE5C,mBAA2C;AAC3C,kBAAmB;AAEnB,IAAM,eAAyD;EAC7D,mBAAmB;EACnB,oBAAoB;;AA2ChB,IAAO,wBAAP,cAGI,8BAAsE;EAI9E,QAUI;EAEJ,kBAAe;AACb,UAAM,gBAAe;AAErB,SAAK,SAAS;MACZ,mBAAmB,KAAK,MAAM;MAC9B,oBAAoB,KAAK,MAAM;MAC/B,gBAAgB;KACjB;EACH;EAEA,YAAY,QAA8B;AACxC,UAAM,EAAC,OAAO,UAAU,YAAW,IAAI;AAEvC,QAAI,MAAM,QAAQ,MAAM,SAAS,SAAS,MAAM;AAC9C,WAAK,aAAa,MAAM,IAAI;IAC9B,WAAW,MAAM,sBAAsB,SAAS,mBAAmB;AACjE,WAAK,SAAS;QACZ,mBAAmB,MAAM;OAC1B;AACD,WAAK,iBAAgB;IACvB,WAAW,MAAM,uBAAuB,SAAS,oBAAoB;AACnE,WAAK,SAAS;QACZ,oBAAoB,MAAM;OAC3B;AACD,WAAK,eAAc;IACrB,WAAW,YAAY,iBAAiB;AACtC,YAAM,EAAC,gBAAe,IAAI,KAAK;AAC/B,YAAM,kBAAkB,OAAO,KAAK,eAAe,EAAE;AACrD,UAAI,iBAAiB;AACnB,YAAI,CAAC,KAAK,MAAM,gBAAgB;AAE9B,gBAAM,eAAe,eAAe;QACtC;AACA,aAAK,MAAM,uBAAuB;AAClC,aAAK,MAAM,kBAAkB,CAAA;MAC/B;IACF,OAAO;AACL,YAAM,YAAY,MAAM;IAC1B;EACF;EAEiB,MAAM,aAAa,YAAU;AAC5C,UAAM,EAAC,cAAc,CAAA,EAAE,IAAI,KAAK;AAGhC,QAAI,SAAc,KAAK,MAAM,UAAU,KAAK,MAAM;AAClD,QAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,eAAS,OAAO,CAAC;IACnB;AAEA,UAAM,UAAU,EAAC,aAAa,EAAC,GAAG,YAAW,EAAC;AAC9C,QAAI,OAAO,SAAS;AAClB,YAAM,iBAAiB,MAAM,OAAO,QAAQ,YAAY,WAAW;AAEnE,UAAI,eAAe,SAAS;AAC1B,gBAAQ,YAAY,QAAQ;UAC1B,GAAG,QAAQ,YAAY;UACvB,SAAS,eAAe;;MAE5B;AACA,aAAO,OAAO,SAAS,cAAc;IACvC;AACA,UAAM,cAAc,UAAM,kBAAK,YAAY,QAAQ,QAAQ,WAAW;AAEtE,UAAM,YAAY,IAAI,uBAAU,aAAa;MAC3C,YAAY,KAAK,YAAY,KAAK,IAAI;;MAEtC,cAAc,MAAM,cAAc,KAAK,IAAI;MAC3C,aAAa,KAAK,MAAM;;MAExB,qBAAqB,KAAK,qBAAqB,KAAK,IAAI;;MAExD,GAAG;KACJ;AAED,SAAK,SAAS;MACZ;MACA,UAAU,CAAA;KACX;AAGD,UAAM,eAAe,KAAK,MAAM,eAAe;AAC/C,SAAK,MAAM,cAAc,SAAS;EACpC;EAEiB,YAAY,YAAkB;AAC7C,UAAM,EAAC,qBAAoB,IAAI,KAAK;AAEpC,SAAK,eAAe,CAAC,UAAU,CAAC;AAChC,SAAK,aAAa,CAAC,UAAU,CAAC;AAE9B,SAAK,MAAM,WAAW,UAAU;AAEhC,QAAI,CAAC,KAAK,MAAM,qBAAqB,CAAC,KAAK,MAAM,oBAAoB;AAGnE,YAAM,eAAe,oBAAoB;AACzC,WAAK,eAAc;IAErB;EAEF;EAEQ,qBAAqB,eAAuB;AAClD,SAAK,eAAe,aAAa;AACjC,SAAK,aAAa,aAAa;AAC/B,WAAO,KAAK,MAAM,sBACd,KAAK,MAAM,oBAAoB,aAAa,IAC5C;EACN;EAEQ,eAAe,OAAe;AAxLxC;AAyLI,QAAI,KAAK,MAAM,qBAAmB,WAAM,CAAC,MAAP,mBAAU,UAAS,uBAAU,MAAM;AACnE,YAAM,EAAC,UAAU,kBAAiB,IAAI,KAAK;AAC3C,YAAM,WAAwD,CAAA;AAC9D,iBAAW,QAAQ,OAAO;AACxB,iBAAS,KAAK,KAAK,MAAM,gBAAgB,MAAM,iBAAiB,CAAC;MACnE;AACA,WAAK,SAAS;QACZ,gBAAgB,KAAK,MAAM,iBAAiB;OAC7C;AACD,cAAQ,WAAW,QAAQ,EAAE,KAAK,CAAC,WAAU;AAC3C,aAAK,SAAS;UACZ,gBAAgB,KAAK,MAAM,iBAAiB;SAC7C;AACD,YAAI,gBAAgB;AACpB,mBAAW,QAAQ,QAAQ;AACzB,cAAI,KAAK,WAAW,eAAe,KAAK,MAAM,WAAW;AACvD,4BAAgB;AAChB,mBAAO,SAAS,KAAK,MAAM,EAAE;UAC/B;QACF;AACA,YAAI,iBAAiB,CAAC,KAAK,MAAM,gBAAgB;AAE/C,gBAAM,eAAe,KAAK,MAAM,eAAe;AAC/C,eAAK,eAAc;QACrB;MACF,CAAC;IACH;EACF;EAEQ,mBAAgB;AACtB,UAAM,EAAC,UAAS,IAAI,KAAK;AAEzB,QAAI,WAAW;AACb,WAAK,eAAe,UAAU,aAAa;IAC7C;EACF;EAEQ,aAAa,OAAe;AA9NtC;AA+NI,QAAI,KAAK,MAAM,gBAAc,WAAM,CAAC,MAAP,mBAAU,UAAS,uBAAU,MAAM;AAC9D,YAAM,EAAC,UAAU,mBAAkB,IAAI,KAAK;AAC5C,YAAM,WAAyD,CAAA;AAC/D,iBAAW,QAAQ,OAAO;AACxB,iBAAS,KAAK,KAAK,MAAM,WAAW,MAAM,kBAAkB,CAAC;MAC/D;AACA,WAAK,SAAS;QACZ,gBAAgB,KAAK,MAAM,iBAAiB;OAC7C;AACD,cAAQ,WAAW,QAAQ,EAAE,KAAK,CAAC,WAAU;AAC3C,aAAK,SAAS;UACZ,gBAAgB,KAAK,MAAM,iBAAiB;SAC7C;AACD,YAAI,gBAAgB;AACpB,mBAAW,QAAQ,QAAQ;AACzB,cAAI,KAAK,WAAW,eAAe,KAAK,MAAM,YAAY;AACxD,4BAAgB;AAChB,mBAAO,SAAS,KAAK,MAAM,EAAE;UAC/B;QACF;AACA,YAAI,iBAAiB,CAAC,KAAK,MAAM,gBAAgB;AAE/C,gBAAM,eAAe,KAAK,MAAM,eAAe;AAC/C,eAAK,eAAc;QACrB;MACF,CAAC;IACH;EACF;EAEQ,iBAAc;AACpB,UAAM,EAAC,UAAS,IAAI,KAAK;AAEzB,QAAI,WAAW;AACb,WAAK,aAAa,UAAU,aAAa;IAC3C;EACF;;AAxMA,cAJW,uBAIJ,aAAY;AACnB,cALW,uBAKJ,gBAAe;;;ACvDxB,iBAA8B;AAQvB,IAAM,eAAe,OAC1B,MACA,sBAC6C;AAC7C,QAAM,SAAS,EAAC,WAAW,OAAO,IAAI,KAAK,GAAE;AAE7C,MAAI,KAAK,QAAQ,iBAAiB,mBAAmB;AACnD,QAAI,KAAK,WAAW,mBAAmB;AACrC,UAAI,CAAC,KAAK,QAAQ,0BAA0B;AAC1C,aAAK,QAAQ,2BAA2B;UACtC,GAAG,KAAK,QAAQ,WAAW;UAC3B,OAAO,IAAI,WAAW,KAAK,QAAQ,WAAW,OAAO,KAAK;;MAE9D,WAAW,kBAAkB,SAAS,YAAY;AAChD,aAAK,QAAQ,WAAW,OAAO,MAAM,IAAI,KAAK,QAAQ,yBAAyB,KAAK;MACtF;AAEA,WAAK,QAAQ,eAAe;AAE5B,YAAM,YAAY,UAAM,4BACtB,KAAK,QAAQ,WAAW,QACxB,KAAK,QAAQ,YACb,KAAK,OAAO,eACZ,KAAK,QAAQ,QAAQ,QACrB,KAAK,QAAQ,QAAQ,sBACrB,mBACC,KAAK,QAAQ,YAAoB,IAAI,KAAK;AAG7C,UAAI,KAAK,QAAQ,iBAAiB,mBAAmB;AACnD,aAAK,QAAQ,WAAW,SAAS;AACjC,eAAO,YAAY;MACrB;IACF,WAAW,KAAK,WAAW,KAAK,QAAQ,0BAA0B;AAChE,WAAK,QAAQ,WAAW,OAAO,QAAQ,KAAK,QAAQ,yBAAyB;AAC7E,WAAK,QAAQ,eAAe;AAC5B,aAAO,YAAY;IACrB;EACF;AACA,SAAO;AACT;;;AC9CA,IAAAA,cAAuD;AACvD,IAAAC,eAAmB;AAWZ,IAAM,aAAa,OACxB,MACA,uBAC8C;AArBhD;AAsBE,QAAM,SAAS,EAAC,YAAY,OAAO,IAAI,KAAK,GAAE;AAE9C,QAAI,UAAK,QAAQ,aAAb,mBAAuB,mBAAkB,oBAAoB;AAC/D,QAAI,KAAK,WAAW,oBAAoB;AACtC,YAAI,UAAK,QAAQ,aAAb,mBAAuB,qBAAoB,QAAW;AACxD,aAAK,QAAQ,WAAW,CAAA;AAExB,aAAK,QAAQ,SAAS,kBAAkB,KAAK,QAAQ;MACvD;AACA,WAAK,QAAQ,WAAU,UAAK,QAAQ,aAAb,mBAAuB;AAC9C,WAAK,QAAQ,SAAS,gBAAgB;AAEtC,YAAM,EAAC,QAAO,IAAI,MAAM,kBACtB,MACA,oBACC,KAAK,QAAQ,YAAoB,IAAI,KAAK;AAG7C,UAAI,WAAW,KAAK,QAAQ,SAAS,kBAAkB,oBAAoB;AACzE,aAAK,QAAQ,UAAU;AACvB,eAAO,aAAa;MACtB;IACF,WAAW,KAAK,aAAW,UAAK,QAAQ,aAAb,mBAAuB,qBAAoB,QAAW;AAC/E,WAAK,QAAQ,UAAU,KAAK,QAAQ,SAAS;AAC7C,WAAK,QAAQ,SAAS,gBAAgB;AACtC,aAAO,aAAa;IACtB;EACF;AACA,SAAO;AACT;AAGA,eAAe,kBACb,MACA,oBACA,OAAa;AAzDf;AA2DE,MAAI,CAAC,mBAAmB,cAAc,QAAQ;AAC5C,WAAO,EAAC,SAAS,MAAK;EACxB;AAEA,QAAM,uBAAuB,KAAK,QAAQ,QAAQ,OAAO,KACvD,CAAC,EAAC,KAAI,MAAM,UAAS,yDAAoB,cAAa;AAGxD,MACE,CAAC,wBACD,CAAC,CAAC,uBAAuB,wBAAwB,2BAA2B,EAAE,SAC5E,qBAAqB,IAAI,GAE3B;AACA,WAAO,EAAC,SAAS,MAAK;EACxB;AAEA,QAAM,0BAA0B,MAAM,yBACpC,qBAAqB,MACrB,KAAK,OAAO,eACZ,KAAK,QAAQ,QAAQ,sBACrB,KAAK;AAEP,MAAI,CAAC,yBAAyB;AAC5B,WAAO,EAAC,SAAS,MAAK;EACxB;AAEA,QAAM,gBAAgB,KAAK,QAAQ,QAAQ,OAAO,KAAK,CAAC,EAAC,KAAI,MAAM,SAAS,kBAAkB;AAC9F,MAAI,CAAC,eAAe;AAClB,WAAO,EAAC,SAAS,MAAK;EACxB;AAEA,QAAM,wBAAwB,MAAM,yBAClC,cAAc,MACd,KAAK,OAAO,eACZ,KAAK,QAAQ,QAAQ,sBACrB,KAAK;AAEP,MAAI,CAAC,uBAAuB;AAC1B,WAAO,EAAC,SAAS,MAAK;EACxB;AAEA,QAAM,qBAAqB,CAAA;AAC3B,8BAAsB,cAAc,IAAI,MAAxC,mBAA2C,QAAQ,CAAC,MAAM,UAAS;AACjE,uBAAmB,IAAI,IAAI,wBAAwB,qBAAqB,IAAI,EAAE,KAAK;EACrF;AAEA,MAAI,CAAC,KAAK,QAAQ,SAAS;AACzB,UAAMC,aAAsB,CAAA;AAC5B,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,WAAW,QAAQ,KAAK,GAAG;AAC1D,UAAI,mBAAmB,KAAK,QAAQ,WAAW,CAAC,CAAC,MAAM,mBAAmB,OAAO;AAC/E,QAAAA,WAAU,KAAK,CAAC;MAClB;IACF;AAEA,UAAMC,WAAU,IAAI,YAAY,IAAID,WAAU,MAAM;AAEpD,IAAAA,WAAU,QAAQ,CAAC,QAAQ,UAAS;AAClC,MAAAC,SAAQ,QAAQ,CAAC,IAAI;AACrB,MAAAA,SAAQ,QAAQ,IAAI,CAAC,IAAI,SAAS;AAClC,MAAAA,SAAQ,QAAQ,IAAI,CAAC,IAAI,SAAS;IACpC,CAAC;AACD,WAAO,EAAC,SAAS,MAAM,SAAAA,SAAO;EAChC;AACA,QAAM,YAAsB,CAAA;AAC5B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,QAAQ,KAAK,GAAG;AACvD,QACE,mBAAmB,KAAK,QAAQ,WAAW,KAAK,QAAQ,QAAQ,CAAC,CAAC,CAAC,MACnE,mBAAmB,OACnB;AACA,gBAAU,KAAK,CAAC;IAClB;EACF;AAEA,QAAM,UAAU,IAAI,YAAY,IAAI,UAAU,MAAM;AAEpD,YAAU,QAAQ,CAAC,QAAQ,UAAS;AAClC,YAAQ,QAAQ,CAAC,IAAI,KAAK,QAAQ,QAAQ,MAAM;AAChD,YAAQ,QAAQ,IAAI,CAAC,IAAI,KAAK,QAAQ,QAAQ,SAAS,CAAC;AACxD,YAAQ,QAAQ,IAAI,CAAC,IAAI,KAAK,QAAQ,QAAQ,SAAS,CAAC;EAC1D,CAAC;AACD,SAAO,EAAC,SAAS,MAAM,QAAO;AAChC;AAEA,eAAe,yBACb,eACA,eACA,uBACA,OAAc;AAEd,QAAM,iBAAiB,sBAAsB,UAAU,CAAC,EAAC,KAAI,MAAM,kBAAkB,IAAI;AACzF,MAAI,mBAAmB,IAAI;AACzB,WAAO;EACT;AACA,QAAM,uBAAuB,gBAAgB,cAAc,cAAc,GAAG,KAAK;AACjF,QAAM,gBAAgB,sBAAsB,sBAAsB,cAAc,CAAC;AACjF,QAAM,wBAAwB,UAAM,mBAAK,sBAAsB,gCAAoB;IACjF;IACA;GACD;AAED,SAAO;AACT;AAEA,SAAS,gBAAgB,KAAa,QAAuB,MAAI;AAC/D,SAAO,QAAQ,GAAG,aAAa,UAAU;AAC3C;AAEA,SAAS,sBAAsB,WAA+B;AAvK9D;AAyKE,MAAI,UAAU,eAAe,WAAW,GAAG;AACzC,WAAO;EAET,WAAW,UAAU,eAAe,iBAAiB,GAAG;AACtD,YAAO,eAAU,oBAAV,mBAA2B;EACpC;AACA,SAAO;AACT;;;;AC5KA,IAAAC,iBAAqB;;;;ACArB,oBAAgD;AAEhD,IAAM,kBAAkB;AACxB,IAAM,qBAAqB;AAOrB,IAAO,kBAAP,cAA+B,wBAA+B;EAClE,mBAAyD;EACzD,qBAAqB;EAEb,UAAU,OAAY;AAC5B,UAAM,gBAAe;AACrB,QAAI,OAAQ,MAAc,6BAA6B,YAAY;AAChE,YAAc,yBAAwB;IACzC;AACA,QAAI,OAAQ,MAAc,mBAAmB,YAAY;AACtD,YAAc,eAAc;IAC/B;EACF;EAEQ,SAAS,MAAK;AACpB,QAAI,KAAK,kBAAkB;AACzB,WAAK,MAAM,QAAO;AAClB,WAAK,mBAAmB,WAAW,KAAK,QAAQ,kBAAkB;IACpE;EACF;EAEQ,WAAW,OAAY;AAC7B,SAAK,UAAU,KAAK;AACpB,SAAK,MAAM,QAAO;AAClB,SAAK,mBAAmB,WAAW,KAAK,QAAQ,eAAe;EACjE;EAEQ,SAAS,OAAa;AAC5B,QAAI,OAAO;AACT,WAAK,UAAU,KAAK;IACtB;AACA,QAAI,KAAK,kBAAkB;AACzB,mBAAa,KAAK,gBAAgB;IACpC;AACA,SAAK,mBAAmB;EAC1B;EAEQ,oBAAoB,CAAC,UAAuB;;AAClD,SAAK,qBAAqB;AACzB,sBAAM,kBAAN,mBAA4C,sBAA5C,4BAAgE,MAAM;AACvE,SAAK,WAAW,KAAK;EACvB;EAEQ,kBAAkB,CAAC,UAAuB;;AAC/C,sBAAM,kBAAN,mBAA4C,0BAA5C,4BAAoE,MAAM;AAC3E,SAAK,SAAS,KAAK;EACrB;EAEQ,sBAAsB,CAAC,UAAuB;;AACnD,sBAAM,kBAAN,mBAA4C,0BAA5C,4BAAoE,MAAM;AAC3E,SAAK,SAAS,KAAK;EACrB;EAEQ,kBAAkB,CAAC,UAAqB;AAC9C,QAAI,KAAK,oBAAoB;AAC3B;IACF;AACA,SAAK,WAAW,KAAK;AACrB,aAAS,iBAAiB,WAAW,KAAK,eAAe,EAAC,MAAM,KAAI,CAAC;EACvE;EAEQ,gBAAgB,CAAC,UAAqB;AAC5C,QAAI,KAAK,oBAAoB;AAC3B;IACF;AACA,SAAK,SAAS,KAAK;EACrB;EAEQ,mBAAmB,CAAC,UAAqB;AAC/C,QAAI,KAAK,oBAAoB;AAC3B;IACF;AACA,SAAK,WAAW,KAAK;AACrB,aAAS,iBAAiB,YAAY,KAAK,gBAAgB,EAAC,MAAM,KAAI,CAAC;AACvE,aAAS,iBAAiB,eAAe,KAAK,gBAAgB,EAAC,MAAM,KAAI,CAAC;EAC5E;EAEQ,iBAAiB,CAAC,UAAqB;AAC7C,QAAI,KAAK,oBAAoB;AAC3B;IACF;AACA,SAAK,SAAS,KAAK;EACrB;EAEA,SAAM;AACJ,eACE,mBAAAC,KAAA,OAAA,EAAK,WAAU,sBAAoB,cACjC,mBAAAA,KAAA,OAAA,EACE,OAAO,EAAC,eAAe,OAAM,GAC7B,eAAe,KAAK,mBACpB,aAAa,KAAK,iBAClB,iBAAiB,KAAK,qBACtB,eAAe,CAAC,UAAU,KAAK,UAAU,KAAK,GAC9C,gBAAgB,KAAK,qBACrB,cAAc,KAAK,qBACnB,aAAa,KAAK,iBAClB,WAAW,KAAK,eAChB,aAAa,CAAC,UAAU,KAAK,UAAU,KAAK,GAC5C,cAAc,KAAK,kBACnB,YAAY,KAAK,gBACjB,aAAa,CAAC,UAAU,KAAK,UAAU,KAAK,GAC5C,eAAe,CAAC,UAAU,MAAM,eAAc,GAC9C,SAAS,CAAC,UAAU,KAAK,UAAU,KAAK,GACxC,SAAS,CAAC,UAAU,KAAK,UAAU,KAAK,GAAC,UAExC,KAAK,MAAM,SAAQ,CAAA,EAChB,CAAA;EAGZ;;;;ADpHF,IAAAC,eAMO;AASP,IAAM,gBAA8C;EAClD,UAAU;EACV,SAAS;EACT,eAAe;EACf,YAAY;EACZ,QAAQ;EACR,YAAY;;AAGd,IAAM,6BAAgD;EACpD,UAAU;EACV,YAAY;EACZ,cAAc;EACd,QAAQ;EACR,WAAW;EACX,QAAQ;EACR,OAAO;;AAGT,IAAM,0BAA6C;EACjD,OAAO;EACP,QAAQ;EACR,UAAU;EACV,eAAe;;AAGX,IAAO,aAAP,cAAyB,oBAAsB;EAUnD,YAA6B;EAC7B,YAAY;EACZ,OAAqB;EACrB;EAEA,YAAY,QAAwB,CAAA,GAAE;AACpC,UAAM,EAAC,GAAG,WAAU,cAAc,GAAG,MAAK,CAAC;AAC3C,SAAK,SAAS,MAAM,UAAU;AAC9B,SAAK,YAAY,MAAM,aAAa;AACpC,SAAK,OAAO,MAAM,QAAQ,WAAU,aAAa;EACnD;EAES,SAAS,OAA8B;AAC9C,QAAI,MAAM,WAAW,QAAW;AAC9B,WAAK,SAAS,MAAM;IACtB;AACA,QAAI,MAAM,cAAc,QAAW;AACjC,WAAK,YAAY,MAAM;IACzB;AACA,QAAI,MAAM,SAAS,QAAW;AAC5B,WAAK,OAAO,MAAM;IACpB;AACA,UAAM,SAAS,KAAK;EACtB;EAES,MAAM,EAAC,MAAM,OAAM,GAAsC;AAChE,SAAK,OAAO;AACZ,QAAI,KAAK,WAAW,QAAW;AAC7B,WAAK,SAAS;IAChB;EACF;EAES,WAAQ;AACf,SAAK,OAAO;EACd;EAES,aAAa,aAAwB;AAC5C,UAAM,QAAQ,EAAC,GAAG,eAAe,GAAG,KAAK,MAAM,MAAK;AACpD,WAAO,OAAO,YAAY,OAAO,KAAK;AAEtC,UAAM,UAAU;MACd,EAAC,KAAK,IAAI,MAAM,IAAI,SAAS,MAAM,KAAK,UAAU,GAAG,KAAK,IAAI,GAAG,OAAO,UAAK,KAAK,KAAI;MACtF,EAAC,KAAK,IAAI,MAAM,GAAG,SAAS,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,GAAG,OAAO,UAAK,KAAK,OAAM;MACvF,EAAC,KAAK,IAAI,MAAM,IAAI,SAAS,MAAM,KAAK,UAAU,CAAC,KAAK,MAAM,CAAC,GAAG,OAAO,UAAK,KAAK,QAAO;MAC1F,EAAC,KAAK,IAAI,MAAM,IAAI,SAAS,MAAM,KAAK,UAAU,GAAG,CAAC,KAAK,IAAI,GAAG,OAAO,UAAK,KAAK,OAAM;;AAG3F,UAAM,SACJ,oBAAAC,KAAA,OAAA,EAAK,OAAO,4BAA0B,UACnC,QAAQ,IAAI,CAAC,eACZ,oBAAAA,KAAA,OAAA,EAEE,OAAO;MACL,GAAG;MACH,KAAK,GAAG,OAAO;MACf,MAAM,GAAG,OAAO;OACI,cAEtB,oBAAAA,KAAC,iBAAe,EAAC,SAAS,OAAO,SAAO,UAAG,OAAO,MAAK,CAAA,EAAmB,GAPrE,OAAO,GAAG,CASlB,EAAC,CAAA;AAIN,+BAAO,IAAI,WAAW;EACxB;EAEQ,qBAAkB;;AACxB,UAAM,OAAO,KAAK;AAClB,QAAI,CAAC,MAAM;AACT,aAAO,CAAA;IACT;AAEA,QAAI,KAAK,QAAQ;AACf,YAAM,YAAW,UAAK,gBAAL,mBAAkB,YAAY,KAAK;AACpD,aAAO,WAAW,CAAC,QAAQ,IAAI,CAAA;IACjC;AACA,WAAO,KAAK,aAAY;EAC1B;EAEQ,aAAa,UAAkB;;AACrC,UAAM,eAAe,UAAK,SAAL,mBAAmD;AACxE,UAAM,SAAS,KAAK,UAAU,SAAS;AACvC,QAAI,aAAa;AACf,UAAI;AACF,eAAO,EAAC,GAAG,YAAY,aAAa,MAAM,EAAC;MAC7C,SAAS,KAAP;AACA,eAAO,EAAC,GAAI,YAAY,UAAiB;MAC3C;IACF;AACA,WAAO,EAAC,GAAI,SAAgB;EAC9B;EAEQ,UAAU,QAAgB,QAAc;AAC9C,QAAI,CAAC,KAAK,MAAM;AACd;IACF;AAEA,UAAM,YAAY,KAAK,mBAAkB;AACzC,eAAW,YAAY,WAAW;AAChC,YAAM,SAAS,SAAS,UAAU,CAAC,SAAS,QAAQ,GAAG,SAAS,SAAS,CAAC,CAAC;AAC3E,UAAI,CAAC,QAAQ;AACX;MACF;AAEA,YAAM,YAA8B;QAClC,SAAS,QAAQ,IAAI;QACrB,SAAS,SAAS,IAAI;;AAGxB,YAAM,YAAY,KAAK,aAAa,QAAQ;AAC5C,YAAM,YAAY,SAAS,cAAc,QAAQ,SAAS;AAC1D,YAAM,gBAAgB,EAAC,GAAG,WAAW,GAAG,UAAS;AACjD,YAAM,SAAS,KAAK,UAAU,SAAS,MAAM;AAG7C,WAAK,KAAK,mBAAmB,EAAC,QAAQ,WAAW,eAAe,kBAAkB,CAAA,EAAE,CAAC;IACvF;EACF;;AAhII,IAAO,YAAP;AACJ,cADW,WACK,gBAAe;EAC7B,IAAI;EACJ,QAAQ;EACR,WAAW;EACX,MAAM;EACN,OAAO,CAAA;EACP,WAAW;;;;;AEnDf,IAAAC,iBAAqB;AAGrB,IAAAC,eAMO;AAUP,IAAMC,iBAA8C;EAClD,UAAU;EACV,SAAS;EACT,eAAe;EACf,YAAY;EACZ,YAAY;EACZ,QAAQ;EACR,WAAW;EACX,SAAS;EACT,OAAO;EACP,YAAY;EACZ,eAAe;;AAGjB,IAAM,oBAAuC;EAC3C,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,QAAQ;;AAGV,IAAM,yBAA4C;EAChD,SAAS;EACT,QAAQ;EACR,SAAS;EACT,OAAO;;AAGH,IAAO,mBAAP,cAA+B,oBAA4B;EAY/D,YAA6B;EAC7B,YAAY;EACZ,OAAqB;EACrB;EACA,cAAc;EACd,kBAAiC;EACjC,kBAAiC;EAEjC,YAAY,QAA8B,CAAA,GAAE;AAC1C,UAAM,EAAC,GAAG,iBAAgB,cAAc,GAAG,MAAK,CAAC;AACjD,SAAK,SAAS,MAAM,UAAU;AAC9B,SAAK,YAAY,MAAM,aAAa;AACpC,SAAK,OAAO,MAAM,QAAQ,iBAAgB,aAAa;EACzD;EAES,SAAS,OAAoC;AACpD,QAAI,MAAM,WAAW,QAAW;AAC9B,WAAK,SAAS,MAAM;IACtB;AACA,QAAI,MAAM,cAAc,QAAW;AACjC,WAAK,YAAY,MAAM;IACzB;AACA,QAAI,MAAM,SAAS,QAAW;AAC5B,WAAK,OAAO,MAAM;IACpB;AACA,UAAM,SAAS,KAAK;EACtB;EAES,MAAM,EAAC,MAAM,OAAM,GAAsC;AAChE,SAAK,OAAO;AACZ,QAAI,KAAK,WAAW,QAAW;AAC7B,WAAK,SAAS;IAChB;EACF;EAES,WAAQ;AACf,SAAK,OAAO;EACd;EAES,aAAa,aAAwB;AAC5C,UAAM,QAAQ,EAAC,GAAGA,gBAAe,GAAG,KAAK,MAAM,MAAK;AACpD,WAAO,OAAO,YAAY,OAAO,KAAK;AAEtC,UAAM,EAAC,SAAS,QAAO,IAAI,KAAK,cAAa;AAC7C,UAAM,cAAc,KAAK,IAAI,SAAS,KAAK,IAAI,SAAS,KAAK,WAAW,CAAC;AAEzE,UAAM,uBAAuB,CAAC,UAAgB;AAC5C,YAAM,gBAAe;AACrB,UAAI,OAAQ,MAAc,6BAA6B,YAAY;AAChE,cAAc,yBAAwB;MACzC;IACF;AAEA,UAAM,SACJ,oBAAAC,MAAA,oBAAAC,UAAA,EAAA,UAAA,KACE,oBAAAC,KAAA,OAAA,EAAK,OAAO,mBAAiB,cAC3B,oBAAAA,KAAC,iBAAe,EAAC,SAAS,MAAM,KAAK,gBAAgB,KAAK,IAAI,GAAC,UAAG,IAAG,CAAA,EAAmB,CAAA,OAE1F,oBAAAA,KAAA,OAAA,EACE,OAAO,wBACP,eAAe,sBACf,eAAe,sBACf,aAAa,sBACb,aAAa,sBACb,aAAa,sBACb,WAAW,sBACX,SAAS,sBACT,SAAS,sBACT,cAAc,sBACd,aAAa,sBACb,YAAY,sBAAoB,cAEhC,oBAAAA,KAAA,SAAA;MACE,MAAK;MACL,OAAO;MACP,KAAK;MACL,KAAK;MACL,MAAM,KAAK;MACX,SAAS,CAAC,UACR,KAAK,aAAa,OAAQ,MAAM,OAA4B,KAAK,CAAC;MAEpE,UAAU,CAAC,UACT,KAAK,aAAa,OAAQ,MAAM,OAA4B,KAAK,CAAC;MAEpE,eAAe;MACf,eAAe;MACf,aAAa;MACb,aAAa;MACb,aAAa;MACb,WAAW;MACX,SAAS;MACT,SAAS;MACT,cAAc;MACd,aAAa;MACb,YAAY;;MAEZ,QAAO;MACP,OACE;QACE,aAAa;QACb,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,OAAO;;IACa,CAAA,EAExB,CAAA,OAEJ,oBAAAA,KAAA,OAAA,EAAK,OAAO,mBAAiB,cAC3B,oBAAAA,KAAC,iBAAe,EAAC,SAAS,MAAM,KAAK,gBAAgB,CAAC,KAAK,IAAI,GAAC,UAAG,IAAG,CAAA,EAAmB,CAAA,CACrF,EAAA,CAAA;AAIV,+BAAO,IAAI,WAAW;EACxB;EAES,iBAAiB,UAAkB;AAC1C,UAAM,YAAY,KAAK,aAAa,QAAQ;AAC5C,UAAM,OAAO,OAAO,uCAAW,IAAI;AACnC,QAAI,OAAO,SAAS,IAAI,GAAG;AACzB,WAAK,cAAc;IACrB;AAEA,QAAI,KAAK,MAAM,YAAY,QAAW;AACpC,YAAM,UAAU,OAAO,uCAAW,OAAO;AACzC,UAAI,OAAO,SAAS,OAAO,GAAG;AAC5B,aAAK,kBAAkB;MACzB;IACF;AAEA,QAAI,KAAK,MAAM,YAAY,QAAW;AACpC,YAAM,UAAU,OAAO,uCAAW,OAAO;AACzC,UAAI,OAAO,SAAS,OAAO,GAAG;AAC5B,aAAK,kBAAkB;MACzB;IACF;AAEA,SAAK,WAAU;EACjB;EAEQ,gBAAa;AACnB,UAAM,UACJ,KAAK,MAAM,WAAW,KAAK,mBAAmB,OAAO;AACvD,UAAM,UACJ,KAAK,MAAM,WAAW,KAAK,mBAAmB,OAAO;AAEvD,QAAI,UAAU,SAAS;AACrB,aAAO,EAAC,SAAS,SAAS,SAAS,QAAO;IAC5C;AACA,WAAO;MACL,SAAS,OAAO,SAAS,OAAO,IAAI,UAAU;MAC9C,SAAS,OAAO,SAAS,OAAO,IAAI,UAAU;;EAElD;EAEQ,qBAAkB;;AACxB,UAAM,OAAO,KAAK;AAClB,QAAI,CAAC,MAAM;AACT,aAAO,CAAA;IACT;AACA,QAAI,KAAK,QAAQ;AACf,YAAM,YAAW,UAAK,gBAAL,mBAAkB,YAAY,KAAK;AACpD,aAAO,WAAW,CAAC,QAAQ,IAAI,CAAA;IACjC;AACA,WAAO,KAAK,aAAY;EAC1B;EAEQ,aAAa,UAAkB;;AACrC,UAAM,eAAe,UAAK,SAAL,mBAAmD;AACxE,UAAM,SAAS,KAAK,UAAU,SAAS;AACvC,QAAI,aAAa;AACf,UAAI;AACF,eAAO,EAAC,GAAG,YAAY,aAAa,MAAM,EAAC;MAC7C,SAAS,KAAP;AACA,eAAO,EAAC,GAAI,YAAY,UAAiB;MAC3C;IACF;AACA,WAAO,EAAC,GAAI,SAAgB;EAC9B;EAEQ,gBAAgB,OAAa;AACnC,UAAM,EAAC,SAAS,QAAO,IAAI,KAAK,cAAa;AAE7C,eAAW,YAAY,KAAK,mBAAkB,GAAI;AAChD,YAAM,YAAY,KAAK,aAAa,QAAQ;AAC5C,YAAM,WAAW,OAAO,UAAU,IAAI;AACtC,YAAM,UAAU,OAAO,SAAS,QAAQ,IAAI,WAAW,KAAK;AAC5D,YAAM,WAAW,KAAK,IAAI,SAAS,KAAK,IAAI,SAAS,UAAU,KAAK,CAAC;AACrE,WAAK,gBAAgB,UAAU,EAAC,GAAG,WAAW,MAAM,SAAQ,CAAC;IAC/D;EACF;EAEQ,aAAa,MAAY;AAC/B,UAAM,EAAC,SAAS,QAAO,IAAI,KAAK,cAAa;AAC7C,UAAM,WAAW,KAAK,IAAI,SAAS,KAAK,IAAI,SAAS,IAAI,CAAC;AAE1D,eAAW,YAAY,KAAK,mBAAkB,GAAI;AAChD,YAAM,YAAY,KAAK,aAAa,QAAQ;AAC5C,WAAK,gBAAgB,UAAU,EAAC,GAAG,WAAW,MAAM,SAAQ,CAAC;IAC/D;EACF;EAEQ,gBAAgB,UAAoB,WAAc;AACxD,QAAI,CAAC,KAAK,MAAM;AACd;IACF;AAEA,UAAM,SAAS,KAAK,UAAU,SAAS,MAAM;AAC7C,SAAK,cAAc,OAAO,UAAU,IAAI,KAAK,KAAK;AAClD,SAAK,WAAU;AAGf,SAAK,KAAK,mBAAmB,EAAC,QAAQ,WAAW,kBAAkB,CAAA,EAAE,CAAC;EACxE;;AAlOI,IAAO,kBAAP;AACJ,cADW,iBACK,gBAAe;EAC7B,IAAI;EACJ,QAAQ;EACR,WAAW;EACX,SAAS;EACT,SAAS;EACT,MAAM;EACN,OAAO,CAAA;EACP,WAAW;;",
|
|
6
|
+
"names": ["import_i3s", "import_core", "triangles", "indices", "import_preact", "_jsx", "import_core", "_jsx", "import_preact", "import_core", "WRAPPER_STYLE", "_jsxs", "_Fragment", "_jsx"]
|
|
7
7
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { DataDrivenTile3DLayer } from "./data-driven-tile-3d-layer/data-driven-tile-3d-layer.js";
|
|
2
2
|
export { colorizeTile } from "./data-driven-tile-3d-layer/utils/colorize-tile.js";
|
|
3
3
|
export { filterTile } from "./data-driven-tile-3d-layer/utils/filter-tile.js";
|
|
4
|
+
export { PanWidget } from "./widgets/pan-widget.js";
|
|
5
|
+
export { ZoomRangeWidget } from "./widgets/zoom-range-widget.js";
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,qBAAqB,EAAC,iEAA8D;AAE5F,OAAO,EAAC,YAAY,EAAC,2DAAwD;AAC7E,OAAO,EAAC,UAAU,EAAC,yDAAsD"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,qBAAqB,EAAC,iEAA8D;AAE5F,OAAO,EAAC,YAAY,EAAC,2DAAwD;AAC7E,OAAO,EAAC,UAAU,EAAC,yDAAsD;AAEzE,OAAO,EAAC,SAAS,EAAC,gCAA6B;AAC/C,OAAO,EAAC,eAAe,EAAC,uCAAoC"}
|