@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 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 installs `@focusbc/bbs-lib` from **npm** (not the local `src/` or `dist/` in this repo) and bundles with esbuild. See [`demo/README.md`](demo/README.md).
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
@@ -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 (production !== "production") {
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
  };