mahal_map 2.0.3 → 2.1.0

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
@@ -13,7 +13,7 @@ npm install mahal_map maplibre-gl @grammaps/maps3d-web
13
13
  Обе зависимости — `peerDependencies`, в бандл `mahal_map` они не входят. Библиотека их не импортирует: MapLibre и `Maps3D` приходят снаружи, аргументами `create()` либо через `window`.
14
14
 
15
15
  - `maplibre-gl` (`^6.10.0`) — обязателен всегда.
16
- - `@grammaps/maps3d-web` (>=0.5.0) — даёт стили, тайлы, объём, пробки, рельеф, планы этажей, клик по объектам. Помечен `optional`: без него карта поднимется на запасном векторном стиле, но 3D и слоёв платформы на ней не будет.
16
+ - `@grammaps/maps3d-web` (>=0.5.0; рекомендуется 0.8.0 — в ней наведение на здание и починенный пикинг клика) — даёт стили, тайлы, объём, пробки, рельеф, планы этажей, клик по объектам. Помечен `optional`: без него карта поднимется на запасном векторном стиле, но 3D и слоёв платформы на ней не будет.
17
17
 
18
18
  MapLibre можно не класть в свою сборку вовсе — платформа отдаёт согласованную версию вместе с веб-воркером:
19
19
 
