aur-openlayers 0.0.1 → 0.0.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.
|
@@ -728,7 +728,7 @@ class InteractionManager {
|
|
|
728
728
|
return;
|
|
729
729
|
}
|
|
730
730
|
const id = entry.descriptor.feature.id(item.model);
|
|
731
|
-
entry.api.mutate(id, (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, geometry), 'modify');
|
|
731
|
+
entry.api.mutate(id, (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, geometry), { reason: 'modify' });
|
|
732
732
|
});
|
|
733
733
|
});
|
|
734
734
|
if (modify.onEnd) {
|
|
@@ -993,7 +993,7 @@ class InteractionManager {
|
|
|
993
993
|
}
|
|
994
994
|
const translated = geometry.clone();
|
|
995
995
|
translated.translate(delta[0], delta[1]);
|
|
996
|
-
this.runInteractionMutation(() => entry.api.mutate(active.targetKey, (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, translated), 'translate'));
|
|
996
|
+
this.runInteractionMutation(() => entry.api.mutate(active.targetKey, (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, translated), { reason: 'translate' }));
|
|
997
997
|
if (translate.onChange) {
|
|
998
998
|
const translateEvent = this.createTranslateEvent(event, active.startCoordinate, 'translating', [resolved]);
|
|
999
999
|
active.lastHandled = this.isHandled(translate.onChange({ item: resolved, ctx: this.ctx, event: translateEvent }));
|
|
@@ -1015,7 +1015,7 @@ class InteractionManager {
|
|
|
1015
1015
|
return;
|
|
1016
1016
|
}
|
|
1017
1017
|
const nextGeometry = geometry.clone();
|
|
1018
|
-
this.runInteractionMutation(() => entry.api.mutate(active.targetKey, (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, nextGeometry), 'modify'));
|
|
1018
|
+
this.runInteractionMutation(() => entry.api.mutate(active.targetKey, (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, nextGeometry), { reason: 'modify' }));
|
|
1019
1019
|
if (modify.onChange) {
|
|
1020
1020
|
const modifyEvent = this.createModifyEvent(event, 'modifying', [resolved]);
|
|
1021
1021
|
active.lastHandled = this.isHandled(modify.onChange({ item: resolved, ctx: this.ctx, event: modifyEvent }));
|
|
@@ -1612,7 +1612,7 @@ class VectorLayerBase {
|
|
|
1612
1612
|
getModelByFeature(feature) {
|
|
1613
1613
|
return this.registry.getModelByFeature(feature);
|
|
1614
1614
|
}
|
|
1615
|
-
mutate(id, update,
|
|
1615
|
+
mutate(id, update, opts) {
|
|
1616
1616
|
const prev = this.registry.getModel(id);
|
|
1617
1617
|
if (!prev) {
|
|
1618
1618
|
return;
|
|
@@ -1621,13 +1621,17 @@ class VectorLayerBase {
|
|
|
1621
1621
|
if (next === prev) {
|
|
1622
1622
|
return;
|
|
1623
1623
|
}
|
|
1624
|
+
const reason = opts?.reason ?? 'mutate';
|
|
1624
1625
|
this.registry.updateModel(id, next);
|
|
1625
1626
|
this.syncFeatureFromModel(next);
|
|
1626
1627
|
this.scheduleInvalidate();
|
|
1627
|
-
|
|
1628
|
+
if (!opts?.silent) {
|
|
1629
|
+
this.emitModelChanges([{ prev, next, reason }]);
|
|
1630
|
+
}
|
|
1628
1631
|
}
|
|
1629
|
-
mutateMany(ids, update,
|
|
1632
|
+
mutateMany(ids, update, opts) {
|
|
1630
1633
|
const changes = [];
|
|
1634
|
+
const reason = opts?.reason ?? 'mutate';
|
|
1631
1635
|
ids.forEach((id) => {
|
|
1632
1636
|
const prev = this.registry.getModel(id);
|
|
1633
1637
|
if (!prev) {
|
|
@@ -1645,7 +1649,9 @@ class VectorLayerBase {
|
|
|
1645
1649
|
return;
|
|
1646
1650
|
}
|
|
1647
1651
|
this.scheduleInvalidate();
|
|
1648
|
-
|
|
1652
|
+
if (!opts?.silent) {
|
|
1653
|
+
this.emitModelChanges(changes);
|
|
1654
|
+
}
|
|
1649
1655
|
}
|
|
1650
1656
|
onModelsChanged(cb) {
|
|
1651
1657
|
this.changeHandlers.add(cb);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aur-openlayers.mjs","sources":["../../../projects/lib/src/lib/lib.service.ts","../../../projects/lib/src/lib/lib.component.ts","../../../projects/lib/src/lib/map-framework/runtime/scheduler.ts","../../../projects/lib/src/lib/map-framework/runtime/map-context.ts","../../../projects/lib/src/lib/map-framework/runtime/cluster-utils.ts","../../../projects/lib/src/lib/map-framework/runtime/fit-layer.utils.ts","../../../projects/lib/src/lib/map-framework/runtime/style/feature-states.ts","../../../projects/lib/src/lib/map-framework/runtime/interaction-manager.ts","../../../projects/lib/src/lib/map-framework/runtime/style/style-cache.ts","../../../projects/lib/src/lib/map-framework/runtime/style/style-pipeline.ts","../../../projects/lib/src/lib/map-framework/runtime/feature-registry.ts","../../../projects/lib/src/lib/map-framework/runtime/vector-layer-base.ts","../../../projects/lib/src/lib/map-framework/runtime/clustered-layer.ts","../../../projects/lib/src/lib/map-framework/runtime/plain-layer.ts","../../../projects/lib/src/lib/map-framework/runtime/popup-host.ts","../../../projects/lib/src/lib/map-framework/runtime/layer-manager.ts","../../../projects/lib/src/public-api.ts","../../../projects/lib/src/aur-openlayers.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-lib',\r\n imports: [],\r\n template: `\r\n <p>\r\n lib works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class LibComponent {\r\n\r\n}\r\n","import type { BatchOptions, FlushPolicy } from '../public/types';\r\n\r\ntype TaskKey = unknown;\r\n\r\nexport class FlushScheduler {\r\n private readonly queue = new Map<TaskKey, () => void>();\r\n private pendingPolicy: FlushPolicy | null = null;\r\n private scheduledToken = 0;\r\n private rafId: number | null = null;\r\n private batchDepth = 0;\r\n private readonly policyStack: FlushPolicy[] = [];\r\n\r\n constructor(private readonly defaultPolicy: FlushPolicy = 'microtask') {}\r\n\r\n batch(fn: () => void, options?: BatchOptions): void {\r\n if (options?.policy) {\r\n this.policyStack.push(options.policy);\r\n }\r\n this.batchDepth += 1;\r\n try {\r\n fn();\r\n } finally {\r\n this.batchDepth = Math.max(0, this.batchDepth - 1);\r\n if (options?.policy) {\r\n this.policyStack.pop();\r\n }\r\n if (this.batchDepth === 0 && (this.pendingPolicy !== null || this.queue.size > 0)) {\r\n const policy = this.pendingPolicy ?? this.currentPolicy();\r\n this.pendingPolicy = policy;\r\n this.scheduleFlush(policy);\r\n }\r\n }\r\n }\r\n\r\n schedule(key: TaskKey, task: () => void, policy?: FlushPolicy): void {\r\n this.queue.set(key, task);\r\n this.requestFlush(policy);\r\n }\r\n\r\n private requestFlush(policy?: FlushPolicy): void {\r\n const desired = policy ?? this.currentPolicy();\r\n if (this.batchDepth > 0) {\r\n this.pendingPolicy = this.combinePolicies(this.pendingPolicy, desired);\r\n return;\r\n }\r\n\r\n if (this.pendingPolicy) {\r\n if (this.shouldUpgradePolicy(this.pendingPolicy, desired)) {\r\n this.pendingPolicy = desired;\r\n this.scheduleFlush(desired);\r\n }\r\n return;\r\n }\r\n\r\n this.pendingPolicy = desired;\r\n this.scheduleFlush(desired);\r\n }\r\n\r\n private scheduleFlush(policy: FlushPolicy): void {\r\n const token = ++this.scheduledToken;\r\n if (policy === 'raf') {\r\n if (this.rafId !== null) {\r\n cancelAnimationFrame(this.rafId);\r\n }\r\n this.rafId = requestAnimationFrame(() => this.flush('raf', token));\r\n return;\r\n }\r\n\r\n queueMicrotask(() => this.flush('microtask', token));\r\n }\r\n\r\n private flush(policy: FlushPolicy, token: number): void {\r\n if (token !== this.scheduledToken || this.pendingPolicy !== policy) {\r\n return;\r\n }\r\n this.pendingPolicy = null;\r\n if (policy === 'raf') {\r\n this.rafId = null;\r\n }\r\n const tasks = Array.from(this.queue.values());\r\n this.queue.clear();\r\n tasks.forEach((task) => task());\r\n }\r\n\r\n private currentPolicy(): FlushPolicy {\r\n if (this.policyStack.length > 0) {\r\n return this.policyStack[this.policyStack.length - 1];\r\n }\r\n return this.defaultPolicy;\r\n }\r\n\r\n private combinePolicies(\r\n current: FlushPolicy | null,\r\n next: FlushPolicy,\r\n ): FlushPolicy | null {\r\n if (!current) {\r\n return next;\r\n }\r\n return current === 'raf' || next === 'raf' ? 'raf' : 'microtask';\r\n }\r\n\r\n private shouldUpgradePolicy(current: FlushPolicy, next: FlushPolicy): boolean {\r\n return current === 'microtask' && next === 'raf';\r\n }\r\n}\r\n","import type OlMap from 'ol/Map';\r\n\r\nimport type { BatchOptions, MapContext, PopupHostApi, VectorLayerApi } from '../public/types';\r\nimport { FlushScheduler } from './scheduler';\r\n\r\nexport const createMapContext = (\r\n map: OlMap,\r\n layers: Record<string, VectorLayerApi<any, any>>,\r\n popupHost?: PopupHostApi,\r\n scheduler: FlushScheduler = new FlushScheduler(),\r\n): MapContext => {\r\n return {\r\n map,\r\n layers,\r\n popupHost,\r\n batch: (fn: () => void, options?: BatchOptions) => scheduler.batch(fn, options),\r\n };\r\n};\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nconst CLUSTER_FEATURES_KEY = 'features';\r\n\r\nexport const getClusterFeatures = (\r\n feature: Feature<Geometry>,\r\n): Array<Feature<Geometry>> | null => {\r\n const features = feature.get(CLUSTER_FEATURES_KEY);\r\n if (!Array.isArray(features)) {\r\n return null;\r\n }\r\n const items = features.filter((item): item is Feature<Geometry> => {\r\n if (!item || typeof item !== 'object') {\r\n return false;\r\n }\r\n const candidate = item as { get?: unknown; getGeometry?: unknown };\r\n return typeof candidate.get === 'function' && typeof candidate.getGeometry === 'function';\r\n });\r\n if (items.length === 0) {\r\n return null;\r\n }\r\n return items;\r\n};\r\n","import type {ViewFitOptions, ViewFitPadding} from '../public/types';\r\n\r\n/**\r\n * Default padding for View#fit in pixels.\r\n * Order: [top, right, bottom, left]\r\n */\r\nconst DEFAULT_OL_PADDING: [number, number, number, number] = [64, 64, 64, 64];\r\nconst DEFAULT_FIT_DURATION = 500;\r\n\r\nexport function toOlPadding(\r\n p?: ViewFitPadding,\r\n fallback: [number, number, number, number] | undefined = DEFAULT_OL_PADDING,\r\n): [number, number, number, number] | undefined {\r\n if (!p) {\r\n return fallback;\r\n }\r\n\r\n if ('all' in p) {\r\n const a = p.all;\r\n return [a, a, a, a];\r\n }\r\n\r\n if ('vertical' in p && 'horizontal' in p) {\r\n return [p.vertical, p.horizontal, p.vertical, p.horizontal];\r\n }\r\n\r\n return [p.top, p.right, p.bottom, p.left];\r\n}\r\n\r\nexport function toOlFitOptions(opts?: ViewFitOptions) {\r\n const padding = toOlPadding(opts?.padding) ?? DEFAULT_OL_PADDING;\r\n const duration = opts?.duration ?? DEFAULT_FIT_DURATION;\r\n\r\n // OL View#fit options are a plain object; keep it minimal & typed-friendly\r\n const fitOpts: any = {padding, duration};\r\n if (opts?.maxZoom != null) {\r\n fitOpts.maxZoom = opts.maxZoom;\r\n }\r\n return fitOpts;\r\n}\r\n","import type Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nconst STATES_KEY = '__mff_states__';\r\n\r\nexport const getFeatureStates = (feature: Feature<Geometry>): string[] => {\r\n const states = feature.get(STATES_KEY);\r\n if (Array.isArray(states)) {\r\n return states;\r\n }\r\n if (typeof states === 'string') {\r\n return [states];\r\n }\r\n return [];\r\n};\r\n\r\nexport const setFeatureStates = (feature: Feature<Geometry>, states: string[]): void => {\r\n feature.set(STATES_KEY, states);\r\n};\r\n\r\nexport const clearFeatureStates = (feature: Feature<Geometry>): void => {\r\n feature.set(STATES_KEY, []);\r\n};\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport type MapBrowserEvent from 'ol/MapBrowserEvent';\r\nimport type OlMap from 'ol/Map';\r\nimport type VectorLayer from 'ol/layer/Vector';\r\nimport Collection from 'ol/Collection';\r\nimport DragPan from 'ol/interaction/DragPan';\r\nimport Modify from 'ol/interaction/Modify';\r\nimport type { ModifyEvent } from 'ol/interaction/Modify';\r\nimport type { TranslateEvent } from 'ol/interaction/Translate';\r\nimport ClusterSource from 'ol/source/Cluster';\r\nimport type VectorSource from 'ol/source/Vector';\r\nimport type { EventsKey } from 'ol/events';\r\nimport * as Observable from 'ol/Observable';\r\nimport { createEmpty, extend, isEmpty } from 'ol/extent';\r\n\r\nimport type {\r\n FeatureState,\r\n HitItem,\r\n InteractionBase,\r\n InteractionHandlerResult,\r\n MapContext,\r\n MapSchema,\r\n PopupItem,\r\n VectorLayerApi,\r\n VectorLayerDescriptor,\r\n} from '../public/types';\r\nimport { getClusterFeatures } from './cluster-utils';\r\nimport { toOlPadding } from './fit-layer.utils';\r\nimport { getFeatureStates, setFeatureStates } from './style/feature-states';\r\n\r\ntype LayerEntry = {\r\n descriptor: VectorLayerDescriptor<any, any, any, any>;\r\n layer: VectorLayer;\r\n api: VectorLayerApi<any, any>;\r\n index: number;\r\n};\r\n\r\ntype InteractionEnabledState = {\r\n click: boolean;\r\n doubleClick: boolean;\r\n hover: boolean;\r\n select: boolean;\r\n translate: boolean;\r\n modify: boolean;\r\n};\r\n\r\ntype ListenerName =\r\n | 'pointermove'\r\n | 'singleclick'\r\n | 'dblclick'\r\n | 'pointerdown'\r\n | 'pointerdrag'\r\n | 'pointerup';\r\n\r\ntype ActiveTranslate = {\r\n targetKey: string | number;\r\n startCoordinate: [number, number];\r\n lastCoordinate: [number, number];\r\n lastItem?: HitItem<any, any>;\r\n moveThrottleMs: number;\r\n translate: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['translate']\r\n >;\r\n pendingEvent?: MapBrowserEvent<UIEvent>;\r\n throttleTimer?: ReturnType<typeof setTimeout>;\r\n lastHandled?: boolean;\r\n};\r\n\r\ntype ActiveModify = {\r\n targetKey: string | number;\r\n lastItem?: HitItem<any, any>;\r\n moveThrottleMs: number;\r\n modify: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['modify']\r\n >;\r\n pendingEvent?: MapBrowserEvent<UIEvent>;\r\n throttleTimer?: ReturnType<typeof setTimeout>;\r\n lastHandled?: boolean;\r\n};\r\n\r\ntype NativeModifyEntry = {\r\n interaction: Modify;\r\n keys: EventsKey[];\r\n};\r\n\r\ntype ModifyInteraction = NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['modify']\r\n>;\r\n\r\nexport type HitTestArgs = {\r\n layerId: string;\r\n layer: VectorLayer;\r\n api: VectorLayerApi<any, any>;\r\n descriptor: VectorLayerDescriptor<any, any, any, any>;\r\n event: MapBrowserEvent<UIEvent>;\r\n hitTolerance: number;\r\n};\r\n\r\nexport type ClusterHit = {\r\n feature: Feature<Geometry>;\r\n features: Array<Feature<Geometry>>;\r\n size: number;\r\n};\r\n\r\nexport type HitTestResult = {\r\n items: Array<HitItem<any, any>>;\r\n cluster?: ClusterHit;\r\n};\r\n\r\nexport type HitTestFn = (args: HitTestArgs) => HitTestResult;\r\n\r\nexport type InteractionManagerOptions<\r\n Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]\r\n> = {\r\n ctx: MapContext;\r\n map: OlMap;\r\n schema: MapSchema<Layers>;\r\n layers: Record<string, VectorLayer>;\r\n apis: Record<string, VectorLayerApi<any, any>>;\r\n hitTest?: HitTestFn;\r\n};\r\n\r\nexport class InteractionManager<\r\n Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]\r\n> {\r\n private readonly ctx: MapContext;\r\n private readonly map: OlMap;\r\n private readonly schema: MapSchema<Layers>;\r\n private readonly layers: Record<string, VectorLayer>;\r\n private readonly apis: Record<string, VectorLayerApi<any, any>>;\r\n private readonly hitTest: HitTestFn;\r\n private readonly hoverItems = new Map<string, Map<string | number, HitItem<any, any>>>();\r\n private readonly selectedItems = new Map<string, Map<string | number, HitItem<any, any>>>();\r\n private readonly activeTranslates = new Map<string, ActiveTranslate>();\r\n private readonly activeModifies = new Map<string, ActiveModify>();\r\n private readonly nativeModifies = new Map<string, NativeModifyEntry>();\r\n private readonly popupStack: 'stop' | 'continue';\r\n private readonly listenerKeys = new Map<ListenerName, EventsKey>();\r\n private readonly enabledState = new Map<string, InteractionEnabledState>();\r\n private dragPanLocks = 0;\r\n private dragPanStates?: Map<DragPan, boolean>;\r\n private currentCursor?: string;\r\n\r\n constructor(options: InteractionManagerOptions<Layers>) {\r\n this.ctx = options.ctx;\r\n this.map = options.map;\r\n this.schema = options.schema;\r\n this.layers = options.layers;\r\n this.apis = options.apis;\r\n this.hitTest = options.hitTest ?? this.createDefaultHitTest();\r\n this.popupStack = this.schema.options?.popupHost?.stack ?? 'stop';\r\n this.refreshEnabled();\r\n }\r\n\r\n refreshEnabled(): void {\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n if (!popupEnabled) {\r\n this.ctx.popupHost?.clear();\r\n }\r\n\r\n const nextState = new Map<string, InteractionEnabledState>();\r\n this.schema.layers.forEach((descriptor) => {\r\n const interactions = descriptor.feature.interactions;\r\n nextState.set(descriptor.id, {\r\n click: !!interactions?.click && this.isEnabled(interactions.click.enabled),\r\n doubleClick:\r\n !!interactions?.doubleClick && this.isEnabled(interactions.doubleClick.enabled),\r\n hover: !!interactions?.hover && this.isEnabled(interactions.hover.enabled),\r\n select: !!interactions?.select && this.isEnabled(interactions.select.enabled),\r\n translate: !!interactions?.translate && this.isEnabled(interactions.translate.enabled),\r\n modify: !!interactions?.modify && this.isEnabled(interactions.modify.enabled),\r\n });\r\n });\r\n\r\n this.syncNativeModify(nextState);\r\n this.applyDisabledCleanup(nextState);\r\n this.enabledState.clear();\r\n nextState.forEach((value, key) => this.enabledState.set(key, value));\r\n this.syncListeners(popupEnabled);\r\n }\r\n\r\n handlePointerDown(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerdown')) {\r\n return;\r\n }\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const interactions = entry.descriptor.feature.interactions;\r\n\r\n const translate = interactions?.translate;\r\n if (translate && this.isEnabled(translate.enabled)) {\r\n const { items: candidates } = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(translate.hitTolerance),\r\n });\r\n if (candidates.length > 0) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n event.coordinate as [number, number],\r\n 'translatestart',\r\n candidates,\r\n );\r\n\r\n let target: HitItem<any, any> | null | undefined;\r\n if (translate.pickTarget) {\r\n target = translate.pickTarget({ candidates, ctx: this.ctx, event: translateEvent });\r\n } else {\r\n target = candidates[0];\r\n }\r\n\r\n if (target) {\r\n const targetKey = entry.descriptor.feature.id(target.model);\r\n const resolved = this.resolveTarget(entry, targetKey);\r\n if (resolved) {\r\n const active: ActiveTranslate = {\r\n targetKey,\r\n startCoordinate: event.coordinate as [number, number],\r\n lastCoordinate: event.coordinate as [number, number],\r\n lastItem: resolved,\r\n moveThrottleMs: translate.moveThrottleMs ?? 0,\r\n translate,\r\n };\r\n this.activeTranslates.set(entry.descriptor.id, active);\r\n this.lockDragPan();\r\n\r\n if (translate.state) {\r\n this.applyState([resolved], translate.state, true);\r\n }\r\n\r\n const handled = translate.onStart\r\n ? this.isHandled(\r\n translate.onStart({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n )\r\n : false;\r\n active.lastHandled = handled;\r\n\r\n if (handled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.activeTranslates.has(entry.descriptor.id)) {\r\n continue;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerDrag(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerdrag')) {\r\n return;\r\n }\r\n if (this.activeTranslates.size === 0 && this.activeModifies.size === 0) {\r\n return;\r\n }\r\n for (const entry of this.getOrderedLayers()) {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (!active) {\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (!activeModify) {\r\n continue;\r\n }\r\n const modify = activeModify.modify;\r\n const execute = () => this.applyModifyChange(entry, activeModify, event);\r\n\r\n if (activeModify.moveThrottleMs > 0) {\r\n if (!activeModify.throttleTimer) {\r\n execute();\r\n activeModify.throttleTimer = setTimeout(() => {\r\n activeModify.throttleTimer = undefined;\r\n if (activeModify.pendingEvent) {\r\n const pending = activeModify.pendingEvent;\r\n activeModify.pendingEvent = undefined;\r\n this.applyModifyChange(entry, activeModify, pending);\r\n }\r\n }, activeModify.moveThrottleMs);\r\n } else {\r\n activeModify.pendingEvent = event;\r\n }\r\n } else {\r\n execute();\r\n }\r\n\r\n if (activeModify.lastHandled && this.shouldStopPropagation(modify)) {\r\n break;\r\n }\r\n continue;\r\n }\r\n const translate = active.translate;\r\n const execute = () => this.applyTranslateMove(entry, active, event);\r\n\r\n if (active.moveThrottleMs > 0) {\r\n if (!active.throttleTimer) {\r\n execute();\r\n active.throttleTimer = setTimeout(() => {\r\n active.throttleTimer = undefined;\r\n if (active.pendingEvent) {\r\n const pending = active.pendingEvent;\r\n active.pendingEvent = undefined;\r\n this.applyTranslateMove(entry, active, pending);\r\n }\r\n }, active.moveThrottleMs);\r\n } else {\r\n active.pendingEvent = event;\r\n }\r\n } else {\r\n execute();\r\n }\r\n\r\n if (active.lastHandled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerUp(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerup')) {\r\n return;\r\n }\r\n if (this.activeTranslates.size === 0 && this.activeModifies.size === 0) {\r\n return;\r\n }\r\n for (const entry of this.getOrderedLayers()) {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (active) {\r\n const translate = active.translate;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n }\r\n if (active.pendingEvent) {\r\n const pending = active.pendingEvent;\r\n active.pendingEvent = undefined;\r\n this.applyTranslateMove(entry, active, pending);\r\n }\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (resolved && translate.onEnd) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n active.startCoordinate,\r\n 'translateend',\r\n [resolved],\r\n );\r\n active.lastHandled = this.isHandled(\r\n translate.onEnd({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n\r\n this.finishTranslate(entry, active, resolved);\r\n\r\n if (active.lastHandled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n continue;\r\n }\r\n\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (!activeModify) {\r\n continue;\r\n }\r\n const modify = activeModify.modify;\r\n if (activeModify.throttleTimer) {\r\n clearTimeout(activeModify.throttleTimer);\r\n activeModify.throttleTimer = undefined;\r\n }\r\n if (activeModify.pendingEvent) {\r\n const pending = activeModify.pendingEvent;\r\n activeModify.pendingEvent = undefined;\r\n this.applyModifyChange(entry, activeModify, pending);\r\n }\r\n const resolved = this.resolveTarget(entry, activeModify.targetKey);\r\n if (resolved && modify.onEnd) {\r\n const modifyEvent = this.createModifyEvent(event, 'modifyend', [resolved]);\r\n activeModify.lastHandled = this.isHandled(\r\n modify.onEnd({ item: resolved, ctx: this.ctx, event: modifyEvent }),\r\n );\r\n } else {\r\n activeModify.lastHandled = false;\r\n }\r\n\r\n this.finishModify(entry, activeModify, resolved);\r\n\r\n if (activeModify.lastHandled && this.shouldStopPropagation(modify)) {\r\n break;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerMove(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointermove')) {\r\n return;\r\n }\r\n const popupHost = this.ctx.popupHost;\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const autoHover = autoMode === 'hover';\r\n const popupItems: Array<PopupItem<any>> = [];\r\n let popupStopped = false;\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const hover = entry.descriptor.feature.interactions?.hover;\r\n const hoverEnabled = !!hover && this.isEnabled(hover.enabled);\r\n if (!hoverEnabled && !autoHover) {\r\n continue;\r\n }\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(hoverEnabled ? hover!.hitTolerance : undefined),\r\n });\r\n\r\n if (hoverEnabled) {\r\n const handled = this.processHover(entry, hover!, hitResult.items, event);\r\n if (handled && this.shouldStopPropagation(hover!)) {\r\n break;\r\n }\r\n }\r\n\r\n if (autoHover && popupHost && !popupStopped) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n }\r\n if (autoHover && popupHost) {\r\n popupHost.set(popupItems);\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handleSingleClick(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('singleclick')) {\r\n return;\r\n }\r\n const popupHost = this.ctx.popupHost;\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const autoClick = autoMode === 'click';\r\n const popupItems: Array<PopupItem<any>> = [];\r\n let popupStopped = false;\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const select = entry.descriptor.feature.interactions?.select;\r\n const click = entry.descriptor.feature.interactions?.click;\r\n const selectEnabled = select && this.isEnabled(select.enabled);\r\n const clickEnabled = click && this.isEnabled(click.enabled);\r\n const clusteringEnabled = !!entry.descriptor.clustering && !!entry.api.isClusteringEnabled?.();\r\n if (!selectEnabled && !clickEnabled && !clusteringEnabled && !autoClick) {\r\n continue;\r\n }\r\n\r\n const tolerances = [\r\n selectEnabled ? select?.hitTolerance : undefined,\r\n clickEnabled ? click?.hitTolerance : undefined,\r\n ].filter((value): value is number => value !== undefined);\r\n const hitTolerance =\r\n tolerances.length > 0 ? Math.max(...tolerances) : this.getHitTolerance(undefined);\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance,\r\n });\r\n\r\n if (clusteringEnabled && hitResult.cluster) {\r\n if (autoClick && popupHost && !popupStopped) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n const handled = this.handleClusterClick(entry, hitResult.cluster, event, !autoClick);\r\n if (handled) {\r\n if (this.shouldStopClusterPropagation()) {\r\n break;\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n if (selectEnabled || clickEnabled) {\r\n const selectItems = selectEnabled ? hitResult.items : [];\r\n const clickItems = clickEnabled ? hitResult.items : [];\r\n\r\n const selectHandled = selectEnabled\r\n ? this.processSelect(entry, select!, selectItems, event)\r\n : false;\r\n const selectStops = selectHandled && this.shouldStopPropagation(select!);\r\n const allowClick =\r\n !selectHandled || (selectEnabled && this.shouldContinuePropagation(select!));\r\n\r\n if (clickEnabled && allowClick) {\r\n const clickHandled = this.processClick(entry, click!, clickItems, event);\r\n if (clickHandled && this.shouldStopPropagation(click!)) {\r\n break;\r\n }\r\n }\r\n\r\n if (selectStops) {\r\n break;\r\n }\r\n }\r\n\r\n if (autoClick && popupHost && !popupStopped && !(clusteringEnabled && hitResult.cluster)) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n }\r\n if (autoClick && popupHost) {\r\n popupHost.set(popupItems);\r\n }\r\n }\r\n\r\n handleDoubleClick(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('dblclick')) {\r\n return;\r\n }\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const doubleClick = entry.descriptor.feature.interactions?.doubleClick;\r\n if (!doubleClick || !this.isEnabled(doubleClick.enabled)) {\r\n continue;\r\n }\r\n\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(doubleClick.hitTolerance),\r\n });\r\n\r\n if (entry.descriptor.clustering && entry.api.isClusteringEnabled?.() && hitResult.cluster) {\r\n continue;\r\n }\r\n const { items } = hitResult;\r\n\r\n const handled = this.processDoubleClick(entry, doubleClick, items, event);\r\n if (handled && this.shouldStopPropagation(doubleClick)) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private runInteractionMutation(fn: () => void): void {\r\n const policy = this.schema.options?.scheduler?.interactionPolicy;\r\n if (policy) {\r\n this.ctx.batch(fn, { policy });\r\n return;\r\n }\r\n fn();\r\n }\r\n\r\n private syncListeners(popupEnabled: boolean): void {\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const needsHover = autoMode === 'hover';\r\n const needsClick = autoMode === 'click';\r\n\r\n let needsPointerMove = needsHover;\r\n let needsSingleClick = needsClick;\r\n let needsDoubleClick = false;\r\n let needsPointerDown = false;\r\n let needsPointerDrag = false;\r\n let needsPointerUp = false;\r\n\r\n this.schema.layers.forEach((descriptor) => {\r\n const state = this.enabledState.get(descriptor.id);\r\n if (state?.hover) {\r\n needsPointerMove = true;\r\n }\r\n if (state?.click || state?.select) {\r\n needsSingleClick = true;\r\n }\r\n if (state?.doubleClick) {\r\n needsDoubleClick = true;\r\n }\r\n if (state?.translate || state?.modify) {\r\n needsPointerDown = true;\r\n needsPointerDrag = true;\r\n needsPointerUp = true;\r\n }\r\n const interactions = descriptor.feature.interactions;\r\n if (interactions && this.hasCursorInteraction(interactions)) {\r\n needsPointerMove = true;\r\n }\r\n if (\r\n descriptor.clustering &&\r\n (descriptor.clustering.expandOnClick || descriptor.clustering.popup)\r\n ) {\r\n needsSingleClick = true;\r\n }\r\n });\r\n\r\n this.toggleListener('pointermove', needsPointerMove, (event) => this.handlePointerMove(event));\r\n this.toggleListener('singleclick', needsSingleClick, (event) =>\r\n this.handleSingleClick(event),\r\n );\r\n this.toggleListener('dblclick', needsDoubleClick, (event) => this.handleDoubleClick(event));\r\n this.toggleListener('pointerdown', needsPointerDown, (event) => this.handlePointerDown(event));\r\n this.toggleListener('pointerdrag', needsPointerDrag, (event) => this.handlePointerDrag(event));\r\n this.toggleListener('pointerup', needsPointerUp, (event) => this.handlePointerUp(event));\r\n }\r\n\r\n private syncNativeModify(nextState: Map<string, InteractionEnabledState>): void {\r\n const handled = new Set<string>();\r\n\r\n this.schema.layers.forEach((descriptor) => {\r\n const interactions = descriptor.feature.interactions;\r\n const modify = interactions?.modify;\r\n const enabled = nextState.get(descriptor.id)?.modify ?? false;\r\n const shouldEnable = !!modify && enabled;\r\n if (!shouldEnable) {\r\n return;\r\n }\r\n const entry = this.getLayerEntry(descriptor.id);\r\n if (!entry) {\r\n return;\r\n }\r\n handled.add(descriptor.id);\r\n if (this.nativeModifies.has(descriptor.id)) {\r\n this.nativeModifies.get(descriptor.id)!.interaction.setActive(true);\r\n return;\r\n }\r\n const source = entry.layer.getSource() as VectorSource<Geometry> | null;\r\n if (!source) {\r\n return;\r\n }\r\n const interaction = new Modify({\r\n source,\r\n pixelTolerance: this.getHitTolerance(modify.hitTolerance),\r\n style: modify.vertexStyle,\r\n });\r\n const keys = [\r\n interaction.on('modifystart', (event) =>\r\n this.handleNativeModifyStart(entry, modify, event),\r\n ),\r\n interaction.on('modifyend', (event) =>\r\n this.handleNativeModifyEnd(entry, modify, event),\r\n ),\r\n ];\r\n this.map.addInteraction(interaction);\r\n this.nativeModifies.set(descriptor.id, { interaction, keys });\r\n });\r\n\r\n Array.from(this.nativeModifies.keys()).forEach((layerId) => {\r\n if (!handled.has(layerId)) {\r\n this.teardownNativeModify(layerId);\r\n }\r\n });\r\n }\r\n\r\n private teardownNativeModify(layerId: string): void {\r\n const entry = this.nativeModifies.get(layerId);\r\n if (!entry) {\r\n return;\r\n }\r\n entry.keys.forEach((key) => Observable.unByKey(key));\r\n this.map.removeInteraction(entry.interaction);\r\n this.nativeModifies.delete(layerId);\r\n }\r\n\r\n private handleNativeModifyStart(\r\n entry: LayerEntry,\r\n modify: ModifyInteraction,\r\n event: ModifyEvent,\r\n ): void {\r\n const items = this.resolveHitItemsFromFeatures(entry, event.features);\r\n if (items.length === 0) {\r\n return;\r\n }\r\n if (modify.state) {\r\n this.applyState(items, modify.state, true);\r\n }\r\n if (modify.onStart) {\r\n this.isHandled(modify.onStart({ item: items[0], ctx: this.ctx, event }));\r\n }\r\n }\r\n\r\n private handleNativeModifyEnd(\r\n entry: LayerEntry,\r\n modify: ModifyInteraction,\r\n event: ModifyEvent,\r\n ): void {\r\n const items = this.resolveHitItemsFromFeatures(entry, event.features);\r\n if (items.length === 0) {\r\n return;\r\n }\r\n this.runInteractionMutation(() => {\r\n items.forEach((item) => {\r\n const geometry = item.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n const id = entry.descriptor.feature.id(item.model);\r\n entry.api.mutate(\r\n id,\r\n (prev) =>\r\n entry.descriptor.feature.geometry.applyGeometryToModel(prev, geometry as any),\r\n 'modify',\r\n );\r\n });\r\n });\r\n if (modify.onEnd) {\r\n this.isHandled(modify.onEnd({ item: items[0], ctx: this.ctx, event }));\r\n }\r\n if (modify.state) {\r\n this.applyState(items, modify.state, false);\r\n }\r\n }\r\n\r\n private resolveHitItemsFromFeatures(\r\n entry: LayerEntry,\r\n features: Collection<Feature<Geometry>>,\r\n ): Array<HitItem<any, any>> {\r\n return features\r\n .getArray()\r\n .map((feature) => {\r\n const model = entry.api.getModelByFeature(feature as Feature<any>);\r\n if (!model) {\r\n return null;\r\n }\r\n return { model, feature } as HitItem<any, any>;\r\n })\r\n .filter((item): item is HitItem<any, any> => item !== null);\r\n }\r\n\r\n private hasCursorInteraction(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): boolean {\r\n const candidates = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ];\r\n return candidates.some(\r\n (interaction) => interaction?.cursor && this.isEnabled(interaction.enabled),\r\n );\r\n }\r\n\r\n private toggleListener(\r\n type: ListenerName,\r\n enabled: boolean,\r\n handler: (event: MapBrowserEvent<UIEvent>) => void,\r\n ): void {\r\n if (enabled) {\r\n if (!this.listenerKeys.has(type)) {\r\n const key = (\r\n this.map.on as unknown as (\r\n eventType: string,\r\n listener: (event: MapBrowserEvent<UIEvent>) => void,\r\n ) => EventsKey\r\n )(type, handler);\r\n this.listenerKeys.set(type, key);\r\n }\r\n return;\r\n }\r\n this.removeListener(type);\r\n }\r\n\r\n private removeListener(type: ListenerName): void {\r\n const key = this.listenerKeys.get(type);\r\n if (key) {\r\n Observable.unByKey(key);\r\n this.listenerKeys.delete(type);\r\n }\r\n }\r\n\r\n private isListening(type: ListenerName): boolean {\r\n return this.listenerKeys.has(type);\r\n }\r\n\r\n private applyDisabledCleanup(nextState: Map<string, InteractionEnabledState>): void {\r\n this.enabledState.forEach((prev, layerId) => {\r\n const next = nextState.get(layerId) ?? {\r\n click: false,\r\n doubleClick: false,\r\n hover: false,\r\n select: false,\r\n translate: false,\r\n modify: false,\r\n };\r\n const entry = this.getLayerEntry(layerId);\r\n if (!entry) {\r\n return;\r\n }\r\n\r\n if (prev.hover && !next.hover) {\r\n this.clearHoverState(entry);\r\n }\r\n if (prev.select && !next.select) {\r\n this.clearSelectState(entry);\r\n }\r\n if (prev.translate && !next.translate) {\r\n this.cancelTranslate(entry);\r\n }\r\n if (prev.modify && !next.modify) {\r\n this.cancelModify(entry);\r\n }\r\n });\r\n\r\n this.setCursor(undefined);\r\n }\r\n\r\n private clearHoverState(entry: LayerEntry): void {\r\n const prev = this.hoverItems.get(entry.descriptor.id);\r\n if (!prev) {\r\n return;\r\n }\r\n const hover = entry.descriptor.feature.interactions?.hover;\r\n if (hover?.state) {\r\n this.applyState(Array.from(prev.values()), hover.state, false);\r\n }\r\n this.hoverItems.delete(entry.descriptor.id);\r\n }\r\n\r\n private clearSelectState(entry: LayerEntry): void {\r\n const prev = this.selectedItems.get(entry.descriptor.id);\r\n if (!prev) {\r\n return;\r\n }\r\n const select = entry.descriptor.feature.interactions?.select;\r\n if (select?.state) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n this.selectedItems.delete(entry.descriptor.id);\r\n }\r\n\r\n private cancelTranslate(entry: LayerEntry): void {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (active) {\r\n this.finishTranslate(entry, active, active.lastItem);\r\n }\r\n }\r\n\r\n private cancelModify(entry: LayerEntry): void {\r\n const active = this.activeModifies.get(entry.descriptor.id);\r\n if (active) {\r\n this.finishModify(entry, active, active.lastItem);\r\n }\r\n }\r\n\r\n private updateCursor(event?: MapBrowserEvent<UIEvent>): void {\r\n const activeCursor = this.getActiveSessionCursor();\r\n if (activeCursor !== undefined) {\r\n this.setCursor(activeCursor ?? undefined);\r\n return;\r\n }\r\n if (!event) {\r\n this.setCursor(undefined);\r\n return;\r\n }\r\n\r\n for (const entry of this.getOrderedLayers()) {\r\n const interactions = entry.descriptor.feature.interactions;\r\n if (!interactions) {\r\n continue;\r\n }\r\n const cursor = this.getLayerCursor(interactions);\r\n if (!cursor) {\r\n continue;\r\n }\r\n const hitTolerance = this.getCursorHitTolerance(interactions);\r\n const { items } = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance,\r\n });\r\n if (items.length > 0) {\r\n this.setCursor(cursor);\r\n return;\r\n }\r\n }\r\n\r\n this.setCursor(undefined);\r\n }\r\n\r\n private getActiveSessionCursor(): string | null | undefined {\r\n for (const entry of this.getOrderedLayers()) {\r\n const activeTranslate = this.activeTranslates.get(entry.descriptor.id);\r\n if (activeTranslate) {\r\n return activeTranslate.translate.cursor ?? null;\r\n }\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (activeModify) {\r\n return activeModify.modify.cursor ?? null;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private getLayerCursor(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): string | undefined {\r\n const candidates: Array<NonNullable<InteractionBase> | undefined> = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ];\r\n for (const interaction of candidates) {\r\n if (!interaction || !interaction.cursor) {\r\n continue;\r\n }\r\n if (!this.isEnabled(interaction.enabled)) {\r\n continue;\r\n }\r\n return interaction.cursor;\r\n }\r\n return undefined;\r\n }\r\n\r\n private getCursorHitTolerance(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): number {\r\n const candidates = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ].filter((interaction) => interaction && interaction.cursor && this.isEnabled(interaction.enabled));\r\n if (candidates.length === 0) {\r\n return this.getHitTolerance(undefined);\r\n }\r\n const tolerances = candidates\r\n .map((interaction) => interaction?.hitTolerance)\r\n .filter((value): value is number => value !== undefined);\r\n if (tolerances.length === 0) {\r\n return this.getHitTolerance(undefined);\r\n }\r\n return Math.max(...tolerances);\r\n }\r\n\r\n private setCursor(cursor?: string): void {\r\n if (this.currentCursor === cursor) {\r\n return;\r\n }\r\n const target = this.getTargetElement();\r\n if (!target) {\r\n return;\r\n }\r\n target.style.cursor = cursor ?? '';\r\n this.currentCursor = cursor;\r\n }\r\n\r\n private getTargetElement(): HTMLElement | null {\r\n const targetElement = this.map.getTargetElement?.();\r\n if (targetElement) {\r\n return targetElement;\r\n }\r\n const target = this.map.getTarget?.();\r\n if (!target) {\r\n return null;\r\n }\r\n if (typeof target === 'string') {\r\n if (typeof document === 'undefined') {\r\n return null;\r\n }\r\n return document.getElementById(target);\r\n }\r\n return target as HTMLElement;\r\n }\r\n\r\n private getLayerEntry(layerId: string): LayerEntry | null {\r\n const index = this.schema.layers.findIndex((layer) => layer.id === layerId);\r\n if (index < 0) {\r\n return null;\r\n }\r\n const descriptor = this.schema.layers[index];\r\n const layer = this.layers[layerId];\r\n const api = this.apis[layerId];\r\n if (!layer || !api) {\r\n return null;\r\n }\r\n return { descriptor, layer, api, index };\r\n }\r\n\r\n private applyTranslateMove(\r\n entry: LayerEntry,\r\n active: ActiveTranslate,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): void {\r\n const translate = active.translate;\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (!resolved) {\r\n this.finishTranslate(entry, active, active.lastItem);\r\n return;\r\n }\r\n\r\n const nextCoordinate = event.coordinate as [number, number];\r\n const delta = [\r\n nextCoordinate[0] - active.lastCoordinate[0],\r\n nextCoordinate[1] - active.lastCoordinate[1],\r\n ];\r\n active.lastCoordinate = nextCoordinate;\r\n active.lastItem = resolved;\r\n\r\n const geometry = resolved.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n const translated = geometry.clone();\r\n translated.translate(delta[0], delta[1]);\r\n\r\n this.runInteractionMutation(() =>\r\n entry.api.mutate(\r\n active.targetKey,\r\n (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, translated),\r\n 'translate',\r\n ),\r\n );\r\n\r\n if (translate.onChange) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n active.startCoordinate,\r\n 'translating',\r\n [resolved],\r\n );\r\n active.lastHandled = this.isHandled(\r\n translate.onChange({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n }\r\n\r\n private applyModifyChange(\r\n entry: LayerEntry,\r\n active: ActiveModify,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): void {\r\n const modify = active.modify;\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (!resolved) {\r\n this.finishModify(entry, active, active.lastItem);\r\n return;\r\n }\r\n\r\n active.lastItem = resolved;\r\n\r\n const geometry = resolved.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n\r\n const nextGeometry = geometry.clone();\r\n this.runInteractionMutation(() =>\r\n entry.api.mutate(\r\n active.targetKey,\r\n (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, nextGeometry),\r\n 'modify',\r\n ),\r\n );\r\n\r\n if (modify.onChange) {\r\n const modifyEvent = this.createModifyEvent(event, 'modifying', [resolved]);\r\n active.lastHandled = this.isHandled(\r\n modify.onChange({ item: resolved, ctx: this.ctx, event: modifyEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n }\r\n\r\n private finishTranslate(\r\n entry: LayerEntry,\r\n active: ActiveTranslate,\r\n item?: HitItem<any, any> | null,\r\n ): void {\r\n const finalItem = item ?? active.lastItem;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n active.pendingEvent = undefined;\r\n }\r\n\r\n if (active.translate.state && finalItem) {\r\n this.applyState([finalItem], active.translate.state, false);\r\n }\r\n\r\n this.activeTranslates.delete(entry.descriptor.id);\r\n this.unlockDragPan();\r\n }\r\n\r\n private finishModify(\r\n entry: LayerEntry,\r\n active: ActiveModify,\r\n item?: HitItem<any, any> | null,\r\n ): void {\r\n const finalItem = item ?? active.lastItem;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n active.pendingEvent = undefined;\r\n }\r\n\r\n if (active.modify.state && finalItem) {\r\n this.applyState([finalItem], active.modify.state, false);\r\n }\r\n\r\n this.activeModifies.delete(entry.descriptor.id);\r\n this.unlockDragPan();\r\n }\r\n\r\n private resolveTarget(entry: LayerEntry, targetKey: string | number): HitItem<any, any> | null {\r\n const source = entry.layer.getSource();\r\n if (!source) {\r\n return null;\r\n }\r\n const resolvedSource = source instanceof ClusterSource ? source.getSource() : source;\r\n if (!resolvedSource) {\r\n return null;\r\n }\r\n const feature = resolvedSource.getFeatureById(targetKey);\r\n if (!(feature instanceof Feature)) {\r\n return null;\r\n }\r\n const model = entry.api.getModelByFeature(feature as Feature<Geometry>);\r\n if (!model) {\r\n return null;\r\n }\r\n return { model, feature };\r\n }\r\n\r\n private lockDragPan(): void {\r\n this.dragPanLocks += 1;\r\n if (this.dragPanLocks !== 1) {\r\n return;\r\n }\r\n const interactions = this.map.getInteractions?.();\r\n if (!interactions) {\r\n return;\r\n }\r\n const dragPans = interactions\r\n .getArray()\r\n .filter((interaction): interaction is DragPan => interaction instanceof DragPan);\r\n if (dragPans.length === 0) {\r\n return;\r\n }\r\n if (!this.dragPanStates) {\r\n this.dragPanStates = new Map();\r\n }\r\n dragPans.forEach((interaction) => {\r\n if (!this.dragPanStates?.has(interaction)) {\r\n this.dragPanStates?.set(interaction, interaction.getActive());\r\n }\r\n interaction.setActive(false);\r\n });\r\n }\r\n\r\n private unlockDragPan(): void {\r\n if (this.dragPanLocks === 0) {\r\n return;\r\n }\r\n this.dragPanLocks -= 1;\r\n if (this.dragPanLocks !== 0) {\r\n return;\r\n }\r\n if (!this.dragPanStates) {\r\n return;\r\n }\r\n this.dragPanStates.forEach((wasActive, interaction) => {\r\n interaction.setActive(wasActive);\r\n });\r\n this.dragPanStates = undefined;\r\n }\r\n\r\n private createTranslateEvent(\r\n event: MapBrowserEvent<UIEvent>,\r\n startCoordinate: [number, number],\r\n type: 'translatestart' | 'translating' | 'translateend',\r\n items: Array<HitItem<any, any>>,\r\n ): TranslateEvent {\r\n const features = new Collection(items.map((item) => item.feature));\r\n return {\r\n type,\r\n features,\r\n coordinate: event.coordinate as [number, number],\r\n startCoordinate,\r\n mapBrowserEvent: event,\r\n } as unknown as TranslateEvent;\r\n }\r\n\r\n private createModifyEvent(\r\n event: MapBrowserEvent<UIEvent>,\r\n type: 'modifystart' | 'modifying' | 'modifyend',\r\n items: Array<HitItem<any, any>>,\r\n ): ModifyEvent {\r\n const features = new Collection(items.map((item) => item.feature));\r\n return {\r\n type,\r\n features,\r\n mapBrowserEvent: event,\r\n } as unknown as ModifyEvent;\r\n }\r\n\r\n private createDefaultHitTest(): HitTestFn {\r\n return ({ layer, api, event, hitTolerance }) => {\r\n const items: Array<HitItem<any, any>> = [];\r\n let clusterHit: ClusterHit | undefined;\r\n this.map.forEachFeatureAtPixel(\r\n event.pixel,\r\n (feature) => {\r\n if (!(feature instanceof Feature)) {\r\n return;\r\n }\r\n const clusterFeatures = getClusterFeatures(feature as Feature<Geometry>);\r\n if (clusterFeatures) {\r\n if (clusterFeatures.length > 1) {\r\n if (!clusterHit) {\r\n clusterHit = {\r\n feature: feature as Feature<Geometry>,\r\n features: clusterFeatures,\r\n size: clusterFeatures.length,\r\n };\r\n }\r\n return;\r\n }\r\n const singleFeature = clusterFeatures[0];\r\n const singleModel = api.getModelByFeature(singleFeature as Feature<Geometry>);\r\n if (!singleModel) {\r\n return;\r\n }\r\n items.push({ model: singleModel, feature: singleFeature });\r\n return;\r\n }\r\n const model = api.getModelByFeature(feature as Feature<Geometry>);\r\n if (!model) {\r\n return;\r\n }\r\n items.push({ model, feature });\r\n },\r\n {\r\n layerFilter: (candidateLayer) => candidateLayer === layer,\r\n hitTolerance,\r\n },\r\n );\r\n return { items, cluster: clusterHit };\r\n };\r\n }\r\n\r\n private collectFeaturePopupItems(\r\n entry: LayerEntry,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): Array<PopupItem<any>> {\r\n const popup = entry.descriptor.feature.popup;\r\n if (!popup || !this.isEnabled(popup.enabled)) {\r\n return [];\r\n }\r\n return items.map((item) => {\r\n const popupItem = popup.item({\r\n model: item.model,\r\n feature: item.feature,\r\n ctx: this.ctx,\r\n event,\r\n });\r\n return {\r\n ...popupItem,\r\n source: popupItem.source ?? 'feature',\r\n dedupKey: popupItem.dedupKey ?? entry.descriptor.feature.id(item.model),\r\n };\r\n });\r\n }\r\n\r\n private collectPopupItems(\r\n entry: LayerEntry,\r\n hitResult: HitTestResult,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): Array<PopupItem<any>> {\r\n if (entry.descriptor.clustering && entry.api.isClusteringEnabled?.() && hitResult.cluster) {\r\n const clustering = entry.descriptor.clustering;\r\n if (clustering?.popup && this.isEnabled(clustering.popup.enabled)) {\r\n const models = hitResult.cluster.features\r\n .map((clusterFeature) =>\r\n entry.api.getModelByFeature(clusterFeature as Feature<Geometry>),\r\n )\r\n .filter((model): model is any => model !== undefined);\r\n const popupItem = clustering.popup.item({\r\n models,\r\n size: hitResult.cluster.size,\r\n ctx: this.ctx,\r\n event,\r\n });\r\n return [\r\n {\r\n ...popupItem,\r\n source: popupItem.source ?? 'cluster',\r\n dedupKey: popupItem.dedupKey ?? this.getClusterDedupKey(entry, models),\r\n },\r\n ];\r\n }\r\n return [];\r\n }\r\n return this.collectFeaturePopupItems(entry, hitResult.items, event);\r\n }\r\n\r\n private getClusterDedupKey(entry: LayerEntry, models: any[]): string {\r\n const ids = models\r\n .map((model) => String(entry.descriptor.feature.id(model)))\r\n .sort((a, b) => a.localeCompare(b))\r\n .join('|');\r\n return `cluster:${entry.descriptor.id}:${ids}`;\r\n }\r\n\r\n private getOrderedLayers(): LayerEntry[] {\r\n return this.schema.layers\r\n .map((descriptor, index) => ({\r\n descriptor,\r\n index,\r\n layer: this.layers[descriptor.id],\r\n api: this.apis[descriptor.id],\r\n }))\r\n .filter((entry) => entry.layer && entry.api)\r\n .sort((a, b) => {\r\n const aZ = a.layer.getZIndex() ?? 0;\r\n const bZ = b.layer.getZIndex() ?? 0;\r\n if (aZ !== bZ) {\r\n return bZ - aZ;\r\n }\r\n return a.index - b.index;\r\n });\r\n }\r\n\r\n private getHitTolerance(hitTolerance?: number): number {\r\n if (hitTolerance !== undefined) {\r\n return hitTolerance;\r\n }\r\n if (this.schema.options?.hitTolerance !== undefined) {\r\n return this.schema.options.hitTolerance;\r\n }\r\n return 0;\r\n }\r\n\r\n private isEnabled(enabled?: boolean | (() => boolean)): boolean {\r\n if (enabled === undefined) {\r\n return true;\r\n }\r\n if (typeof enabled === 'function') {\r\n return enabled();\r\n }\r\n return enabled;\r\n }\r\n\r\n private processHover(\r\n entry: LayerEntry,\r\n hover: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['hover']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n const prev = this.hoverItems.get(entry.descriptor.id) ?? new Map();\r\n const next = this.itemsToMap(entry, items);\r\n const entered = Array.from(next.entries())\r\n .filter(([id]) => !prev.has(id))\r\n .map(([, item]) => item);\r\n const left = Array.from(prev.entries())\r\n .filter(([id]) => !next.has(id))\r\n .map(([, item]) => item);\r\n\r\n let handled = false;\r\n if (left.length > 0 && hover.onLeave) {\r\n handled = this.isHandled(hover.onLeave({ items: left, ctx: this.ctx, event }));\r\n }\r\n if (entered.length > 0 && hover.onEnter) {\r\n handled = this.isHandled(hover.onEnter({ items: entered, ctx: this.ctx, event })) || handled;\r\n }\r\n\r\n if (hover.state) {\r\n this.applyState(left, hover.state, false);\r\n this.applyState(entered, hover.state, true);\r\n }\r\n\r\n this.hoverItems.set(entry.descriptor.id, next);\r\n return handled;\r\n }\r\n\r\n private processSelect(\r\n entry: LayerEntry,\r\n select: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['select']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n if (items.length === 0) {\r\n const prev = this.selectedItems.get(entry.descriptor.id);\r\n this.selectedItems.set(entry.descriptor.id, new Map());\r\n if (select.onClear) {\r\n const handled = this.isHandled(select.onClear({ ctx: this.ctx, event }));\r\n if (select.state && prev) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n return handled;\r\n }\r\n if (select.state && prev) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n return false;\r\n }\r\n\r\n const prev = this.selectedItems.get(entry.descriptor.id) ?? new Map();\r\n const next = this.itemsToMap(entry, items);\r\n const handled = select.onSelect\r\n ? this.isHandled(select.onSelect({ items, ctx: this.ctx, event }))\r\n : false;\r\n if (select.state) {\r\n const added = Array.from(next.entries())\r\n .filter(([id]) => !prev.has(id))\r\n .map(([, item]) => item);\r\n const removed = Array.from(prev.entries())\r\n .filter(([id]) => !next.has(id))\r\n .map(([, item]) => item);\r\n this.applyState(removed, select.state, false);\r\n this.applyState(added, select.state, true);\r\n }\r\n this.selectedItems.set(entry.descriptor.id, next);\r\n return handled;\r\n }\r\n\r\n private processClick(\r\n entry: LayerEntry,\r\n click: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['click']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n if (items.length === 0) {\r\n return false;\r\n }\r\n return this.isHandled(click.onClick({ items, ctx: this.ctx, event }));\r\n }\r\n\r\n private processDoubleClick(\r\n entry: LayerEntry,\r\n doubleClick: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['doubleClick']\r\n >,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n if (items.length === 0) {\r\n return false;\r\n }\r\n return this.isHandled(doubleClick.onDoubleClick({ items, ctx: this.ctx, event }));\r\n }\r\n\r\n private itemsToMap(\r\n entry: LayerEntry,\r\n items: Array<HitItem<any, any>>,\r\n ): Map<string | number, HitItem<any, any>> {\r\n const next = new Map<string | number, HitItem<any, any>>();\r\n items.forEach((item) => {\r\n const id = entry.descriptor.feature.id(item.model);\r\n next.set(id, item);\r\n });\r\n return next;\r\n }\r\n\r\n private applyState(items: Array<HitItem<any, any>>, state: FeatureState, enabled: boolean): void {\r\n const states = Array.isArray(state) ? state : [state];\r\n items.forEach((item) => {\r\n const current = new Set(getFeatureStates(item.feature));\r\n states.forEach((entry) => {\r\n if (enabled) {\r\n current.add(entry);\r\n } else {\r\n current.delete(entry);\r\n }\r\n });\r\n setFeatureStates(item.feature, Array.from(current));\r\n });\r\n }\r\n\r\n private isHandled(result: InteractionHandlerResult): boolean {\r\n return result === true;\r\n }\r\n\r\n private shouldStopPropagation(base: InteractionBase): boolean {\r\n return base.propagation !== 'continue';\r\n }\r\n\r\n private shouldContinuePropagation(base: InteractionBase): boolean {\r\n return base.propagation === 'continue';\r\n }\r\n\r\n private handleClusterClick(\r\n entry: LayerEntry,\r\n clusterHit: ClusterHit,\r\n event: MapBrowserEvent<UIEvent>,\r\n manualPopupPush: boolean,\r\n ): boolean {\r\n const clustering = entry.descriptor.clustering;\r\n if (!clustering) {\r\n return false;\r\n }\r\n\r\n const models = clusterHit.features\r\n .map((clusterFeature) =>\r\n entry.api.getModelByFeature(clusterFeature as Feature<Geometry>),\r\n )\r\n .filter((model): model is any => model !== undefined);\r\n let handled = false;\r\n\r\n if (clustering.expandOnClick) {\r\n this.expandCluster(clusterHit, clustering.expandOnClick);\r\n clustering.expandOnClick.onExpanded?.({ models, ctx: this.ctx });\r\n handled = true;\r\n }\r\n\r\n if (clustering.popup && this.isEnabled(clustering.popup.enabled)) {\r\n if (manualPopupPush || !this.ctx.popupHost) {\r\n const item = clustering.popup.item({ models, size: clusterHit.size, ctx: this.ctx, event });\r\n if (manualPopupPush && this.ctx.popupHost) {\r\n this.ctx.popupHost.push([\r\n {\r\n ...item,\r\n source: item.source ?? 'cluster',\r\n dedupKey: item.dedupKey ?? this.getClusterDedupKey(entry, models),\r\n },\r\n ]);\r\n }\r\n }\r\n handled = true;\r\n }\r\n\r\n return handled;\r\n }\r\n\r\n private expandCluster(\r\n clusterHit: ClusterHit,\r\n expand: NonNullable<NonNullable<LayerEntry['descriptor']['clustering']>['expandOnClick']>,\r\n ): void {\r\n const view = this.map.getView();\r\n const duration = expand.durationMs;\r\n if (expand.mode === 'zoomIn') {\r\n const currentZoom = view.getZoom() ?? 0;\r\n const delta = expand.zoomDelta ?? 1;\r\n const targetZoom = currentZoom + delta;\r\n const nextZoom =\r\n expand.maxZoom !== undefined ? Math.min(expand.maxZoom, targetZoom) : targetZoom;\r\n view.animate({ zoom: nextZoom, duration });\r\n return;\r\n }\r\n\r\n const extent = createEmpty();\r\n clusterHit.features.forEach((feature) => {\r\n const geometry = feature.getGeometry();\r\n if (geometry) {\r\n extend(extent, geometry.getExtent());\r\n }\r\n });\r\n if (isEmpty(extent)) {\r\n return;\r\n }\r\n const padding = toOlPadding(expand.padding, undefined);\r\n view.fit(extent, {\r\n padding,\r\n duration,\r\n maxZoom: expand.maxZoom,\r\n });\r\n }\r\n\r\n private shouldStopClusterPropagation(): boolean {\r\n return true;\r\n }\r\n}\r\n","import type Style from 'ol/style/Style';\r\n\r\nexport type StyleCacheKey = string;\r\n\r\nexport class StyleCache {\r\n private readonly stringCache = new Map<string, Style | Style[]>();\r\n\r\n get(key: StyleCacheKey): Style | Style[] | undefined {\r\n return this.stringCache.get(key);\r\n }\r\n\r\n set(key: StyleCacheKey, value: Style | Style[]): void {\r\n this.stringCache.set(key, value);\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport type OlMap from 'ol/Map';\r\nimport type { StyleFunction } from 'ol/style/Style';\r\n\r\nimport type {\r\n FeatureDescriptor,\r\n FeatureStyleState,\r\n LayerClustering,\r\n MapContext,\r\n MaybeFn,\r\n Patch,\r\n StyleView,\r\n} from '../../public/types';\r\nimport { getClusterFeatures } from '../cluster-utils';\r\nimport { getFeatureStates } from './feature-states';\r\nimport { StyleCache } from './style-cache';\r\n\r\nexport type StylePipelineOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: FeatureDescriptor<M, G, OPTS>;\r\n ctx: MapContext;\r\n registryGetModel: (feature: Feature<Geometry>) => M | undefined;\r\n map?: OlMap;\r\n};\r\n\r\nconst resolveMaybeFn = <T, A extends any[]>(value: MaybeFn<T, A>, args: A): T => {\r\n if (typeof value === 'function') {\r\n return (value as (...fnArgs: A) => T)(...args);\r\n }\r\n return value;\r\n};\r\n\r\nconst applyPatch = <T extends object>(opts: T, patch: Patch<T>): T => {\r\n const patchValue = typeof patch === 'function' ? patch(opts) : patch;\r\n return { ...opts, ...patchValue };\r\n};\r\n\r\nconst orderStates = (\r\n states: FeatureStyleState[],\r\n priority?: FeatureStyleState[],\r\n): FeatureStyleState[] => {\r\n if (!priority || priority.length === 0) {\r\n return states;\r\n }\r\n const prioritySet = new Set(priority);\r\n const ordered = priority.filter((state) => states.includes(state));\r\n const rest = states.filter((state) => !prioritySet.has(state));\r\n return [...ordered, ...rest];\r\n};\r\n\r\nexport const createStyleFunction = <M, G extends Geometry, OPTS extends object>(\r\n options: StylePipelineOptions<M, G, OPTS>,\r\n): StyleFunction => {\r\n const { descriptor, registryGetModel, map } = options;\r\n const { style } = descriptor;\r\n const cache = new StyleCache();\r\n\r\n return (feature, resolution) => {\r\n if (!(feature instanceof Feature)) {\r\n return [];\r\n }\r\n const model = registryGetModel(feature);\r\n if (!model) {\r\n return [];\r\n }\r\n const view: StyleView = {\r\n resolution,\r\n zoom: map?.getView().getZoom(),\r\n };\r\n let opts = resolveMaybeFn(style.base, [model, view]);\r\n\r\n if (style.states) {\r\n const featureStates = orderStates(getFeatureStates(feature), style.statePriority);\r\n featureStates.forEach((state) => {\r\n const patchFactory = style.states?.[state];\r\n if (!patchFactory) {\r\n return;\r\n }\r\n const patch = resolveMaybeFn(patchFactory, [model, view]);\r\n opts = applyPatch(opts, patch);\r\n });\r\n }\r\n\r\n if (style.cacheKey) {\r\n const key = style.cacheKey(opts, view);\r\n if (key) {\r\n const cached = cache.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const rendered = style.render(opts, view);\r\n cache.set(key, rendered);\r\n return rendered;\r\n }\r\n }\r\n\r\n return style.render(opts, view);\r\n };\r\n};\r\n\r\nexport type ClusterStylePipelineOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: FeatureDescriptor<M, G, OPTS>;\r\n clustering: LayerClustering<M>;\r\n ctx: MapContext;\r\n registryGetModel: (feature: Feature<Geometry>) => M | undefined;\r\n map?: OlMap;\r\n};\r\n\r\nexport const createClusterStyleFunction = <M, G extends Geometry, OPTS extends object>(\r\n options: ClusterStylePipelineOptions<M, G, OPTS>,\r\n): StyleFunction => {\r\n const { clustering, registryGetModel, map } = options;\r\n const baseStyle = createStyleFunction(options);\r\n const cache = new StyleCache();\r\n\r\n return (feature, resolution) => {\r\n if (!(feature instanceof Feature)) {\r\n return [];\r\n }\r\n const clusterFeatures = getClusterFeatures(feature);\r\n if (!clusterFeatures) {\r\n return baseStyle(feature, resolution);\r\n }\r\n\r\n const size = clusterFeatures.length;\r\n if (size === 1) {\r\n return baseStyle(clusterFeatures[0], resolution);\r\n }\r\n\r\n const models = clusterFeatures\r\n .map((clusterFeature) => registryGetModel(clusterFeature))\r\n .filter((model): model is M => model !== undefined);\r\n const view: StyleView = {\r\n resolution,\r\n zoom: map?.getView().getZoom(),\r\n };\r\n\r\n if (clustering.clusterStyle.cacheKey) {\r\n const key = clustering.clusterStyle.cacheKey({ models, size, view });\r\n if (key) {\r\n const cached = cache.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const rendered = clustering.clusterStyle.render({ models, size, view });\r\n cache.set(key, rendered);\r\n return rendered;\r\n }\r\n }\r\n\r\n return clustering.clusterStyle.render({ models, size, view });\r\n };\r\n};\r\n","import type Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nexport class FeatureRegistry<M, G extends Geometry> {\r\n private readonly idToModel = new Map<string | number, M>();\r\n private readonly idToFeature = new Map<string | number, Feature<G>>();\r\n private readonly featureToId = new WeakMap<Feature<G>, string | number>();\r\n\r\n set(id: string | number, model: M, feature: Feature<G>): void {\r\n this.idToModel.set(id, model);\r\n this.idToFeature.set(id, feature);\r\n this.featureToId.set(feature, id);\r\n }\r\n\r\n updateModel(id: string | number, model: M): void {\r\n if (!this.idToModel.has(id)) {\r\n return;\r\n }\r\n this.idToModel.set(id, model);\r\n }\r\n\r\n getModel(id: string | number): M | undefined {\r\n return this.idToModel.get(id);\r\n }\r\n\r\n getFeature(id: string | number): Feature<G> | undefined {\r\n return this.idToFeature.get(id);\r\n }\r\n\r\n getIdByFeature(feature: Feature<G>): string | number | undefined {\r\n return this.featureToId.get(feature);\r\n }\r\n\r\n getModelByFeature(feature: Feature<G>): M | undefined {\r\n const id = this.featureToId.get(feature);\r\n if (id === undefined) {\r\n return undefined;\r\n }\r\n return this.idToModel.get(id);\r\n }\r\n\r\n has(id: string | number): boolean {\r\n return this.idToModel.has(id);\r\n }\r\n\r\n remove(id: string | number): Feature<G> | undefined {\r\n const feature = this.idToFeature.get(id);\r\n if (!feature) {\r\n return undefined;\r\n }\r\n this.idToModel.delete(id);\r\n this.idToFeature.delete(id);\r\n this.featureToId.delete(feature);\r\n return feature;\r\n }\r\n\r\n forEachId(fn: (id: string | number) => void): void {\r\n this.idToModel.forEach((_model, id) => fn(id));\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createEmpty, extend, isEmpty} from 'ol/extent';\r\nimport type VectorLayer from 'ol/layer/Vector';\r\nimport type VectorSource from 'ol/source/Vector';\r\n\r\nimport type {\r\n FeatureDescriptor,\r\n MapContext,\r\n ModelChange,\r\n VectorLayerApi,\r\n VectorLayerDescriptor,\r\n ViewFitOptions,\r\n} from '../public/types';\r\nimport {FeatureRegistry} from './feature-registry';\r\nimport {setFeatureStates} from './style/feature-states';\r\nimport {toOlFitOptions} from './fit-layer.utils';\r\n\r\nexport type VectorLayerBaseOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: VectorLayerDescriptor<M, G, OPTS>;\r\n layer: VectorLayer;\r\n source: VectorSource<G>;\r\n ctx: MapContext;\r\n scheduleInvalidate: () => void;\r\n};\r\n\r\nexport abstract class VectorLayerBase<M, G extends Geometry, OPTS extends object>\r\n implements VectorLayerApi<M, G>\r\n{\r\n protected readonly descriptor: FeatureDescriptor<M, G, OPTS>;\r\n protected readonly layer: VectorLayer;\r\n protected readonly source: VectorSource<G>;\r\n protected readonly registry = new FeatureRegistry<M, G>();\r\n protected readonly scheduleInvalidate: () => void;\r\n protected readonly ctx: MapContext;\r\n private readonly changeHandlers = new Set<(changes: ModelChange<M>[]) => void>();\r\n\r\n constructor(options: VectorLayerBaseOptions<M, G, OPTS>) {\r\n this.descriptor = options.descriptor.feature;\r\n this.layer = options.layer;\r\n this.source = options.source;\r\n this.ctx = options.ctx;\r\n this.scheduleInvalidate = options.scheduleInvalidate;\r\n }\r\n\r\n setModels(models: readonly M[]): void {\r\n this.setModelsInternal(models);\r\n }\r\n\r\n invalidate(): void {\r\n this.scheduleInvalidate();\r\n }\r\n\r\n syncFeatureFromModel(model: M): void {\r\n const id = this.descriptor.id(model);\r\n const feature = this.registry.getFeature(id);\r\n if (!feature) {\r\n return;\r\n }\r\n feature.setGeometry(this.descriptor.geometry.fromModel(model));\r\n }\r\n\r\n getModelByFeature(feature: Feature<G>): M | undefined {\r\n return this.registry.getModelByFeature(feature);\r\n }\r\n\r\n mutate(\r\n id: string | number,\r\n update: (prev: M) => M,\r\n reason: ModelChange<M>['reason'] = 'mutate',\r\n ): void {\r\n const prev = this.registry.getModel(id);\r\n if (!prev) {\r\n return;\r\n }\r\n const next = update(prev);\r\n if (next === prev) {\r\n return;\r\n }\r\n this.registry.updateModel(id, next);\r\n this.syncFeatureFromModel(next);\r\n this.scheduleInvalidate();\r\n this.emitModelChanges([{prev, next, reason}]);\r\n }\r\n\r\n mutateMany(\r\n ids: Array<string | number>,\r\n update: (prev: M) => M,\r\n reason: ModelChange<M>['reason'] = 'mutate',\r\n ): void {\r\n const changes: ModelChange<M>[] = [];\r\n\r\n ids.forEach((id) => {\r\n const prev = this.registry.getModel(id);\r\n if (!prev) {\r\n return;\r\n }\r\n const next = update(prev);\r\n if (next === prev) {\r\n return;\r\n }\r\n this.registry.updateModel(id, next);\r\n this.syncFeatureFromModel(next);\r\n changes.push({prev, next, reason});\r\n });\r\n\r\n if (changes.length === 0) {\r\n return;\r\n }\r\n\r\n this.scheduleInvalidate();\r\n this.emitModelChanges(changes);\r\n }\r\n\r\n onModelsChanged(cb: (changes: ModelChange<M>[]) => void): () => void {\r\n this.changeHandlers.add(cb);\r\n return () => this.changeHandlers.delete(cb);\r\n }\r\n\r\n /** Fit view to all features on the layer. No-op if extent is empty. */\r\n centerOnAllModels(opts?: ViewFitOptions): void {\r\n const current = this.getCenterOnAllModelsSource();\r\n const extent = current?.getExtent?.();\r\n if (!extent || isEmpty(extent)) {\r\n return;\r\n }\r\n this.ctx.map.getView().fit(extent, toOlFitOptions(opts));\r\n }\r\n\r\n /** Fit view to a single feature by id. No-op if feature/geometry is missing. */\r\n centerOnModel(id: string | number, opts?: ViewFitOptions): void {\r\n const feature = this.registry.getFeature(id);\r\n const geom = feature?.getGeometry();\r\n if (!geom) {\r\n return;\r\n }\r\n this.ctx.map.getView().fit(geom.getExtent(), toOlFitOptions(opts));\r\n }\r\n\r\n /**\r\n * Fit view to a subset of features by ids (combined extent).\r\n * Missing ids are ignored. No-op if none found.\r\n */\r\n centerOnModels(ids: ReadonlyArray<string | number>, opts?: ViewFitOptions): void {\r\n const extent = createEmpty();\r\n\r\n let found = false;\r\n for (const id of ids) {\r\n const feature = this.registry.getFeature(id);\r\n const geom = feature?.getGeometry();\r\n if (!geom) continue;\r\n extend(extent, geom.getExtent());\r\n found = true;\r\n }\r\n\r\n if (!found || isEmpty(extent)) {\r\n return;\r\n }\r\n\r\n this.ctx.map.getView().fit(extent, toOlFitOptions(opts));\r\n }\r\n\r\n setVisible(visible: boolean): void {\r\n this.layer.setVisible(visible);\r\n }\r\n\r\n isVisible(): boolean {\r\n return this.layer.getVisible();\r\n }\r\n\r\n setOpacity(opacity: number): void {\r\n this.layer.setOpacity(opacity);\r\n }\r\n\r\n getOpacity(): number {\r\n return this.layer.getOpacity();\r\n }\r\n\r\n getZIndex(): number | undefined {\r\n return this.layer.getZIndex();\r\n }\r\n\r\n setZIndex(z: number): void {\r\n this.layer.setZIndex(z);\r\n }\r\n\r\n getModelById(id: string | number): M | undefined {\r\n return this.registry.getModel(id);\r\n }\r\n\r\n hasModel(id: string | number): boolean {\r\n return this.registry.getFeature(id) != null;\r\n }\r\n\r\n getAllModels(): readonly M[] {\r\n const out: M[] = [];\r\n this.registry.forEachId((id) => {\r\n const model = this.registry.getModel(id);\r\n if (model !== undefined) {\r\n out.push(model);\r\n }\r\n });\r\n return out;\r\n }\r\n\r\n getAllModelIds(): Array<string | number> {\r\n const out: Array<string | number> = [];\r\n this.registry.forEachId((id) => out.push(id));\r\n return out;\r\n }\r\n\r\n setFeatureStates(\r\n ids: string | number | ReadonlyArray<string | number>,\r\n states?: string | string[],\r\n ): void {\r\n const targetIds = Array.isArray(ids) ? ids : [ids];\r\n const nextStates = states ? (Array.isArray(states) ? states : [states]) : [];\r\n\r\n targetIds.forEach((id) => {\r\n const feature = this.registry.getFeature(id);\r\n if (feature) {\r\n setFeatureStates(feature, nextStates);\r\n }\r\n });\r\n\r\n this.scheduleInvalidate();\r\n }\r\n\r\n protected setModelsInternal(models: readonly M[]): void {\r\n const nextIds = new Set<string | number>();\r\n models.forEach((model) => {\r\n const id = this.descriptor.id(model);\r\n nextIds.add(id);\r\n const existingFeature = this.registry.getFeature(id);\r\n if (existingFeature) {\r\n const prevModel = this.registry.getModel(id);\r\n if (prevModel !== model) {\r\n this.registry.updateModel(id, model);\r\n existingFeature.setGeometry(this.descriptor.geometry.fromModel(model));\r\n }\r\n return;\r\n }\r\n\r\n const feature = new Feature<G>({\r\n geometry: this.descriptor.geometry.fromModel(model),\r\n });\r\n feature.setId(id);\r\n this.registry.set(id, model, feature);\r\n this.source.addFeature(feature);\r\n this.descriptor.geometry.onCreate?.({feature, model, ctx: this.ctx});\r\n });\r\n\r\n const toRemove: Array<string | number> = [];\r\n this.registry.forEachId((id) => {\r\n if (!nextIds.has(id)) {\r\n toRemove.push(id);\r\n }\r\n });\r\n toRemove.forEach((id) => {\r\n const feature = this.registry.remove(id);\r\n if (feature) {\r\n this.source.removeFeature(feature);\r\n }\r\n });\r\n }\r\n\r\n protected getCenterOnAllModelsSource(): VectorSource<G> | null {\r\n return this.source;\r\n }\r\n\r\n private emitModelChanges(changes: ModelChange<M>[]): void {\r\n if (changes.length === 0) {\r\n return;\r\n }\r\n this.changeHandlers.forEach((handler) => handler(changes));\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createEmpty} from 'ol/extent';\r\nimport type ClusterSource from 'ol/source/Cluster';\r\nimport type VectorSource from 'ol/source/Vector';\r\n\r\nimport { clearFeatureStates } from './style/feature-states';\r\nimport { createClusterStyleFunction } from './style/style-pipeline';\r\nimport {VectorLayerBase, VectorLayerBaseOptions} from './vector-layer-base';\r\n\r\nexport type ClusteredLayerOptions<M, G extends Geometry, OPTS extends object> =\r\n VectorLayerBaseOptions<M, G, OPTS> & {\r\n clusterSource: ClusterSource;\r\n };\r\n\r\nexport class ClusteredVectorLayer<M, G extends Geometry, OPTS extends object>\r\n extends VectorLayerBase<M, G, OPTS>\r\n{\r\n private readonly clusterSource: ClusterSource;\r\n private clusteringEnabled: boolean;\r\n\r\n constructor(options: ClusteredLayerOptions<M, G, OPTS>) {\r\n super(options);\r\n this.clusterSource = options.clusterSource;\r\n this.clusteringEnabled = options.descriptor.clustering?.enabledByDefault ?? false;\r\n\r\n this.layer.setStyle(\r\n createClusterStyleFunction({\r\n descriptor: this.descriptor,\r\n clustering: options.descriptor.clustering!,\r\n ctx: this.ctx,\r\n registryGetModel: (feature) => this.registry.getModelByFeature(feature as Feature<G>),\r\n map: this.ctx.map,\r\n }),\r\n );\r\n\r\n this.layer.setSource(\r\n this.clusteringEnabled ? (this.clusterSource as unknown as VectorSource<G>) : this.source,\r\n );\r\n }\r\n\r\n override setModels(models: readonly M[]): void {\r\n this.setModelsInternal(models);\r\n this.scheduleInvalidate();\r\n }\r\n\r\n setClusteringEnabled(enabled: boolean): void {\r\n if (this.clusteringEnabled === enabled) {\r\n return;\r\n }\r\n this.clusteringEnabled = enabled;\r\n this.clearInteractionStates();\r\n this.layer.setSource(\r\n enabled ? (this.clusterSource as unknown as VectorSource<G>) : this.source,\r\n );\r\n if (enabled) {\r\n const view = this.ctx.map.getView();\r\n const resolution = view.getResolution() ?? 1;\r\n this.clusterSource.loadFeatures(createEmpty(), resolution, view.getProjection());\r\n this.clusterSource.refresh();\r\n }\r\n this.scheduleInvalidate();\r\n }\r\n\r\n isClusteringEnabled(): boolean {\r\n return this.clusteringEnabled;\r\n }\r\n\r\n private clearInteractionStates(): void {\r\n this.registry.forEachId((id) => {\r\n const feature = this.registry.getFeature(id);\r\n if (feature) {\r\n clearFeatureStates(feature);\r\n }\r\n });\r\n }\r\n\r\n protected override getCenterOnAllModelsSource(): VectorSource<G> | null {\r\n return this.layer.getSource() as unknown as VectorSource<G> | null;\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createStyleFunction} from './style/style-pipeline';\r\nimport {VectorLayerBase, VectorLayerBaseOptions} from './vector-layer-base';\r\n\r\nexport type PlainLayerOptions<M, G extends Geometry, OPTS extends object> =\r\n VectorLayerBaseOptions<M, G, OPTS>;\r\n\r\nexport class PlainVectorLayer<M, G extends Geometry, OPTS extends object> extends VectorLayerBase<\r\n M,\r\n G,\r\n OPTS\r\n> {\r\n constructor(options: PlainLayerOptions<M, G, OPTS>) {\r\n super(options);\r\n\r\n this.layer.setStyle(\r\n createStyleFunction({\r\n descriptor: this.descriptor,\r\n ctx: this.ctx,\r\n registryGetModel: (feature) => this.registry.getModelByFeature(feature as Feature<G>),\r\n map: this.ctx.map,\r\n }),\r\n );\r\n }\r\n}\r\n","import type { Enabled, PopupHostApi, PopupItem } from '../public/types';\r\n\r\nexport type PopupHostOptions = {\r\n enabled?: Enabled;\r\n maxItems?: number;\r\n sort?: (a: PopupItem<any>, b: PopupItem<any>) => number;\r\n mount?: HTMLElement | (() => HTMLElement);\r\n};\r\n\r\ntype ItemWithIndex = { item: PopupItem<any>; index: number };\r\n\r\nexport class PopupHost implements PopupHostApi {\r\n private items: PopupItem<any>[] = [];\r\n private container: HTMLElement | null = null;\r\n private target: HTMLElement | null = null;\r\n\r\n constructor(private readonly options: PopupHostOptions = {}) {\r\n if (options.mount) {\r\n this.mount(options.mount);\r\n }\r\n }\r\n\r\n push(items: PopupItem<any>[]): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.prepareItems([...this.items, ...items]);\r\n this.render();\r\n }\r\n\r\n set(items: PopupItem<any>[]): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.prepareItems(items);\r\n this.render();\r\n }\r\n\r\n clear(): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = [];\r\n this.render();\r\n }\r\n\r\n remove(key: string | number): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.items.filter((item) => this.getDedupKey(item) !== key);\r\n this.render();\r\n }\r\n\r\n getItems(): PopupItem<any>[] {\r\n if (!this.isEnabled()) {\r\n return [];\r\n }\r\n return [...this.items];\r\n }\r\n\r\n mount(target: HTMLElement | (() => HTMLElement)): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n const element = typeof target === 'function' ? target() : target;\r\n if (!element) {\r\n return;\r\n }\r\n if (this.target !== element) {\r\n this.unmount();\r\n }\r\n this.target = element;\r\n this.render();\r\n }\r\n\r\n dispose(): void {\r\n this.unmount();\r\n this.items = [];\r\n }\r\n\r\n private ensureEnabled(): boolean {\r\n if (this.isEnabled()) {\r\n return true;\r\n }\r\n this.items = [];\r\n this.unmount();\r\n return false;\r\n }\r\n\r\n private isEnabled(): boolean {\r\n const enabled = this.options.enabled;\r\n if (enabled === undefined) {\r\n return true;\r\n }\r\n return typeof enabled === 'function' ? enabled() : enabled;\r\n }\r\n\r\n private unmount(): void {\r\n if (this.container && this.container.parentElement) {\r\n this.container.parentElement.removeChild(this.container);\r\n }\r\n this.container = null;\r\n this.target = null;\r\n }\r\n\r\n private prepareItems(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const deduped = this.dedup(items);\r\n const sorted = this.applySort(deduped);\r\n return this.applyLimit(sorted);\r\n }\r\n\r\n private dedup(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const result: PopupItem<any>[] = [];\r\n const indices = new Map<string | number, number>();\r\n items.forEach((item) => {\r\n const key = this.getDedupKey(item);\r\n if (key === undefined) {\r\n result.push(item);\r\n return;\r\n }\r\n const existingIndex = indices.get(key);\r\n if (existingIndex !== undefined) {\r\n result[existingIndex] = item;\r\n return;\r\n }\r\n indices.set(key, result.length);\r\n result.push(item);\r\n });\r\n return result;\r\n }\r\n\r\n private applySort(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const comparator = this.options.sort ?? this.defaultSort;\r\n const withIndex: ItemWithIndex[] = items.map((item, index) => ({ item, index }));\r\n withIndex.sort((a, b) => {\r\n const result = comparator(a.item, b.item);\r\n if (result !== 0) {\r\n return result;\r\n }\r\n return a.index - b.index;\r\n });\r\n return withIndex.map((entry) => entry.item);\r\n }\r\n\r\n private applyLimit(items: PopupItem<any>[]): PopupItem<any>[] {\r\n if (this.options.maxItems === undefined) {\r\n return items;\r\n }\r\n return items.slice(0, this.options.maxItems);\r\n }\r\n\r\n private getDedupKey(item: PopupItem<any>): string | number | undefined {\r\n if (item.dedupKey !== undefined) {\r\n return item.dedupKey;\r\n }\r\n const model = item.model as { id?: string | number };\r\n if (model && (typeof model.id === 'string' || typeof model.id === 'number')) {\r\n return model.id;\r\n }\r\n return undefined;\r\n }\r\n\r\n private defaultSort(a: PopupItem<any>, b: PopupItem<any>): number {\r\n const aPriority = a.priority ?? 0;\r\n const bPriority = b.priority ?? 0;\r\n return bPriority - aPriority;\r\n }\r\n\r\n private render(): void {\r\n if (!this.target) {\r\n return;\r\n }\r\n if (!this.container) {\r\n this.container = document.createElement('div');\r\n this.container.className = 'mf-popup-host';\r\n this.target.appendChild(this.container);\r\n }\r\n this.container.innerHTML = '';\r\n this.items.forEach((item) => {\r\n const card = document.createElement('div');\r\n card.className = 'mf-popup-item';\r\n if (item.className) {\r\n card.classList.add(item.className);\r\n }\r\n if (typeof item.content === 'string') {\r\n card.textContent = item.content;\r\n } else {\r\n card.appendChild(item.content);\r\n }\r\n const key = this.getDedupKey(item);\r\n if (key !== undefined) {\r\n const close = document.createElement('button');\r\n close.type = 'button';\r\n close.dataset['popupClose'] = String(key);\r\n close.textContent = '×';\r\n close.addEventListener('click', () => this.remove(key));\r\n card.appendChild(close);\r\n }\r\n this.container!.appendChild(card);\r\n });\r\n }\r\n}\r\n","import VectorLayer from 'ol/layer/Vector';\r\nimport ClusterSource from 'ol/source/Cluster';\r\nimport VectorSource from 'ol/source/Vector';\r\nimport type OlMap from 'ol/Map';\r\n\r\nimport type {\r\n MapContext,\r\n MapSchema,\r\n VectorLayerApi,\r\n VectorLayerDescriptor,\r\n} from '../public/types';\r\nimport { createMapContext } from './map-context';\r\nimport { InteractionManager } from './interaction-manager';\r\nimport { ClusteredVectorLayer } from './clustered-layer';\r\nimport { PlainVectorLayer } from './plain-layer';\r\nimport { PopupHost } from './popup-host';\r\nimport { FlushScheduler } from './scheduler';\r\n\r\nexport class LayerManager<Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]> {\r\n private readonly layers: Record<string, VectorLayer> = {};\r\n private readonly apis: Record<string, VectorLayerApi<any, any>> = {};\r\n private readonly interactions: InteractionManager<Layers>;\r\n private readonly ctx: MapContext;\r\n\r\n private constructor(private readonly map: OlMap, schema: MapSchema<Layers>) {\r\n const popupHost = schema.options?.popupHost ? new PopupHost(schema.options.popupHost) : undefined;\r\n const scheduler = new FlushScheduler(schema.options?.scheduler?.policy ?? 'microtask');\r\n const ctx = createMapContext(this.map, this.apis, popupHost, scheduler);\r\n this.ctx = ctx;\r\n\r\n schema.layers.forEach((descriptor) => {\r\n const source = new VectorSource<any>();\r\n const clusterSource = descriptor.clustering\r\n ? new ClusterSource({\r\n source,\r\n distance: descriptor.clustering.distance,\r\n })\r\n : null;\r\n const layer = new VectorLayer({ source });\r\n if (descriptor.zIndex !== undefined) {\r\n layer.setZIndex(descriptor.zIndex);\r\n }\r\n if (descriptor.visibleByDefault !== undefined) {\r\n layer.setVisible(descriptor.visibleByDefault);\r\n }\r\n if (descriptor.title) {\r\n layer.set('title', descriptor.title);\r\n }\r\n layer.set('id', descriptor.id);\r\n\r\n const scheduleInvalidate = () => scheduler.schedule(layer, () => layer.changed());\r\n const api = descriptor.clustering\r\n ? new ClusteredVectorLayer({\r\n descriptor,\r\n layer,\r\n source,\r\n clusterSource: clusterSource!,\r\n ctx,\r\n scheduleInvalidate,\r\n })\r\n : new PlainVectorLayer({\r\n descriptor,\r\n layer,\r\n source,\r\n ctx,\r\n scheduleInvalidate,\r\n });\r\n\r\n this.layers[descriptor.id] = layer;\r\n this.apis[descriptor.id] = api;\r\n this.map.addLayer(layer);\r\n });\r\n\r\n this.interactions = new InteractionManager({\r\n ctx,\r\n map: this.map,\r\n schema,\r\n layers: this.layers,\r\n apis: this.apis,\r\n });\r\n }\r\n\r\n static create<Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]>(\r\n map: OlMap,\r\n schema: MapSchema<Layers>,\r\n ): LayerManager<Layers> {\r\n return new LayerManager(map, schema);\r\n }\r\n\r\n getLayer(id: string): VectorLayer | undefined {\r\n return this.layers[id];\r\n }\r\n\r\n getApi(id: string): VectorLayerApi<any, any> | undefined {\r\n return this.apis[id];\r\n }\r\n\r\n getApis(): Record<string, VectorLayerApi<any, any>> {\r\n return { ...this.apis };\r\n }\r\n\r\n getContext(): MapContext {\r\n return this.ctx;\r\n }\r\n\r\n refreshEnabled(): void {\r\n this.interactions.refreshEnabled();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of lib\r\n */\r\n\r\nexport * from './lib/lib.service';\r\nexport * from './lib/lib.component';\r\nexport * from './lib/map-framework';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;MAKa,UAAU,CAAA;AAErB,IAAA,WAAA,GAAA;wGAFW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA;;4FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCQY,YAAY,CAAA;wGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,YAAY,EAPb,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAGU,YAAY,EAAA,UAAA,EAAA,CAAA;kBAVxB,SAAS;+BACE,SAAS,EAAA,OAAA,EACV,EAAE,EACD,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA;;;MCLU,cAAc,CAAA;AAQI,IAAA,aAAA;AAPZ,IAAA,KAAK,GAAG,IAAI,GAAG,EAAuB;IAC/C,aAAa,GAAuB,IAAI;IACxC,cAAc,GAAG,CAAC;IAClB,KAAK,GAAkB,IAAI;IAC3B,UAAU,GAAG,CAAC;IACL,WAAW,GAAkB,EAAE;AAEhD,IAAA,WAAA,CAA6B,gBAA6B,WAAW,EAAA;QAAxC,IAAa,CAAA,aAAA,GAAb,aAAa;;IAE1C,KAAK,CAAC,EAAc,EAAE,OAAsB,EAAA;AAC1C,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;AAEvC,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC;AACpB,QAAA,IAAI;AACF,YAAA,EAAE,EAAE;;gBACI;AACR,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAClD,YAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;;YAExB,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,KAAK,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;gBACjF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE;AACzD,gBAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;;;;AAKhC,IAAA,QAAQ,CAAC,GAAY,EAAE,IAAgB,EAAE,MAAoB,EAAA;QAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;AAGnB,IAAA,YAAY,CAAC,MAAoB,EAAA;QACvC,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;AAC9C,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;YACtE;;AAGF,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE;AACzD,gBAAA,IAAI,CAAC,aAAa,GAAG,OAAO;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;YAE7B;;AAGF,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;AAGrB,IAAA,aAAa,CAAC,MAAmB,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,cAAc;AACnC,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;AACvB,gBAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAElC,YAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAClE;;AAGF,QAAA,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;;IAG9C,KAAK,CAAC,MAAmB,EAAE,KAAa,EAAA;AAC9C,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;YAClE;;AAEF,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;AAEnB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QAClB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;;IAGzB,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;;QAEtD,OAAO,IAAI,CAAC,aAAa;;IAGnB,eAAe,CACrB,OAA2B,EAC3B,IAAiB,EAAA;QAEjB,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG,WAAW;;IAG1D,mBAAmB,CAAC,OAAoB,EAAE,IAAiB,EAAA;AACjE,QAAA,OAAO,OAAO,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK;;AAEnD;;ACnGM,MAAM,gBAAgB,GAAG,CAC9B,GAAU,EACV,MAAgD,EAChD,SAAwB,EACxB,SAA4B,GAAA,IAAI,cAAc,EAAE,KAClC;IACd,OAAO;QACL,GAAG;QACH,MAAM;QACN,SAAS;AACT,QAAA,KAAK,EAAE,CAAC,EAAc,EAAE,OAAsB,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC;KAChF;AACH,CAAC;;ACdD,MAAM,oBAAoB,GAAG,UAAU;AAEhC,MAAM,kBAAkB,GAAG,CAChC,OAA0B,KACS;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC5B,QAAA,OAAO,IAAI;;IAEb,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAA+B;QAChE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACrC,YAAA,OAAO,KAAK;;QAEd,MAAM,SAAS,GAAG,IAAgD;AAClE,QAAA,OAAO,OAAO,SAAS,CAAC,GAAG,KAAK,UAAU,IAAI,OAAO,SAAS,CAAC,WAAW,KAAK,UAAU;AAC3F,KAAC,CAAC;AACF,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,IAAI;;AAEb,IAAA,OAAO,KAAK;AACd,CAAC;;ACrBD;;;AAGG;AACH,MAAM,kBAAkB,GAAqC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC7E,MAAM,oBAAoB,GAAG,GAAG;SAEhB,WAAW,CACzB,CAAkB,EAClB,WAAyD,kBAAkB,EAAA;IAE3E,IAAI,CAAC,CAAC,EAAE;AACN,QAAA,OAAO,QAAQ;;AAGjB,IAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG;QACf,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;IAGrB,IAAI,UAAU,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE;AACxC,QAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC;;AAG7D,IAAA,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;AAC3C;AAEM,SAAU,cAAc,CAAC,IAAqB,EAAA;IAClD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,kBAAkB;AAChE,IAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,oBAAoB;;AAGvD,IAAA,MAAM,OAAO,GAAQ,EAAC,OAAO,EAAE,QAAQ,EAAC;AACxC,IAAA,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE;AACzB,QAAA,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;;AAEhC,IAAA,OAAO,OAAO;AAChB;;ACpCA,MAAM,UAAU,GAAG,gBAAgB;AAE5B,MAAM,gBAAgB,GAAG,CAAC,OAA0B,KAAc;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACtC,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,QAAA,OAAO,MAAM;;AAEf,IAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,CAAC,MAAM,CAAC;;AAEjB,IAAA,OAAO,EAAE;AACX,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,OAA0B,EAAE,MAAgB,KAAU;AACrF,IAAA,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC;AACjC,CAAC;AAEM,MAAM,kBAAkB,GAAG,CAAC,OAA0B,KAAU;AACrE,IAAA,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;AAC7B,CAAC;;MCqGY,kBAAkB,CAAA;AAGZ,IAAA,GAAG;AACH,IAAA,GAAG;AACH,IAAA,MAAM;AACN,IAAA,MAAM;AACN,IAAA,IAAI;AACJ,IAAA,OAAO;AACP,IAAA,UAAU,GAAG,IAAI,GAAG,EAAmD;AACvE,IAAA,aAAa,GAAG,IAAI,GAAG,EAAmD;AAC1E,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAA2B;AACrD,IAAA,cAAc,GAAG,IAAI,GAAG,EAAwB;AAChD,IAAA,cAAc,GAAG,IAAI,GAAG,EAA6B;AACrD,IAAA,UAAU;AACV,IAAA,YAAY,GAAG,IAAI,GAAG,EAA2B;AACjD,IAAA,YAAY,GAAG,IAAI,GAAG,EAAmC;IAClE,YAAY,GAAG,CAAC;AAChB,IAAA,aAAa;AACb,IAAA,aAAa;AAErB,IAAA,WAAA,CAAY,OAA0C,EAAA;AACpD,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;AACtB,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,MAAM;QACjE,IAAI,CAAC,cAAc,EAAE;;IAGvB,cAAc,GAAA;AACZ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;QAC5E,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE;;AAG7B,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmC;QAC5D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACxC,YAAA,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY;AACpD,YAAA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE;AAC3B,gBAAA,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;AAC1E,gBAAA,WAAW,EACT,CAAC,CAAC,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC;AACjF,gBAAA,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;AAC1E,gBAAA,MAAM,EAAE,CAAC,CAAC,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7E,gBAAA,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;AACtF,gBAAA,MAAM,EAAE,CAAC,CAAC,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9E,aAAA,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAChC,QAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QACzB,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;;AAGlC,IAAA,iBAAiB,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;YACpC;;AAEF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY;AAE1D,YAAA,MAAM,SAAS,GAAG,YAAY,EAAE,SAAS;YACzC,IAAI,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;gBAClD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AACzC,oBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;oBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,KAAK;oBACL,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,YAAY,CAAC;AAC3D,iBAAA,CAAC;AACF,gBAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,oBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAC9C,KAAK,EACL,KAAK,CAAC,UAA8B,EACpC,gBAAgB,EAChB,UAAU,CACX;AAED,oBAAA,IAAI,MAA4C;AAChD,oBAAA,IAAI,SAAS,CAAC,UAAU,EAAE;AACxB,wBAAA,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;;yBAC9E;AACL,wBAAA,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;;oBAGxB,IAAI,MAAM,EAAE;AACV,wBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;wBAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC;wBACrD,IAAI,QAAQ,EAAE;AACZ,4BAAA,MAAM,MAAM,GAAoB;gCAC9B,SAAS;gCACT,eAAe,EAAE,KAAK,CAAC,UAA8B;gCACrD,cAAc,EAAE,KAAK,CAAC,UAA8B;AACpD,gCAAA,QAAQ,EAAE,QAAQ;AAClB,gCAAA,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,CAAC;gCAC7C,SAAS;6BACV;AACD,4BAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC;4BACtD,IAAI,CAAC,WAAW,EAAE;AAElB,4BAAA,IAAI,SAAS,CAAC,KAAK,EAAE;AACnB,gCAAA,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;;AAGpD,4BAAA,MAAM,OAAO,GAAG,SAAS,CAAC;kCACtB,IAAI,CAAC,SAAS,CACZ,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;kCAE7E,KAAK;AACT,4BAAA,MAAM,CAAC,WAAW,GAAG,OAAO;4BAE5B,IAAI,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE;gCACpD;;;;;;AAOV,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;gBAClD;;;AAIJ,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG1B,IAAA,iBAAiB,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;YACpC;;AAEF,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE;YACtE;;QAEF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC,YAAY,EAAE;oBACjB;;AAEF,gBAAA,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM;AAClC,gBAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC;AAExE,gBAAA,IAAI,YAAY,CAAC,cAAc,GAAG,CAAC,EAAE;AACnC,oBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AAC/B,wBAAA,OAAO,EAAE;AACT,wBAAA,YAAY,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AAC3C,4BAAA,YAAY,CAAC,aAAa,GAAG,SAAS;AACtC,4BAAA,IAAI,YAAY,CAAC,YAAY,EAAE;AAC7B,gCAAA,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY;AACzC,gCAAA,YAAY,CAAC,YAAY,GAAG,SAAS;gCACrC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC;;AAExD,yBAAC,EAAE,YAAY,CAAC,cAAc,CAAC;;yBAC1B;AACL,wBAAA,YAAY,CAAC,YAAY,GAAG,KAAK;;;qBAE9B;AACL,oBAAA,OAAO,EAAE;;gBAGX,IAAI,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;oBAClE;;gBAEF;;AAEF,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;AAEnE,YAAA,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACzB,oBAAA,OAAO,EAAE;AACT,oBAAA,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AACrC,wBAAA,MAAM,CAAC,aAAa,GAAG,SAAS;AAChC,wBAAA,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,4BAAA,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY;AACnC,4BAAA,MAAM,CAAC,YAAY,GAAG,SAAS;4BAC/B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;;AAEnD,qBAAC,EAAE,MAAM,CAAC,cAAc,CAAC;;qBACpB;AACL,oBAAA,MAAM,CAAC,YAAY,GAAG,KAAK;;;iBAExB;AACL,gBAAA,OAAO,EAAE;;YAGX,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE;gBAC/D;;;AAIJ,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG1B,IAAA,eAAe,CAAC,KAA+B,EAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;YAClC;;AAEF,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE;YACtE;;QAEF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,gBAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,oBAAA,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC;AAClC,oBAAA,MAAM,CAAC,aAAa,GAAG,SAAS;;AAElC,gBAAA,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,oBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY;AACnC,oBAAA,MAAM,CAAC,YAAY,GAAG,SAAS;oBAC/B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;;AAEjD,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;AAC5D,gBAAA,IAAI,QAAQ,IAAI,SAAS,CAAC,KAAK,EAAE;AAC/B,oBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAC9C,KAAK,EACL,MAAM,CAAC,eAAe,EACtB,cAAc,EACd,CAAC,QAAQ,CAAC,CACX;AACD,oBAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CACjC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAC1E;;qBACI;AACL,oBAAA,MAAM,CAAC,WAAW,GAAG,KAAK;;gBAG5B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;gBAE7C,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE;oBAC/D;;gBAEF;;AAGF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,YAAY,EAAE;gBACjB;;AAEF,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM;AAClC,YAAA,IAAI,YAAY,CAAC,aAAa,EAAE;AAC9B,gBAAA,YAAY,CAAC,YAAY,CAAC,aAAa,CAAC;AACxC,gBAAA,YAAY,CAAC,aAAa,GAAG,SAAS;;AAExC,YAAA,IAAI,YAAY,CAAC,YAAY,EAAE;AAC7B,gBAAA,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY;AACzC,gBAAA,YAAY,CAAC,YAAY,GAAG,SAAS;gBACrC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC;;AAEtD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC;AAClE,YAAA,IAAI,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE;AAC5B,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1E,gBAAA,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CACvC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CACpE;;iBACI;AACL,gBAAA,YAAY,CAAC,WAAW,GAAG,KAAK;;YAGlC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC;YAEhD,IAAI,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;gBAClE;;;AAIJ,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG1B,IAAA,iBAAiB,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;YACpC;;AAEF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;QAC5E,MAAM,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,KAAK,GAAG,KAAK;AACzF,QAAA,MAAM,SAAS,GAAG,QAAQ,KAAK,OAAO;QACtC,MAAM,UAAU,GAA0B,EAAE;QAC5C,IAAI,YAAY,GAAG,KAAK;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK;AAC1D,YAAA,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;AAC7D,YAAA,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE;gBAC/B;;AAEF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,gBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK;AACL,gBAAA,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,KAAM,CAAC,YAAY,GAAG,SAAS,CAAC;AACnF,aAAA,CAAC;YAEF,IAAI,YAAY,EAAE;AAChB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAM,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;gBACxE,IAAI,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAM,CAAC,EAAE;oBACjD;;;AAIJ,YAAA,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC,YAAY,EAAE;AAC3C,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;AACjE,gBAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,oBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAC7B,oBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;wBAC9B,YAAY,GAAG,IAAI;;;;;AAK3B,QAAA,IAAI,SAAS,IAAI,SAAS,EAAE;AAC1B,YAAA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;;AAG3B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG1B,IAAA,iBAAiB,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;YACpC;;AAEF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;QAC5E,MAAM,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,KAAK,GAAG,KAAK;AACzF,QAAA,MAAM,SAAS,GAAG,QAAQ,KAAK,OAAO;QACtC,MAAM,UAAU,GAA0B,EAAE;QAC5C,IAAI,YAAY,GAAG,KAAK;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM;YAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK;AAC1D,YAAA,MAAM,aAAa,GAAG,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9D,YAAA,MAAM,YAAY,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3D,YAAA,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI;AAC9F,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS,EAAE;gBACvE;;AAGF,YAAA,MAAM,UAAU,GAAG;gBACjB,aAAa,GAAG,MAAM,EAAE,YAAY,GAAG,SAAS;gBAChD,YAAY,GAAG,KAAK,EAAE,YAAY,GAAG,SAAS;aAC/C,CAAC,MAAM,CAAC,CAAC,KAAK,KAAsB,KAAK,KAAK,SAAS,CAAC;YACzD,MAAM,YAAY,GAChB,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACnF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,gBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK;gBACL,YAAY;AACb,aAAA,CAAC;AAEF,YAAA,IAAI,iBAAiB,IAAI,SAAS,CAAC,OAAO,EAAE;AAC1C,gBAAA,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC,YAAY,EAAE;AAC3C,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;AACjE,oBAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,wBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAC7B,wBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;4BAC9B,YAAY,GAAG,IAAI;;;;AAIzB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC;gBACpF,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;wBACvC;;oBAEF;;;AAIJ,YAAA,IAAI,aAAa,IAAI,YAAY,EAAE;AACjC,gBAAA,MAAM,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC,KAAK,GAAG,EAAE;AACxD,gBAAA,MAAM,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC,KAAK,GAAG,EAAE;gBAEtD,MAAM,aAAa,GAAG;AACpB,sBAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAO,EAAE,WAAW,EAAE,KAAK;sBACrD,KAAK;gBACT,MAAM,WAAW,GAAG,aAAa,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAO,CAAC;AACxE,gBAAA,MAAM,UAAU,GACd,CAAC,aAAa,KAAK,aAAa,IAAI,IAAI,CAAC,yBAAyB,CAAC,MAAO,CAAC,CAAC;AAE9E,gBAAA,IAAI,YAAY,IAAI,UAAU,EAAE;AAC9B,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAM,EAAE,UAAU,EAAE,KAAK,CAAC;oBACxE,IAAI,YAAY,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAM,CAAC,EAAE;wBACtD;;;gBAIJ,IAAI,WAAW,EAAE;oBACf;;;AAIJ,YAAA,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC,YAAY,IAAI,EAAE,iBAAiB,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;AACxF,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;AACjE,gBAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,oBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAC7B,oBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;wBAC9B,YAAY,GAAG,IAAI;;;;;AAK3B,QAAA,IAAI,SAAS,IAAI,SAAS,EAAE;AAC1B,YAAA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;;;AAI7B,IAAA,iBAAiB,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;YACjC;;AAEF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW;AACtE,YAAA,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;gBACxD;;AAGF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,gBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK;gBACL,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC;AAC7D,aAAA,CAAC;AAEF,YAAA,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE;gBACzF;;AAEF,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS;AAE3B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC;YACzE,IAAI,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE;gBACtD;;;;AAKE,IAAA,sBAAsB,CAAC,EAAc,EAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB;QAChE,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;YAC9B;;AAEF,QAAA,EAAE,EAAE;;AAGE,IAAA,aAAa,CAAC,YAAqB,EAAA;QACzC,MAAM,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,KAAK,GAAG,KAAK;AACzF,QAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,OAAO;AACvC,QAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,OAAO;QAEvC,IAAI,gBAAgB,GAAG,UAAU;QACjC,IAAI,gBAAgB,GAAG,UAAU;QACjC,IAAI,gBAAgB,GAAG,KAAK;QAC5B,IAAI,gBAAgB,GAAG,KAAK;QAC5B,IAAI,gBAAgB,GAAG,KAAK;QAC5B,IAAI,cAAc,GAAG,KAAK;QAE1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACxC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;AAClD,YAAA,IAAI,KAAK,EAAE,KAAK,EAAE;gBAChB,gBAAgB,GAAG,IAAI;;YAEzB,IAAI,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,EAAE;gBACjC,gBAAgB,GAAG,IAAI;;AAEzB,YAAA,IAAI,KAAK,EAAE,WAAW,EAAE;gBACtB,gBAAgB,GAAG,IAAI;;YAEzB,IAAI,KAAK,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,EAAE;gBACrC,gBAAgB,GAAG,IAAI;gBACvB,gBAAgB,GAAG,IAAI;gBACvB,cAAc,GAAG,IAAI;;AAEvB,YAAA,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY;YACpD,IAAI,YAAY,IAAI,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE;gBAC3D,gBAAgB,GAAG,IAAI;;YAEzB,IACE,UAAU,CAAC,UAAU;AACrB,iBAAC,UAAU,CAAC,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EACpE;gBACA,gBAAgB,GAAG,IAAI;;AAE3B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,KAAK,KACzD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAC9B;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC3F,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,cAAc,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;;AAGlF,IAAA,gBAAgB,CAAC,SAA+C,EAAA;AACtE,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;QAEjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACxC,YAAA,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY;AACpD,YAAA,MAAM,MAAM,GAAG,YAAY,EAAE,MAAM;AACnC,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,KAAK;AAC7D,YAAA,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,IAAI,OAAO;YACxC,IAAI,CAAC,YAAY,EAAE;gBACjB;;YAEF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,EAAE;gBACV;;AAEF,YAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAE,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;gBACnE;;YAEF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAmC;YACvE,IAAI,CAAC,MAAM,EAAE;gBACX;;AAEF,YAAA,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC;gBAC7B,MAAM;gBACN,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC;gBACzD,KAAK,EAAE,MAAM,CAAC,WAAW;AAC1B,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,GAAG;gBACX,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,KAClC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CACnD;gBACD,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,KAChC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CACjD;aACF;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC;AACpC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/D,SAAC,CAAC;AAEF,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;;AAEtC,SAAC,CAAC;;AAGI,IAAA,oBAAoB,CAAC,OAAe,EAAA;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE;YACV;;AAEF,QAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC;AAC7C,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;;AAG7B,IAAA,uBAAuB,CAC7B,KAAiB,EACjB,MAAyB,EACzB,KAAkB,EAAA;AAElB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;AACrE,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB;;AAEF,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;;AAE5C,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;;;AAIpE,IAAA,qBAAqB,CAC3B,KAAiB,EACjB,MAAyB,EACzB,KAAkB,EAAA;AAElB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;AACrE,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB;;AAEF,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAK;AAC/B,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBAC3C,IAAI,CAAC,QAAQ,EAAE;oBACb;;AAEF,gBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AAClD,gBAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CACd,EAAE,EACF,CAAC,IAAI,KACH,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAe,CAAC,EAC/E,QAAQ,CACT;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;AACF,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;;AAExE,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;;IAIvC,2BAA2B,CACjC,KAAiB,EACjB,QAAuC,EAAA;AAEvC,QAAA,OAAO;AACJ,aAAA,QAAQ;AACR,aAAA,GAAG,CAAC,CAAC,OAAO,KAAI;YACf,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAuB,CAAC;YAClE,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,IAAI;;AAEb,YAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAuB;AAChD,SAAC;aACA,MAAM,CAAC,CAAC,IAAI,KAAgC,IAAI,KAAK,IAAI,CAAC;;AAGvD,IAAA,oBAAoB,CAC1B,YAA8E,EAAA;AAE9E,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,MAAM;AACnB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,WAAW;AACxB,YAAA,YAAY,CAAC,SAAS;AACtB,YAAA,YAAY,CAAC,MAAM;SACpB;QACD,OAAO,UAAU,CAAC,IAAI,CACpB,CAAC,WAAW,KAAK,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAC5E;;AAGK,IAAA,cAAc,CACpB,IAAkB,EAClB,OAAgB,EAChB,OAAkD,EAAA;QAElD,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAChC,gBAAA,MAAM,GAAG,GACP,IAAI,CAAC,GAAG,CAAC,EAIV,CAAC,IAAI,EAAE,OAAO,CAAC;gBAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;;YAElC;;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;;AAGnB,IAAA,cAAc,CAAC,IAAkB,EAAA;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QACvC,IAAI,GAAG,EAAE;AACP,YAAA,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;;;AAI1B,IAAA,WAAW,CAAC,IAAkB,EAAA;QACpC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG5B,IAAA,oBAAoB,CAAC,SAA+C,EAAA;QAC1E,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,KAAI;YAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI;AACrC,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,MAAM,EAAE,KAAK;aACd;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACzC,IAAI,CAAC,KAAK,EAAE;gBACV;;YAGF,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AAC7B,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;;YAE7B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC/B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;YAE9B,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACrC,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;;YAE7B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAE5B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;AAGnB,IAAA,eAAe,CAAC,KAAiB,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE;YACT;;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK;AAC1D,QAAA,IAAI,KAAK,EAAE,KAAK,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;;QAEhE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;;AAGrC,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE;YACT;;QAEF,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM;AAC5D,QAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;QAEjE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;;AAGxC,IAAA,eAAe,CAAC,KAAiB,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;;;AAIhD,IAAA,YAAY,CAAC,KAAiB,EAAA;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;;;AAI7C,IAAA,YAAY,CAAC,KAAgC,EAAA;AACnD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAClD,QAAA,IAAI,YAAY,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC;YACzC;;QAEF,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YACzB;;QAGF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY;YAC1D,IAAI,CAAC,YAAY,EAAE;gBACjB;;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;YAChD,IAAI,CAAC,MAAM,EAAE;gBACX;;YAEF,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC;AAC7D,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,gBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK;gBACL,YAAY;AACb,aAAA,CAAC;AACF,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBACtB;;;AAIJ,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;IAGnB,sBAAsB,GAAA;QAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3C,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACtE,IAAI,eAAe,EAAE;AACnB,gBAAA,OAAO,eAAe,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI;;AAEjD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACjE,IAAI,YAAY,EAAE;AAChB,gBAAA,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI;;;AAG7C,QAAA,OAAO,SAAS;;AAGV,IAAA,cAAc,CACpB,YAA8E,EAAA;AAE9E,QAAA,MAAM,UAAU,GAAoD;AAClE,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,MAAM;AACnB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,WAAW;AACxB,YAAA,YAAY,CAAC,SAAS;AACtB,YAAA,YAAY,CAAC,MAAM;SACpB;AACD,QAAA,KAAK,MAAM,WAAW,IAAI,UAAU,EAAE;YACpC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBACvC;;YAEF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;gBACxC;;YAEF,OAAO,WAAW,CAAC,MAAM;;AAE3B,QAAA,OAAO,SAAS;;AAGV,IAAA,qBAAqB,CAC3B,YAA8E,EAAA;AAE9E,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,MAAM;AACnB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,WAAW;AACxB,YAAA,YAAY,CAAC,SAAS;AACtB,YAAA,YAAY,CAAC,MAAM;SACpB,CAAC,MAAM,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACnG,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;;QAExC,MAAM,UAAU,GAAG;aAChB,GAAG,CAAC,CAAC,WAAW,KAAK,WAAW,EAAE,YAAY;aAC9C,MAAM,CAAC,CAAC,KAAK,KAAsB,KAAK,KAAK,SAAS,CAAC;AAC1D,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;;AAExC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;;AAGxB,IAAA,SAAS,CAAC,MAAe,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;YACjC;;AAEF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACtC,IAAI,CAAC,MAAM,EAAE;YACX;;QAEF,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;;IAGrB,gBAAgB,GAAA;QACtB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI;QACnD,IAAI,aAAa,EAAE;AACjB,YAAA,OAAO,aAAa;;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI;QACrC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,YAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,gBAAA,OAAO,IAAI;;AAEb,YAAA,OAAO,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;;AAExC,QAAA,OAAO,MAAqB;;AAGtB,IAAA,aAAa,CAAC,OAAe,EAAA;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;AAC3E,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,OAAO,IAAI;;QAEb,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AAClB,YAAA,OAAO,IAAI;;QAEb,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;;AAGlC,IAAA,kBAAkB,CACxB,KAAiB,EACjB,MAAuB,EACvB,KAA+B,EAAA;AAE/B,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;QAC5D,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;YACpD;;AAGF,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,UAA8B;AAC3D,QAAA,MAAM,KAAK,GAAG;YACZ,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5C,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;SAC7C;AACD,QAAA,MAAM,CAAC,cAAc,GAAG,cAAc;AACtC,QAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ;QAE1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;QAC/C,IAAI,CAAC,QAAQ,EAAE;YACb;;AAEF,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE;AACnC,QAAA,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAExC,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAC1B,KAAK,CAAC,GAAG,CAAC,MAAM,CACd,MAAM,CAAC,SAAS,EAChB,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,EAClF,WAAW,CACZ,CACF;AAED,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAC9C,KAAK,EACL,MAAM,CAAC,eAAe,EACtB,aAAa,EACb,CAAC,QAAQ,CAAC,CACX;AACD,YAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CACjC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAC7E;;aACI;AACL,YAAA,MAAM,CAAC,WAAW,GAAG,KAAK;;;AAItB,IAAA,iBAAiB,CACvB,KAAiB,EACjB,MAAoB,EACpB,KAA+B,EAAA;AAE/B,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;QAC5D,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;YACjD;;AAGF,QAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ;QAE1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;QAC/C,IAAI,CAAC,QAAQ,EAAE;YACb;;AAGF,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,EAAE;AACrC,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAC1B,KAAK,CAAC,GAAG,CAAC,MAAM,CACd,MAAM,CAAC,SAAS,EAChB,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,EACpF,QAAQ,CACT,CACF;AAED,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1E,YAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CACjC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CACvE;;aACI;AACL,YAAA,MAAM,CAAC,WAAW,GAAG,KAAK;;;AAItB,IAAA,eAAe,CACrB,KAAiB,EACjB,MAAuB,EACvB,IAA+B,EAAA;AAE/B,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,MAAM,CAAC,QAAQ;AACzC,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,YAAA,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC;AAClC,YAAA,MAAM,CAAC,aAAa,GAAG,SAAS;AAChC,YAAA,MAAM,CAAC,YAAY,GAAG,SAAS;;QAGjC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;;QAG7D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,aAAa,EAAE;;AAGd,IAAA,YAAY,CAClB,KAAiB,EACjB,MAAoB,EACpB,IAA+B,EAAA;AAE/B,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,MAAM,CAAC,QAAQ;AACzC,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,YAAA,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC;AAClC,YAAA,MAAM,CAAC,aAAa,GAAG,SAAS;AAChC,YAAA,MAAM,CAAC,YAAY,GAAG,SAAS;;QAGjC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;QAG1D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,aAAa,EAAE;;IAGd,aAAa,CAAC,KAAiB,EAAE,SAA0B,EAAA;QACjE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE;QACtC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI;;AAEb,QAAA,MAAM,cAAc,GAAG,MAAM,YAAY,aAAa,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,MAAM;QACpF,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,IAAI;;QAEb,MAAM,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC;AACxD,QAAA,IAAI,EAAE,OAAO,YAAY,OAAO,CAAC,EAAE;AACjC,YAAA,OAAO,IAAI;;QAEb,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAA4B,CAAC;QACvE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;;IAGnB,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;YAC3B;;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI;QACjD,IAAI,CAAC,YAAY,EAAE;YACjB;;QAEF,MAAM,QAAQ,GAAG;AACd,aAAA,QAAQ;aACR,MAAM,CAAC,CAAC,WAAW,KAA6B,WAAW,YAAY,OAAO,CAAC;AAClF,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE;;AAEhC,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;YAC/B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC;;AAE/D,YAAA,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;AAC9B,SAAC,CAAC;;IAGI,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;YAC3B;;AAEF,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;YAC3B;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB;;QAEF,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,WAAW,KAAI;AACpD,YAAA,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC;AAClC,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;;AAGxB,IAAA,oBAAoB,CAC1B,KAA+B,EAC/B,eAAiC,EACjC,IAAuD,EACvD,KAA+B,EAAA;AAE/B,QAAA,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO;YACL,IAAI;YACJ,QAAQ;YACR,UAAU,EAAE,KAAK,CAAC,UAA8B;YAChD,eAAe;AACf,YAAA,eAAe,EAAE,KAAK;SACM;;AAGxB,IAAA,iBAAiB,CACvB,KAA+B,EAC/B,IAA+C,EAC/C,KAA+B,EAAA;AAE/B,QAAA,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO;YACL,IAAI;YACJ,QAAQ;AACR,YAAA,eAAe,EAAE,KAAK;SACG;;IAGrB,oBAAoB,GAAA;QAC1B,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,KAAI;YAC7C,MAAM,KAAK,GAA6B,EAAE;AAC1C,YAAA,IAAI,UAAkC;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAC5B,KAAK,CAAC,KAAK,EACX,CAAC,OAAO,KAAI;AACV,gBAAA,IAAI,EAAE,OAAO,YAAY,OAAO,CAAC,EAAE;oBACjC;;AAEF,gBAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAA4B,CAAC;gBACxE,IAAI,eAAe,EAAE;AACnB,oBAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC9B,IAAI,CAAC,UAAU,EAAE;AACf,4BAAA,UAAU,GAAG;AACX,gCAAA,OAAO,EAAE,OAA4B;AACrC,gCAAA,QAAQ,EAAE,eAAe;gCACzB,IAAI,EAAE,eAAe,CAAC,MAAM;6BAC7B;;wBAEH;;AAEF,oBAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC;oBACxC,MAAM,WAAW,GAAG,GAAG,CAAC,iBAAiB,CAAC,aAAkC,CAAC;oBAC7E,IAAI,CAAC,WAAW,EAAE;wBAChB;;AAEF,oBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;oBAC1D;;gBAEF,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,OAA4B,CAAC;gBACjE,IAAI,CAAC,KAAK,EAAE;oBACV;;gBAEF,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAChC,aAAC,EACD;gBACE,WAAW,EAAE,CAAC,cAAc,KAAK,cAAc,KAAK,KAAK;gBACzD,YAAY;AACb,aAAA,CACF;AACD,YAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE;AACvC,SAAC;;AAGK,IAAA,wBAAwB,CAC9B,KAAiB,EACjB,KAA+B,EAC/B,KAA+B,EAAA;QAE/B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;AAC5C,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AAC5C,YAAA,OAAO,EAAE;;AAEX,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACxB,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;gBAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK;AACN,aAAA,CAAC;YACF,OAAO;AACL,gBAAA,GAAG,SAAS;AACZ,gBAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,SAAS;AACrC,gBAAA,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;aACxE;AACH,SAAC,CAAC;;AAGI,IAAA,iBAAiB,CACvB,KAAiB,EACjB,SAAwB,EACxB,KAA+B,EAAA;AAE/B,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE;AACzF,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU;AAC9C,YAAA,IAAI,UAAU,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AACjE,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;AAC9B,qBAAA,GAAG,CAAC,CAAC,cAAc,KAClB,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAmC,CAAC;qBAEjE,MAAM,CAAC,CAAC,KAAK,KAAmB,KAAK,KAAK,SAAS,CAAC;AACvD,gBAAA,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;oBACtC,MAAM;AACN,oBAAA,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI;oBAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK;AACN,iBAAA,CAAC;gBACF,OAAO;AACL,oBAAA;AACE,wBAAA,GAAG,SAAS;AACZ,wBAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,SAAS;AACrC,wBAAA,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;AACvE,qBAAA;iBACF;;AAEH,YAAA,OAAO,EAAE;;AAEX,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;;IAG7D,kBAAkB,CAAC,KAAiB,EAAE,MAAa,EAAA;QACzD,MAAM,GAAG,GAAG;AACT,aAAA,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACzD,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;aACjC,IAAI,CAAC,GAAG,CAAC;QACZ,OAAO,CAAA,QAAA,EAAW,KAAK,CAAC,UAAU,CAAC,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;;IAGxC,gBAAgB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC;aAChB,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,MAAM;YAC3B,UAAU;YACV,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AAC9B,SAAA,CAAC;AACD,aAAA,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG;AAC1C,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACb,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;AACnC,YAAA,IAAI,EAAE,KAAK,EAAE,EAAE;gBACb,OAAO,EAAE,GAAG,EAAE;;AAEhB,YAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAC1B,SAAC,CAAC;;AAGE,IAAA,eAAe,CAAC,YAAqB,EAAA;AAC3C,QAAA,IAAI,YAAY,KAAK,SAAS,EAAE;AAC9B,YAAA,OAAO,YAAY;;QAErB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,KAAK,SAAS,EAAE;AACnD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY;;AAEzC,QAAA,OAAO,CAAC;;AAGF,IAAA,SAAS,CAAC,OAAmC,EAAA;AACnD,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YACjC,OAAO,OAAO,EAAE;;AAElB,QAAA,OAAO,OAAO;;AAGR,IAAA,YAAY,CAClB,KAAiB,EACjB,KAA6F,EAC7F,KAA+B,EAC/B,KAA+B,EAAA;AAE/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACtC,aAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;aAC9B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnC,aAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;aAC9B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;QAE1B,IAAI,OAAO,GAAG,KAAK;QACnB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;YACpC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;;QAEhF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;YACvC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,OAAO;;AAG9F,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;;AAG7C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC;AAC9C,QAAA,OAAO,OAAO;;AAGR,IAAA,aAAa,CACnB,KAAiB,EACjB,MAA+F,EAC/F,KAA+B,EAC/B,KAA+B,EAAA;AAE/B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;AACxD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC;AACtD,YAAA,IAAI,MAAM,CAAC,OAAO,EAAE;gBAClB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACxE,gBAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;AACxB,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;AAEjE,gBAAA,OAAO,OAAO;;AAEhB,YAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;AAEjE,YAAA,OAAO,KAAK;;AAGd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAC1C,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC;cACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;cAC/D,KAAK;AACT,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpC,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;iBAC9B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;YAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACtC,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;iBAC9B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;;AAE5C,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC;AACjD,QAAA,OAAO,OAAO;;AAGR,IAAA,YAAY,CAClB,KAAiB,EACjB,KAA6F,EAC7F,KAA+B,EAC/B,KAA+B,EAAA;AAE/B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,KAAK;;QAEd,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;;AAG/D,IAAA,kBAAkB,CACxB,KAAiB,EACjB,WAEC,EACD,KAA+B,EAC/B,KAA+B,EAAA;AAE/B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,KAAK;;QAEd,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;;IAG3E,UAAU,CAChB,KAAiB,EACjB,KAA+B,EAAA;AAE/B,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsC;AAC1D,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AAClD,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;AACpB,SAAC,CAAC;AACF,QAAA,OAAO,IAAI;;AAGL,IAAA,UAAU,CAAC,KAA+B,EAAE,KAAmB,EAAE,OAAgB,EAAA;AACvF,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;AACrD,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvD,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACvB,IAAI,OAAO,EAAE;AACX,oBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;qBACb;AACL,oBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;AAEzB,aAAC,CAAC;AACF,YAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrD,SAAC,CAAC;;AAGI,IAAA,SAAS,CAAC,MAAgC,EAAA;QAChD,OAAO,MAAM,KAAK,IAAI;;AAGhB,IAAA,qBAAqB,CAAC,IAAqB,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;;AAGhC,IAAA,yBAAyB,CAAC,IAAqB,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;;AAGhC,IAAA,kBAAkB,CACxB,KAAiB,EACjB,UAAsB,EACtB,KAA+B,EAC/B,eAAwB,EAAA;AAExB,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU;QAC9C,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,KAAK;;AAGd,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC;AACvB,aAAA,GAAG,CAAC,CAAC,cAAc,KAClB,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAmC,CAAC;aAEjE,MAAM,CAAC,CAAC,KAAK,KAAmB,KAAK,KAAK,SAAS,CAAC;QACvD,IAAI,OAAO,GAAG,KAAK;AAEnB,QAAA,IAAI,UAAU,CAAC,aAAa,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC;AACxD,YAAA,UAAU,CAAC,aAAa,CAAC,UAAU,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YAChE,OAAO,GAAG,IAAI;;AAGhB,QAAA,IAAI,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YAChE,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;gBAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;gBAC3F,IAAI,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACzC,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;AACtB,wBAAA;AACE,4BAAA,GAAG,IAAI;AACP,4BAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;AAChC,4BAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;AAClE,yBAAA;AACF,qBAAA,CAAC;;;YAGN,OAAO,GAAG,IAAI;;AAGhB,QAAA,OAAO,OAAO;;IAGR,aAAa,CACnB,UAAsB,EACtB,MAAyF,EAAA;QAEzF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AAC/B,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU;AAClC,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AACvC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC;AACnC,YAAA,MAAM,UAAU,GAAG,WAAW,GAAG,KAAK;YACtC,MAAM,QAAQ,GACZ,MAAM,CAAC,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,UAAU;YAClF,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;YAC1C;;AAGF,QAAA,MAAM,MAAM,GAAG,WAAW,EAAE;QAC5B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACtC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE;YACtC,IAAI,QAAQ,EAAE;gBACZ,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;;AAExC,SAAC,CAAC;AACF,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YACnB;;QAEF,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;AACtD,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,OAAO;YACP,QAAQ;YACR,OAAO,EAAE,MAAM,CAAC,OAAO;AACxB,SAAA,CAAC;;IAGI,4BAA4B,GAAA;AAClC,QAAA,OAAO,IAAI;;AAEd;;MClkDY,UAAU,CAAA;AACJ,IAAA,WAAW,GAAG,IAAI,GAAG,EAA2B;AAEjE,IAAA,GAAG,CAAC,GAAkB,EAAA;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;;IAGlC,GAAG,CAAC,GAAkB,EAAE,KAAsB,EAAA;QAC5C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;;AAEnC;;ACWD,MAAM,cAAc,GAAG,CAAqB,KAAoB,EAAE,IAAO,KAAO;AAC9E,IAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,QAAA,OAAQ,KAA6B,CAAC,GAAG,IAAI,CAAC;;AAEhD,IAAA,OAAO,KAAK;AACd,CAAC;AAED,MAAM,UAAU,GAAG,CAAmB,IAAO,EAAE,KAAe,KAAO;AACnE,IAAA,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;AACpE,IAAA,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE;AACnC,CAAC;AAED,MAAM,WAAW,GAAG,CAClB,MAA2B,EAC3B,QAA8B,KACP;IACvB,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,QAAA,OAAO,MAAM;;AAEf,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;AACrC,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClE,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9D,IAAA,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;AAC9B,CAAC;AAEM,MAAM,mBAAmB,GAAG,CACjC,OAAyC,KACxB;IACjB,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,OAAO;AACrD,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU;AAC5B,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE;AAE9B,IAAA,OAAO,CAAC,OAAO,EAAE,UAAU,KAAI;AAC7B,QAAA,IAAI,EAAE,OAAO,YAAY,OAAO,CAAC,EAAE;AACjC,YAAA,OAAO,EAAE;;AAEX,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;;AAEX,QAAA,MAAM,IAAI,GAAc;YACtB,UAAU;AACV,YAAA,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE;SAC/B;AACD,QAAA,IAAI,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAEpD,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;AACjF,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBAC9B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;gBAC1C,IAAI,CAAC,YAAY,EAAE;oBACjB;;AAEF,gBAAA,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzD,gBAAA,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;AAChC,aAAC,CAAC;;AAGJ,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;YACtC,IAAI,GAAG,EAAE;gBACP,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC7B,IAAI,MAAM,EAAE;AACV,oBAAA,OAAO,MAAM;;gBAEf,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACzC,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AACxB,gBAAA,OAAO,QAAQ;;;QAInB,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC,KAAC;AACH,CAAC;AAUM,MAAM,0BAA0B,GAAG,CACxC,OAAgD,KAC/B;IACjB,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,OAAO;AACrD,IAAA,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC;AAC9C,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE;AAE9B,IAAA,OAAO,CAAC,OAAO,EAAE,UAAU,KAAI;AAC7B,QAAA,IAAI,EAAE,OAAO,YAAY,OAAO,CAAC,EAAE;AACjC,YAAA,OAAO,EAAE;;AAEX,QAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC;QACnD,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC;;AAGvC,QAAA,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM;AACnC,QAAA,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,OAAO,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;;QAGlD,MAAM,MAAM,GAAG;aACZ,GAAG,CAAC,CAAC,cAAc,KAAK,gBAAgB,CAAC,cAAc,CAAC;aACxD,MAAM,CAAC,CAAC,KAAK,KAAiB,KAAK,KAAK,SAAS,CAAC;AACrD,QAAA,MAAM,IAAI,GAAc;YACtB,UAAU;AACV,YAAA,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE;SAC/B;AAED,QAAA,IAAI,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE;AACpC,YAAA,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACpE,IAAI,GAAG,EAAE;gBACP,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC7B,IAAI,MAAM,EAAE;AACV,oBAAA,OAAO,MAAM;;AAEf,gBAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvE,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AACxB,gBAAA,OAAO,QAAQ;;;AAInB,QAAA,OAAO,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC/D,KAAC;AACH,CAAC;;MCrJY,eAAe,CAAA;AACT,IAAA,SAAS,GAAG,IAAI,GAAG,EAAsB;AACzC,IAAA,WAAW,GAAG,IAAI,GAAG,EAA+B;AACpD,IAAA,WAAW,GAAG,IAAI,OAAO,EAA+B;AAEzE,IAAA,GAAG,CAAC,EAAmB,EAAE,KAAQ,EAAE,OAAmB,EAAA;QACpD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;;IAGnC,WAAW,CAAC,EAAmB,EAAE,KAAQ,EAAA;QACvC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC3B;;QAEF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC;;AAG/B,IAAA,QAAQ,CAAC,EAAmB,EAAA;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;;AAG/B,IAAA,UAAU,CAAC,EAAmB,EAAA;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;;AAGjC,IAAA,cAAc,CAAC,OAAmB,EAAA;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;;AAGtC,IAAA,iBAAiB,CAAC,OAAmB,EAAA;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AACxC,QAAA,IAAI,EAAE,KAAK,SAAS,EAAE;AACpB,YAAA,OAAO,SAAS;;QAElB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;;AAG/B,IAAA,GAAG,CAAC,EAAmB,EAAA;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;;AAG/B,IAAA,MAAM,CAAC,EAAmB,EAAA;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,SAAS;;AAElB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;AAChC,QAAA,OAAO,OAAO;;AAGhB,IAAA,SAAS,CAAC,EAAiC,EAAA;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;;AAEjD;;MCjCqB,eAAe,CAAA;AAGhB,IAAA,UAAU;AACV,IAAA,KAAK;AACL,IAAA,MAAM;AACN,IAAA,QAAQ,GAAG,IAAI,eAAe,EAAQ;AACtC,IAAA,kBAAkB;AAClB,IAAA,GAAG;AACL,IAAA,cAAc,GAAG,IAAI,GAAG,EAAuC;AAEhF,IAAA,WAAA,CAAY,OAA2C,EAAA;QACrD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO;AAC5C,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB;;AAGtD,IAAA,SAAS,CAAC,MAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;;IAGhC,UAAU,GAAA;QACR,IAAI,CAAC,kBAAkB,EAAE;;AAG3B,IAAA,oBAAoB,CAAC,KAAQ,EAAA;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE;YACZ;;AAEF,QAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;AAGhE,IAAA,iBAAiB,CAAC,OAAmB,EAAA;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC;;AAGjD,IAAA,MAAM,CACJ,EAAmB,EACnB,MAAsB,EACtB,SAAmC,QAAQ,EAAA;QAE3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE;YACT;;AAEF,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB;;QAEF,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC;;AAG/C,IAAA,UAAU,CACR,GAA2B,EAC3B,MAAsB,EACtB,SAAmC,QAAQ,EAAA;QAE3C,MAAM,OAAO,GAAqB,EAAE;AAEpC,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,EAAE;gBACT;;AAEF,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB;;YAEF,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC;AACnC,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC;AACpC,SAAC,CAAC;AAEF,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB;;QAGF,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;;AAGhC,IAAA,eAAe,CAAC,EAAuC,EAAA;AACrD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;;;AAI7C,IAAA,iBAAiB,CAAC,IAAqB,EAAA;AACrC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,EAAE;AACjD,QAAA,MAAM,MAAM,GAAG,OAAO,EAAE,SAAS,IAAI;QACrC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YAC9B;;AAEF,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;;;IAI1D,aAAa,CAAC,EAAmB,EAAE,IAAqB,EAAA;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;AAC5C,QAAA,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,EAAE;QACnC,IAAI,CAAC,IAAI,EAAE;YACT;;QAEF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;;AAGpE;;;AAGG;IACH,cAAc,CAAC,GAAmC,EAAE,IAAqB,EAAA;AACvE,QAAA,MAAM,MAAM,GAAG,WAAW,EAAE;QAE5B,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;AAC5C,YAAA,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,EAAE;AACnC,YAAA,IAAI,CAAC,IAAI;gBAAE;YACX,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,KAAK,GAAG,IAAI;;QAGd,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B;;AAGF,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;;AAG1D,IAAA,UAAU,CAAC,OAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;;IAGhC,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;;AAGhC,IAAA,UAAU,CAAC,OAAe,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;;IAGhC,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;;IAGhC,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;;AAG/B,IAAA,SAAS,CAAC,CAAS,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;;AAGzB,IAAA,YAAY,CAAC,EAAmB,EAAA;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAGnC,IAAA,QAAQ,CAAC,EAAmB,EAAA;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI;;IAG7C,YAAY,GAAA;QACV,MAAM,GAAG,GAAQ,EAAE;QACnB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACxC,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,gBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEnB,SAAC,CAAC;AACF,QAAA,OAAO,GAAG;;IAGZ,cAAc,GAAA;QACZ,MAAM,GAAG,GAA2B,EAAE;AACtC,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAA,OAAO,GAAG;;IAGZ,gBAAgB,CACd,GAAqD,EACrD,MAA0B,EAAA;AAE1B,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAClD,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;AAE5E,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5C,IAAI,OAAO,EAAE;AACX,gBAAA,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;;AAEzC,SAAC,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE;;AAGjB,IAAA,iBAAiB,CAAC,MAAoB,EAAA;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB;AAC1C,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC;AACpC,YAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACpD,IAAI,eAAe,EAAE;gBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5C,gBAAA,IAAI,SAAS,KAAK,KAAK,EAAE;oBACvB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC;AACpC,oBAAA,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;gBAExE;;AAGF,YAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI;gBAC7B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;AACpD,aAAA,CAAC;AACF,YAAA,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAC,CAAC;AACtE,SAAC,CAAC;QAEF,MAAM,QAAQ,GAA2B,EAAE;QAC3C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI;YAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACpB,gBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;;AAErB,SAAC,CAAC;AACF,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;;AAEtC,SAAC,CAAC;;IAGM,0BAA0B,GAAA;QAClC,OAAO,IAAI,CAAC,MAAM;;AAGZ,IAAA,gBAAgB,CAAC,OAAyB,EAAA;AAChD,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB;;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;;AAE7D;;ACrQK,MAAO,oBACX,SAAQ,eAA2B,CAAA;AAElB,IAAA,aAAa;AACtB,IAAA,iBAAiB;AAEzB,IAAA,WAAA,CAAY,OAA0C,EAAA;QACpD,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa;AAC1C,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,gBAAgB,IAAI,KAAK;AAEjF,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjB,0BAA0B,CAAC;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,UAAW;YAC1C,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,gBAAgB,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAqB,CAAC;AACrF,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG;AAClB,SAAA,CAAC,CACH;QAED,IAAI,CAAC,KAAK,CAAC,SAAS,CAClB,IAAI,CAAC,iBAAiB,GAAI,IAAI,CAAC,aAA4C,GAAG,IAAI,CAAC,MAAM,CAC1F;;AAGM,IAAA,SAAS,CAAC,MAAoB,EAAA;AACrC,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,kBAAkB,EAAE;;AAG3B,IAAA,oBAAoB,CAAC,OAAgB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,OAAO,EAAE;YACtC;;AAEF,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;QAChC,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAClB,OAAO,GAAI,IAAI,CAAC,aAA4C,GAAG,IAAI,CAAC,MAAM,CAC3E;QACD,IAAI,OAAO,EAAE;YACX,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;AAC5C,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AAChF,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;;QAE9B,IAAI,CAAC,kBAAkB,EAAE;;IAG3B,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,iBAAiB;;IAGvB,sBAAsB,GAAA;QAC5B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5C,IAAI,OAAO,EAAE;gBACX,kBAAkB,CAAC,OAAO,CAAC;;AAE/B,SAAC,CAAC;;IAGe,0BAA0B,GAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAuC;;AAErE;;ACxEK,MAAO,gBAA6D,SAAQ,eAIjF,CAAA;AACC,IAAA,WAAA,CAAY,OAAsC,EAAA;QAChD,KAAK,CAAC,OAAO,CAAC;AAEd,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjB,mBAAmB,CAAC;YAClB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,gBAAgB,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAqB,CAAC;AACrF,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG;AAClB,SAAA,CAAC,CACH;;AAEJ;;MCdY,SAAS,CAAA;AAKS,IAAA,OAAA;IAJrB,KAAK,GAAqB,EAAE;IAC5B,SAAS,GAAuB,IAAI;IACpC,MAAM,GAAuB,IAAI;AAEzC,IAAA,WAAA,CAA6B,UAA4B,EAAE,EAAA;QAA9B,IAAO,CAAA,OAAA,GAAP,OAAO;AAClC,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;;;AAI7B,IAAA,IAAI,CAAC,KAAuB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB;;AAEF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE;;AAGf,IAAA,GAAG,CAAC,KAAuB,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB;;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE;;IAGf,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB;;AAEF,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,MAAM,EAAE;;AAGf,IAAA,MAAM,CAAC,GAAoB,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB;;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;QACxE,IAAI,CAAC,MAAM,EAAE;;IAGf,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,OAAO,EAAE;;AAEX,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;;AAGxB,IAAA,KAAK,CAAC,MAAyC,EAAA;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB;;AAEF,QAAA,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,EAAE,GAAG,MAAM;QAChE,IAAI,CAAC,OAAO,EAAE;YACZ;;AAEF,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;YAC3B,IAAI,CAAC,OAAO,EAAE;;AAEhB,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO;QACrB,IAAI,CAAC,MAAM,EAAE;;IAGf,OAAO,GAAA;QACL,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;IAGT,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,OAAO,KAAK;;IAGN,SAAS,GAAA;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;AACpC,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,EAAE,GAAG,OAAO;;IAGpD,OAAO,GAAA;QACb,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;YAClD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE1D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;AAGZ,IAAA,YAAY,CAAC,KAAuB,EAAA;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;;AAGxB,IAAA,KAAK,CAAC,KAAuB,EAAA;QACnC,MAAM,MAAM,GAAqB,EAAE;AACnC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B;AAClD,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAClC,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjB;;YAEF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACtC,YAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC/B,gBAAA,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI;gBAC5B;;YAEF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;AAC/B,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACnB,SAAC,CAAC;AACF,QAAA,OAAO,MAAM;;AAGP,IAAA,SAAS,CAAC,KAAuB,EAAA;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;QACxD,MAAM,SAAS,GAAoB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACtB,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AACzC,YAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AAChB,gBAAA,OAAO,MAAM;;AAEf,YAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAC1B,SAAC,CAAC;AACF,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC;;AAGrC,IAAA,UAAU,CAAC,KAAuB,EAAA;QACxC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,KAAK;;AAEd,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAGtC,IAAA,WAAW,CAAC,IAAoB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC/B,OAAO,IAAI,CAAC,QAAQ;;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAiC;AACpD,QAAA,IAAI,KAAK,KAAK,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE;YAC3E,OAAO,KAAK,CAAC,EAAE;;AAEjB,QAAA,OAAO,SAAS;;IAGV,WAAW,CAAC,CAAiB,EAAE,CAAiB,EAAA;AACtD,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC;AACjC,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC;QACjC,OAAO,SAAS,GAAG,SAAS;;IAGtB,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,eAAe;YAC1C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEzC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,SAAS,GAAG,eAAe;AAChC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEpC,YAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AACpC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;;iBAC1B;AACL,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;;YAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAClC,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;gBACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC9C,gBAAA,KAAK,CAAC,IAAI,GAAG,QAAQ;gBACrB,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AACzC,gBAAA,KAAK,CAAC,WAAW,GAAG,GAAG;AACvB,gBAAA,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;AAEzB,YAAA,IAAI,CAAC,SAAU,CAAC,WAAW,CAAC,IAAI,CAAC;AACnC,SAAC,CAAC;;AAEL;;MCxLY,YAAY,CAAA;AAMc,IAAA,GAAA;IALpB,MAAM,GAAgC,EAAE;IACxC,IAAI,GAA6C,EAAE;AACnD,IAAA,YAAY;AACZ,IAAA,GAAG;IAEpB,WAAqC,CAAA,GAAU,EAAE,MAAyB,EAAA;QAArC,IAAG,CAAA,GAAA,GAAH,GAAG;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS;AACjG,QAAA,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,WAAW,CAAC;AACtF,QAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;AACvE,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;QAEd,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACnC,YAAA,MAAM,MAAM,GAAG,IAAI,YAAY,EAAO;AACtC,YAAA,MAAM,aAAa,GAAG,UAAU,CAAC;kBAC7B,IAAI,aAAa,CAAC;oBAChB,MAAM;AACN,oBAAA,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ;iBACzC;kBACD,IAAI;YACR,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;AACzC,YAAA,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE;AACnC,gBAAA,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;;AAEpC,YAAA,IAAI,UAAU,CAAC,gBAAgB,KAAK,SAAS,EAAE;AAC7C,gBAAA,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC;;AAE/C,YAAA,IAAI,UAAU,CAAC,KAAK,EAAE;gBACpB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;;YAEtC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;AAE9B,YAAA,MAAM,kBAAkB,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACjF,YAAA,MAAM,GAAG,GAAG,UAAU,CAAC;kBACnB,IAAI,oBAAoB,CAAC;oBACvB,UAAU;oBACV,KAAK;oBACL,MAAM;AACN,oBAAA,aAAa,EAAE,aAAc;oBAC7B,GAAG;oBACH,kBAAkB;iBACnB;kBACD,IAAI,gBAAgB,CAAC;oBACnB,UAAU;oBACV,KAAK;oBACL,MAAM;oBACN,GAAG;oBACH,kBAAkB;AACnB,iBAAA,CAAC;YAEN,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,KAAK;YAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAC;YACzC,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,SAAA,CAAC;;AAGJ,IAAA,OAAO,MAAM,CACX,GAAU,EACV,MAAyB,EAAA;AAEzB,QAAA,OAAO,IAAI,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;;AAGtC,IAAA,QAAQ,CAAC,EAAU,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;;AAGxB,IAAA,MAAM,CAAC,EAAU,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;;IAGtB,OAAO,GAAA;AACL,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;;IAGzB,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,GAAG;;IAGjB,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;;AAErC;;AC5GD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"aur-openlayers.mjs","sources":["../../../projects/lib/src/lib/lib.service.ts","../../../projects/lib/src/lib/lib.component.ts","../../../projects/lib/src/lib/map-framework/runtime/scheduler.ts","../../../projects/lib/src/lib/map-framework/runtime/map-context.ts","../../../projects/lib/src/lib/map-framework/runtime/cluster-utils.ts","../../../projects/lib/src/lib/map-framework/runtime/fit-layer.utils.ts","../../../projects/lib/src/lib/map-framework/runtime/style/feature-states.ts","../../../projects/lib/src/lib/map-framework/runtime/interaction-manager.ts","../../../projects/lib/src/lib/map-framework/runtime/style/style-cache.ts","../../../projects/lib/src/lib/map-framework/runtime/style/style-pipeline.ts","../../../projects/lib/src/lib/map-framework/runtime/feature-registry.ts","../../../projects/lib/src/lib/map-framework/runtime/vector-layer-base.ts","../../../projects/lib/src/lib/map-framework/runtime/clustered-layer.ts","../../../projects/lib/src/lib/map-framework/runtime/plain-layer.ts","../../../projects/lib/src/lib/map-framework/runtime/popup-host.ts","../../../projects/lib/src/lib/map-framework/runtime/layer-manager.ts","../../../projects/lib/src/public-api.ts","../../../projects/lib/src/aur-openlayers.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-lib',\r\n imports: [],\r\n template: `\r\n <p>\r\n lib works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class LibComponent {\r\n\r\n}\r\n","import type { BatchOptions, FlushPolicy } from '../public/types';\r\n\r\ntype TaskKey = unknown;\r\n\r\nexport class FlushScheduler {\r\n private readonly queue = new Map<TaskKey, () => void>();\r\n private pendingPolicy: FlushPolicy | null = null;\r\n private scheduledToken = 0;\r\n private rafId: number | null = null;\r\n private batchDepth = 0;\r\n private readonly policyStack: FlushPolicy[] = [];\r\n\r\n constructor(private readonly defaultPolicy: FlushPolicy = 'microtask') {}\r\n\r\n batch(fn: () => void, options?: BatchOptions): void {\r\n if (options?.policy) {\r\n this.policyStack.push(options.policy);\r\n }\r\n this.batchDepth += 1;\r\n try {\r\n fn();\r\n } finally {\r\n this.batchDepth = Math.max(0, this.batchDepth - 1);\r\n if (options?.policy) {\r\n this.policyStack.pop();\r\n }\r\n if (this.batchDepth === 0 && (this.pendingPolicy !== null || this.queue.size > 0)) {\r\n const policy = this.pendingPolicy ?? this.currentPolicy();\r\n this.pendingPolicy = policy;\r\n this.scheduleFlush(policy);\r\n }\r\n }\r\n }\r\n\r\n schedule(key: TaskKey, task: () => void, policy?: FlushPolicy): void {\r\n this.queue.set(key, task);\r\n this.requestFlush(policy);\r\n }\r\n\r\n private requestFlush(policy?: FlushPolicy): void {\r\n const desired = policy ?? this.currentPolicy();\r\n if (this.batchDepth > 0) {\r\n this.pendingPolicy = this.combinePolicies(this.pendingPolicy, desired);\r\n return;\r\n }\r\n\r\n if (this.pendingPolicy) {\r\n if (this.shouldUpgradePolicy(this.pendingPolicy, desired)) {\r\n this.pendingPolicy = desired;\r\n this.scheduleFlush(desired);\r\n }\r\n return;\r\n }\r\n\r\n this.pendingPolicy = desired;\r\n this.scheduleFlush(desired);\r\n }\r\n\r\n private scheduleFlush(policy: FlushPolicy): void {\r\n const token = ++this.scheduledToken;\r\n if (policy === 'raf') {\r\n if (this.rafId !== null) {\r\n cancelAnimationFrame(this.rafId);\r\n }\r\n this.rafId = requestAnimationFrame(() => this.flush('raf', token));\r\n return;\r\n }\r\n\r\n queueMicrotask(() => this.flush('microtask', token));\r\n }\r\n\r\n private flush(policy: FlushPolicy, token: number): void {\r\n if (token !== this.scheduledToken || this.pendingPolicy !== policy) {\r\n return;\r\n }\r\n this.pendingPolicy = null;\r\n if (policy === 'raf') {\r\n this.rafId = null;\r\n }\r\n const tasks = Array.from(this.queue.values());\r\n this.queue.clear();\r\n tasks.forEach((task) => task());\r\n }\r\n\r\n private currentPolicy(): FlushPolicy {\r\n if (this.policyStack.length > 0) {\r\n return this.policyStack[this.policyStack.length - 1];\r\n }\r\n return this.defaultPolicy;\r\n }\r\n\r\n private combinePolicies(\r\n current: FlushPolicy | null,\r\n next: FlushPolicy,\r\n ): FlushPolicy | null {\r\n if (!current) {\r\n return next;\r\n }\r\n return current === 'raf' || next === 'raf' ? 'raf' : 'microtask';\r\n }\r\n\r\n private shouldUpgradePolicy(current: FlushPolicy, next: FlushPolicy): boolean {\r\n return current === 'microtask' && next === 'raf';\r\n }\r\n}\r\n","import type OlMap from 'ol/Map';\r\n\r\nimport type { BatchOptions, MapContext, PopupHostApi, VectorLayerApi } from '../public/types';\r\nimport { FlushScheduler } from './scheduler';\r\n\r\nexport const createMapContext = (\r\n map: OlMap,\r\n layers: Record<string, VectorLayerApi<any, any>>,\r\n popupHost?: PopupHostApi,\r\n scheduler: FlushScheduler = new FlushScheduler(),\r\n): MapContext => {\r\n return {\r\n map,\r\n layers,\r\n popupHost,\r\n batch: (fn: () => void, options?: BatchOptions) => scheduler.batch(fn, options),\r\n };\r\n};\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nconst CLUSTER_FEATURES_KEY = 'features';\r\n\r\nexport const getClusterFeatures = (\r\n feature: Feature<Geometry>,\r\n): Array<Feature<Geometry>> | null => {\r\n const features = feature.get(CLUSTER_FEATURES_KEY);\r\n if (!Array.isArray(features)) {\r\n return null;\r\n }\r\n const items = features.filter((item): item is Feature<Geometry> => {\r\n if (!item || typeof item !== 'object') {\r\n return false;\r\n }\r\n const candidate = item as { get?: unknown; getGeometry?: unknown };\r\n return typeof candidate.get === 'function' && typeof candidate.getGeometry === 'function';\r\n });\r\n if (items.length === 0) {\r\n return null;\r\n }\r\n return items;\r\n};\r\n","import type {ViewFitOptions, ViewFitPadding} from '../public/types';\r\n\r\n/**\r\n * Default padding for View#fit in pixels.\r\n * Order: [top, right, bottom, left]\r\n */\r\nconst DEFAULT_OL_PADDING: [number, number, number, number] = [64, 64, 64, 64];\r\nconst DEFAULT_FIT_DURATION = 500;\r\n\r\nexport function toOlPadding(\r\n p?: ViewFitPadding,\r\n fallback: [number, number, number, number] | undefined = DEFAULT_OL_PADDING,\r\n): [number, number, number, number] | undefined {\r\n if (!p) {\r\n return fallback;\r\n }\r\n\r\n if ('all' in p) {\r\n const a = p.all;\r\n return [a, a, a, a];\r\n }\r\n\r\n if ('vertical' in p && 'horizontal' in p) {\r\n return [p.vertical, p.horizontal, p.vertical, p.horizontal];\r\n }\r\n\r\n return [p.top, p.right, p.bottom, p.left];\r\n}\r\n\r\nexport function toOlFitOptions(opts?: ViewFitOptions) {\r\n const padding = toOlPadding(opts?.padding) ?? DEFAULT_OL_PADDING;\r\n const duration = opts?.duration ?? DEFAULT_FIT_DURATION;\r\n\r\n // OL View#fit options are a plain object; keep it minimal & typed-friendly\r\n const fitOpts: any = {padding, duration};\r\n if (opts?.maxZoom != null) {\r\n fitOpts.maxZoom = opts.maxZoom;\r\n }\r\n return fitOpts;\r\n}\r\n","import type Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nconst STATES_KEY = '__mff_states__';\r\n\r\nexport const getFeatureStates = (feature: Feature<Geometry>): string[] => {\r\n const states = feature.get(STATES_KEY);\r\n if (Array.isArray(states)) {\r\n return states;\r\n }\r\n if (typeof states === 'string') {\r\n return [states];\r\n }\r\n return [];\r\n};\r\n\r\nexport const setFeatureStates = (feature: Feature<Geometry>, states: string[]): void => {\r\n feature.set(STATES_KEY, states);\r\n};\r\n\r\nexport const clearFeatureStates = (feature: Feature<Geometry>): void => {\r\n feature.set(STATES_KEY, []);\r\n};\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport type MapBrowserEvent from 'ol/MapBrowserEvent';\r\nimport type OlMap from 'ol/Map';\r\nimport type VectorLayer from 'ol/layer/Vector';\r\nimport Collection from 'ol/Collection';\r\nimport DragPan from 'ol/interaction/DragPan';\r\nimport Modify from 'ol/interaction/Modify';\r\nimport type { ModifyEvent } from 'ol/interaction/Modify';\r\nimport type { TranslateEvent } from 'ol/interaction/Translate';\r\nimport ClusterSource from 'ol/source/Cluster';\r\nimport type VectorSource from 'ol/source/Vector';\r\nimport type { EventsKey } from 'ol/events';\r\nimport * as Observable from 'ol/Observable';\r\nimport { createEmpty, extend, isEmpty } from 'ol/extent';\r\n\r\nimport type {\r\n FeatureState,\r\n HitItem,\r\n InteractionBase,\r\n InteractionHandlerResult,\r\n MapContext,\r\n MapSchema,\r\n PopupItem,\r\n VectorLayerApi,\r\n VectorLayerDescriptor,\r\n} from '../public/types';\r\nimport { getClusterFeatures } from './cluster-utils';\r\nimport { toOlPadding } from './fit-layer.utils';\r\nimport { getFeatureStates, setFeatureStates } from './style/feature-states';\r\n\r\ntype LayerEntry = {\r\n descriptor: VectorLayerDescriptor<any, any, any, any>;\r\n layer: VectorLayer;\r\n api: VectorLayerApi<any, any>;\r\n index: number;\r\n};\r\n\r\ntype InteractionEnabledState = {\r\n click: boolean;\r\n doubleClick: boolean;\r\n hover: boolean;\r\n select: boolean;\r\n translate: boolean;\r\n modify: boolean;\r\n};\r\n\r\ntype ListenerName =\r\n | 'pointermove'\r\n | 'singleclick'\r\n | 'dblclick'\r\n | 'pointerdown'\r\n | 'pointerdrag'\r\n | 'pointerup';\r\n\r\ntype ActiveTranslate = {\r\n targetKey: string | number;\r\n startCoordinate: [number, number];\r\n lastCoordinate: [number, number];\r\n lastItem?: HitItem<any, any>;\r\n moveThrottleMs: number;\r\n translate: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['translate']\r\n >;\r\n pendingEvent?: MapBrowserEvent<UIEvent>;\r\n throttleTimer?: ReturnType<typeof setTimeout>;\r\n lastHandled?: boolean;\r\n};\r\n\r\ntype ActiveModify = {\r\n targetKey: string | number;\r\n lastItem?: HitItem<any, any>;\r\n moveThrottleMs: number;\r\n modify: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['modify']\r\n >;\r\n pendingEvent?: MapBrowserEvent<UIEvent>;\r\n throttleTimer?: ReturnType<typeof setTimeout>;\r\n lastHandled?: boolean;\r\n};\r\n\r\ntype NativeModifyEntry = {\r\n interaction: Modify;\r\n keys: EventsKey[];\r\n};\r\n\r\ntype ModifyInteraction = NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['modify']\r\n>;\r\n\r\nexport type HitTestArgs = {\r\n layerId: string;\r\n layer: VectorLayer;\r\n api: VectorLayerApi<any, any>;\r\n descriptor: VectorLayerDescriptor<any, any, any, any>;\r\n event: MapBrowserEvent<UIEvent>;\r\n hitTolerance: number;\r\n};\r\n\r\nexport type ClusterHit = {\r\n feature: Feature<Geometry>;\r\n features: Array<Feature<Geometry>>;\r\n size: number;\r\n};\r\n\r\nexport type HitTestResult = {\r\n items: Array<HitItem<any, any>>;\r\n cluster?: ClusterHit;\r\n};\r\n\r\nexport type HitTestFn = (args: HitTestArgs) => HitTestResult;\r\n\r\nexport type InteractionManagerOptions<\r\n Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]\r\n> = {\r\n ctx: MapContext;\r\n map: OlMap;\r\n schema: MapSchema<Layers>;\r\n layers: Record<string, VectorLayer>;\r\n apis: Record<string, VectorLayerApi<any, any>>;\r\n hitTest?: HitTestFn;\r\n};\r\n\r\nexport class InteractionManager<\r\n Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]\r\n> {\r\n private readonly ctx: MapContext;\r\n private readonly map: OlMap;\r\n private readonly schema: MapSchema<Layers>;\r\n private readonly layers: Record<string, VectorLayer>;\r\n private readonly apis: Record<string, VectorLayerApi<any, any>>;\r\n private readonly hitTest: HitTestFn;\r\n private readonly hoverItems = new Map<string, Map<string | number, HitItem<any, any>>>();\r\n private readonly selectedItems = new Map<string, Map<string | number, HitItem<any, any>>>();\r\n private readonly activeTranslates = new Map<string, ActiveTranslate>();\r\n private readonly activeModifies = new Map<string, ActiveModify>();\r\n private readonly nativeModifies = new Map<string, NativeModifyEntry>();\r\n private readonly popupStack: 'stop' | 'continue';\r\n private readonly listenerKeys = new Map<ListenerName, EventsKey>();\r\n private readonly enabledState = new Map<string, InteractionEnabledState>();\r\n private dragPanLocks = 0;\r\n private dragPanStates?: Map<DragPan, boolean>;\r\n private currentCursor?: string;\r\n\r\n constructor(options: InteractionManagerOptions<Layers>) {\r\n this.ctx = options.ctx;\r\n this.map = options.map;\r\n this.schema = options.schema;\r\n this.layers = options.layers;\r\n this.apis = options.apis;\r\n this.hitTest = options.hitTest ?? this.createDefaultHitTest();\r\n this.popupStack = this.schema.options?.popupHost?.stack ?? 'stop';\r\n this.refreshEnabled();\r\n }\r\n\r\n refreshEnabled(): void {\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n if (!popupEnabled) {\r\n this.ctx.popupHost?.clear();\r\n }\r\n\r\n const nextState = new Map<string, InteractionEnabledState>();\r\n this.schema.layers.forEach((descriptor) => {\r\n const interactions = descriptor.feature.interactions;\r\n nextState.set(descriptor.id, {\r\n click: !!interactions?.click && this.isEnabled(interactions.click.enabled),\r\n doubleClick:\r\n !!interactions?.doubleClick && this.isEnabled(interactions.doubleClick.enabled),\r\n hover: !!interactions?.hover && this.isEnabled(interactions.hover.enabled),\r\n select: !!interactions?.select && this.isEnabled(interactions.select.enabled),\r\n translate: !!interactions?.translate && this.isEnabled(interactions.translate.enabled),\r\n modify: !!interactions?.modify && this.isEnabled(interactions.modify.enabled),\r\n });\r\n });\r\n\r\n this.syncNativeModify(nextState);\r\n this.applyDisabledCleanup(nextState);\r\n this.enabledState.clear();\r\n nextState.forEach((value, key) => this.enabledState.set(key, value));\r\n this.syncListeners(popupEnabled);\r\n }\r\n\r\n handlePointerDown(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerdown')) {\r\n return;\r\n }\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const interactions = entry.descriptor.feature.interactions;\r\n\r\n const translate = interactions?.translate;\r\n if (translate && this.isEnabled(translate.enabled)) {\r\n const { items: candidates } = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(translate.hitTolerance),\r\n });\r\n if (candidates.length > 0) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n event.coordinate as [number, number],\r\n 'translatestart',\r\n candidates,\r\n );\r\n\r\n let target: HitItem<any, any> | null | undefined;\r\n if (translate.pickTarget) {\r\n target = translate.pickTarget({ candidates, ctx: this.ctx, event: translateEvent });\r\n } else {\r\n target = candidates[0];\r\n }\r\n\r\n if (target) {\r\n const targetKey = entry.descriptor.feature.id(target.model);\r\n const resolved = this.resolveTarget(entry, targetKey);\r\n if (resolved) {\r\n const active: ActiveTranslate = {\r\n targetKey,\r\n startCoordinate: event.coordinate as [number, number],\r\n lastCoordinate: event.coordinate as [number, number],\r\n lastItem: resolved,\r\n moveThrottleMs: translate.moveThrottleMs ?? 0,\r\n translate,\r\n };\r\n this.activeTranslates.set(entry.descriptor.id, active);\r\n this.lockDragPan();\r\n\r\n if (translate.state) {\r\n this.applyState([resolved], translate.state, true);\r\n }\r\n\r\n const handled = translate.onStart\r\n ? this.isHandled(\r\n translate.onStart({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n )\r\n : false;\r\n active.lastHandled = handled;\r\n\r\n if (handled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.activeTranslates.has(entry.descriptor.id)) {\r\n continue;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerDrag(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerdrag')) {\r\n return;\r\n }\r\n if (this.activeTranslates.size === 0 && this.activeModifies.size === 0) {\r\n return;\r\n }\r\n for (const entry of this.getOrderedLayers()) {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (!active) {\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (!activeModify) {\r\n continue;\r\n }\r\n const modify = activeModify.modify;\r\n const execute = () => this.applyModifyChange(entry, activeModify, event);\r\n\r\n if (activeModify.moveThrottleMs > 0) {\r\n if (!activeModify.throttleTimer) {\r\n execute();\r\n activeModify.throttleTimer = setTimeout(() => {\r\n activeModify.throttleTimer = undefined;\r\n if (activeModify.pendingEvent) {\r\n const pending = activeModify.pendingEvent;\r\n activeModify.pendingEvent = undefined;\r\n this.applyModifyChange(entry, activeModify, pending);\r\n }\r\n }, activeModify.moveThrottleMs);\r\n } else {\r\n activeModify.pendingEvent = event;\r\n }\r\n } else {\r\n execute();\r\n }\r\n\r\n if (activeModify.lastHandled && this.shouldStopPropagation(modify)) {\r\n break;\r\n }\r\n continue;\r\n }\r\n const translate = active.translate;\r\n const execute = () => this.applyTranslateMove(entry, active, event);\r\n\r\n if (active.moveThrottleMs > 0) {\r\n if (!active.throttleTimer) {\r\n execute();\r\n active.throttleTimer = setTimeout(() => {\r\n active.throttleTimer = undefined;\r\n if (active.pendingEvent) {\r\n const pending = active.pendingEvent;\r\n active.pendingEvent = undefined;\r\n this.applyTranslateMove(entry, active, pending);\r\n }\r\n }, active.moveThrottleMs);\r\n } else {\r\n active.pendingEvent = event;\r\n }\r\n } else {\r\n execute();\r\n }\r\n\r\n if (active.lastHandled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerUp(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerup')) {\r\n return;\r\n }\r\n if (this.activeTranslates.size === 0 && this.activeModifies.size === 0) {\r\n return;\r\n }\r\n for (const entry of this.getOrderedLayers()) {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (active) {\r\n const translate = active.translate;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n }\r\n if (active.pendingEvent) {\r\n const pending = active.pendingEvent;\r\n active.pendingEvent = undefined;\r\n this.applyTranslateMove(entry, active, pending);\r\n }\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (resolved && translate.onEnd) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n active.startCoordinate,\r\n 'translateend',\r\n [resolved],\r\n );\r\n active.lastHandled = this.isHandled(\r\n translate.onEnd({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n\r\n this.finishTranslate(entry, active, resolved);\r\n\r\n if (active.lastHandled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n continue;\r\n }\r\n\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (!activeModify) {\r\n continue;\r\n }\r\n const modify = activeModify.modify;\r\n if (activeModify.throttleTimer) {\r\n clearTimeout(activeModify.throttleTimer);\r\n activeModify.throttleTimer = undefined;\r\n }\r\n if (activeModify.pendingEvent) {\r\n const pending = activeModify.pendingEvent;\r\n activeModify.pendingEvent = undefined;\r\n this.applyModifyChange(entry, activeModify, pending);\r\n }\r\n const resolved = this.resolveTarget(entry, activeModify.targetKey);\r\n if (resolved && modify.onEnd) {\r\n const modifyEvent = this.createModifyEvent(event, 'modifyend', [resolved]);\r\n activeModify.lastHandled = this.isHandled(\r\n modify.onEnd({ item: resolved, ctx: this.ctx, event: modifyEvent }),\r\n );\r\n } else {\r\n activeModify.lastHandled = false;\r\n }\r\n\r\n this.finishModify(entry, activeModify, resolved);\r\n\r\n if (activeModify.lastHandled && this.shouldStopPropagation(modify)) {\r\n break;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerMove(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointermove')) {\r\n return;\r\n }\r\n const popupHost = this.ctx.popupHost;\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const autoHover = autoMode === 'hover';\r\n const popupItems: Array<PopupItem<any>> = [];\r\n let popupStopped = false;\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const hover = entry.descriptor.feature.interactions?.hover;\r\n const hoverEnabled = !!hover && this.isEnabled(hover.enabled);\r\n if (!hoverEnabled && !autoHover) {\r\n continue;\r\n }\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(hoverEnabled ? hover!.hitTolerance : undefined),\r\n });\r\n\r\n if (hoverEnabled) {\r\n const handled = this.processHover(entry, hover!, hitResult.items, event);\r\n if (handled && this.shouldStopPropagation(hover!)) {\r\n break;\r\n }\r\n }\r\n\r\n if (autoHover && popupHost && !popupStopped) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n }\r\n if (autoHover && popupHost) {\r\n popupHost.set(popupItems);\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handleSingleClick(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('singleclick')) {\r\n return;\r\n }\r\n const popupHost = this.ctx.popupHost;\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const autoClick = autoMode === 'click';\r\n const popupItems: Array<PopupItem<any>> = [];\r\n let popupStopped = false;\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const select = entry.descriptor.feature.interactions?.select;\r\n const click = entry.descriptor.feature.interactions?.click;\r\n const selectEnabled = select && this.isEnabled(select.enabled);\r\n const clickEnabled = click && this.isEnabled(click.enabled);\r\n const clusteringEnabled = !!entry.descriptor.clustering && !!entry.api.isClusteringEnabled?.();\r\n if (!selectEnabled && !clickEnabled && !clusteringEnabled && !autoClick) {\r\n continue;\r\n }\r\n\r\n const tolerances = [\r\n selectEnabled ? select?.hitTolerance : undefined,\r\n clickEnabled ? click?.hitTolerance : undefined,\r\n ].filter((value): value is number => value !== undefined);\r\n const hitTolerance =\r\n tolerances.length > 0 ? Math.max(...tolerances) : this.getHitTolerance(undefined);\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance,\r\n });\r\n\r\n if (clusteringEnabled && hitResult.cluster) {\r\n if (autoClick && popupHost && !popupStopped) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n const handled = this.handleClusterClick(entry, hitResult.cluster, event, !autoClick);\r\n if (handled) {\r\n if (this.shouldStopClusterPropagation()) {\r\n break;\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n if (selectEnabled || clickEnabled) {\r\n const selectItems = selectEnabled ? hitResult.items : [];\r\n const clickItems = clickEnabled ? hitResult.items : [];\r\n\r\n const selectHandled = selectEnabled\r\n ? this.processSelect(entry, select!, selectItems, event)\r\n : false;\r\n const selectStops = selectHandled && this.shouldStopPropagation(select!);\r\n const allowClick =\r\n !selectHandled || (selectEnabled && this.shouldContinuePropagation(select!));\r\n\r\n if (clickEnabled && allowClick) {\r\n const clickHandled = this.processClick(entry, click!, clickItems, event);\r\n if (clickHandled && this.shouldStopPropagation(click!)) {\r\n break;\r\n }\r\n }\r\n\r\n if (selectStops) {\r\n break;\r\n }\r\n }\r\n\r\n if (autoClick && popupHost && !popupStopped && !(clusteringEnabled && hitResult.cluster)) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n }\r\n if (autoClick && popupHost) {\r\n popupHost.set(popupItems);\r\n }\r\n }\r\n\r\n handleDoubleClick(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('dblclick')) {\r\n return;\r\n }\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const doubleClick = entry.descriptor.feature.interactions?.doubleClick;\r\n if (!doubleClick || !this.isEnabled(doubleClick.enabled)) {\r\n continue;\r\n }\r\n\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(doubleClick.hitTolerance),\r\n });\r\n\r\n if (entry.descriptor.clustering && entry.api.isClusteringEnabled?.() && hitResult.cluster) {\r\n continue;\r\n }\r\n const { items } = hitResult;\r\n\r\n const handled = this.processDoubleClick(entry, doubleClick, items, event);\r\n if (handled && this.shouldStopPropagation(doubleClick)) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private runInteractionMutation(fn: () => void): void {\r\n const policy = this.schema.options?.scheduler?.interactionPolicy;\r\n if (policy) {\r\n this.ctx.batch(fn, { policy });\r\n return;\r\n }\r\n fn();\r\n }\r\n\r\n private syncListeners(popupEnabled: boolean): void {\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const needsHover = autoMode === 'hover';\r\n const needsClick = autoMode === 'click';\r\n\r\n let needsPointerMove = needsHover;\r\n let needsSingleClick = needsClick;\r\n let needsDoubleClick = false;\r\n let needsPointerDown = false;\r\n let needsPointerDrag = false;\r\n let needsPointerUp = false;\r\n\r\n this.schema.layers.forEach((descriptor) => {\r\n const state = this.enabledState.get(descriptor.id);\r\n if (state?.hover) {\r\n needsPointerMove = true;\r\n }\r\n if (state?.click || state?.select) {\r\n needsSingleClick = true;\r\n }\r\n if (state?.doubleClick) {\r\n needsDoubleClick = true;\r\n }\r\n if (state?.translate || state?.modify) {\r\n needsPointerDown = true;\r\n needsPointerDrag = true;\r\n needsPointerUp = true;\r\n }\r\n const interactions = descriptor.feature.interactions;\r\n if (interactions && this.hasCursorInteraction(interactions)) {\r\n needsPointerMove = true;\r\n }\r\n if (\r\n descriptor.clustering &&\r\n (descriptor.clustering.expandOnClick || descriptor.clustering.popup)\r\n ) {\r\n needsSingleClick = true;\r\n }\r\n });\r\n\r\n this.toggleListener('pointermove', needsPointerMove, (event) => this.handlePointerMove(event));\r\n this.toggleListener('singleclick', needsSingleClick, (event) =>\r\n this.handleSingleClick(event),\r\n );\r\n this.toggleListener('dblclick', needsDoubleClick, (event) => this.handleDoubleClick(event));\r\n this.toggleListener('pointerdown', needsPointerDown, (event) => this.handlePointerDown(event));\r\n this.toggleListener('pointerdrag', needsPointerDrag, (event) => this.handlePointerDrag(event));\r\n this.toggleListener('pointerup', needsPointerUp, (event) => this.handlePointerUp(event));\r\n }\r\n\r\n private syncNativeModify(nextState: Map<string, InteractionEnabledState>): void {\r\n const handled = new Set<string>();\r\n\r\n this.schema.layers.forEach((descriptor) => {\r\n const interactions = descriptor.feature.interactions;\r\n const modify = interactions?.modify;\r\n const enabled = nextState.get(descriptor.id)?.modify ?? false;\r\n const shouldEnable = !!modify && enabled;\r\n if (!shouldEnable) {\r\n return;\r\n }\r\n const entry = this.getLayerEntry(descriptor.id);\r\n if (!entry) {\r\n return;\r\n }\r\n handled.add(descriptor.id);\r\n if (this.nativeModifies.has(descriptor.id)) {\r\n this.nativeModifies.get(descriptor.id)!.interaction.setActive(true);\r\n return;\r\n }\r\n const source = entry.layer.getSource() as VectorSource<Geometry> | null;\r\n if (!source) {\r\n return;\r\n }\r\n const interaction = new Modify({\r\n source,\r\n pixelTolerance: this.getHitTolerance(modify.hitTolerance),\r\n style: modify.vertexStyle,\r\n });\r\n const keys = [\r\n interaction.on('modifystart', (event) =>\r\n this.handleNativeModifyStart(entry, modify, event),\r\n ),\r\n interaction.on('modifyend', (event) =>\r\n this.handleNativeModifyEnd(entry, modify, event),\r\n ),\r\n ];\r\n this.map.addInteraction(interaction);\r\n this.nativeModifies.set(descriptor.id, { interaction, keys });\r\n });\r\n\r\n Array.from(this.nativeModifies.keys()).forEach((layerId) => {\r\n if (!handled.has(layerId)) {\r\n this.teardownNativeModify(layerId);\r\n }\r\n });\r\n }\r\n\r\n private teardownNativeModify(layerId: string): void {\r\n const entry = this.nativeModifies.get(layerId);\r\n if (!entry) {\r\n return;\r\n }\r\n entry.keys.forEach((key) => Observable.unByKey(key));\r\n this.map.removeInteraction(entry.interaction);\r\n this.nativeModifies.delete(layerId);\r\n }\r\n\r\n private handleNativeModifyStart(\r\n entry: LayerEntry,\r\n modify: ModifyInteraction,\r\n event: ModifyEvent,\r\n ): void {\r\n const items = this.resolveHitItemsFromFeatures(entry, event.features);\r\n if (items.length === 0) {\r\n return;\r\n }\r\n if (modify.state) {\r\n this.applyState(items, modify.state, true);\r\n }\r\n if (modify.onStart) {\r\n this.isHandled(modify.onStart({ item: items[0], ctx: this.ctx, event }));\r\n }\r\n }\r\n\r\n private handleNativeModifyEnd(\r\n entry: LayerEntry,\r\n modify: ModifyInteraction,\r\n event: ModifyEvent,\r\n ): void {\r\n const items = this.resolveHitItemsFromFeatures(entry, event.features);\r\n if (items.length === 0) {\r\n return;\r\n }\r\n this.runInteractionMutation(() => {\r\n items.forEach((item) => {\r\n const geometry = item.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n const id = entry.descriptor.feature.id(item.model);\r\n entry.api.mutate(\r\n id,\r\n (prev) =>\r\n entry.descriptor.feature.geometry.applyGeometryToModel(prev, geometry as any),\r\n {reason: 'modify'},\r\n );\r\n });\r\n });\r\n if (modify.onEnd) {\r\n this.isHandled(modify.onEnd({ item: items[0], ctx: this.ctx, event }));\r\n }\r\n if (modify.state) {\r\n this.applyState(items, modify.state, false);\r\n }\r\n }\r\n\r\n private resolveHitItemsFromFeatures(\r\n entry: LayerEntry,\r\n features: Collection<Feature<Geometry>>,\r\n ): Array<HitItem<any, any>> {\r\n return features\r\n .getArray()\r\n .map((feature) => {\r\n const model = entry.api.getModelByFeature(feature as Feature<any>);\r\n if (!model) {\r\n return null;\r\n }\r\n return { model, feature } as HitItem<any, any>;\r\n })\r\n .filter((item): item is HitItem<any, any> => item !== null);\r\n }\r\n\r\n private hasCursorInteraction(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): boolean {\r\n const candidates = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ];\r\n return candidates.some(\r\n (interaction) => interaction?.cursor && this.isEnabled(interaction.enabled),\r\n );\r\n }\r\n\r\n private toggleListener(\r\n type: ListenerName,\r\n enabled: boolean,\r\n handler: (event: MapBrowserEvent<UIEvent>) => void,\r\n ): void {\r\n if (enabled) {\r\n if (!this.listenerKeys.has(type)) {\r\n const key = (\r\n this.map.on as unknown as (\r\n eventType: string,\r\n listener: (event: MapBrowserEvent<UIEvent>) => void,\r\n ) => EventsKey\r\n )(type, handler);\r\n this.listenerKeys.set(type, key);\r\n }\r\n return;\r\n }\r\n this.removeListener(type);\r\n }\r\n\r\n private removeListener(type: ListenerName): void {\r\n const key = this.listenerKeys.get(type);\r\n if (key) {\r\n Observable.unByKey(key);\r\n this.listenerKeys.delete(type);\r\n }\r\n }\r\n\r\n private isListening(type: ListenerName): boolean {\r\n return this.listenerKeys.has(type);\r\n }\r\n\r\n private applyDisabledCleanup(nextState: Map<string, InteractionEnabledState>): void {\r\n this.enabledState.forEach((prev, layerId) => {\r\n const next = nextState.get(layerId) ?? {\r\n click: false,\r\n doubleClick: false,\r\n hover: false,\r\n select: false,\r\n translate: false,\r\n modify: false,\r\n };\r\n const entry = this.getLayerEntry(layerId);\r\n if (!entry) {\r\n return;\r\n }\r\n\r\n if (prev.hover && !next.hover) {\r\n this.clearHoverState(entry);\r\n }\r\n if (prev.select && !next.select) {\r\n this.clearSelectState(entry);\r\n }\r\n if (prev.translate && !next.translate) {\r\n this.cancelTranslate(entry);\r\n }\r\n if (prev.modify && !next.modify) {\r\n this.cancelModify(entry);\r\n }\r\n });\r\n\r\n this.setCursor(undefined);\r\n }\r\n\r\n private clearHoverState(entry: LayerEntry): void {\r\n const prev = this.hoverItems.get(entry.descriptor.id);\r\n if (!prev) {\r\n return;\r\n }\r\n const hover = entry.descriptor.feature.interactions?.hover;\r\n if (hover?.state) {\r\n this.applyState(Array.from(prev.values()), hover.state, false);\r\n }\r\n this.hoverItems.delete(entry.descriptor.id);\r\n }\r\n\r\n private clearSelectState(entry: LayerEntry): void {\r\n const prev = this.selectedItems.get(entry.descriptor.id);\r\n if (!prev) {\r\n return;\r\n }\r\n const select = entry.descriptor.feature.interactions?.select;\r\n if (select?.state) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n this.selectedItems.delete(entry.descriptor.id);\r\n }\r\n\r\n private cancelTranslate(entry: LayerEntry): void {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (active) {\r\n this.finishTranslate(entry, active, active.lastItem);\r\n }\r\n }\r\n\r\n private cancelModify(entry: LayerEntry): void {\r\n const active = this.activeModifies.get(entry.descriptor.id);\r\n if (active) {\r\n this.finishModify(entry, active, active.lastItem);\r\n }\r\n }\r\n\r\n private updateCursor(event?: MapBrowserEvent<UIEvent>): void {\r\n const activeCursor = this.getActiveSessionCursor();\r\n if (activeCursor !== undefined) {\r\n this.setCursor(activeCursor ?? undefined);\r\n return;\r\n }\r\n if (!event) {\r\n this.setCursor(undefined);\r\n return;\r\n }\r\n\r\n for (const entry of this.getOrderedLayers()) {\r\n const interactions = entry.descriptor.feature.interactions;\r\n if (!interactions) {\r\n continue;\r\n }\r\n const cursor = this.getLayerCursor(interactions);\r\n if (!cursor) {\r\n continue;\r\n }\r\n const hitTolerance = this.getCursorHitTolerance(interactions);\r\n const { items } = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance,\r\n });\r\n if (items.length > 0) {\r\n this.setCursor(cursor);\r\n return;\r\n }\r\n }\r\n\r\n this.setCursor(undefined);\r\n }\r\n\r\n private getActiveSessionCursor(): string | null | undefined {\r\n for (const entry of this.getOrderedLayers()) {\r\n const activeTranslate = this.activeTranslates.get(entry.descriptor.id);\r\n if (activeTranslate) {\r\n return activeTranslate.translate.cursor ?? null;\r\n }\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (activeModify) {\r\n return activeModify.modify.cursor ?? null;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private getLayerCursor(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): string | undefined {\r\n const candidates: Array<NonNullable<InteractionBase> | undefined> = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ];\r\n for (const interaction of candidates) {\r\n if (!interaction || !interaction.cursor) {\r\n continue;\r\n }\r\n if (!this.isEnabled(interaction.enabled)) {\r\n continue;\r\n }\r\n return interaction.cursor;\r\n }\r\n return undefined;\r\n }\r\n\r\n private getCursorHitTolerance(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): number {\r\n const candidates = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ].filter((interaction) => interaction && interaction.cursor && this.isEnabled(interaction.enabled));\r\n if (candidates.length === 0) {\r\n return this.getHitTolerance(undefined);\r\n }\r\n const tolerances = candidates\r\n .map((interaction) => interaction?.hitTolerance)\r\n .filter((value): value is number => value !== undefined);\r\n if (tolerances.length === 0) {\r\n return this.getHitTolerance(undefined);\r\n }\r\n return Math.max(...tolerances);\r\n }\r\n\r\n private setCursor(cursor?: string): void {\r\n if (this.currentCursor === cursor) {\r\n return;\r\n }\r\n const target = this.getTargetElement();\r\n if (!target) {\r\n return;\r\n }\r\n target.style.cursor = cursor ?? '';\r\n this.currentCursor = cursor;\r\n }\r\n\r\n private getTargetElement(): HTMLElement | null {\r\n const targetElement = this.map.getTargetElement?.();\r\n if (targetElement) {\r\n return targetElement;\r\n }\r\n const target = this.map.getTarget?.();\r\n if (!target) {\r\n return null;\r\n }\r\n if (typeof target === 'string') {\r\n if (typeof document === 'undefined') {\r\n return null;\r\n }\r\n return document.getElementById(target);\r\n }\r\n return target as HTMLElement;\r\n }\r\n\r\n private getLayerEntry(layerId: string): LayerEntry | null {\r\n const index = this.schema.layers.findIndex((layer) => layer.id === layerId);\r\n if (index < 0) {\r\n return null;\r\n }\r\n const descriptor = this.schema.layers[index];\r\n const layer = this.layers[layerId];\r\n const api = this.apis[layerId];\r\n if (!layer || !api) {\r\n return null;\r\n }\r\n return { descriptor, layer, api, index };\r\n }\r\n\r\n private applyTranslateMove(\r\n entry: LayerEntry,\r\n active: ActiveTranslate,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): void {\r\n const translate = active.translate;\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (!resolved) {\r\n this.finishTranslate(entry, active, active.lastItem);\r\n return;\r\n }\r\n\r\n const nextCoordinate = event.coordinate as [number, number];\r\n const delta = [\r\n nextCoordinate[0] - active.lastCoordinate[0],\r\n nextCoordinate[1] - active.lastCoordinate[1],\r\n ];\r\n active.lastCoordinate = nextCoordinate;\r\n active.lastItem = resolved;\r\n\r\n const geometry = resolved.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n const translated = geometry.clone();\r\n translated.translate(delta[0], delta[1]);\r\n\r\n this.runInteractionMutation(() =>\r\n entry.api.mutate(\r\n active.targetKey,\r\n (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, translated),\r\n {reason: 'translate'},\r\n ),\r\n );\r\n\r\n if (translate.onChange) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n active.startCoordinate,\r\n 'translating',\r\n [resolved],\r\n );\r\n active.lastHandled = this.isHandled(\r\n translate.onChange({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n }\r\n\r\n private applyModifyChange(\r\n entry: LayerEntry,\r\n active: ActiveModify,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): void {\r\n const modify = active.modify;\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (!resolved) {\r\n this.finishModify(entry, active, active.lastItem);\r\n return;\r\n }\r\n\r\n active.lastItem = resolved;\r\n\r\n const geometry = resolved.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n\r\n const nextGeometry = geometry.clone();\r\n this.runInteractionMutation(() =>\r\n entry.api.mutate(\r\n active.targetKey,\r\n (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, nextGeometry),\r\n {reason: 'modify'},\r\n ),\r\n );\r\n\r\n if (modify.onChange) {\r\n const modifyEvent = this.createModifyEvent(event, 'modifying', [resolved]);\r\n active.lastHandled = this.isHandled(\r\n modify.onChange({ item: resolved, ctx: this.ctx, event: modifyEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n }\r\n\r\n private finishTranslate(\r\n entry: LayerEntry,\r\n active: ActiveTranslate,\r\n item?: HitItem<any, any> | null,\r\n ): void {\r\n const finalItem = item ?? active.lastItem;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n active.pendingEvent = undefined;\r\n }\r\n\r\n if (active.translate.state && finalItem) {\r\n this.applyState([finalItem], active.translate.state, false);\r\n }\r\n\r\n this.activeTranslates.delete(entry.descriptor.id);\r\n this.unlockDragPan();\r\n }\r\n\r\n private finishModify(\r\n entry: LayerEntry,\r\n active: ActiveModify,\r\n item?: HitItem<any, any> | null,\r\n ): void {\r\n const finalItem = item ?? active.lastItem;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n active.pendingEvent = undefined;\r\n }\r\n\r\n if (active.modify.state && finalItem) {\r\n this.applyState([finalItem], active.modify.state, false);\r\n }\r\n\r\n this.activeModifies.delete(entry.descriptor.id);\r\n this.unlockDragPan();\r\n }\r\n\r\n private resolveTarget(entry: LayerEntry, targetKey: string | number): HitItem<any, any> | null {\r\n const source = entry.layer.getSource();\r\n if (!source) {\r\n return null;\r\n }\r\n const resolvedSource = source instanceof ClusterSource ? source.getSource() : source;\r\n if (!resolvedSource) {\r\n return null;\r\n }\r\n const feature = resolvedSource.getFeatureById(targetKey);\r\n if (!(feature instanceof Feature)) {\r\n return null;\r\n }\r\n const model = entry.api.getModelByFeature(feature as Feature<Geometry>);\r\n if (!model) {\r\n return null;\r\n }\r\n return { model, feature };\r\n }\r\n\r\n private lockDragPan(): void {\r\n this.dragPanLocks += 1;\r\n if (this.dragPanLocks !== 1) {\r\n return;\r\n }\r\n const interactions = this.map.getInteractions?.();\r\n if (!interactions) {\r\n return;\r\n }\r\n const dragPans = interactions\r\n .getArray()\r\n .filter((interaction): interaction is DragPan => interaction instanceof DragPan);\r\n if (dragPans.length === 0) {\r\n return;\r\n }\r\n if (!this.dragPanStates) {\r\n this.dragPanStates = new Map();\r\n }\r\n dragPans.forEach((interaction) => {\r\n if (!this.dragPanStates?.has(interaction)) {\r\n this.dragPanStates?.set(interaction, interaction.getActive());\r\n }\r\n interaction.setActive(false);\r\n });\r\n }\r\n\r\n private unlockDragPan(): void {\r\n if (this.dragPanLocks === 0) {\r\n return;\r\n }\r\n this.dragPanLocks -= 1;\r\n if (this.dragPanLocks !== 0) {\r\n return;\r\n }\r\n if (!this.dragPanStates) {\r\n return;\r\n }\r\n this.dragPanStates.forEach((wasActive, interaction) => {\r\n interaction.setActive(wasActive);\r\n });\r\n this.dragPanStates = undefined;\r\n }\r\n\r\n private createTranslateEvent(\r\n event: MapBrowserEvent<UIEvent>,\r\n startCoordinate: [number, number],\r\n type: 'translatestart' | 'translating' | 'translateend',\r\n items: Array<HitItem<any, any>>,\r\n ): TranslateEvent {\r\n const features = new Collection(items.map((item) => item.feature));\r\n return {\r\n type,\r\n features,\r\n coordinate: event.coordinate as [number, number],\r\n startCoordinate,\r\n mapBrowserEvent: event,\r\n } as unknown as TranslateEvent;\r\n }\r\n\r\n private createModifyEvent(\r\n event: MapBrowserEvent<UIEvent>,\r\n type: 'modifystart' | 'modifying' | 'modifyend',\r\n items: Array<HitItem<any, any>>,\r\n ): ModifyEvent {\r\n const features = new Collection(items.map((item) => item.feature));\r\n return {\r\n type,\r\n features,\r\n mapBrowserEvent: event,\r\n } as unknown as ModifyEvent;\r\n }\r\n\r\n private createDefaultHitTest(): HitTestFn {\r\n return ({ layer, api, event, hitTolerance }) => {\r\n const items: Array<HitItem<any, any>> = [];\r\n let clusterHit: ClusterHit | undefined;\r\n this.map.forEachFeatureAtPixel(\r\n event.pixel,\r\n (feature) => {\r\n if (!(feature instanceof Feature)) {\r\n return;\r\n }\r\n const clusterFeatures = getClusterFeatures(feature as Feature<Geometry>);\r\n if (clusterFeatures) {\r\n if (clusterFeatures.length > 1) {\r\n if (!clusterHit) {\r\n clusterHit = {\r\n feature: feature as Feature<Geometry>,\r\n features: clusterFeatures,\r\n size: clusterFeatures.length,\r\n };\r\n }\r\n return;\r\n }\r\n const singleFeature = clusterFeatures[0];\r\n const singleModel = api.getModelByFeature(singleFeature as Feature<Geometry>);\r\n if (!singleModel) {\r\n return;\r\n }\r\n items.push({ model: singleModel, feature: singleFeature });\r\n return;\r\n }\r\n const model = api.getModelByFeature(feature as Feature<Geometry>);\r\n if (!model) {\r\n return;\r\n }\r\n items.push({ model, feature });\r\n },\r\n {\r\n layerFilter: (candidateLayer) => candidateLayer === layer,\r\n hitTolerance,\r\n },\r\n );\r\n return { items, cluster: clusterHit };\r\n };\r\n }\r\n\r\n private collectFeaturePopupItems(\r\n entry: LayerEntry,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): Array<PopupItem<any>> {\r\n const popup = entry.descriptor.feature.popup;\r\n if (!popup || !this.isEnabled(popup.enabled)) {\r\n return [];\r\n }\r\n return items.map((item) => {\r\n const popupItem = popup.item({\r\n model: item.model,\r\n feature: item.feature,\r\n ctx: this.ctx,\r\n event,\r\n });\r\n return {\r\n ...popupItem,\r\n source: popupItem.source ?? 'feature',\r\n dedupKey: popupItem.dedupKey ?? entry.descriptor.feature.id(item.model),\r\n };\r\n });\r\n }\r\n\r\n private collectPopupItems(\r\n entry: LayerEntry,\r\n hitResult: HitTestResult,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): Array<PopupItem<any>> {\r\n if (entry.descriptor.clustering && entry.api.isClusteringEnabled?.() && hitResult.cluster) {\r\n const clustering = entry.descriptor.clustering;\r\n if (clustering?.popup && this.isEnabled(clustering.popup.enabled)) {\r\n const models = hitResult.cluster.features\r\n .map((clusterFeature) =>\r\n entry.api.getModelByFeature(clusterFeature as Feature<Geometry>),\r\n )\r\n .filter((model): model is any => model !== undefined);\r\n const popupItem = clustering.popup.item({\r\n models,\r\n size: hitResult.cluster.size,\r\n ctx: this.ctx,\r\n event,\r\n });\r\n return [\r\n {\r\n ...popupItem,\r\n source: popupItem.source ?? 'cluster',\r\n dedupKey: popupItem.dedupKey ?? this.getClusterDedupKey(entry, models),\r\n },\r\n ];\r\n }\r\n return [];\r\n }\r\n return this.collectFeaturePopupItems(entry, hitResult.items, event);\r\n }\r\n\r\n private getClusterDedupKey(entry: LayerEntry, models: any[]): string {\r\n const ids = models\r\n .map((model) => String(entry.descriptor.feature.id(model)))\r\n .sort((a, b) => a.localeCompare(b))\r\n .join('|');\r\n return `cluster:${entry.descriptor.id}:${ids}`;\r\n }\r\n\r\n private getOrderedLayers(): LayerEntry[] {\r\n return this.schema.layers\r\n .map((descriptor, index) => ({\r\n descriptor,\r\n index,\r\n layer: this.layers[descriptor.id],\r\n api: this.apis[descriptor.id],\r\n }))\r\n .filter((entry) => entry.layer && entry.api)\r\n .sort((a, b) => {\r\n const aZ = a.layer.getZIndex() ?? 0;\r\n const bZ = b.layer.getZIndex() ?? 0;\r\n if (aZ !== bZ) {\r\n return bZ - aZ;\r\n }\r\n return a.index - b.index;\r\n });\r\n }\r\n\r\n private getHitTolerance(hitTolerance?: number): number {\r\n if (hitTolerance !== undefined) {\r\n return hitTolerance;\r\n }\r\n if (this.schema.options?.hitTolerance !== undefined) {\r\n return this.schema.options.hitTolerance;\r\n }\r\n return 0;\r\n }\r\n\r\n private isEnabled(enabled?: boolean | (() => boolean)): boolean {\r\n if (enabled === undefined) {\r\n return true;\r\n }\r\n if (typeof enabled === 'function') {\r\n return enabled();\r\n }\r\n return enabled;\r\n }\r\n\r\n private processHover(\r\n entry: LayerEntry,\r\n hover: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['hover']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n const prev = this.hoverItems.get(entry.descriptor.id) ?? new Map();\r\n const next = this.itemsToMap(entry, items);\r\n const entered = Array.from(next.entries())\r\n .filter(([id]) => !prev.has(id))\r\n .map(([, item]) => item);\r\n const left = Array.from(prev.entries())\r\n .filter(([id]) => !next.has(id))\r\n .map(([, item]) => item);\r\n\r\n let handled = false;\r\n if (left.length > 0 && hover.onLeave) {\r\n handled = this.isHandled(hover.onLeave({ items: left, ctx: this.ctx, event }));\r\n }\r\n if (entered.length > 0 && hover.onEnter) {\r\n handled = this.isHandled(hover.onEnter({ items: entered, ctx: this.ctx, event })) || handled;\r\n }\r\n\r\n if (hover.state) {\r\n this.applyState(left, hover.state, false);\r\n this.applyState(entered, hover.state, true);\r\n }\r\n\r\n this.hoverItems.set(entry.descriptor.id, next);\r\n return handled;\r\n }\r\n\r\n private processSelect(\r\n entry: LayerEntry,\r\n select: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['select']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n if (items.length === 0) {\r\n const prev = this.selectedItems.get(entry.descriptor.id);\r\n this.selectedItems.set(entry.descriptor.id, new Map());\r\n if (select.onClear) {\r\n const handled = this.isHandled(select.onClear({ ctx: this.ctx, event }));\r\n if (select.state && prev) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n return handled;\r\n }\r\n if (select.state && prev) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n return false;\r\n }\r\n\r\n const prev = this.selectedItems.get(entry.descriptor.id) ?? new Map();\r\n const next = this.itemsToMap(entry, items);\r\n const handled = select.onSelect\r\n ? this.isHandled(select.onSelect({ items, ctx: this.ctx, event }))\r\n : false;\r\n if (select.state) {\r\n const added = Array.from(next.entries())\r\n .filter(([id]) => !prev.has(id))\r\n .map(([, item]) => item);\r\n const removed = Array.from(prev.entries())\r\n .filter(([id]) => !next.has(id))\r\n .map(([, item]) => item);\r\n this.applyState(removed, select.state, false);\r\n this.applyState(added, select.state, true);\r\n }\r\n this.selectedItems.set(entry.descriptor.id, next);\r\n return handled;\r\n }\r\n\r\n private processClick(\r\n entry: LayerEntry,\r\n click: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['click']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n if (items.length === 0) {\r\n return false;\r\n }\r\n return this.isHandled(click.onClick({ items, ctx: this.ctx, event }));\r\n }\r\n\r\n private processDoubleClick(\r\n entry: LayerEntry,\r\n doubleClick: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['doubleClick']\r\n >,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n if (items.length === 0) {\r\n return false;\r\n }\r\n return this.isHandled(doubleClick.onDoubleClick({ items, ctx: this.ctx, event }));\r\n }\r\n\r\n private itemsToMap(\r\n entry: LayerEntry,\r\n items: Array<HitItem<any, any>>,\r\n ): Map<string | number, HitItem<any, any>> {\r\n const next = new Map<string | number, HitItem<any, any>>();\r\n items.forEach((item) => {\r\n const id = entry.descriptor.feature.id(item.model);\r\n next.set(id, item);\r\n });\r\n return next;\r\n }\r\n\r\n private applyState(items: Array<HitItem<any, any>>, state: FeatureState, enabled: boolean): void {\r\n const states = Array.isArray(state) ? state : [state];\r\n items.forEach((item) => {\r\n const current = new Set(getFeatureStates(item.feature));\r\n states.forEach((entry) => {\r\n if (enabled) {\r\n current.add(entry);\r\n } else {\r\n current.delete(entry);\r\n }\r\n });\r\n setFeatureStates(item.feature, Array.from(current));\r\n });\r\n }\r\n\r\n private isHandled(result: InteractionHandlerResult): boolean {\r\n return result === true;\r\n }\r\n\r\n private shouldStopPropagation(base: InteractionBase): boolean {\r\n return base.propagation !== 'continue';\r\n }\r\n\r\n private shouldContinuePropagation(base: InteractionBase): boolean {\r\n return base.propagation === 'continue';\r\n }\r\n\r\n private handleClusterClick(\r\n entry: LayerEntry,\r\n clusterHit: ClusterHit,\r\n event: MapBrowserEvent<UIEvent>,\r\n manualPopupPush: boolean,\r\n ): boolean {\r\n const clustering = entry.descriptor.clustering;\r\n if (!clustering) {\r\n return false;\r\n }\r\n\r\n const models = clusterHit.features\r\n .map((clusterFeature) =>\r\n entry.api.getModelByFeature(clusterFeature as Feature<Geometry>),\r\n )\r\n .filter((model): model is any => model !== undefined);\r\n let handled = false;\r\n\r\n if (clustering.expandOnClick) {\r\n this.expandCluster(clusterHit, clustering.expandOnClick);\r\n clustering.expandOnClick.onExpanded?.({ models, ctx: this.ctx });\r\n handled = true;\r\n }\r\n\r\n if (clustering.popup && this.isEnabled(clustering.popup.enabled)) {\r\n if (manualPopupPush || !this.ctx.popupHost) {\r\n const item = clustering.popup.item({ models, size: clusterHit.size, ctx: this.ctx, event });\r\n if (manualPopupPush && this.ctx.popupHost) {\r\n this.ctx.popupHost.push([\r\n {\r\n ...item,\r\n source: item.source ?? 'cluster',\r\n dedupKey: item.dedupKey ?? this.getClusterDedupKey(entry, models),\r\n },\r\n ]);\r\n }\r\n }\r\n handled = true;\r\n }\r\n\r\n return handled;\r\n }\r\n\r\n private expandCluster(\r\n clusterHit: ClusterHit,\r\n expand: NonNullable<NonNullable<LayerEntry['descriptor']['clustering']>['expandOnClick']>,\r\n ): void {\r\n const view = this.map.getView();\r\n const duration = expand.durationMs;\r\n if (expand.mode === 'zoomIn') {\r\n const currentZoom = view.getZoom() ?? 0;\r\n const delta = expand.zoomDelta ?? 1;\r\n const targetZoom = currentZoom + delta;\r\n const nextZoom =\r\n expand.maxZoom !== undefined ? Math.min(expand.maxZoom, targetZoom) : targetZoom;\r\n view.animate({ zoom: nextZoom, duration });\r\n return;\r\n }\r\n\r\n const extent = createEmpty();\r\n clusterHit.features.forEach((feature) => {\r\n const geometry = feature.getGeometry();\r\n if (geometry) {\r\n extend(extent, geometry.getExtent());\r\n }\r\n });\r\n if (isEmpty(extent)) {\r\n return;\r\n }\r\n const padding = toOlPadding(expand.padding, undefined);\r\n view.fit(extent, {\r\n padding,\r\n duration,\r\n maxZoom: expand.maxZoom,\r\n });\r\n }\r\n\r\n private shouldStopClusterPropagation(): boolean {\r\n return true;\r\n }\r\n}\r\n","import type Style from 'ol/style/Style';\r\n\r\nexport type StyleCacheKey = string;\r\n\r\nexport class StyleCache {\r\n private readonly stringCache = new Map<string, Style | Style[]>();\r\n\r\n get(key: StyleCacheKey): Style | Style[] | undefined {\r\n return this.stringCache.get(key);\r\n }\r\n\r\n set(key: StyleCacheKey, value: Style | Style[]): void {\r\n this.stringCache.set(key, value);\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport type OlMap from 'ol/Map';\r\nimport type { StyleFunction } from 'ol/style/Style';\r\n\r\nimport type {\r\n FeatureDescriptor,\r\n FeatureStyleState,\r\n LayerClustering,\r\n MapContext,\r\n MaybeFn,\r\n Patch,\r\n StyleView,\r\n} from '../../public/types';\r\nimport { getClusterFeatures } from '../cluster-utils';\r\nimport { getFeatureStates } from './feature-states';\r\nimport { StyleCache } from './style-cache';\r\n\r\nexport type StylePipelineOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: FeatureDescriptor<M, G, OPTS>;\r\n ctx: MapContext;\r\n registryGetModel: (feature: Feature<Geometry>) => M | undefined;\r\n map?: OlMap;\r\n};\r\n\r\nconst resolveMaybeFn = <T, A extends any[]>(value: MaybeFn<T, A>, args: A): T => {\r\n if (typeof value === 'function') {\r\n return (value as (...fnArgs: A) => T)(...args);\r\n }\r\n return value;\r\n};\r\n\r\nconst applyPatch = <T extends object>(opts: T, patch: Patch<T>): T => {\r\n const patchValue = typeof patch === 'function' ? patch(opts) : patch;\r\n return { ...opts, ...patchValue };\r\n};\r\n\r\nconst orderStates = (\r\n states: FeatureStyleState[],\r\n priority?: FeatureStyleState[],\r\n): FeatureStyleState[] => {\r\n if (!priority || priority.length === 0) {\r\n return states;\r\n }\r\n const prioritySet = new Set(priority);\r\n const ordered = priority.filter((state) => states.includes(state));\r\n const rest = states.filter((state) => !prioritySet.has(state));\r\n return [...ordered, ...rest];\r\n};\r\n\r\nexport const createStyleFunction = <M, G extends Geometry, OPTS extends object>(\r\n options: StylePipelineOptions<M, G, OPTS>,\r\n): StyleFunction => {\r\n const { descriptor, registryGetModel, map } = options;\r\n const { style } = descriptor;\r\n const cache = new StyleCache();\r\n\r\n return (feature, resolution) => {\r\n if (!(feature instanceof Feature)) {\r\n return [];\r\n }\r\n const model = registryGetModel(feature);\r\n if (!model) {\r\n return [];\r\n }\r\n const view: StyleView = {\r\n resolution,\r\n zoom: map?.getView().getZoom(),\r\n };\r\n let opts = resolveMaybeFn(style.base, [model, view]);\r\n\r\n if (style.states) {\r\n const featureStates = orderStates(getFeatureStates(feature), style.statePriority);\r\n featureStates.forEach((state) => {\r\n const patchFactory = style.states?.[state];\r\n if (!patchFactory) {\r\n return;\r\n }\r\n const patch = resolveMaybeFn(patchFactory, [model, view]);\r\n opts = applyPatch(opts, patch);\r\n });\r\n }\r\n\r\n if (style.cacheKey) {\r\n const key = style.cacheKey(opts, view);\r\n if (key) {\r\n const cached = cache.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const rendered = style.render(opts, view);\r\n cache.set(key, rendered);\r\n return rendered;\r\n }\r\n }\r\n\r\n return style.render(opts, view);\r\n };\r\n};\r\n\r\nexport type ClusterStylePipelineOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: FeatureDescriptor<M, G, OPTS>;\r\n clustering: LayerClustering<M>;\r\n ctx: MapContext;\r\n registryGetModel: (feature: Feature<Geometry>) => M | undefined;\r\n map?: OlMap;\r\n};\r\n\r\nexport const createClusterStyleFunction = <M, G extends Geometry, OPTS extends object>(\r\n options: ClusterStylePipelineOptions<M, G, OPTS>,\r\n): StyleFunction => {\r\n const { clustering, registryGetModel, map } = options;\r\n const baseStyle = createStyleFunction(options);\r\n const cache = new StyleCache();\r\n\r\n return (feature, resolution) => {\r\n if (!(feature instanceof Feature)) {\r\n return [];\r\n }\r\n const clusterFeatures = getClusterFeatures(feature);\r\n if (!clusterFeatures) {\r\n return baseStyle(feature, resolution);\r\n }\r\n\r\n const size = clusterFeatures.length;\r\n if (size === 1) {\r\n return baseStyle(clusterFeatures[0], resolution);\r\n }\r\n\r\n const models = clusterFeatures\r\n .map((clusterFeature) => registryGetModel(clusterFeature))\r\n .filter((model): model is M => model !== undefined);\r\n const view: StyleView = {\r\n resolution,\r\n zoom: map?.getView().getZoom(),\r\n };\r\n\r\n if (clustering.clusterStyle.cacheKey) {\r\n const key = clustering.clusterStyle.cacheKey({ models, size, view });\r\n if (key) {\r\n const cached = cache.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const rendered = clustering.clusterStyle.render({ models, size, view });\r\n cache.set(key, rendered);\r\n return rendered;\r\n }\r\n }\r\n\r\n return clustering.clusterStyle.render({ models, size, view });\r\n };\r\n};\r\n","import type Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nexport class FeatureRegistry<M, G extends Geometry> {\r\n private readonly idToModel = new Map<string | number, M>();\r\n private readonly idToFeature = new Map<string | number, Feature<G>>();\r\n private readonly featureToId = new WeakMap<Feature<G>, string | number>();\r\n\r\n set(id: string | number, model: M, feature: Feature<G>): void {\r\n this.idToModel.set(id, model);\r\n this.idToFeature.set(id, feature);\r\n this.featureToId.set(feature, id);\r\n }\r\n\r\n updateModel(id: string | number, model: M): void {\r\n if (!this.idToModel.has(id)) {\r\n return;\r\n }\r\n this.idToModel.set(id, model);\r\n }\r\n\r\n getModel(id: string | number): M | undefined {\r\n return this.idToModel.get(id);\r\n }\r\n\r\n getFeature(id: string | number): Feature<G> | undefined {\r\n return this.idToFeature.get(id);\r\n }\r\n\r\n getIdByFeature(feature: Feature<G>): string | number | undefined {\r\n return this.featureToId.get(feature);\r\n }\r\n\r\n getModelByFeature(feature: Feature<G>): M | undefined {\r\n const id = this.featureToId.get(feature);\r\n if (id === undefined) {\r\n return undefined;\r\n }\r\n return this.idToModel.get(id);\r\n }\r\n\r\n has(id: string | number): boolean {\r\n return this.idToModel.has(id);\r\n }\r\n\r\n remove(id: string | number): Feature<G> | undefined {\r\n const feature = this.idToFeature.get(id);\r\n if (!feature) {\r\n return undefined;\r\n }\r\n this.idToModel.delete(id);\r\n this.idToFeature.delete(id);\r\n this.featureToId.delete(feature);\r\n return feature;\r\n }\r\n\r\n forEachId(fn: (id: string | number) => void): void {\r\n this.idToModel.forEach((_model, id) => fn(id));\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createEmpty, extend, isEmpty} from 'ol/extent';\r\nimport type VectorLayer from 'ol/layer/Vector';\r\nimport type VectorSource from 'ol/source/Vector';\r\n\r\nimport type {\r\n FeatureDescriptor,\r\n MapContext,\r\n ModelChange,\r\n MutateOptions,\r\n VectorLayerApi,\r\n VectorLayerDescriptor,\r\n ViewFitOptions,\r\n} from '../public/types';\r\nimport {FeatureRegistry} from './feature-registry';\r\nimport {setFeatureStates} from './style/feature-states';\r\nimport {toOlFitOptions} from './fit-layer.utils';\r\n\r\nexport type VectorLayerBaseOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: VectorLayerDescriptor<M, G, OPTS>;\r\n layer: VectorLayer;\r\n source: VectorSource<G>;\r\n ctx: MapContext;\r\n scheduleInvalidate: () => void;\r\n};\r\n\r\nexport abstract class VectorLayerBase<M, G extends Geometry, OPTS extends object>\r\n implements VectorLayerApi<M, G>\r\n{\r\n protected readonly descriptor: FeatureDescriptor<M, G, OPTS>;\r\n protected readonly layer: VectorLayer;\r\n protected readonly source: VectorSource<G>;\r\n protected readonly registry = new FeatureRegistry<M, G>();\r\n protected readonly scheduleInvalidate: () => void;\r\n protected readonly ctx: MapContext;\r\n private readonly changeHandlers = new Set<(changes: ModelChange<M>[]) => void>();\r\n\r\n constructor(options: VectorLayerBaseOptions<M, G, OPTS>) {\r\n this.descriptor = options.descriptor.feature;\r\n this.layer = options.layer;\r\n this.source = options.source;\r\n this.ctx = options.ctx;\r\n this.scheduleInvalidate = options.scheduleInvalidate;\r\n }\r\n\r\n setModels(models: readonly M[]): void {\r\n this.setModelsInternal(models);\r\n }\r\n\r\n invalidate(): void {\r\n this.scheduleInvalidate();\r\n }\r\n\r\n protected syncFeatureFromModel(model: M): void {\r\n const id = this.descriptor.id(model);\r\n const feature = this.registry.getFeature(id);\r\n if (!feature) {\r\n return;\r\n }\r\n feature.setGeometry(this.descriptor.geometry.fromModel(model));\r\n }\r\n\r\n getModelByFeature(feature: Feature<G>): M | undefined {\r\n return this.registry.getModelByFeature(feature);\r\n }\r\n\r\n mutate(\r\n id: string | number,\r\n update: (prev: M) => M,\r\n opts?: MutateOptions,\r\n ): void {\r\n const prev = this.registry.getModel(id);\r\n if (!prev) {\r\n return;\r\n }\r\n const next = update(prev);\r\n if (next === prev) {\r\n return;\r\n }\r\n const reason = opts?.reason ?? 'mutate';\r\n this.registry.updateModel(id, next);\r\n this.syncFeatureFromModel(next);\r\n this.scheduleInvalidate();\r\n if (!opts?.silent) {\r\n this.emitModelChanges([{prev, next, reason}]);\r\n }\r\n }\r\n\r\n mutateMany(\r\n ids: Array<string | number>,\r\n update: (prev: M) => M,\r\n opts?: MutateOptions,\r\n ): void {\r\n const changes: ModelChange<M>[] = [];\r\n const reason = opts?.reason ?? 'mutate';\r\n\r\n ids.forEach((id) => {\r\n const prev = this.registry.getModel(id);\r\n if (!prev) {\r\n return;\r\n }\r\n const next = update(prev);\r\n if (next === prev) {\r\n return;\r\n }\r\n this.registry.updateModel(id, next);\r\n this.syncFeatureFromModel(next);\r\n changes.push({prev, next, reason});\r\n });\r\n\r\n if (changes.length === 0) {\r\n return;\r\n }\r\n\r\n this.scheduleInvalidate();\r\n if (!opts?.silent) {\r\n this.emitModelChanges(changes);\r\n }\r\n }\r\n\r\n onModelsChanged(cb: (changes: ModelChange<M>[]) => void): () => void {\r\n this.changeHandlers.add(cb);\r\n return () => this.changeHandlers.delete(cb);\r\n }\r\n\r\n /** Fit view to all features on the layer. No-op if extent is empty. */\r\n centerOnAllModels(opts?: ViewFitOptions): void {\r\n const current = this.getCenterOnAllModelsSource();\r\n const extent = current?.getExtent?.();\r\n if (!extent || isEmpty(extent)) {\r\n return;\r\n }\r\n this.ctx.map.getView().fit(extent, toOlFitOptions(opts));\r\n }\r\n\r\n /** Fit view to a single feature by id. No-op if feature/geometry is missing. */\r\n centerOnModel(id: string | number, opts?: ViewFitOptions): void {\r\n const feature = this.registry.getFeature(id);\r\n const geom = feature?.getGeometry();\r\n if (!geom) {\r\n return;\r\n }\r\n this.ctx.map.getView().fit(geom.getExtent(), toOlFitOptions(opts));\r\n }\r\n\r\n /**\r\n * Fit view to a subset of features by ids (combined extent).\r\n * Missing ids are ignored. No-op if none found.\r\n */\r\n centerOnModels(ids: ReadonlyArray<string | number>, opts?: ViewFitOptions): void {\r\n const extent = createEmpty();\r\n\r\n let found = false;\r\n for (const id of ids) {\r\n const feature = this.registry.getFeature(id);\r\n const geom = feature?.getGeometry();\r\n if (!geom) continue;\r\n extend(extent, geom.getExtent());\r\n found = true;\r\n }\r\n\r\n if (!found || isEmpty(extent)) {\r\n return;\r\n }\r\n\r\n this.ctx.map.getView().fit(extent, toOlFitOptions(opts));\r\n }\r\n\r\n setVisible(visible: boolean): void {\r\n this.layer.setVisible(visible);\r\n }\r\n\r\n isVisible(): boolean {\r\n return this.layer.getVisible();\r\n }\r\n\r\n setOpacity(opacity: number): void {\r\n this.layer.setOpacity(opacity);\r\n }\r\n\r\n getOpacity(): number {\r\n return this.layer.getOpacity();\r\n }\r\n\r\n getZIndex(): number | undefined {\r\n return this.layer.getZIndex();\r\n }\r\n\r\n setZIndex(z: number): void {\r\n this.layer.setZIndex(z);\r\n }\r\n\r\n getModelById(id: string | number): M | undefined {\r\n return this.registry.getModel(id);\r\n }\r\n\r\n hasModel(id: string | number): boolean {\r\n return this.registry.getFeature(id) != null;\r\n }\r\n\r\n getAllModels(): readonly M[] {\r\n const out: M[] = [];\r\n this.registry.forEachId((id) => {\r\n const model = this.registry.getModel(id);\r\n if (model !== undefined) {\r\n out.push(model);\r\n }\r\n });\r\n return out;\r\n }\r\n\r\n getAllModelIds(): Array<string | number> {\r\n const out: Array<string | number> = [];\r\n this.registry.forEachId((id) => out.push(id));\r\n return out;\r\n }\r\n\r\n setFeatureStates(\r\n ids: string | number | ReadonlyArray<string | number>,\r\n states?: string | string[],\r\n ): void {\r\n const targetIds = Array.isArray(ids) ? ids : [ids];\r\n const nextStates = states ? (Array.isArray(states) ? states : [states]) : [];\r\n\r\n targetIds.forEach((id) => {\r\n const feature = this.registry.getFeature(id);\r\n if (feature) {\r\n setFeatureStates(feature, nextStates);\r\n }\r\n });\r\n\r\n this.scheduleInvalidate();\r\n }\r\n\r\n protected setModelsInternal(models: readonly M[]): void {\r\n const nextIds = new Set<string | number>();\r\n models.forEach((model) => {\r\n const id = this.descriptor.id(model);\r\n nextIds.add(id);\r\n const existingFeature = this.registry.getFeature(id);\r\n if (existingFeature) {\r\n const prevModel = this.registry.getModel(id);\r\n if (prevModel !== model) {\r\n this.registry.updateModel(id, model);\r\n existingFeature.setGeometry(this.descriptor.geometry.fromModel(model));\r\n }\r\n return;\r\n }\r\n\r\n const feature = new Feature<G>({\r\n geometry: this.descriptor.geometry.fromModel(model),\r\n });\r\n feature.setId(id);\r\n this.registry.set(id, model, feature);\r\n this.source.addFeature(feature);\r\n this.descriptor.geometry.onCreate?.({feature, model, ctx: this.ctx});\r\n });\r\n\r\n const toRemove: Array<string | number> = [];\r\n this.registry.forEachId((id) => {\r\n if (!nextIds.has(id)) {\r\n toRemove.push(id);\r\n }\r\n });\r\n toRemove.forEach((id) => {\r\n const feature = this.registry.remove(id);\r\n if (feature) {\r\n this.source.removeFeature(feature);\r\n }\r\n });\r\n }\r\n\r\n protected getCenterOnAllModelsSource(): VectorSource<G> | null {\r\n return this.source;\r\n }\r\n\r\n private emitModelChanges(changes: ModelChange<M>[]): void {\r\n if (changes.length === 0) {\r\n return;\r\n }\r\n this.changeHandlers.forEach((handler) => handler(changes));\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createEmpty} from 'ol/extent';\r\nimport type ClusterSource from 'ol/source/Cluster';\r\nimport type VectorSource from 'ol/source/Vector';\r\n\r\nimport { clearFeatureStates } from './style/feature-states';\r\nimport { createClusterStyleFunction } from './style/style-pipeline';\r\nimport {VectorLayerBase, VectorLayerBaseOptions} from './vector-layer-base';\r\n\r\nexport type ClusteredLayerOptions<M, G extends Geometry, OPTS extends object> =\r\n VectorLayerBaseOptions<M, G, OPTS> & {\r\n clusterSource: ClusterSource;\r\n };\r\n\r\nexport class ClusteredVectorLayer<M, G extends Geometry, OPTS extends object>\r\n extends VectorLayerBase<M, G, OPTS>\r\n{\r\n private readonly clusterSource: ClusterSource;\r\n private clusteringEnabled: boolean;\r\n\r\n constructor(options: ClusteredLayerOptions<M, G, OPTS>) {\r\n super(options);\r\n this.clusterSource = options.clusterSource;\r\n this.clusteringEnabled = options.descriptor.clustering?.enabledByDefault ?? false;\r\n\r\n this.layer.setStyle(\r\n createClusterStyleFunction({\r\n descriptor: this.descriptor,\r\n clustering: options.descriptor.clustering!,\r\n ctx: this.ctx,\r\n registryGetModel: (feature) => this.registry.getModelByFeature(feature as Feature<G>),\r\n map: this.ctx.map,\r\n }),\r\n );\r\n\r\n this.layer.setSource(\r\n this.clusteringEnabled ? (this.clusterSource as unknown as VectorSource<G>) : this.source,\r\n );\r\n }\r\n\r\n override setModels(models: readonly M[]): void {\r\n this.setModelsInternal(models);\r\n this.scheduleInvalidate();\r\n }\r\n\r\n setClusteringEnabled(enabled: boolean): void {\r\n if (this.clusteringEnabled === enabled) {\r\n return;\r\n }\r\n this.clusteringEnabled = enabled;\r\n this.clearInteractionStates();\r\n this.layer.setSource(\r\n enabled ? (this.clusterSource as unknown as VectorSource<G>) : this.source,\r\n );\r\n if (enabled) {\r\n const view = this.ctx.map.getView();\r\n const resolution = view.getResolution() ?? 1;\r\n this.clusterSource.loadFeatures(createEmpty(), resolution, view.getProjection());\r\n this.clusterSource.refresh();\r\n }\r\n this.scheduleInvalidate();\r\n }\r\n\r\n isClusteringEnabled(): boolean {\r\n return this.clusteringEnabled;\r\n }\r\n\r\n private clearInteractionStates(): void {\r\n this.registry.forEachId((id) => {\r\n const feature = this.registry.getFeature(id);\r\n if (feature) {\r\n clearFeatureStates(feature);\r\n }\r\n });\r\n }\r\n\r\n protected override getCenterOnAllModelsSource(): VectorSource<G> | null {\r\n return this.layer.getSource() as unknown as VectorSource<G> | null;\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createStyleFunction} from './style/style-pipeline';\r\nimport {VectorLayerBase, VectorLayerBaseOptions} from './vector-layer-base';\r\n\r\nexport type PlainLayerOptions<M, G extends Geometry, OPTS extends object> =\r\n VectorLayerBaseOptions<M, G, OPTS>;\r\n\r\nexport class PlainVectorLayer<M, G extends Geometry, OPTS extends object> extends VectorLayerBase<\r\n M,\r\n G,\r\n OPTS\r\n> {\r\n constructor(options: PlainLayerOptions<M, G, OPTS>) {\r\n super(options);\r\n\r\n this.layer.setStyle(\r\n createStyleFunction({\r\n descriptor: this.descriptor,\r\n ctx: this.ctx,\r\n registryGetModel: (feature) => this.registry.getModelByFeature(feature as Feature<G>),\r\n map: this.ctx.map,\r\n }),\r\n );\r\n }\r\n}\r\n","import type { Enabled, PopupHostApi, PopupItem } from '../public/types';\r\n\r\nexport type PopupHostOptions = {\r\n enabled?: Enabled;\r\n maxItems?: number;\r\n sort?: (a: PopupItem<any>, b: PopupItem<any>) => number;\r\n mount?: HTMLElement | (() => HTMLElement);\r\n};\r\n\r\ntype ItemWithIndex = { item: PopupItem<any>; index: number };\r\n\r\nexport class PopupHost implements PopupHostApi {\r\n private items: PopupItem<any>[] = [];\r\n private container: HTMLElement | null = null;\r\n private target: HTMLElement | null = null;\r\n\r\n constructor(private readonly options: PopupHostOptions = {}) {\r\n if (options.mount) {\r\n this.mount(options.mount);\r\n }\r\n }\r\n\r\n push(items: PopupItem<any>[]): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.prepareItems([...this.items, ...items]);\r\n this.render();\r\n }\r\n\r\n set(items: PopupItem<any>[]): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.prepareItems(items);\r\n this.render();\r\n }\r\n\r\n clear(): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = [];\r\n this.render();\r\n }\r\n\r\n remove(key: string | number): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.items.filter((item) => this.getDedupKey(item) !== key);\r\n this.render();\r\n }\r\n\r\n getItems(): PopupItem<any>[] {\r\n if (!this.isEnabled()) {\r\n return [];\r\n }\r\n return [...this.items];\r\n }\r\n\r\n mount(target: HTMLElement | (() => HTMLElement)): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n const element = typeof target === 'function' ? target() : target;\r\n if (!element) {\r\n return;\r\n }\r\n if (this.target !== element) {\r\n this.unmount();\r\n }\r\n this.target = element;\r\n this.render();\r\n }\r\n\r\n dispose(): void {\r\n this.unmount();\r\n this.items = [];\r\n }\r\n\r\n private ensureEnabled(): boolean {\r\n if (this.isEnabled()) {\r\n return true;\r\n }\r\n this.items = [];\r\n this.unmount();\r\n return false;\r\n }\r\n\r\n private isEnabled(): boolean {\r\n const enabled = this.options.enabled;\r\n if (enabled === undefined) {\r\n return true;\r\n }\r\n return typeof enabled === 'function' ? enabled() : enabled;\r\n }\r\n\r\n private unmount(): void {\r\n if (this.container && this.container.parentElement) {\r\n this.container.parentElement.removeChild(this.container);\r\n }\r\n this.container = null;\r\n this.target = null;\r\n }\r\n\r\n private prepareItems(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const deduped = this.dedup(items);\r\n const sorted = this.applySort(deduped);\r\n return this.applyLimit(sorted);\r\n }\r\n\r\n private dedup(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const result: PopupItem<any>[] = [];\r\n const indices = new Map<string | number, number>();\r\n items.forEach((item) => {\r\n const key = this.getDedupKey(item);\r\n if (key === undefined) {\r\n result.push(item);\r\n return;\r\n }\r\n const existingIndex = indices.get(key);\r\n if (existingIndex !== undefined) {\r\n result[existingIndex] = item;\r\n return;\r\n }\r\n indices.set(key, result.length);\r\n result.push(item);\r\n });\r\n return result;\r\n }\r\n\r\n private applySort(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const comparator = this.options.sort ?? this.defaultSort;\r\n const withIndex: ItemWithIndex[] = items.map((item, index) => ({ item, index }));\r\n withIndex.sort((a, b) => {\r\n const result = comparator(a.item, b.item);\r\n if (result !== 0) {\r\n return result;\r\n }\r\n return a.index - b.index;\r\n });\r\n return withIndex.map((entry) => entry.item);\r\n }\r\n\r\n private applyLimit(items: PopupItem<any>[]): PopupItem<any>[] {\r\n if (this.options.maxItems === undefined) {\r\n return items;\r\n }\r\n return items.slice(0, this.options.maxItems);\r\n }\r\n\r\n private getDedupKey(item: PopupItem<any>): string | number | undefined {\r\n if (item.dedupKey !== undefined) {\r\n return item.dedupKey;\r\n }\r\n const model = item.model as { id?: string | number };\r\n if (model && (typeof model.id === 'string' || typeof model.id === 'number')) {\r\n return model.id;\r\n }\r\n return undefined;\r\n }\r\n\r\n private defaultSort(a: PopupItem<any>, b: PopupItem<any>): number {\r\n const aPriority = a.priority ?? 0;\r\n const bPriority = b.priority ?? 0;\r\n return bPriority - aPriority;\r\n }\r\n\r\n private render(): void {\r\n if (!this.target) {\r\n return;\r\n }\r\n if (!this.container) {\r\n this.container = document.createElement('div');\r\n this.container.className = 'mf-popup-host';\r\n this.target.appendChild(this.container);\r\n }\r\n this.container.innerHTML = '';\r\n this.items.forEach((item) => {\r\n const card = document.createElement('div');\r\n card.className = 'mf-popup-item';\r\n if (item.className) {\r\n card.classList.add(item.className);\r\n }\r\n if (typeof item.content === 'string') {\r\n card.textContent = item.content;\r\n } else {\r\n card.appendChild(item.content);\r\n }\r\n const key = this.getDedupKey(item);\r\n if (key !== undefined) {\r\n const close = document.createElement('button');\r\n close.type = 'button';\r\n close.dataset['popupClose'] = String(key);\r\n close.textContent = '×';\r\n close.addEventListener('click', () => this.remove(key));\r\n card.appendChild(close);\r\n }\r\n this.container!.appendChild(card);\r\n });\r\n }\r\n}\r\n","import VectorLayer from 'ol/layer/Vector';\r\nimport ClusterSource from 'ol/source/Cluster';\r\nimport VectorSource from 'ol/source/Vector';\r\nimport type OlMap from 'ol/Map';\r\n\r\nimport type {\r\n MapContext,\r\n MapSchema,\r\n VectorLayerApi,\r\n VectorLayerDescriptor,\r\n} from '../public/types';\r\nimport { createMapContext } from './map-context';\r\nimport { InteractionManager } from './interaction-manager';\r\nimport { ClusteredVectorLayer } from './clustered-layer';\r\nimport { PlainVectorLayer } from './plain-layer';\r\nimport { PopupHost } from './popup-host';\r\nimport { FlushScheduler } from './scheduler';\r\n\r\nexport class LayerManager<Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]> {\r\n private readonly layers: Record<string, VectorLayer> = {};\r\n private readonly apis: Record<string, VectorLayerApi<any, any>> = {};\r\n private readonly interactions: InteractionManager<Layers>;\r\n private readonly ctx: MapContext;\r\n\r\n private constructor(private readonly map: OlMap, schema: MapSchema<Layers>) {\r\n const popupHost = schema.options?.popupHost ? new PopupHost(schema.options.popupHost) : undefined;\r\n const scheduler = new FlushScheduler(schema.options?.scheduler?.policy ?? 'microtask');\r\n const ctx = createMapContext(this.map, this.apis, popupHost, scheduler);\r\n this.ctx = ctx;\r\n\r\n schema.layers.forEach((descriptor) => {\r\n const source = new VectorSource<any>();\r\n const clusterSource = descriptor.clustering\r\n ? new ClusterSource({\r\n source,\r\n distance: descriptor.clustering.distance,\r\n })\r\n : null;\r\n const layer = new VectorLayer({ source });\r\n if (descriptor.zIndex !== undefined) {\r\n layer.setZIndex(descriptor.zIndex);\r\n }\r\n if (descriptor.visibleByDefault !== undefined) {\r\n layer.setVisible(descriptor.visibleByDefault);\r\n }\r\n if (descriptor.title) {\r\n layer.set('title', descriptor.title);\r\n }\r\n layer.set('id', descriptor.id);\r\n\r\n const scheduleInvalidate = () => scheduler.schedule(layer, () => layer.changed());\r\n const api = descriptor.clustering\r\n ? new ClusteredVectorLayer({\r\n descriptor,\r\n layer,\r\n source,\r\n clusterSource: clusterSource!,\r\n ctx,\r\n scheduleInvalidate,\r\n })\r\n : new PlainVectorLayer({\r\n descriptor,\r\n layer,\r\n source,\r\n ctx,\r\n scheduleInvalidate,\r\n });\r\n\r\n this.layers[descriptor.id] = layer;\r\n this.apis[descriptor.id] = api;\r\n this.map.addLayer(layer);\r\n });\r\n\r\n this.interactions = new InteractionManager({\r\n ctx,\r\n map: this.map,\r\n schema,\r\n layers: this.layers,\r\n apis: this.apis,\r\n });\r\n }\r\n\r\n static create<Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]>(\r\n map: OlMap,\r\n schema: MapSchema<Layers>,\r\n ): LayerManager<Layers> {\r\n return new LayerManager(map, schema);\r\n }\r\n\r\n getLayer(id: string): VectorLayer | undefined {\r\n return this.layers[id];\r\n }\r\n\r\n getApi(id: string): VectorLayerApi<any, any> | undefined {\r\n return this.apis[id];\r\n }\r\n\r\n getApis(): Record<string, VectorLayerApi<any, any>> {\r\n return { ...this.apis };\r\n }\r\n\r\n getContext(): MapContext {\r\n return this.ctx;\r\n }\r\n\r\n refreshEnabled(): void {\r\n this.interactions.refreshEnabled();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of lib\r\n */\r\n\r\nexport * from './lib/lib.service';\r\nexport * from './lib/lib.component';\r\nexport * from './lib/map-framework';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -140,6 +140,12 @@ export type ModelChange<M> = {
|
|
|
140
140
|
/** Причина изменения. */
|
|
141
141
|
reason: ModelChangeReason;
|
|
142
142
|
};
|
|
143
|
+
export type MutateOptions = {
|
|
144
|
+
/** Причина изменения (по умолчанию 'mutate'). */
|
|
145
|
+
reason?: ModelChangeReason;
|
|
146
|
+
/** Без оповещения подписчиков (по умолчанию false). */
|
|
147
|
+
silent?: boolean;
|
|
148
|
+
};
|
|
143
149
|
/**
|
|
144
150
|
* Паддинги для операций fit/center.
|
|
145
151
|
*
|
|
@@ -189,17 +195,15 @@ export type VectorLayerApi<M, G extends Geometry> = {
|
|
|
189
195
|
setModels: (models: readonly M[]) => void;
|
|
190
196
|
/** Запросить пересчёт слоя/стилей. */
|
|
191
197
|
invalidate: () => void;
|
|
192
|
-
/** Синхронизировать модель в фичу при внешнем изменении модели. */
|
|
193
|
-
syncFeatureFromModel: (model: M) => void;
|
|
194
198
|
/** Найти модель по фиче слоя. */
|
|
195
199
|
getModelByFeature: (feature: Feature<G>) => M | undefined;
|
|
196
200
|
/**
|
|
197
201
|
* Иммутабельное обновление модели по id.
|
|
198
202
|
* `update` обязан вернуть новый объект (или тот же для no-op).
|
|
199
203
|
*/
|
|
200
|
-
mutate: (id: string | number, update: (prev: M) => M,
|
|
204
|
+
mutate: (id: string | number, update: (prev: M) => M, opts?: MutateOptions) => void;
|
|
201
205
|
/** Массовая мутация (опционально). */
|
|
202
|
-
mutateMany?: (ids: Array<string | number>, update: (prev: M) => M,
|
|
206
|
+
mutateMany?: (ids: Array<string | number>, update: (prev: M) => M, opts?: MutateOptions) => void;
|
|
203
207
|
/**
|
|
204
208
|
* Переключение кластеризации (если слой её поддерживает).
|
|
205
209
|
*/
|
|
@@ -2,7 +2,7 @@ import Feature from 'ol/Feature';
|
|
|
2
2
|
import type Geometry from 'ol/geom/Geometry';
|
|
3
3
|
import type VectorLayer from 'ol/layer/Vector';
|
|
4
4
|
import type VectorSource from 'ol/source/Vector';
|
|
5
|
-
import type { FeatureDescriptor, MapContext, ModelChange, VectorLayerApi, VectorLayerDescriptor, ViewFitOptions } from '../public/types';
|
|
5
|
+
import type { FeatureDescriptor, MapContext, ModelChange, MutateOptions, VectorLayerApi, VectorLayerDescriptor, ViewFitOptions } from '../public/types';
|
|
6
6
|
import { FeatureRegistry } from './feature-registry';
|
|
7
7
|
export type VectorLayerBaseOptions<M, G extends Geometry, OPTS extends object> = {
|
|
8
8
|
descriptor: VectorLayerDescriptor<M, G, OPTS>;
|
|
@@ -22,10 +22,10 @@ export declare abstract class VectorLayerBase<M, G extends Geometry, OPTS extend
|
|
|
22
22
|
constructor(options: VectorLayerBaseOptions<M, G, OPTS>);
|
|
23
23
|
setModels(models: readonly M[]): void;
|
|
24
24
|
invalidate(): void;
|
|
25
|
-
syncFeatureFromModel(model: M): void;
|
|
25
|
+
protected syncFeatureFromModel(model: M): void;
|
|
26
26
|
getModelByFeature(feature: Feature<G>): M | undefined;
|
|
27
|
-
mutate(id: string | number, update: (prev: M) => M,
|
|
28
|
-
mutateMany(ids: Array<string | number>, update: (prev: M) => M,
|
|
27
|
+
mutate(id: string | number, update: (prev: M) => M, opts?: MutateOptions): void;
|
|
28
|
+
mutateMany(ids: Array<string | number>, update: (prev: M) => M, opts?: MutateOptions): void;
|
|
29
29
|
onModelsChanged(cb: (changes: ModelChange<M>[]) => void): () => void;
|
|
30
30
|
/** Fit view to all features on the layer. No-op if extent is empty. */
|
|
31
31
|
centerOnAllModels(opts?: ViewFitOptions): void;
|