venue-js 1.2.0-next.8 → 1.2.0-next.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -3,9 +3,10 @@ export { QueryObserver } from '@tanstack/query-core';
3
3
  import * as geojson from 'geojson';
4
4
  import { Position, Geometry, GeoJsonProperties, Feature, Point, Polygon, MultiPolygon, LineString, GeometryCollection } from 'geojson';
5
5
  import * as maptalks_dist_core_Class from 'maptalks/dist/core/Class';
6
- import * as maptalks from 'maptalks-gl';
6
+ import * as maptalks$1 from 'maptalks-gl';
7
7
  import { Map } from 'maptalks-gl';
8
8
  import { BaseObject, ThreeLayer } from 'maptalks.three';
9
+ import * as maptalks from 'maptalks';
9
10
  import { Extent, Coordinate, Marker, ui, LineString as LineString$1, Polygon as Polygon$1, MultiPolygon as MultiPolygon$1, MultiLineString } from 'maptalks';
10
11
  import { BaseObjectOptionType, ExtrudePolygonOptionType } from 'maptalks.three/dist/type';
11
12
  import { PolygonOptionsType } from 'maptalks/dist/geometry/Polygon';
@@ -796,6 +797,7 @@ type TextMarkerOptions = BaseObjectOptionType & {
796
797
  };
797
798
 
798
799
  type Stop = [zoom: number, value: number];
800
+ type MapElement = maptalks.Geometry | BaseObject;
799
801
  /** 2D */