@@ -334,11 +334,14 @@ MahalMap.create(
334
334
 
335
335
  Поля независимы, и это главная ловушка реестра:
336
336
 
337
- | Поле | Вопрос |
338
- | ----------- | ---------------------------- |
339
- | `wanted` | чего хочет приложение |
340
- | `available` | что позволяют стиль и данные |
341
- | `active` | что нарисовано прямо сейчас |
337
+ | Поле | Вопрос |
338
+ | ----------- | ------------------------------------------------- |
339
+ | `wanted` | чего хочет приложение |
340
+ | `available` | что позволяют стиль и данные |
341
+ | `active` | что нарисовано прямо сейчас (память SDK) |
342
+ | `rendered` | факт со стороны карты: слой есть в стиле и не погашен |
343
+
344
+ `rendered` появилось в Maps3D 0.8.0; у сборок постарше его нет (`undefined`). Расхождение `active !== rendered` означает, что внутренний признак SDK разошёлся с картой — это видно одной проверкой, без чтения минифицированной сборки.
342
345
 
343
346
  Слой может быть включён и при этом не нарисован — и это не ошибка:
344
347
 
@@ -506,6 +509,55 @@ map.setSelectionStyle({ color: "#e23b2f" });
506
509
  map.toggle3DBuildings(true); // подписка и стиль выделения уже применены к новому слою
507
510
  ```
508
511
 
512
+ ### Наведение на здание
513
+
514
+ Требует `@grammaps/maps3d-web` **0.8.0** и старше. Подсветку и курсор рисует сам SDK — приложение задаёт облик и получает уведомления.
515
+
516
+ ```ts
517
+ map.setHoverStyle({ color: "#6b9ed1", opacity: 0.3, cursor: "pointer" });
518
+
519
+ map.onBuildingHover((building) => {
520
+ if (!building) return; // курсор ушёл с домов
521
+ console.log(building.props.osm_id, building.height);
522
+ });
523
+ ```
524
+
525
+ Колбэк приходит **только в момент смены** дома под курсором, а не на каждое движение мыши.
526
+
527
+ Слежение включается самой подпиской: пока `onBuildingHover` не вызван, SDK курсор не трогает и сцену не разбирает. `onBuildingHover(null)` отписывает и гасит подсветку.
528
+
529
+ | Метод | Описание |
530
+ | --- | --- |
531
+ | `onBuildingHover(cb \| null)` | Подписка на наведение; `null` отписывает и гасит подсветку. |
532
+ | `setHoverStyle(s)` | Облик: `color`, `opacity`, `glow`, `durationMs`, `easing`, `cursor`. `cursor: null` — не трогать курсор. |
533
+ | `setHoverEnabled(on)` | Вкл/выкл наведение, не трогая подписку. |
534
+ | `hoverEnabled` | Включено ли наведение сейчас. |
535
+ | `hoverBuilding(id \| null)` | Навести программно — например, с наведения на строку списка. `false` — дома нет на карте. |
536
+ | `hoveredBuilding()` | Идентификатор дома под наведением или `null`. |
537
+
538
+ Слот наведения свой, отдельный от выделения: **выбор всегда главнее**, и на выбранном доме наведение не рисуется. Занимать `setSelectionStyle` ради подсветки под курсором, как приходилось до 0.8.0, больше не нужно.
539
+
540
+ #### Наведение с элементов интерфейса
541
+
542
+ Курсор стоит на строке списка, а не на карте:
543
+
544
+ ```ts
545
+ row.addEventListener("mouseenter", () => map.hoverBuilding(row.dataset.osmId!));
546
+ row.addEventListener("mouseleave", () => map.hoverBuilding(null));
547
+ ```
548
+
549
+ Следующее движение мыши по карте перебивает программное наведение — слежение владеет слотом, пока включено.
550
+
551
+ #### Где наведение выключают
552
+
553
+ Там, где подсветка мешает: режим рисования на карте, открытая карточка объекта, тач-устройство без курсора.
554
+
555
+ ```ts
556
+ map.setHoverEnabled(false); // подписка сохраняется
557
+ ```
558
+
559
+ Цену ограничивает сам SDK: разбор не чаще раза в кадр, пропускается во время движения карты и не трогает сцену, пока курсор на том же доме. Но разбор — это чтение пикселя обратно из GPU, поэтому на слабых устройствах наведение лучше не включать.
560
+
509
561
  #### Вкл/выкл 3D-здания на лету
510
562
 
511
563
  Переключение объём ⇄ штатные здания стиля, без пересоздания карты. Умеет поднять слой, если его не было (`enable3D: false` при создании):
@@ -1123,6 +1175,13 @@ MahalMap.clearSelection(map);
1123
1175
  MahalMap.onRoadClick(map, (road) => console.log(road?.name));
1124
1176
  MahalMap.roadAt(map, { x: 320, y: 240 });
1125
1177
 
1178
+ // Наведение на здание (Maps3D 0.8.0)
1179
+ MahalMap.onBuildingHover(map, (b) => console.log(b?.id));
1180
+ MahalMap.setHoverStyle(map, { color: "#6b9ed1", cursor: "pointer" });
1181
+ MahalMap.setHoverEnabled(map, false);
1182
+ MahalMap.hoverBuilding(map, 123456789);
1183
+ MahalMap.hoveredBuilding(map);
1184
+
1126
1185
  MahalMap.destroy(map);
1127
1186
  ```
1128
1187
 
@@ -1180,6 +1239,11 @@ MahalMap.setZoom(map, 14);
1180
1239
  | `setSelectionStyle(instance, style)` | Облик выделения. |
1181
1240
  | `onRoadClick(instance, callback)` | Клик по дороге. |
1182
1241
  | `roadAt(instance, point, tolPx?)` | Дорога под точкой холста. |
1242
+ | `onBuildingHover(instance, cb)` | Подписка на наведение (Maps3D 0.8.0); `null` отписывает. |
1243
+ | `setHoverStyle(instance, style)` | Облик наведения, включая CSS-курсор. |
1244
+ | `setHoverEnabled(instance, on)` | Вкл/выкл наведение, не трогая подписку. |
1245
+ | `hoverBuilding(instance, id)` | Навести на здание программно; `null` снимает. |
1246
+ | `hoveredBuilding(instance)` | Дом под наведением или `null`. |
1183
1247
  | `destroy(instance)` | Полностью удаляет карту. |
1184
1248
  | `loadKeyFromScriptUrl()` | Читает `apikey` из URL SDK скрипта. |
1185
1249
  | `loadLanguageFromScriptUrl()` | Читает `lang` из URL SDK скрипта. |
package/dist/index.d.mts CHANGED
@@ -91,6 +91,12 @@ interface IMaps3DLayerState {
91
91
  available: boolean;
92
92
  /** Что нарисовано прямо сейчас. Именно это поле показывает, включён слой на деле или нет. */
93
93
  active: boolean;
94
+ /**
95
+ * Факт со стороны карты: слой есть в стиле и не погашен. Появилось в 0.8.0.
96
+ * `active !== rendered` — расхождение внутреннего признака SDK с картой.
97
+ * У слоя, который не умеет ответить фактом, повторяет `active`; у сборок до 0.8.0 — undefined.
98
+ */
99
+ rendered?: boolean;
94
100
  /** Параметры слоя: у зданий — detail, у этажей — level, у рельефа — mode. */
95
101
  params: Record<string, unknown>;
96
102
  }
@@ -101,6 +107,15 @@ interface IMaps3DSelectionStyle {
101
107
  durationMs?: number;
102
108
  easing?: "ease-out" | "linear";
103
109
  }
110
+ /**
111
+ * Облик наведения. Появился в 0.8.0: до него подсветить дом под курсором можно было,
112
+ * только заняв единственный слот выделения. Теперь слот свой, и выбор всегда главнее —
113
+ * на выбранном доме наведение не рисуется.
114
+ */
115
+ interface IMaps3DHoverStyle extends IMaps3DSelectionStyle {
116
+ /** CSS-курсор над зданием. По умолчанию "pointer"; `null` — не трогать курсор вовсе. */
117
+ cursor?: string | null;
118
+ }
104
119
  interface IMaps3DRoadHit {
105
120
  name: string;
106
121
  nameRu?: string;
@@ -213,6 +228,12 @@ interface IMaps3DLayer {
213
228
  clearSelection?(): void;
214
229
  selectedBuilding?(): number | string | null;
215
230
  setSelectionStyle?(style: IMaps3DSelectionStyle): void;
231
+ onBuildingHover?(callback: ((info: IMaps3DBuildingClickInfo | null) => void) | null): void;
232
+ setHoverEnabled?(enabled: boolean): void;
233
+ readonly hoverEnabled?: boolean;
234
+ setHoverStyle?(style: IMaps3DHoverStyle): void;
235
+ hoverBuilding?(id: number | string | null): boolean;
236
+ hoveredBuilding?(): number | string | null;
216
237
  onRoadClick?(callback: (hit: IMaps3DRoadHit | null) => void): void;
217
238
  roadAt?(point: {
218
239
  x: number;
@@ -468,6 +489,9 @@ declare class MahalMap {
468
489
  private pendingRoadClick?;
469
490
  private pendingSelectionStyle?;
470
491
  private pendingLayerSubscribers;
492
+ private pendingBuildingHover?;
493
+ private pendingHoverStyle?;
494
+ private pendingHoverEnabled?;
471
495
  private constructor();
472
496
  private static getInstanceKey;
473
497
  private static normalizeLanguage;
@@ -540,6 +564,11 @@ declare class MahalMap {
540
564
  x: number;
541
565
  y: number;
542
566
  }, tolerancePx?: number): IMaps3DRoadHit | null;
567
+ static onBuildingHover(instance: MahalMap, callback: ((info: IMaps3DBuildingClickInfo | null) => void) | null): void;
568
+ static setHoverEnabled(instance: MahalMap, enabled: boolean): void;
569
+ static setHoverStyle(instance: MahalMap, style: IMaps3DHoverStyle): void;
570
+ static hoverBuilding(instance: MahalMap, id: number | string | null): boolean;
571
+ static hoveredBuilding(instance: MahalMap): string | number | null;
543
572
  static setLanguage(instance: MahalMap, lang: MapLanguage): void;
544
573
  static setCenter(instance: MahalMap, center: [number, number]): void;
545
574
  static setZoom(instance: MahalMap, zoom: number): void;
@@ -641,6 +670,34 @@ declare class MahalMap {
641
670
  }, tolerancePx?: number): IMaps3DRoadHit | null;
642
671
  /** Есть ли в текущем стиле названия дорог. Нет — roadAt() всегда вернёт null. */
643
672
  get roadsNamed(): boolean;
673
+ /**
674
+ * Подписаться на наведение. Колбэк приходит только в момент смены дома под курсором,
675
+ * а не на каждое движение мыши. `null` отписывает и гасит подсветку.
676
+ *
677
+ * Слежение за мышью включается самой подпиской: без неё SDK курсор не трогает и
678
+ * разбор сцены не делает.
679
+ */
680
+ onBuildingHover(callback: ((info: IMaps3DBuildingClickInfo | null) => void) | null): void;
681
+ /**
682
+ * Включить/выключить наведение, не трогая подписку. Нужно там, где подсветка мешает:
683
+ * режим рисования, открытая карточка объекта, тач-устройство без курсора.
684
+ */
685
+ setHoverEnabled(enabled: boolean): void;
686
+ /** Включено ли наведение прямо сейчас. */
687
+ get hoverEnabled(): boolean;
688
+ /** Облик наведения: цвет, плотность, свечение, длительность и CSS-курсор. */
689
+ setHoverStyle(style: IMaps3DHoverStyle): void;
690
+ /**
691
+ * Навести на здание программно — например, когда курсор стоит на строке списка.
692
+ * Идентификатор тот же, что у selectBuilding. `null` снимает наведение.
693
+ *
694
+ * Следующее движение мыши по карте перебивает программное наведение.
695
+ *
696
+ * @returns `false`, если такого дома сейчас на карте нет.
697
+ */
698
+ hoverBuilding(id: number | string | null): boolean;
699
+ /** Идентификатор дома под наведением или `null`. */
700
+ hoveredBuilding(): number | string | null;
644
701
  /**
645
702
  * Создаёт слой Maps3D. `buildings` не форсируем в `true`: с 0.7.x видимостью объёма
646
703
  * заведует реестр слоёв, а опции облика зданий приходят из options.maps3d как есть.
@@ -959,4 +1016,4 @@ declare namespace index {
959
1016
  export { index_checkCoordinates as checkCoordinates, index_debounce as debounce, index_geojsonPolyline as geojsonPolyline, index_geometryPolyline as geometryPolyline, index_trimValue as trimValue };
960
1017
  }
961
1018
 
962
- export { CheckJSApi, type IAdditionalParamType, type ICheckJSApiParam, type ICheckJSApiResponse, type IMahalMapOptions, type IMapMarker, type IMaps3DBuildingClickInfo, type IMaps3DBuildingsController, type IMaps3DBuildingsOptions, type IMaps3DClosuresOptions, type IMaps3DDiagnostics, type IMaps3DIndoorOptions, type IMaps3DLayer, type IMaps3DLayerOptions, type IMaps3DLayerParams, type IMaps3DLayerState, type IMaps3DMapOptionsInput, type IMaps3DMapOptionsResult, type IMaps3DObjectsLightOptions, type IMaps3DPlacesOptions, type IMaps3DRoadHit, type IMaps3DSelectionStyle, type IMaps3DTrafficOptions, type IMaps3DTransformRequestOptions, type IResponse, type IRoute, type ISearchByLocationParam, type ISearchParam, type ISearchResponse, MahalMap, MahalMapDefaultMarker, type MahalMapDefaultMarkerProps, type MapEngine, type MapLanguage, type MapStyleFamily, type Maps3DBuildingDetail, type Maps3DCtor, type Maps3DLayerId, type Maps3DTerrainMode, type Maps3DThemeName, type Maps3DTransformRequest, type MeasureIcons, type MeasureLabels, type MeasureMode, type MeasurePoint, type MeasureShape, type MeasureState, type MeasureStyleOptions, MeasureTool, type MeasureToolOptions, Router, Search, SearchByLocation, SearchPoi, type Theme, index$2 as keyUtils, index$1 as measureUtils, index as utils };
1019
+ export { CheckJSApi, type IAdditionalParamType, type ICheckJSApiParam, type ICheckJSApiResponse, type IMahalMapOptions, type IMapMarker, type IMaps3DBuildingClickInfo, type IMaps3DBuildingsController, type IMaps3DBuildingsOptions, type IMaps3DClosuresOptions, type IMaps3DDiagnostics, type IMaps3DHoverStyle, type IMaps3DIndoorOptions, type IMaps3DLayer, type IMaps3DLayerOptions, type IMaps3DLayerParams, type IMaps3DLayerState, type IMaps3DMapOptionsInput, type IMaps3DMapOptionsResult, type IMaps3DObjectsLightOptions, type IMaps3DPlacesOptions, type IMaps3DRoadHit, type IMaps3DSelectionStyle, type IMaps3DTrafficOptions, type IMaps3DTransformRequestOptions, type IResponse, type IRoute, type ISearchByLocationParam, type ISearchParam, type ISearchResponse, MahalMap, MahalMapDefaultMarker, type MahalMapDefaultMarkerProps, type MapEngine, type MapLanguage, type MapStyleFamily, type Maps3DBuildingDetail, type Maps3DCtor, type Maps3DLayerId, type Maps3DTerrainMode, type Maps3DThemeName, type Maps3DTransformRequest, type MeasureIcons, type MeasureLabels, type MeasureMode, type MeasurePoint, type MeasureShape, type MeasureState, type MeasureStyleOptions, MeasureTool, type MeasureToolOptions, Router, Search, SearchByLocation, SearchPoi, type Theme, index$2 as keyUtils, index$1 as measureUtils, index as utils };
package/dist/index.d.ts CHANGED
@@ -91,6 +91,12 @@ interface IMaps3DLayerState {
91
91
  available: boolean;
92
92
  /** Что нарисовано прямо сейчас. Именно это поле показывает, включён слой на деле или нет. */
93
93
  active: boolean;
94
+ /**
95
+ * Факт со стороны карты: слой есть в стиле и не погашен. Появилось в 0.8.0.
96
+ * `active !== rendered` — расхождение внутреннего признака SDK с картой.
97
+ * У слоя, который не умеет ответить фактом, повторяет `active`; у сборок до 0.8.0 — undefined.
98
+ */
99
+ rendered?: boolean;
94
100
  /** Параметры слоя: у зданий — detail, у этажей — level, у рельефа — mode. */
95
101
  params: Record<string, unknown>;
96
102
  }
@@ -101,6 +107,15 @@ interface IMaps3DSelectionStyle {
101
107
  durationMs?: number;
102
108
  easing?: "ease-out" | "linear";
103
109
  }
110
+ /**
111
+ * Облик наведения. Появился в 0.8.0: до него подсветить дом под курсором можно было,
112
+ * только заняв единственный слот выделения. Теперь слот свой, и выбор всегда главнее —
113
+ * на выбранном доме наведение не рисуется.
114
+ */
115
+ interface IMaps3DHoverStyle extends IMaps3DSelectionStyle {
116
+ /** CSS-курсор над зданием. По умолчанию "pointer"; `null` — не трогать курсор вовсе. */
117
+ cursor?: string | null;
118
+ }
104
119
  interface IMaps3DRoadHit {
105
120
  name: string;
106
121
  nameRu?: string;
@@ -213,6 +228,12 @@ interface IMaps3DLayer {
213
228
  clearSelection?(): void;
214
229
  selectedBuilding?(): number | string | null;
215
230
  setSelectionStyle?(style: IMaps3DSelectionStyle): void;
231
+ onBuildingHover?(callback: ((info: IMaps3DBuildingClickInfo | null) => void) | null): void;
232
+ setHoverEnabled?(enabled: boolean): void;
233
+ readonly hoverEnabled?: boolean;
234
+ setHoverStyle?(style: IMaps3DHoverStyle): void;
235
+ hoverBuilding?(id: number | string | null): boolean;
236
+ hoveredBuilding?(): number | string | null;
216
237
  onRoadClick?(callback: (hit: IMaps3DRoadHit | null) => void): void;
217
238
  roadAt?(point: {
218
239
  x: number;
@@ -468,6 +489,9 @@ declare class MahalMap {
468
489
  private pendingRoadClick?;
469
490
  private pendingSelectionStyle?;
470
491
  private pendingLayerSubscribers;
492
+ private pendingBuildingHover?;
493
+ private pendingHoverStyle?;
494
+ private pendingHoverEnabled?;
471
495
  private constructor();
472
496
  private static getInstanceKey;
473
497
  private static normalizeLanguage;
@@ -540,6 +564,11 @@ declare class MahalMap {
540
564
  x: number;
541
565
  y: number;
542
566
  }, tolerancePx?: number): IMaps3DRoadHit | null;
567
+ static onBuildingHover(instance: MahalMap, callback: ((info: IMaps3DBuildingClickInfo | null) => void) | null): void;
568
+ static setHoverEnabled(instance: MahalMap, enabled: boolean): void;
569
+ static setHoverStyle(instance: MahalMap, style: IMaps3DHoverStyle): void;
570
+ static hoverBuilding(instance: MahalMap, id: number | string | null): boolean;
571
+ static hoveredBuilding(instance: MahalMap): string | number | null;
543
572
  static setLanguage(instance: MahalMap, lang: MapLanguage): void;
544
573
  static setCenter(instance: MahalMap, center: [number, number]): void;
545
574
  static setZoom(instance: MahalMap, zoom: number): void;
@@ -641,6 +670,34 @@ declare class MahalMap {
641
670
  }, tolerancePx?: number): IMaps3DRoadHit | null;
642
671
  /** Есть ли в текущем стиле названия дорог. Нет — roadAt() всегда вернёт null. */
643
672
  get roadsNamed(): boolean;
673
+ /**
674
+ * Подписаться на наведение. Колбэк приходит только в момент смены дома под курсором,
675
+ * а не на каждое движение мыши. `null` отписывает и гасит подсветку.
676
+ *
677
+ * Слежение за мышью включается самой подпиской: без неё SDK курсор не трогает и
678
+ * разбор сцены не делает.
679
+ */
680
+ onBuildingHover(callback: ((info: IMaps3DBuildingClickInfo | null) => void) | null): void;
681
+ /**
682
+ * Включить/выключить наведение, не трогая подписку. Нужно там, где подсветка мешает:
683
+ * режим рисования, открытая карточка объекта, тач-устройство без курсора.
684
+ */
685
+ setHoverEnabled(enabled: boolean): void;
686
+ /** Включено ли наведение прямо сейчас. */
687
+ get hoverEnabled(): boolean;
688
+ /** Облик наведения: цвет, плотность, свечение, длительность и CSS-курсор. */
689
+ setHoverStyle(style: IMaps3DHoverStyle): void;
690
+ /**
691
+ * Навести на здание программно — например, когда курсор стоит на строке списка.
692
+ * Идентификатор тот же, что у selectBuilding. `null` снимает наведение.
693
+ *
694
+ * Следующее движение мыши по карте перебивает программное наведение.
695
+ *
696
+ * @returns `false`, если такого дома сейчас на карте нет.
697
+ */
698
+ hoverBuilding(id: number | string | null): boolean;
699
+ /** Идентификатор дома под наведением или `null`. */
700
+ hoveredBuilding(): number | string | null;
644
701
  /**
645
702
  * Создаёт слой Maps3D. `buildings` не форсируем в `true`: с 0.7.x видимостью объёма
646
703
  * заведует реестр слоёв, а опции облика зданий приходят из options.maps3d как есть.
@@ -959,4 +1016,4 @@ declare namespace index {
959
1016
  export { index_checkCoordinates as checkCoordinates, index_debounce as debounce, index_geojsonPolyline as geojsonPolyline, index_geometryPolyline as geometryPolyline, index_trimValue as trimValue };
960
1017
  }
961
1018
 
962
- export { CheckJSApi, type IAdditionalParamType, type ICheckJSApiParam, type ICheckJSApiResponse, type IMahalMapOptions, type IMapMarker, type IMaps3DBuildingClickInfo, type IMaps3DBuildingsController, type IMaps3DBuildingsOptions, type IMaps3DClosuresOptions, type IMaps3DDiagnostics, type IMaps3DIndoorOptions, type IMaps3DLayer, type IMaps3DLayerOptions, type IMaps3DLayerParams, type IMaps3DLayerState, type IMaps3DMapOptionsInput, type IMaps3DMapOptionsResult, type IMaps3DObjectsLightOptions, type IMaps3DPlacesOptions, type IMaps3DRoadHit, type IMaps3DSelectionStyle, type IMaps3DTrafficOptions, type IMaps3DTransformRequestOptions, type IResponse, type IRoute, type ISearchByLocationParam, type ISearchParam, type ISearchResponse, MahalMap, MahalMapDefaultMarker, type MahalMapDefaultMarkerProps, type MapEngine, type MapLanguage, type MapStyleFamily, type Maps3DBuildingDetail, type Maps3DCtor, type Maps3DLayerId, type Maps3DTerrainMode, type Maps3DThemeName, type Maps3DTransformRequest, type MeasureIcons, type MeasureLabels, type MeasureMode, type MeasurePoint, type MeasureShape, type MeasureState, type MeasureStyleOptions, MeasureTool, type MeasureToolOptions, Router, Search, SearchByLocation, SearchPoi, type Theme, index$2 as keyUtils, index$1 as measureUtils, index as utils };
1019
+ export { CheckJSApi, type IAdditionalParamType, type ICheckJSApiParam, type ICheckJSApiResponse, type IMahalMapOptions, type IMapMarker, type IMaps3DBuildingClickInfo, type IMaps3DBuildingsController, type IMaps3DBuildingsOptions, type IMaps3DClosuresOptions, type IMaps3DDiagnostics, type IMaps3DHoverStyle, type IMaps3DIndoorOptions, type IMaps3DLayer, type IMaps3DLayerOptions, type IMaps3DLayerParams, type IMaps3DLayerState, type IMaps3DMapOptionsInput, type IMaps3DMapOptionsResult, type IMaps3DObjectsLightOptions, type IMaps3DPlacesOptions, type IMaps3DRoadHit, type IMaps3DSelectionStyle, type IMaps3DTrafficOptions, type IMaps3DTransformRequestOptions, type IResponse, type IRoute, type ISearchByLocationParam, type ISearchParam, type ISearchResponse, MahalMap, MahalMapDefaultMarker, type MahalMapDefaultMarkerProps, type MapEngine, type MapLanguage, type MapStyleFamily, type Maps3DBuildingDetail, type Maps3DCtor, type Maps3DLayerId, type Maps3DTerrainMode, type Maps3DThemeName, type Maps3DTransformRequest, type MeasureIcons, type MeasureLabels, type MeasureMode, type MeasurePoint, type MeasureShape, type MeasureState, type MeasureStyleOptions, MeasureTool, type MeasureToolOptions, Router, Search, SearchByLocation, SearchPoi, type Theme, index$2 as keyUtils, index$1 as measureUtils, index as utils };