osmgl 0.7.1 → 0.7.3

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/osmgl.d.cts CHANGED
@@ -1780,25 +1780,43 @@ interface ErrorResponse {
1780
1780
  }
1781
1781
  type WorkerResponse = LoadedResponse | ErrorResponse;
1782
1782
 
1783
- /**
1784
- * Пул воркеров с round-robin раздачей.
1785
- *
1786
- * Если бандл воркера недоступен (dev из исходников, запрет Blob-воркеров политикой
1787
- * CSP), пул честно работает в главном потоке: карта тормозит на разборе, но не падает.
1788
- */
1789
1783
  declare class WorkerPool {
1790
1784
  private workers;
1791
1785
  private blobUrl;
1792
1786
  private pending;
1787
+ private queue;
1788
+ /** Сколько задач сейчас у каждого воркера. */
1789
+ private busy;
1793
1790
  private nextId;
1794
- private cursor;
1795
1791
  private mainThreadAborts;
1796
1792
  private destroyed;
1797
1793
  readonly usingWorkers: boolean;
1798
1794
  constructor(size?: number);
1799
1795
  get size(): number;
1800
- /** Ставит тайл в очередь. Возвращает id — им же и отменяют. */
1801
- load(req: Omit<LoadRequest, 'type' | 'id'>, onDone: (res: WorkerResponse) => void): number;
1796
+ /**
1797
+ * Ставит тайл в очередь. Возвращает id — им же и отменяют.
1798
+ *
1799
+ * `priority` — чем меньше, тем раньше. Порядок постановки значения не имеет: очередь разбирается
1800
+ * по важности, а не по времени (см. [[pump]]).
1801
+ */
1802
+ load(req: Omit<LoadRequest, 'type' | 'id'>, onDone: (res: WorkerResponse) => void, priority?: number): number;
1803
+ /**
1804
+ * Раздаёт задачи наименее загруженному воркеру, пока у него меньше PER_WORKER задач.
1805
+ *
1806
+ * Почему НЕ по одной. Освобождает воркера главный поток — он получает ответ и отправляет
1807
+ * следующую задачу. Значит при одной задаче на воркера пропускная способность упирается в
1808
+ * главный поток: пока он занят кадром (или притормаживается в скрытой вкладке), воркеры стоят.
1809
+ * Второй задачи в запасе хватает, чтобы работа не прерывалась, и при этом неотменяемыми
1810
+ * оказываются лишь единицы задач вместо трёхсот.
1811
+ *
1812
+ * ПОРЯДОК — ПО ВАЖНОСТИ, А НЕ ПО ОЧЕРЕДИ. На широком экране одно движение камеры ставит триста
1813
+ * с лишним тайлов на семь источников, и в порядке поступления полсотни тайлов самой карты
1814
+ * оказывались перемешаны с двумя с половиной сотнями пробок, точек и размещений: карта под
1815
+ * курсором ждала, пока разберут декор на другом краю кадра. Важность считает источник — она
1816
+ * складывается из его ранга и расстояния до камеры, так что первой приезжает основа в середине
1817
+ * экрана. Выбор минимума перебором: очередь живёт сотнями записей, куча тут не окупается.
1818
+ */
1819
+ private pump;
1802
1820
  abort(id: number): void;
1803
1821
  private onMessage;
1804
1822
  private disposeWorkers;
@@ -1968,6 +1986,14 @@ interface TileSourceOptions extends CoverOptions {
1968
1986
  plan: LayerPlan[];
1969
1987
  /** Сколько тайлов держать в кеше сверх видимых. */
1970
1988
  cacheSize?: number;
1989
+ /**
1990
+ * Важность источника в общей очереди воркеров: 0 — основа карты, дальше по убыванию.
1991
+ *
1992
+ * Пул один на все источники, и на широком экране пробки с размещениями ставят в него вчетверо
1993
+ * больше тайлов, чем сама карта. Ранг решает, кого разбирать первым. По умолчанию 1 — «поверх
1994
+ * основы».
1995
+ */
1996
+ rank?: number;
1971
1997
  }
1972
1998
  interface TileSourceEvents extends Record<string, unknown> {
1973
1999
  /** Пришли новые данные — надо перерисовать кадр. */
@@ -1984,8 +2010,6 @@ declare class TileSource extends Evented<TileSourceEvents> {
1984
2010
  private pool;
1985
2011
  private cache;
1986
2012
  private visible;
1987
- /** Момент, с которого держим прежний набор вместо нового. 0 — не держим. */
1988
- private holdSince;
1989
2013
  /** Показывали ли уже готовую картину. См. [[warm]]. */
1990
2014
  private warmed;
1991
2015
  /**
@@ -2022,6 +2046,28 @@ declare class TileSource extends Evented<TileSourceEvents> {
2022
2046
  get pendingCount(): number;
2023
2047
  /** Пересчитывает видимый набор под текущую камеру и запускает недостающие загрузки. */
2024
2048
  update(tr: Transform): void;
2049
+ /**
2050
+ * Покрытие из ГОТОВЫХ тайлов: где нужного ещё нет, его место занимает загруженный предок.
2051
+ *
2052
+ * Предок покрывает весь свой квадрат, поэтому подменять им один тайл, оставив рядом второй,
2053
+ * значит закрасить это место дважды — полупрозрачный слой там лёг бы вдвое плотнее. Значит
2054
+ * квадрат берётся целиком, и отсюда главное ограничение: предок годится, только если под ним
2055
+ * НЕТ НИ ОДНОЙ уже готовой цели. Иначе подмена не добавляла бы картинку, а стирала — грубый
2056
+ * предок уносил с собой всю подробность на своей площади, и дальний план пустел. Проверено.
2057
+ */
2058
+ private coverFor;
2059
+ /**
2060
+ * Готовые потомки целей — по одному проходу ПО КЕШУ, а не перебором дерева вниз.
2061
+ *
2062
+ * Перебор вниз стоит четыре тайла на уровень, шестнадцать на два, шестьдесят четыре на три — и
2063
+ * всё равно упирается в свою глубину: после отдаления на пять зумов загруженное лежит ещё ниже,
2064
+ * и до него так не достать. Проход по кешу дешевле (в нём сотни тайлов, а не тысячи гипотез) и
2065
+ * глубиной не ограничен вовсе.
2066
+ *
2067
+ * Потомки безопасны без оговорок: они лежат ВНУТРИ своей цели, рисовать которую всё равно нечем,
2068
+ * и не пересекаются между собой.
2069
+ */
2070
+ private descendantsOf;
2025
2071
  /**
2026
2072
  * Есть ли в наборе хоть один готовый тайл.
2027
2073
  *
@@ -2038,6 +2084,16 @@ declare class TileSource extends Evented<TileSourceEvents> {
2038
2084
  * нельзя: за краем кадра его просто не существует, и мы показали бы пустоту вместо загрузки.
2039
2085
  */
2040
2086
  private covers;
2087
+ /**
2088
+ * Источник никто не рисует: снять загрузки и очистить видимый набор.
2089
+ *
2090
+ * Набор считался и качался всегда, даже когда ни один его слой на этом зуме не показывают. На
2091
+ * широком экране это давало полторы сотни тайлов размещений на зуме, где 3D-объектов ещё нет
2092
+ * вовсе, и столько же выключенных пробок — и всё это стояло в очереди перед самой картой.
2093
+ * Загруженное остаётся в кеше: вернуться в свой диапазон зума источник должен без повторной
2094
+ * загрузки.
2095
+ */
2096
+ deactivate(): void;
2041
2097
  private loadTile;
2042
2098
  /**
2043
2099
  * Готовый предок для тайла, который ещё грузится — чтобы на его месте не зияла
@@ -4294,6 +4350,14 @@ interface QualityProfile {
4294
4350
  simpleGeometry: boolean;
4295
4351
  }
4296
4352
  declare const qualityProfile: (name: QualityName) => QualityProfile;
4353
+ /**
4354
+ * Класс GPU по строке рендерера.
4355
+ *
4356
+ * `unknown` — не признак слабости, а честное «не знаем»: Safari отдаёт всем одну и ту же строку,
4357
+ * Firefox её огрубляет, а Tor и Brave в строгом режиме не отдают вовсе. Поэтому неизвестность НЕ
4358
+ * должна ничего решать — она просто оставляет вывод за остальными признаками.
4359
+ */
4360
+ type GpuClass = 'software' | 'weak' | 'strong' | 'unknown';
4297
4361
  /** То, из чего делается вывод. Вынесено в аргумент, чтобы это можно было проверить тестом. */
4298
4362
  interface DeviceHints {
4299
4363
  /** Число логических ядер (`navigator.hardwareConcurrency`). */
@@ -4303,7 +4367,22 @@ interface DeviceHints {
4303
4367
  /** Мобильное устройство: грубый указатель или явный признак от браузера. */
4304
4368
  mobile: boolean;
4305
4369
  devicePixelRatio: number;
4370
+ /** Класс видеокарты по строке рендерера, если её удалось прочитать. */
4371
+ gpu?: GpuClass;
4306
4372
  }
4373
+ /**
4374
+ * Класс GPU по строке `UNMASKED_RENDERER_WEBGL`.
4375
+ *
4376
+ * Ровно тот же приём, на котором стоит `detect-gpu`: строка рендерера — единственное, что браузер
4377
+ * говорит о видеокарте, не заставляя ничего рисовать. Полноценная база моделей с замерами (как у
4378
+ * `detect-gpu`) сюда не поместится и устареет, поэтому распознаём только то, что решает исход:
4379
+ * программный растеризатор, заведомо слабое встроенное видео и заведомо сильные дискретные чипы.
4380
+ * Всё остальное — `unknown`, и решают ядра с памятью.
4381
+ *
4382
+ * Мерить бенчмарком на старте по-прежнему нельзя: это сотни миллисекунд ровно там, где важна первая
4383
+ * отрисовка. Строка бесплатна.
4384
+ */
4385
+ declare function classifyRenderer(renderer: string): GpuClass;
4307
4386
  /**
4308
4387
  * Профиль по признакам устройства.
4309
4388
  *
@@ -4325,6 +4404,101 @@ declare function deviceHints(): DeviceHints;
4325
4404
  declare function clampPixelRatio(cssWidth: number, cssHeight: number, devicePixelRatio: number, profile: QualityProfile): number;
4326
4405
  /** Следующий профиль вниз или null, если ниже некуда. */
4327
4406
  declare function nextQualityDown(name: QualityName): QualityName | null;
4407
+ /** Решение контроллера: на какую ступень перейти и в какую сторону. */
4408
+ interface QualityChange {
4409
+ to: QualityName;
4410
+ direction: 'up' | 'down';
4411
+ /** Доля тяжёлых кадров, на которой решение принято, — для сообщения в консоль. */
4412
+ share: number;
4413
+ }
4414
+ /**
4415
+ * Кто решает, менять ли ступень качества.
4416
+ *
4417
+ * ЗАЧЕМ ОТДЕЛЬНЫМ КЛАССОМ. Логика тут вся в состоянии — окно кадров, счётчики попыток, прогрев, —
4418
+ * и ошибка в ней не падает, а проявляется миганием теней у пользователя. Отдельно её видно и можно
4419
+ * проверить тестом, подавая кадры прямо (см. `tests/quality.test.mjs`).
4420
+ *
4421
+ * УСТРОЙСТВО. Вниз — быстро и по доле тяжёлых кадров: тормоза видно сразу. Вверх — медленно, с
4422
+ * ГИСТЕРЕЗИСОМ (порог подъёма на порядок ниже порога спуска) и с ХРАПОВИКОМ: каждая неудачная
4423
+ * попытка удваивает требуемое время спокойствия, а после второй ступень закрывается насовсем.
4424
+ * Именно храповик даёт главное свойство — качели ГАРАНТИРОВАННО затухают, а не ходят вечно.
4425
+ *
4426
+ * Так же устроены адаптивные масштабы разрешения в игровых движках: гистерезис против дребезга и
4427
+ * ограниченное число проб вверх, чтобы «подкачка» качества не стала заметной сама по себе.
4428
+ */
4429
+ declare class QualityGovernor {
4430
+ private current;
4431
+ private ceiling;
4432
+ /** Кадр дольше этого — тяжёлый. */
4433
+ private readonly slowMs;
4434
+ /** Кадр дольше этого весит втрое: сотня миллисекунд — это не «немного не успели». */
4435
+ private readonly verySlowMs;
4436
+ private ring;
4437
+ private at;
4438
+ private sum;
4439
+ private filled;
4440
+ /** Кадров подряд на текущей ступени (после прогрева). */
4441
+ private steady;
4442
+ private warmup;
4443
+ /** Неудачные попытки подъёма на ступень: имя → сколько раз сорвались. */
4444
+ private attempts;
4445
+ /** Пришли ли мы на текущую ступень подъёмом — только такой срыв считается неудачей. */
4446
+ private arrivedByUp;
4447
+ /** Последние измерения — запасная оценка шага развёртки. См. [[threshold]]. */
4448
+ private recent;
4449
+ private recentAt;
4450
+ private recentFilled;
4451
+ /** Измеренный шаг развёртки экрана, мс. Ноль — не измерен. */
4452
+ private refreshMs;
4453
+ constructor(current: QualityName, ceiling: QualityName,
4454
+ /** Кадр дольше этого — тяжёлый. */
4455
+ slowMs: number,
4456
+ /** Кадр дольше этого весит втрое: сотня миллисекунд — это не «немного не успели». */
4457
+ verySlowMs: number);
4458
+ /** Потолок, до которого разрешено подниматься сейчас. Опускается сам, когда ступень не даётся. */
4459
+ get limit(): QualityName;
4460
+ /** Сменили ступень снаружи (`setQuality`) — начать наблюдение заново. */
4461
+ reset(current: QualityName, ceiling: QualityName): void;
4462
+ /**
4463
+ * Очередной кадр. `busy` — едут ли тайлы: пока едут, кадры не считаются вовсе.
4464
+ *
4465
+ * Зум и панорама всегда дают всплеск — приезжают и разбираются новые тайлы, — и на нём порог
4466
+ * набирался за пару секунд у любой карты. Мерить надо УСТОЯВШУЮСЯ стоимость, а не стоимость
4467
+ * загрузки.
4468
+ */
4469
+ frame(frameMs: number, busy: boolean): QualityChange | null;
4470
+ /**
4471
+ * Порог «тяжёлого кадра» с поправкой на ЭКРАН.
4472
+ *
4473
+ * Мерой служит интервал между кадрами, а порог был жёсткий — 32 мс, «медленнее тридцати в
4474
+ * секунду». Но тридцать в секунду бывает и потолком САМОГО экрана: развёртка 30 Гц, режим
4475
+ * энергосбережения, композитор, ограничивший вкладку. Там интервал ровно 33 мс не потому, что
4476
+ * карта не успевает, а потому, что чаще показывать некуда, — и здоровая машина уезжала до
4477
+ * `minimal`, а на границе порога ещё и раскачивалась. Проверено: на широком окне шаг оказался
4478
+ * ровно 33 мс, и профиль сходил на три ступени за шесть секунд.
4479
+ *
4480
+ * Шаг развёртки берём ИЗМЕРЕННЫЙ (`setRefresh`), а не выведенный из тех же кадров. Вывод по
4481
+ * минимуму здесь принципиально неоднозначен: машина, ровно пригвождённая к 40 мс, неотличима от
4482
+ * экрана на 25 Гц — в обоих случаях все интервалы одинаковы. Разводит их только замер на ПУСТЫХ
4483
+ * кадрах в начале жизни карты, когда рисовать ещё нечего и частота кадров равна развёртке.
4484
+ *
4485
+ * Минимум по недавним кадрам остаётся запасным вариантом — на случай, если замер не удался.
4486
+ * Порог ниже исходного не опускается: на экране 120 Гц требовать от карты 120 кадров незачем.
4487
+ */
4488
+ private threshold;
4489
+ /**
4490
+ * Сообщить измеренный шаг развёртки экрана (мс между кадрами при пустой сцене).
4491
+ *
4492
+ * Заведомо неправдоподобное игнорируем: быстрее 240 Гц экранов у нас нет, а всё, что медленнее
4493
+ * 20 кадров в секунду, — это уже не развёртка, а неудавшийся замер.
4494
+ */
4495
+ setRefresh(ms: number): void;
4496
+ private down;
4497
+ private up;
4498
+ private moveTo;
4499
+ /** Забыть накопленное: после смены ступени прежние кадры относятся к другому профилю. */
4500
+ private restart;
4501
+ }
4328
4502
 
4329
4503
  /**
4330
4504
  * Кусок предка, приходящийся на этот тайл: сдвиг и масштаб текстурной
@@ -5478,16 +5652,8 @@ declare class Map$1 extends Evented<MapEvents> {
5478
5652
  * собой заменяли, — см. `setObjects3DEnabled`.
5479
5653
  */
5480
5654
  private objects3dEnabled;
5481
- /** Кадры подряд, не уложившиеся в бюджет, — счётчик для понижения профиля. */
5482
- /** Кольцо весов кадров окна: 0 — уложился, 1 — тяжёлый, 3 — очень тяжёлый. */
5483
- private readonly frameRing;
5484
- private ringAt;
5485
- private ringSum;
5486
- private ringFilled;
5487
- /** Кадров на текущей ступени — чтобы не проситься выше сразу после смены. */
5488
- private steadyFrames;
5489
- /** Профиль, выбранный по железу: выше него не поднимаемся никогда. */
5490
- private qualityCeiling;
5655
+ /** Кто решает, менять ли ступень качества. Вся логика окна и храповика — в нём. */
5656
+ private governor;
5491
5657
  /** Время прошлого кадра и сколько кадров идёт подряд — для честного замера. */
5492
5658
  private lastFrameAt;
5493
5659
  private continuousFrames;
@@ -5498,6 +5664,19 @@ declare class Map$1 extends Evented<MapEvents> {
5498
5664
  /** Слепок прошлого набора этажей — чтобы не слать событие каждый кадр. */
5499
5665
  private lastIndoorKey;
5500
5666
  constructor(options: MapOptions);
5667
+ /**
5668
+ * Замерить шаг развёртки экрана — по пустым кадрам в самом начале жизни карты.
5669
+ *
5670
+ * Автоснижение судит о тормозах по интервалу между кадрами, и без этого числа сравнивать его не
5671
+ * с чем. Отдельный замер нужен потому, что по рабочим кадрам развёртку не вычислить: экран на
5672
+ * 30 Гц и машина, ровно вдвое не успевающая на 60 Гц, дают одинаковые 33 мс. А вот пока рисовать
5673
+ * нечего — тайлы ещё едут, сцена пуста, — частота кадров равна развёртке, и это тот единственный
5674
+ * момент, когда её видно.
5675
+ *
5676
+ * Обработчик НИЧЕГО не рисует: он только запоминает отметки времени. Своих кадров он не заказывает
5677
+ * сверх этих двенадцати и заканчивается за пятую долю секунды.
5678
+ */
5679
+ private measureRefresh;
5501
5680
  private initGL;
5502
5681
  private initSource;
5503
5682
  /** Имя источника размещений 3D-объектов (если они вообще включены). */
@@ -5513,6 +5692,14 @@ declare class Map$1 extends Evented<MapEvents> {
5513
5692
  * при смене темы, — и забытое место означало бы «объекты пропали после
5514
5693
  * переключения темы».
5515
5694
  */
5695
+ /**
5696
+ * Рисует ли этот набор хоть кто-нибудь на текущем зуме.
5697
+ *
5698
+ * Считаем по СТИЛЮ, а не по плану воркера: план нарочно не знает ни зумов слоя, ни тумблеров
5699
+ * видимости — тайл кешируется один раз и обязан оставаться пригодным на любом зуме. А вот
5700
+ * КАЧАТЬ его, пока ни один слой набора не показывают, смысла нет.
5701
+ */
5702
+ private sourceDrawn;
5516
5703
  private planFor;
5517
5704
  /**
5518
5705
  * Пересчёт детальных 3D-объектов по текущей камере.
@@ -5762,10 +5949,9 @@ declare class Map$1 extends Evented<MapEvents> {
5762
5949
  *
5763
5950
  * Определение по признакам устройства ошибается в обе стороны: телефон с
5764
5951
  * восемью ядрами может нести слабый GPU, а браузер — врать про плотность.
5765
- * Поэтому профиль ещё и проверяется делом. Понижаем только ПОДРЯД идущие
5766
- * тяжёлые кадры: одиночные всплески даёт и сборка мусора, и подъезд тайлов.
5767
- * Обратно вверх не поднимаемся — качели «плохо → хорошо → плохо» заметнее,
5768
- * чем стабильно работающая карта.
5952
+ * Поэтому профиль ещё и проверяется делом. Решение принимает `QualityGovernor` — там же и
5953
+ * защита от качелей: гистерезис, прогрев после смены и храповик на попытки подъёма. Здесь
5954
+ * остаётся только применить решение.
5769
5955
  *
5770
5956
  * ДВА ОГРАНИЧЕНИЯ, без которых от этого механизма больше вреда, чем пользы.
5771
5957
  *
@@ -5773,17 +5959,15 @@ declare class Map$1 extends Evented<MapEvents> {
5773
5959
  * геометрии. Разрешение пользователь видит сразу и целиком: подписи и значки после понижения
5774
5960
  * рисуются в буфер меньше экрана, браузер растягивает его обратно, и карта становится мыльной.
5775
5961
  * Упрощение геометрии отнимает у поверхностей фаску, подъём и скругление — приподнятый газон
5776
- * становится плоским пятном. Обратно вверх мы не поднимаемся, значит и то и другое осталось бы
5777
- * навсегда. Режем РАБОТУ (детализацию, тени, число тайлов и воркеров) — её потерю видно куда
5778
- * меньше. Так же поступают MapLibre и Mapbox: `pixelRatio` у них не адаптивный.
5962
+ * становится плоским пятном. Обратно эти две вещи не поднимаются, значит и то и другое осталось
5963
+ * бы навсегда. Режем РАБОТУ (детализацию, тени, число тайлов и воркеров) — её потерю видно куда
5964
+ * меньше, и она обратима. Так же поступают MapLibre и Mapbox: `pixelRatio` у них не адаптивный.
5779
5965
  *
5780
5966
  * Второе: пока едут тайлы, кадры не считаются вовсе. Зум и панорама всегда
5781
5967
  * дают всплеск — приезжают и разбираются новые тайлы, — и на нём порог
5782
5968
  * набирался за пару секунд у любой карты. Мерить надо УСТОЯВШУЮСЯ стоимость,
5783
5969
  * а не стоимость загрузки.
5784
5970
  */
5785
- /** Забыть накопленное: после смены ступени прежние кадры относятся к другому профилю. */
5786
- private resetFrameWindow;
5787
5971
  private checkFrameBudget;
5788
5972
  getShadows(): ShadowSettings;
5789
5973
  /**
@@ -5921,4 +6105,4 @@ declare class Map$1 extends Evented<MapEvents> {
5921
6105
  destroy(): void;
5922
6106
  }
5923
6107
 
5924
- export { type AnimationOptions, AssetLoader, type AssetLoaderOptions, BASE_SOURCE, BUILDING_HEIGHT_SCALE, BUILDING_POS_SCALE, BUILDING_VERTEX_STRIDE, type BuildingHit, type BuildingsMesh, CITY_STYLE, type CameraOptions, Circle, type CircleOptions, type CoverOptions, DEFAULT_ICONS, DEFAULT_LIGHT, DEFAULT_SHADOWS, DEFAULT_SKY, DEFAULT_STYLE, DepthTarget, type DeviceHints, EARTH_CIRCUMFERENCE, FILL_VERTEX_STRIDE, type Filter, type FitBoundsOptions, type FitViewport, type FogPlanes, GLOBE_MAX_PITCH, GLOBE_ZOOM_MAX, GLOBE_ZOOM_MIN, GLYPH_BORDER, GLYPH_SIZE, GROUND_SCALE, GeomType, type GestureOptions, type Glyph, type GlyphMetric, GlyphSource, GroundArrows, IconSource, IndoorMask, type Interpolated, LEVEL_LIMIT, LINE_VERTEX_STRIDE, type LayerPlan, LayerRenderer, type LightSpec, type LinePlacement, type LngLat, LngLatBounds, type LngLatLike, MAX_LATITUDE, MODEL_VERTEX_STRIDE, Map$1 as Map, type MapEvents, MapObject, type MapObjectOptions, type MapOptions, Marker, type MarkerOptions, Model, ModelLayer, type ModelMesh, type ModelOptions, type ModelPrimitive, ObjectManager, type ObjectPaint, type ObjectPart, type Padding, type PlacedGlyph, type PlacedSymbol, Polygon, type PolygonOptions, Polyline, type PolylineOptions, type PolylineSegment, Popup, type PopupOptions, type Projection, type QualityName, type QualityProfile, RELIEF_STYLE, RUNTIME_FILL_STRIDE, RUNTIME_LINE_STRIDE, RasterSource, type RasterSourceOptions, RasterTile, type RoundOptions, type RuntimeMesh, SDF_EDGE, SDF_PX, SOFT_STYLE, SPLIT_SEP, SURFACE_CUT_BLEED, SURFACE_LEVEL_SCALE, SURFACE_VERTEX_STRIDE, type ScreenPoint$1 as ScreenPoint, SdfAtlas, type ShadowSettings, type SkySpec, Style, type StyleLayerSpec, type StyleSpec, type SymbolHit, SymbolRenderer, THEMES, TILE_SIZE, type ThemeSpec, TileID, Transform, VectorTile, VectorTileFeature, VectorTileLayer, abbreviateStreet, addGround, altitudeFromMercatorZ, applyTheme, arrowLabelOffset, arrowVertices, buildRuntimeFill, buildRuntimeLine, cameraForBounds, circumferenceAtLatitude, clampLat, clampPixelRatio, clipLineToRect, coordinateDigits, coveringTiles, createGround, Map$1 as default, deviceHints, distToSegment, evaluateColor, evaluateNumber, extractFeature, featureLevel, fillFootprint, fogPlanes, footprintOf, formatHash, generateBuildings, generateFill, generateLine, generateSurface, generateSymbols, globeBasis, globeFlatMix, globeRadius, globeToLocal, groundAt, iconRotation, insideFootprint, latFromMercatorY, lngFromMercatorX, lngLatToUnit, matchesFilter, mercatorMetersPerTile, mercatorX, mercatorY, mercatorZFromAltitude, metersPerPixel, metersPerTile, nextQualityDown, parseGlb, parseGlbAsync, parseGlyphs, parseHash, patchUV, pickBuilding, pickFill, pitchIntent, pixelsPerMeter, placeAlongLine, pointInRing, qualityFor, qualityProfile, raySphere, resolveTemplate, roundRing, sdfFromAlpha, shapeText, splitBucketKey, splitByGround, splitPolygons, styleWithTheme, tileOriginMeters, tileUrl, toLngLat, unitToLngLat, worldSize };
6108
+ export { type AnimationOptions, AssetLoader, type AssetLoaderOptions, BASE_SOURCE, BUILDING_HEIGHT_SCALE, BUILDING_POS_SCALE, BUILDING_VERTEX_STRIDE, type BuildingHit, type BuildingsMesh, CITY_STYLE, type CameraOptions, Circle, type CircleOptions, type CoverOptions, DEFAULT_ICONS, DEFAULT_LIGHT, DEFAULT_SHADOWS, DEFAULT_SKY, DEFAULT_STYLE, DepthTarget, type DeviceHints, EARTH_CIRCUMFERENCE, FILL_VERTEX_STRIDE, type Filter, type FitBoundsOptions, type FitViewport, type FogPlanes, GLOBE_MAX_PITCH, GLOBE_ZOOM_MAX, GLOBE_ZOOM_MIN, GLYPH_BORDER, GLYPH_SIZE, GROUND_SCALE, GeomType, type GestureOptions, type Glyph, type GlyphMetric, GlyphSource, type GpuClass, GroundArrows, IconSource, IndoorMask, type Interpolated, LEVEL_LIMIT, LINE_VERTEX_STRIDE, type LayerPlan, LayerRenderer, type LightSpec, type LinePlacement, type LngLat, LngLatBounds, type LngLatLike, MAX_LATITUDE, MODEL_VERTEX_STRIDE, Map$1 as Map, type MapEvents, MapObject, type MapObjectOptions, type MapOptions, Marker, type MarkerOptions, Model, ModelLayer, type ModelMesh, type ModelOptions, type ModelPrimitive, ObjectManager, type ObjectPaint, type ObjectPart, type Padding, type PlacedGlyph, type PlacedSymbol, Polygon, type PolygonOptions, Polyline, type PolylineOptions, type PolylineSegment, Popup, type PopupOptions, type Projection, type QualityChange, QualityGovernor, type QualityName, type QualityProfile, RELIEF_STYLE, RUNTIME_FILL_STRIDE, RUNTIME_LINE_STRIDE, RasterSource, type RasterSourceOptions, RasterTile, type RoundOptions, type RuntimeMesh, SDF_EDGE, SDF_PX, SOFT_STYLE, SPLIT_SEP, SURFACE_CUT_BLEED, SURFACE_LEVEL_SCALE, SURFACE_VERTEX_STRIDE, type ScreenPoint$1 as ScreenPoint, SdfAtlas, type ShadowSettings, type SkySpec, Style, type StyleLayerSpec, type StyleSpec, type SymbolHit, SymbolRenderer, THEMES, TILE_SIZE, type ThemeSpec, TileID, Transform, VectorTile, VectorTileFeature, VectorTileLayer, abbreviateStreet, addGround, altitudeFromMercatorZ, applyTheme, arrowLabelOffset, arrowVertices, buildRuntimeFill, buildRuntimeLine, cameraForBounds, circumferenceAtLatitude, clampLat, clampPixelRatio, classifyRenderer, clipLineToRect, coordinateDigits, coveringTiles, createGround, Map$1 as default, deviceHints, distToSegment, evaluateColor, evaluateNumber, extractFeature, featureLevel, fillFootprint, fogPlanes, footprintOf, formatHash, generateBuildings, generateFill, generateLine, generateSurface, generateSymbols, globeBasis, globeFlatMix, globeRadius, globeToLocal, groundAt, iconRotation, insideFootprint, latFromMercatorY, lngFromMercatorX, lngLatToUnit, matchesFilter, mercatorMetersPerTile, mercatorX, mercatorY, mercatorZFromAltitude, metersPerPixel, metersPerTile, nextQualityDown, parseGlb, parseGlbAsync, parseGlyphs, parseHash, patchUV, pickBuilding, pickFill, pitchIntent, pixelsPerMeter, placeAlongLine, pointInRing, qualityFor, qualityProfile, raySphere, resolveTemplate, roundRing, sdfFromAlpha, shapeText, splitBucketKey, splitByGround, splitPolygons, styleWithTheme, tileOriginMeters, tileUrl, toLngLat, unitToLngLat, worldSize };