800
802
  type TypeRenderOptions<TOptionsType> = {
801
803
  default: TOptionsType;
@@ -829,12 +831,15 @@ type RendererManagerOptions = BaseRenderManagerOptions & {
829
831
  type: "3D";
830
832
  elements: Element3DRendererOptions;
831
833
  };
834
+ type HighlightElementOptions = {
835
+ reset: boolean;
836
+ };
832
837
 
833
838
  type AnyMarkerOptions = TextMarkerOptions;
834
839
 
835
840
  declare class RendererManager extends EventTarget {
836
841
  #private;
837
- map: maptalks.Map;
842
+ map: maptalks$1.Map;
838
843
  options: RendererManagerOptions;
839
844
  /** Elements: Responsible for converting feature info elements and add to map */
840
845
  private elementRenderer;
@@ -844,16 +849,21 @@ declare class RendererManager extends EventTarget {
844
849
  private currentOrdinals;
845
850
  private markersMap;
846
851
  private markersByOrdinal;
847
- constructor(map: maptalks.Map, dataClient: VenueDataClient, options: RendererManagerOptions);
848
- getElementsByOrdinal: (ordinal: number) => BaseObject[] | maptalks.Geometry[];
849
- getMarkersByOrdinal: (ordinal: number) => BaseObject[] | maptalks.ui.UIMarker[];
852
+ private highlightControllers;
853
+ constructor(map: maptalks$1.Map, dataClient: VenueDataClient, options: RendererManagerOptions);
854
+ set onClickElement(func: any);
855
+ handleClickElement: (e: any) => void;
856
+ getElementsByOrdinal: (ordinal: number) => MapElement[];
850
857
  addElementsToManager: (id: any, elements: any, ordinal: any) => void;
851
- addMarkersToManager: (id: any, markers: any, ordinal: any) => void;
852
858
  changeLevelByOrdinal(targetOrdinal: null | number | number[]): void;
859
+ highlightElements: (elemIds: string[], options?: HighlightElementOptions) => void;
860
+ clearHighlightElements: () => void;
853
861
  /**
854
862
  * ========================================================================
855
863
  * Markers
856
864
  * ======================================================================== */
865
+ _getMarkersByOrdinal: (ordinal: number) => BaseObject[] | maptalks$1.ui.UIMarker[];
866
+ _addMarkersToManager: (id: any, markers: any, ordinal: any) => void;
857
867
  createMarker(coordinate: Position, ordinal: number, text: string, options: AnyMarkerOptions): void;
858
868
  clearMarkers(): void;
859
869
  }
package/dist/index.d.ts CHANGED
@@ -3,9 +3,10 @@ export { QueryObserver } from '@tanstack/query-core';
3
3
  import * as geojson from 'geojson';
4
4
  import { Position, Geometry, GeoJsonProperties, Feature, Point, Polygon, MultiPolygon, LineString, GeometryCollection } from 'geojson';
5
5
  import * as maptalks_dist_core_Class from 'maptalks/dist/core/Class';
6
- import * as maptalks from 'maptalks-gl';
6
+ import * as maptalks$1 from 'maptalks-gl';
7
7
  import { Map } from 'maptalks-gl';
8
8
  import { BaseObject, ThreeLayer } from 'maptalks.three';
9
+ import * as maptalks from 'maptalks';
9
10
  import { Extent, Coordinate, Marker, ui, LineString as LineString$1, Polygon as Polygon$1, MultiPolygon as MultiPolygon$1, MultiLineString } from 'maptalks';
10
11
  import { BaseObjectOptionType, ExtrudePolygonOptionType } from 'maptalks.three/dist/type';
11
12
  import { PolygonOptionsType } from 'maptalks/dist/geometry/Polygon';
@@ -796,6 +797,7 @@ type TextMarkerOptions = BaseObjectOptionType & {
796
797
  };
797
798
 
798
799
  type Stop = [zoom: number, value: number];
800
+ type MapElement = maptalks.Geometry | BaseObject;
799
801
  /** 2D */
800
802
  type TypeRenderOptions<TOptionsType> = {
801
803
  default: TOptionsType;
@@ -829,12 +831,15 @@ type RendererManagerOptions = BaseRenderManagerOptions & {
829
831
  type: "3D";
830
832
  elements: Element3DRendererOptions;
831
833
  };
834
+ type HighlightElementOptions = {
835
+ reset: boolean;
836
+ };
832
837
 
833
838
  type AnyMarkerOptions = TextMarkerOptions;
834
839
 
835
840
  declare class RendererManager extends EventTarget {
836
841
  #private;
837
- map: maptalks.Map;
842
+ map: maptalks$1.Map;
838
843
  options: RendererManagerOptions;
839
844
  /** Elements: Responsible for converting feature info elements and add to map */
840
845
  private elementRenderer;
@@ -844,16 +849,21 @@ declare class RendererManager extends EventTarget {
844
849
  private currentOrdinals;
845
850
  private markersMap;
846
851
  private markersByOrdinal;
847
- constructor(map: maptalks.Map, dataClient: VenueDataClient, options: RendererManagerOptions);
848
- getElementsByOrdinal: (ordinal: number) => BaseObject[] | maptalks.Geometry[];
849
- getMarkersByOrdinal: (ordinal: number) => BaseObject[] | maptalks.ui.UIMarker[];
852
+ private highlightControllers;
853
+ constructor(map: maptalks$1.Map, dataClient: VenueDataClient, options: RendererManagerOptions);
854
+ set onClickElement(func: any);
855
+ handleClickElement: (e: any) => void;
856
+ getElementsByOrdinal: (ordinal: number) => MapElement[];
850
857
  addElementsToManager: (id: any, elements: any, ordinal: any) => void;
851
- addMarkersToManager: (id: any, markers: any, ordinal: any) => void;
852
858
  changeLevelByOrdinal(targetOrdinal: null | number | number[]): void;
859
+ highlightElements: (elemIds: string[], options?: HighlightElementOptions) => void;
860
+ clearHighlightElements: () => void;
853
861
  /**
854
862
  * ========================================================================
855
863
  * Markers
856
864
  * ======================================================================== */
865
+ _getMarkersByOrdinal: (ordinal: number) => BaseObject[] | maptalks$1.ui.UIMarker[];
866
+ _addMarkersToManager: (id: any, markers: any, ordinal: any) => void;
857
867
  createMarker(coordinate: Position, ordinal: number, text: string, options: AnyMarkerOptions): void;
858
868
  clearMarkers(): void;
859
869
  }
package/dist/index.js CHANGED
@@ -853,7 +853,7 @@ function isNumber(num) {
853
853
  var import_distance = __toESM(require("@turf/distance"));
854
854
  var import_center4 = __toESM(require("@turf/center"));
855
855
  var import_three7 = require("three");
856
- var import_maptalks9 = require("maptalks.three");
856
+ var import_maptalks10 = require("maptalks.three");
857
857
 
858
858
  // src/IndoorMap/constants.ts
859
859
  var defaultLayerOption = { enableAltitude: true };
@@ -3153,6 +3153,7 @@ var CameraManager = class {
3153
3153
  };
3154
3154
 
3155
3155
  // src/IndoorMap/renderer/RendererManager.ts
3156
+ var import_isFunction = __toESM(require("lodash/isFunction"));
3156
3157
  var import_min = __toESM(require("lodash/min"));
3157
3158
  var import_center3 = require("@turf/center");
3158
3159
  var THREE3 = __toESM(require("three"));
@@ -3160,6 +3161,7 @@ var THREE3 = __toESM(require("three"));
3160
3161
  // src/IndoorMap/renderer/3d/Element3DRenderer.ts
3161
3162
  var maptalks4 = __toESM(require("maptalks-gl"));
3162
3163
  var THREE = __toESM(require("three"));
3164
+ var import_maptalks7 = require("maptalks.three");
3163
3165
  var import_buffer2 = __toESM(require("@turf/buffer"));
3164
3166
 
3165
3167
  // src/IndoorMap/renderer/3d/element3DRendererOptions.ts
@@ -3210,6 +3212,7 @@ var Element3DRenderer = class extends EventTarget {
3210
3212
  map;
3211
3213
  gltfLayer;
3212
3214
  threeLayer;
3215
+ scene;
3213
3216
  // private dracoLoader: DRACOLoader
3214
3217
  lineMaterial;
3215
3218
  materialByColorMap;
@@ -3341,6 +3344,9 @@ var Element3DRenderer = class extends EventTarget {
3341
3344
  treeMarker.addTo(this.gltfLayer);
3342
3345
  return treeMarker;
3343
3346
  }
3347
+ async createBuilding(coordinate, ordinal) {
3348
+ return Promise.resolve(null);
3349
+ }
3344
3350
  createElement(f) {
3345
3351
  switch (f.feature_type) {
3346
3352
  default:
@@ -3362,6 +3368,34 @@ var Element3DRenderer = class extends EventTarget {
3362
3368
  }
3363
3369
  });
3364
3370
  }
3371
+ createHighlightController(element) {
3372
+ if (!(element instanceof import_maptalks7.BaseObject)) {
3373
+ return null;
3374
+ }
3375
+ switch (element.type) {
3376
+ case "ExtrudePolygon": {
3377
+ const mesh = element.getObject3d();
3378
+ const originalMaterial = mesh.material;
3379
+ const highlightMaterial = this.getOrCreateMaterialByColor("#ff0000");
3380
+ return {
3381
+ start: () => {
3382
+ mesh.material = highlightMaterial;
3383
+ },
3384
+ clear: () => {
3385
+ mesh.material = originalMaterial;
3386
+ }
3387
+ };
3388
+ }
3389
+ default: {
3390
+ return {
3391
+ start() {
3392
+ },
3393
+ clear() {
3394
+ }
3395
+ };
3396
+ }
3397
+ }
3398
+ }
3365
3399
  render() {
3366
3400
  this.threeLayer._needsUpdate = !this.threeLayer._needsUpdate;
3367
3401
  if (this.threeLayer._needsUpdate) {
@@ -3469,7 +3503,10 @@ var Element2DRenderer = class extends EventTarget {
3469
3503
  async createEscalator(f, coordinates) {
3470
3504
  return Promise.resolve(null);
3471
3505
  }
3472
- async createTree(f, coordinates) {
3506
+ async createTree(coordinates) {
3507
+ return Promise.resolve(null);
3508
+ }
3509
+ async createBuilding(coordinate, ordinal) {
3473
3510
  return Promise.resolve(null);
3474
3511
  }
3475
3512
  createElement = (imdfFeature) => {
@@ -3489,6 +3526,15 @@ var Element2DRenderer = class extends EventTarget {
3489
3526
  element.hide();
3490
3527
  });
3491
3528
  }
3529
+ createHighlightController(element) {
3530
+ if (!(element instanceof maptalks5.Geometry)) return null;
3531
+ return {
3532
+ start() {
3533
+ },
3534
+ clear() {
3535
+ }
3536
+ };
3537
+ }
3492
3538
  };
3493
3539
 
3494
3540
  // src/IndoorMap/renderer/2d/Marker2DRenderer.ts
@@ -3524,9 +3570,9 @@ var Marker2DRenderer = class extends EventTarget {
3524
3570
  var maptalks7 = __toESM(require("maptalks-gl"));
3525
3571
 
3526
3572
  // src/IndoorMap/renderer/3d/objects/TextSpriteMarker.ts
3527
- var import_maptalks7 = require("maptalks");
3573
+ var import_maptalks8 = require("maptalks");
3528
3574
  var THREE2 = __toESM(require("three"));
3529
- var import_maptalks8 = require("maptalks.three");
3575
+ var import_maptalks9 = require("maptalks.three");
3530
3576
  var import_lodash6 = require("lodash");
3531
3577
 
3532
3578
  // src/IndoorMap/renderer/utils/interpolateStops.ts
@@ -3564,12 +3610,12 @@ var OPTIONS4 = {
3564
3610
  altitude: 0,
3565
3611
  opacity: 1
3566
3612
  };
3567
- var TextSpriteMarker = class extends import_maptalks8.BaseObject {
3613
+ var TextSpriteMarker = class extends import_maptalks9.BaseObject {
3568
3614
  #altitudeOffset = 0;
3569
3615
  constructor(coordinate, options, layer, properties = {}) {
3570
- options = import_maptalks7.Util.extend({}, OPTIONS4, options, { layer });
3616
+ options = import_maptalks8.Util.extend({}, OPTIONS4, options, { layer });
3571
3617
  super();
3572
- this._coordinate = new import_maptalks7.Coordinate(coordinate);
3618
+ this._coordinate = new import_maptalks8.Coordinate(coordinate);
3573
3619
  this._initOptions(options);
3574
3620
  this._createGroup();
3575
3621
  this.properties = { ...properties };
@@ -3832,6 +3878,9 @@ var RendererManager = class extends EventTarget {
3832
3878
  options;
3833
3879
  // Client for fetching data
3834
3880
  #dataClient;
3881
+ #isClicked = false;
3882
+ #onClickElement = (e) => {
3883
+ };
3835
3884
  /** Elements: Responsible for converting feature info elements and add to map */
3836
3885
  elementRenderer;
3837
3886
  markerRenderer;
@@ -3840,6 +3889,7 @@ var RendererManager = class extends EventTarget {
3840
3889
  currentOrdinals;
3841
3890
  markersMap;
3842
3891
  markersByOrdinal;
3892
+ highlightControllers = [];
3843
3893
  constructor(map, dataClient, options) {
3844
3894
  super();
3845
3895
  this.map = map;
@@ -3858,7 +3908,7 @@ var RendererManager = class extends EventTarget {
3858
3908
  scene.add(ambientLight);
3859
3909
  const dirColor = 16777215;
3860
3910
  const dllight = new THREE3.DirectionalLight(dirColor, 0.8);
3861
- dllight.position.set(0, -10, 10).normalize();
3911
+ dllight.position.set(0, -10, 20).normalize();
3862
3912
  scene.add(dllight);
3863
3913
  const hemi = new THREE3.HemisphereLight(16777215, 4473924, 0.4);
3864
3914
  scene.add(hemi);
@@ -3875,19 +3925,27 @@ var RendererManager = class extends EventTarget {
3875
3925
  this.#createElements();
3876
3926
  }
3877
3927
  }
3928
+ set onClickElement(func) {
3929
+ this.#onClickElement = func;
3930
+ }
3931
+ handleClickElement = (e) => {
3932
+ console.log(`handleClickElement`, this.#isClicked);
3933
+ if (this.#isClicked) return;
3934
+ this.#isClicked = true;
3935
+ const onClickElement = this.#onClickElement;
3936
+ if (!(0, import_isFunction.default)(onClickElement)) return;
3937
+ this.#onClickElement(e);
3938
+ this.#isClicked = false;
3939
+ };
3878
3940
  getElementsByOrdinal = (ordinal) => {
3879
3941
  const exist = this.elementsByOrdinal.get(ordinal);
3880
3942
  if (!exist) this.elementsByOrdinal.set(ordinal, []);
3881
3943
  return this.elementsByOrdinal.get(ordinal);
3882
3944
  };
3883
- getMarkersByOrdinal = (ordinal) => {
3884
- const exist = this.markersByOrdinal.get(ordinal);
3885
- if (!exist) this.markersByOrdinal.set(ordinal, []);
3886
- return this.markersByOrdinal.get(ordinal);
3887
- };
3888
3945
  addElementsToManager = (id, elements, ordinal) => {
3889
3946
  this.elementsMap.set(id, elements);
3890
3947
  elements.forEach((el) => {
3948
+ el.on("click", (e) => this.handleClickElement(id));
3891
3949
  this.getElementsByOrdinal(ordinal).push(el);
3892
3950
  });
3893
3951
  const inOrdinal = Array.isArray(this.currentOrdinals) ? this.currentOrdinals.includes(ordinal) : ordinal === this.currentOrdinals;
@@ -3897,18 +3955,6 @@ var RendererManager = class extends EventTarget {
3897
3955
  this.elementRenderer.hideElements(elements, ordinal);
3898
3956
  }
3899
3957
  };
3900
- addMarkersToManager = (id, markers, ordinal) => {
3901
- this.markersMap.set(id, markers);
3902
- markers.forEach((el) => {
3903
- this.getMarkersByOrdinal(ordinal).push(el);
3904
- });
3905
- const inOrdinal = Array.isArray(this.currentOrdinals) ? this.currentOrdinals.includes(ordinal) : ordinal === this.currentOrdinals;
3906
- if (inOrdinal) {
3907
- this.markerRenderer.showMarkers(markers, ordinal);
3908
- } else {
3909
- this.markerRenderer.hideMarkers(markers, ordinal);
3910
- }
3911
- };
3912
3958
  async #createElements() {
3913
3959
  await delay(this.options.delayBeforeCreateElements ?? 0);
3914
3960
  const levels = await this.#dataClient.filterByType("level", {
@@ -4010,14 +4056,48 @@ var RendererManager = class extends EventTarget {
4010
4056
  }
4011
4057
  }
4012
4058
  }
4059
+ highlightElements = (elemIds, options) => {
4060
+ const { reset = true } = options ?? {};
4061
+ if (reset) {
4062
+ this.clearHighlightElements();
4063
+ }
4064
+ const elements = elemIds.map((id) => this.elementsMap.get(id)).flat();
4065
+ elements.forEach((element) => {
4066
+ const controller = this.elementRenderer.createHighlightController(element);
4067
+ controller.start();
4068
+ this.highlightControllers.push(controller);
4069
+ });
4070
+ };
4071
+ clearHighlightElements = () => {
4072
+ this.highlightControllers.forEach((controller) => {
4073
+ if ((0, import_isFunction.default)(controller?.clear)) controller.clear();
4074
+ });
4075
+ };
4013
4076
  /**
4014
4077
  * ========================================================================
4015
4078
  * Markers
4016
4079
  * ======================================================================== */
4080
+ _getMarkersByOrdinal = (ordinal) => {
4081
+ const exist = this.markersByOrdinal.get(ordinal);
4082
+ if (!exist) this.markersByOrdinal.set(ordinal, []);
4083
+ return this.markersByOrdinal.get(ordinal);
4084
+ };
4085
+ _addMarkersToManager = (id, markers, ordinal) => {
4086
+ this.markersMap.set(id, markers);
4087
+ markers.forEach((el) => {
4088
+ this._getMarkersByOrdinal(ordinal).push(el);
4089
+ });
4090
+ const inOrdinal = Array.isArray(this.currentOrdinals) ? this.currentOrdinals.includes(ordinal) : ordinal === this.currentOrdinals;
4091
+ if (inOrdinal) {
4092
+ this.markerRenderer.showMarkers(markers, ordinal);
4093
+ } else {
4094
+ this.markerRenderer.hideMarkers(markers, ordinal);
4095
+ }
4096
+ };
4017
4097
  createMarker(coordinate, ordinal, text, options) {
4018
4098
  const marker = this.markerRenderer.createMarker(coordinate, ordinal, text, options);
4019
4099
  const markerId = `${this.markersMap.size + 1}`;
4020
- this.addMarkersToManager(markerId, [marker], ordinal);
4100
+ this._addMarkersToManager(markerId, [marker], ordinal);
4021
4101
  }
4022
4102
  clearMarkers() {
4023
4103
  for (const [markerId, marker] of this.markersMap) {
@@ -4115,7 +4195,7 @@ var IndoorMap = class extends EventTarget {
4115
4195
  layers: []
4116
4196
  });
4117
4197
  const groupLayer = new import_maptalks_gl.GroupGLLayer("group", [], {}).addTo(this.map);
4118
- const threeLayer = new import_maptalks9.ThreeLayer("three", {
4198
+ const threeLayer = new import_maptalks10.ThreeLayer("three", {
4119
4199
  forceRenderOnMoving: true,
4120
4200
  forceRenderOnRotating: true
4121
4201
  });
@@ -4217,7 +4297,7 @@ var IndoorMap = class extends EventTarget {
4217
4297
  this.map.setDevicePixelRatio(value);
4218
4298
  }
4219
4299
  set onClickElement(func) {
4220
- this.#onClickElement = func;
4300
+ this.rendererManager.onClickElement = func;
4221
4301
  }
4222
4302
  set locale(value) {
4223
4303
  this.#locale = value || defaultOptions.locale;
@@ -4266,7 +4346,6 @@ var IndoorMap = class extends EventTarget {
4266
4346
  } = this.#styler;
4267
4347
  let elements = {};
4268
4348
  let object3ds = [];
4269
- const scene = this.threeLayer.getScene();
4270
4349
  for (const feature2 of this.#features) {
4271
4350
  try {
4272
4351
  const { feature_type: featureType, properties, id } = feature2;