aur-openlayers 19.6.11 → 19.6.12

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.
@@ -422,6 +422,32 @@ export interface PopupHostApi {
422
422
  /** Освободить ресурсы и отписки. */
423
423
  dispose: () => void;
424
424
  }
425
+ /**
426
+ * Опции экспорта текущего вида карты в растр.
427
+ */
428
+ export type MapExportImageOptions = {
429
+ /**
430
+ * Целевой пиксельный размер результата [width, height].
431
+ * Это и есть размер итогового изображения; OL рендерит карту под него.
432
+ */
433
+ size: [width: number, height: number];
434
+ /** Формат вывода. По умолчанию 'image/png'. */
435
+ format?: 'image/png' | 'image/jpeg';
436
+ /** Качество JPEG 0..1 (игнорируется для png). По умолчанию 0.92. */
437
+ quality?: number;
438
+ /**
439
+ * Фон, заливается ПОД слоями. Нужен для jpeg (нет альфы) и прозрачных зазоров.
440
+ * По умолчанию: не заливать (прозрачный для png).
441
+ */
442
+ background?: string;
443
+ /**
444
+ * Какую область рендерить:
445
+ * - 'currentExtent' (по умолчанию): текущий экстент вписывается (`view.fit`)
446
+ * в целевой размер — соотношение сторон адаптируется под бокс;
447
+ * - 'currentResolution': сохраняются текущие resolution и center.
448
+ */
449
+ fit?: 'currentExtent' | 'currentResolution';
450
+ };
425
451
  /**
426
452
  * Минимальный контекст, доступный обработчикам взаимодействий.
427
453
  *
@@ -443,6 +469,19 @@ export type MapContext = {
443
469
  centerOnAllLayers: (opts?: ViewFitOptions) => void;
444
470
  /** Центрирует карту на указанных слоях (скрытые пропускаются). No-op если нет фич. */
445
471
  centerOnLayers: (layerIds: ReadonlyArray<string>, opts?: ViewFitOptions) => void;
472
+ /**
473
+ * Снять текущий вид ЭТОЙ карты в растровое изображение целевого размера.
474
+ * Композит ограничен canvas'ами собственного `map.getViewport()`.
475
+ * Внутри: resize → fit → ожидание rendercomplete → композит → restore.
476
+ * Параллельные вызовы сериализуются.
477
+ * @returns Promise<dataURL>
478
+ * @remarks Ограничения:
479
+ * - Растровые источники должны быть CORS-доступны: tainted-canvas делает
480
+ * `toDataURL` недоступным и выбрасывает `SecurityError`.
481
+ * - В момент снимка карта кратковременно (≥1 кадр) перерисовывается на
482
+ * экране под целевой размер/экстент и восстанавливается — видимый скачок ожидаем.
483
+ */
484
+ exportImage: (options: MapExportImageOptions) => Promise<string>;
446
485
  };
447
486
  /**
448
487
  * Контроллер, который связывается с контекстом карты.
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Опции композита вида карты.
3
+ */
4
+ export type CompositeOptions = {
5
+ /** Фон, заливается ПОД слоями (для jpeg / прозрачных зазоров тайлов). `undefined` и `''` — не заливать. */
6
+ background?: string;
7
+ };
8
+ /**
9
+ * Композитит canvas'ы ОДНОГО viewport карты в офскрин-canvas заданного размера.
10
+ *
11
+ * Берёт только `.ol-layer canvas` внутри переданного `viewport` (а не из всего
12
+ * документа), применяя per-canvas `opacity` родителя и матрицу `style.transform`
13
+ * по образцу официального примера экспорта OpenLayers. Размер результата всегда
14
+ * равен `[width, height]`; high-DPR backing слоёв ужимается в него через матрицу.
15
+ */
16
+ export declare function compositeViewport(viewport: HTMLElement, [width, height]: [number, number], opts?: CompositeOptions): HTMLCanvasElement;
@@ -0,0 +1,15 @@
1
+ import type OlMap from 'ol/Map';
2
+ import type { MapExportImageOptions } from '../../public/types';
3
+ /**
4
+ * Создаёт функцию `exportImage` для конкретной карты.
5
+ *
6
+ * Параллельные вызовы сериализуются (общий мутируемый `map`): каждый следующий
7
+ * экспорт стартует только после завершения предыдущего. Цикл одного экспорта:
8
+ * snapshot → setSize → fit → ожидание `rendercomplete` → композит → restore.
9
+ *
10
+ * Инвариант: подписка `map.once('rendercomplete')` и последующие
11
+ * `setSize`/`fit`/`render` выполняются синхронно (никаких `await` до подписки),
12
+ * иначе следующий экспорт мог бы поймать `rendercomplete` от restore-рендера
13
+ * предыдущего.
14
+ */
15
+ export declare function createExportImage(map: OlMap): (options: MapExportImageOptions) => Promise<string>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aur-openlayers",
3
- "version": "19.6.11",
3
+ "version": "19.6.12",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.0",
6
6
  "@angular/core": "^19.2.0",