@focusbc/bbs-lib 0.0.4 → 0.0.5
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/README.md +15 -1
- package/dist/browser/bbs-lib.js +42 -97
- package/dist/browser/bbs-lib.js.map +4 -4
- package/dist/overlay/map-overlay.d.ts +9 -1
- package/dist/overlay/map-overlay.d.ts.map +1 -1
- package/dist/overlay/map-overlay.js +41 -0
- package/dist/overlay/map-overlay.js.map +1 -1
- package/dist/types/events.d.ts +4 -1
- package/dist/types/events.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -37,6 +37,18 @@ const context: MapContext = {
|
|
|
37
37
|
|
|
38
38
|
const overlay = MapOverlay.initialize(document.getElementById('map-overlay')!, context)
|
|
39
39
|
|
|
40
|
+
overlay.click().subscribe(({ shape, lat, lng }) => {
|
|
41
|
+
console.log('left click', { shape, lat, lng })
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
overlay.doubleClick().subscribe(({ shape, lat, lng }) => {
|
|
45
|
+
console.log('double click', { shape, lat, lng })
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
overlay.rightClick().subscribe(({ shape, lat, lng }) => {
|
|
49
|
+
console.log('right click', { shape, lat, lng })
|
|
50
|
+
})
|
|
51
|
+
|
|
40
52
|
// Later, when the event/site changes:
|
|
41
53
|
overlay.setContext(newContext)
|
|
42
54
|
```
|
|
@@ -93,7 +105,7 @@ Open `http://localhost:5173`, select an event, then a site. The overlay calls `M
|
|
|
93
105
|
|
|
94
106
|
## Client demo
|
|
95
107
|
|
|
96
|
-
The client-facing reference implementation lives in [`demo/`](demo/). It
|
|
108
|
+
The client-facing reference implementation lives in [`demo/`](demo/). It is a static site (`index.html` + `main.js`) with no build step. See [`demo/README.md`](demo/README.md).
|
|
97
109
|
|
|
98
110
|
From this directory:
|
|
99
111
|
|
|
@@ -107,6 +119,8 @@ Or from the repository root:
|
|
|
107
119
|
yarn bbs-demo:serve
|
|
108
120
|
```
|
|
109
121
|
|
|
122
|
+
To run the demo folder on its own, serve it statically — for example `npx --yes serve . -p 5174` from `demo/`.
|
|
123
|
+
|
|
110
124
|
---
|
|
111
125
|
|
|
112
126
|
## Releasing the library
|
package/dist/browser/bbs-lib.js
CHANGED
|
@@ -18186,105 +18186,9 @@ var ImageLoader = {
|
|
|
18186
18186
|
var defaultLogger = new ProbeLog({ id: "deck" });
|
|
18187
18187
|
var log_default = defaultLogger;
|
|
18188
18188
|
|
|
18189
|
-
// node_modules/@deck.gl/core/dist/debug/loggers.js
|
|
18190
|
-
var logState = {
|
|
18191
|
-
attributeUpdateStart: -1,
|
|
18192
|
-
attributeManagerUpdateStart: -1,
|
|
18193
|
-
attributeUpdateMessages: []
|
|
18194
|
-
};
|
|
18195
|
-
var LOG_LEVEL_MAJOR_UPDATE = 1;
|
|
18196
|
-
var LOG_LEVEL_MINOR_UPDATE = 2;
|
|
18197
|
-
var LOG_LEVEL_UPDATE_DETAIL = 3;
|
|
18198
|
-
var LOG_LEVEL_INFO = 4;
|
|
18199
|
-
var LOG_LEVEL_DRAW = 2;
|
|
18200
|
-
var getLoggers = (log4) => ({
|
|
18201
|
-
/* Layer events */
|
|
18202
|
-
"layer.changeFlag": (layer, key, flags) => {
|
|
18203
|
-
log4.log(LOG_LEVEL_UPDATE_DETAIL, `${layer.id} ${key}: `, flags[key])();
|
|
18204
|
-
},
|
|
18205
|
-
"layer.initialize": (layer) => {
|
|
18206
|
-
log4.log(LOG_LEVEL_MAJOR_UPDATE, `Initializing ${layer}`)();
|
|
18207
|
-
},
|
|
18208
|
-
"layer.update": (layer, needsUpdate) => {
|
|
18209
|
-
if (needsUpdate) {
|
|
18210
|
-
const flags = layer.getChangeFlags();
|
|
18211
|
-
log4.log(LOG_LEVEL_MINOR_UPDATE, `Updating ${layer} because: ${Object.keys(flags).filter((key) => flags[key]).join(", ")}`)();
|
|
18212
|
-
} else {
|
|
18213
|
-
log4.log(LOG_LEVEL_INFO, `${layer} does not need update`)();
|
|
18214
|
-
}
|
|
18215
|
-
},
|
|
18216
|
-
"layer.matched": (layer, changed) => {
|
|
18217
|
-
if (changed) {
|
|
18218
|
-
log4.log(LOG_LEVEL_INFO, `Matched ${layer}, state transfered`)();
|
|
18219
|
-
}
|
|
18220
|
-
},
|
|
18221
|
-
"layer.finalize": (layer) => {
|
|
18222
|
-
log4.log(LOG_LEVEL_MAJOR_UPDATE, `Finalizing ${layer}`)();
|
|
18223
|
-
},
|
|
18224
|
-
/* CompositeLayer events */
|
|
18225
|
-
"compositeLayer.renderLayers": (layer, updated, subLayers) => {
|
|
18226
|
-
if (updated) {
|
|
18227
|
-
log4.log(LOG_LEVEL_MINOR_UPDATE, `Composite layer rendered new subLayers ${layer}`, subLayers)();
|
|
18228
|
-
} else {
|
|
18229
|
-
log4.log(LOG_LEVEL_INFO, `Composite layer reused subLayers ${layer}`, subLayers)();
|
|
18230
|
-
}
|
|
18231
|
-
},
|
|
18232
|
-
/* LayerManager events */
|
|
18233
|
-
"layerManager.setLayers": (layerManager, updated, layers) => {
|
|
18234
|
-
if (updated) {
|
|
18235
|
-
log4.log(LOG_LEVEL_MINOR_UPDATE, `Updating ${layers.length} deck layers`)();
|
|
18236
|
-
}
|
|
18237
|
-
},
|
|
18238
|
-
"layerManager.activateViewport": (layerManager, viewport) => {
|
|
18239
|
-
log4.log(LOG_LEVEL_UPDATE_DETAIL, "Viewport changed", viewport)();
|
|
18240
|
-
},
|
|
18241
|
-
/* AttributeManager events */
|
|
18242
|
-
"attributeManager.invalidate": (attributeManager, trigger, attributeNames) => {
|
|
18243
|
-
log4.log(LOG_LEVEL_MAJOR_UPDATE, attributeNames ? `invalidated attributes ${attributeNames} (${trigger}) for ${attributeManager.id}` : `invalidated all attributes for ${attributeManager.id}`)();
|
|
18244
|
-
},
|
|
18245
|
-
"attributeManager.updateStart": (attributeManager) => {
|
|
18246
|
-
logState.attributeUpdateMessages.length = 0;
|
|
18247
|
-
logState.attributeManagerUpdateStart = Date.now();
|
|
18248
|
-
},
|
|
18249
|
-
"attributeManager.updateEnd": (attributeManager, numInstances) => {
|
|
18250
|
-
const timeMs = Math.round(Date.now() - logState.attributeManagerUpdateStart);
|
|
18251
|
-
log4.groupCollapsed(LOG_LEVEL_MINOR_UPDATE, `Updated attributes for ${numInstances} instances in ${attributeManager.id} in ${timeMs}ms`)();
|
|
18252
|
-
for (const updateMessage of logState.attributeUpdateMessages) {
|
|
18253
|
-
log4.log(LOG_LEVEL_UPDATE_DETAIL, updateMessage)();
|
|
18254
|
-
}
|
|
18255
|
-
log4.groupEnd(LOG_LEVEL_MINOR_UPDATE)();
|
|
18256
|
-
},
|
|
18257
|
-
/* Attribute events */
|
|
18258
|
-
"attribute.updateStart": (attribute) => {
|
|
18259
|
-
logState.attributeUpdateStart = Date.now();
|
|
18260
|
-
},
|
|
18261
|
-
"attribute.allocate": (attribute, numInstances) => {
|
|
18262
|
-
const message2 = `${attribute.id} allocated ${numInstances}`;
|
|
18263
|
-
logState.attributeUpdateMessages.push(message2);
|
|
18264
|
-
},
|
|
18265
|
-
"attribute.updateEnd": (attribute, numInstances) => {
|
|
18266
|
-
const timeMs = Math.round(Date.now() - logState.attributeUpdateStart);
|
|
18267
|
-
const message2 = `${attribute.id} updated ${numInstances} in ${timeMs}ms`;
|
|
18268
|
-
logState.attributeUpdateMessages.push(message2);
|
|
18269
|
-
},
|
|
18270
|
-
/* Render events */
|
|
18271
|
-
"deckRenderer.renderLayers": (deckRenderer, renderStats, opts) => {
|
|
18272
|
-
const { pass, redrawReason, stats } = opts;
|
|
18273
|
-
for (const status of renderStats) {
|
|
18274
|
-
const { totalCount, visibleCount, compositeCount, pickableCount } = status;
|
|
18275
|
-
const primitiveCount = totalCount - compositeCount;
|
|
18276
|
-
const hiddenCount = primitiveCount - visibleCount;
|
|
18277
|
-
log4.log(LOG_LEVEL_DRAW, `RENDER #${deckRenderer.renderCount} ${visibleCount} (of ${totalCount} layers) to ${pass} because ${redrawReason} (${hiddenCount} hidden, ${compositeCount} composite ${pickableCount} pickable)`)();
|
|
18278
|
-
if (stats) {
|
|
18279
|
-
stats.get("Redraw Layers").add(visibleCount);
|
|
18280
|
-
}
|
|
18281
|
-
}
|
|
18282
|
-
}
|
|
18283
|
-
});
|
|
18284
|
-
|
|
18285
18189
|
// node_modules/@deck.gl/core/dist/debug/index.js
|
|
18286
18190
|
var loggers = {};
|
|
18287
|
-
if (
|
|
18191
|
+
if (false) {
|
|
18288
18192
|
loggers = getLoggers(log_default);
|
|
18289
18193
|
}
|
|
18290
18194
|
function register(handlers) {
|
|
@@ -78769,9 +78673,25 @@ var MapOverlay = class _MapOverlay {
|
|
|
78769
78673
|
this._centerChangedEvent = new Event3();
|
|
78770
78674
|
this._shapesChangedEvent = new Event3();
|
|
78771
78675
|
this._clickEvent = new Event3();
|
|
78676
|
+
this._doubleClickEvent = new Event3();
|
|
78677
|
+
this._rightClickEvent = new Event3();
|
|
78678
|
+
this.onDoubleClick = (event) => {
|
|
78679
|
+
if (!(event.target instanceof HTMLCanvasElement)) {
|
|
78680
|
+
return;
|
|
78681
|
+
}
|
|
78682
|
+
this._doubleClickEvent.emit(this.createPointerEventFromMouseEvent(event));
|
|
78683
|
+
};
|
|
78684
|
+
this.onRightClick = (event) => {
|
|
78685
|
+
if (!(event.target instanceof HTMLCanvasElement)) {
|
|
78686
|
+
return;
|
|
78687
|
+
}
|
|
78688
|
+
event.preventDefault();
|
|
78689
|
+
this._rightClickEvent.emit(this.createPointerEventFromMouseEvent(event));
|
|
78690
|
+
};
|
|
78772
78691
|
const { zoom, heading, tilt } = options;
|
|
78773
78692
|
const { center: center3, defaultLevelId } = context;
|
|
78774
78693
|
this._context = context;
|
|
78694
|
+
this._htmlElement = htmlElement;
|
|
78775
78695
|
this._levelId = defaultLevelId;
|
|
78776
78696
|
this._viewState = {
|
|
78777
78697
|
zoom: zoom ?? DEFAULT_ZOOM,
|
|
@@ -78800,6 +78720,8 @@ var MapOverlay = class _MapOverlay {
|
|
|
78800
78720
|
this._initializedEvent.emit();
|
|
78801
78721
|
}
|
|
78802
78722
|
});
|
|
78723
|
+
this._htmlElement.addEventListener("dblclick", this.onDoubleClick, true);
|
|
78724
|
+
this._htmlElement.addEventListener("contextmenu", this.onRightClick, true);
|
|
78803
78725
|
}
|
|
78804
78726
|
// #region Private methods
|
|
78805
78727
|
/**
|
|
@@ -78820,6 +78742,21 @@ var MapOverlay = class _MapOverlay {
|
|
|
78820
78742
|
rebuildLayers() {
|
|
78821
78743
|
this._deck.setProps({ layers: this.createLayers() });
|
|
78822
78744
|
}
|
|
78745
|
+
createPointerEventFromMouseEvent(event) {
|
|
78746
|
+
const bounds = this._htmlElement.getBoundingClientRect();
|
|
78747
|
+
const x2 = event.clientX - bounds.left;
|
|
78748
|
+
const y2 = event.clientY - bounds.top;
|
|
78749
|
+
const viewport = this._deck.getViewports()?.[0];
|
|
78750
|
+
const [lng, lat] = viewport ? viewport.unproject([x2, y2]) : [this.getCenter().lng, this.getCenter().lat];
|
|
78751
|
+
const picked = this._deck.pickObject({ x: x2, y: y2 })?.object;
|
|
78752
|
+
return {
|
|
78753
|
+
lat,
|
|
78754
|
+
lng,
|
|
78755
|
+
x: lng,
|
|
78756
|
+
y: lat,
|
|
78757
|
+
shape: picked?.groupId ? this._shapes.find((shape) => shape.id === picked.groupId) : void 0
|
|
78758
|
+
};
|
|
78759
|
+
}
|
|
78823
78760
|
/**
|
|
78824
78761
|
* Handle the click event.
|
|
78825
78762
|
*/
|
|
@@ -78899,6 +78836,8 @@ var MapOverlay = class _MapOverlay {
|
|
|
78899
78836
|
this.finalize();
|
|
78900
78837
|
}
|
|
78901
78838
|
finalize() {
|
|
78839
|
+
this._htmlElement.removeEventListener("dblclick", this.onDoubleClick, true);
|
|
78840
|
+
this._htmlElement.removeEventListener("contextmenu", this.onRightClick, true);
|
|
78902
78841
|
this._deck.finalize();
|
|
78903
78842
|
}
|
|
78904
78843
|
//#region Getters and Setters
|
|
@@ -79008,6 +78947,12 @@ var MapOverlay = class _MapOverlay {
|
|
|
79008
78947
|
click() {
|
|
79009
78948
|
return this._clickEvent;
|
|
79010
78949
|
}
|
|
78950
|
+
doubleClick() {
|
|
78951
|
+
return this._doubleClickEvent;
|
|
78952
|
+
}
|
|
78953
|
+
rightClick() {
|
|
78954
|
+
return this._rightClickEvent;
|
|
78955
|
+
}
|
|
79011
78956
|
//#endregion
|
|
79012
78957
|
//#endregion
|
|
79013
78958
|
};
|