From 524b949c74f3154bf8667b73b1a6e0f53f2f88d7 Mon Sep 17 00:00:00 2001 From: PapaFruta <8912yl04@gmail.com> Date: Thu, 5 Jun 2025 17:19:55 +0200 Subject: [PATCH 1/3] working drag --- VentusFlowWebGUI/.DS_Store | Bin 0 -> 6148 bytes VentusFlowWebGUI/frontend/.DS_Store | Bin 0 -> 6148 bytes VentusFlowWebGUI/frontend/src/.DS_Store | Bin 0 -> 6148 bytes VentusFlowWebGUI/frontend/src/main.js | 158 +- .../node_modules/.vite/deps/_metadata.json | 183 ++- .../{chunk-5CPSJRE2.js => chunk-47JK3GLV.js} | 14 +- ...-5CPSJRE2.js.map => chunk-47JK3GLV.js.map} | 0 .../{chunk-W2FV6P6N.js => chunk-6GRRGW6V.js} | 16 +- ...-W2FV6P6N.js.map => chunk-6GRRGW6V.js.map} | 0 .../{chunk-2NX2FDVC.js => chunk-6OUHCICN.js} | 38 +- ...-2NX2FDVC.js.map => chunk-6OUHCICN.js.map} | 0 .../.vite/deps/chunk-6SP66AVH.js.map | 7 - .../node_modules/.vite/deps/chunk-7RGUNZVN.js | 1216 +++++++++++++++ .../.vite/deps/chunk-7RGUNZVN.js.map | 7 + .../{chunk-GAPTD7YR.js => chunk-ATTNMDTG.js} | 8 +- ...-GAPTD7YR.js.map => chunk-ATTNMDTG.js.map} | 0 .../{chunk-QJJYQF6H.js => chunk-G3HPQ3BH.js} | 4 +- ...-QJJYQF6H.js.map => chunk-G3HPQ3BH.js.map} | 0 .../{chunk-LKGRVZZI.js => chunk-GKDSB34V.js} | 18 +- ...-LKGRVZZI.js.map => chunk-GKDSB34V.js.map} | 0 .../{chunk-X2KP4TK5.js => chunk-GQSVCNL3.js} | 16 +- ...-X2KP4TK5.js.map => chunk-GQSVCNL3.js.map} | 0 .../{chunk-VQAOIZZU.js => chunk-HFPY7EDW.js} | 62 +- ...-VQAOIZZU.js.map => chunk-HFPY7EDW.js.map} | 0 .../{chunk-2R5MNV34.js => chunk-JOMDBGKW.js} | 52 +- ...-2R5MNV34.js.map => chunk-JOMDBGKW.js.map} | 0 .../{chunk-UWCYJJIT.js => chunk-LKZG5HMW.js} | 4 +- ...-UWCYJJIT.js.map => chunk-LKZG5HMW.js.map} | 0 .../{chunk-7MYDC76J.js => chunk-NER2BJ37.js} | 12 +- ...-7MYDC76J.js.map => chunk-NER2BJ37.js.map} | 0 .../.vite/deps/chunk-OOF5364O.js.map | 7 - .../node_modules/.vite/deps/chunk-POVGKIBQ.js | 51 + .../.vite/deps/chunk-POVGKIBQ.js.map | 7 + .../node_modules/.vite/deps/chunk-RMGZ5HGX.js | 64 + .../.vite/deps/chunk-RMGZ5HGX.js.map | 7 + .../{chunk-OOF5364O.js => chunk-VAUZYTLA.js} | 50 +- .../.vite/deps/chunk-VAUZYTLA.js.map | 7 + .../{chunk-6SP66AVH.js => chunk-VWBYIKLE.js} | 121 +- .../.vite/deps/chunk-VWBYIKLE.js.map | 7 + .../node_modules/.vite/deps/ol.js | 1314 +---------------- .../node_modules/.vite/deps/ol.js.map | 8 +- .../node_modules/.vite/deps/ol_Feature.js | 4 +- .../.vite/deps/ol_events_condition.js | 3 +- .../.vite/deps/ol_expr_expression.js | 2 +- .../node_modules/.vite/deps/ol_geom.js | 22 +- .../.vite/deps/ol_geom_LineString.js | 10 +- .../node_modules/.vite/deps/ol_geom_Point.js | 10 +- .../.vite/deps/ol_interaction_Draw.js | 99 +- .../.vite/deps/ol_interaction_Draw.js.map | 2 +- .../.vite/deps/ol_interaction_Pointer__js.js | 15 + .../deps/ol_interaction_Pointer__js.js.map | 7 + .../.vite/deps/ol_interaction_Select.js | 48 +- .../.vite/deps/ol_interaction_Select.js.map | 2 +- .../.vite/deps/ol_interaction_Translate.js | 21 +- .../deps/ol_interaction_Translate.js.map | 2 +- .../.vite/deps/ol_interaction_defaults__js.js | 28 + .../deps/ol_interaction_defaults__js.js.map | 7 + .../node_modules/.vite/deps/ol_layer_Tile.js | 47 +- .../.vite/deps/ol_layer_Tile.js.map | 2 +- .../.vite/deps/ol_layer_Vector.js | 33 +- .../node_modules/.vite/deps/ol_source_OSM.js | 46 +- .../.vite/deps/ol_source_Vector.js | 24 +- .../node_modules/.vite/deps/ol_style.js | 8 +- 63 files changed, 2113 insertions(+), 1787 deletions(-) create mode 100644 VentusFlowWebGUI/.DS_Store create mode 100644 VentusFlowWebGUI/frontend/.DS_Store create mode 100644 VentusFlowWebGUI/frontend/src/.DS_Store rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-5CPSJRE2.js => chunk-47JK3GLV.js} (99%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-5CPSJRE2.js.map => chunk-47JK3GLV.js.map} (100%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-W2FV6P6N.js => chunk-6GRRGW6V.js} (99%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-W2FV6P6N.js.map => chunk-6GRRGW6V.js.map} (100%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-2NX2FDVC.js => chunk-6OUHCICN.js} (99%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-2NX2FDVC.js.map => chunk-6OUHCICN.js.map} (100%) delete mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/chunk-6SP66AVH.js.map create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/chunk-7RGUNZVN.js create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/chunk-7RGUNZVN.js.map rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-GAPTD7YR.js => chunk-ATTNMDTG.js} (99%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-GAPTD7YR.js.map => chunk-ATTNMDTG.js.map} (100%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-QJJYQF6H.js => chunk-G3HPQ3BH.js} (97%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-QJJYQF6H.js.map => chunk-G3HPQ3BH.js.map} (100%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-LKGRVZZI.js => chunk-GKDSB34V.js} (99%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-LKGRVZZI.js.map => chunk-GKDSB34V.js.map} (100%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-X2KP4TK5.js => chunk-GQSVCNL3.js} (99%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-X2KP4TK5.js.map => chunk-GQSVCNL3.js.map} (100%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-VQAOIZZU.js => chunk-HFPY7EDW.js} (99%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-VQAOIZZU.js.map => chunk-HFPY7EDW.js.map} (100%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-2R5MNV34.js => chunk-JOMDBGKW.js} (99%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-2R5MNV34.js.map => chunk-JOMDBGKW.js.map} (100%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-UWCYJJIT.js => chunk-LKZG5HMW.js} (98%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-UWCYJJIT.js.map => chunk-LKZG5HMW.js.map} (100%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-7MYDC76J.js => chunk-NER2BJ37.js} (99%) rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-7MYDC76J.js.map => chunk-NER2BJ37.js.map} (100%) delete mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/chunk-OOF5364O.js.map create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/chunk-POVGKIBQ.js create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/chunk-POVGKIBQ.js.map create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/chunk-RMGZ5HGX.js create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/chunk-RMGZ5HGX.js.map rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-OOF5364O.js => chunk-VAUZYTLA.js} (79%) create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/chunk-VAUZYTLA.js.map rename VentusFlowWebGUI/node_modules/.vite/deps/{chunk-6SP66AVH.js => chunk-VWBYIKLE.js} (98%) create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/chunk-VWBYIKLE.js.map create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Pointer__js.js create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Pointer__js.js.map create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_defaults__js.js create mode 100644 VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_defaults__js.js.map diff --git a/VentusFlowWebGUI/.DS_Store b/VentusFlowWebGUI/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..264220a1449e7874f0eaf980920eeb2db0ae43a9 GIT binary patch literal 6148 zcmeHK&2G~`5S~o~acB`iYNcL~EO8AX1WJW^aYH$9#Rv|7f?d18t>cYir#VECe1>=6 z6}a*weV3l#o82wSPb+RHLOaszw?8wp_P6U zI#8$>F=Z6JPUUf!u2|a+%YbEI-5B6+w?-iabWCS7_x;KcBb*ivp{-v^P(zxah!V=F z(BJtVyB|w-4xP}5Br-yAU0m_tZ}#CNABL%l|1%t>NnW(u7oxIJy>+|h)SOM{lmA6d z{30mEc{dn+;MQ9y)9|Vugzu7g(rawLlvxoZSv*n>Nfg865ERg={|e~3 zS>fT_A7!b``WR!sEifd(X-qvDsM?rPwDLuM1;?6Shx;@%s}@in_K)Bt)hf2=6zc=# zmm*v)Mc7)3aD!ikpLBladvuN+z^mHAe7wRZX!p??@XU*|s{QkQZvP;dm9=2N>{@4Y zEuO|cgk``ouucqcesH0Tp21S1N*yTF6#!U8w-VI(r-6N3gPy@sBSs)Xy8^YVFjowr z-O=wFJI`RLQM;2cmk(iP7UqT`)a;1wDsvK^Mq642ECY)SZ0Kf#&;M69-~Sh#Y|AoW z8ThXl5Y;39sEb!JXY0z#@mcFaKSNpAuGFYpP?+ObRro00g(|_A%N3w!u+)eii2V^z MG}yv2@J|`|4f1iY&j0`b literal 0 HcmV?d00001 diff --git a/VentusFlowWebGUI/frontend/.DS_Store b/VentusFlowWebGUI/frontend/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c0f7d4a63f53b6552c5384a13908352bca31cccf GIT binary patch literal 6148 zcmeHKL2uJA6n<_?moQE00i<0fS>jriQWz8Bl6B*->w@3_s3c3pBGPzDQaY)sl=Jpu zxbjQ*JMcZ*MYJ8aX+o1<_59f{?{n(gX;EW9)#SO;S**C0VBWgqjNAOl>N2l z%=x~?@u@(51l9!DLz%2H#NHaCiP02vww85$b5=YnFYFWdBfiMevg-GLibk{bpuOd7 zdE4Hn@LbKpDypXCFe*N9>#b5*ysSs@yL3Dobsin5yo%C%Txdd?jFIy3eVQj~HdNC* zDK$4V7d+qdN1fgIeE(p-D+dRIMOV&W4fIx%=3H(d6 z?O0p_&&&GeJ6u37E@cTi+83T*8 zLH+7Lp^pH-7Q)(4=TAW9NQ;5R+90mLgrNcrRoEkjFm%MF%?m8n1`VBrJ$wjzXJJn$ zLf;+zOPx+4Fz8CBfKy;qfu?D8c>jO%@ALmE$+esUPJw%+fM^|u$3slX?yVb>u+nEMdWGPuGiaHk6V2HClM1^@s6 literal 0 HcmV?d00001 diff --git a/VentusFlowWebGUI/frontend/src/.DS_Store b/VentusFlowWebGUI/frontend/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7ccf8fa1be5cb767b652d093967b2f0b07c35352 GIT binary patch literal 6148 zcmeHKyH3ME5S)bwC89}5gLGdIi9a|+p-7z{fM7aDkq8v&+~srfiDdRc6k}*9(5|#Q zcY8ZNdkXIz0GWR@55N?_n68L}hN0=Y`oOLtqbT-_4PG(B2F z%-_DO+wGdG`f5k|?9+@R;08OqV~>{gyJdS>EBD`OjgTP~NCi@XR3H^d1wsM#Y_;*N zW5!e<6-Win3h4i#&=qT7=V-qU20gy(`bbfYW4lWbOU!Fv=g1YBIF;yBi7SRUo%s@V zHL!DZI>dJ7b7E(S8;aQO%oi(%RL6{|Kq}Bz;M%8C?f;MTU+({XQqEF=RN!AJAfv@< zG3O^mZykJ`_S!;!qJJ4{t(>8E2;f9p@!dsT(J||4VCQIb=8aCwgMjLimJ0lZ0w*Qn BCjbBd literal 0 HcmV?d00001 diff --git a/VentusFlowWebGUI/frontend/src/main.js b/VentusFlowWebGUI/frontend/src/main.js index d61ab83..3b37401 100644 --- a/VentusFlowWebGUI/frontend/src/main.js +++ b/VentusFlowWebGUI/frontend/src/main.js @@ -27,6 +27,8 @@ import './styles/style.css'; import { Style, Icon, Stroke, RegularShape, Fill, Text } from 'ol/style'; // Point: Zum Erzeugen von Punkt-Geometrien, z. B. für den Pfeilkopf. import Point from 'ol/geom/Point'; +import PointerInteraction from 'ol/interaction/Pointer.js'; +import {defaults as defaultInteractions} from 'ol/interaction/defaults.js'; // Definiert einen Icon-Stil für Windturbinen. Dieser Stil kann dann // auf Punktfeatures angewendet werden, um statt eines einfachen Punktes // ein Windturbinen-Symbol anzuzeigen. @@ -39,6 +41,7 @@ const turbineIconStyle = new Style({ }), }); + // ====================================================================== // OpenLayers Feature- und POLYGON Geometrie-Klassen // @@ -142,11 +145,134 @@ let turbineSource = null; // Vektorquelle für Turbinen (Punkte) let turbineLayer = null; // Vektorlayer für Turbinen let simAreaSource = null; // Vektorquelle für Simulationsgebiet (Rechtecke/Quadrate) let simAreaLayer = null; // Vektorlayer für Simulationsgebiet +let pfeilSource = null; // ====================================================================== // Karten- und Zeichenebenen-Erstellung // ====================================================================== +// Drag Interaction + +class Drag extends PointerInteraction { + constructor() { + super({ + handleDownEvent: handleDownEvent, + handleDragEvent: handleDragEvent, + handleMoveEvent: handleMoveEvent, + handleUpEvent: handleUpEvent, + }); + + /** + * @type {import('ol/coordinate.js').Coordinate} + * @private + */ + this.coordinate_ = null; + + /** + * @type {string|undefined} + * @private + */ + this.cursor_ = 'pointer'; + + /** + * @type {Feature} + * @private + */ + this.feature_ = null; + + /** + * @type {string|undefined} + * @private + */ + this.previousCursor_ = undefined; + } +} + +/** + * @param {import('ol/MapBrowserEvent.js').default} evt Map browser event. + * @return {boolean} `true` to start the drag sequence. + */ +function handleDownEvent(evt) { + + const map = evt.map; + + + const feature = map.forEachFeatureAtPixel(evt.pixel, function (feature) { + return feature; + }); + + if (feature) { + this.coordinate_ = evt.coordinate; + this.feature_ = feature; + } + + return !!feature; +} + +/** + * @param {import('ol/MapBrowserEvent.js').default} evt Map browser event. + */ +function handleDragEvent(evt) { + const deltaX = evt.coordinate[0] - this.coordinate_[0]; + const deltaY = evt.coordinate[1] - this.coordinate_[1]; + + + const geometry = this.feature_.getGeometry(); + geometry.translate(deltaX, deltaY); + const currType = this.feature_.get("type"); + + const id = this.feature_.getId() + + const relatedFeature = currType === "circle" + ? wakeSource.getFeatureById(id) + : currType === "wake" + ? sphereRadiusSource.getFeatureById(id): + currType !== "turbine" ? pfeilSource.getFeatures()[0]: + null; + + if (relatedFeature){ + const relatedGeometry = relatedFeature.getGeometry(); + relatedGeometry.translate(deltaX, deltaY); + } + + this.coordinate_[0] = evt.coordinate[0]; + this.coordinate_[1] = evt.coordinate[1]; + +} + +/** + * @param {import('ol/MapBrowserEvent.js').default} evt Event. + */ +function handleMoveEvent(evt) { + if (this.cursor_) { + const map = evt.map; + const feature = map.forEachFeatureAtPixel(evt.pixel, function (feature) { + return feature; + }); + const element = evt.map.getTargetElement(); + + if (feature) { + const id = feature.getId(); + if (element.style.cursor != this.cursor_) { + this.previousCursor_ = element.style.cursor; + element.style.cursor = this.cursor_; + } + } else if (this.previousCursor_ !== undefined) { + element.style.cursor = this.previousCursor_; + this.previousCursor_ = undefined; + } + } +} + +/** + * @return {boolean} `false` to stop the drag sequence. + */ +function handleUpEvent() { + this.coordinate_ = null; + this.feature_ = null; + return false; +} + /** * Erstellt die Basiskarte */ @@ -155,6 +281,7 @@ function erstelleKarte() { source: new OSM(), }); const karte = new Map({ + interactions: defaultInteractions().extend([new Drag()]), target: 'map', layers: [rasterLayer], view: new View({ @@ -166,6 +293,12 @@ function erstelleKarte() { } const map = erstelleKarte(); + +const uid = function(){ + return Date.now().toString(36) + Math.random().toString(36).substr(2); +} + + /** * Erstellt die Zeichenebenen für die gezeichneten Features */ @@ -175,7 +308,7 @@ function erstelleZeichenEbenen(map) { turbineLayer = new VectorLayer({ source: turbineSource, style: turbineIconStyle, - zIndex: 10 // Standard z-index + zIndex: 20 // Standard z-index }); // Layer für Simulationsgebiet (Rechtecke/Quadrate) @@ -234,7 +367,7 @@ const wakeLayer = new VectorLayer({ }) ]; }, - zIndex: 5 // Lower than main layers + zIndex: 20 // Lower than main layers }); map.addLayer(wakeLayer); @@ -591,6 +724,9 @@ function hinzufuegenZeichenInteraktion(formTyp) { event.feature.setProperties(turbineParams); // Für Punkte: Füge sie hinzu, ohne currentShape zu überschreiben. event.feature.setStyle(null); // Damit der Layer-Stil greift + // For each wind turbine, it is given an ID to match their according wake region + event.feature.setId(uid()); + event.feature.set("type","turbine"); // Sicherstellen, dass der Punkt im Source ist, bevor wir die Layer aktualisieren // Kleine Verzögerung, um sicherzustellen, dass wake und sphere aktualisiert werden @@ -962,7 +1098,7 @@ function aktualisierePfeil() { const laenge = dimensionen.depth / 4; const tiefe = dimensionen.depth; const pfeilFeature = erstellePfeilFeature(squareAngleRadian * 180 / Math.PI, center, laenge, tiefe); - const pfeilSource = new VectorSource({ + pfeilSource = new VectorSource({ features: [pfeilFeature], }); if (arrowLayer) { @@ -1028,6 +1164,7 @@ function updateWakeLayer() { pointFeatures.forEach(pointFeature => { const coord = pointFeature.getGeometry().getCoordinates(); + const id = pointFeature.getId(); // Get the rotorRadius from the feature’s properties const rotorRadius = pointFeature.get("rotorRadius"); // Create the wake rectangle using the turbine’s rotorRadius @@ -1036,6 +1173,11 @@ function updateWakeLayer() { const wakeFeature = new Feature({ geometry: wakeRect }); + + if(!wakeFeature.getId()){ + wakeFeature.setId(id); + wakeFeature.set("type","wake"); + } wakeSource.addFeature(wakeFeature); }); } @@ -1091,8 +1233,16 @@ function updateSphereRadiusLayer() { const circleFeature = new Feature({ geometry: circlePolygon }); - + + const id = pointFeature.getId(); + if(!circleFeature.getId()){ + circleFeature.setId(id); + circleFeature.set("type","circle"); + } sphereRadiusSource.addFeature(circleFeature); + const wake = wakeSource.getFeatureById(id); + wakeToTurbine.set(wake,circleFeature); + turbineToWake.set(pointFeature,wake); }); console.log(`SphereRadiusLayer aktualisiert: ${pointFeatures.length} Kreise mit Radius ${sphereRadiusValue}m gezeichnet.`); diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/_metadata.json b/VentusFlowWebGUI/node_modules/.vite/deps/_metadata.json index 184ec77..f111187 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/_metadata.json +++ b/VentusFlowWebGUI/node_modules/.vite/deps/_metadata.json @@ -1,139 +1,163 @@ { - "hash": "0ecf5d6b", - "configHash": "32cf209f", + "hash": "696c0acc", + "configHash": "3a8f0698", "lockfileHash": "73a0efcf", - "browserHash": "d873bd8b", + "browserHash": "469b48e0", "optimized": { "ol": { "src": "../../ol/index.js", "file": "ol.js", - "fileHash": "c507ccab", + "fileHash": "6446d797", "needsInterop": false }, "ol/Collection": { "src": "../../ol/Collection.js", "file": "ol_Collection.js", - "fileHash": "82e7ae10", + "fileHash": "60c57bd0", "needsInterop": false }, "ol/coordinate": { "src": "../../ol/coordinate.js", "file": "ol_coordinate.js", - "fileHash": "a42d0cd4", + "fileHash": "01f34ad7", "needsInterop": false }, "ol/events/condition": { "src": "../../ol/events/condition.js", "file": "ol_events_condition.js", - "fileHash": "dfdbcb7a", + "fileHash": "cfdfee9c", "needsInterop": false }, "ol/expr/expression": { "src": "../../ol/expr/expression.js", "file": "ol_expr_expression.js", - "fileHash": "f1ac5b2f", + "fileHash": "20462b31", "needsInterop": false }, "ol/Feature": { "src": "../../ol/Feature.js", "file": "ol_Feature.js", - "fileHash": "1b98fb79", + "fileHash": "6a024c7b", "needsInterop": false }, "ol/geom": { "src": "../../ol/geom.js", "file": "ol_geom.js", - "fileHash": "f925d027", + "fileHash": "7e0206a3", "needsInterop": false }, "ol/geom/LineString": { "src": "../../ol/geom/LineString.js", "file": "ol_geom_LineString.js", - "fileHash": "58612f02", + "fileHash": "787ed35b", "needsInterop": false }, "ol/geom/Point": { "src": "../../ol/geom/Point.js", "file": "ol_geom_Point.js", - "fileHash": "9938743f", + "fileHash": "3f8fecb0", "needsInterop": false }, "ol/interaction/Draw": { "src": "../../ol/interaction/Draw.js", "file": "ol_interaction_Draw.js", - "fileHash": "5ba764aa", + "fileHash": "9d3ffd77", "needsInterop": false }, "ol/interaction/Select": { "src": "../../ol/interaction/Select.js", "file": "ol_interaction_Select.js", - "fileHash": "1cfda399", + "fileHash": "227d9dec", "needsInterop": false }, "ol/interaction/Translate": { "src": "../../ol/interaction/Translate.js", "file": "ol_interaction_Translate.js", - "fileHash": "2709bb7b", + "fileHash": "f567763c", "needsInterop": false }, "ol/layer/Tile": { "src": "../../ol/layer/Tile.js", "file": "ol_layer_Tile.js", - "fileHash": "4888ece5", + "fileHash": "861cdd7f", "needsInterop": false }, "ol/layer/Vector": { "src": "../../ol/layer/Vector.js", "file": "ol_layer_Vector.js", - "fileHash": "ef912ce4", + "fileHash": "aaf55907", "needsInterop": false }, "ol/source/OSM": { "src": "../../ol/source/OSM.js", "file": "ol_source_OSM.js", - "fileHash": "49bc7e33", + "fileHash": "487c5c6b", "needsInterop": false }, "ol/source/Vector": { "src": "../../ol/source/Vector.js", "file": "ol_source_Vector.js", - "fileHash": "9668dcb7", + "fileHash": "c5641e6a", "needsInterop": false }, "ol/style": { "src": "../../ol/style.js", "file": "ol_style.js", - "fileHash": "d090b4cc", + "fileHash": "2ab5281d", + "needsInterop": false + }, + "ol/interaction/Pointer.js": { + "src": "../../ol/interaction/Pointer.js", + "file": "ol_interaction_Pointer__js.js", + "fileHash": "a64ea4c1", + "needsInterop": false + }, + "ol/interaction/defaults.js": { + "src": "../../ol/interaction/defaults.js", + "file": "ol_interaction_defaults__js.js", + "fileHash": "26d465c5", "needsInterop": false } }, "chunks": { - "chunk-X2KP4TK5": { - "file": "chunk-X2KP4TK5.js" - }, - "chunk-V7I37XKR": { - "file": "chunk-V7I37XKR.js" + "chunk-GQSVCNL3": { + "file": "chunk-GQSVCNL3.js" }, "chunk-LKL2NEMT": { "file": "chunk-LKL2NEMT.js" }, - "chunk-UWCYJJIT": { - "file": "chunk-UWCYJJIT.js" + "chunk-JOMDBGKW": { + "file": "chunk-JOMDBGKW.js" }, - "chunk-VQAOIZZU": { - "file": "chunk-VQAOIZZU.js" + "chunk-6OUHCICN": { + "file": "chunk-6OUHCICN.js" }, - "chunk-LKGRVZZI": { - "file": "chunk-LKGRVZZI.js" + "chunk-NER2BJ37": { + "file": "chunk-NER2BJ37.js" }, - "chunk-6SP66AVH": { - "file": "chunk-6SP66AVH.js" + "chunk-ATTNMDTG": { + "file": "chunk-ATTNMDTG.js" }, - "chunk-S7HK3S7W": { - "file": "chunk-S7HK3S7W.js" + "chunk-HFPY7EDW": { + "file": "chunk-HFPY7EDW.js" }, - "chunk-33EAEVLP": { - "file": "chunk-33EAEVLP.js" + "chunk-GKDSB34V": { + "file": "chunk-GKDSB34V.js" + }, + "chunk-RW3V7S4F": { + "file": "chunk-RW3V7S4F.js" + }, + "chunk-JFXZSSOM": { + "file": "chunk-JFXZSSOM.js" + }, + "chunk-VWBYIKLE": { + "file": "chunk-VWBYIKLE.js" + }, + "chunk-DYKFAHI6": { + "file": "chunk-DYKFAHI6.js" + }, + "chunk-V7I37XKR": { + "file": "chunk-V7I37XKR.js" }, "chunk-FM44FOIC": { "file": "chunk-FM44FOIC.js" @@ -141,8 +165,23 @@ "chunk-WEQYAO4O": { "file": "chunk-WEQYAO4O.js" }, - "chunk-PPP4FLHO": { - "file": "chunk-PPP4FLHO.js" + "chunk-7RGUNZVN": { + "file": "chunk-7RGUNZVN.js" + }, + "chunk-RMGZ5HGX": { + "file": "chunk-RMGZ5HGX.js" + }, + "chunk-47JK3GLV": { + "file": "chunk-47JK3GLV.js" + }, + "chunk-TRW2RYAI": { + "file": "chunk-TRW2RYAI.js" + }, + "chunk-QIVUQU5K": { + "file": "chunk-QIVUQU5K.js" + }, + "chunk-LKZG5HMW": { + "file": "chunk-LKZG5HMW.js" }, "chunk-F2HSAX6I": { "file": "chunk-F2HSAX6I.js" @@ -150,50 +189,32 @@ "chunk-LMC3RO5P": { "file": "chunk-LMC3RO5P.js" }, - "chunk-2R5MNV34": { - "file": "chunk-2R5MNV34.js" + "chunk-4E4H2AGX": { + "file": "chunk-4E4H2AGX.js" }, - "chunk-DYKFAHI6": { - "file": "chunk-DYKFAHI6.js" + "chunk-S7HK3S7W": { + "file": "chunk-S7HK3S7W.js" }, - "chunk-RW3V7S4F": { - "file": "chunk-RW3V7S4F.js" + "chunk-33EAEVLP": { + "file": "chunk-33EAEVLP.js" }, - "chunk-GAPTD7YR": { - "file": "chunk-GAPTD7YR.js" + "chunk-PPP4FLHO": { + "file": "chunk-PPP4FLHO.js" }, - "chunk-OOF5364O": { - "file": "chunk-OOF5364O.js" + "chunk-VAUZYTLA": { + "file": "chunk-VAUZYTLA.js" }, "chunk-ZPDML4Q3": { "file": "chunk-ZPDML4Q3.js" }, - "chunk-2NX2FDVC": { - "file": "chunk-2NX2FDVC.js" - }, - "chunk-5CPSJRE2": { - "file": "chunk-5CPSJRE2.js" - }, - "chunk-4E4H2AGX": { - "file": "chunk-4E4H2AGX.js" - }, - "chunk-7MYDC76J": { - "file": "chunk-7MYDC76J.js" - }, - "chunk-JFXZSSOM": { - "file": "chunk-JFXZSSOM.js" - }, - "chunk-TRW2RYAI": { - "file": "chunk-TRW2RYAI.js" - }, - "chunk-QIVUQU5K": { - "file": "chunk-QIVUQU5K.js" + "chunk-POVGKIBQ": { + "file": "chunk-POVGKIBQ.js" }, - "chunk-QJJYQF6H": { - "file": "chunk-QJJYQF6H.js" + "chunk-G3HPQ3BH": { + "file": "chunk-G3HPQ3BH.js" }, - "chunk-W2FV6P6N": { - "file": "chunk-W2FV6P6N.js" + "chunk-6GRRGW6V": { + "file": "chunk-6GRRGW6V.js" }, "chunk-MPRNTLUM": { "file": "chunk-MPRNTLUM.js" @@ -201,24 +222,24 @@ "chunk-5ACH5F45": { "file": "chunk-5ACH5F45.js" }, - "chunk-QFCIXVZ3": { - "file": "chunk-QFCIXVZ3.js" + "chunk-WXT7AISE": { + "file": "chunk-WXT7AISE.js" }, "chunk-V2VQBN44": { "file": "chunk-V2VQBN44.js" }, + "chunk-V7KTD4MH": { + "file": "chunk-V7KTD4MH.js" + }, + "chunk-QFCIXVZ3": { + "file": "chunk-QFCIXVZ3.js" + }, "chunk-33VDV4DG": { "file": "chunk-33VDV4DG.js" }, "chunk-FQY6EMA7": { "file": "chunk-FQY6EMA7.js" }, - "chunk-WXT7AISE": { - "file": "chunk-WXT7AISE.js" - }, - "chunk-V7KTD4MH": { - "file": "chunk-V7KTD4MH.js" - }, "chunk-V6TY7KAL": { "file": "chunk-V6TY7KAL.js" } diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-5CPSJRE2.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-47JK3GLV.js similarity index 99% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-5CPSJRE2.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-47JK3GLV.js index 4b90081..0af245c 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-5CPSJRE2.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-47JK3GLV.js @@ -14,19 +14,15 @@ import { } from "./chunk-QIVUQU5K.js"; import { Point_default -} from "./chunk-QJJYQF6H.js"; +} from "./chunk-G3HPQ3BH.js"; import { SimpleGeometry_default, deflateCoordinates, deflateCoordinatesArray -} from "./chunk-W2FV6P6N.js"; +} from "./chunk-6GRRGW6V.js"; import { offset } from "./chunk-5ACH5F45.js"; -import { - ascending, - extend -} from "./chunk-FQY6EMA7.js"; import { closestSquaredDistanceXY, getCenter, @@ -35,6 +31,10 @@ import { import { modulo } from "./chunk-V7KTD4MH.js"; +import { + ascending, + extend +} from "./chunk-FQY6EMA7.js"; // node_modules/ol/geom/flat/area.js function linearRing(flatCoordinates, offset2, end, stride) { @@ -831,4 +831,4 @@ export { fromCircle, makeRegular }; -//# sourceMappingURL=chunk-5CPSJRE2.js.map +//# sourceMappingURL=chunk-47JK3GLV.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-5CPSJRE2.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-47JK3GLV.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-5CPSJRE2.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-47JK3GLV.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-W2FV6P6N.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6GRRGW6V.js similarity index 99% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-W2FV6P6N.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-6GRRGW6V.js index 91f45a1..a5c7b82 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-W2FV6P6N.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6GRRGW6V.js @@ -6,13 +6,6 @@ import { get, getTransform } from "./chunk-5ACH5F45.js"; -import { - Object_default, - abstract -} from "./chunk-V2VQBN44.js"; -import { - memoizeOne -} from "./chunk-33VDV4DG.js"; import { createEmpty, createOrUpdateEmpty, @@ -21,6 +14,13 @@ import { getHeight, returnOrUpdate } from "./chunk-WXT7AISE.js"; +import { + Object_default, + abstract +} from "./chunk-V2VQBN44.js"; +import { + memoizeOne +} from "./chunk-33VDV4DG.js"; // node_modules/ol/geom/flat/transform.js function transform2D(flatCoordinates, offset, end, stride, transform, dest, destinationStride) { @@ -699,4 +699,4 @@ export { deflateCoordinatesArray, deflateMultiCoordinatesArray }; -//# sourceMappingURL=chunk-W2FV6P6N.js.map +//# sourceMappingURL=chunk-6GRRGW6V.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-W2FV6P6N.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6GRRGW6V.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-W2FV6P6N.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-6GRRGW6V.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-2NX2FDVC.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6OUHCICN.js similarity index 99% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-2NX2FDVC.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-6OUHCICN.js index 13f624b..7ca73d7 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-2NX2FDVC.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6OUHCICN.js @@ -1,15 +1,15 @@ +import { + LineString_default, + interpolatePoint, + lineStringsCoordinateAtM +} from "./chunk-NER2BJ37.js"; import { Polygon_default, getInteriorPointsOfMultiArray, linearRingss, linearRingssAreOriented, orientLinearRingsArray -} from "./chunk-5CPSJRE2.js"; -import { - LineString_default, - interpolatePoint, - lineStringsCoordinateAtM -} from "./chunk-7MYDC76J.js"; +} from "./chunk-47JK3GLV.js"; import { arrayMaxSquaredDelta, assignClosestArrayPoint, @@ -28,7 +28,7 @@ import { } from "./chunk-QIVUQU5K.js"; import { Point_default -} from "./chunk-QJJYQF6H.js"; +} from "./chunk-G3HPQ3BH.js"; import { Geometry_default, SimpleGeometry_default, @@ -37,17 +37,7 @@ import { deflateCoordinatesArray, deflateMultiCoordinatesArray, rotate -} from "./chunk-W2FV6P6N.js"; -import { - listen, - unlistenByKey -} from "./chunk-V2VQBN44.js"; -import { - EventType_default -} from "./chunk-33VDV4DG.js"; -import { - extend -} from "./chunk-FQY6EMA7.js"; +} from "./chunk-6GRRGW6V.js"; import { closestSquaredDistanceXY, containsXY, @@ -60,9 +50,19 @@ import { getCenter, intersects } from "./chunk-WXT7AISE.js"; +import { + listen, + unlistenByKey +} from "./chunk-V2VQBN44.js"; import { squaredDistance } from "./chunk-V7KTD4MH.js"; +import { + EventType_default +} from "./chunk-33VDV4DG.js"; +import { + extend +} from "./chunk-FQY6EMA7.js"; // node_modules/ol/geom/Circle.js var Circle = class _Circle extends SimpleGeometry_default { @@ -1476,4 +1476,4 @@ export { MultiPoint_default, MultiPolygon_default }; -//# sourceMappingURL=chunk-2NX2FDVC.js.map +//# sourceMappingURL=chunk-6OUHCICN.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-2NX2FDVC.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6OUHCICN.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-2NX2FDVC.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-6OUHCICN.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6SP66AVH.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6SP66AVH.js.map deleted file mode 100644 index be6c285..0000000 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6SP66AVH.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../ol/ViewHint.js", "../../ol/ViewProperty.js", "../../ol/centerconstraint.js", "../../ol/resolutionconstraint.js", "../../ol/rotationconstraint.js", "../../ol/View.js", "../../ol/render/EventType.js", "../../ol/render/Event.js", "../../ol/render/canvas/ZIndexContext.js", "../../ol/renderer/Layer.js", "../../ol/renderer/canvas/Layer.js", "../../ol/layer/Property.js", "../../ol/layer/Base.js", "../../ol/layer/Layer.js"], - "sourcesContent": ["/**\n * @module ol/ViewHint\n */\n\n/**\n * @enum {number}\n */\nexport default {\n ANIMATING: 0,\n INTERACTING: 1,\n};\n", "/**\n * @module ol/ViewProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n CENTER: 'center',\n RESOLUTION: 'resolution',\n ROTATION: 'rotation',\n};\n", "/**\n * @module ol/centerconstraint\n */\nimport {clamp} from './math.js';\n\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n return (\n /**\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n * @param {number|undefined} resolution Resolution.\n * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @param {Array} [centerShift] Shift between map center and viewport center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\n function (center, resolution, size, isMoving, centerShift) {\n if (!center) {\n return undefined;\n }\n if (!resolution && !onlyCenter) {\n return center;\n }\n const viewWidth = onlyCenter ? 0 : size[0] * resolution;\n const viewHeight = onlyCenter ? 0 : size[1] * resolution;\n const shiftX = centerShift ? centerShift[0] : 0;\n const shiftY = centerShift ? centerShift[1] : 0;\n let minX = extent[0] + viewWidth / 2 + shiftX;\n let maxX = extent[2] - viewWidth / 2 + shiftX;\n let minY = extent[1] + viewHeight / 2 + shiftY;\n let maxY = extent[3] - viewHeight / 2 + shiftY;\n\n // note: when zooming out of bounds, min and max values for x and y may\n // end up inverted (min > max); this has to be accounted for\n if (minX > maxX) {\n minX = (maxX + minX) / 2;\n maxX = minX;\n }\n if (minY > maxY) {\n minY = (maxY + minY) / 2;\n maxY = minY;\n }\n\n let x = clamp(center[0], minX, maxX);\n let y = clamp(center[1], minY, maxY);\n\n // during an interaction, allow some overscroll\n if (isMoving && smooth && resolution) {\n const ratio = 30 * resolution;\n x +=\n -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n y +=\n -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n }\n\n return [x, y];\n }\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} [center] Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n return center;\n}\n", "/**\n * @module ol/resolutionconstraint\n */\nimport {linearFindNearest} from './array.js';\nimport {getHeight, getWidth} from './extent.js';\nimport {clamp} from './math.js';\n\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(\n resolution,\n maxExtent,\n viewportSize,\n showFullExtent,\n) {\n const xResolution = getWidth(maxExtent) / viewportSize[0];\n const yResolution = getHeight(maxExtent) / viewportSize[1];\n\n if (showFullExtent) {\n return Math.min(resolution, Math.max(xResolution, yResolution));\n }\n return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n * - at 1, ln(x) is 0\n * - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n let result = Math.min(resolution, maxResolution);\n const ratio = 50;\n\n result *=\n Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n 1;\n if (minResolution) {\n result = Math.max(result, minResolution);\n result /=\n Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n ratio +\n 1;\n }\n return clamp(result, minResolution / 2, maxResolution * 2);\n}\n\n/**\n * @param {Array} resolutions Resolutions.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(\n resolutions,\n smooth,\n maxExtent,\n showFullExtent,\n) {\n smooth = smooth !== undefined ? smooth : true;\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const maxResolution = resolutions[0];\n const minResolution = resolutions[resolutions.length - 1];\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent,\n )\n : maxResolution;\n\n // during interacting or animating, allow intermediary values\n if (isMoving) {\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution,\n );\n }\n\n const capped = Math.min(cappedMaxRes, resolution);\n const z = Math.floor(linearFindNearest(resolutions, capped, direction));\n if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n return resolutions[z + 1];\n }\n return resolutions[z];\n }\n return undefined;\n }\n );\n}\n\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number} [minResolution] Minimum resolution.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(\n power,\n maxResolution,\n minResolution,\n smooth,\n maxExtent,\n showFullExtent,\n) {\n smooth = smooth !== undefined ? smooth : true;\n minResolution = minResolution !== undefined ? minResolution : 0;\n\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent,\n )\n : maxResolution;\n\n // during interacting or animating, allow intermediary values\n if (isMoving) {\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution,\n );\n }\n\n const tolerance = 1e-9;\n const minZoomLevel = Math.ceil(\n Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance,\n );\n const offset = -direction * (0.5 - tolerance) + 0.5;\n const capped = Math.min(cappedMaxRes, resolution);\n const cappedZoomLevel = Math.floor(\n Math.log(maxResolution / capped) / Math.log(power) + offset,\n );\n const zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n const newResolution = maxResolution / Math.pow(power, zoomLevel);\n return clamp(newResolution, minResolution, cappedMaxRes);\n }\n return undefined;\n }\n );\n}\n\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n maxExtent,\n showFullExtent,\n) {\n smooth = smooth !== undefined ? smooth : true;\n\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent,\n )\n : maxResolution;\n\n if (!smooth || !isMoving) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution,\n );\n }\n return undefined;\n }\n );\n}\n", "/**\n * @module ol/rotationconstraint\n */\nimport {toRadians} from './math.js';\n\n/**\n * @typedef {function((number|undefined), boolean=): (number|undefined)} Type\n */\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function disable(rotation) {\n if (rotation !== undefined) {\n return 0;\n }\n return undefined;\n}\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function none(rotation) {\n if (rotation !== undefined) {\n return rotation;\n }\n return undefined;\n}\n\n/**\n * @param {number} n N.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToN(n) {\n const theta = (2 * Math.PI) / n;\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, isMoving) {\n if (isMoving) {\n return rotation;\n }\n\n if (rotation !== undefined) {\n rotation = Math.floor(rotation / theta + 0.5) * theta;\n return rotation;\n }\n return undefined;\n }\n );\n}\n\n/**\n * @param {number} [tolerance] Tolerance.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToZero(tolerance) {\n const t = tolerance === undefined ? toRadians(5) : tolerance;\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, isMoving) {\n if (isMoving || rotation === undefined) {\n return rotation;\n }\n\n if (Math.abs(rotation) <= t) {\n return 0;\n }\n return rotation;\n }\n );\n}\n", "/**\n * @module ol/View\n */\nimport BaseObject from './Object.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport {linearFindNearest} from './array.js';\nimport {assert} from './asserts.js';\nimport {createExtent, none as centerNone} from './centerconstraint.js';\nimport {\n add as addCoordinate,\n equals,\n equals as coordinatesEqual,\n rotate as rotateCoordinate,\n} from './coordinate.js';\nimport {easeOut, inAndOut} from './easing.js';\nimport {\n getCenter,\n getForViewAndSize,\n getHeight,\n getWidth,\n isEmpty,\n} from './extent.js';\nimport {VOID} from './functions.js';\nimport {fromExtent as polygonFromExtent} from './geom/Polygon.js';\nimport {clamp, modulo} from './math.js';\nimport {\n METERS_PER_UNIT,\n createProjection,\n disableCoordinateWarning,\n fromUserCoordinate,\n fromUserExtent,\n getUserProjection,\n toUserCoordinate,\n toUserExtent,\n} from './proj.js';\nimport {\n createMinMaxResolution,\n createSnapToPower,\n createSnapToResolutions,\n} from './resolutionconstraint.js';\nimport {\n createSnapToN,\n createSnapToZero,\n disable,\n none as rotationNone,\n} from './rotationconstraint.js';\nimport {DEFAULT_TILE_SIZE} from './tilegrid/common.js';\n\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter] Source center.\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter] Target center.\n * @property {number} [sourceResolution] Source resolution.\n * @property {number} [targetResolution] Target resolution.\n * @property {number} [sourceRotation] Source rotation.\n * @property {number} [targetRotation] Target rotation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Anchor.\n * @property {number} start Start.\n * @property {number} duration Duration.\n * @property {boolean} complete Complete.\n * @property {function(number):number} easing Easing.\n * @property {function(boolean):void} callback Callback.\n */\n\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center Center.\n * @property {import(\"./resolutionconstraint.js\").Type} resolution Resolution.\n * @property {import(\"./rotationconstraint.js\").Type} rotation Rotation.\n */\n\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to\n * fit the extent into. Defaults to the size of the map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired box size\n * (e.g. `map.getSize()`).\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint. It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`. If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`. Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`. Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge. If `true` the map\n * may show multiple worlds at low zoom levels. Only used if the `projection` is\n * global. Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array} [resolutions] Resolutions that determine the\n * zoom levels if specified. The index in the array corresponds to the zoom level,\n * therefore the resolution values have to be in descending order. It also constrains\n * the resolution by the minimum and maximum value. If set the `maxResolution`,\n * `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation. If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center Center (in view projection coordinates).\n * @property {import(\"./proj/Projection.js\").default} projection Projection.\n * @property {number} resolution Resolution.\n * @property {import(\"./coordinate.js\").Coordinate} [nextCenter] The next center during an animation series.\n * @property {number} [nextResolution] The next resolution during an animation series.\n * @property {number} [nextRotation] The next rotation during an animation series.\n * @property {number} rotation Rotation.\n * @property {number} zoom Zoom.\n */\n\n/**\n * Like {@link import(\"./Map.js\").FrameState}, but just `viewState` and `extent`.\n * @typedef {Object} ViewStateLayerStateExtent\n * @property {State} viewState View state.\n * @property {import(\"./extent.js\").Extent} extent Extent (in user projection coordinates).\n * @property {Array} [layerStatesArray] Layer states.\n */\n\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nconst DEFAULT_MIN_ZOOM = 0;\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:center'|'change:resolution'|'change:rotation'} ViewObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ViewOnSignature\n */\n\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Web Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nclass View extends BaseObject {\n /**\n * @param {ViewOptions} [options] View options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {ViewOnSignature}\n */\n this.on;\n\n /***\n * @type {ViewOnSignature}\n */\n this.once;\n\n /***\n * @type {ViewOnSignature}\n */\n this.un;\n\n options = Object.assign({}, options);\n\n /**\n * @private\n * @type {Array}\n */\n this.hints_ = [0, 0];\n\n /**\n * @private\n * @type {Array>}\n */\n this.animations_ = [];\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.updateAnimationKey_;\n\n /**\n * @private\n * @const\n * @type {import(\"./proj/Projection.js\").default}\n */\n this.projection_ = createProjection(options.projection, 'EPSG:3857');\n\n /**\n * @private\n * @type {import(\"./size.js\").Size}\n */\n this.viewportSize_ = [100, 100];\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.targetCenter_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetResolution_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate}\n */\n this.nextCenter_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.nextResolution_;\n\n /**\n * @private\n * @type {number}\n */\n this.nextRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.cancelAnchor_ = undefined;\n\n if (options.projection) {\n disableCoordinateWarning();\n }\n if (options.center) {\n options.center = fromUserCoordinate(options.center, this.projection_);\n }\n if (options.extent) {\n options.extent = fromUserExtent(options.extent, this.projection_);\n }\n\n this.applyOptions_(options);\n }\n\n /**\n * Set up the view with the given options.\n * @param {ViewOptions} options View options.\n */\n applyOptions_(options) {\n const properties = Object.assign({}, options);\n for (const key in ViewProperty) {\n delete properties[key];\n }\n this.setProperties(properties, true);\n\n const resolutionConstraintInfo = createResolutionConstraint(options);\n\n /**\n * @private\n * @type {number}\n */\n this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.minResolution_ = resolutionConstraintInfo.minResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n\n /**\n * @private\n * @type {Array|undefined}\n */\n this.resolutions_ = options.resolutions;\n\n /**\n * @type {Array|undefined}\n * @private\n */\n this.padding_ = options.padding;\n\n /**\n * @private\n * @type {number}\n */\n this.minZoom_ = resolutionConstraintInfo.minZoom;\n\n const centerConstraint = createCenterConstraint(options);\n const resolutionConstraint = resolutionConstraintInfo.constraint;\n const rotationConstraint = createRotationConstraint(options);\n\n /**\n * @private\n * @type {Constraints}\n */\n this.constraints_ = {\n center: centerConstraint,\n resolution: resolutionConstraint,\n rotation: rotationConstraint,\n };\n\n this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n this.setCenterInternal(\n options.center !== undefined ? options.center : null,\n );\n if (options.resolution !== undefined) {\n this.setResolution(options.resolution);\n } else if (options.zoom !== undefined) {\n this.setZoom(options.zoom);\n }\n }\n\n /**\n * Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from that\n * content. The order of the values in the array is top, right, bottom, left.\n * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n * @type {Array|undefined}\n * @api\n */\n get padding() {\n return this.padding_;\n }\n set padding(padding) {\n let oldPadding = this.padding_;\n this.padding_ = padding;\n const center = this.getCenterInternal();\n if (center) {\n const newPadding = padding || [0, 0, 0, 0];\n oldPadding = oldPadding || [0, 0, 0, 0];\n const resolution = this.getResolution();\n const offsetX =\n (resolution / 2) *\n (newPadding[3] - oldPadding[3] + oldPadding[1] - newPadding[1]);\n const offsetY =\n (resolution / 2) *\n (newPadding[0] - oldPadding[0] + oldPadding[2] - newPadding[2]);\n this.setCenterInternal([center[0] + offsetX, center[1] - offsetY]);\n }\n }\n\n /**\n * Get an updated version of the view options used to construct the view. The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options. The provided options can be used to apply new min/max zoom or\n * resolution limits.\n * @param {ViewOptions} newOptions New options to be applied.\n * @return {ViewOptions} New options updated with the current view state.\n */\n getUpdatedOptions_(newOptions) {\n const options = this.getProperties();\n\n // preserve resolution (or zoom)\n if (options.resolution !== undefined) {\n options.resolution = this.getResolution();\n } else {\n options.zoom = this.getZoom();\n }\n\n // preserve center\n options.center = this.getCenterInternal();\n\n // preserve rotation\n options.rotation = this.getRotation();\n\n return Object.assign({}, options, newOptions);\n }\n\n /**\n * Animate the view. The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states. For example,\n * to animate the view to a new zoom level:\n *\n * view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing. You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link module:ol/easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects. For example, to first zoom and then pan:\n *\n * view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series. The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n * options. Multiple animations can be run in series by passing multiple\n * options objects. To run multiple animations in parallel, call the method\n * multiple times. An optional callback can be provided as a final\n * argument. The callback will be called with a boolean indicating whether\n * the animation completed without being cancelled.\n * @api\n */\n animate(var_args) {\n if (this.isDef() && !this.getAnimating()) {\n this.resolveConstraints(0);\n }\n const args = new Array(arguments.length);\n for (let i = 0; i < args.length; ++i) {\n let options = arguments[i];\n if (options.center) {\n options = Object.assign({}, options);\n options.center = fromUserCoordinate(\n options.center,\n this.getProjection(),\n );\n }\n if (options.anchor) {\n options = Object.assign({}, options);\n options.anchor = fromUserCoordinate(\n options.anchor,\n this.getProjection(),\n );\n }\n args[i] = options;\n }\n this.animateInternal.apply(this, args);\n }\n\n /**\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n */\n animateInternal(var_args) {\n let animationCount = arguments.length;\n let callback;\n if (\n animationCount > 1 &&\n typeof arguments[animationCount - 1] === 'function'\n ) {\n callback = arguments[animationCount - 1];\n --animationCount;\n }\n\n let i = 0;\n for (; i < animationCount && !this.isDef(); ++i) {\n // if view properties are not yet set, shortcut to the final state\n const state = arguments[i];\n if (state.center) {\n this.setCenterInternal(state.center);\n }\n if (state.zoom !== undefined) {\n this.setZoom(state.zoom);\n } else if (state.resolution) {\n this.setResolution(state.resolution);\n }\n if (state.rotation !== undefined) {\n this.setRotation(state.rotation);\n }\n }\n if (i === animationCount) {\n if (callback) {\n animationCallback(callback, true);\n }\n return;\n }\n\n let start = Date.now();\n let center = this.targetCenter_.slice();\n let resolution = this.targetResolution_;\n let rotation = this.targetRotation_;\n const series = [];\n for (; i < animationCount; ++i) {\n const options = /** @type {AnimationOptions} */ (arguments[i]);\n\n const animation = {\n start: start,\n complete: false,\n anchor: options.anchor,\n duration: options.duration !== undefined ? options.duration : 1000,\n easing: options.easing || inAndOut,\n callback: callback,\n };\n\n if (options.center) {\n animation.sourceCenter = center;\n animation.targetCenter = options.center.slice();\n center = animation.targetCenter;\n }\n\n if (options.zoom !== undefined) {\n animation.sourceResolution = resolution;\n animation.targetResolution = this.getResolutionForZoom(options.zoom);\n resolution = animation.targetResolution;\n } else if (options.resolution) {\n animation.sourceResolution = resolution;\n animation.targetResolution = options.resolution;\n resolution = animation.targetResolution;\n }\n\n if (options.rotation !== undefined) {\n animation.sourceRotation = rotation;\n const delta =\n modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n animation.targetRotation = rotation + delta;\n rotation = animation.targetRotation;\n }\n\n // check if animation is a no-op\n if (isNoopAnimation(animation)) {\n animation.complete = true;\n // we still push it onto the series for callback handling\n } else {\n start += animation.duration;\n }\n series.push(animation);\n }\n this.animations_.push(series);\n this.setHint(ViewHint.ANIMATING, 1);\n this.updateAnimations_();\n }\n\n /**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\n getAnimating() {\n return this.hints_[ViewHint.ANIMATING] > 0;\n }\n\n /**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\n getInteracting() {\n return this.hints_[ViewHint.INTERACTING] > 0;\n }\n\n /**\n * Cancel any ongoing animations.\n * @api\n */\n cancelAnimations() {\n this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n let anchor;\n for (let i = 0, ii = this.animations_.length; i < ii; ++i) {\n const series = this.animations_[i];\n if (series[0].callback) {\n animationCallback(series[0].callback, false);\n }\n if (!anchor) {\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (!animation.complete) {\n anchor = animation.anchor;\n break;\n }\n }\n }\n }\n this.animations_.length = 0;\n this.cancelAnchor_ = anchor;\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n }\n\n /**\n * Update all animations.\n */\n updateAnimations_() {\n if (this.updateAnimationKey_ !== undefined) {\n cancelAnimationFrame(this.updateAnimationKey_);\n this.updateAnimationKey_ = undefined;\n }\n if (!this.getAnimating()) {\n return;\n }\n const now = Date.now();\n let more = false;\n for (let i = this.animations_.length - 1; i >= 0; --i) {\n const series = this.animations_[i];\n let seriesComplete = true;\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (animation.complete) {\n continue;\n }\n const elapsed = now - animation.start;\n let fraction =\n animation.duration > 0 ? elapsed / animation.duration : 1;\n if (fraction >= 1) {\n animation.complete = true;\n fraction = 1;\n } else {\n seriesComplete = false;\n }\n const progress = animation.easing(fraction);\n if (animation.sourceCenter) {\n const x0 = animation.sourceCenter[0];\n const y0 = animation.sourceCenter[1];\n const x1 = animation.targetCenter[0];\n const y1 = animation.targetCenter[1];\n this.nextCenter_ = animation.targetCenter;\n const x = x0 + progress * (x1 - x0);\n const y = y0 + progress * (y1 - y0);\n this.targetCenter_ = [x, y];\n }\n if (animation.sourceResolution && animation.targetResolution) {\n const resolution =\n progress === 1\n ? animation.targetResolution\n : animation.sourceResolution +\n progress *\n (animation.targetResolution - animation.sourceResolution);\n if (animation.anchor) {\n const size = this.getViewportSize_(this.getRotation());\n const constrainedResolution = this.constraints_.resolution(\n resolution,\n 0,\n size,\n true,\n );\n this.targetCenter_ = this.calculateCenterZoom(\n constrainedResolution,\n animation.anchor,\n );\n }\n this.nextResolution_ = animation.targetResolution;\n this.targetResolution_ = resolution;\n this.applyTargetState_(true);\n }\n if (\n animation.sourceRotation !== undefined &&\n animation.targetRotation !== undefined\n ) {\n const rotation =\n progress === 1\n ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n Math.PI\n : animation.sourceRotation +\n progress *\n (animation.targetRotation - animation.sourceRotation);\n if (animation.anchor) {\n const constrainedRotation = this.constraints_.rotation(\n rotation,\n true,\n );\n this.targetCenter_ = this.calculateCenterRotate(\n constrainedRotation,\n animation.anchor,\n );\n }\n this.nextRotation_ = animation.targetRotation;\n this.targetRotation_ = rotation;\n }\n this.applyTargetState_(true);\n more = true;\n if (!animation.complete) {\n break;\n }\n }\n if (seriesComplete) {\n this.animations_[i] = null;\n this.setHint(ViewHint.ANIMATING, -1);\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n const callback = series[0].callback;\n if (callback) {\n animationCallback(callback, true);\n }\n }\n }\n // prune completed series\n this.animations_ = this.animations_.filter(Boolean);\n if (more && this.updateAnimationKey_ === undefined) {\n this.updateAnimationKey_ = requestAnimationFrame(\n this.updateAnimations_.bind(this),\n );\n }\n }\n\n /**\n * @param {number} rotation Target rotation.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n */\n calculateCenterRotate(rotation, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n if (currentCenter !== undefined) {\n center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n rotateCoordinate(center, rotation - this.getRotation());\n addCoordinate(center, anchor);\n }\n return center;\n }\n\n /**\n * @param {number} resolution Target resolution.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n */\n calculateCenterZoom(resolution, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n const currentResolution = this.getResolution();\n if (currentCenter !== undefined && currentResolution !== undefined) {\n const x =\n anchor[0] -\n (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n const y =\n anchor[1] -\n (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n center = [x, y];\n }\n return center;\n }\n\n /**\n * Returns the current viewport size.\n * @private\n * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n */\n getViewportSize_(rotation) {\n const size = this.viewportSize_;\n if (rotation) {\n const w = size[0];\n const h = size[1];\n return [\n Math.abs(w * Math.cos(rotation)) + Math.abs(h * Math.sin(rotation)),\n Math.abs(w * Math.sin(rotation)) + Math.abs(h * Math.cos(rotation)),\n ];\n }\n return size;\n }\n\n /**\n * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n * to avoid performance hit and layout reflow.\n * This should be done on map size change.\n * Note: the constraints are not resolved during an animation to avoid stopping it\n * @param {import(\"./size.js\").Size} [size] Viewport size; if undefined, [100, 100] is assumed\n */\n setViewportSize(size) {\n this.viewportSize_ = Array.isArray(size) ? size.slice() : [100, 100];\n if (!this.getAnimating()) {\n this.resolveConstraints(0);\n }\n }\n\n /**\n * Get the view center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\n getCenter() {\n const center = this.getCenterInternal();\n if (!center) {\n return center;\n }\n return toUserCoordinate(center, this.getProjection());\n }\n\n /**\n * Get the view center without transforming to user projection.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n */\n getCenterInternal() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(ViewProperty.CENTER)\n );\n }\n\n /**\n * @return {Constraints} Constraints.\n */\n getConstraints() {\n return this.constraints_;\n }\n\n /**\n * @return {boolean} Resolution constraint is set\n */\n getConstrainResolution() {\n return this.get('constrainResolution');\n }\n\n /**\n * @param {Array} [hints] Destination array.\n * @return {Array} Hint.\n */\n getHints(hints) {\n if (hints !== undefined) {\n hints[0] = this.hints_[0];\n hints[1] = this.hints_[1];\n return hints;\n }\n return this.hints_.slice();\n }\n\n /**\n * Calculate the extent for the current view state and the passed box size.\n * @param {import(\"./size.js\").Size} [size] The pixel dimensions of the box\n * into which the calculated extent should fit. Defaults to the size of the\n * map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired\n * box size (e.g. `map.getSize()`).\n * @return {import(\"./extent.js\").Extent} Extent.\n * @api\n */\n calculateExtent(size) {\n const extent = this.calculateExtentInternal(size);\n return toUserExtent(extent, this.getProjection());\n }\n\n /**\n * @param {import(\"./size.js\").Size} [size] Box pixel size. If not provided,\n * the map's last known viewport size will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n calculateExtentInternal(size) {\n size = size || this.getViewportSizeMinusPadding_();\n const center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n assert(center, 'The view center is not defined');\n const resolution = /** @type {!number} */ (this.getResolution());\n assert(resolution !== undefined, 'The view resolution is not defined');\n const rotation = /** @type {!number} */ (this.getRotation());\n assert(rotation !== undefined, 'The view rotation is not defined');\n\n return getForViewAndSize(center, resolution, rotation, size);\n }\n\n /**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\n getMaxResolution() {\n return this.maxResolution_;\n }\n\n /**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\n getMinResolution() {\n return this.minResolution_;\n }\n\n /**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.minResolution_)\n );\n }\n\n /**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\n setMaxZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({maxZoom: zoom}));\n }\n\n /**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.maxResolution_)\n );\n }\n\n /**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\n setMinZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({minZoom: zoom}));\n }\n\n /**\n * Set whether the view should allow intermediary zoom levels.\n * @param {boolean} enabled Whether the resolution is constrained.\n * @api\n */\n setConstrainResolution(enabled) {\n this.applyOptions_(this.getUpdatedOptions_({constrainResolution: enabled}));\n }\n\n /**\n * Get the view projection.\n * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n * @api\n */\n getProjection() {\n return this.projection_;\n }\n\n /**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\n getResolution() {\n return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n }\n\n /**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the View, or undefined if none were given.\n * @return {Array|undefined} The resolutions of the view.\n * @api\n */\n getResolutions() {\n return this.resolutions_;\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n * @api\n */\n getResolutionForExtent(extent, size) {\n return this.getResolutionForExtentInternal(\n fromUserExtent(extent, this.getProjection()),\n size,\n );\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n */\n getResolutionForExtentInternal(extent, size) {\n size = size || this.getViewportSizeMinusPadding_();\n const xResolution = getWidth(extent) / size[0];\n const yResolution = getHeight(extent) / size[1];\n return Math.max(xResolution, yResolution);\n }\n\n /**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number} [power] Power.\n * @return {function(number): number} Resolution for value function.\n */\n getResolutionForValueFunction(power) {\n power = power || 2;\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / Math.log(power);\n return (\n /**\n * @param {number} value Value.\n * @return {number} Resolution.\n */\n function (value) {\n const resolution = maxResolution / Math.pow(power, value * max);\n return resolution;\n }\n );\n }\n\n /**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\n getRotation() {\n return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n }\n\n /**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number} [power] Power.\n * @return {function(number): number} Value for resolution function.\n */\n getValueForResolutionFunction(power) {\n const logPower = Math.log(power || 2);\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / logPower;\n return (\n /**\n * @param {number} resolution Resolution.\n * @return {number} Value.\n */\n function (resolution) {\n const value = Math.log(maxResolution / resolution) / logPower / max;\n return value;\n }\n );\n }\n\n /**\n * Returns the size of the viewport minus padding.\n * @private\n * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n */\n getViewportSizeMinusPadding_(rotation) {\n let size = this.getViewportSize_(rotation);\n const padding = this.padding_;\n if (padding) {\n size = [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ];\n }\n return size;\n }\n\n /**\n * @return {State} View state.\n */\n getState() {\n const projection = this.getProjection();\n const resolution = this.getResolution();\n const rotation = this.getRotation();\n let center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n const padding = this.padding_;\n if (padding) {\n const reducedSize = this.getViewportSizeMinusPadding_();\n center = calculateCenterOn(\n center,\n this.getViewportSize_(),\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation,\n );\n }\n return {\n center: center.slice(0),\n projection: projection !== undefined ? projection : null,\n resolution: resolution,\n nextCenter: this.nextCenter_,\n nextResolution: this.nextResolution_,\n nextRotation: this.nextRotation_,\n rotation: rotation,\n zoom: this.getZoom(),\n };\n }\n\n /**\n * @return {ViewStateLayerStateExtent} Like `FrameState`, but just `viewState` and `extent`.\n */\n getViewStateAndExtent() {\n return {\n viewState: this.getState(),\n extent: this.calculateExtent(),\n };\n }\n\n /**\n * Get the current zoom level. This method may return non-integer zoom levels\n * if the view does not constrain the resolution, or if an interaction or\n * animation is underway.\n * @return {number|undefined} Zoom.\n * @api\n */\n getZoom() {\n let zoom;\n const resolution = this.getResolution();\n if (resolution !== undefined) {\n zoom = this.getZoomForResolution(resolution);\n }\n return zoom;\n }\n\n /**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\n getZoomForResolution(resolution) {\n let offset = this.minZoom_ || 0;\n let max, zoomFactor;\n if (this.resolutions_) {\n const nearest = linearFindNearest(this.resolutions_, resolution, 1);\n offset = nearest;\n max = this.resolutions_[nearest];\n if (nearest == this.resolutions_.length - 1) {\n zoomFactor = 2;\n } else {\n zoomFactor = max / this.resolutions_[nearest + 1];\n }\n } else {\n max = this.maxResolution_;\n zoomFactor = this.zoomFactor_;\n }\n return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n }\n\n /**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\n getResolutionForZoom(zoom) {\n if (this.resolutions_?.length) {\n if (this.resolutions_.length === 1) {\n return this.resolutions_[0];\n }\n const baseLevel = clamp(\n Math.floor(zoom),\n 0,\n this.resolutions_.length - 2,\n );\n const zoomFactor =\n this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n return (\n this.resolutions_[baseLevel] /\n Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1))\n );\n }\n return (\n this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_)\n );\n }\n\n /**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n * extent to fit the view to.\n * @param {FitOptions} [options] Options.\n * @api\n */\n fit(geometryOrExtent, options) {\n /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n let geometry;\n assert(\n Array.isArray(geometryOrExtent) ||\n typeof (/** @type {?} */ (geometryOrExtent).getSimplifiedGeometry) ===\n 'function',\n 'Invalid extent or geometry provided as `geometry`',\n );\n if (Array.isArray(geometryOrExtent)) {\n assert(\n !isEmpty(geometryOrExtent),\n 'Cannot fit empty extent provided as `geometry`',\n );\n const extent = fromUserExtent(geometryOrExtent, this.getProjection());\n geometry = polygonFromExtent(extent);\n } else if (geometryOrExtent.getType() === 'Circle') {\n const extent = fromUserExtent(\n geometryOrExtent.getExtent(),\n this.getProjection(),\n );\n geometry = polygonFromExtent(extent);\n geometry.rotate(this.getRotation(), getCenter(extent));\n } else {\n const userProjection = getUserProjection();\n if (userProjection) {\n geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometryOrExtent\n .clone()\n .transform(userProjection, this.getProjection())\n );\n } else {\n geometry = geometryOrExtent;\n }\n }\n\n this.fitInternal(geometry, options);\n }\n\n /**\n * Calculate rotated extent\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @return {import(\"./extent\").Extent} The rotated extent for the geometry.\n */\n rotatedExtentForGeometry(geometry) {\n const rotation = this.getRotation();\n const cosAngle = Math.cos(rotation);\n const sinAngle = Math.sin(-rotation);\n const coords = geometry.getFlatCoordinates();\n const stride = geometry.getStride();\n let minRotX = +Infinity;\n let minRotY = +Infinity;\n let maxRotX = -Infinity;\n let maxRotY = -Infinity;\n for (let i = 0, ii = coords.length; i < ii; i += stride) {\n const rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n const rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n minRotX = Math.min(minRotX, rotX);\n minRotY = Math.min(minRotY, rotY);\n maxRotX = Math.max(maxRotX, rotX);\n maxRotY = Math.max(maxRotY, rotY);\n }\n return [minRotX, minRotY, maxRotX, maxRotY];\n }\n\n /**\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @param {FitOptions} [options] Options.\n */\n fitInternal(geometry, options) {\n options = options || {};\n let size = options.size;\n if (!size) {\n size = this.getViewportSizeMinusPadding_();\n }\n const padding =\n options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n const nearest = options.nearest !== undefined ? options.nearest : false;\n let minResolution;\n if (options.minResolution !== undefined) {\n minResolution = options.minResolution;\n } else if (options.maxZoom !== undefined) {\n minResolution = this.getResolutionForZoom(options.maxZoom);\n } else {\n minResolution = 0;\n }\n\n const rotatedExtent = this.rotatedExtentForGeometry(geometry);\n\n // calculate resolution\n let resolution = this.getResolutionForExtentInternal(rotatedExtent, [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ]);\n resolution = isNaN(resolution)\n ? minResolution\n : Math.max(resolution, minResolution);\n resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n\n // calculate center\n const rotation = this.getRotation();\n const sinAngle = Math.sin(rotation);\n const cosAngle = Math.cos(rotation);\n const centerRot = getCenter(rotatedExtent);\n centerRot[0] += ((padding[1] - padding[3]) / 2) * resolution;\n centerRot[1] += ((padding[0] - padding[2]) / 2) * resolution;\n const centerX = centerRot[0] * cosAngle - centerRot[1] * sinAngle;\n const centerY = centerRot[1] * cosAngle + centerRot[0] * sinAngle;\n const center = this.getConstrainedCenter([centerX, centerY], resolution);\n const callback = options.callback ? options.callback : VOID;\n\n if (options.duration !== undefined) {\n this.animateInternal(\n {\n resolution: resolution,\n center: center,\n duration: options.duration,\n easing: options.easing,\n },\n callback,\n );\n } else {\n this.targetResolution_ = resolution;\n this.targetCenter_ = center;\n this.applyTargetState_(false, true);\n animationCallback(callback, true);\n }\n }\n\n /**\n * Center on coordinate and view position.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @api\n */\n centerOn(coordinate, size, position) {\n this.centerOnInternal(\n fromUserCoordinate(coordinate, this.getProjection()),\n size,\n position,\n );\n }\n\n /**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n */\n centerOnInternal(coordinate, size, position) {\n this.setCenterInternal(\n calculateCenterOn(\n coordinate,\n size,\n position,\n this.getResolution(),\n this.getRotation(),\n ),\n );\n }\n\n /**\n * Calculates the shift between map and viewport center.\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array|undefined} Center shift.\n */\n calculateCenterShift(center, resolution, rotation, size) {\n let centerShift;\n const padding = this.padding_;\n if (padding && center) {\n const reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n const shiftedCenter = calculateCenterOn(\n center,\n size,\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation,\n );\n centerShift = [\n center[0] - shiftedCenter[0],\n center[1] - shiftedCenter[1],\n ];\n }\n return centerShift;\n }\n\n /**\n * @return {boolean} Is defined.\n */\n isDef() {\n return !!this.getCenterInternal() && this.getResolution() !== undefined;\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n * @api\n */\n adjustCenter(deltaCoordinates) {\n const center = toUserCoordinate(this.targetCenter_, this.getProjection());\n this.setCenter([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n */\n adjustCenterInternal(deltaCoordinates) {\n const center = this.targetCenter_;\n this.setCenterInternal([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n adjustResolution(ratio, anchor) {\n anchor = anchor && fromUserCoordinate(anchor, this.getProjection());\n this.adjustResolutionInternal(ratio, anchor);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n adjustResolutionInternal(ratio, anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const size = this.getViewportSize_(this.getRotation());\n const newResolution = this.constraints_.resolution(\n this.targetResolution_ * ratio,\n 0,\n size,\n isMoving,\n );\n\n if (anchor) {\n this.targetCenter_ = this.calculateCenterZoom(newResolution, anchor);\n }\n\n this.targetResolution_ *= ratio;\n this.applyTargetState_();\n }\n\n /**\n * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom level.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n adjustZoom(delta, anchor) {\n this.adjustResolution(Math.pow(this.zoomFactor_, -delta), anchor);\n }\n\n /**\n * Adds a value to the view rotation, optionally using an anchor. Any rotation\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n * @api\n */\n adjustRotation(delta, anchor) {\n if (anchor) {\n anchor = fromUserCoordinate(anchor, this.getProjection());\n }\n this.adjustRotationInternal(delta, anchor);\n }\n\n /**\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n */\n adjustRotationInternal(delta, anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const newRotation = this.constraints_.rotation(\n this.targetRotation_ + delta,\n isMoving,\n );\n if (anchor) {\n this.targetCenter_ = this.calculateCenterRotate(newRotation, anchor);\n }\n this.targetRotation_ += delta;\n this.applyTargetState_();\n }\n\n /**\n * Set the center of the current view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\n setCenter(center) {\n this.setCenterInternal(\n center ? fromUserCoordinate(center, this.getProjection()) : center,\n );\n }\n\n /**\n * Set the center using the view projection (not the user projection).\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n */\n setCenterInternal(center) {\n this.targetCenter_ = center;\n this.applyTargetState_();\n }\n\n /**\n * @param {import(\"./ViewHint.js\").default} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\n setHint(hint, delta) {\n this.hints_[hint] += delta;\n this.changed();\n return this.hints_[hint];\n }\n\n /**\n * Set the resolution for this view. Any resolution constraint will apply.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\n setResolution(resolution) {\n this.targetResolution_ = resolution;\n this.applyTargetState_();\n }\n\n /**\n * Set the rotation for this view. Any rotation constraint will apply.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\n setRotation(rotation) {\n this.targetRotation_ = rotation;\n this.applyTargetState_();\n }\n\n /**\n * Zoom to a specific zoom level. Any resolution constrain will apply.\n * @param {number} zoom Zoom level.\n * @api\n */\n setZoom(zoom) {\n this.setResolution(this.getResolutionForZoom(zoom));\n }\n\n /**\n * Recompute rotation/resolution/center based on target values.\n * Note: we have to compute rotation first, then resolution and center considering that\n * parameters can influence one another in case a view extent constraint is present.\n * @param {boolean} [doNotCancelAnims] Do not cancel animations.\n * @param {boolean} [forceMoving] Apply constraints as if the view is moving.\n * @private\n */\n applyTargetState_(doNotCancelAnims, forceMoving) {\n const isMoving =\n this.getAnimating() || this.getInteracting() || forceMoving;\n\n // compute rotation\n const newRotation = this.constraints_.rotation(\n this.targetRotation_,\n isMoving,\n );\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n 0,\n size,\n isMoving,\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n isMoving,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size,\n ),\n );\n\n if (this.get(ViewProperty.ROTATION) !== newRotation) {\n this.set(ViewProperty.ROTATION, newRotation);\n }\n if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n this.set(ViewProperty.RESOLUTION, newResolution);\n this.set('zoom', this.getZoom(), true);\n }\n if (\n !newCenter ||\n !this.get(ViewProperty.CENTER) ||\n !equals(this.get(ViewProperty.CENTER), newCenter)\n ) {\n this.set(ViewProperty.CENTER, newCenter);\n }\n\n if (this.getAnimating() && !doNotCancelAnims) {\n this.cancelAnimations();\n }\n this.cancelAnchor_ = undefined;\n }\n\n /**\n * If any constraints need to be applied, an animation will be triggered.\n * This is typically done on interaction end.\n * Note: calling this with a duration of 0 will apply the constrained values straight away,\n * without animation.\n * @param {number} [duration] The animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n resolveConstraints(duration, resolutionDirection, anchor) {\n duration = duration !== undefined ? duration : 200;\n const direction = resolutionDirection || 0;\n\n const newRotation = this.constraints_.rotation(this.targetRotation_);\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n direction,\n size,\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n false,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size,\n ),\n );\n\n if (duration === 0 && !this.cancelAnchor_) {\n this.targetResolution_ = newResolution;\n this.targetRotation_ = newRotation;\n this.targetCenter_ = newCenter;\n this.applyTargetState_();\n return;\n }\n\n anchor = anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n this.cancelAnchor_ = undefined;\n\n if (\n this.getResolution() !== newResolution ||\n this.getRotation() !== newRotation ||\n !this.getCenterInternal() ||\n !equals(this.getCenterInternal(), newCenter)\n ) {\n if (this.getAnimating()) {\n this.cancelAnimations();\n }\n\n this.animateInternal({\n rotation: newRotation,\n center: newCenter,\n resolution: newResolution,\n duration: duration,\n easing: easeOut,\n anchor: anchor,\n });\n }\n }\n\n /**\n * Notify the View that an interaction has started.\n * The view state will be resolved to a stable one if needed\n * (depending on its constraints).\n * @api\n */\n beginInteraction() {\n this.resolveConstraints(0);\n\n this.setHint(ViewHint.INTERACTING, 1);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [duration] Animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n endInteraction(duration, resolutionDirection, anchor) {\n anchor = anchor && fromUserCoordinate(anchor, this.getProjection());\n this.endInteractionInternal(duration, resolutionDirection, anchor);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [duration] Animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n endInteractionInternal(duration, resolutionDirection, anchor) {\n if (!this.getInteracting()) {\n return;\n }\n this.setHint(ViewHint.INTERACTING, -1);\n this.resolveConstraints(duration, resolutionDirection, anchor);\n }\n\n /**\n * Get a valid position for the view center according to the current constraints.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n * @param {number} [targetResolution] Target resolution. If not supplied, the current one will be used.\n * This is useful to guess a valid center position at a different zoom level.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n */\n getConstrainedCenter(targetCenter, targetResolution) {\n const size = this.getViewportSize_(this.getRotation());\n return this.constraints_.center(\n targetCenter,\n targetResolution || this.getResolution(),\n size,\n );\n }\n\n /**\n * Get a valid zoom level according to the current view constraints.\n * @param {number|undefined} targetZoom Target zoom.\n * @param {number} [direction] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid zoom level.\n */\n getConstrainedZoom(targetZoom, direction) {\n const targetRes = this.getResolutionForZoom(targetZoom);\n return this.getZoomForResolution(\n this.getConstrainedResolution(targetRes, direction),\n );\n }\n\n /**\n * Get a valid resolution according to the current view constraints.\n * @param {number|undefined} targetResolution Target resolution.\n * @param {number} [direction] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid resolution.\n */\n getConstrainedResolution(targetResolution, direction) {\n direction = direction || 0;\n const size = this.getViewportSize_(this.getRotation());\n\n return this.constraints_.resolution(targetResolution, direction, size);\n }\n}\n\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n setTimeout(function () {\n callback(returnValue);\n }, 0);\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n if (options.extent !== undefined) {\n const smooth =\n options.smoothExtentConstraint !== undefined\n ? options.smoothExtentConstraint\n : true;\n return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n }\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n if (options.multiWorld !== true && projection.isGlobal()) {\n const extent = projection.getExtent().slice();\n extent[0] = -Infinity;\n extent[2] = Infinity;\n return createExtent(extent, false, false);\n }\n\n return centerNone;\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n * minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n let resolutionConstraint;\n let maxResolution;\n let minResolution;\n\n // TODO: move these to be ol constants\n // see https://github.com/openlayers/openlayers/issues/2076\n const defaultMaxZoom = 28;\n const defaultZoomFactor = 2;\n\n let minZoom =\n options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n\n let maxZoom =\n options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n\n const zoomFactor =\n options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n\n const multiWorld =\n options.multiWorld !== undefined ? options.multiWorld : false;\n\n const smooth =\n options.smoothResolutionConstraint !== undefined\n ? options.smoothResolutionConstraint\n : true;\n\n const showFullExtent =\n options.showFullExtent !== undefined ? options.showFullExtent : false;\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n const projExtent = projection.getExtent();\n let constrainOnlyCenter = options.constrainOnlyCenter;\n let extent = options.extent;\n if (!multiWorld && !extent && projection.isGlobal()) {\n constrainOnlyCenter = false;\n extent = projExtent;\n }\n\n if (options.resolutions !== undefined) {\n const resolutions = options.resolutions;\n maxResolution = resolutions[minZoom];\n minResolution =\n resolutions[maxZoom] !== undefined\n ? resolutions[maxZoom]\n : resolutions[resolutions.length - 1];\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToResolutions(\n resolutions,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n }\n } else {\n // calculate the default min and max resolution\n const size = !projExtent\n ? // use an extent that can fit the whole world if need be\n (360 * METERS_PER_UNIT.degrees) / projection.getMetersPerUnit()\n : Math.max(getWidth(projExtent), getHeight(projExtent));\n\n const defaultMaxResolution =\n size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n\n const defaultMinResolution =\n defaultMaxResolution /\n Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n\n // user provided maxResolution takes precedence\n maxResolution = options.maxResolution;\n if (maxResolution !== undefined) {\n minZoom = 0;\n } else {\n maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n }\n\n // user provided minResolution takes precedence\n minResolution = options.minResolution;\n if (minResolution === undefined) {\n if (options.maxZoom !== undefined) {\n if (options.maxResolution !== undefined) {\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n } else {\n minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n }\n } else {\n minResolution = defaultMinResolution;\n }\n }\n\n // given discrete zoom levels, minResolution may be different than provided\n maxZoom =\n minZoom +\n Math.floor(\n Math.log(maxResolution / minResolution) / Math.log(zoomFactor),\n );\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToPower(\n zoomFactor,\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n }\n }\n return {\n constraint: resolutionConstraint,\n maxResolution: maxResolution,\n minResolution: minResolution,\n minZoom: minZoom,\n zoomFactor: zoomFactor,\n };\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n const enableRotation =\n options.enableRotation !== undefined ? options.enableRotation : true;\n if (enableRotation) {\n const constrainRotation = options.constrainRotation;\n if (constrainRotation === undefined || constrainRotation === true) {\n return createSnapToZero();\n }\n if (constrainRotation === false) {\n return rotationNone;\n }\n if (typeof constrainRotation === 'number') {\n return createSnapToN(constrainRotation);\n }\n return rotationNone;\n }\n return disable;\n}\n\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n if (animation.sourceCenter && animation.targetCenter) {\n if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n return false;\n }\n }\n if (animation.sourceResolution !== animation.targetResolution) {\n return false;\n }\n if (animation.sourceRotation !== animation.targetRotation) {\n return false;\n }\n return true;\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n // calculate rotated position\n const cosAngle = Math.cos(-rotation);\n let sinAngle = Math.sin(-rotation);\n let rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n let rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n rotX += (size[0] / 2 - position[0]) * resolution;\n rotY += (position[1] - size[1] / 2) * resolution;\n\n // go back to original angle\n sinAngle = -sinAngle; // go back to original rotation\n const centerX = rotX * cosAngle - rotY * sinAngle;\n const centerY = rotY * cosAngle + rotX * sinAngle;\n\n return [centerX, centerY];\n}\n\nexport default View;\n", "/**\n * @module ol/render/EventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered before a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#prerender\n * @api\n */\n PRERENDER: 'prerender',\n\n /**\n * Triggered after a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered before layers are composed. When dispatched by the map, the event object will not have\n * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only\n * WebGL layers currently dispatch this event.\n * @event module:ol/render/Event~RenderEvent#precompose\n * @api\n */\n PRECOMPOSE: 'precompose',\n\n /**\n * Triggered after layers are composed. When dispatched by the map, the event object will not have\n * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only\n * WebGL layers currently dispatch this event.\n * @event module:ol/render/Event~RenderEvent#postcompose\n * @api\n */\n POSTCOMPOSE: 'postcompose',\n\n /**\n * Triggered when rendering is complete, i.e. all sources and tiles have\n * finished loading for the current viewport, and all tiles are faded in.\n * The event object will not have a `context` set.\n * @event module:ol/render/Event~RenderEvent#rendercomplete\n * @api\n */\n RENDERCOMPLETE: 'rendercomplete',\n};\n\n/**\n * @typedef {'postrender'|'precompose'|'postcompose'|'rendercomplete'} MapRenderEventTypes\n */\n\n/**\n * @typedef {'postrender'|'prerender'} LayerRenderEventTypes\n */\n", "/**\n * @module ol/render/Event\n */\n\nimport Event from '../events/Event.js';\n\nclass RenderEvent extends Event {\n /**\n * @param {import(\"./EventType.js\").default} type Type.\n * @param {import(\"../transform.js\").Transform} [inversePixelTransform] Transform for\n * CSS pixels to rendered pixels.\n * @param {import(\"../Map.js\").FrameState} [frameState] Frame state.\n * @param {?(CanvasRenderingContext2D|WebGLRenderingContext)} [context] Context.\n */\n constructor(type, inversePixelTransform, frameState, context) {\n super(type);\n\n /**\n * Transform from CSS pixels (relative to the top-left corner of the map viewport)\n * to rendered pixels on this event's `context`. Only available when a Canvas renderer is used, null otherwise.\n * @type {import(\"../transform.js\").Transform|undefined}\n * @api\n */\n this.inversePixelTransform = inversePixelTransform;\n\n /**\n * An object representing the current render frame state.\n * @type {import(\"../Map.js\").FrameState|undefined}\n * @api\n */\n this.frameState = frameState;\n\n /**\n * Canvas context. Not available when the event is dispatched by the map. For Canvas 2D layers,\n * the context will be the 2D rendering context. For WebGL layers, the context will be the WebGL\n * context.\n * @type {CanvasRenderingContext2D|WebGLRenderingContext|undefined}\n * @api\n */\n this.context = context;\n }\n}\n\nexport default RenderEvent;\n", "/**\n * @module ol/render/canvas/ZIndexContext\n */\n\nimport {getSharedCanvasContext2D} from '../../dom.js';\n\n/** @typedef {CanvasRenderingContext2D & {globalAlpha: any}} ZIndexContextProxy */\n\n/**\n * @extends {CanvasRenderingContext2D}\n */\nclass ZIndexContext {\n constructor() {\n /**\n * @private\n * @type {Array>}\n */\n this.instructions_ = [];\n /**\n * @type {number}\n */\n this.zIndex = 0;\n /**\n * @private\n * @type {number}\n */\n this.offset_ = 0;\n\n /**\n * @private\n * @type {ZIndexContextProxy}\n */\n this.context_ = /** @type {ZIndexContextProxy} */ (\n new Proxy(getSharedCanvasContext2D(), {\n get: (target, property) => {\n if (\n typeof (/** @type {*} */ (getSharedCanvasContext2D())[property]) !==\n 'function'\n ) {\n // we only accept calling functions on the proxy, not accessing properties\n return undefined;\n }\n if (!this.instructions_[this.zIndex + this.offset_]) {\n this.instructions_[this.zIndex + this.offset_] = [];\n }\n this.instructions_[this.zIndex + this.offset_].push(property);\n return this.pushMethodArgs_;\n },\n set: (target, property, value) => {\n if (!this.instructions_[this.zIndex + this.offset_]) {\n this.instructions_[this.zIndex + this.offset_] = [];\n }\n this.instructions_[this.zIndex + this.offset_].push(property, value);\n return true;\n },\n })\n );\n }\n\n /**\n * @private\n * @param {...*} args Args.\n * @return {ZIndexContext} This.\n */\n pushMethodArgs_ = (...args) => {\n this.instructions_[this.zIndex + this.offset_].push(args);\n return this;\n };\n\n /**\n * Push a function that renders to the context directly.\n * @param {function(CanvasRenderingContext2D): void} render Function.\n */\n pushFunction(render) {\n this.instructions_[this.zIndex + this.offset_].push(render);\n }\n\n /**\n * Get a proxy for CanvasRenderingContext2D which does not support getting state\n * (e.g. `context.globalAlpha`, which will return `undefined`). To set state, if it relies on a\n * previous state (e.g. `context.globalAlpha = context.globalAlpha / 2`), set a function,\n * e.g. `context.globalAlpha = (context) => context.globalAlpha / 2`.\n * @return {ZIndexContextProxy} Context.\n */\n getContext() {\n return this.context_;\n }\n\n /**\n * @param {CanvasRenderingContext2D} context Context.\n */\n draw(context) {\n this.instructions_.forEach((instructionsAtIndex) => {\n for (let i = 0, ii = instructionsAtIndex.length; i < ii; ++i) {\n const property = instructionsAtIndex[i];\n if (typeof property === 'function') {\n property(context);\n continue;\n }\n const instructionAtIndex = instructionsAtIndex[++i];\n if (typeof (/** @type {*} */ (context)[property]) === 'function') {\n /** @type {*} */ (context)[property](...instructionAtIndex);\n } else {\n if (typeof instructionAtIndex === 'function') {\n /** @type {*} */ (context)[property] = instructionAtIndex(context);\n continue;\n }\n /** @type {*} */ (context)[property] = instructionAtIndex;\n }\n }\n });\n }\n\n clear() {\n this.instructions_.length = 0;\n this.zIndex = 0;\n this.offset_ = 0;\n }\n\n /**\n * Offsets the zIndex by the highest current zIndex. Useful for rendering multiple worlds or tiles, to\n * avoid conflicting context.clip() or context.save()/restore() calls.\n */\n offset() {\n this.offset_ = this.instructions_.length;\n this.zIndex = 0;\n }\n}\n\nexport default ZIndexContext;\n", "/**\n * @module ol/renderer/Layer\n */\nimport ImageState from '../ImageState.js';\nimport Observable from '../Observable.js';\nimport EventType from '../events/EventType.js';\nimport {abstract} from '../util.js';\n\nconst maxStaleKeys = 5;\n\n/**\n * @template {import(\"../layer/Layer.js\").default} LayerType\n */\nclass LayerRenderer extends Observable {\n /**\n * @param {LayerType} layer Layer.\n */\n constructor(layer) {\n super();\n\n /**\n * The renderer is initialized and ready to render.\n * @type {boolean}\n */\n this.ready = true;\n\n /** @private */\n this.boundHandleImageChange_ = this.handleImageChange_.bind(this);\n\n /**\n * @private\n * @type {LayerType}\n */\n this.layer_ = layer;\n\n /**\n * @type {Array}\n * @private\n */\n this.staleKeys_ = new Array();\n\n /**\n * @type {number}\n * @protected\n */\n this.maxStaleKeys = maxStaleKeys;\n }\n\n /**\n * @return {Array} Get the list of stale keys.\n */\n getStaleKeys() {\n return this.staleKeys_;\n }\n\n /**\n * @param {string} key The new stale key.\n */\n prependStaleKey(key) {\n this.staleKeys_.unshift(key);\n if (this.staleKeys_.length > this.maxStaleKeys) {\n this.staleKeys_.length = this.maxStaleKeys;\n }\n }\n\n /**\n * Asynchronous layer level hit detection.\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @return {Promise>} Promise that resolves with\n * an array of features.\n */\n getFeatures(pixel) {\n return abstract();\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n */\n getData(pixel) {\n return null;\n }\n\n /**\n * Determine whether render should be called.\n * @abstract\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n */\n prepareFrame(frameState) {\n return abstract();\n }\n\n /**\n * Render the layer.\n * @abstract\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {HTMLElement|null} target Target that may be used to render content to.\n * @return {HTMLElement|null} The rendered element.\n */\n renderFrame(frameState, target) {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {Array>} matches The hit detected matches with tolerance.\n * @return {T|undefined} Callback result.\n * @template T\n */\n forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n callback,\n matches,\n ) {\n return undefined;\n }\n\n /**\n * @return {LayerType} Layer.\n */\n getLayer() {\n return this.layer_;\n }\n\n /**\n * Perform action necessary to get the layer rendered after new fonts have loaded\n * @abstract\n */\n handleFontsChanged() {}\n\n /**\n * Handle changes in image state.\n * @param {import(\"../events/Event.js\").default} event Image change event.\n * @private\n */\n handleImageChange_(event) {\n const image = /** @type {import(\"../Image.js\").default} */ (event.target);\n if (\n image.getState() === ImageState.LOADED ||\n image.getState() === ImageState.ERROR\n ) {\n this.renderIfReadyAndVisible();\n }\n }\n\n /**\n * Load the image if not already loaded, and register the image change\n * listener if needed.\n * @param {import(\"../Image.js\").default} image Image.\n * @return {boolean} `true` if the image is already loaded, `false` otherwise.\n * @protected\n */\n loadImage(image) {\n let imageState = image.getState();\n if (imageState != ImageState.LOADED && imageState != ImageState.ERROR) {\n image.addEventListener(EventType.CHANGE, this.boundHandleImageChange_);\n }\n if (imageState == ImageState.IDLE) {\n image.load();\n imageState = image.getState();\n }\n return imageState == ImageState.LOADED;\n }\n\n /**\n * @protected\n */\n renderIfReadyAndVisible() {\n const layer = this.getLayer();\n if (layer && layer.getVisible() && layer.getSourceState() === 'ready') {\n layer.changed();\n }\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\n renderDeferred(frameState) {}\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n delete this.layer_;\n super.disposeInternal();\n }\n}\n\nexport default LayerRenderer;\n", "/**\n * @module ol/renderer/canvas/Layer\n */\nimport {equals} from '../../array.js';\nimport {asArray} from '../../color.js';\nimport {createCanvasContext2D} from '../../dom.js';\nimport {\n getBottomLeft,\n getBottomRight,\n getHeight,\n getTopLeft,\n getTopRight,\n getWidth,\n} from '../../extent.js';\nimport RenderEvent from '../../render/Event.js';\nimport RenderEventType from '../../render/EventType.js';\nimport ZIndexContext from '../../render/canvas/ZIndexContext.js';\nimport {\n apply as applyTransform,\n compose as composeTransform,\n create as createTransform,\n makeInverse,\n toString as toTransformString,\n} from '../../transform.js';\nimport LayerRenderer from '../Layer.js';\n\n/**\n * @type {Array}\n */\nexport const canvasPool = [];\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nlet pixelContext = null;\n\nfunction createPixelContext() {\n pixelContext = createCanvasContext2D(1, 1, undefined, {\n willReadFrequently: true,\n });\n}\n\n/**\n * @abstract\n * @template {import(\"../../layer/Layer.js\").default} LayerType\n * @extends {LayerRenderer}\n */\nclass CanvasLayerRenderer extends LayerRenderer {\n /**\n * @param {LayerType} layer Layer.\n */\n constructor(layer) {\n super(layer);\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.container = null;\n\n /**\n * @protected\n * @type {number}\n */\n this.renderedResolution;\n\n /**\n * A temporary transform. The values in this transform should only be used in a\n * function that sets the values.\n * @protected\n * @type {import(\"../../transform.js\").Transform}\n */\n this.tempTransform = createTransform();\n\n /**\n * The transform for rendered pixels to viewport CSS pixels. This transform must\n * be set when rendering a frame and may be used by other functions after rendering.\n * @protected\n * @type {import(\"../../transform.js\").Transform}\n */\n this.pixelTransform = createTransform();\n\n /**\n * The transform for viewport CSS pixels to rendered pixels. This transform must\n * be set when rendering a frame and may be used by other functions after rendering.\n * @protected\n * @type {import(\"../../transform.js\").Transform}\n */\n this.inversePixelTransform = createTransform();\n\n /**\n * @type {CanvasRenderingContext2D}\n */\n this.context = null;\n\n /**\n * @private\n * @type {ZIndexContext}\n */\n this.deferredContext_ = null;\n\n /**\n * @type {boolean}\n */\n this.containerReused = false;\n\n /**\n * @protected\n * @type {import(\"../../Map.js\").FrameState|null}\n */\n this.frameState = null;\n }\n\n /**\n * @param {import('../../DataTile.js').ImageLike} image Image.\n * @param {number} col The column index.\n * @param {number} row The row index.\n * @return {Uint8ClampedArray|null} The image data.\n */\n getImageData(image, col, row) {\n if (!pixelContext) {\n createPixelContext();\n }\n pixelContext.clearRect(0, 0, 1, 1);\n\n let data;\n try {\n pixelContext.drawImage(image, col, row, 1, 1, 0, 0, 1, 1);\n data = pixelContext.getImageData(0, 0, 1, 1).data;\n } catch {\n pixelContext = null;\n return null;\n }\n return data;\n }\n\n /**\n * @param {import('../../Map.js').FrameState} frameState Frame state.\n * @return {string} Background color.\n */\n getBackground(frameState) {\n const layer = this.getLayer();\n let background = layer.getBackground();\n if (typeof background === 'function') {\n background = background(frameState.viewState.resolution);\n }\n return background || undefined;\n }\n\n /**\n * Get a rendering container from an existing target, if compatible.\n * @param {HTMLElement} target Potential render target.\n * @param {string} transform CSS Transform.\n * @param {string} [backgroundColor] Background color.\n */\n useContainer(target, transform, backgroundColor) {\n const layerClassName = this.getLayer().getClassName();\n let container, context;\n if (\n target &&\n target.className === layerClassName &&\n (!backgroundColor ||\n (target &&\n target.style.backgroundColor &&\n equals(\n asArray(target.style.backgroundColor),\n asArray(backgroundColor),\n )))\n ) {\n const canvas = target.firstElementChild;\n if (canvas instanceof HTMLCanvasElement) {\n context = canvas.getContext('2d');\n }\n }\n if (context && context.canvas.style.transform === transform) {\n // Container of the previous layer renderer can be used.\n this.container = target;\n this.context = context;\n this.containerReused = true;\n } else if (this.containerReused) {\n // Previously reused container cannot be used any more.\n this.container = null;\n this.context = null;\n this.containerReused = false;\n } else if (this.container) {\n this.container.style.backgroundColor = null;\n }\n if (!this.container) {\n container = document.createElement('div');\n container.className = layerClassName;\n let style = container.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n context = createCanvasContext2D();\n const canvas = context.canvas;\n container.appendChild(canvas);\n style = canvas.style;\n style.position = 'absolute';\n style.left = '0';\n style.transformOrigin = 'top left';\n this.container = container;\n this.context = context;\n }\n if (\n !this.containerReused &&\n backgroundColor &&\n !this.container.style.backgroundColor\n ) {\n this.container.style.backgroundColor = backgroundColor;\n }\n }\n\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../../extent.js\").Extent} extent Clip extent.\n * @protected\n */\n clipUnrotated(context, frameState, extent) {\n const topLeft = getTopLeft(extent);\n const topRight = getTopRight(extent);\n const bottomRight = getBottomRight(extent);\n const bottomLeft = getBottomLeft(extent);\n\n applyTransform(frameState.coordinateToPixelTransform, topLeft);\n applyTransform(frameState.coordinateToPixelTransform, topRight);\n applyTransform(frameState.coordinateToPixelTransform, bottomRight);\n applyTransform(frameState.coordinateToPixelTransform, bottomLeft);\n\n const inverted = this.inversePixelTransform;\n applyTransform(inverted, topLeft);\n applyTransform(inverted, topRight);\n applyTransform(inverted, bottomRight);\n applyTransform(inverted, bottomLeft);\n\n context.save();\n context.beginPath();\n context.moveTo(Math.round(topLeft[0]), Math.round(topLeft[1]));\n context.lineTo(Math.round(topRight[0]), Math.round(topRight[1]));\n context.lineTo(Math.round(bottomRight[0]), Math.round(bottomRight[1]));\n context.lineTo(Math.round(bottomLeft[0]), Math.round(bottomLeft[1]));\n context.clip();\n }\n\n /**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target that may be used to render content to.\n * @protected\n */\n prepareContainer(frameState, target) {\n const extent = frameState.extent;\n const resolution = frameState.viewState.resolution;\n const rotation = frameState.viewState.rotation;\n const pixelRatio = frameState.pixelRatio;\n const width = Math.round((getWidth(extent) / resolution) * pixelRatio);\n const height = Math.round((getHeight(extent) / resolution) * pixelRatio);\n // set forward and inverse pixel transforms\n composeTransform(\n this.pixelTransform,\n frameState.size[0] / 2,\n frameState.size[1] / 2,\n 1 / pixelRatio,\n 1 / pixelRatio,\n rotation,\n -width / 2,\n -height / 2,\n );\n makeInverse(this.inversePixelTransform, this.pixelTransform);\n\n const canvasTransform = toTransformString(this.pixelTransform);\n this.useContainer(target, canvasTransform, this.getBackground(frameState));\n\n if (!this.containerReused) {\n const canvas = this.context.canvas;\n if (canvas.width != width || canvas.height != height) {\n canvas.width = width;\n canvas.height = height;\n } else {\n this.context.clearRect(0, 0, width, height);\n }\n if (canvasTransform !== canvas.style.transform) {\n canvas.style.transform = canvasTransform;\n }\n }\n }\n\n /**\n * @param {import(\"../../render/EventType.js\").default} type Event type.\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @private\n */\n dispatchRenderEvent_(type, context, frameState) {\n const layer = this.getLayer();\n if (layer.hasListener(type)) {\n const event = new RenderEvent(\n type,\n this.inversePixelTransform,\n frameState,\n context,\n );\n layer.dispatchEvent(event);\n }\n }\n\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n preRender(context, frameState) {\n this.frameState = frameState;\n if (frameState.declutter) {\n return;\n }\n this.dispatchRenderEvent_(RenderEventType.PRERENDER, context, frameState);\n }\n\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n postRender(context, frameState) {\n if (frameState.declutter) {\n return;\n }\n this.dispatchRenderEvent_(RenderEventType.POSTRENDER, context, frameState);\n }\n\n /**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n */\n renderDeferredInternal(frameState) {}\n\n /**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @return {import('../../render/canvas/ZIndexContext.js').ZIndexContextProxy} Context.\n */\n getRenderContext(frameState) {\n if (frameState.declutter && !this.deferredContext_) {\n this.deferredContext_ = new ZIndexContext();\n }\n return frameState.declutter\n ? this.deferredContext_.getContext()\n : this.context;\n }\n\n /**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @override\n */\n renderDeferred(frameState) {\n if (!frameState.declutter) {\n return;\n }\n this.dispatchRenderEvent_(\n RenderEventType.PRERENDER,\n this.context,\n frameState,\n );\n if (frameState.declutter && this.deferredContext_) {\n this.deferredContext_.draw(this.context);\n this.deferredContext_.clear();\n }\n this.renderDeferredInternal(frameState);\n this.dispatchRenderEvent_(\n RenderEventType.POSTRENDER,\n this.context,\n frameState,\n );\n }\n\n /**\n * Creates a transform for rendering to an element that will be rotated after rendering.\n * @param {import(\"../../coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} width Width of the rendered element (in pixels).\n * @param {number} height Height of the rendered element (in pixels).\n * @param {number} offsetX Offset on the x-axis in view coordinates.\n * @protected\n * @return {!import(\"../../transform.js\").Transform} Transform.\n */\n getRenderTransform(\n center,\n resolution,\n rotation,\n pixelRatio,\n width,\n height,\n offsetX,\n ) {\n const dx1 = width / 2;\n const dy1 = height / 2;\n const sx = pixelRatio / resolution;\n const sy = -sx;\n const dx2 = -center[0] + offsetX;\n const dy2 = -center[1];\n return composeTransform(\n this.tempTransform,\n dx1,\n dy1,\n sx,\n sy,\n -rotation,\n dx2,\n dy2,\n );\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n delete this.frameState;\n super.disposeInternal();\n }\n}\n\nexport default CanvasLayerRenderer;\n", "/**\n * @module ol/layer/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n OPACITY: 'opacity',\n VISIBLE: 'visible',\n EXTENT: 'extent',\n Z_INDEX: 'zIndex',\n MAX_RESOLUTION: 'maxResolution',\n MIN_RESOLUTION: 'minResolution',\n MAX_ZOOM: 'maxZoom',\n MIN_ZOOM: 'minZoom',\n SOURCE: 'source',\n MAP: 'map',\n};\n", "/**\n * @module ol/layer/Base\n */\nimport BaseObject from '../Object.js';\nimport {assert} from '../asserts.js';\nimport {clamp} from '../math.js';\nimport {abstract} from '../util.js';\nimport LayerProperty from './Property.js';\n\n/**\n * A css color, or a function called with a view resolution returning a css color.\n *\n * @typedef {string|function(number):string} BackgroundColor\n * @api\n */\n\n/**\n * @typedef {import(\"../ObjectEventType\").Types|'change:extent'|'change:maxResolution'|'change:maxZoom'|\n * 'change:minResolution'|'change:minZoom'|'change:opacity'|'change:visible'|'change:zIndex'} BaseLayerObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} BaseLayerOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number | undefined} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Note that with {@link module:ol/layer/Base~BaseLayer} and all its subclasses, any property set in\n * the options is set as a {@link module:ol/Object~BaseObject} property on the layer object, so\n * is observable, and has get/set accessors.\n *\n * @api\n */\nclass BaseLayer extends BaseObject {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.on;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.once;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.un;\n\n /**\n * @type {BackgroundColor|false}\n * @private\n */\n this.background_ = options.background;\n\n /**\n * @type {Object}\n */\n const properties = Object.assign({}, options);\n if (typeof options.properties === 'object') {\n delete properties.properties;\n Object.assign(properties, options.properties);\n }\n\n properties[LayerProperty.OPACITY] =\n options.opacity !== undefined ? options.opacity : 1;\n assert(\n typeof properties[LayerProperty.OPACITY] === 'number',\n 'Layer opacity must be a number',\n );\n\n properties[LayerProperty.VISIBLE] =\n options.visible !== undefined ? options.visible : true;\n properties[LayerProperty.Z_INDEX] = options.zIndex;\n properties[LayerProperty.MAX_RESOLUTION] =\n options.maxResolution !== undefined ? options.maxResolution : Infinity;\n properties[LayerProperty.MIN_RESOLUTION] =\n options.minResolution !== undefined ? options.minResolution : 0;\n properties[LayerProperty.MIN_ZOOM] =\n options.minZoom !== undefined ? options.minZoom : -Infinity;\n properties[LayerProperty.MAX_ZOOM] =\n options.maxZoom !== undefined ? options.maxZoom : Infinity;\n\n /**\n * @type {string}\n * @private\n */\n this.className_ =\n properties.className !== undefined ? properties.className : 'ol-layer';\n delete properties.className;\n\n this.setProperties(properties);\n\n /**\n * @type {import(\"./Layer.js\").State}\n * @private\n */\n this.state_ = null;\n }\n\n /**\n * Get the background for this layer.\n * @return {BackgroundColor|false} Layer background.\n */\n getBackground() {\n return this.background_;\n }\n\n /**\n * @return {string} CSS class name.\n */\n getClassName() {\n return this.className_;\n }\n\n /**\n * This method is not meant to be called by layers or layer renderers because the state\n * is incorrect if the layer is included in a layer group.\n *\n * @param {boolean} [managed] Layer is managed.\n * @return {import(\"./Layer.js\").State} Layer state.\n */\n getLayerState(managed) {\n /** @type {import(\"./Layer.js\").State} */\n const state =\n this.state_ ||\n /** @type {?} */ ({\n layer: this,\n managed: managed === undefined ? true : managed,\n });\n const zIndex = this.getZIndex();\n state.opacity = clamp(Math.round(this.getOpacity() * 100) / 100, 0, 1);\n state.visible = this.getVisible();\n state.extent = this.getExtent();\n state.zIndex = zIndex === undefined && !state.managed ? Infinity : zIndex;\n state.maxResolution = this.getMaxResolution();\n state.minResolution = Math.max(this.getMinResolution(), 0);\n state.minZoom = this.getMinZoom();\n state.maxZoom = this.getMaxZoom();\n this.state_ = state;\n\n return state;\n }\n\n /**\n * @abstract\n * @param {Array} [array] Array of layers (to be\n * modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(array) {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {Array} [states] Optional list of layer\n * states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(states) {\n return abstract();\n }\n\n /**\n * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it\n * will be visible regardless of extent.\n * @return {import(\"../extent.js\").Extent|undefined} The layer extent.\n * @observable\n * @api\n */\n getExtent() {\n return /** @type {import(\"../extent.js\").Extent|undefined} */ (\n this.get(LayerProperty.EXTENT)\n );\n }\n\n /**\n * Return the maximum resolution of the layer. Returns Infinity if\n * the layer has no maximum resolution set.\n * @return {number} The maximum resolution of the layer.\n * @observable\n * @api\n */\n getMaxResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_RESOLUTION));\n }\n\n /**\n * Return the minimum resolution of the layer. Returns 0 if\n * the layer has no minimum resolution set.\n * @return {number} The minimum resolution of the layer.\n * @observable\n * @api\n */\n getMinResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_RESOLUTION));\n }\n\n /**\n * Return the minimum zoom level of the layer. Returns -Infinity if\n * the layer has no minimum zoom set.\n * @return {number} The minimum zoom level of the layer.\n * @observable\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_ZOOM));\n }\n\n /**\n * Return the maximum zoom level of the layer. Returns Infinity if\n * the layer has no maximum zoom set.\n * @return {number} The maximum zoom level of the layer.\n * @observable\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_ZOOM));\n }\n\n /**\n * Return the opacity of the layer (between 0 and 1).\n * @return {number} The opacity of the layer.\n * @observable\n * @api\n */\n getOpacity() {\n return /** @type {number} */ (this.get(LayerProperty.OPACITY));\n }\n\n /**\n * @abstract\n * @return {import(\"../source/Source.js\").State} Source state.\n */\n getSourceState() {\n return abstract();\n }\n\n /**\n * Return the value of this layer's `visible` property. To find out whether the layer\n * is visible on a map, use `isVisible()` instead.\n * @return {boolean} The value of the `visible` property of the layer.\n * @observable\n * @api\n */\n getVisible() {\n return /** @type {boolean} */ (this.get(LayerProperty.VISIBLE));\n }\n\n /**\n * Return the Z-index of the layer, which is used to order layers before\n * rendering. Returns undefined if the layer is unmanaged.\n * @return {number|undefined} The Z-index of the layer.\n * @observable\n * @api\n */\n getZIndex() {\n return /** @type {number|undefined} */ (this.get(LayerProperty.Z_INDEX));\n }\n\n /**\n * Sets the background color.\n * @param {BackgroundColor} [background] Background color.\n */\n setBackground(background) {\n this.background_ = background;\n this.changed();\n }\n\n /**\n * Set the extent at which the layer is visible. If `undefined`, the layer\n * will be visible at all extents.\n * @param {import(\"../extent.js\").Extent|undefined} extent The extent of the layer.\n * @observable\n * @api\n */\n setExtent(extent) {\n this.set(LayerProperty.EXTENT, extent);\n }\n\n /**\n * Set the maximum resolution at which the layer is visible.\n * @param {number} maxResolution The maximum resolution of the layer.\n * @observable\n * @api\n */\n setMaxResolution(maxResolution) {\n this.set(LayerProperty.MAX_RESOLUTION, maxResolution);\n }\n\n /**\n * Set the minimum resolution at which the layer is visible.\n * @param {number} minResolution The minimum resolution of the layer.\n * @observable\n * @api\n */\n setMinResolution(minResolution) {\n this.set(LayerProperty.MIN_RESOLUTION, minResolution);\n }\n\n /**\n * Set the maximum zoom (exclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} maxZoom The maximum zoom of the layer.\n * @observable\n * @api\n */\n setMaxZoom(maxZoom) {\n this.set(LayerProperty.MAX_ZOOM, maxZoom);\n }\n\n /**\n * Set the minimum zoom (inclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} minZoom The minimum zoom of the layer.\n * @observable\n * @api\n */\n setMinZoom(minZoom) {\n this.set(LayerProperty.MIN_ZOOM, minZoom);\n }\n\n /**\n * Set the opacity of the layer, allowed values range from 0 to 1.\n * @param {number} opacity The opacity of the layer.\n * @observable\n * @api\n */\n setOpacity(opacity) {\n assert(typeof opacity === 'number', 'Layer opacity must be a number');\n this.set(LayerProperty.OPACITY, opacity);\n }\n\n /**\n * Set the visibility of the layer (`true` or `false`).\n * @param {boolean} visible The visibility of the layer.\n * @observable\n * @api\n */\n setVisible(visible) {\n this.set(LayerProperty.VISIBLE, visible);\n }\n\n /**\n * Set Z-index of the layer, which is used to order layers before rendering.\n * The default Z-index is 0.\n * @param {number} zindex The z-index of the layer.\n * @observable\n * @api\n */\n setZIndex(zindex) {\n this.set(LayerProperty.Z_INDEX, zindex);\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n if (this.state_) {\n this.state_.layer = null;\n this.state_ = null;\n }\n super.disposeInternal();\n }\n}\n\nexport default BaseLayer;\n", "/**\n * @module ol/layer/Layer\n */\nimport View from '../View.js';\nimport {assert} from '../asserts.js';\nimport EventType from '../events/EventType.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {intersects} from '../extent.js';\nimport RenderEventType from '../render/EventType.js';\nimport BaseLayer from './Base.js';\nimport LayerProperty from './Property.js';\n\n/**\n * @typedef {function(import(\"../Map.js\").FrameState):HTMLElement} RenderFunction\n */\n\n/**\n * @typedef {'sourceready'|'change:source'} LayerEventType\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} LayerOnSignature\n */\n\n/**\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {SourceType} [source] Source for this layer. If not provided to the constructor,\n * the source can be set by calling {@link module:ol/layer/Layer~Layer#setSource layer.setSource(source)} after\n * construction.\n * @property {import(\"../Map.js\").default|null} [map] Map.\n * @property {RenderFunction} [render] Render function. Takes the frame state as input and is expected to return an\n * HTML element. Will overwrite the default rendering for the layer.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./Layer.js\").default} layer Layer.\n * @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.\n * @property {boolean} visible Visible.\n * @property {boolean} managed Managed.\n * @property {import(\"../extent.js\").Extent} [extent] Extent.\n * @property {number} zIndex ZIndex.\n * @property {number} maxResolution Maximum resolution.\n * @property {number} minResolution Minimum resolution.\n * @property {number} minZoom Minimum zoom.\n * @property {number} maxZoom Maximum zoom.\n */\n\n/**\n * @classdesc\n * Base class from which all layer types are derived. This should only be instantiated\n * in the case where a custom layer is added to the map with a custom `render` function.\n * Such a function can be specified in the `options` object, and is expected to return an HTML element.\n *\n * A visual representation of raster or vector map data.\n * Layers group together those properties that pertain to how the data is to be\n * displayed, irrespective of the source of that data.\n *\n * Layers are usually added to a map with [map.addLayer()]{@link import(\"../Map.js\").default#addLayer}.\n * Components like {@link module:ol/interaction/Draw~Draw} use unmanaged layers\n * internally. These unmanaged layers are associated with the map using\n * [layer.setMap()]{@link module:ol/layer/Layer~Layer#setMap} instead.\n *\n * A generic `change` event is fired when the state of the source changes.\n * A `sourceready` event is fired when the layer's source is ready.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n * @fires import(\"../events/Event.js\").BaseEvent#sourceready\n *\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @template {import(\"../renderer/Layer.js\").default} [RendererType=import(\"../renderer/Layer.js\").default]\n * @api\n */\nclass Layer extends BaseLayer {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n const baseOptions = Object.assign({}, options);\n delete baseOptions.source;\n\n super(baseOptions);\n\n /***\n * @type {LayerOnSignature}\n */\n this.on;\n\n /***\n * @type {LayerOnSignature}\n */\n this.once;\n\n /***\n * @type {LayerOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.mapPrecomposeKey_ = null;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.mapRenderKey_ = null;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.sourceChangeKey_ = null;\n\n /**\n * @private\n * @type {RendererType}\n */\n this.renderer_ = null;\n\n /**\n * @private\n * @type {boolean}\n */\n this.sourceReady_ = false;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.rendered = false;\n\n // Overwrite default render method with a custom one\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.map) {\n this.setMap(options.map);\n }\n\n this.addChangeListener(\n LayerProperty.SOURCE,\n this.handleSourcePropertyChange_,\n );\n\n const source = options.source\n ? /** @type {SourceType} */ (options.source)\n : null;\n this.setSource(source);\n }\n\n /**\n * @param {Array} [array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n * @override\n */\n getLayersArray(array) {\n array = array ? array : [];\n array.push(this);\n return array;\n }\n\n /**\n * @param {Array} [states] Optional list of layer states (to be modified in place).\n * @return {Array} List of layer states.\n * @override\n */\n getLayerStatesArray(states) {\n states = states ? states : [];\n states.push(this.getLayerState());\n return states;\n }\n\n /**\n * Get the layer source.\n * @return {SourceType|null} The layer source (or `null` if not yet set).\n * @observable\n * @api\n */\n getSource() {\n return /** @type {SourceType} */ (this.get(LayerProperty.SOURCE)) || null;\n }\n\n /**\n * @return {SourceType|null} The source being rendered.\n */\n getRenderSource() {\n return this.getSource();\n }\n\n /**\n * @return {import(\"../source/Source.js\").State} Source state.\n * @override\n */\n getSourceState() {\n const source = this.getSource();\n return !source ? 'undefined' : source.getState();\n }\n\n /**\n * @private\n */\n handleSourceChange_() {\n this.changed();\n if (this.sourceReady_ || this.getSource().getState() !== 'ready') {\n return;\n }\n this.sourceReady_ = true;\n this.dispatchEvent('sourceready');\n }\n\n /**\n * @private\n */\n handleSourcePropertyChange_() {\n if (this.sourceChangeKey_) {\n unlistenByKey(this.sourceChangeKey_);\n this.sourceChangeKey_ = null;\n }\n this.sourceReady_ = false;\n const source = this.getSource();\n if (source) {\n this.sourceChangeKey_ = listen(\n source,\n EventType.CHANGE,\n this.handleSourceChange_,\n this,\n );\n if (source.getState() === 'ready') {\n this.sourceReady_ = true;\n setTimeout(() => {\n this.dispatchEvent('sourceready');\n }, 0);\n }\n this.clearRenderer();\n }\n this.changed();\n }\n\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Promise>} Promise that resolves with\n * an array of features.\n */\n getFeatures(pixel) {\n if (!this.renderer_) {\n return Promise.resolve([]);\n }\n return this.renderer_.getFeatures(pixel);\n }\n\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n */\n getData(pixel) {\n if (!this.renderer_ || !this.rendered) {\n return null;\n }\n return this.renderer_.getData(pixel);\n }\n\n /**\n * The layer is visible on the map view, i.e. within its min/max resolution or zoom and\n * extent, not set to `visible: false`, and not inside a layer group that is set\n * to `visible: false`.\n * @param {View|import(\"../View.js\").ViewStateLayerStateExtent} [view] View or {@link import(\"../Map.js\").FrameState}.\n * Only required when the layer is not added to a map.\n * @return {boolean} The layer is visible in the map view.\n * @api\n */\n isVisible(view) {\n let frameState;\n const map = this.getMapInternal();\n if (!view && map) {\n view = map.getView();\n }\n if (view instanceof View) {\n frameState = {\n viewState: view.getState(),\n extent: view.calculateExtent(),\n };\n } else {\n frameState = view;\n }\n if (!frameState.layerStatesArray && map) {\n frameState.layerStatesArray = map.getLayerGroup().getLayerStatesArray();\n }\n let layerState;\n if (frameState.layerStatesArray) {\n layerState = frameState.layerStatesArray.find(\n (layerState) => layerState.layer === this,\n );\n if (!layerState) {\n return false;\n }\n } else {\n layerState = this.getLayerState();\n }\n\n const layerExtent = this.getExtent();\n\n return (\n inView(layerState, frameState.viewState) &&\n (!layerExtent || intersects(layerExtent, frameState.extent))\n );\n }\n\n /**\n * Get the attributions of the source of this layer for the given view.\n * @param {View|import(\"../View.js\").ViewStateLayerStateExtent} [view] View or {@link import(\"../Map.js\").FrameState}.\n * Only required when the layer is not added to a map.\n * @return {Array} Attributions for this layer at the given view.\n * @api\n */\n getAttributions(view) {\n if (!this.isVisible(view)) {\n return [];\n }\n const getAttributions = this.getSource()?.getAttributions();\n if (!getAttributions) {\n return [];\n }\n const frameState =\n view instanceof View ? view.getViewStateAndExtent() : view;\n let attributions = getAttributions(frameState);\n if (!Array.isArray(attributions)) {\n attributions = [attributions];\n }\n return attributions;\n }\n\n /**\n * In charge to manage the rendering of the layer. One layer type is\n * bounded with one layer renderer.\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target which the renderer may (but need not) use\n * for rendering its content.\n * @return {HTMLElement|null} The rendered element.\n */\n render(frameState, target) {\n const layerRenderer = this.getRenderer();\n\n if (layerRenderer.prepareFrame(frameState)) {\n this.rendered = true;\n return layerRenderer.renderFrame(frameState, target);\n }\n return null;\n }\n\n /**\n * Called when a layer is not visible during a map render.\n */\n unrender() {\n this.rendered = false;\n }\n\n /** @return {string} Declutter */\n getDeclutter() {\n return undefined;\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../layer/Layer.js\").State} layerState Layer state.\n */\n renderDeclutter(frameState, layerState) {}\n\n /**\n * When the renderer follows a layout -> render approach, do the final rendering here.\n * @param {import('../Map.js').FrameState} frameState Frame state\n */\n renderDeferred(frameState) {\n const layerRenderer = this.getRenderer();\n if (!layerRenderer) {\n return;\n }\n layerRenderer.renderDeferred(frameState);\n }\n\n /**\n * For use inside the library only.\n * @param {import(\"../Map.js\").default|null} map Map.\n */\n setMapInternal(map) {\n if (!map) {\n this.unrender();\n }\n this.set(LayerProperty.MAP, map);\n }\n\n /**\n * For use inside the library only.\n * @return {import(\"../Map.js\").default|null} Map.\n */\n getMapInternal() {\n return this.get(LayerProperty.MAP);\n }\n\n /**\n * Sets the layer to be rendered on top of other layers on a map. The map will\n * not manage this layer in its layers collection. This\n * is useful for temporary layers. To remove an unmanaged layer from the map,\n * use `#setMap(null)`.\n *\n * To add the layer to a map and have it managed by the map, use\n * {@link module:ol/Map~Map#addLayer} instead.\n * @param {import(\"../Map.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.mapPrecomposeKey_) {\n unlistenByKey(this.mapPrecomposeKey_);\n this.mapPrecomposeKey_ = null;\n }\n if (!map) {\n this.changed();\n }\n if (this.mapRenderKey_) {\n unlistenByKey(this.mapRenderKey_);\n this.mapRenderKey_ = null;\n }\n if (map) {\n this.mapPrecomposeKey_ = listen(\n map,\n RenderEventType.PRECOMPOSE,\n this.handlePrecompose_,\n this,\n );\n this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map);\n this.changed();\n }\n }\n\n /**\n * @param {import(\"../events/Event.js\").default} renderEvent Render event\n * @private\n */\n handlePrecompose_(renderEvent) {\n const layerStatesArray =\n /** @type {import(\"../render/Event.js\").default} */ (renderEvent)\n .frameState.layerStatesArray;\n const layerState = this.getLayerState(false);\n assert(\n !layerStatesArray.some(\n (arrayLayerState) => arrayLayerState.layer === layerState.layer,\n ),\n 'A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both.',\n );\n layerStatesArray.push(layerState);\n }\n\n /**\n * Set the layer source.\n * @param {SourceType|null} source The layer source.\n * @observable\n * @api\n */\n setSource(source) {\n this.set(LayerProperty.SOURCE, source);\n }\n\n /**\n * Get the renderer for this layer.\n * @return {RendererType|null} The layer renderer.\n */\n getRenderer() {\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n return this.renderer_;\n }\n\n /**\n * @return {boolean} The layer has a renderer.\n */\n hasRenderer() {\n return !!this.renderer_;\n }\n\n /**\n * Create a renderer for this layer.\n * @return {RendererType} A layer renderer.\n * @protected\n */\n createRenderer() {\n return null;\n }\n\n /**\n * This will clear the renderer so that a new one can be created next time it is needed\n */\n clearRenderer() {\n if (this.renderer_) {\n this.renderer_.dispose();\n delete this.renderer_;\n }\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.clearRenderer();\n this.setSource(null);\n super.disposeInternal();\n }\n}\n\n/**\n * Return `true` if the layer is visible and if the provided view state\n * has resolution and zoom levels that are in range of the layer's min/max.\n * @param {State} layerState Layer state.\n * @param {import(\"../View.js\").State} viewState View state.\n * @return {boolean} The layer is visible at the given view state.\n */\nexport function inView(layerState, viewState) {\n if (!layerState.visible) {\n return false;\n }\n const resolution = viewState.resolution;\n if (\n resolution < layerState.minResolution ||\n resolution >= layerState.maxResolution\n ) {\n return false;\n }\n const zoom = viewState.zoom;\n return zoom > layerState.minZoom && zoom <= layerState.maxZoom;\n}\n\nexport default Layer;\n"], - "mappings": "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", - "names": ["none", "equals", "none", "EventType_default", "Event_default", "Event_default", "EventType_default", "Layer_default", "layerState", "EventType_default", "Layer_default"] -} diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-7RGUNZVN.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-7RGUNZVN.js new file mode 100644 index 0000000..71c7809 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-7RGUNZVN.js @@ -0,0 +1,1216 @@ +import { + disable +} from "./chunk-RMGZ5HGX.js"; +import { + Polygon_default +} from "./chunk-47JK3GLV.js"; +import { + Pointer_default, + centroid +} from "./chunk-LKZG5HMW.js"; +import { + Interaction_default, + pan, + zoomByDelta +} from "./chunk-F2HSAX6I.js"; +import { + easeOut +} from "./chunk-LMC3RO5P.js"; +import { + Collection_default +} from "./chunk-4E4H2AGX.js"; +import { + all, + altShiftKeysOnly, + always, + focusWithTabindex, + mouseActionButton, + mouseOnly, + noModifierKeys, + platformModifierKey, + primaryAction, + shiftKeyOnly, + targetNotEditable +} from "./chunk-VAUZYTLA.js"; +import { + DEVICE_PIXEL_RATIO, + FIREFOX +} from "./chunk-ZPDML4Q3.js"; +import { + MapBrowserEventType_default +} from "./chunk-POVGKIBQ.js"; +import { + rotate, + scale +} from "./chunk-WXT7AISE.js"; +import { + Disposable_default, + Event_default +} from "./chunk-V2VQBN44.js"; +import { + clamp +} from "./chunk-V7KTD4MH.js"; +import { + EventType_default, + FALSE +} from "./chunk-33VDV4DG.js"; + +// node_modules/ol/Kinetic.js +var Kinetic = class { + /** + * @param {number} decay Rate of decay (must be negative). + * @param {number} minVelocity Minimum velocity (pixels/millisecond). + * @param {number} delay Delay to consider to calculate the kinetic + * initial values (milliseconds). + */ + constructor(decay, minVelocity, delay) { + this.decay_ = decay; + this.minVelocity_ = minVelocity; + this.delay_ = delay; + this.points_ = []; + this.angle_ = 0; + this.initialVelocity_ = 0; + } + /** + * FIXME empty description for jsdoc + */ + begin() { + this.points_.length = 0; + this.angle_ = 0; + this.initialVelocity_ = 0; + } + /** + * @param {number} x X. + * @param {number} y Y. + */ + update(x, y) { + this.points_.push(x, y, Date.now()); + } + /** + * @return {boolean} Whether we should do kinetic animation. + */ + end() { + if (this.points_.length < 6) { + return false; + } + const delay = Date.now() - this.delay_; + const lastIndex = this.points_.length - 3; + if (this.points_[lastIndex + 2] < delay) { + return false; + } + let firstIndex = lastIndex - 3; + while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) { + firstIndex -= 3; + } + const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2]; + if (duration < 1e3 / 60) { + return false; + } + const dx = this.points_[lastIndex] - this.points_[firstIndex]; + const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1]; + this.angle_ = Math.atan2(dy, dx); + this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration; + return this.initialVelocity_ > this.minVelocity_; + } + /** + * @return {number} Total distance travelled (pixels). + */ + getDistance() { + return (this.minVelocity_ - this.initialVelocity_) / this.decay_; + } + /** + * @return {number} Angle of the kinetic panning animation (radians). + */ + getAngle() { + return this.angle_; + } +}; +var Kinetic_default = Kinetic; + +// node_modules/ol/interaction/DoubleClickZoom.js +var DoubleClickZoom = class extends Interaction_default { + /** + * @param {Options} [options] Options. + */ + constructor(options) { + super(); + options = options ? options : {}; + this.delta_ = options.delta ? options.delta : 1; + this.duration_ = options.duration !== void 0 ? options.duration : 250; + } + /** + * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a + * doubleclick) and eventually zooms the map. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @override + */ + handleEvent(mapBrowserEvent) { + let stopEvent = false; + if (mapBrowserEvent.type == MapBrowserEventType_default.DBLCLICK) { + const browserEvent = ( + /** @type {MouseEvent} */ + mapBrowserEvent.originalEvent + ); + const map = mapBrowserEvent.map; + const anchor = mapBrowserEvent.coordinate; + const delta = browserEvent.shiftKey ? -this.delta_ : this.delta_; + const view = map.getView(); + zoomByDelta(view, delta, anchor, this.duration_); + browserEvent.preventDefault(); + stopEvent = true; + } + return !stopEvent; + } +}; +var DoubleClickZoom_default = DoubleClickZoom; + +// node_modules/ol/interaction/DragPan.js +var DragPan = class extends Pointer_default { + /** + * @param {Options} [options] Options. + */ + constructor(options) { + super({ + stopDown: FALSE + }); + options = options ? options : {}; + this.kinetic_ = options.kinetic; + this.lastCentroid = null; + this.lastPointersCount_; + this.panning_ = false; + const condition = options.condition ? options.condition : all(noModifierKeys, primaryAction); + this.condition_ = options.onFocusOnly ? all(focusWithTabindex, condition) : condition; + this.noKinetic_ = false; + } + /** + * Handle pointer drag events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @override + */ + handleDragEvent(mapBrowserEvent) { + const map = mapBrowserEvent.map; + if (!this.panning_) { + this.panning_ = true; + map.getView().beginInteraction(); + } + const targetPointers = this.targetPointers; + const centroid2 = map.getEventPixel(centroid(targetPointers)); + if (targetPointers.length == this.lastPointersCount_) { + if (this.kinetic_) { + this.kinetic_.update(centroid2[0], centroid2[1]); + } + if (this.lastCentroid) { + const delta = [ + this.lastCentroid[0] - centroid2[0], + centroid2[1] - this.lastCentroid[1] + ]; + const map2 = mapBrowserEvent.map; + const view = map2.getView(); + scale(delta, view.getResolution()); + rotate(delta, view.getRotation()); + view.adjustCenterInternal(delta); + } + } else if (this.kinetic_) { + this.kinetic_.begin(); + } + this.lastCentroid = centroid2; + this.lastPointersCount_ = targetPointers.length; + mapBrowserEvent.originalEvent.preventDefault(); + } + /** + * Handle pointer up events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @return {boolean} If the event was consumed. + * @override + */ + handleUpEvent(mapBrowserEvent) { + const map = mapBrowserEvent.map; + const view = map.getView(); + if (this.targetPointers.length === 0) { + if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) { + const distance = this.kinetic_.getDistance(); + const angle = this.kinetic_.getAngle(); + const center = view.getCenterInternal(); + const centerpx = map.getPixelFromCoordinateInternal(center); + const dest = map.getCoordinateFromPixelInternal([ + centerpx[0] - distance * Math.cos(angle), + centerpx[1] - distance * Math.sin(angle) + ]); + view.animateInternal({ + center: view.getConstrainedCenter(dest), + duration: 500, + easing: easeOut + }); + } + if (this.panning_) { + this.panning_ = false; + view.endInteraction(); + } + return false; + } + if (this.kinetic_) { + this.kinetic_.begin(); + } + this.lastCentroid = null; + return true; + } + /** + * Handle pointer down events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @return {boolean} If the event was consumed. + * @override + */ + handleDownEvent(mapBrowserEvent) { + if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) { + const map = mapBrowserEvent.map; + const view = map.getView(); + this.lastCentroid = null; + if (view.getAnimating()) { + view.cancelAnimations(); + } + if (this.kinetic_) { + this.kinetic_.begin(); + } + this.noKinetic_ = this.targetPointers.length > 1; + return true; + } + return false; + } +}; +var DragPan_default = DragPan; + +// node_modules/ol/interaction/DragRotate.js +var DragRotate = class extends Pointer_default { + /** + * @param {Options} [options] Options. + */ + constructor(options) { + options = options ? options : {}; + super({ + stopDown: FALSE + }); + this.condition_ = options.condition ? options.condition : altShiftKeysOnly; + this.lastAngle_ = void 0; + this.duration_ = options.duration !== void 0 ? options.duration : 250; + } + /** + * Handle pointer drag events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @override + */ + handleDragEvent(mapBrowserEvent) { + if (!mouseOnly(mapBrowserEvent)) { + return; + } + const map = mapBrowserEvent.map; + const view = map.getView(); + if (view.getConstraints().rotation === disable) { + return; + } + const size = map.getSize(); + const offset = mapBrowserEvent.pixel; + const theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2); + if (this.lastAngle_ !== void 0) { + const delta = theta - this.lastAngle_; + view.adjustRotationInternal(-delta); + } + this.lastAngle_ = theta; + } + /** + * Handle pointer up events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @return {boolean} If the event was consumed. + * @override + */ + handleUpEvent(mapBrowserEvent) { + if (!mouseOnly(mapBrowserEvent)) { + return true; + } + const map = mapBrowserEvent.map; + const view = map.getView(); + view.endInteraction(this.duration_); + return false; + } + /** + * Handle pointer down events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @return {boolean} If the event was consumed. + * @override + */ + handleDownEvent(mapBrowserEvent) { + if (!mouseOnly(mapBrowserEvent)) { + return false; + } + if (mouseActionButton(mapBrowserEvent) && this.condition_(mapBrowserEvent)) { + const map = mapBrowserEvent.map; + map.getView().beginInteraction(); + this.lastAngle_ = void 0; + return true; + } + return false; + } +}; +var DragRotate_default = DragRotate; + +// node_modules/ol/render/Box.js +var RenderBox = class extends Disposable_default { + /** + * @param {string} className CSS class name. + */ + constructor(className) { + super(); + this.geometry_ = null; + this.element_ = document.createElement("div"); + this.element_.style.position = "absolute"; + this.element_.style.pointerEvents = "auto"; + this.element_.className = "ol-box " + className; + this.map_ = null; + this.startPixel_ = null; + this.endPixel_ = null; + } + /** + * Clean up. + * @override + */ + disposeInternal() { + this.setMap(null); + } + /** + * @private + */ + render_() { + const startPixel = this.startPixel_; + const endPixel = this.endPixel_; + const px = "px"; + const style = this.element_.style; + style.left = Math.min(startPixel[0], endPixel[0]) + px; + style.top = Math.min(startPixel[1], endPixel[1]) + px; + style.width = Math.abs(endPixel[0] - startPixel[0]) + px; + style.height = Math.abs(endPixel[1] - startPixel[1]) + px; + } + /** + * @param {import("../Map.js").default|null} map Map. + */ + setMap(map) { + if (this.map_) { + this.map_.getOverlayContainer().removeChild(this.element_); + const style = this.element_.style; + style.left = "inherit"; + style.top = "inherit"; + style.width = "inherit"; + style.height = "inherit"; + } + this.map_ = map; + if (this.map_) { + this.map_.getOverlayContainer().appendChild(this.element_); + } + } + /** + * @param {import("../pixel.js").Pixel} startPixel Start pixel. + * @param {import("../pixel.js").Pixel} endPixel End pixel. + */ + setPixels(startPixel, endPixel) { + this.startPixel_ = startPixel; + this.endPixel_ = endPixel; + this.createOrUpdateGeometry(); + this.render_(); + } + /** + * Creates or updates the cached geometry. + */ + createOrUpdateGeometry() { + if (!this.map_) { + return; + } + const startPixel = this.startPixel_; + const endPixel = this.endPixel_; + const pixels = [ + startPixel, + [startPixel[0], endPixel[1]], + endPixel, + [endPixel[0], startPixel[1]] + ]; + const coordinates = pixels.map( + this.map_.getCoordinateFromPixelInternal, + this.map_ + ); + coordinates[4] = coordinates[0].slice(); + if (!this.geometry_) { + this.geometry_ = new Polygon_default([coordinates]); + } else { + this.geometry_.setCoordinates([coordinates]); + } + } + /** + * @return {import("../geom/Polygon.js").default} Geometry. + */ + getGeometry() { + return this.geometry_; + } +}; +var Box_default = RenderBox; + +// node_modules/ol/interaction/DragBox.js +var DragBoxEventType = { + /** + * Triggered upon drag box start. + * @event DragBoxEvent#boxstart + * @api + */ + BOXSTART: "boxstart", + /** + * Triggered on drag when box is active. + * @event DragBoxEvent#boxdrag + * @api + */ + BOXDRAG: "boxdrag", + /** + * Triggered upon drag box end. + * @event DragBoxEvent#boxend + * @api + */ + BOXEND: "boxend", + /** + * Triggered upon drag box canceled. + * @event DragBoxEvent#boxcancel + * @api + */ + BOXCANCEL: "boxcancel" +}; +var DragBoxEvent = class extends Event_default { + /** + * @param {string} type The event type. + * @param {import("../coordinate.js").Coordinate} coordinate The event coordinate. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Originating event. + */ + constructor(type, coordinate, mapBrowserEvent) { + super(type); + this.coordinate = coordinate; + this.mapBrowserEvent = mapBrowserEvent; + } +}; +var DragBox = class extends Pointer_default { + /** + * @param {Options} [options] Options. + */ + constructor(options) { + super(); + this.on; + this.once; + this.un; + options = options ?? {}; + this.box_ = new Box_default(options.className || "ol-dragbox"); + this.minArea_ = options.minArea ?? 64; + if (options.onBoxEnd) { + this.onBoxEnd = options.onBoxEnd; + } + this.startPixel_ = null; + this.condition_ = options.condition ?? mouseActionButton; + this.boxEndCondition_ = options.boxEndCondition ?? this.defaultBoxEndCondition; + } + /** + * The default condition for determining whether the boxend event + * should fire. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent The originating MapBrowserEvent + * leading to the box end. + * @param {import("../pixel.js").Pixel} startPixel The starting pixel of the box. + * @param {import("../pixel.js").Pixel} endPixel The end pixel of the box. + * @return {boolean} Whether or not the boxend condition should be fired. + */ + defaultBoxEndCondition(mapBrowserEvent, startPixel, endPixel) { + const width = endPixel[0] - startPixel[0]; + const height = endPixel[1] - startPixel[1]; + return width * width + height * height >= this.minArea_; + } + /** + * Returns geometry of last drawn box. + * @return {import("../geom/Polygon.js").default} Geometry. + * @api + */ + getGeometry() { + return this.box_.getGeometry(); + } + /** + * Handle pointer drag events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @override + */ + handleDragEvent(mapBrowserEvent) { + if (!this.startPixel_) { + return; + } + this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel); + this.dispatchEvent( + new DragBoxEvent( + DragBoxEventType.BOXDRAG, + mapBrowserEvent.coordinate, + mapBrowserEvent + ) + ); + } + /** + * Handle pointer up events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @return {boolean} If the event was consumed. + * @override + */ + handleUpEvent(mapBrowserEvent) { + if (!this.startPixel_) { + return false; + } + const completeBox = this.boxEndCondition_( + mapBrowserEvent, + this.startPixel_, + mapBrowserEvent.pixel + ); + if (completeBox) { + this.onBoxEnd(mapBrowserEvent); + } + this.dispatchEvent( + new DragBoxEvent( + completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL, + mapBrowserEvent.coordinate, + mapBrowserEvent + ) + ); + this.box_.setMap(null); + this.startPixel_ = null; + return false; + } + /** + * Handle pointer down events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @return {boolean} If the event was consumed. + * @override + */ + handleDownEvent(mapBrowserEvent) { + if (this.condition_(mapBrowserEvent)) { + this.startPixel_ = mapBrowserEvent.pixel; + this.box_.setMap(mapBrowserEvent.map); + this.box_.setPixels(this.startPixel_, this.startPixel_); + this.dispatchEvent( + new DragBoxEvent( + DragBoxEventType.BOXSTART, + mapBrowserEvent.coordinate, + mapBrowserEvent + ) + ); + return true; + } + return false; + } + /** + * Function to execute just before `onboxend` is fired + * @param {import("../MapBrowserEvent.js").default} event Event. + */ + onBoxEnd(event) { + } + /** + * Activate or deactivate the interaction. + * @param {boolean} active Active. + * @observable + * @api + * @override + */ + setActive(active) { + if (!active) { + this.box_.setMap(null); + if (this.startPixel_) { + this.dispatchEvent( + new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null) + ); + this.startPixel_ = null; + } + } + super.setActive(active); + } + /** + * @param {import("../Map.js").default|null} map Map. + * @override + */ + setMap(map) { + const oldMap = this.getMap(); + if (oldMap) { + this.box_.setMap(null); + if (this.startPixel_) { + this.dispatchEvent( + new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null) + ); + this.startPixel_ = null; + } + } + super.setMap(map); + } +}; +var DragBox_default = DragBox; + +// node_modules/ol/interaction/DragZoom.js +var DragZoom = class extends DragBox_default { + /** + * @param {Options} [options] Options. + */ + constructor(options) { + options = options ? options : {}; + const condition = options.condition ? options.condition : shiftKeyOnly; + super({ + condition, + className: options.className || "ol-dragzoom", + minArea: options.minArea + }); + this.duration_ = options.duration !== void 0 ? options.duration : 200; + this.out_ = options.out !== void 0 ? options.out : false; + } + /** + * Function to execute just before `onboxend` is fired + * @param {import("../MapBrowserEvent.js").default} event Event. + * @override + */ + onBoxEnd(event) { + const map = this.getMap(); + const view = ( + /** @type {!import("../View.js").default} */ + map.getView() + ); + let geometry = this.getGeometry(); + if (this.out_) { + const rotatedExtent = view.rotatedExtentForGeometry(geometry); + const resolution = view.getResolutionForExtentInternal(rotatedExtent); + const factor = view.getResolution() / resolution; + geometry = geometry.clone(); + geometry.scale(factor * factor); + } + view.fitInternal(geometry, { + duration: this.duration_, + easing: easeOut + }); + } +}; +var DragZoom_default = DragZoom; + +// node_modules/ol/events/Key.js +var Key_default = { + LEFT: "ArrowLeft", + UP: "ArrowUp", + RIGHT: "ArrowRight", + DOWN: "ArrowDown" +}; + +// node_modules/ol/interaction/KeyboardPan.js +var KeyboardPan = class extends Interaction_default { + /** + * @param {Options} [options] Options. + */ + constructor(options) { + super(); + options = options || {}; + this.defaultCondition_ = function(mapBrowserEvent) { + return noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent); + }; + this.condition_ = options.condition !== void 0 ? options.condition : this.defaultCondition_; + this.duration_ = options.duration !== void 0 ? options.duration : 100; + this.pixelDelta_ = options.pixelDelta !== void 0 ? options.pixelDelta : 128; + } + /** + * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a + * `KeyEvent`, and decides the direction to pan to (if an arrow key was + * pressed). + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @override + */ + handleEvent(mapBrowserEvent) { + let stopEvent = false; + if (mapBrowserEvent.type == EventType_default.KEYDOWN) { + const keyEvent = ( + /** @type {KeyboardEvent} */ + mapBrowserEvent.originalEvent + ); + const key = keyEvent.key; + if (this.condition_(mapBrowserEvent) && (key == Key_default.DOWN || key == Key_default.LEFT || key == Key_default.RIGHT || key == Key_default.UP)) { + const map = mapBrowserEvent.map; + const view = map.getView(); + const mapUnitsDelta = view.getResolution() * this.pixelDelta_; + let deltaX = 0, deltaY = 0; + if (key == Key_default.DOWN) { + deltaY = -mapUnitsDelta; + } else if (key == Key_default.LEFT) { + deltaX = -mapUnitsDelta; + } else if (key == Key_default.RIGHT) { + deltaX = mapUnitsDelta; + } else { + deltaY = mapUnitsDelta; + } + const delta = [deltaX, deltaY]; + rotate(delta, view.getRotation()); + pan(view, delta, this.duration_); + keyEvent.preventDefault(); + stopEvent = true; + } + } + return !stopEvent; + } +}; +var KeyboardPan_default = KeyboardPan; + +// node_modules/ol/interaction/KeyboardZoom.js +var KeyboardZoom = class extends Interaction_default { + /** + * @param {Options} [options] Options. + */ + constructor(options) { + super(); + options = options ? options : {}; + this.condition_ = options.condition ? options.condition : function(mapBrowserEvent) { + return !platformModifierKey(mapBrowserEvent) && targetNotEditable(mapBrowserEvent); + }; + this.delta_ = options.delta ? options.delta : 1; + this.duration_ = options.duration !== void 0 ? options.duration : 100; + } + /** + * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a + * `KeyEvent`, and decides whether to zoom in or out (depending on whether the + * key pressed was '+' or '-'). + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @override + */ + handleEvent(mapBrowserEvent) { + let stopEvent = false; + if (mapBrowserEvent.type == EventType_default.KEYDOWN || mapBrowserEvent.type == EventType_default.KEYPRESS) { + const keyEvent = ( + /** @type {KeyboardEvent} */ + mapBrowserEvent.originalEvent + ); + const key = keyEvent.key; + if (this.condition_(mapBrowserEvent) && (key === "+" || key === "-")) { + const map = mapBrowserEvent.map; + const delta = key === "+" ? this.delta_ : -this.delta_; + const view = map.getView(); + zoomByDelta(view, delta, void 0, this.duration_); + keyEvent.preventDefault(); + stopEvent = true; + } + } + return !stopEvent; + } +}; +var KeyboardZoom_default = KeyboardZoom; + +// node_modules/ol/interaction/MouseWheelZoom.js +var MouseWheelZoom = class extends Interaction_default { + /** + * @param {Options} [options] Options. + */ + constructor(options) { + options = options ? options : {}; + super( + /** @type {import("./Interaction.js").InteractionOptions} */ + options + ); + this.totalDelta_ = 0; + this.lastDelta_ = 0; + this.maxDelta_ = options.maxDelta !== void 0 ? options.maxDelta : 1; + this.duration_ = options.duration !== void 0 ? options.duration : 250; + this.timeout_ = options.timeout !== void 0 ? options.timeout : 80; + this.useAnchor_ = options.useAnchor !== void 0 ? options.useAnchor : true; + this.constrainResolution_ = options.constrainResolution !== void 0 ? options.constrainResolution : false; + const condition = options.condition ? options.condition : always; + this.condition_ = options.onFocusOnly ? all(focusWithTabindex, condition) : condition; + this.lastAnchor_ = null; + this.startTime_ = void 0; + this.timeoutId_; + this.mode_ = void 0; + this.trackpadEventGap_ = 400; + this.trackpadTimeoutId_; + this.deltaPerZoom_ = 300; + } + /** + * @private + */ + endInteraction_() { + this.trackpadTimeoutId_ = void 0; + const map = this.getMap(); + if (!map) { + return; + } + const view = map.getView(); + view.endInteraction( + void 0, + this.lastDelta_ ? this.lastDelta_ > 0 ? 1 : -1 : 0, + this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null + ); + } + /** + * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually + * zooms the map. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} `false` to stop event propagation. + * @override + */ + handleEvent(mapBrowserEvent) { + if (!this.condition_(mapBrowserEvent)) { + return true; + } + const type = mapBrowserEvent.type; + if (type !== EventType_default.WHEEL) { + return true; + } + const map = mapBrowserEvent.map; + const wheelEvent = ( + /** @type {WheelEvent} */ + mapBrowserEvent.originalEvent + ); + wheelEvent.preventDefault(); + if (this.useAnchor_) { + this.lastAnchor_ = mapBrowserEvent.pixel; + } + let delta; + if (mapBrowserEvent.type == EventType_default.WHEEL) { + delta = wheelEvent.deltaY; + if (FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) { + delta /= DEVICE_PIXEL_RATIO; + } + if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) { + delta *= 40; + } + } + if (delta === 0) { + return false; + } + this.lastDelta_ = delta; + const now = Date.now(); + if (this.startTime_ === void 0) { + this.startTime_ = now; + } + if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) { + this.mode_ = Math.abs(delta) < 4 ? "trackpad" : "wheel"; + } + const view = map.getView(); + if (this.mode_ === "trackpad" && !(view.getConstrainResolution() || this.constrainResolution_)) { + if (this.trackpadTimeoutId_) { + clearTimeout(this.trackpadTimeoutId_); + } else { + if (view.getAnimating()) { + view.cancelAnimations(); + } + view.beginInteraction(); + } + this.trackpadTimeoutId_ = setTimeout( + this.endInteraction_.bind(this), + this.timeout_ + ); + view.adjustZoom( + -delta / this.deltaPerZoom_, + this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null + ); + this.startTime_ = now; + return false; + } + this.totalDelta_ += delta; + const timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0); + clearTimeout(this.timeoutId_); + this.timeoutId_ = setTimeout( + this.handleWheelZoom_.bind(this, map), + timeLeft + ); + return false; + } + /** + * @private + * @param {import("../Map.js").default} map Map. + */ + handleWheelZoom_(map) { + const view = map.getView(); + if (view.getAnimating()) { + view.cancelAnimations(); + } + let delta = -clamp( + this.totalDelta_, + -this.maxDelta_ * this.deltaPerZoom_, + this.maxDelta_ * this.deltaPerZoom_ + ) / this.deltaPerZoom_; + if (view.getConstrainResolution() || this.constrainResolution_) { + delta = delta ? delta > 0 ? 1 : -1 : 0; + } + zoomByDelta( + view, + delta, + this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null, + this.duration_ + ); + this.mode_ = void 0; + this.totalDelta_ = 0; + this.lastAnchor_ = null; + this.startTime_ = void 0; + this.timeoutId_ = void 0; + } + /** + * Enable or disable using the mouse's location as an anchor when zooming + * @param {boolean} useAnchor true to zoom to the mouse's location, false + * to zoom to the center of the map + * @api + */ + setMouseAnchor(useAnchor) { + this.useAnchor_ = useAnchor; + if (!useAnchor) { + this.lastAnchor_ = null; + } + } +}; +var MouseWheelZoom_default = MouseWheelZoom; + +// node_modules/ol/interaction/PinchRotate.js +var PinchRotate = class extends Pointer_default { + /** + * @param {Options} [options] Options. + */ + constructor(options) { + options = options ? options : {}; + const pointerOptions = ( + /** @type {import("./Pointer.js").Options} */ + options + ); + if (!pointerOptions.stopDown) { + pointerOptions.stopDown = FALSE; + } + super(pointerOptions); + this.anchor_ = null; + this.lastAngle_ = void 0; + this.rotating_ = false; + this.rotationDelta_ = 0; + this.threshold_ = options.threshold !== void 0 ? options.threshold : 0.3; + this.duration_ = options.duration !== void 0 ? options.duration : 250; + } + /** + * Handle pointer drag events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @override + */ + handleDragEvent(mapBrowserEvent) { + let rotationDelta = 0; + const touch0 = this.targetPointers[0]; + const touch1 = this.targetPointers[1]; + const angle = Math.atan2( + touch1.clientY - touch0.clientY, + touch1.clientX - touch0.clientX + ); + if (this.lastAngle_ !== void 0) { + const delta = angle - this.lastAngle_; + this.rotationDelta_ += delta; + if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) { + this.rotating_ = true; + } + rotationDelta = delta; + } + this.lastAngle_ = angle; + const map = mapBrowserEvent.map; + const view = map.getView(); + if (view.getConstraints().rotation === disable) { + return; + } + this.anchor_ = map.getCoordinateFromPixelInternal( + map.getEventPixel(centroid(this.targetPointers)) + ); + if (this.rotating_) { + map.render(); + view.adjustRotationInternal(rotationDelta, this.anchor_); + } + } + /** + * Handle pointer up events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @return {boolean} If the event was consumed. + * @override + */ + handleUpEvent(mapBrowserEvent) { + if (this.targetPointers.length < 2) { + const map = mapBrowserEvent.map; + const view = map.getView(); + view.endInteraction(this.duration_); + return false; + } + return true; + } + /** + * Handle pointer down events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @return {boolean} If the event was consumed. + * @override + */ + handleDownEvent(mapBrowserEvent) { + if (this.targetPointers.length >= 2) { + const map = mapBrowserEvent.map; + this.anchor_ = null; + this.lastAngle_ = void 0; + this.rotating_ = false; + this.rotationDelta_ = 0; + if (!this.handlingDownUpSequence) { + map.getView().beginInteraction(); + } + return true; + } + return false; + } +}; +var PinchRotate_default = PinchRotate; + +// node_modules/ol/interaction/PinchZoom.js +var PinchZoom = class extends Pointer_default { + /** + * @param {Options} [options] Options. + */ + constructor(options) { + options = options ? options : {}; + const pointerOptions = ( + /** @type {import("./Pointer.js").Options} */ + options + ); + if (!pointerOptions.stopDown) { + pointerOptions.stopDown = FALSE; + } + super(pointerOptions); + this.anchor_ = null; + this.duration_ = options.duration !== void 0 ? options.duration : 400; + this.lastDistance_ = void 0; + this.lastScaleDelta_ = 1; + } + /** + * Handle pointer drag events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @override + */ + handleDragEvent(mapBrowserEvent) { + let scaleDelta = 1; + const touch0 = this.targetPointers[0]; + const touch1 = this.targetPointers[1]; + const dx = touch0.clientX - touch1.clientX; + const dy = touch0.clientY - touch1.clientY; + const distance = Math.sqrt(dx * dx + dy * dy); + if (this.lastDistance_ !== void 0) { + scaleDelta = this.lastDistance_ / distance; + } + this.lastDistance_ = distance; + const map = mapBrowserEvent.map; + const view = map.getView(); + if (scaleDelta != 1) { + this.lastScaleDelta_ = scaleDelta; + } + this.anchor_ = map.getCoordinateFromPixelInternal( + map.getEventPixel(centroid(this.targetPointers)) + ); + map.render(); + view.adjustResolutionInternal(scaleDelta, this.anchor_); + } + /** + * Handle pointer up events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @return {boolean} If the event was consumed. + * @override + */ + handleUpEvent(mapBrowserEvent) { + if (this.targetPointers.length < 2) { + const map = mapBrowserEvent.map; + const view = map.getView(); + const direction = this.lastScaleDelta_ > 1 ? 1 : -1; + view.endInteraction(this.duration_, direction); + return false; + } + return true; + } + /** + * Handle pointer down events. + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. + * @return {boolean} If the event was consumed. + * @override + */ + handleDownEvent(mapBrowserEvent) { + if (this.targetPointers.length >= 2) { + const map = mapBrowserEvent.map; + this.anchor_ = null; + this.lastDistance_ = void 0; + this.lastScaleDelta_ = 1; + if (!this.handlingDownUpSequence) { + map.getView().beginInteraction(); + } + return true; + } + return false; + } +}; +var PinchZoom_default = PinchZoom; + +// node_modules/ol/interaction/defaults.js +function defaults(options) { + options = options ? options : {}; + const interactions = new Collection_default(); + const kinetic = new Kinetic_default(-5e-3, 0.05, 100); + const altShiftDragRotate = options.altShiftDragRotate !== void 0 ? options.altShiftDragRotate : true; + if (altShiftDragRotate) { + interactions.push(new DragRotate_default()); + } + const doubleClickZoom = options.doubleClickZoom !== void 0 ? options.doubleClickZoom : true; + if (doubleClickZoom) { + interactions.push( + new DoubleClickZoom_default({ + delta: options.zoomDelta, + duration: options.zoomDuration + }) + ); + } + const dragPan = options.dragPan !== void 0 ? options.dragPan : true; + if (dragPan) { + interactions.push( + new DragPan_default({ + onFocusOnly: options.onFocusOnly, + kinetic + }) + ); + } + const pinchRotate = options.pinchRotate !== void 0 ? options.pinchRotate : true; + if (pinchRotate) { + interactions.push(new PinchRotate_default()); + } + const pinchZoom = options.pinchZoom !== void 0 ? options.pinchZoom : true; + if (pinchZoom) { + interactions.push( + new PinchZoom_default({ + duration: options.zoomDuration + }) + ); + } + const keyboard = options.keyboard !== void 0 ? options.keyboard : true; + if (keyboard) { + interactions.push(new KeyboardPan_default()); + interactions.push( + new KeyboardZoom_default({ + delta: options.zoomDelta, + duration: options.zoomDuration + }) + ); + } + const mouseWheelZoom = options.mouseWheelZoom !== void 0 ? options.mouseWheelZoom : true; + if (mouseWheelZoom) { + interactions.push( + new MouseWheelZoom_default({ + onFocusOnly: options.onFocusOnly, + duration: options.zoomDuration + }) + ); + } + const shiftDragZoom = options.shiftDragZoom !== void 0 ? options.shiftDragZoom : true; + if (shiftDragZoom) { + interactions.push( + new DragZoom_default({ + duration: options.zoomDuration + }) + ); + } + return interactions; +} + +export { + Kinetic_default, + defaults +}; +//# sourceMappingURL=chunk-7RGUNZVN.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-7RGUNZVN.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-7RGUNZVN.js.map new file mode 100644 index 0000000..66b7277 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-7RGUNZVN.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../ol/Kinetic.js", "../../ol/interaction/DoubleClickZoom.js", "../../ol/interaction/DragPan.js", "../../ol/interaction/DragRotate.js", "../../ol/render/Box.js", "../../ol/interaction/DragBox.js", "../../ol/interaction/DragZoom.js", "../../ol/events/Key.js", "../../ol/interaction/KeyboardPan.js", "../../ol/interaction/KeyboardZoom.js", "../../ol/interaction/MouseWheelZoom.js", "../../ol/interaction/PinchRotate.js", "../../ol/interaction/PinchZoom.js", "../../ol/interaction/defaults.js"], + "sourcesContent": ["/**\n * @module ol/Kinetic\n */\n\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nclass Kinetic {\n /**\n * @param {number} decay Rate of decay (must be negative).\n * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n * @param {number} delay Delay to consider to calculate the kinetic\n * initial values (milliseconds).\n */\n constructor(decay, minVelocity, delay) {\n /**\n * @private\n * @type {number}\n */\n this.decay_ = decay;\n\n /**\n * @private\n * @type {number}\n */\n this.minVelocity_ = minVelocity;\n\n /**\n * @private\n * @type {number}\n */\n this.delay_ = delay;\n\n /**\n * @private\n * @type {Array}\n */\n this.points_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.angle_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.initialVelocity_ = 0;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n begin() {\n this.points_.length = 0;\n this.angle_ = 0;\n this.initialVelocity_ = 0;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n */\n update(x, y) {\n this.points_.push(x, y, Date.now());\n }\n\n /**\n * @return {boolean} Whether we should do kinetic animation.\n */\n end() {\n if (this.points_.length < 6) {\n // at least 2 points are required (i.e. there must be at least 6 elements\n // in the array)\n return false;\n }\n const delay = Date.now() - this.delay_;\n const lastIndex = this.points_.length - 3;\n if (this.points_[lastIndex + 2] < delay) {\n // the last tracked point is too old, which means that the user stopped\n // panning before releasing the map\n return false;\n }\n\n // get the first point which still falls into the delay time\n let firstIndex = lastIndex - 3;\n while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n firstIndex -= 3;\n }\n\n const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n // we don't want a duration of 0 (divide by zero)\n // we also make sure the user panned for a duration of at least one frame\n // (1/60s) to compute sane displacement values\n if (duration < 1000 / 60) {\n return false;\n }\n\n const dx = this.points_[lastIndex] - this.points_[firstIndex];\n const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n this.angle_ = Math.atan2(dy, dx);\n this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n return this.initialVelocity_ > this.minVelocity_;\n }\n\n /**\n * @return {number} Total distance travelled (pixels).\n */\n getDistance() {\n return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n }\n\n /**\n * @return {number} Angle of the kinetic panning animation (radians).\n */\n getAngle() {\n return this.angle_;\n }\n}\n\nexport default Kinetic;\n", "/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nclass DoubleClickZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n const browserEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const map = mapBrowserEvent.map;\n const anchor = mapBrowserEvent.coordinate;\n const delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, anchor, this.duration_);\n browserEvent.preventDefault();\n stopEvent = true;\n }\n return !stopEvent;\n }\n}\n\nexport default DoubleClickZoom;\n", "/**\n * @module ol/interaction/DragPan\n */\nimport {\n rotate as rotateCoordinate,\n scale as scaleCoordinate,\n} from '../coordinate.js';\nimport {easeOut} from '../easing.js';\nimport {\n all,\n focusWithTabindex,\n noModifierKeys,\n primaryAction,\n} from '../events/condition.js';\nimport {FALSE} from '../functions.js';\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.noModifierKeys} and {@link module:ol/events/condition.primaryAction}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {import(\"../Kinetic.js\").default} [kinetic] Kinetic inertia to apply to the pan.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map by dragging the map.\n * @api\n */\nclass DragPan extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super({\n stopDown: FALSE,\n });\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {import(\"../Kinetic.js\").default|undefined}\n */\n this.kinetic_ = options.kinetic;\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.lastCentroid = null;\n\n /**\n * @type {number}\n * @private\n */\n this.lastPointersCount_;\n\n /**\n * @type {boolean}\n * @private\n */\n this.panning_ = false;\n\n const condition = options.condition\n ? options.condition\n : all(noModifierKeys, primaryAction);\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n\n /**\n * @private\n * @type {boolean}\n */\n this.noKinetic_ = false;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n const map = mapBrowserEvent.map;\n if (!this.panning_) {\n this.panning_ = true;\n map.getView().beginInteraction();\n }\n const targetPointers = this.targetPointers;\n const centroid = map.getEventPixel(centroidFromPointers(targetPointers));\n if (targetPointers.length == this.lastPointersCount_) {\n if (this.kinetic_) {\n this.kinetic_.update(centroid[0], centroid[1]);\n }\n if (this.lastCentroid) {\n const delta = [\n this.lastCentroid[0] - centroid[0],\n centroid[1] - this.lastCentroid[1],\n ];\n const map = mapBrowserEvent.map;\n const view = map.getView();\n scaleCoordinate(delta, view.getResolution());\n rotateCoordinate(delta, view.getRotation());\n view.adjustCenterInternal(delta);\n }\n } else if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger down, tiny drag, second finger down\n this.kinetic_.begin();\n }\n this.lastCentroid = centroid;\n this.lastPointersCount_ = targetPointers.length;\n mapBrowserEvent.originalEvent.preventDefault();\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (this.targetPointers.length === 0) {\n if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {\n const distance = this.kinetic_.getDistance();\n const angle = this.kinetic_.getAngle();\n const center = view.getCenterInternal();\n const centerpx = map.getPixelFromCoordinateInternal(center);\n const dest = map.getCoordinateFromPixelInternal([\n centerpx[0] - distance * Math.cos(angle),\n centerpx[1] - distance * Math.sin(angle),\n ]);\n view.animateInternal({\n center: view.getConstrainedCenter(dest),\n duration: 500,\n easing: easeOut,\n });\n }\n if (this.panning_) {\n this.panning_ = false;\n view.endInteraction();\n }\n return false;\n }\n if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger up, tiny drag, second finger up\n this.kinetic_.begin();\n }\n this.lastCentroid = null;\n return true;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n this.lastCentroid = null;\n // stop any current animation\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n if (this.kinetic_) {\n this.kinetic_.begin();\n }\n // No kinetic as soon as more than one pointer on the screen is\n // detected. This is to prevent nasty pans after pinch.\n this.noKinetic_ = this.targetPointers.length > 1;\n return true;\n }\n return false;\n }\n}\n\nexport default DragPan;\n", "/**\n * @module ol/interaction/DragRotate\n */\nimport {\n altShiftKeysOnly,\n mouseActionButton,\n mouseOnly,\n} from '../events/condition.js';\nimport {FALSE} from '../functions.js';\nimport {disable} from '../rotationconstraint.js';\nimport PointerInteraction from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a\n * {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.altShiftKeysOnly}.\n * @property {number} [duration=250] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when the alt and shift keys are held down.\n *\n * This interaction is only supported for mouse devices.\n * @api\n */\nclass DragRotate extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n stopDown: FALSE,\n });\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : altShiftKeysOnly;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastAngle_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return;\n }\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n const size = map.getSize();\n const offset = mapBrowserEvent.pixel;\n const theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);\n if (this.lastAngle_ !== undefined) {\n const delta = theta - this.lastAngle_;\n view.adjustRotationInternal(-delta);\n }\n this.lastAngle_ = theta;\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return true;\n }\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return false;\n }\n\n if (\n mouseActionButton(mapBrowserEvent) &&\n this.condition_(mapBrowserEvent)\n ) {\n const map = mapBrowserEvent.map;\n map.getView().beginInteraction();\n this.lastAngle_ = undefined;\n return true;\n }\n return false;\n }\n}\n\nexport default DragRotate;\n", "/**\n * @module ol/render/Box\n */\n\nimport Disposable from '../Disposable.js';\nimport Polygon from '../geom/Polygon.js';\n\nclass RenderBox extends Disposable {\n /**\n * @param {string} className CSS class name.\n */\n constructor(className) {\n super();\n\n /**\n * @type {import(\"../geom/Polygon.js\").default}\n * @private\n */\n this.geometry_ = null;\n\n /**\n * @type {HTMLDivElement}\n * @private\n */\n this.element_ = document.createElement('div');\n this.element_.style.position = 'absolute';\n this.element_.style.pointerEvents = 'auto';\n this.element_.className = 'ol-box ' + className;\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.startPixel_ = null;\n\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.endPixel_ = null;\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.setMap(null);\n }\n\n /**\n * @private\n */\n render_() {\n const startPixel = this.startPixel_;\n const endPixel = this.endPixel_;\n const px = 'px';\n const style = this.element_.style;\n style.left = Math.min(startPixel[0], endPixel[0]) + px;\n style.top = Math.min(startPixel[1], endPixel[1]) + px;\n style.width = Math.abs(endPixel[0] - startPixel[0]) + px;\n style.height = Math.abs(endPixel[1] - startPixel[1]) + px;\n }\n\n /**\n * @param {import(\"../Map.js\").default|null} map Map.\n */\n setMap(map) {\n if (this.map_) {\n this.map_.getOverlayContainer().removeChild(this.element_);\n const style = this.element_.style;\n style.left = 'inherit';\n style.top = 'inherit';\n style.width = 'inherit';\n style.height = 'inherit';\n }\n this.map_ = map;\n if (this.map_) {\n this.map_.getOverlayContainer().appendChild(this.element_);\n }\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} startPixel Start pixel.\n * @param {import(\"../pixel.js\").Pixel} endPixel End pixel.\n */\n setPixels(startPixel, endPixel) {\n this.startPixel_ = startPixel;\n this.endPixel_ = endPixel;\n this.createOrUpdateGeometry();\n this.render_();\n }\n\n /**\n * Creates or updates the cached geometry.\n */\n createOrUpdateGeometry() {\n if (!this.map_) {\n return;\n }\n\n const startPixel = this.startPixel_;\n const endPixel = this.endPixel_;\n const pixels = [\n startPixel,\n [startPixel[0], endPixel[1]],\n endPixel,\n [endPixel[0], startPixel[1]],\n ];\n const coordinates = pixels.map(\n this.map_.getCoordinateFromPixelInternal,\n this.map_,\n );\n // close the polygon\n coordinates[4] = coordinates[0].slice();\n if (!this.geometry_) {\n this.geometry_ = new Polygon([coordinates]);\n } else {\n this.geometry_.setCoordinates([coordinates]);\n }\n }\n\n /**\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n */\n getGeometry() {\n return this.geometry_;\n }\n}\n\nexport default RenderBox;\n", "/**\n * @module ol/interaction/DragBox\n */\n// FIXME draw drag box\nimport Event from '../events/Event.js';\nimport {mouseActionButton} from '../events/condition.js';\nimport RenderBox from '../render/Box.js';\nimport PointerInteraction from './Pointer.js';\n\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s and returns a `{boolean}`. If the condition is met,\n * true should be returned.\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default, import(\"../pixel.js\").Pixel, import(\"../pixel.js\").Pixel):boolean} EndCondition\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragbox'] CSS class name for styling the box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link ol/events/condition~mouseActionButton}.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the default\n * `boxEndCondition` function.\n * @property {EndCondition} [boxEndCondition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s to indicate whether a `boxend` event should be fired.\n * Default is `true` if the area of the box is bigger than the `minArea` option.\n * @property {function(this:DragBox, import(\"../MapBrowserEvent.js\").default):void} [onBoxEnd] Code to execute just\n * before `boxend` is fired.\n */\n\n/**\n * @enum {string}\n */\nconst DragBoxEventType = {\n /**\n * Triggered upon drag box start.\n * @event DragBoxEvent#boxstart\n * @api\n */\n BOXSTART: 'boxstart',\n\n /**\n * Triggered on drag when box is active.\n * @event DragBoxEvent#boxdrag\n * @api\n */\n BOXDRAG: 'boxdrag',\n\n /**\n * Triggered upon drag box end.\n * @event DragBoxEvent#boxend\n * @api\n */\n BOXEND: 'boxend',\n\n /**\n * Triggered upon drag box canceled.\n * @event DragBoxEvent#boxcancel\n * @api\n */\n BOXCANCEL: 'boxcancel',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/DragBox~DragBox} instances are instances of\n * this type.\n */\nexport class DragBoxEvent extends Event {\n /**\n * @param {string} type The event type.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The event coordinate.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Originating event.\n */\n constructor(type, coordinate, mapBrowserEvent) {\n super(type);\n\n /**\n * The coordinate of the drag event.\n * @const\n * @type {import(\"../coordinate.js\").Coordinate}\n * @api\n */\n this.coordinate = coordinate;\n\n /**\n * @const\n * @type {import(\"../MapBrowserEvent.js\").default}\n * @api\n */\n this.mapBrowserEvent = mapBrowserEvent;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature<'boxcancel'|'boxdrag'|'boxend'|'boxstart', DragBoxEvent, Return> &\n * import(\"../Observable\").CombinedOnSignature} DragBoxOnSignature\n */\n\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when the shift or other key is held down. This is used, for example,\n * for zooming to a specific area of the map\n * (see {@link module:ol/interaction/DragZoom~DragZoom} and\n * {@link module:ol/interaction/DragRotateAndZoom~DragRotateAndZoom}).\n *\n * @fires DragBoxEvent\n * @api\n */\nclass DragBox extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.on;\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.once;\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.un;\n\n options = options ?? {};\n\n /**\n * @type {import(\"../render/Box.js\").default}\n * @private\n */\n this.box_ = new RenderBox(options.className || 'ol-dragbox');\n\n /**\n * @type {number}\n * @private\n */\n this.minArea_ = options.minArea ?? 64;\n\n if (options.onBoxEnd) {\n this.onBoxEnd = options.onBoxEnd;\n }\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n * @private\n */\n this.startPixel_ = null;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ?? mouseActionButton;\n\n /**\n * @private\n * @type {EndCondition}\n */\n this.boxEndCondition_ =\n options.boxEndCondition ?? this.defaultBoxEndCondition;\n }\n\n /**\n * The default condition for determining whether the boxend event\n * should fire.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent The originating MapBrowserEvent\n * leading to the box end.\n * @param {import(\"../pixel.js\").Pixel} startPixel The starting pixel of the box.\n * @param {import(\"../pixel.js\").Pixel} endPixel The end pixel of the box.\n * @return {boolean} Whether or not the boxend condition should be fired.\n */\n defaultBoxEndCondition(mapBrowserEvent, startPixel, endPixel) {\n const width = endPixel[0] - startPixel[0];\n const height = endPixel[1] - startPixel[1];\n return width * width + height * height >= this.minArea_;\n }\n\n /**\n * Returns geometry of last drawn box.\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n * @api\n */\n getGeometry() {\n return this.box_.getGeometry();\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n if (!this.startPixel_) {\n return;\n }\n\n this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);\n\n this.dispatchEvent(\n new DragBoxEvent(\n DragBoxEventType.BOXDRAG,\n mapBrowserEvent.coordinate,\n mapBrowserEvent,\n ),\n );\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (!this.startPixel_) {\n return false;\n }\n\n const completeBox = this.boxEndCondition_(\n mapBrowserEvent,\n this.startPixel_,\n mapBrowserEvent.pixel,\n );\n if (completeBox) {\n this.onBoxEnd(mapBrowserEvent);\n }\n this.dispatchEvent(\n new DragBoxEvent(\n completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL,\n mapBrowserEvent.coordinate,\n mapBrowserEvent,\n ),\n );\n\n this.box_.setMap(null);\n this.startPixel_ = null;\n\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.condition_(mapBrowserEvent)) {\n this.startPixel_ = mapBrowserEvent.pixel;\n this.box_.setMap(mapBrowserEvent.map);\n this.box_.setPixels(this.startPixel_, this.startPixel_);\n this.dispatchEvent(\n new DragBoxEvent(\n DragBoxEventType.BOXSTART,\n mapBrowserEvent.coordinate,\n mapBrowserEvent,\n ),\n );\n return true;\n }\n return false;\n }\n\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n onBoxEnd(event) {}\n\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n * @override\n */\n setActive(active) {\n if (!active) {\n this.box_.setMap(null);\n if (this.startPixel_) {\n this.dispatchEvent(\n new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null),\n );\n this.startPixel_ = null;\n }\n }\n\n super.setActive(active);\n }\n\n /**\n * @param {import(\"../Map.js\").default|null} map Map.\n * @override\n */\n setMap(map) {\n const oldMap = this.getMap();\n\n if (oldMap) {\n this.box_.setMap(null);\n\n if (this.startPixel_) {\n this.dispatchEvent(\n new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null),\n );\n this.startPixel_ = null;\n }\n }\n\n super.setMap(map);\n }\n}\n\nexport default DragBox;\n", "/**\n * @module ol/interaction/DragZoom\n */\nimport {easeOut} from '../easing.js';\nimport {shiftKeyOnly} from '../events/condition.js';\nimport DragBox from './DragBox.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragzoom'] CSS class name for styling the\n * box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.shiftKeyOnly}.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {boolean} [out=false] Use interaction for zooming out.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the parent default\n * `boxEndCondition` function.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when a key, shift by default, is held down.\n *\n * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or\n * your custom one configured with `className`.\n * @api\n */\nclass DragZoom extends DragBox {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const condition = options.condition ? options.condition : shiftKeyOnly;\n\n super({\n condition: condition,\n className: options.className || 'ol-dragzoom',\n minArea: options.minArea,\n });\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 200;\n\n /**\n * @private\n * @type {boolean}\n */\n this.out_ = options.out !== undefined ? options.out : false;\n }\n\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @override\n */\n onBoxEnd(event) {\n const map = this.getMap();\n const view = /** @type {!import(\"../View.js\").default} */ (map.getView());\n let geometry = this.getGeometry();\n\n if (this.out_) {\n const rotatedExtent = view.rotatedExtentForGeometry(geometry);\n const resolution = view.getResolutionForExtentInternal(rotatedExtent);\n const factor = view.getResolution() / resolution;\n geometry = geometry.clone();\n geometry.scale(factor * factor);\n }\n\n view.fitInternal(geometry, {\n duration: this.duration_,\n easing: easeOut,\n });\n }\n}\n\nexport default DragZoom;\n", "/**\n * @module ol/events/Key\n */\n\n/**\n * @enum {string}\n * @const\n */\nexport default {\n LEFT: 'ArrowLeft',\n UP: 'ArrowUp',\n RIGHT: 'ArrowRight',\n DOWN: 'ArrowDown',\n};\n", "/**\n * @module ol/interaction/KeyboardPan\n */\nimport {rotate as rotateCoordinate} from '../coordinate.js';\nimport EventType from '../events/EventType.js';\nimport Key from '../events/Key.js';\nimport {noModifierKeys, targetNotEditable} from '../events/condition.js';\nimport Interaction, {pan} from './Interaction.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.noModifierKeys} and\n * {@link module:ol/events/condition.targetNotEditable}.\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {number} [pixelDelta=128] The amount of pixels to pan on each key\n * press.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map using keyboard arrows.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}.\n * @api\n */\nclass KeyboardPan extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options || {};\n\n /**\n * @private\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Browser event.\n * @return {boolean} Combined condition result.\n */\n this.defaultCondition_ = function (mapBrowserEvent) {\n return (\n noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent)\n );\n };\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ =\n options.condition !== undefined\n ? options.condition\n : this.defaultCondition_;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 100;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelDelta_ =\n options.pixelDelta !== undefined ? options.pixelDelta : 128;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides the direction to pan to (if an arrow key was\n * pressed).\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == EventType.KEYDOWN) {\n const keyEvent = /** @type {KeyboardEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const key = keyEvent.key;\n if (\n this.condition_(mapBrowserEvent) &&\n (key == Key.DOWN ||\n key == Key.LEFT ||\n key == Key.RIGHT ||\n key == Key.UP)\n ) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n const mapUnitsDelta = view.getResolution() * this.pixelDelta_;\n let deltaX = 0,\n deltaY = 0;\n if (key == Key.DOWN) {\n deltaY = -mapUnitsDelta;\n } else if (key == Key.LEFT) {\n deltaX = -mapUnitsDelta;\n } else if (key == Key.RIGHT) {\n deltaX = mapUnitsDelta;\n } else {\n deltaY = mapUnitsDelta;\n }\n const delta = [deltaX, deltaY];\n rotateCoordinate(delta, view.getRotation());\n pan(view, delta, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n }\n}\n\nexport default KeyboardPan;\n", "/**\n * @module ol/interaction/KeyboardZoom\n */\nimport EventType from '../events/EventType.js';\nimport {platformModifierKey, targetNotEditable} from '../events/condition.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. The default condition is\n * that {@link module:ol/events/condition.targetNotEditable} is fulfilled and that\n * the platform modifier key isn't pressed\n * (!{@link module:ol/events/condition.platformModifierKey}).\n * @property {number} [delta=1] The zoom level delta on each key press.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map using keyboard + and -.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardPan~KeyboardPan}.\n * @api\n */\nclass KeyboardZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition\n ? options.condition\n : function (mapBrowserEvent) {\n return (\n !platformModifierKey(mapBrowserEvent) &&\n targetNotEditable(mapBrowserEvent)\n );\n };\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 100;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides whether to zoom in or out (depending on whether the\n * key pressed was '+' or '-').\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (\n mapBrowserEvent.type == EventType.KEYDOWN ||\n mapBrowserEvent.type == EventType.KEYPRESS\n ) {\n const keyEvent = /** @type {KeyboardEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const key = keyEvent.key;\n if (this.condition_(mapBrowserEvent) && (key === '+' || key === '-')) {\n const map = mapBrowserEvent.map;\n const delta = key === '+' ? this.delta_ : -this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, undefined, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n }\n}\n\nexport default KeyboardZoom;\n", "/**\n * @module ol/interaction/MouseWheelZoom\n */\nimport EventType from '../events/EventType.js';\nimport {all, always, focusWithTabindex} from '../events/condition.js';\nimport {DEVICE_PIXEL_RATIO, FIREFOX} from '../has.js';\nimport {clamp} from '../math.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\n\n/**\n * @typedef {'trackpad' | 'wheel'} Mode\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.always}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {number} [maxDelta=1] Maximum mouse wheel delta.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [timeout=80] Mouse wheel timeout duration in milliseconds.\n * @property {boolean} [useAnchor=true] Enable zooming using the mouse's\n * location as the anchor. When set to `false`, zooming in and out will zoom to\n * the center of the screen instead of zooming on the mouse's location.\n * @property {boolean} [constrainResolution=false] If true, the mouse wheel zoom\n * event will always animate to the closest zoom level after an interaction;\n * false means intermediary zoom levels are allowed.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by scrolling the mouse wheel.\n * @api\n */\nclass MouseWheelZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super(\n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options),\n );\n\n /**\n * @private\n * @type {number}\n */\n this.totalDelta_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.lastDelta_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = options.maxDelta !== undefined ? options.maxDelta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @private\n * @type {number}\n */\n this.timeout_ = options.timeout !== undefined ? options.timeout : 80;\n\n /**\n * @private\n * @type {boolean}\n */\n this.useAnchor_ =\n options.useAnchor !== undefined ? options.useAnchor : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.constrainResolution_ =\n options.constrainResolution !== undefined\n ? options.constrainResolution\n : false;\n\n const condition = options.condition ? options.condition : always;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n\n /**\n * @private\n * @type {?import(\"../pixel.js\").Pixel}\n */\n this.lastAnchor_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.startTime_ = undefined;\n\n /**\n * @private\n * @type {ReturnType}\n */\n this.timeoutId_;\n\n /**\n * @private\n * @type {Mode|undefined}\n */\n this.mode_ = undefined;\n\n /**\n * Trackpad events separated by this delay will be considered separate\n * interactions.\n * @private\n * @type {number}\n */\n this.trackpadEventGap_ = 400;\n\n /**\n * @private\n * @type {ReturnType}\n */\n this.trackpadTimeoutId_;\n\n /**\n * The number of delta values per zoom level\n * @private\n * @type {number}\n */\n this.deltaPerZoom_ = 300;\n }\n\n /**\n * @private\n */\n endInteraction_() {\n this.trackpadTimeoutId_ = undefined;\n const map = this.getMap();\n if (!map) {\n return;\n }\n const view = map.getView();\n view.endInteraction(\n undefined,\n this.lastDelta_ ? (this.lastDelta_ > 0 ? 1 : -1) : 0,\n this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null,\n );\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually\n * zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n if (!this.condition_(mapBrowserEvent)) {\n return true;\n }\n const type = mapBrowserEvent.type;\n if (type !== EventType.WHEEL) {\n return true;\n }\n\n const map = mapBrowserEvent.map;\n const wheelEvent = /** @type {WheelEvent} */ (\n mapBrowserEvent.originalEvent\n );\n wheelEvent.preventDefault();\n\n if (this.useAnchor_) {\n this.lastAnchor_ = mapBrowserEvent.pixel;\n }\n\n // Delta normalisation inspired by\n // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js\n let delta;\n if (mapBrowserEvent.type == EventType.WHEEL) {\n delta = wheelEvent.deltaY;\n if (FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= DEVICE_PIXEL_RATIO;\n }\n if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta *= 40;\n }\n }\n\n if (delta === 0) {\n return false;\n }\n this.lastDelta_ = delta;\n\n const now = Date.now();\n\n if (this.startTime_ === undefined) {\n this.startTime_ = now;\n }\n\n if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {\n this.mode_ = Math.abs(delta) < 4 ? 'trackpad' : 'wheel';\n }\n\n const view = map.getView();\n if (\n this.mode_ === 'trackpad' &&\n !(view.getConstrainResolution() || this.constrainResolution_)\n ) {\n if (this.trackpadTimeoutId_) {\n clearTimeout(this.trackpadTimeoutId_);\n } else {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.beginInteraction();\n }\n this.trackpadTimeoutId_ = setTimeout(\n this.endInteraction_.bind(this),\n this.timeout_,\n );\n view.adjustZoom(\n -delta / this.deltaPerZoom_,\n this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null,\n );\n this.startTime_ = now;\n return false;\n }\n\n this.totalDelta_ += delta;\n\n const timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);\n\n clearTimeout(this.timeoutId_);\n this.timeoutId_ = setTimeout(\n this.handleWheelZoom_.bind(this, map),\n timeLeft,\n );\n\n return false;\n }\n\n /**\n * @private\n * @param {import(\"../Map.js\").default} map Map.\n */\n handleWheelZoom_(map) {\n const view = map.getView();\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n let delta =\n -clamp(\n this.totalDelta_,\n -this.maxDelta_ * this.deltaPerZoom_,\n this.maxDelta_ * this.deltaPerZoom_,\n ) / this.deltaPerZoom_;\n if (view.getConstrainResolution() || this.constrainResolution_) {\n // view has a zoom constraint, zoom by 1\n delta = delta ? (delta > 0 ? 1 : -1) : 0;\n }\n zoomByDelta(\n view,\n delta,\n this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null,\n this.duration_,\n );\n\n this.mode_ = undefined;\n this.totalDelta_ = 0;\n this.lastAnchor_ = null;\n this.startTime_ = undefined;\n this.timeoutId_ = undefined;\n }\n\n /**\n * Enable or disable using the mouse's location as an anchor when zooming\n * @param {boolean} useAnchor true to zoom to the mouse's location, false\n * to zoom to the center of the map\n * @api\n */\n setMouseAnchor(useAnchor) {\n this.useAnchor_ = useAnchor;\n if (!useAnchor) {\n this.lastAnchor_ = null;\n }\n }\n}\n\nexport default MouseWheelZoom;\n", "/**\n * @module ol/interaction/PinchRotate\n */\nimport {FALSE} from '../functions.js';\nimport {disable} from '../rotationconstraint.js';\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] The duration of the animation in\n * milliseconds.\n * @property {number} [threshold=0.3] Minimal angle in radians to start a rotation.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by twisting with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchRotate extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.anchor_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastAngle_ = undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.rotating_ = false;\n\n /**\n * @private\n * @type {number}\n */\n this.rotationDelta_ = 0.0;\n\n /**\n * @private\n * @type {number}\n */\n this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n let rotationDelta = 0.0;\n\n const touch0 = this.targetPointers[0];\n const touch1 = this.targetPointers[1];\n\n // angle between touches\n const angle = Math.atan2(\n touch1.clientY - touch0.clientY,\n touch1.clientX - touch0.clientX,\n );\n\n if (this.lastAngle_ !== undefined) {\n const delta = angle - this.lastAngle_;\n this.rotationDelta_ += delta;\n if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {\n this.rotating_ = true;\n }\n rotationDelta = delta;\n }\n this.lastAngle_ = angle;\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n\n // rotate anchor point.\n // FIXME: should be the intersection point between the lines:\n // touch0,touch1 and previousTouch0,previousTouch1\n this.anchor_ = map.getCoordinateFromPixelInternal(\n map.getEventPixel(centroidFromPointers(this.targetPointers)),\n );\n\n // rotate\n if (this.rotating_) {\n map.render();\n view.adjustRotationInternal(rotationDelta, this.anchor_);\n }\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n }\n return true;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n const map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastAngle_ = undefined;\n this.rotating_ = false;\n this.rotationDelta_ = 0.0;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n }\n return false;\n }\n}\n\nexport default PinchRotate;\n", "/**\n * @module ol/interaction/PinchZoom\n */\nimport {FALSE} from '../functions.js';\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=400] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by pinching with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchZoom extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.anchor_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 400;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastDistance_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.lastScaleDelta_ = 1;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n let scaleDelta = 1.0;\n\n const touch0 = this.targetPointers[0];\n const touch1 = this.targetPointers[1];\n const dx = touch0.clientX - touch1.clientX;\n const dy = touch0.clientY - touch1.clientY;\n\n // distance between touches\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (this.lastDistance_ !== undefined) {\n scaleDelta = this.lastDistance_ / distance;\n }\n this.lastDistance_ = distance;\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n\n if (scaleDelta != 1.0) {\n this.lastScaleDelta_ = scaleDelta;\n }\n\n // scale anchor point.\n this.anchor_ = map.getCoordinateFromPixelInternal(\n map.getEventPixel(centroidFromPointers(this.targetPointers)),\n );\n\n // scale, bypass the resolution constraint\n map.render();\n view.adjustResolutionInternal(scaleDelta, this.anchor_);\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n const direction = this.lastScaleDelta_ > 1 ? 1 : -1;\n view.endInteraction(this.duration_, direction);\n return false;\n }\n return true;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n const map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastDistance_ = undefined;\n this.lastScaleDelta_ = 1;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n }\n return false;\n }\n}\n\nexport default PinchZoom;\n", "/**\n * @module ol/interaction/defaults\n */\nimport Collection from '../Collection.js';\nimport Kinetic from '../Kinetic.js';\nimport DoubleClickZoom from './DoubleClickZoom.js';\nimport DragPan from './DragPan.js';\nimport DragRotate from './DragRotate.js';\nimport DragZoom from './DragZoom.js';\nimport KeyboardPan from './KeyboardPan.js';\nimport KeyboardZoom from './KeyboardZoom.js';\nimport MouseWheelZoom from './MouseWheelZoom.js';\nimport PinchRotate from './PinchRotate.js';\nimport PinchZoom from './PinchZoom.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [altShiftDragRotate=true] Whether Alt-Shift-drag rotate is\n * desired.\n * @property {boolean} [onFocusOnly=false] Interact only when the map has the\n * focus. This affects the `MouseWheelZoom` and `DragPan` interactions and is\n * useful when page scroll is desired for maps that do not have the browser's\n * focus.\n * @property {boolean} [doubleClickZoom=true] Whether double click zoom is\n * desired.\n * @property {boolean} [keyboard=true] Whether keyboard interaction is desired.\n * @property {boolean} [mouseWheelZoom=true] Whether mousewheel zoom is desired.\n * @property {boolean} [shiftDragZoom=true] Whether Shift-drag zoom is desired.\n * @property {boolean} [dragPan=true] Whether drag pan is desired.\n * @property {boolean} [pinchRotate=true] Whether pinch rotate is desired.\n * @property {boolean} [pinchZoom=true] Whether pinch zoom is desired.\n * @property {number} [zoomDelta] Zoom level delta when using keyboard or double click zoom.\n * @property {number} [zoomDuration] Duration of the zoom animation in\n * milliseconds.\n */\n\n/**\n * Set of interactions included in maps by default. Specific interactions can be\n * excluded by setting the appropriate option to false in the constructor\n * options, but the order of the interactions is fixed. If you want to specify\n * a different order for interactions, you will need to create your own\n * {@link module:ol/interaction/Interaction~Interaction} instances and insert\n * them into a {@link module:ol/Collection~Collection} in the order you want\n * before creating your {@link module:ol/Map~Map} instance. Changing the order can\n * be of interest if the event propagation needs to be stopped at a point.\n * The default set of interactions, in sequence, is:\n * {@link module:ol/interaction/DragRotate~DragRotate}\n * {@link module:ol/interaction/DoubleClickZoom~DoubleClickZoom}\n * {@link module:ol/interaction/DragPan~DragPan}\n * {@link module:ol/interaction/PinchRotate~PinchRotate}\n * {@link module:ol/interaction/PinchZoom~PinchZoom}\n * {@link module:ol/interaction/KeyboardPan~KeyboardPan}\n * {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}\n * {@link module:ol/interaction/MouseWheelZoom~MouseWheelZoom}\n * {@link module:ol/interaction/DragZoom~DragZoom}\n *\n * @param {DefaultsOptions} [options] Defaults options.\n * @return {Collection}\n * A collection of interactions to be used with the {@link module:ol/Map~Map}\n * constructor's `interactions` option.\n * @api\n */\nexport function defaults(options) {\n options = options ? options : {};\n\n /** @type {Collection} */\n const interactions = new Collection();\n\n const kinetic = new Kinetic(-0.005, 0.05, 100);\n\n const altShiftDragRotate =\n options.altShiftDragRotate !== undefined\n ? options.altShiftDragRotate\n : true;\n if (altShiftDragRotate) {\n interactions.push(new DragRotate());\n }\n\n const doubleClickZoom =\n options.doubleClickZoom !== undefined ? options.doubleClickZoom : true;\n if (doubleClickZoom) {\n interactions.push(\n new DoubleClickZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n }),\n );\n }\n\n const dragPan = options.dragPan !== undefined ? options.dragPan : true;\n if (dragPan) {\n interactions.push(\n new DragPan({\n onFocusOnly: options.onFocusOnly,\n kinetic: kinetic,\n }),\n );\n }\n\n const pinchRotate =\n options.pinchRotate !== undefined ? options.pinchRotate : true;\n if (pinchRotate) {\n interactions.push(new PinchRotate());\n }\n\n const pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;\n if (pinchZoom) {\n interactions.push(\n new PinchZoom({\n duration: options.zoomDuration,\n }),\n );\n }\n\n const keyboard = options.keyboard !== undefined ? options.keyboard : true;\n if (keyboard) {\n interactions.push(new KeyboardPan());\n interactions.push(\n new KeyboardZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n }),\n );\n }\n\n const mouseWheelZoom =\n options.mouseWheelZoom !== undefined ? options.mouseWheelZoom : true;\n if (mouseWheelZoom) {\n interactions.push(\n new MouseWheelZoom({\n onFocusOnly: options.onFocusOnly,\n duration: options.zoomDuration,\n }),\n );\n }\n\n const shiftDragZoom =\n options.shiftDragZoom !== undefined ? options.shiftDragZoom : true;\n if (shiftDragZoom) {\n interactions.push(\n new DragZoom({\n duration: options.zoomDuration,\n }),\n );\n }\n\n return interactions;\n}\n"], + "mappings": "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", + "names": ["centroid", "map"] +} diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-GAPTD7YR.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-ATTNMDTG.js similarity index 99% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-GAPTD7YR.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-ATTNMDTG.js index dec696d..39990f1 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-GAPTD7YR.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-ATTNMDTG.js @@ -1,11 +1,11 @@ -import { - assert -} from "./chunk-QFCIXVZ3.js"; import { Object_default, listen, unlistenByKey } from "./chunk-V2VQBN44.js"; +import { + assert +} from "./chunk-QFCIXVZ3.js"; import { EventType_default } from "./chunk-33VDV4DG.js"; @@ -225,4 +225,4 @@ export { createStyleFunction, Feature_default }; -//# sourceMappingURL=chunk-GAPTD7YR.js.map +//# sourceMappingURL=chunk-ATTNMDTG.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-GAPTD7YR.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-ATTNMDTG.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-GAPTD7YR.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-ATTNMDTG.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-QJJYQF6H.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-G3HPQ3BH.js similarity index 97% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-QJJYQF6H.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-G3HPQ3BH.js index e6b9140..b93e61b 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-QJJYQF6H.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-G3HPQ3BH.js @@ -1,7 +1,7 @@ import { SimpleGeometry_default, deflateCoordinate -} from "./chunk-W2FV6P6N.js"; +} from "./chunk-6GRRGW6V.js"; import { containsXY, createOrUpdateFromCoordinate @@ -119,4 +119,4 @@ var Point_default = Point; export { Point_default }; -//# sourceMappingURL=chunk-QJJYQF6H.js.map +//# sourceMappingURL=chunk-G3HPQ3BH.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-QJJYQF6H.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-G3HPQ3BH.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-QJJYQF6H.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-G3HPQ3BH.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-LKGRVZZI.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-GKDSB34V.js similarity index 99% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-LKGRVZZI.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-GKDSB34V.js index 2cc9b40..1600e19 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-LKGRVZZI.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-GKDSB34V.js @@ -1,23 +1,20 @@ -import { - asArray, - asString, - toString -} from "./chunk-33EAEVLP.js"; import { ImageState_default, createCanvasContext2D, decodeFallback, getSharedCanvasContext2D } from "./chunk-WEQYAO4O.js"; +import { + asArray, + asString, + toString +} from "./chunk-33EAEVLP.js"; import { toSize } from "./chunk-PPP4FLHO.js"; import { WORKER_OFFSCREEN_CANVAS } from "./chunk-ZPDML4Q3.js"; -import { - assert -} from "./chunk-QFCIXVZ3.js"; import { Object_default, Target_default, @@ -25,6 +22,9 @@ import { clear, getUid } from "./chunk-V2VQBN44.js"; +import { + assert +} from "./chunk-QFCIXVZ3.js"; import { EventType_default } from "./chunk-33VDV4DG.js"; @@ -2817,4 +2817,4 @@ export { Text_default, Icon_default }; -//# sourceMappingURL=chunk-LKGRVZZI.js.map +//# sourceMappingURL=chunk-GKDSB34V.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-LKGRVZZI.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-GKDSB34V.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-LKGRVZZI.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-GKDSB34V.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-X2KP4TK5.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-GQSVCNL3.js similarity index 99% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-X2KP4TK5.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-GQSVCNL3.js index 828899b..2ba3cec 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-X2KP4TK5.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-GQSVCNL3.js @@ -15,13 +15,6 @@ import { getTransform, transform } from "./chunk-5ACH5F45.js"; -import { - listen, - unlistenByKey -} from "./chunk-V2VQBN44.js"; -import { - EventType_default -} from "./chunk-33VDV4DG.js"; import { boundingExtent, containsCoordinate, @@ -41,11 +34,18 @@ import { intersects, wrapAndSliceX } from "./chunk-WXT7AISE.js"; +import { + listen, + unlistenByKey +} from "./chunk-V2VQBN44.js"; import { clamp, modulo, solveLinearSystem } from "./chunk-V7KTD4MH.js"; +import { + EventType_default +} from "./chunk-33VDV4DG.js"; // node_modules/ol/reproj.js var brokenDiagonalRendering_; @@ -921,4 +921,4 @@ export { hash, withinExtentAndZ }; -//# sourceMappingURL=chunk-X2KP4TK5.js.map +//# sourceMappingURL=chunk-GQSVCNL3.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-X2KP4TK5.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-GQSVCNL3.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-X2KP4TK5.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-GQSVCNL3.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VQAOIZZU.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-HFPY7EDW.js similarity index 99% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-VQAOIZZU.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-HFPY7EDW.js index 994b70e..f01c36a 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VQAOIZZU.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-HFPY7EDW.js @@ -25,7 +25,13 @@ import { measureAndCacheTextWidth, registerFont, toFunction -} from "./chunk-LKGRVZZI.js"; +} from "./chunk-GKDSB34V.js"; +import { + RBush +} from "./chunk-RW3V7S4F.js"; +import { + lineStringLength +} from "./chunk-JFXZSSOM.js"; import { EventType_default, Layer_default, @@ -33,7 +39,18 @@ import { ViewHint_default, ZIndexContext_default, canvasPool -} from "./chunk-6SP66AVH.js"; +} from "./chunk-VWBYIKLE.js"; +import { + ImageState_default, + createCanvasContext2D, + releaseCanvas +} from "./chunk-WEQYAO4O.js"; +import { + inflateCoordinates, + inflateCoordinatesArray, + inflateMultiCoordinatesArray, + snap +} from "./chunk-TRW2RYAI.js"; import { BooleanType, ColorType, @@ -55,31 +72,14 @@ import { toString, withAlpha } from "./chunk-33EAEVLP.js"; -import { - ImageState_default, - createCanvasContext2D, - releaseCanvas -} from "./chunk-WEQYAO4O.js"; import { toSize } from "./chunk-PPP4FLHO.js"; -import { - RBush -} from "./chunk-RW3V7S4F.js"; -import { - lineStringLength -} from "./chunk-JFXZSSOM.js"; -import { - inflateCoordinates, - inflateCoordinatesArray, - inflateMultiCoordinatesArray, - snap -} from "./chunk-TRW2RYAI.js"; import { rotate, transform2D, transformGeom2D -} from "./chunk-W2FV6P6N.js"; +} from "./chunk-6GRRGW6V.js"; import { apply, compose, @@ -93,16 +93,6 @@ import { toUserExtent, toUserResolution } from "./chunk-5ACH5F45.js"; -import { - getUid, - isEmpty -} from "./chunk-V2VQBN44.js"; -import { - ascending, - descending, - equals, - reverseSubArray -} from "./chunk-FQY6EMA7.js"; import { Relationship_default, buffer, @@ -119,11 +109,21 @@ import { wrapX, wrapX2 } from "./chunk-WXT7AISE.js"; +import { + getUid, + isEmpty +} from "./chunk-V2VQBN44.js"; import { clamp, lerp, toFixed } from "./chunk-V7KTD4MH.js"; +import { + ascending, + descending, + equals, + reverseSubArray +} from "./chunk-FQY6EMA7.js"; // node_modules/ol/render/VectorContext.js var VectorContext = class { @@ -6928,4 +6928,4 @@ export { BaseVector_default, Vector_default }; -//# sourceMappingURL=chunk-VQAOIZZU.js.map +//# sourceMappingURL=chunk-HFPY7EDW.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VQAOIZZU.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-HFPY7EDW.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-VQAOIZZU.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-HFPY7EDW.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-2R5MNV34.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-JOMDBGKW.js similarity index 99% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-2R5MNV34.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-JOMDBGKW.js index c108f84..3b45c24 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-2R5MNV34.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-JOMDBGKW.js @@ -1,32 +1,32 @@ import { - Source_default -} from "./chunk-DYKFAHI6.js"; + linearRingss +} from "./chunk-6OUHCICN.js"; +import { + interpolatePoint +} from "./chunk-NER2BJ37.js"; import { RBush } from "./chunk-RW3V7S4F.js"; import { - linearRingss -} from "./chunk-2NX2FDVC.js"; + Source_default +} from "./chunk-DYKFAHI6.js"; import { getInteriorPointOfArray, getInteriorPointsOfMultiArray, inflateEnds -} from "./chunk-5CPSJRE2.js"; -import { - CollectionEventType_default, - Collection_default -} from "./chunk-4E4H2AGX.js"; -import { - interpolatePoint -} from "./chunk-7MYDC76J.js"; +} from "./chunk-47JK3GLV.js"; import { douglasPeucker, douglasPeuckerArray, quantizeArray } from "./chunk-TRW2RYAI.js"; +import { + CollectionEventType_default, + Collection_default +} from "./chunk-4E4H2AGX.js"; import { transform2D -} from "./chunk-W2FV6P6N.js"; +} from "./chunk-6GRRGW6V.js"; import { compose, create @@ -35,8 +35,15 @@ import { get } from "./chunk-5ACH5F45.js"; import { - assert -} from "./chunk-QFCIXVZ3.js"; + containsExtent, + createOrUpdate, + createOrUpdateFromCoordinate, + createOrUpdateFromFlatCoordinates, + equals, + getCenter, + getHeight, + wrapAndSliceX +} from "./chunk-WXT7AISE.js"; import { Event_default, ObjectEventType_default, @@ -45,6 +52,9 @@ import { listen, unlistenByKey } from "./chunk-V2VQBN44.js"; +import { + assert +} from "./chunk-QFCIXVZ3.js"; import { EventType_default, TRUE, @@ -54,16 +64,6 @@ import { import { extend } from "./chunk-FQY6EMA7.js"; -import { - containsExtent, - createOrUpdate, - createOrUpdateFromCoordinate, - createOrUpdateFromFlatCoordinates, - equals, - getCenter, - getHeight, - wrapAndSliceX -} from "./chunk-WXT7AISE.js"; // node_modules/ol/featureloader.js var withCredentials = false; @@ -1560,4 +1560,4 @@ export { VectorSourceEvent, Vector_default }; -//# sourceMappingURL=chunk-2R5MNV34.js.map +//# sourceMappingURL=chunk-JOMDBGKW.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-2R5MNV34.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-JOMDBGKW.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-2R5MNV34.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-JOMDBGKW.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-UWCYJJIT.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-LKZG5HMW.js similarity index 98% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-UWCYJJIT.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-LKZG5HMW.js index d6ed13a..2b46778 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-UWCYJJIT.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-LKZG5HMW.js @@ -3,7 +3,7 @@ import { } from "./chunk-F2HSAX6I.js"; import { MapBrowserEventType_default -} from "./chunk-OOF5364O.js"; +} from "./chunk-POVGKIBQ.js"; // node_modules/ol/interaction/Pointer.js var PointerInteraction = class extends Interaction_default { @@ -144,4 +144,4 @@ export { centroid, Pointer_default }; -//# sourceMappingURL=chunk-UWCYJJIT.js.map +//# sourceMappingURL=chunk-LKZG5HMW.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-UWCYJJIT.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-LKZG5HMW.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-UWCYJJIT.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-LKZG5HMW.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-7MYDC76J.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-NER2BJ37.js similarity index 99% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-7MYDC76J.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-NER2BJ37.js index eb5c7f7..25fdc10 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-7MYDC76J.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-NER2BJ37.js @@ -14,17 +14,17 @@ import { import { SimpleGeometry_default, deflateCoordinates -} from "./chunk-W2FV6P6N.js"; -import { - binarySearch, - extend -} from "./chunk-FQY6EMA7.js"; +} from "./chunk-6GRRGW6V.js"; import { closestSquaredDistanceXY } from "./chunk-WXT7AISE.js"; import { lerp } from "./chunk-V7KTD4MH.js"; +import { + binarySearch, + extend +} from "./chunk-FQY6EMA7.js"; // node_modules/ol/geom/flat/interpolate.js function interpolatePoint(flatCoordinates, offset, end, stride, fraction, dest, dimension) { @@ -440,4 +440,4 @@ export { lineStringsCoordinateAtM, LineString_default }; -//# sourceMappingURL=chunk-7MYDC76J.js.map +//# sourceMappingURL=chunk-NER2BJ37.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-7MYDC76J.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-NER2BJ37.js.map similarity index 100% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-7MYDC76J.js.map rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-NER2BJ37.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-OOF5364O.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-OOF5364O.js.map deleted file mode 100644 index 2034541..0000000 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-OOF5364O.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../ol/MapBrowserEventType.js", "../../ol/events/condition.js"], - "sourcesContent": ["/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: EventType.CLICK,\n\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: EventType.DBLCLICK,\n\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n\n/***\n * @typedef {'singleclick'|'click'|'dblclick'|'pointerdrag'|'pointermove'} Types\n */\n", "/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {assert} from '../asserts.js';\nimport {FALSE, TRUE} from '../functions.js';\nimport {MAC, WEBKIT} from '../has.js';\n\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n const conditions = arguments;\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} All conditions passed.\n */\n return function (event) {\n let pass = true;\n for (let i = 0, ii = conditions.length; i < ii; ++i) {\n pass = pass && conditions[i](event);\n if (!pass) {\n break;\n }\n }\n return pass;\n };\n}\n\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport const altKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport const altShiftKeysOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `
`.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport const focus = function (event) {\n const targetElement = event.map.getTargetElement();\n const rootNode = targetElement.getRootNode();\n const activeElement = event.map.getOwnerDocument().activeElement;\n\n return rootNode instanceof ShadowRoot\n ? rootNode.host.contains(activeElement)\n : targetElement.contains(activeElement);\n};\n\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport const focusWithTabindex = function (event) {\n const targetElement = event.map.getTargetElement();\n const rootNode = targetElement.getRootNode();\n const tabIndexCandidate =\n rootNode instanceof ShadowRoot ? rootNode.host : targetElement;\n\n return tabIndexCandidate.hasAttribute('tabindex') ? focus(event) : true;\n};\n\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport const always = TRUE;\n\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport const click = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport const mouseActionButton = function (mapBrowserEvent) {\n const originalEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return originalEvent.button == 0 && !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport const never = FALSE;\n\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport const pointerMove = function (mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport const singleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport const doubleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport const noModifierKeys = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKey = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return MAC ? originalEvent.metaKey : originalEvent.ctrlKey;\n};\n\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport const shiftKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the target element is not editable, i.e. not an `input`,\n * `select`, or `textarea` element and no `contenteditable` attribute is\n * set or inherited, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if the target element is not editable.\n * @api\n */\nexport const targetNotEditable = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const tagName = /** @type {Element} */ (originalEvent.target).tagName;\n return (\n tagName !== 'INPUT' &&\n tagName !== 'SELECT' &&\n tagName !== 'TEXTAREA' &&\n // `isContentEditable` is only available on `HTMLElement`, but it may also be a\n // different type like `SVGElement`.\n // @ts-ignore\n !originalEvent.target.isContentEditable\n );\n};\n\n/**\n * Return `true` if the event originates from a mouse device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a mouse device.\n * @api\n */\nexport const mouseOnly = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvent !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvent.pointerType == 'mouse';\n};\n\n/**\n * Return `true` if the event originates from a touchable device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a touchable device.\n * @api\n */\nexport const touchOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvt !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'touch';\n};\n\n/**\n * Return `true` if the event originates from a digital pen.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a digital pen.\n * @api\n */\nexport const penOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvt !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'pen';\n};\n\n/**\n * Return `true` if the event originates from a primary pointer in\n * contact with the surface or if the left mouse button is pressed.\n * See https://www.w3.org/TR/pointerevents/#button-states.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a primary pointer.\n * @api\n */\nexport const primaryAction = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvent !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n return pointerEvent.isPrimary && pointerEvent.button === 0;\n};\n"], - "mappings": "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", - "names": [] -} diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-POVGKIBQ.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-POVGKIBQ.js new file mode 100644 index 0000000..f58d2f1 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-POVGKIBQ.js @@ -0,0 +1,51 @@ +import { + EventType_default +} from "./chunk-33VDV4DG.js"; + +// node_modules/ol/MapBrowserEventType.js +var MapBrowserEventType_default = { + /** + * A true single click with no dragging and no double click. Note that this + * event is delayed by 250 ms to ensure that it is not a double click. + * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick + * @api + */ + SINGLECLICK: "singleclick", + /** + * A click with no dragging. A double click will fire two of this. + * @event module:ol/MapBrowserEvent~MapBrowserEvent#click + * @api + */ + CLICK: EventType_default.CLICK, + /** + * A true double click, with no dragging. + * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick + * @api + */ + DBLCLICK: EventType_default.DBLCLICK, + /** + * Triggered when a pointer is dragged. + * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag + * @api + */ + POINTERDRAG: "pointerdrag", + /** + * Triggered when a pointer is moved. Note that on touch devices this is + * triggered when the map is panned, so is not the same as mousemove. + * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove + * @api + */ + POINTERMOVE: "pointermove", + POINTERDOWN: "pointerdown", + POINTERUP: "pointerup", + POINTEROVER: "pointerover", + POINTEROUT: "pointerout", + POINTERENTER: "pointerenter", + POINTERLEAVE: "pointerleave", + POINTERCANCEL: "pointercancel" +}; + +export { + MapBrowserEventType_default +}; +//# sourceMappingURL=chunk-POVGKIBQ.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-POVGKIBQ.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-POVGKIBQ.js.map new file mode 100644 index 0000000..5884953 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-POVGKIBQ.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../ol/MapBrowserEventType.js"], + "sourcesContent": ["/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: EventType.CLICK,\n\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: EventType.DBLCLICK,\n\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n\n/***\n * @typedef {'singleclick'|'click'|'dblclick'|'pointerdrag'|'pointermove'} Types\n */\n"], + "mappings": ";;;;;AASA,IAAO,8BAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,OAAO,kBAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjB,UAAU,kBAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQb,aAAa;AAAA,EAEb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AACjB;", + "names": [] +} diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-RMGZ5HGX.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-RMGZ5HGX.js new file mode 100644 index 0000000..8f15bf9 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-RMGZ5HGX.js @@ -0,0 +1,64 @@ +import { + toRadians +} from "./chunk-V7KTD4MH.js"; + +// node_modules/ol/rotationconstraint.js +function disable(rotation) { + if (rotation !== void 0) { + return 0; + } + return void 0; +} +function none(rotation) { + if (rotation !== void 0) { + return rotation; + } + return void 0; +} +function createSnapToN(n) { + const theta = 2 * Math.PI / n; + return ( + /** + * @param {number|undefined} rotation Rotation. + * @param {boolean} [isMoving] True if an interaction or animation is in progress. + * @return {number|undefined} Rotation. + */ + function(rotation, isMoving) { + if (isMoving) { + return rotation; + } + if (rotation !== void 0) { + rotation = Math.floor(rotation / theta + 0.5) * theta; + return rotation; + } + return void 0; + } + ); +} +function createSnapToZero(tolerance) { + const t = tolerance === void 0 ? toRadians(5) : tolerance; + return ( + /** + * @param {number|undefined} rotation Rotation. + * @param {boolean} [isMoving] True if an interaction or animation is in progress. + * @return {number|undefined} Rotation. + */ + function(rotation, isMoving) { + if (isMoving || rotation === void 0) { + return rotation; + } + if (Math.abs(rotation) <= t) { + return 0; + } + return rotation; + } + ); +} + +export { + disable, + none, + createSnapToN, + createSnapToZero +}; +//# sourceMappingURL=chunk-RMGZ5HGX.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-RMGZ5HGX.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-RMGZ5HGX.js.map new file mode 100644 index 0000000..445f24d --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-RMGZ5HGX.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../ol/rotationconstraint.js"], + "sourcesContent": ["/**\n * @module ol/rotationconstraint\n */\nimport {toRadians} from './math.js';\n\n/**\n * @typedef {function((number|undefined), boolean=): (number|undefined)} Type\n */\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function disable(rotation) {\n if (rotation !== undefined) {\n return 0;\n }\n return undefined;\n}\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function none(rotation) {\n if (rotation !== undefined) {\n return rotation;\n }\n return undefined;\n}\n\n/**\n * @param {number} n N.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToN(n) {\n const theta = (2 * Math.PI) / n;\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, isMoving) {\n if (isMoving) {\n return rotation;\n }\n\n if (rotation !== undefined) {\n rotation = Math.floor(rotation / theta + 0.5) * theta;\n return rotation;\n }\n return undefined;\n }\n );\n}\n\n/**\n * @param {number} [tolerance] Tolerance.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToZero(tolerance) {\n const t = tolerance === undefined ? toRadians(5) : tolerance;\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, isMoving) {\n if (isMoving || rotation === undefined) {\n return rotation;\n }\n\n if (Math.abs(rotation) <= t) {\n return 0;\n }\n return rotation;\n }\n );\n}\n"], + "mappings": ";;;;;AAaO,SAAS,QAAQ,UAAU;AAChC,MAAI,aAAa,QAAW;AAC1B,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAMO,SAAS,KAAK,UAAU;AAC7B,MAAI,aAAa,QAAW;AAC1B,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAMO,SAAS,cAAc,GAAG;AAC/B,QAAM,QAAS,IAAI,KAAK,KAAM;AAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAME,SAAU,UAAU,UAAU;AAC5B,UAAI,UAAU;AACZ,eAAO;AAAA,MACT;AAEA,UAAI,aAAa,QAAW;AAC1B,mBAAW,KAAK,MAAM,WAAW,QAAQ,GAAG,IAAI;AAChD,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA;AAEJ;AAMO,SAAS,iBAAiB,WAAW;AAC1C,QAAM,IAAI,cAAc,SAAY,UAAU,CAAC,IAAI;AACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAME,SAAU,UAAU,UAAU;AAC5B,UAAI,YAAY,aAAa,QAAW;AACtC,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,IAAI,QAAQ,KAAK,GAAG;AAC3B,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA;AAEJ;", + "names": [] +} diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-OOF5364O.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VAUZYTLA.js similarity index 79% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-OOF5364O.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-VAUZYTLA.js index e3d246a..749d1c3 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-OOF5364O.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VAUZYTLA.js @@ -2,58 +2,17 @@ import { MAC, WEBKIT } from "./chunk-ZPDML4Q3.js"; +import { + MapBrowserEventType_default +} from "./chunk-POVGKIBQ.js"; import { assert } from "./chunk-QFCIXVZ3.js"; import { - EventType_default, FALSE, TRUE } from "./chunk-33VDV4DG.js"; -// node_modules/ol/MapBrowserEventType.js -var MapBrowserEventType_default = { - /** - * A true single click with no dragging and no double click. Note that this - * event is delayed by 250 ms to ensure that it is not a double click. - * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick - * @api - */ - SINGLECLICK: "singleclick", - /** - * A click with no dragging. A double click will fire two of this. - * @event module:ol/MapBrowserEvent~MapBrowserEvent#click - * @api - */ - CLICK: EventType_default.CLICK, - /** - * A true double click, with no dragging. - * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick - * @api - */ - DBLCLICK: EventType_default.DBLCLICK, - /** - * Triggered when a pointer is dragged. - * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag - * @api - */ - POINTERDRAG: "pointerdrag", - /** - * Triggered when a pointer is moved. Note that on touch devices this is - * triggered when the map is panned, so is not the same as mousemove. - * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove - * @api - */ - POINTERMOVE: "pointermove", - POINTERDOWN: "pointerdown", - POINTERUP: "pointerup", - POINTEROVER: "pointerover", - POINTEROUT: "pointerout", - POINTERENTER: "pointerenter", - POINTERLEAVE: "pointerleave", - POINTERCANCEL: "pointercancel" -}; - // node_modules/ol/events/condition.js function all(var_args) { const conditions = arguments; @@ -203,7 +162,6 @@ var primaryAction = function(mapBrowserEvent) { }; export { - MapBrowserEventType_default, all, altKeyOnly, altShiftKeysOnly, @@ -226,4 +184,4 @@ export { penOnly, primaryAction }; -//# sourceMappingURL=chunk-OOF5364O.js.map +//# sourceMappingURL=chunk-VAUZYTLA.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VAUZYTLA.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VAUZYTLA.js.map new file mode 100644 index 0000000..41f59e5 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VAUZYTLA.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../ol/events/condition.js"], + "sourcesContent": ["/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {assert} from '../asserts.js';\nimport {FALSE, TRUE} from '../functions.js';\nimport {MAC, WEBKIT} from '../has.js';\n\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n const conditions = arguments;\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} All conditions passed.\n */\n return function (event) {\n let pass = true;\n for (let i = 0, ii = conditions.length; i < ii; ++i) {\n pass = pass && conditions[i](event);\n if (!pass) {\n break;\n }\n }\n return pass;\n };\n}\n\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport const altKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport const altShiftKeysOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `
`.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport const focus = function (event) {\n const targetElement = event.map.getTargetElement();\n const rootNode = targetElement.getRootNode();\n const activeElement = event.map.getOwnerDocument().activeElement;\n\n return rootNode instanceof ShadowRoot\n ? rootNode.host.contains(activeElement)\n : targetElement.contains(activeElement);\n};\n\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport const focusWithTabindex = function (event) {\n const targetElement = event.map.getTargetElement();\n const rootNode = targetElement.getRootNode();\n const tabIndexCandidate =\n rootNode instanceof ShadowRoot ? rootNode.host : targetElement;\n\n return tabIndexCandidate.hasAttribute('tabindex') ? focus(event) : true;\n};\n\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport const always = TRUE;\n\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport const click = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport const mouseActionButton = function (mapBrowserEvent) {\n const originalEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return originalEvent.button == 0 && !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport const never = FALSE;\n\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport const pointerMove = function (mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport const singleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport const doubleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport const noModifierKeys = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKey = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return MAC ? originalEvent.metaKey : originalEvent.ctrlKey;\n};\n\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport const shiftKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the target element is not editable, i.e. not an `input`,\n * `select`, or `textarea` element and no `contenteditable` attribute is\n * set or inherited, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if the target element is not editable.\n * @api\n */\nexport const targetNotEditable = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const tagName = /** @type {Element} */ (originalEvent.target).tagName;\n return (\n tagName !== 'INPUT' &&\n tagName !== 'SELECT' &&\n tagName !== 'TEXTAREA' &&\n // `isContentEditable` is only available on `HTMLElement`, but it may also be a\n // different type like `SVGElement`.\n // @ts-ignore\n !originalEvent.target.isContentEditable\n );\n};\n\n/**\n * Return `true` if the event originates from a mouse device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a mouse device.\n * @api\n */\nexport const mouseOnly = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvent !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvent.pointerType == 'mouse';\n};\n\n/**\n * Return `true` if the event originates from a touchable device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a touchable device.\n * @api\n */\nexport const touchOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvt !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'touch';\n};\n\n/**\n * Return `true` if the event originates from a digital pen.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a digital pen.\n * @api\n */\nexport const penOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvt !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'pen';\n};\n\n/**\n * Return `true` if the event originates from a primary pointer in\n * contact with the surface or if the left mouse button is pressed.\n * See https://www.w3.org/TR/pointerevents/#button-states.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a primary pointer.\n * @api\n */\nexport const primaryAction = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvent !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n return pointerEvent.isPrimary && pointerEvent.button === 0;\n};\n"], + "mappings": "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", + "names": [] +} diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6SP66AVH.js b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VWBYIKLE.js similarity index 98% rename from VentusFlowWebGUI/node_modules/.vite/deps/chunk-6SP66AVH.js rename to VentusFlowWebGUI/node_modules/.vite/deps/chunk-VWBYIKLE.js index 8c338c3..8db2e35 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-6SP66AVH.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VWBYIKLE.js @@ -1,6 +1,3 @@ -import { - asArray -} from "./chunk-33EAEVLP.js"; import { DEFAULT_TILE_SIZE } from "./chunk-FM44FOIC.js"; @@ -9,13 +6,22 @@ import { createCanvasContext2D, getSharedCanvasContext2D } from "./chunk-WEQYAO4O.js"; +import { + createSnapToN, + createSnapToZero, + disable, + none +} from "./chunk-RMGZ5HGX.js"; +import { + fromExtent +} from "./chunk-47JK3GLV.js"; import { easeOut, inAndOut } from "./chunk-LMC3RO5P.js"; import { - fromExtent -} from "./chunk-5CPSJRE2.js"; + asArray +} from "./chunk-33EAEVLP.js"; import { apply, compose, @@ -33,25 +39,6 @@ import { toUserCoordinate, toUserExtent } from "./chunk-5ACH5F45.js"; -import { - assert -} from "./chunk-QFCIXVZ3.js"; -import { - Event_default, - Object_default, - Observable_default, - abstract, - listen, - unlistenByKey -} from "./chunk-V2VQBN44.js"; -import { - EventType_default, - VOID -} from "./chunk-33VDV4DG.js"; -import { - equals, - linearFindNearest -} from "./chunk-FQY6EMA7.js"; import { add, equals2, @@ -67,11 +54,29 @@ import { isEmpty, rotate } from "./chunk-WXT7AISE.js"; +import { + Event_default, + Object_default, + Observable_default, + abstract, + listen, + unlistenByKey +} from "./chunk-V2VQBN44.js"; import { clamp, - modulo, - toRadians + modulo } from "./chunk-V7KTD4MH.js"; +import { + assert +} from "./chunk-QFCIXVZ3.js"; +import { + EventType_default, + VOID +} from "./chunk-33VDV4DG.js"; +import { + equals, + linearFindNearest +} from "./chunk-FQY6EMA7.js"; import { __publicField } from "./chunk-V6TY7KAL.js"; @@ -134,7 +139,7 @@ function createExtent(extent, onlyCenter, smooth) { } ); } -function none(center) { +function none2(center) { return center; } @@ -276,59 +281,6 @@ function createMinMaxResolution(maxResolution, minResolution, smooth, maxExtent, ); } -// node_modules/ol/rotationconstraint.js -function disable(rotation) { - if (rotation !== void 0) { - return 0; - } - return void 0; -} -function none2(rotation) { - if (rotation !== void 0) { - return rotation; - } - return void 0; -} -function createSnapToN(n) { - const theta = 2 * Math.PI / n; - return ( - /** - * @param {number|undefined} rotation Rotation. - * @param {boolean} [isMoving] True if an interaction or animation is in progress. - * @return {number|undefined} Rotation. - */ - function(rotation, isMoving) { - if (isMoving) { - return rotation; - } - if (rotation !== void 0) { - rotation = Math.floor(rotation / theta + 0.5) * theta; - return rotation; - } - return void 0; - } - ); -} -function createSnapToZero(tolerance) { - const t = tolerance === void 0 ? toRadians(5) : tolerance; - return ( - /** - * @param {number|undefined} rotation Rotation. - * @param {boolean} [isMoving] True if an interaction or animation is in progress. - * @return {number|undefined} Rotation. - */ - function(rotation, isMoving) { - if (isMoving || rotation === void 0) { - return rotation; - } - if (Math.abs(rotation) <= t) { - return 0; - } - return rotation; - } - ); -} - // node_modules/ol/View.js var DEFAULT_MIN_ZOOM = 0; var View = class extends Object_default { @@ -1700,7 +1652,7 @@ function createCenterConstraint(options) { extent[2] = Infinity; return createExtent(extent, false, false); } - return none; + return none2; } function createResolutionConstraint(options) { let resolutionConstraint; @@ -1806,12 +1758,12 @@ function createRotationConstraint(options) { return createSnapToZero(); } if (constrainRotation === false) { - return none2; + return none; } if (typeof constrainRotation === "number") { return createSnapToN(constrainRotation); } - return none2; + return none; } return disable; } @@ -3135,10 +3087,9 @@ export { Event_default2 as Event_default, canvasPool, Layer_default2 as Layer_default, - disable, View_default, Base_default, inView, Layer_default3 as Layer_default2 }; -//# sourceMappingURL=chunk-6SP66AVH.js.map +//# sourceMappingURL=chunk-VWBYIKLE.js.map diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VWBYIKLE.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VWBYIKLE.js.map new file mode 100644 index 0000000..4926e61 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/chunk-VWBYIKLE.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../ol/ViewHint.js", "../../ol/ViewProperty.js", "../../ol/centerconstraint.js", "../../ol/resolutionconstraint.js", "../../ol/View.js", "../../ol/render/EventType.js", "../../ol/render/Event.js", "../../ol/render/canvas/ZIndexContext.js", "../../ol/renderer/Layer.js", "../../ol/renderer/canvas/Layer.js", "../../ol/layer/Property.js", "../../ol/layer/Base.js", "../../ol/layer/Layer.js"], + "sourcesContent": ["/**\n * @module ol/ViewHint\n */\n\n/**\n * @enum {number}\n */\nexport default {\n ANIMATING: 0,\n INTERACTING: 1,\n};\n", "/**\n * @module ol/ViewProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n CENTER: 'center',\n RESOLUTION: 'resolution',\n ROTATION: 'rotation',\n};\n", "/**\n * @module ol/centerconstraint\n */\nimport {clamp} from './math.js';\n\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n return (\n /**\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n * @param {number|undefined} resolution Resolution.\n * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @param {Array} [centerShift] Shift between map center and viewport center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\n function (center, resolution, size, isMoving, centerShift) {\n if (!center) {\n return undefined;\n }\n if (!resolution && !onlyCenter) {\n return center;\n }\n const viewWidth = onlyCenter ? 0 : size[0] * resolution;\n const viewHeight = onlyCenter ? 0 : size[1] * resolution;\n const shiftX = centerShift ? centerShift[0] : 0;\n const shiftY = centerShift ? centerShift[1] : 0;\n let minX = extent[0] + viewWidth / 2 + shiftX;\n let maxX = extent[2] - viewWidth / 2 + shiftX;\n let minY = extent[1] + viewHeight / 2 + shiftY;\n let maxY = extent[3] - viewHeight / 2 + shiftY;\n\n // note: when zooming out of bounds, min and max values for x and y may\n // end up inverted (min > max); this has to be accounted for\n if (minX > maxX) {\n minX = (maxX + minX) / 2;\n maxX = minX;\n }\n if (minY > maxY) {\n minY = (maxY + minY) / 2;\n maxY = minY;\n }\n\n let x = clamp(center[0], minX, maxX);\n let y = clamp(center[1], minY, maxY);\n\n // during an interaction, allow some overscroll\n if (isMoving && smooth && resolution) {\n const ratio = 30 * resolution;\n x +=\n -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n y +=\n -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n }\n\n return [x, y];\n }\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} [center] Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n return center;\n}\n", "/**\n * @module ol/resolutionconstraint\n */\nimport {linearFindNearest} from './array.js';\nimport {getHeight, getWidth} from './extent.js';\nimport {clamp} from './math.js';\n\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(\n resolution,\n maxExtent,\n viewportSize,\n showFullExtent,\n) {\n const xResolution = getWidth(maxExtent) / viewportSize[0];\n const yResolution = getHeight(maxExtent) / viewportSize[1];\n\n if (showFullExtent) {\n return Math.min(resolution, Math.max(xResolution, yResolution));\n }\n return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n * - at 1, ln(x) is 0\n * - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n let result = Math.min(resolution, maxResolution);\n const ratio = 50;\n\n result *=\n Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n 1;\n if (minResolution) {\n result = Math.max(result, minResolution);\n result /=\n Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n ratio +\n 1;\n }\n return clamp(result, minResolution / 2, maxResolution * 2);\n}\n\n/**\n * @param {Array} resolutions Resolutions.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(\n resolutions,\n smooth,\n maxExtent,\n showFullExtent,\n) {\n smooth = smooth !== undefined ? smooth : true;\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const maxResolution = resolutions[0];\n const minResolution = resolutions[resolutions.length - 1];\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent,\n )\n : maxResolution;\n\n // during interacting or animating, allow intermediary values\n if (isMoving) {\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution,\n );\n }\n\n const capped = Math.min(cappedMaxRes, resolution);\n const z = Math.floor(linearFindNearest(resolutions, capped, direction));\n if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n return resolutions[z + 1];\n }\n return resolutions[z];\n }\n return undefined;\n }\n );\n}\n\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number} [minResolution] Minimum resolution.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(\n power,\n maxResolution,\n minResolution,\n smooth,\n maxExtent,\n showFullExtent,\n) {\n smooth = smooth !== undefined ? smooth : true;\n minResolution = minResolution !== undefined ? minResolution : 0;\n\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent,\n )\n : maxResolution;\n\n // during interacting or animating, allow intermediary values\n if (isMoving) {\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution,\n );\n }\n\n const tolerance = 1e-9;\n const minZoomLevel = Math.ceil(\n Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance,\n );\n const offset = -direction * (0.5 - tolerance) + 0.5;\n const capped = Math.min(cappedMaxRes, resolution);\n const cappedZoomLevel = Math.floor(\n Math.log(maxResolution / capped) / Math.log(power) + offset,\n );\n const zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n const newResolution = maxResolution / Math.pow(power, zoomLevel);\n return clamp(newResolution, minResolution, cappedMaxRes);\n }\n return undefined;\n }\n );\n}\n\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n maxExtent,\n showFullExtent,\n) {\n smooth = smooth !== undefined ? smooth : true;\n\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent,\n )\n : maxResolution;\n\n if (!smooth || !isMoving) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution,\n );\n }\n return undefined;\n }\n );\n}\n", "/**\n * @module ol/View\n */\nimport BaseObject from './Object.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport {linearFindNearest} from './array.js';\nimport {assert} from './asserts.js';\nimport {createExtent, none as centerNone} from './centerconstraint.js';\nimport {\n add as addCoordinate,\n equals,\n equals as coordinatesEqual,\n rotate as rotateCoordinate,\n} from './coordinate.js';\nimport {easeOut, inAndOut} from './easing.js';\nimport {\n getCenter,\n getForViewAndSize,\n getHeight,\n getWidth,\n isEmpty,\n} from './extent.js';\nimport {VOID} from './functions.js';\nimport {fromExtent as polygonFromExtent} from './geom/Polygon.js';\nimport {clamp, modulo} from './math.js';\nimport {\n METERS_PER_UNIT,\n createProjection,\n disableCoordinateWarning,\n fromUserCoordinate,\n fromUserExtent,\n getUserProjection,\n toUserCoordinate,\n toUserExtent,\n} from './proj.js';\nimport {\n createMinMaxResolution,\n createSnapToPower,\n createSnapToResolutions,\n} from './resolutionconstraint.js';\nimport {\n createSnapToN,\n createSnapToZero,\n disable,\n none as rotationNone,\n} from './rotationconstraint.js';\nimport {DEFAULT_TILE_SIZE} from './tilegrid/common.js';\n\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter] Source center.\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter] Target center.\n * @property {number} [sourceResolution] Source resolution.\n * @property {number} [targetResolution] Target resolution.\n * @property {number} [sourceRotation] Source rotation.\n * @property {number} [targetRotation] Target rotation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Anchor.\n * @property {number} start Start.\n * @property {number} duration Duration.\n * @property {boolean} complete Complete.\n * @property {function(number):number} easing Easing.\n * @property {function(boolean):void} callback Callback.\n */\n\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center Center.\n * @property {import(\"./resolutionconstraint.js\").Type} resolution Resolution.\n * @property {import(\"./rotationconstraint.js\").Type} rotation Rotation.\n */\n\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to\n * fit the extent into. Defaults to the size of the map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired box size\n * (e.g. `map.getSize()`).\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint. It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`. If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`. Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`. Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge. If `true` the map\n * may show multiple worlds at low zoom levels. Only used if the `projection` is\n * global. Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array} [resolutions] Resolutions that determine the\n * zoom levels if specified. The index in the array corresponds to the zoom level,\n * therefore the resolution values have to be in descending order. It also constrains\n * the resolution by the minimum and maximum value. If set the `maxResolution`,\n * `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation. If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center Center (in view projection coordinates).\n * @property {import(\"./proj/Projection.js\").default} projection Projection.\n * @property {number} resolution Resolution.\n * @property {import(\"./coordinate.js\").Coordinate} [nextCenter] The next center during an animation series.\n * @property {number} [nextResolution] The next resolution during an animation series.\n * @property {number} [nextRotation] The next rotation during an animation series.\n * @property {number} rotation Rotation.\n * @property {number} zoom Zoom.\n */\n\n/**\n * Like {@link import(\"./Map.js\").FrameState}, but just `viewState` and `extent`.\n * @typedef {Object} ViewStateLayerStateExtent\n * @property {State} viewState View state.\n * @property {import(\"./extent.js\").Extent} extent Extent (in user projection coordinates).\n * @property {Array} [layerStatesArray] Layer states.\n */\n\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nconst DEFAULT_MIN_ZOOM = 0;\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:center'|'change:resolution'|'change:rotation'} ViewObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ViewOnSignature\n */\n\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Web Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nclass View extends BaseObject {\n /**\n * @param {ViewOptions} [options] View options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {ViewOnSignature}\n */\n this.on;\n\n /***\n * @type {ViewOnSignature}\n */\n this.once;\n\n /***\n * @type {ViewOnSignature}\n */\n this.un;\n\n options = Object.assign({}, options);\n\n /**\n * @private\n * @type {Array}\n */\n this.hints_ = [0, 0];\n\n /**\n * @private\n * @type {Array>}\n */\n this.animations_ = [];\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.updateAnimationKey_;\n\n /**\n * @private\n * @const\n * @type {import(\"./proj/Projection.js\").default}\n */\n this.projection_ = createProjection(options.projection, 'EPSG:3857');\n\n /**\n * @private\n * @type {import(\"./size.js\").Size}\n */\n this.viewportSize_ = [100, 100];\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.targetCenter_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetResolution_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate}\n */\n this.nextCenter_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.nextResolution_;\n\n /**\n * @private\n * @type {number}\n */\n this.nextRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.cancelAnchor_ = undefined;\n\n if (options.projection) {\n disableCoordinateWarning();\n }\n if (options.center) {\n options.center = fromUserCoordinate(options.center, this.projection_);\n }\n if (options.extent) {\n options.extent = fromUserExtent(options.extent, this.projection_);\n }\n\n this.applyOptions_(options);\n }\n\n /**\n * Set up the view with the given options.\n * @param {ViewOptions} options View options.\n */\n applyOptions_(options) {\n const properties = Object.assign({}, options);\n for (const key in ViewProperty) {\n delete properties[key];\n }\n this.setProperties(properties, true);\n\n const resolutionConstraintInfo = createResolutionConstraint(options);\n\n /**\n * @private\n * @type {number}\n */\n this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.minResolution_ = resolutionConstraintInfo.minResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n\n /**\n * @private\n * @type {Array|undefined}\n */\n this.resolutions_ = options.resolutions;\n\n /**\n * @type {Array|undefined}\n * @private\n */\n this.padding_ = options.padding;\n\n /**\n * @private\n * @type {number}\n */\n this.minZoom_ = resolutionConstraintInfo.minZoom;\n\n const centerConstraint = createCenterConstraint(options);\n const resolutionConstraint = resolutionConstraintInfo.constraint;\n const rotationConstraint = createRotationConstraint(options);\n\n /**\n * @private\n * @type {Constraints}\n */\n this.constraints_ = {\n center: centerConstraint,\n resolution: resolutionConstraint,\n rotation: rotationConstraint,\n };\n\n this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n this.setCenterInternal(\n options.center !== undefined ? options.center : null,\n );\n if (options.resolution !== undefined) {\n this.setResolution(options.resolution);\n } else if (options.zoom !== undefined) {\n this.setZoom(options.zoom);\n }\n }\n\n /**\n * Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from that\n * content. The order of the values in the array is top, right, bottom, left.\n * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n * @type {Array|undefined}\n * @api\n */\n get padding() {\n return this.padding_;\n }\n set padding(padding) {\n let oldPadding = this.padding_;\n this.padding_ = padding;\n const center = this.getCenterInternal();\n if (center) {\n const newPadding = padding || [0, 0, 0, 0];\n oldPadding = oldPadding || [0, 0, 0, 0];\n const resolution = this.getResolution();\n const offsetX =\n (resolution / 2) *\n (newPadding[3] - oldPadding[3] + oldPadding[1] - newPadding[1]);\n const offsetY =\n (resolution / 2) *\n (newPadding[0] - oldPadding[0] + oldPadding[2] - newPadding[2]);\n this.setCenterInternal([center[0] + offsetX, center[1] - offsetY]);\n }\n }\n\n /**\n * Get an updated version of the view options used to construct the view. The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options. The provided options can be used to apply new min/max zoom or\n * resolution limits.\n * @param {ViewOptions} newOptions New options to be applied.\n * @return {ViewOptions} New options updated with the current view state.\n */\n getUpdatedOptions_(newOptions) {\n const options = this.getProperties();\n\n // preserve resolution (or zoom)\n if (options.resolution !== undefined) {\n options.resolution = this.getResolution();\n } else {\n options.zoom = this.getZoom();\n }\n\n // preserve center\n options.center = this.getCenterInternal();\n\n // preserve rotation\n options.rotation = this.getRotation();\n\n return Object.assign({}, options, newOptions);\n }\n\n /**\n * Animate the view. The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states. For example,\n * to animate the view to a new zoom level:\n *\n * view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing. You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link module:ol/easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects. For example, to first zoom and then pan:\n *\n * view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series. The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n * options. Multiple animations can be run in series by passing multiple\n * options objects. To run multiple animations in parallel, call the method\n * multiple times. An optional callback can be provided as a final\n * argument. The callback will be called with a boolean indicating whether\n * the animation completed without being cancelled.\n * @api\n */\n animate(var_args) {\n if (this.isDef() && !this.getAnimating()) {\n this.resolveConstraints(0);\n }\n const args = new Array(arguments.length);\n for (let i = 0; i < args.length; ++i) {\n let options = arguments[i];\n if (options.center) {\n options = Object.assign({}, options);\n options.center = fromUserCoordinate(\n options.center,\n this.getProjection(),\n );\n }\n if (options.anchor) {\n options = Object.assign({}, options);\n options.anchor = fromUserCoordinate(\n options.anchor,\n this.getProjection(),\n );\n }\n args[i] = options;\n }\n this.animateInternal.apply(this, args);\n }\n\n /**\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n */\n animateInternal(var_args) {\n let animationCount = arguments.length;\n let callback;\n if (\n animationCount > 1 &&\n typeof arguments[animationCount - 1] === 'function'\n ) {\n callback = arguments[animationCount - 1];\n --animationCount;\n }\n\n let i = 0;\n for (; i < animationCount && !this.isDef(); ++i) {\n // if view properties are not yet set, shortcut to the final state\n const state = arguments[i];\n if (state.center) {\n this.setCenterInternal(state.center);\n }\n if (state.zoom !== undefined) {\n this.setZoom(state.zoom);\n } else if (state.resolution) {\n this.setResolution(state.resolution);\n }\n if (state.rotation !== undefined) {\n this.setRotation(state.rotation);\n }\n }\n if (i === animationCount) {\n if (callback) {\n animationCallback(callback, true);\n }\n return;\n }\n\n let start = Date.now();\n let center = this.targetCenter_.slice();\n let resolution = this.targetResolution_;\n let rotation = this.targetRotation_;\n const series = [];\n for (; i < animationCount; ++i) {\n const options = /** @type {AnimationOptions} */ (arguments[i]);\n\n const animation = {\n start: start,\n complete: false,\n anchor: options.anchor,\n duration: options.duration !== undefined ? options.duration : 1000,\n easing: options.easing || inAndOut,\n callback: callback,\n };\n\n if (options.center) {\n animation.sourceCenter = center;\n animation.targetCenter = options.center.slice();\n center = animation.targetCenter;\n }\n\n if (options.zoom !== undefined) {\n animation.sourceResolution = resolution;\n animation.targetResolution = this.getResolutionForZoom(options.zoom);\n resolution = animation.targetResolution;\n } else if (options.resolution) {\n animation.sourceResolution = resolution;\n animation.targetResolution = options.resolution;\n resolution = animation.targetResolution;\n }\n\n if (options.rotation !== undefined) {\n animation.sourceRotation = rotation;\n const delta =\n modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n animation.targetRotation = rotation + delta;\n rotation = animation.targetRotation;\n }\n\n // check if animation is a no-op\n if (isNoopAnimation(animation)) {\n animation.complete = true;\n // we still push it onto the series for callback handling\n } else {\n start += animation.duration;\n }\n series.push(animation);\n }\n this.animations_.push(series);\n this.setHint(ViewHint.ANIMATING, 1);\n this.updateAnimations_();\n }\n\n /**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\n getAnimating() {\n return this.hints_[ViewHint.ANIMATING] > 0;\n }\n\n /**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\n getInteracting() {\n return this.hints_[ViewHint.INTERACTING] > 0;\n }\n\n /**\n * Cancel any ongoing animations.\n * @api\n */\n cancelAnimations() {\n this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n let anchor;\n for (let i = 0, ii = this.animations_.length; i < ii; ++i) {\n const series = this.animations_[i];\n if (series[0].callback) {\n animationCallback(series[0].callback, false);\n }\n if (!anchor) {\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (!animation.complete) {\n anchor = animation.anchor;\n break;\n }\n }\n }\n }\n this.animations_.length = 0;\n this.cancelAnchor_ = anchor;\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n }\n\n /**\n * Update all animations.\n */\n updateAnimations_() {\n if (this.updateAnimationKey_ !== undefined) {\n cancelAnimationFrame(this.updateAnimationKey_);\n this.updateAnimationKey_ = undefined;\n }\n if (!this.getAnimating()) {\n return;\n }\n const now = Date.now();\n let more = false;\n for (let i = this.animations_.length - 1; i >= 0; --i) {\n const series = this.animations_[i];\n let seriesComplete = true;\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (animation.complete) {\n continue;\n }\n const elapsed = now - animation.start;\n let fraction =\n animation.duration > 0 ? elapsed / animation.duration : 1;\n if (fraction >= 1) {\n animation.complete = true;\n fraction = 1;\n } else {\n seriesComplete = false;\n }\n const progress = animation.easing(fraction);\n if (animation.sourceCenter) {\n const x0 = animation.sourceCenter[0];\n const y0 = animation.sourceCenter[1];\n const x1 = animation.targetCenter[0];\n const y1 = animation.targetCenter[1];\n this.nextCenter_ = animation.targetCenter;\n const x = x0 + progress * (x1 - x0);\n const y = y0 + progress * (y1 - y0);\n this.targetCenter_ = [x, y];\n }\n if (animation.sourceResolution && animation.targetResolution) {\n const resolution =\n progress === 1\n ? animation.targetResolution\n : animation.sourceResolution +\n progress *\n (animation.targetResolution - animation.sourceResolution);\n if (animation.anchor) {\n const size = this.getViewportSize_(this.getRotation());\n const constrainedResolution = this.constraints_.resolution(\n resolution,\n 0,\n size,\n true,\n );\n this.targetCenter_ = this.calculateCenterZoom(\n constrainedResolution,\n animation.anchor,\n );\n }\n this.nextResolution_ = animation.targetResolution;\n this.targetResolution_ = resolution;\n this.applyTargetState_(true);\n }\n if (\n animation.sourceRotation !== undefined &&\n animation.targetRotation !== undefined\n ) {\n const rotation =\n progress === 1\n ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n Math.PI\n : animation.sourceRotation +\n progress *\n (animation.targetRotation - animation.sourceRotation);\n if (animation.anchor) {\n const constrainedRotation = this.constraints_.rotation(\n rotation,\n true,\n );\n this.targetCenter_ = this.calculateCenterRotate(\n constrainedRotation,\n animation.anchor,\n );\n }\n this.nextRotation_ = animation.targetRotation;\n this.targetRotation_ = rotation;\n }\n this.applyTargetState_(true);\n more = true;\n if (!animation.complete) {\n break;\n }\n }\n if (seriesComplete) {\n this.animations_[i] = null;\n this.setHint(ViewHint.ANIMATING, -1);\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n const callback = series[0].callback;\n if (callback) {\n animationCallback(callback, true);\n }\n }\n }\n // prune completed series\n this.animations_ = this.animations_.filter(Boolean);\n if (more && this.updateAnimationKey_ === undefined) {\n this.updateAnimationKey_ = requestAnimationFrame(\n this.updateAnimations_.bind(this),\n );\n }\n }\n\n /**\n * @param {number} rotation Target rotation.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n */\n calculateCenterRotate(rotation, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n if (currentCenter !== undefined) {\n center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n rotateCoordinate(center, rotation - this.getRotation());\n addCoordinate(center, anchor);\n }\n return center;\n }\n\n /**\n * @param {number} resolution Target resolution.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n */\n calculateCenterZoom(resolution, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n const currentResolution = this.getResolution();\n if (currentCenter !== undefined && currentResolution !== undefined) {\n const x =\n anchor[0] -\n (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n const y =\n anchor[1] -\n (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n center = [x, y];\n }\n return center;\n }\n\n /**\n * Returns the current viewport size.\n * @private\n * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n */\n getViewportSize_(rotation) {\n const size = this.viewportSize_;\n if (rotation) {\n const w = size[0];\n const h = size[1];\n return [\n Math.abs(w * Math.cos(rotation)) + Math.abs(h * Math.sin(rotation)),\n Math.abs(w * Math.sin(rotation)) + Math.abs(h * Math.cos(rotation)),\n ];\n }\n return size;\n }\n\n /**\n * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n * to avoid performance hit and layout reflow.\n * This should be done on map size change.\n * Note: the constraints are not resolved during an animation to avoid stopping it\n * @param {import(\"./size.js\").Size} [size] Viewport size; if undefined, [100, 100] is assumed\n */\n setViewportSize(size) {\n this.viewportSize_ = Array.isArray(size) ? size.slice() : [100, 100];\n if (!this.getAnimating()) {\n this.resolveConstraints(0);\n }\n }\n\n /**\n * Get the view center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\n getCenter() {\n const center = this.getCenterInternal();\n if (!center) {\n return center;\n }\n return toUserCoordinate(center, this.getProjection());\n }\n\n /**\n * Get the view center without transforming to user projection.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n */\n getCenterInternal() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(ViewProperty.CENTER)\n );\n }\n\n /**\n * @return {Constraints} Constraints.\n */\n getConstraints() {\n return this.constraints_;\n }\n\n /**\n * @return {boolean} Resolution constraint is set\n */\n getConstrainResolution() {\n return this.get('constrainResolution');\n }\n\n /**\n * @param {Array} [hints] Destination array.\n * @return {Array} Hint.\n */\n getHints(hints) {\n if (hints !== undefined) {\n hints[0] = this.hints_[0];\n hints[1] = this.hints_[1];\n return hints;\n }\n return this.hints_.slice();\n }\n\n /**\n * Calculate the extent for the current view state and the passed box size.\n * @param {import(\"./size.js\").Size} [size] The pixel dimensions of the box\n * into which the calculated extent should fit. Defaults to the size of the\n * map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired\n * box size (e.g. `map.getSize()`).\n * @return {import(\"./extent.js\").Extent} Extent.\n * @api\n */\n calculateExtent(size) {\n const extent = this.calculateExtentInternal(size);\n return toUserExtent(extent, this.getProjection());\n }\n\n /**\n * @param {import(\"./size.js\").Size} [size] Box pixel size. If not provided,\n * the map's last known viewport size will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n calculateExtentInternal(size) {\n size = size || this.getViewportSizeMinusPadding_();\n const center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n assert(center, 'The view center is not defined');\n const resolution = /** @type {!number} */ (this.getResolution());\n assert(resolution !== undefined, 'The view resolution is not defined');\n const rotation = /** @type {!number} */ (this.getRotation());\n assert(rotation !== undefined, 'The view rotation is not defined');\n\n return getForViewAndSize(center, resolution, rotation, size);\n }\n\n /**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\n getMaxResolution() {\n return this.maxResolution_;\n }\n\n /**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\n getMinResolution() {\n return this.minResolution_;\n }\n\n /**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.minResolution_)\n );\n }\n\n /**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\n setMaxZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({maxZoom: zoom}));\n }\n\n /**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.maxResolution_)\n );\n }\n\n /**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\n setMinZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({minZoom: zoom}));\n }\n\n /**\n * Set whether the view should allow intermediary zoom levels.\n * @param {boolean} enabled Whether the resolution is constrained.\n * @api\n */\n setConstrainResolution(enabled) {\n this.applyOptions_(this.getUpdatedOptions_({constrainResolution: enabled}));\n }\n\n /**\n * Get the view projection.\n * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n * @api\n */\n getProjection() {\n return this.projection_;\n }\n\n /**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\n getResolution() {\n return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n }\n\n /**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the View, or undefined if none were given.\n * @return {Array|undefined} The resolutions of the view.\n * @api\n */\n getResolutions() {\n return this.resolutions_;\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n * @api\n */\n getResolutionForExtent(extent, size) {\n return this.getResolutionForExtentInternal(\n fromUserExtent(extent, this.getProjection()),\n size,\n );\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n */\n getResolutionForExtentInternal(extent, size) {\n size = size || this.getViewportSizeMinusPadding_();\n const xResolution = getWidth(extent) / size[0];\n const yResolution = getHeight(extent) / size[1];\n return Math.max(xResolution, yResolution);\n }\n\n /**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number} [power] Power.\n * @return {function(number): number} Resolution for value function.\n */\n getResolutionForValueFunction(power) {\n power = power || 2;\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / Math.log(power);\n return (\n /**\n * @param {number} value Value.\n * @return {number} Resolution.\n */\n function (value) {\n const resolution = maxResolution / Math.pow(power, value * max);\n return resolution;\n }\n );\n }\n\n /**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\n getRotation() {\n return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n }\n\n /**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number} [power] Power.\n * @return {function(number): number} Value for resolution function.\n */\n getValueForResolutionFunction(power) {\n const logPower = Math.log(power || 2);\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / logPower;\n return (\n /**\n * @param {number} resolution Resolution.\n * @return {number} Value.\n */\n function (resolution) {\n const value = Math.log(maxResolution / resolution) / logPower / max;\n return value;\n }\n );\n }\n\n /**\n * Returns the size of the viewport minus padding.\n * @private\n * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n */\n getViewportSizeMinusPadding_(rotation) {\n let size = this.getViewportSize_(rotation);\n const padding = this.padding_;\n if (padding) {\n size = [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ];\n }\n return size;\n }\n\n /**\n * @return {State} View state.\n */\n getState() {\n const projection = this.getProjection();\n const resolution = this.getResolution();\n const rotation = this.getRotation();\n let center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n const padding = this.padding_;\n if (padding) {\n const reducedSize = this.getViewportSizeMinusPadding_();\n center = calculateCenterOn(\n center,\n this.getViewportSize_(),\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation,\n );\n }\n return {\n center: center.slice(0),\n projection: projection !== undefined ? projection : null,\n resolution: resolution,\n nextCenter: this.nextCenter_,\n nextResolution: this.nextResolution_,\n nextRotation: this.nextRotation_,\n rotation: rotation,\n zoom: this.getZoom(),\n };\n }\n\n /**\n * @return {ViewStateLayerStateExtent} Like `FrameState`, but just `viewState` and `extent`.\n */\n getViewStateAndExtent() {\n return {\n viewState: this.getState(),\n extent: this.calculateExtent(),\n };\n }\n\n /**\n * Get the current zoom level. This method may return non-integer zoom levels\n * if the view does not constrain the resolution, or if an interaction or\n * animation is underway.\n * @return {number|undefined} Zoom.\n * @api\n */\n getZoom() {\n let zoom;\n const resolution = this.getResolution();\n if (resolution !== undefined) {\n zoom = this.getZoomForResolution(resolution);\n }\n return zoom;\n }\n\n /**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\n getZoomForResolution(resolution) {\n let offset = this.minZoom_ || 0;\n let max, zoomFactor;\n if (this.resolutions_) {\n const nearest = linearFindNearest(this.resolutions_, resolution, 1);\n offset = nearest;\n max = this.resolutions_[nearest];\n if (nearest == this.resolutions_.length - 1) {\n zoomFactor = 2;\n } else {\n zoomFactor = max / this.resolutions_[nearest + 1];\n }\n } else {\n max = this.maxResolution_;\n zoomFactor = this.zoomFactor_;\n }\n return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n }\n\n /**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\n getResolutionForZoom(zoom) {\n if (this.resolutions_?.length) {\n if (this.resolutions_.length === 1) {\n return this.resolutions_[0];\n }\n const baseLevel = clamp(\n Math.floor(zoom),\n 0,\n this.resolutions_.length - 2,\n );\n const zoomFactor =\n this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n return (\n this.resolutions_[baseLevel] /\n Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1))\n );\n }\n return (\n this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_)\n );\n }\n\n /**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n * extent to fit the view to.\n * @param {FitOptions} [options] Options.\n * @api\n */\n fit(geometryOrExtent, options) {\n /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n let geometry;\n assert(\n Array.isArray(geometryOrExtent) ||\n typeof (/** @type {?} */ (geometryOrExtent).getSimplifiedGeometry) ===\n 'function',\n 'Invalid extent or geometry provided as `geometry`',\n );\n if (Array.isArray(geometryOrExtent)) {\n assert(\n !isEmpty(geometryOrExtent),\n 'Cannot fit empty extent provided as `geometry`',\n );\n const extent = fromUserExtent(geometryOrExtent, this.getProjection());\n geometry = polygonFromExtent(extent);\n } else if (geometryOrExtent.getType() === 'Circle') {\n const extent = fromUserExtent(\n geometryOrExtent.getExtent(),\n this.getProjection(),\n );\n geometry = polygonFromExtent(extent);\n geometry.rotate(this.getRotation(), getCenter(extent));\n } else {\n const userProjection = getUserProjection();\n if (userProjection) {\n geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometryOrExtent\n .clone()\n .transform(userProjection, this.getProjection())\n );\n } else {\n geometry = geometryOrExtent;\n }\n }\n\n this.fitInternal(geometry, options);\n }\n\n /**\n * Calculate rotated extent\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @return {import(\"./extent\").Extent} The rotated extent for the geometry.\n */\n rotatedExtentForGeometry(geometry) {\n const rotation = this.getRotation();\n const cosAngle = Math.cos(rotation);\n const sinAngle = Math.sin(-rotation);\n const coords = geometry.getFlatCoordinates();\n const stride = geometry.getStride();\n let minRotX = +Infinity;\n let minRotY = +Infinity;\n let maxRotX = -Infinity;\n let maxRotY = -Infinity;\n for (let i = 0, ii = coords.length; i < ii; i += stride) {\n const rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n const rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n minRotX = Math.min(minRotX, rotX);\n minRotY = Math.min(minRotY, rotY);\n maxRotX = Math.max(maxRotX, rotX);\n maxRotY = Math.max(maxRotY, rotY);\n }\n return [minRotX, minRotY, maxRotX, maxRotY];\n }\n\n /**\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @param {FitOptions} [options] Options.\n */\n fitInternal(geometry, options) {\n options = options || {};\n let size = options.size;\n if (!size) {\n size = this.getViewportSizeMinusPadding_();\n }\n const padding =\n options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n const nearest = options.nearest !== undefined ? options.nearest : false;\n let minResolution;\n if (options.minResolution !== undefined) {\n minResolution = options.minResolution;\n } else if (options.maxZoom !== undefined) {\n minResolution = this.getResolutionForZoom(options.maxZoom);\n } else {\n minResolution = 0;\n }\n\n const rotatedExtent = this.rotatedExtentForGeometry(geometry);\n\n // calculate resolution\n let resolution = this.getResolutionForExtentInternal(rotatedExtent, [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ]);\n resolution = isNaN(resolution)\n ? minResolution\n : Math.max(resolution, minResolution);\n resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n\n // calculate center\n const rotation = this.getRotation();\n const sinAngle = Math.sin(rotation);\n const cosAngle = Math.cos(rotation);\n const centerRot = getCenter(rotatedExtent);\n centerRot[0] += ((padding[1] - padding[3]) / 2) * resolution;\n centerRot[1] += ((padding[0] - padding[2]) / 2) * resolution;\n const centerX = centerRot[0] * cosAngle - centerRot[1] * sinAngle;\n const centerY = centerRot[1] * cosAngle + centerRot[0] * sinAngle;\n const center = this.getConstrainedCenter([centerX, centerY], resolution);\n const callback = options.callback ? options.callback : VOID;\n\n if (options.duration !== undefined) {\n this.animateInternal(\n {\n resolution: resolution,\n center: center,\n duration: options.duration,\n easing: options.easing,\n },\n callback,\n );\n } else {\n this.targetResolution_ = resolution;\n this.targetCenter_ = center;\n this.applyTargetState_(false, true);\n animationCallback(callback, true);\n }\n }\n\n /**\n * Center on coordinate and view position.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @api\n */\n centerOn(coordinate, size, position) {\n this.centerOnInternal(\n fromUserCoordinate(coordinate, this.getProjection()),\n size,\n position,\n );\n }\n\n /**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n */\n centerOnInternal(coordinate, size, position) {\n this.setCenterInternal(\n calculateCenterOn(\n coordinate,\n size,\n position,\n this.getResolution(),\n this.getRotation(),\n ),\n );\n }\n\n /**\n * Calculates the shift between map and viewport center.\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array|undefined} Center shift.\n */\n calculateCenterShift(center, resolution, rotation, size) {\n let centerShift;\n const padding = this.padding_;\n if (padding && center) {\n const reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n const shiftedCenter = calculateCenterOn(\n center,\n size,\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation,\n );\n centerShift = [\n center[0] - shiftedCenter[0],\n center[1] - shiftedCenter[1],\n ];\n }\n return centerShift;\n }\n\n /**\n * @return {boolean} Is defined.\n */\n isDef() {\n return !!this.getCenterInternal() && this.getResolution() !== undefined;\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n * @api\n */\n adjustCenter(deltaCoordinates) {\n const center = toUserCoordinate(this.targetCenter_, this.getProjection());\n this.setCenter([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n */\n adjustCenterInternal(deltaCoordinates) {\n const center = this.targetCenter_;\n this.setCenterInternal([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n adjustResolution(ratio, anchor) {\n anchor = anchor && fromUserCoordinate(anchor, this.getProjection());\n this.adjustResolutionInternal(ratio, anchor);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n adjustResolutionInternal(ratio, anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const size = this.getViewportSize_(this.getRotation());\n const newResolution = this.constraints_.resolution(\n this.targetResolution_ * ratio,\n 0,\n size,\n isMoving,\n );\n\n if (anchor) {\n this.targetCenter_ = this.calculateCenterZoom(newResolution, anchor);\n }\n\n this.targetResolution_ *= ratio;\n this.applyTargetState_();\n }\n\n /**\n * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom level.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n adjustZoom(delta, anchor) {\n this.adjustResolution(Math.pow(this.zoomFactor_, -delta), anchor);\n }\n\n /**\n * Adds a value to the view rotation, optionally using an anchor. Any rotation\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n * @api\n */\n adjustRotation(delta, anchor) {\n if (anchor) {\n anchor = fromUserCoordinate(anchor, this.getProjection());\n }\n this.adjustRotationInternal(delta, anchor);\n }\n\n /**\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n */\n adjustRotationInternal(delta, anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const newRotation = this.constraints_.rotation(\n this.targetRotation_ + delta,\n isMoving,\n );\n if (anchor) {\n this.targetCenter_ = this.calculateCenterRotate(newRotation, anchor);\n }\n this.targetRotation_ += delta;\n this.applyTargetState_();\n }\n\n /**\n * Set the center of the current view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\n setCenter(center) {\n this.setCenterInternal(\n center ? fromUserCoordinate(center, this.getProjection()) : center,\n );\n }\n\n /**\n * Set the center using the view projection (not the user projection).\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n */\n setCenterInternal(center) {\n this.targetCenter_ = center;\n this.applyTargetState_();\n }\n\n /**\n * @param {import(\"./ViewHint.js\").default} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\n setHint(hint, delta) {\n this.hints_[hint] += delta;\n this.changed();\n return this.hints_[hint];\n }\n\n /**\n * Set the resolution for this view. Any resolution constraint will apply.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\n setResolution(resolution) {\n this.targetResolution_ = resolution;\n this.applyTargetState_();\n }\n\n /**\n * Set the rotation for this view. Any rotation constraint will apply.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\n setRotation(rotation) {\n this.targetRotation_ = rotation;\n this.applyTargetState_();\n }\n\n /**\n * Zoom to a specific zoom level. Any resolution constrain will apply.\n * @param {number} zoom Zoom level.\n * @api\n */\n setZoom(zoom) {\n this.setResolution(this.getResolutionForZoom(zoom));\n }\n\n /**\n * Recompute rotation/resolution/center based on target values.\n * Note: we have to compute rotation first, then resolution and center considering that\n * parameters can influence one another in case a view extent constraint is present.\n * @param {boolean} [doNotCancelAnims] Do not cancel animations.\n * @param {boolean} [forceMoving] Apply constraints as if the view is moving.\n * @private\n */\n applyTargetState_(doNotCancelAnims, forceMoving) {\n const isMoving =\n this.getAnimating() || this.getInteracting() || forceMoving;\n\n // compute rotation\n const newRotation = this.constraints_.rotation(\n this.targetRotation_,\n isMoving,\n );\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n 0,\n size,\n isMoving,\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n isMoving,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size,\n ),\n );\n\n if (this.get(ViewProperty.ROTATION) !== newRotation) {\n this.set(ViewProperty.ROTATION, newRotation);\n }\n if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n this.set(ViewProperty.RESOLUTION, newResolution);\n this.set('zoom', this.getZoom(), true);\n }\n if (\n !newCenter ||\n !this.get(ViewProperty.CENTER) ||\n !equals(this.get(ViewProperty.CENTER), newCenter)\n ) {\n this.set(ViewProperty.CENTER, newCenter);\n }\n\n if (this.getAnimating() && !doNotCancelAnims) {\n this.cancelAnimations();\n }\n this.cancelAnchor_ = undefined;\n }\n\n /**\n * If any constraints need to be applied, an animation will be triggered.\n * This is typically done on interaction end.\n * Note: calling this with a duration of 0 will apply the constrained values straight away,\n * without animation.\n * @param {number} [duration] The animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n resolveConstraints(duration, resolutionDirection, anchor) {\n duration = duration !== undefined ? duration : 200;\n const direction = resolutionDirection || 0;\n\n const newRotation = this.constraints_.rotation(this.targetRotation_);\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n direction,\n size,\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n false,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size,\n ),\n );\n\n if (duration === 0 && !this.cancelAnchor_) {\n this.targetResolution_ = newResolution;\n this.targetRotation_ = newRotation;\n this.targetCenter_ = newCenter;\n this.applyTargetState_();\n return;\n }\n\n anchor = anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n this.cancelAnchor_ = undefined;\n\n if (\n this.getResolution() !== newResolution ||\n this.getRotation() !== newRotation ||\n !this.getCenterInternal() ||\n !equals(this.getCenterInternal(), newCenter)\n ) {\n if (this.getAnimating()) {\n this.cancelAnimations();\n }\n\n this.animateInternal({\n rotation: newRotation,\n center: newCenter,\n resolution: newResolution,\n duration: duration,\n easing: easeOut,\n anchor: anchor,\n });\n }\n }\n\n /**\n * Notify the View that an interaction has started.\n * The view state will be resolved to a stable one if needed\n * (depending on its constraints).\n * @api\n */\n beginInteraction() {\n this.resolveConstraints(0);\n\n this.setHint(ViewHint.INTERACTING, 1);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [duration] Animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n endInteraction(duration, resolutionDirection, anchor) {\n anchor = anchor && fromUserCoordinate(anchor, this.getProjection());\n this.endInteractionInternal(duration, resolutionDirection, anchor);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [duration] Animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n endInteractionInternal(duration, resolutionDirection, anchor) {\n if (!this.getInteracting()) {\n return;\n }\n this.setHint(ViewHint.INTERACTING, -1);\n this.resolveConstraints(duration, resolutionDirection, anchor);\n }\n\n /**\n * Get a valid position for the view center according to the current constraints.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n * @param {number} [targetResolution] Target resolution. If not supplied, the current one will be used.\n * This is useful to guess a valid center position at a different zoom level.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n */\n getConstrainedCenter(targetCenter, targetResolution) {\n const size = this.getViewportSize_(this.getRotation());\n return this.constraints_.center(\n targetCenter,\n targetResolution || this.getResolution(),\n size,\n );\n }\n\n /**\n * Get a valid zoom level according to the current view constraints.\n * @param {number|undefined} targetZoom Target zoom.\n * @param {number} [direction] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid zoom level.\n */\n getConstrainedZoom(targetZoom, direction) {\n const targetRes = this.getResolutionForZoom(targetZoom);\n return this.getZoomForResolution(\n this.getConstrainedResolution(targetRes, direction),\n );\n }\n\n /**\n * Get a valid resolution according to the current view constraints.\n * @param {number|undefined} targetResolution Target resolution.\n * @param {number} [direction] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid resolution.\n */\n getConstrainedResolution(targetResolution, direction) {\n direction = direction || 0;\n const size = this.getViewportSize_(this.getRotation());\n\n return this.constraints_.resolution(targetResolution, direction, size);\n }\n}\n\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n setTimeout(function () {\n callback(returnValue);\n }, 0);\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n if (options.extent !== undefined) {\n const smooth =\n options.smoothExtentConstraint !== undefined\n ? options.smoothExtentConstraint\n : true;\n return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n }\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n if (options.multiWorld !== true && projection.isGlobal()) {\n const extent = projection.getExtent().slice();\n extent[0] = -Infinity;\n extent[2] = Infinity;\n return createExtent(extent, false, false);\n }\n\n return centerNone;\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n * minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n let resolutionConstraint;\n let maxResolution;\n let minResolution;\n\n // TODO: move these to be ol constants\n // see https://github.com/openlayers/openlayers/issues/2076\n const defaultMaxZoom = 28;\n const defaultZoomFactor = 2;\n\n let minZoom =\n options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n\n let maxZoom =\n options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n\n const zoomFactor =\n options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n\n const multiWorld =\n options.multiWorld !== undefined ? options.multiWorld : false;\n\n const smooth =\n options.smoothResolutionConstraint !== undefined\n ? options.smoothResolutionConstraint\n : true;\n\n const showFullExtent =\n options.showFullExtent !== undefined ? options.showFullExtent : false;\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n const projExtent = projection.getExtent();\n let constrainOnlyCenter = options.constrainOnlyCenter;\n let extent = options.extent;\n if (!multiWorld && !extent && projection.isGlobal()) {\n constrainOnlyCenter = false;\n extent = projExtent;\n }\n\n if (options.resolutions !== undefined) {\n const resolutions = options.resolutions;\n maxResolution = resolutions[minZoom];\n minResolution =\n resolutions[maxZoom] !== undefined\n ? resolutions[maxZoom]\n : resolutions[resolutions.length - 1];\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToResolutions(\n resolutions,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n }\n } else {\n // calculate the default min and max resolution\n const size = !projExtent\n ? // use an extent that can fit the whole world if need be\n (360 * METERS_PER_UNIT.degrees) / projection.getMetersPerUnit()\n : Math.max(getWidth(projExtent), getHeight(projExtent));\n\n const defaultMaxResolution =\n size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n\n const defaultMinResolution =\n defaultMaxResolution /\n Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n\n // user provided maxResolution takes precedence\n maxResolution = options.maxResolution;\n if (maxResolution !== undefined) {\n minZoom = 0;\n } else {\n maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n }\n\n // user provided minResolution takes precedence\n minResolution = options.minResolution;\n if (minResolution === undefined) {\n if (options.maxZoom !== undefined) {\n if (options.maxResolution !== undefined) {\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n } else {\n minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n }\n } else {\n minResolution = defaultMinResolution;\n }\n }\n\n // given discrete zoom levels, minResolution may be different than provided\n maxZoom =\n minZoom +\n Math.floor(\n Math.log(maxResolution / minResolution) / Math.log(zoomFactor),\n );\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToPower(\n zoomFactor,\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n }\n }\n return {\n constraint: resolutionConstraint,\n maxResolution: maxResolution,\n minResolution: minResolution,\n minZoom: minZoom,\n zoomFactor: zoomFactor,\n };\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n const enableRotation =\n options.enableRotation !== undefined ? options.enableRotation : true;\n if (enableRotation) {\n const constrainRotation = options.constrainRotation;\n if (constrainRotation === undefined || constrainRotation === true) {\n return createSnapToZero();\n }\n if (constrainRotation === false) {\n return rotationNone;\n }\n if (typeof constrainRotation === 'number') {\n return createSnapToN(constrainRotation);\n }\n return rotationNone;\n }\n return disable;\n}\n\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n if (animation.sourceCenter && animation.targetCenter) {\n if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n return false;\n }\n }\n if (animation.sourceResolution !== animation.targetResolution) {\n return false;\n }\n if (animation.sourceRotation !== animation.targetRotation) {\n return false;\n }\n return true;\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n // calculate rotated position\n const cosAngle = Math.cos(-rotation);\n let sinAngle = Math.sin(-rotation);\n let rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n let rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n rotX += (size[0] / 2 - position[0]) * resolution;\n rotY += (position[1] - size[1] / 2) * resolution;\n\n // go back to original angle\n sinAngle = -sinAngle; // go back to original rotation\n const centerX = rotX * cosAngle - rotY * sinAngle;\n const centerY = rotY * cosAngle + rotX * sinAngle;\n\n return [centerX, centerY];\n}\n\nexport default View;\n", "/**\n * @module ol/render/EventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered before a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#prerender\n * @api\n */\n PRERENDER: 'prerender',\n\n /**\n * Triggered after a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered before layers are composed. When dispatched by the map, the event object will not have\n * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only\n * WebGL layers currently dispatch this event.\n * @event module:ol/render/Event~RenderEvent#precompose\n * @api\n */\n PRECOMPOSE: 'precompose',\n\n /**\n * Triggered after layers are composed. When dispatched by the map, the event object will not have\n * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only\n * WebGL layers currently dispatch this event.\n * @event module:ol/render/Event~RenderEvent#postcompose\n * @api\n */\n POSTCOMPOSE: 'postcompose',\n\n /**\n * Triggered when rendering is complete, i.e. all sources and tiles have\n * finished loading for the current viewport, and all tiles are faded in.\n * The event object will not have a `context` set.\n * @event module:ol/render/Event~RenderEvent#rendercomplete\n * @api\n */\n RENDERCOMPLETE: 'rendercomplete',\n};\n\n/**\n * @typedef {'postrender'|'precompose'|'postcompose'|'rendercomplete'} MapRenderEventTypes\n */\n\n/**\n * @typedef {'postrender'|'prerender'} LayerRenderEventTypes\n */\n", "/**\n * @module ol/render/Event\n */\n\nimport Event from '../events/Event.js';\n\nclass RenderEvent extends Event {\n /**\n * @param {import(\"./EventType.js\").default} type Type.\n * @param {import(\"../transform.js\").Transform} [inversePixelTransform] Transform for\n * CSS pixels to rendered pixels.\n * @param {import(\"../Map.js\").FrameState} [frameState] Frame state.\n * @param {?(CanvasRenderingContext2D|WebGLRenderingContext)} [context] Context.\n */\n constructor(type, inversePixelTransform, frameState, context) {\n super(type);\n\n /**\n * Transform from CSS pixels (relative to the top-left corner of the map viewport)\n * to rendered pixels on this event's `context`. Only available when a Canvas renderer is used, null otherwise.\n * @type {import(\"../transform.js\").Transform|undefined}\n * @api\n */\n this.inversePixelTransform = inversePixelTransform;\n\n /**\n * An object representing the current render frame state.\n * @type {import(\"../Map.js\").FrameState|undefined}\n * @api\n */\n this.frameState = frameState;\n\n /**\n * Canvas context. Not available when the event is dispatched by the map. For Canvas 2D layers,\n * the context will be the 2D rendering context. For WebGL layers, the context will be the WebGL\n * context.\n * @type {CanvasRenderingContext2D|WebGLRenderingContext|undefined}\n * @api\n */\n this.context = context;\n }\n}\n\nexport default RenderEvent;\n", "/**\n * @module ol/render/canvas/ZIndexContext\n */\n\nimport {getSharedCanvasContext2D} from '../../dom.js';\n\n/** @typedef {CanvasRenderingContext2D & {globalAlpha: any}} ZIndexContextProxy */\n\n/**\n * @extends {CanvasRenderingContext2D}\n */\nclass ZIndexContext {\n constructor() {\n /**\n * @private\n * @type {Array>}\n */\n this.instructions_ = [];\n /**\n * @type {number}\n */\n this.zIndex = 0;\n /**\n * @private\n * @type {number}\n */\n this.offset_ = 0;\n\n /**\n * @private\n * @type {ZIndexContextProxy}\n */\n this.context_ = /** @type {ZIndexContextProxy} */ (\n new Proxy(getSharedCanvasContext2D(), {\n get: (target, property) => {\n if (\n typeof (/** @type {*} */ (getSharedCanvasContext2D())[property]) !==\n 'function'\n ) {\n // we only accept calling functions on the proxy, not accessing properties\n return undefined;\n }\n if (!this.instructions_[this.zIndex + this.offset_]) {\n this.instructions_[this.zIndex + this.offset_] = [];\n }\n this.instructions_[this.zIndex + this.offset_].push(property);\n return this.pushMethodArgs_;\n },\n set: (target, property, value) => {\n if (!this.instructions_[this.zIndex + this.offset_]) {\n this.instructions_[this.zIndex + this.offset_] = [];\n }\n this.instructions_[this.zIndex + this.offset_].push(property, value);\n return true;\n },\n })\n );\n }\n\n /**\n * @private\n * @param {...*} args Args.\n * @return {ZIndexContext} This.\n */\n pushMethodArgs_ = (...args) => {\n this.instructions_[this.zIndex + this.offset_].push(args);\n return this;\n };\n\n /**\n * Push a function that renders to the context directly.\n * @param {function(CanvasRenderingContext2D): void} render Function.\n */\n pushFunction(render) {\n this.instructions_[this.zIndex + this.offset_].push(render);\n }\n\n /**\n * Get a proxy for CanvasRenderingContext2D which does not support getting state\n * (e.g. `context.globalAlpha`, which will return `undefined`). To set state, if it relies on a\n * previous state (e.g. `context.globalAlpha = context.globalAlpha / 2`), set a function,\n * e.g. `context.globalAlpha = (context) => context.globalAlpha / 2`.\n * @return {ZIndexContextProxy} Context.\n */\n getContext() {\n return this.context_;\n }\n\n /**\n * @param {CanvasRenderingContext2D} context Context.\n */\n draw(context) {\n this.instructions_.forEach((instructionsAtIndex) => {\n for (let i = 0, ii = instructionsAtIndex.length; i < ii; ++i) {\n const property = instructionsAtIndex[i];\n if (typeof property === 'function') {\n property(context);\n continue;\n }\n const instructionAtIndex = instructionsAtIndex[++i];\n if (typeof (/** @type {*} */ (context)[property]) === 'function') {\n /** @type {*} */ (context)[property](...instructionAtIndex);\n } else {\n if (typeof instructionAtIndex === 'function') {\n /** @type {*} */ (context)[property] = instructionAtIndex(context);\n continue;\n }\n /** @type {*} */ (context)[property] = instructionAtIndex;\n }\n }\n });\n }\n\n clear() {\n this.instructions_.length = 0;\n this.zIndex = 0;\n this.offset_ = 0;\n }\n\n /**\n * Offsets the zIndex by the highest current zIndex. Useful for rendering multiple worlds or tiles, to\n * avoid conflicting context.clip() or context.save()/restore() calls.\n */\n offset() {\n this.offset_ = this.instructions_.length;\n this.zIndex = 0;\n }\n}\n\nexport default ZIndexContext;\n", "/**\n * @module ol/renderer/Layer\n */\nimport ImageState from '../ImageState.js';\nimport Observable from '../Observable.js';\nimport EventType from '../events/EventType.js';\nimport {abstract} from '../util.js';\n\nconst maxStaleKeys = 5;\n\n/**\n * @template {import(\"../layer/Layer.js\").default} LayerType\n */\nclass LayerRenderer extends Observable {\n /**\n * @param {LayerType} layer Layer.\n */\n constructor(layer) {\n super();\n\n /**\n * The renderer is initialized and ready to render.\n * @type {boolean}\n */\n this.ready = true;\n\n /** @private */\n this.boundHandleImageChange_ = this.handleImageChange_.bind(this);\n\n /**\n * @private\n * @type {LayerType}\n */\n this.layer_ = layer;\n\n /**\n * @type {Array}\n * @private\n */\n this.staleKeys_ = new Array();\n\n /**\n * @type {number}\n * @protected\n */\n this.maxStaleKeys = maxStaleKeys;\n }\n\n /**\n * @return {Array} Get the list of stale keys.\n */\n getStaleKeys() {\n return this.staleKeys_;\n }\n\n /**\n * @param {string} key The new stale key.\n */\n prependStaleKey(key) {\n this.staleKeys_.unshift(key);\n if (this.staleKeys_.length > this.maxStaleKeys) {\n this.staleKeys_.length = this.maxStaleKeys;\n }\n }\n\n /**\n * Asynchronous layer level hit detection.\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @return {Promise>} Promise that resolves with\n * an array of features.\n */\n getFeatures(pixel) {\n return abstract();\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n */\n getData(pixel) {\n return null;\n }\n\n /**\n * Determine whether render should be called.\n * @abstract\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n */\n prepareFrame(frameState) {\n return abstract();\n }\n\n /**\n * Render the layer.\n * @abstract\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {HTMLElement|null} target Target that may be used to render content to.\n * @return {HTMLElement|null} The rendered element.\n */\n renderFrame(frameState, target) {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {Array>} matches The hit detected matches with tolerance.\n * @return {T|undefined} Callback result.\n * @template T\n */\n forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n callback,\n matches,\n ) {\n return undefined;\n }\n\n /**\n * @return {LayerType} Layer.\n */\n getLayer() {\n return this.layer_;\n }\n\n /**\n * Perform action necessary to get the layer rendered after new fonts have loaded\n * @abstract\n */\n handleFontsChanged() {}\n\n /**\n * Handle changes in image state.\n * @param {import(\"../events/Event.js\").default} event Image change event.\n * @private\n */\n handleImageChange_(event) {\n const image = /** @type {import(\"../Image.js\").default} */ (event.target);\n if (\n image.getState() === ImageState.LOADED ||\n image.getState() === ImageState.ERROR\n ) {\n this.renderIfReadyAndVisible();\n }\n }\n\n /**\n * Load the image if not already loaded, and register the image change\n * listener if needed.\n * @param {import(\"../Image.js\").default} image Image.\n * @return {boolean} `true` if the image is already loaded, `false` otherwise.\n * @protected\n */\n loadImage(image) {\n let imageState = image.getState();\n if (imageState != ImageState.LOADED && imageState != ImageState.ERROR) {\n image.addEventListener(EventType.CHANGE, this.boundHandleImageChange_);\n }\n if (imageState == ImageState.IDLE) {\n image.load();\n imageState = image.getState();\n }\n return imageState == ImageState.LOADED;\n }\n\n /**\n * @protected\n */\n renderIfReadyAndVisible() {\n const layer = this.getLayer();\n if (layer && layer.getVisible() && layer.getSourceState() === 'ready') {\n layer.changed();\n }\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\n renderDeferred(frameState) {}\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n delete this.layer_;\n super.disposeInternal();\n }\n}\n\nexport default LayerRenderer;\n", "/**\n * @module ol/renderer/canvas/Layer\n */\nimport {equals} from '../../array.js';\nimport {asArray} from '../../color.js';\nimport {createCanvasContext2D} from '../../dom.js';\nimport {\n getBottomLeft,\n getBottomRight,\n getHeight,\n getTopLeft,\n getTopRight,\n getWidth,\n} from '../../extent.js';\nimport RenderEvent from '../../render/Event.js';\nimport RenderEventType from '../../render/EventType.js';\nimport ZIndexContext from '../../render/canvas/ZIndexContext.js';\nimport {\n apply as applyTransform,\n compose as composeTransform,\n create as createTransform,\n makeInverse,\n toString as toTransformString,\n} from '../../transform.js';\nimport LayerRenderer from '../Layer.js';\n\n/**\n * @type {Array}\n */\nexport const canvasPool = [];\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nlet pixelContext = null;\n\nfunction createPixelContext() {\n pixelContext = createCanvasContext2D(1, 1, undefined, {\n willReadFrequently: true,\n });\n}\n\n/**\n * @abstract\n * @template {import(\"../../layer/Layer.js\").default} LayerType\n * @extends {LayerRenderer}\n */\nclass CanvasLayerRenderer extends LayerRenderer {\n /**\n * @param {LayerType} layer Layer.\n */\n constructor(layer) {\n super(layer);\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.container = null;\n\n /**\n * @protected\n * @type {number}\n */\n this.renderedResolution;\n\n /**\n * A temporary transform. The values in this transform should only be used in a\n * function that sets the values.\n * @protected\n * @type {import(\"../../transform.js\").Transform}\n */\n this.tempTransform = createTransform();\n\n /**\n * The transform for rendered pixels to viewport CSS pixels. This transform must\n * be set when rendering a frame and may be used by other functions after rendering.\n * @protected\n * @type {import(\"../../transform.js\").Transform}\n */\n this.pixelTransform = createTransform();\n\n /**\n * The transform for viewport CSS pixels to rendered pixels. This transform must\n * be set when rendering a frame and may be used by other functions after rendering.\n * @protected\n * @type {import(\"../../transform.js\").Transform}\n */\n this.inversePixelTransform = createTransform();\n\n /**\n * @type {CanvasRenderingContext2D}\n */\n this.context = null;\n\n /**\n * @private\n * @type {ZIndexContext}\n */\n this.deferredContext_ = null;\n\n /**\n * @type {boolean}\n */\n this.containerReused = false;\n\n /**\n * @protected\n * @type {import(\"../../Map.js\").FrameState|null}\n */\n this.frameState = null;\n }\n\n /**\n * @param {import('../../DataTile.js').ImageLike} image Image.\n * @param {number} col The column index.\n * @param {number} row The row index.\n * @return {Uint8ClampedArray|null} The image data.\n */\n getImageData(image, col, row) {\n if (!pixelContext) {\n createPixelContext();\n }\n pixelContext.clearRect(0, 0, 1, 1);\n\n let data;\n try {\n pixelContext.drawImage(image, col, row, 1, 1, 0, 0, 1, 1);\n data = pixelContext.getImageData(0, 0, 1, 1).data;\n } catch {\n pixelContext = null;\n return null;\n }\n return data;\n }\n\n /**\n * @param {import('../../Map.js').FrameState} frameState Frame state.\n * @return {string} Background color.\n */\n getBackground(frameState) {\n const layer = this.getLayer();\n let background = layer.getBackground();\n if (typeof background === 'function') {\n background = background(frameState.viewState.resolution);\n }\n return background || undefined;\n }\n\n /**\n * Get a rendering container from an existing target, if compatible.\n * @param {HTMLElement} target Potential render target.\n * @param {string} transform CSS Transform.\n * @param {string} [backgroundColor] Background color.\n */\n useContainer(target, transform, backgroundColor) {\n const layerClassName = this.getLayer().getClassName();\n let container, context;\n if (\n target &&\n target.className === layerClassName &&\n (!backgroundColor ||\n (target &&\n target.style.backgroundColor &&\n equals(\n asArray(target.style.backgroundColor),\n asArray(backgroundColor),\n )))\n ) {\n const canvas = target.firstElementChild;\n if (canvas instanceof HTMLCanvasElement) {\n context = canvas.getContext('2d');\n }\n }\n if (context && context.canvas.style.transform === transform) {\n // Container of the previous layer renderer can be used.\n this.container = target;\n this.context = context;\n this.containerReused = true;\n } else if (this.containerReused) {\n // Previously reused container cannot be used any more.\n this.container = null;\n this.context = null;\n this.containerReused = false;\n } else if (this.container) {\n this.container.style.backgroundColor = null;\n }\n if (!this.container) {\n container = document.createElement('div');\n container.className = layerClassName;\n let style = container.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n context = createCanvasContext2D();\n const canvas = context.canvas;\n container.appendChild(canvas);\n style = canvas.style;\n style.position = 'absolute';\n style.left = '0';\n style.transformOrigin = 'top left';\n this.container = container;\n this.context = context;\n }\n if (\n !this.containerReused &&\n backgroundColor &&\n !this.container.style.backgroundColor\n ) {\n this.container.style.backgroundColor = backgroundColor;\n }\n }\n\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../../extent.js\").Extent} extent Clip extent.\n * @protected\n */\n clipUnrotated(context, frameState, extent) {\n const topLeft = getTopLeft(extent);\n const topRight = getTopRight(extent);\n const bottomRight = getBottomRight(extent);\n const bottomLeft = getBottomLeft(extent);\n\n applyTransform(frameState.coordinateToPixelTransform, topLeft);\n applyTransform(frameState.coordinateToPixelTransform, topRight);\n applyTransform(frameState.coordinateToPixelTransform, bottomRight);\n applyTransform(frameState.coordinateToPixelTransform, bottomLeft);\n\n const inverted = this.inversePixelTransform;\n applyTransform(inverted, topLeft);\n applyTransform(inverted, topRight);\n applyTransform(inverted, bottomRight);\n applyTransform(inverted, bottomLeft);\n\n context.save();\n context.beginPath();\n context.moveTo(Math.round(topLeft[0]), Math.round(topLeft[1]));\n context.lineTo(Math.round(topRight[0]), Math.round(topRight[1]));\n context.lineTo(Math.round(bottomRight[0]), Math.round(bottomRight[1]));\n context.lineTo(Math.round(bottomLeft[0]), Math.round(bottomLeft[1]));\n context.clip();\n }\n\n /**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target that may be used to render content to.\n * @protected\n */\n prepareContainer(frameState, target) {\n const extent = frameState.extent;\n const resolution = frameState.viewState.resolution;\n const rotation = frameState.viewState.rotation;\n const pixelRatio = frameState.pixelRatio;\n const width = Math.round((getWidth(extent) / resolution) * pixelRatio);\n const height = Math.round((getHeight(extent) / resolution) * pixelRatio);\n // set forward and inverse pixel transforms\n composeTransform(\n this.pixelTransform,\n frameState.size[0] / 2,\n frameState.size[1] / 2,\n 1 / pixelRatio,\n 1 / pixelRatio,\n rotation,\n -width / 2,\n -height / 2,\n );\n makeInverse(this.inversePixelTransform, this.pixelTransform);\n\n const canvasTransform = toTransformString(this.pixelTransform);\n this.useContainer(target, canvasTransform, this.getBackground(frameState));\n\n if (!this.containerReused) {\n const canvas = this.context.canvas;\n if (canvas.width != width || canvas.height != height) {\n canvas.width = width;\n canvas.height = height;\n } else {\n this.context.clearRect(0, 0, width, height);\n }\n if (canvasTransform !== canvas.style.transform) {\n canvas.style.transform = canvasTransform;\n }\n }\n }\n\n /**\n * @param {import(\"../../render/EventType.js\").default} type Event type.\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @private\n */\n dispatchRenderEvent_(type, context, frameState) {\n const layer = this.getLayer();\n if (layer.hasListener(type)) {\n const event = new RenderEvent(\n type,\n this.inversePixelTransform,\n frameState,\n context,\n );\n layer.dispatchEvent(event);\n }\n }\n\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n preRender(context, frameState) {\n this.frameState = frameState;\n if (frameState.declutter) {\n return;\n }\n this.dispatchRenderEvent_(RenderEventType.PRERENDER, context, frameState);\n }\n\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n postRender(context, frameState) {\n if (frameState.declutter) {\n return;\n }\n this.dispatchRenderEvent_(RenderEventType.POSTRENDER, context, frameState);\n }\n\n /**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n */\n renderDeferredInternal(frameState) {}\n\n /**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @return {import('../../render/canvas/ZIndexContext.js').ZIndexContextProxy} Context.\n */\n getRenderContext(frameState) {\n if (frameState.declutter && !this.deferredContext_) {\n this.deferredContext_ = new ZIndexContext();\n }\n return frameState.declutter\n ? this.deferredContext_.getContext()\n : this.context;\n }\n\n /**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @override\n */\n renderDeferred(frameState) {\n if (!frameState.declutter) {\n return;\n }\n this.dispatchRenderEvent_(\n RenderEventType.PRERENDER,\n this.context,\n frameState,\n );\n if (frameState.declutter && this.deferredContext_) {\n this.deferredContext_.draw(this.context);\n this.deferredContext_.clear();\n }\n this.renderDeferredInternal(frameState);\n this.dispatchRenderEvent_(\n RenderEventType.POSTRENDER,\n this.context,\n frameState,\n );\n }\n\n /**\n * Creates a transform for rendering to an element that will be rotated after rendering.\n * @param {import(\"../../coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} width Width of the rendered element (in pixels).\n * @param {number} height Height of the rendered element (in pixels).\n * @param {number} offsetX Offset on the x-axis in view coordinates.\n * @protected\n * @return {!import(\"../../transform.js\").Transform} Transform.\n */\n getRenderTransform(\n center,\n resolution,\n rotation,\n pixelRatio,\n width,\n height,\n offsetX,\n ) {\n const dx1 = width / 2;\n const dy1 = height / 2;\n const sx = pixelRatio / resolution;\n const sy = -sx;\n const dx2 = -center[0] + offsetX;\n const dy2 = -center[1];\n return composeTransform(\n this.tempTransform,\n dx1,\n dy1,\n sx,\n sy,\n -rotation,\n dx2,\n dy2,\n );\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n delete this.frameState;\n super.disposeInternal();\n }\n}\n\nexport default CanvasLayerRenderer;\n", "/**\n * @module ol/layer/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n OPACITY: 'opacity',\n VISIBLE: 'visible',\n EXTENT: 'extent',\n Z_INDEX: 'zIndex',\n MAX_RESOLUTION: 'maxResolution',\n MIN_RESOLUTION: 'minResolution',\n MAX_ZOOM: 'maxZoom',\n MIN_ZOOM: 'minZoom',\n SOURCE: 'source',\n MAP: 'map',\n};\n", "/**\n * @module ol/layer/Base\n */\nimport BaseObject from '../Object.js';\nimport {assert} from '../asserts.js';\nimport {clamp} from '../math.js';\nimport {abstract} from '../util.js';\nimport LayerProperty from './Property.js';\n\n/**\n * A css color, or a function called with a view resolution returning a css color.\n *\n * @typedef {string|function(number):string} BackgroundColor\n * @api\n */\n\n/**\n * @typedef {import(\"../ObjectEventType\").Types|'change:extent'|'change:maxResolution'|'change:maxZoom'|\n * 'change:minResolution'|'change:minZoom'|'change:opacity'|'change:visible'|'change:zIndex'} BaseLayerObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} BaseLayerOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number | undefined} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Note that with {@link module:ol/layer/Base~BaseLayer} and all its subclasses, any property set in\n * the options is set as a {@link module:ol/Object~BaseObject} property on the layer object, so\n * is observable, and has get/set accessors.\n *\n * @api\n */\nclass BaseLayer extends BaseObject {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.on;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.once;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.un;\n\n /**\n * @type {BackgroundColor|false}\n * @private\n */\n this.background_ = options.background;\n\n /**\n * @type {Object}\n */\n const properties = Object.assign({}, options);\n if (typeof options.properties === 'object') {\n delete properties.properties;\n Object.assign(properties, options.properties);\n }\n\n properties[LayerProperty.OPACITY] =\n options.opacity !== undefined ? options.opacity : 1;\n assert(\n typeof properties[LayerProperty.OPACITY] === 'number',\n 'Layer opacity must be a number',\n );\n\n properties[LayerProperty.VISIBLE] =\n options.visible !== undefined ? options.visible : true;\n properties[LayerProperty.Z_INDEX] = options.zIndex;\n properties[LayerProperty.MAX_RESOLUTION] =\n options.maxResolution !== undefined ? options.maxResolution : Infinity;\n properties[LayerProperty.MIN_RESOLUTION] =\n options.minResolution !== undefined ? options.minResolution : 0;\n properties[LayerProperty.MIN_ZOOM] =\n options.minZoom !== undefined ? options.minZoom : -Infinity;\n properties[LayerProperty.MAX_ZOOM] =\n options.maxZoom !== undefined ? options.maxZoom : Infinity;\n\n /**\n * @type {string}\n * @private\n */\n this.className_ =\n properties.className !== undefined ? properties.className : 'ol-layer';\n delete properties.className;\n\n this.setProperties(properties);\n\n /**\n * @type {import(\"./Layer.js\").State}\n * @private\n */\n this.state_ = null;\n }\n\n /**\n * Get the background for this layer.\n * @return {BackgroundColor|false} Layer background.\n */\n getBackground() {\n return this.background_;\n }\n\n /**\n * @return {string} CSS class name.\n */\n getClassName() {\n return this.className_;\n }\n\n /**\n * This method is not meant to be called by layers or layer renderers because the state\n * is incorrect if the layer is included in a layer group.\n *\n * @param {boolean} [managed] Layer is managed.\n * @return {import(\"./Layer.js\").State} Layer state.\n */\n getLayerState(managed) {\n /** @type {import(\"./Layer.js\").State} */\n const state =\n this.state_ ||\n /** @type {?} */ ({\n layer: this,\n managed: managed === undefined ? true : managed,\n });\n const zIndex = this.getZIndex();\n state.opacity = clamp(Math.round(this.getOpacity() * 100) / 100, 0, 1);\n state.visible = this.getVisible();\n state.extent = this.getExtent();\n state.zIndex = zIndex === undefined && !state.managed ? Infinity : zIndex;\n state.maxResolution = this.getMaxResolution();\n state.minResolution = Math.max(this.getMinResolution(), 0);\n state.minZoom = this.getMinZoom();\n state.maxZoom = this.getMaxZoom();\n this.state_ = state;\n\n return state;\n }\n\n /**\n * @abstract\n * @param {Array} [array] Array of layers (to be\n * modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(array) {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {Array} [states] Optional list of layer\n * states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(states) {\n return abstract();\n }\n\n /**\n * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it\n * will be visible regardless of extent.\n * @return {import(\"../extent.js\").Extent|undefined} The layer extent.\n * @observable\n * @api\n */\n getExtent() {\n return /** @type {import(\"../extent.js\").Extent|undefined} */ (\n this.get(LayerProperty.EXTENT)\n );\n }\n\n /**\n * Return the maximum resolution of the layer. Returns Infinity if\n * the layer has no maximum resolution set.\n * @return {number} The maximum resolution of the layer.\n * @observable\n * @api\n */\n getMaxResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_RESOLUTION));\n }\n\n /**\n * Return the minimum resolution of the layer. Returns 0 if\n * the layer has no minimum resolution set.\n * @return {number} The minimum resolution of the layer.\n * @observable\n * @api\n */\n getMinResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_RESOLUTION));\n }\n\n /**\n * Return the minimum zoom level of the layer. Returns -Infinity if\n * the layer has no minimum zoom set.\n * @return {number} The minimum zoom level of the layer.\n * @observable\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_ZOOM));\n }\n\n /**\n * Return the maximum zoom level of the layer. Returns Infinity if\n * the layer has no maximum zoom set.\n * @return {number} The maximum zoom level of the layer.\n * @observable\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_ZOOM));\n }\n\n /**\n * Return the opacity of the layer (between 0 and 1).\n * @return {number} The opacity of the layer.\n * @observable\n * @api\n */\n getOpacity() {\n return /** @type {number} */ (this.get(LayerProperty.OPACITY));\n }\n\n /**\n * @abstract\n * @return {import(\"../source/Source.js\").State} Source state.\n */\n getSourceState() {\n return abstract();\n }\n\n /**\n * Return the value of this layer's `visible` property. To find out whether the layer\n * is visible on a map, use `isVisible()` instead.\n * @return {boolean} The value of the `visible` property of the layer.\n * @observable\n * @api\n */\n getVisible() {\n return /** @type {boolean} */ (this.get(LayerProperty.VISIBLE));\n }\n\n /**\n * Return the Z-index of the layer, which is used to order layers before\n * rendering. Returns undefined if the layer is unmanaged.\n * @return {number|undefined} The Z-index of the layer.\n * @observable\n * @api\n */\n getZIndex() {\n return /** @type {number|undefined} */ (this.get(LayerProperty.Z_INDEX));\n }\n\n /**\n * Sets the background color.\n * @param {BackgroundColor} [background] Background color.\n */\n setBackground(background) {\n this.background_ = background;\n this.changed();\n }\n\n /**\n * Set the extent at which the layer is visible. If `undefined`, the layer\n * will be visible at all extents.\n * @param {import(\"../extent.js\").Extent|undefined} extent The extent of the layer.\n * @observable\n * @api\n */\n setExtent(extent) {\n this.set(LayerProperty.EXTENT, extent);\n }\n\n /**\n * Set the maximum resolution at which the layer is visible.\n * @param {number} maxResolution The maximum resolution of the layer.\n * @observable\n * @api\n */\n setMaxResolution(maxResolution) {\n this.set(LayerProperty.MAX_RESOLUTION, maxResolution);\n }\n\n /**\n * Set the minimum resolution at which the layer is visible.\n * @param {number} minResolution The minimum resolution of the layer.\n * @observable\n * @api\n */\n setMinResolution(minResolution) {\n this.set(LayerProperty.MIN_RESOLUTION, minResolution);\n }\n\n /**\n * Set the maximum zoom (exclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} maxZoom The maximum zoom of the layer.\n * @observable\n * @api\n */\n setMaxZoom(maxZoom) {\n this.set(LayerProperty.MAX_ZOOM, maxZoom);\n }\n\n /**\n * Set the minimum zoom (inclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} minZoom The minimum zoom of the layer.\n * @observable\n * @api\n */\n setMinZoom(minZoom) {\n this.set(LayerProperty.MIN_ZOOM, minZoom);\n }\n\n /**\n * Set the opacity of the layer, allowed values range from 0 to 1.\n * @param {number} opacity The opacity of the layer.\n * @observable\n * @api\n */\n setOpacity(opacity) {\n assert(typeof opacity === 'number', 'Layer opacity must be a number');\n this.set(LayerProperty.OPACITY, opacity);\n }\n\n /**\n * Set the visibility of the layer (`true` or `false`).\n * @param {boolean} visible The visibility of the layer.\n * @observable\n * @api\n */\n setVisible(visible) {\n this.set(LayerProperty.VISIBLE, visible);\n }\n\n /**\n * Set Z-index of the layer, which is used to order layers before rendering.\n * The default Z-index is 0.\n * @param {number} zindex The z-index of the layer.\n * @observable\n * @api\n */\n setZIndex(zindex) {\n this.set(LayerProperty.Z_INDEX, zindex);\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n if (this.state_) {\n this.state_.layer = null;\n this.state_ = null;\n }\n super.disposeInternal();\n }\n}\n\nexport default BaseLayer;\n", "/**\n * @module ol/layer/Layer\n */\nimport View from '../View.js';\nimport {assert} from '../asserts.js';\nimport EventType from '../events/EventType.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {intersects} from '../extent.js';\nimport RenderEventType from '../render/EventType.js';\nimport BaseLayer from './Base.js';\nimport LayerProperty from './Property.js';\n\n/**\n * @typedef {function(import(\"../Map.js\").FrameState):HTMLElement} RenderFunction\n */\n\n/**\n * @typedef {'sourceready'|'change:source'} LayerEventType\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} LayerOnSignature\n */\n\n/**\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {SourceType} [source] Source for this layer. If not provided to the constructor,\n * the source can be set by calling {@link module:ol/layer/Layer~Layer#setSource layer.setSource(source)} after\n * construction.\n * @property {import(\"../Map.js\").default|null} [map] Map.\n * @property {RenderFunction} [render] Render function. Takes the frame state as input and is expected to return an\n * HTML element. Will overwrite the default rendering for the layer.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./Layer.js\").default} layer Layer.\n * @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.\n * @property {boolean} visible Visible.\n * @property {boolean} managed Managed.\n * @property {import(\"../extent.js\").Extent} [extent] Extent.\n * @property {number} zIndex ZIndex.\n * @property {number} maxResolution Maximum resolution.\n * @property {number} minResolution Minimum resolution.\n * @property {number} minZoom Minimum zoom.\n * @property {number} maxZoom Maximum zoom.\n */\n\n/**\n * @classdesc\n * Base class from which all layer types are derived. This should only be instantiated\n * in the case where a custom layer is added to the map with a custom `render` function.\n * Such a function can be specified in the `options` object, and is expected to return an HTML element.\n *\n * A visual representation of raster or vector map data.\n * Layers group together those properties that pertain to how the data is to be\n * displayed, irrespective of the source of that data.\n *\n * Layers are usually added to a map with [map.addLayer()]{@link import(\"../Map.js\").default#addLayer}.\n * Components like {@link module:ol/interaction/Draw~Draw} use unmanaged layers\n * internally. These unmanaged layers are associated with the map using\n * [layer.setMap()]{@link module:ol/layer/Layer~Layer#setMap} instead.\n *\n * A generic `change` event is fired when the state of the source changes.\n * A `sourceready` event is fired when the layer's source is ready.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n * @fires import(\"../events/Event.js\").BaseEvent#sourceready\n *\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @template {import(\"../renderer/Layer.js\").default} [RendererType=import(\"../renderer/Layer.js\").default]\n * @api\n */\nclass Layer extends BaseLayer {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n const baseOptions = Object.assign({}, options);\n delete baseOptions.source;\n\n super(baseOptions);\n\n /***\n * @type {LayerOnSignature}\n */\n this.on;\n\n /***\n * @type {LayerOnSignature}\n */\n this.once;\n\n /***\n * @type {LayerOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.mapPrecomposeKey_ = null;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.mapRenderKey_ = null;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.sourceChangeKey_ = null;\n\n /**\n * @private\n * @type {RendererType}\n */\n this.renderer_ = null;\n\n /**\n * @private\n * @type {boolean}\n */\n this.sourceReady_ = false;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.rendered = false;\n\n // Overwrite default render method with a custom one\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.map) {\n this.setMap(options.map);\n }\n\n this.addChangeListener(\n LayerProperty.SOURCE,\n this.handleSourcePropertyChange_,\n );\n\n const source = options.source\n ? /** @type {SourceType} */ (options.source)\n : null;\n this.setSource(source);\n }\n\n /**\n * @param {Array} [array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n * @override\n */\n getLayersArray(array) {\n array = array ? array : [];\n array.push(this);\n return array;\n }\n\n /**\n * @param {Array} [states] Optional list of layer states (to be modified in place).\n * @return {Array} List of layer states.\n * @override\n */\n getLayerStatesArray(states) {\n states = states ? states : [];\n states.push(this.getLayerState());\n return states;\n }\n\n /**\n * Get the layer source.\n * @return {SourceType|null} The layer source (or `null` if not yet set).\n * @observable\n * @api\n */\n getSource() {\n return /** @type {SourceType} */ (this.get(LayerProperty.SOURCE)) || null;\n }\n\n /**\n * @return {SourceType|null} The source being rendered.\n */\n getRenderSource() {\n return this.getSource();\n }\n\n /**\n * @return {import(\"../source/Source.js\").State} Source state.\n * @override\n */\n getSourceState() {\n const source = this.getSource();\n return !source ? 'undefined' : source.getState();\n }\n\n /**\n * @private\n */\n handleSourceChange_() {\n this.changed();\n if (this.sourceReady_ || this.getSource().getState() !== 'ready') {\n return;\n }\n this.sourceReady_ = true;\n this.dispatchEvent('sourceready');\n }\n\n /**\n * @private\n */\n handleSourcePropertyChange_() {\n if (this.sourceChangeKey_) {\n unlistenByKey(this.sourceChangeKey_);\n this.sourceChangeKey_ = null;\n }\n this.sourceReady_ = false;\n const source = this.getSource();\n if (source) {\n this.sourceChangeKey_ = listen(\n source,\n EventType.CHANGE,\n this.handleSourceChange_,\n this,\n );\n if (source.getState() === 'ready') {\n this.sourceReady_ = true;\n setTimeout(() => {\n this.dispatchEvent('sourceready');\n }, 0);\n }\n this.clearRenderer();\n }\n this.changed();\n }\n\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Promise>} Promise that resolves with\n * an array of features.\n */\n getFeatures(pixel) {\n if (!this.renderer_) {\n return Promise.resolve([]);\n }\n return this.renderer_.getFeatures(pixel);\n }\n\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n */\n getData(pixel) {\n if (!this.renderer_ || !this.rendered) {\n return null;\n }\n return this.renderer_.getData(pixel);\n }\n\n /**\n * The layer is visible on the map view, i.e. within its min/max resolution or zoom and\n * extent, not set to `visible: false`, and not inside a layer group that is set\n * to `visible: false`.\n * @param {View|import(\"../View.js\").ViewStateLayerStateExtent} [view] View or {@link import(\"../Map.js\").FrameState}.\n * Only required when the layer is not added to a map.\n * @return {boolean} The layer is visible in the map view.\n * @api\n */\n isVisible(view) {\n let frameState;\n const map = this.getMapInternal();\n if (!view && map) {\n view = map.getView();\n }\n if (view instanceof View) {\n frameState = {\n viewState: view.getState(),\n extent: view.calculateExtent(),\n };\n } else {\n frameState = view;\n }\n if (!frameState.layerStatesArray && map) {\n frameState.layerStatesArray = map.getLayerGroup().getLayerStatesArray();\n }\n let layerState;\n if (frameState.layerStatesArray) {\n layerState = frameState.layerStatesArray.find(\n (layerState) => layerState.layer === this,\n );\n if (!layerState) {\n return false;\n }\n } else {\n layerState = this.getLayerState();\n }\n\n const layerExtent = this.getExtent();\n\n return (\n inView(layerState, frameState.viewState) &&\n (!layerExtent || intersects(layerExtent, frameState.extent))\n );\n }\n\n /**\n * Get the attributions of the source of this layer for the given view.\n * @param {View|import(\"../View.js\").ViewStateLayerStateExtent} [view] View or {@link import(\"../Map.js\").FrameState}.\n * Only required when the layer is not added to a map.\n * @return {Array} Attributions for this layer at the given view.\n * @api\n */\n getAttributions(view) {\n if (!this.isVisible(view)) {\n return [];\n }\n const getAttributions = this.getSource()?.getAttributions();\n if (!getAttributions) {\n return [];\n }\n const frameState =\n view instanceof View ? view.getViewStateAndExtent() : view;\n let attributions = getAttributions(frameState);\n if (!Array.isArray(attributions)) {\n attributions = [attributions];\n }\n return attributions;\n }\n\n /**\n * In charge to manage the rendering of the layer. One layer type is\n * bounded with one layer renderer.\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target which the renderer may (but need not) use\n * for rendering its content.\n * @return {HTMLElement|null} The rendered element.\n */\n render(frameState, target) {\n const layerRenderer = this.getRenderer();\n\n if (layerRenderer.prepareFrame(frameState)) {\n this.rendered = true;\n return layerRenderer.renderFrame(frameState, target);\n }\n return null;\n }\n\n /**\n * Called when a layer is not visible during a map render.\n */\n unrender() {\n this.rendered = false;\n }\n\n /** @return {string} Declutter */\n getDeclutter() {\n return undefined;\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../layer/Layer.js\").State} layerState Layer state.\n */\n renderDeclutter(frameState, layerState) {}\n\n /**\n * When the renderer follows a layout -> render approach, do the final rendering here.\n * @param {import('../Map.js').FrameState} frameState Frame state\n */\n renderDeferred(frameState) {\n const layerRenderer = this.getRenderer();\n if (!layerRenderer) {\n return;\n }\n layerRenderer.renderDeferred(frameState);\n }\n\n /**\n * For use inside the library only.\n * @param {import(\"../Map.js\").default|null} map Map.\n */\n setMapInternal(map) {\n if (!map) {\n this.unrender();\n }\n this.set(LayerProperty.MAP, map);\n }\n\n /**\n * For use inside the library only.\n * @return {import(\"../Map.js\").default|null} Map.\n */\n getMapInternal() {\n return this.get(LayerProperty.MAP);\n }\n\n /**\n * Sets the layer to be rendered on top of other layers on a map. The map will\n * not manage this layer in its layers collection. This\n * is useful for temporary layers. To remove an unmanaged layer from the map,\n * use `#setMap(null)`.\n *\n * To add the layer to a map and have it managed by the map, use\n * {@link module:ol/Map~Map#addLayer} instead.\n * @param {import(\"../Map.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.mapPrecomposeKey_) {\n unlistenByKey(this.mapPrecomposeKey_);\n this.mapPrecomposeKey_ = null;\n }\n if (!map) {\n this.changed();\n }\n if (this.mapRenderKey_) {\n unlistenByKey(this.mapRenderKey_);\n this.mapRenderKey_ = null;\n }\n if (map) {\n this.mapPrecomposeKey_ = listen(\n map,\n RenderEventType.PRECOMPOSE,\n this.handlePrecompose_,\n this,\n );\n this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map);\n this.changed();\n }\n }\n\n /**\n * @param {import(\"../events/Event.js\").default} renderEvent Render event\n * @private\n */\n handlePrecompose_(renderEvent) {\n const layerStatesArray =\n /** @type {import(\"../render/Event.js\").default} */ (renderEvent)\n .frameState.layerStatesArray;\n const layerState = this.getLayerState(false);\n assert(\n !layerStatesArray.some(\n (arrayLayerState) => arrayLayerState.layer === layerState.layer,\n ),\n 'A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both.',\n );\n layerStatesArray.push(layerState);\n }\n\n /**\n * Set the layer source.\n * @param {SourceType|null} source The layer source.\n * @observable\n * @api\n */\n setSource(source) {\n this.set(LayerProperty.SOURCE, source);\n }\n\n /**\n * Get the renderer for this layer.\n * @return {RendererType|null} The layer renderer.\n */\n getRenderer() {\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n return this.renderer_;\n }\n\n /**\n * @return {boolean} The layer has a renderer.\n */\n hasRenderer() {\n return !!this.renderer_;\n }\n\n /**\n * Create a renderer for this layer.\n * @return {RendererType} A layer renderer.\n * @protected\n */\n createRenderer() {\n return null;\n }\n\n /**\n * This will clear the renderer so that a new one can be created next time it is needed\n */\n clearRenderer() {\n if (this.renderer_) {\n this.renderer_.dispose();\n delete this.renderer_;\n }\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.clearRenderer();\n this.setSource(null);\n super.disposeInternal();\n }\n}\n\n/**\n * Return `true` if the layer is visible and if the provided view state\n * has resolution and zoom levels that are in range of the layer's min/max.\n * @param {State} layerState Layer state.\n * @param {import(\"../View.js\").State} viewState View state.\n * @return {boolean} The layer is visible at the given view state.\n */\nexport function inView(layerState, viewState) {\n if (!layerState.visible) {\n return false;\n }\n const resolution = viewState.resolution;\n if (\n resolution < layerState.minResolution ||\n resolution >= layerState.maxResolution\n ) {\n return false;\n }\n const zoom = viewState.zoom;\n return zoom > layerState.minZoom && zoom <= layerState.maxZoom;\n}\n\nexport default Layer;\n"], + "mappings": "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", + "names": ["none", "equals", "none", "EventType_default", "Event_default", "Event_default", "EventType_default", "Layer_default", "layerState", "EventType_default", "Layer_default"] +} diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol.js index 304c75e..f5eeb6d 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol.js @@ -1,23 +1,23 @@ -import { - ImageTile_default, - TileRange_default, - TileState_default, - Tile_default -} from "./chunk-V7I37XKR.js"; import { MapBrowserEvent_default, MapEvent_default } from "./chunk-LKL2NEMT.js"; import { - Pointer_default, - centroid -} from "./chunk-UWCYJJIT.js"; + Vector_default +} from "./chunk-JOMDBGKW.js"; +import "./chunk-6OUHCICN.js"; +import { + LineString_default +} from "./chunk-NER2BJ37.js"; +import { + Feature_default +} from "./chunk-ATTNMDTG.js"; import { BaseVector_default, Immediate_default, Vector_default as Vector_default2, getSquaredTolerance -} from "./chunk-VQAOIZZU.js"; +} from "./chunk-HFPY7EDW.js"; import { CLASS_COLLAPSED, CLASS_CONTROL, @@ -30,7 +30,9 @@ import { Text_default, checkedFonts, shared -} from "./chunk-LKGRVZZI.js"; +} from "./chunk-GKDSB34V.js"; +import "./chunk-RW3V7S4F.js"; +import "./chunk-JFXZSSOM.js"; import { Base_default, EventType_default as EventType_default2, @@ -38,11 +40,15 @@ import { Layer_default2 as Layer_default, ViewHint_default, View_default, - disable, inView -} from "./chunk-6SP66AVH.js"; -import "./chunk-S7HK3S7W.js"; -import "./chunk-33EAEVLP.js"; +} from "./chunk-VWBYIKLE.js"; +import "./chunk-DYKFAHI6.js"; +import { + ImageTile_default, + TileRange_default, + TileState_default, + Tile_default +} from "./chunk-V7I37XKR.js"; import "./chunk-FM44FOIC.js"; import { ImageState_default, @@ -56,62 +62,41 @@ import { replaceNode } from "./chunk-WEQYAO4O.js"; import { - hasArea -} from "./chunk-PPP4FLHO.js"; + Kinetic_default, + defaults +} from "./chunk-7RGUNZVN.js"; +import "./chunk-RMGZ5HGX.js"; import { - Interaction_default, - pan, - zoomByDelta -} from "./chunk-F2HSAX6I.js"; + circular +} from "./chunk-47JK3GLV.js"; +import "./chunk-TRW2RYAI.js"; +import "./chunk-QIVUQU5K.js"; +import "./chunk-LKZG5HMW.js"; +import "./chunk-F2HSAX6I.js"; import { easeOut } from "./chunk-LMC3RO5P.js"; import { - Vector_default -} from "./chunk-2R5MNV34.js"; -import "./chunk-DYKFAHI6.js"; -import "./chunk-RW3V7S4F.js"; -import { - Feature_default -} from "./chunk-GAPTD7YR.js"; + CollectionEventType_default, + Collection_default +} from "./chunk-4E4H2AGX.js"; +import "./chunk-S7HK3S7W.js"; +import "./chunk-33EAEVLP.js"; import { - MapBrowserEventType_default, - all, - altShiftKeysOnly, - always, - focusWithTabindex, - mouseActionButton, - mouseOnly, - noModifierKeys, - platformModifierKey, - primaryAction, - shiftKeyOnly, - targetNotEditable -} from "./chunk-OOF5364O.js"; + hasArea +} from "./chunk-PPP4FLHO.js"; +import "./chunk-VAUZYTLA.js"; import { DEVICE_PIXEL_RATIO, - FIREFOX, PASSIVE_EVENT_LISTENERS } from "./chunk-ZPDML4Q3.js"; -import "./chunk-2NX2FDVC.js"; -import { - Polygon_default, - circular -} from "./chunk-5CPSJRE2.js"; -import { - CollectionEventType_default, - Collection_default -} from "./chunk-4E4H2AGX.js"; import { - LineString_default -} from "./chunk-7MYDC76J.js"; -import "./chunk-JFXZSSOM.js"; -import "./chunk-TRW2RYAI.js"; -import "./chunk-QIVUQU5K.js"; + MapBrowserEventType_default +} from "./chunk-POVGKIBQ.js"; import { Point_default -} from "./chunk-QJJYQF6H.js"; -import "./chunk-W2FV6P6N.js"; +} from "./chunk-G3HPQ3BH.js"; +import "./chunk-6GRRGW6V.js"; import { apply, compose, @@ -131,8 +116,23 @@ import { warn } from "./chunk-5ACH5F45.js"; import { - assert -} from "./chunk-QFCIXVZ3.js"; + applyTransform, + approximatelyEquals, + clone, + containsCoordinate, + containsExtent, + createOrUpdateEmpty, + degreesToStringHDMS, + equals as equals2, + getCenter, + getForViewAndSize, + getIntersection, + getWidth, + intersects, + isEmpty, + wrapX, + wrapX2 +} from "./chunk-WXT7AISE.js"; import { Disposable_default, Event_default, @@ -147,9 +147,16 @@ import { listen, unlistenByKey } from "./chunk-V2VQBN44.js"; +import { + clamp, + squaredSegmentDistance, + toRadians +} from "./chunk-V7KTD4MH.js"; +import { + assert +} from "./chunk-QFCIXVZ3.js"; import { EventType_default, - FALSE, TRUE, VOID, toPromise @@ -157,31 +164,6 @@ import { import { equals } from "./chunk-FQY6EMA7.js"; -import { - applyTransform, - approximatelyEquals, - clone, - containsCoordinate, - containsExtent, - createOrUpdateEmpty, - degreesToStringHDMS, - equals as equals2, - getCenter, - getForViewAndSize, - getIntersection, - getWidth, - intersects, - isEmpty, - rotate, - scale, - wrapX, - wrapX2 -} from "./chunk-WXT7AISE.js"; -import { - clamp, - squaredSegmentDistance, - toRadians -} from "./chunk-V7KTD4MH.js"; import "./chunk-V6TY7KAL.js"; // node_modules/ol/Geolocation.js @@ -1400,78 +1382,6 @@ var ImageCanvas = class extends Image_default { }; var ImageCanvas_default = ImageCanvas; -// node_modules/ol/Kinetic.js -var Kinetic = class { - /** - * @param {number} decay Rate of decay (must be negative). - * @param {number} minVelocity Minimum velocity (pixels/millisecond). - * @param {number} delay Delay to consider to calculate the kinetic - * initial values (milliseconds). - */ - constructor(decay, minVelocity, delay) { - this.decay_ = decay; - this.minVelocity_ = minVelocity; - this.delay_ = delay; - this.points_ = []; - this.angle_ = 0; - this.initialVelocity_ = 0; - } - /** - * FIXME empty description for jsdoc - */ - begin() { - this.points_.length = 0; - this.angle_ = 0; - this.initialVelocity_ = 0; - } - /** - * @param {number} x X. - * @param {number} y Y. - */ - update(x, y) { - this.points_.push(x, y, Date.now()); - } - /** - * @return {boolean} Whether we should do kinetic animation. - */ - end() { - if (this.points_.length < 6) { - return false; - } - const delay = Date.now() - this.delay_; - const lastIndex = this.points_.length - 3; - if (this.points_[lastIndex + 2] < delay) { - return false; - } - let firstIndex = lastIndex - 3; - while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) { - firstIndex -= 3; - } - const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2]; - if (duration < 1e3 / 60) { - return false; - } - const dx = this.points_[lastIndex] - this.points_[firstIndex]; - const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1]; - this.angle_ = Math.atan2(dy, dx); - this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration; - return this.initialVelocity_ > this.minVelocity_; - } - /** - * @return {number} Total distance travelled (pixels). - */ - getDistance() { - return (this.minVelocity_ - this.initialVelocity_) / this.decay_; - } - /** - * @return {number} Angle of the kinetic panning animation (radians). - */ - getAngle() { - return this.angle_; - } -}; -var Kinetic_default = Kinetic; - // node_modules/ol/pointer/EventType.js var EventType_default3 = { POINTERMOVE: "pointermove", @@ -2584,7 +2494,7 @@ var Zoom = class extends Control_default { var Zoom_default = Zoom; // node_modules/ol/control/defaults.js -function defaults(options) { +function defaults2(options) { options = options ? options : {}; const controls = new Collection_default(); const zoomControl = options.zoom !== void 0 ? options.zoom : true; @@ -2602,1088 +2512,6 @@ function defaults(options) { return controls; } -// node_modules/ol/interaction/DoubleClickZoom.js -var DoubleClickZoom = class extends Interaction_default { - /** - * @param {Options} [options] Options. - */ - constructor(options) { - super(); - options = options ? options : {}; - this.delta_ = options.delta ? options.delta : 1; - this.duration_ = options.duration !== void 0 ? options.duration : 250; - } - /** - * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a - * doubleclick) and eventually zooms the map. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. - * @return {boolean} `false` to stop event propagation. - * @override - */ - handleEvent(mapBrowserEvent) { - let stopEvent = false; - if (mapBrowserEvent.type == MapBrowserEventType_default.DBLCLICK) { - const browserEvent = ( - /** @type {MouseEvent} */ - mapBrowserEvent.originalEvent - ); - const map = mapBrowserEvent.map; - const anchor = mapBrowserEvent.coordinate; - const delta = browserEvent.shiftKey ? -this.delta_ : this.delta_; - const view = map.getView(); - zoomByDelta(view, delta, anchor, this.duration_); - browserEvent.preventDefault(); - stopEvent = true; - } - return !stopEvent; - } -}; -var DoubleClickZoom_default = DoubleClickZoom; - -// node_modules/ol/interaction/DragPan.js -var DragPan = class extends Pointer_default { - /** - * @param {Options} [options] Options. - */ - constructor(options) { - super({ - stopDown: FALSE - }); - options = options ? options : {}; - this.kinetic_ = options.kinetic; - this.lastCentroid = null; - this.lastPointersCount_; - this.panning_ = false; - const condition = options.condition ? options.condition : all(noModifierKeys, primaryAction); - this.condition_ = options.onFocusOnly ? all(focusWithTabindex, condition) : condition; - this.noKinetic_ = false; - } - /** - * Handle pointer drag events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @override - */ - handleDragEvent(mapBrowserEvent) { - const map = mapBrowserEvent.map; - if (!this.panning_) { - this.panning_ = true; - map.getView().beginInteraction(); - } - const targetPointers = this.targetPointers; - const centroid2 = map.getEventPixel(centroid(targetPointers)); - if (targetPointers.length == this.lastPointersCount_) { - if (this.kinetic_) { - this.kinetic_.update(centroid2[0], centroid2[1]); - } - if (this.lastCentroid) { - const delta = [ - this.lastCentroid[0] - centroid2[0], - centroid2[1] - this.lastCentroid[1] - ]; - const map2 = mapBrowserEvent.map; - const view = map2.getView(); - scale(delta, view.getResolution()); - rotate(delta, view.getRotation()); - view.adjustCenterInternal(delta); - } - } else if (this.kinetic_) { - this.kinetic_.begin(); - } - this.lastCentroid = centroid2; - this.lastPointersCount_ = targetPointers.length; - mapBrowserEvent.originalEvent.preventDefault(); - } - /** - * Handle pointer up events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @return {boolean} If the event was consumed. - * @override - */ - handleUpEvent(mapBrowserEvent) { - const map = mapBrowserEvent.map; - const view = map.getView(); - if (this.targetPointers.length === 0) { - if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) { - const distance = this.kinetic_.getDistance(); - const angle = this.kinetic_.getAngle(); - const center = view.getCenterInternal(); - const centerpx = map.getPixelFromCoordinateInternal(center); - const dest = map.getCoordinateFromPixelInternal([ - centerpx[0] - distance * Math.cos(angle), - centerpx[1] - distance * Math.sin(angle) - ]); - view.animateInternal({ - center: view.getConstrainedCenter(dest), - duration: 500, - easing: easeOut - }); - } - if (this.panning_) { - this.panning_ = false; - view.endInteraction(); - } - return false; - } - if (this.kinetic_) { - this.kinetic_.begin(); - } - this.lastCentroid = null; - return true; - } - /** - * Handle pointer down events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @return {boolean} If the event was consumed. - * @override - */ - handleDownEvent(mapBrowserEvent) { - if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) { - const map = mapBrowserEvent.map; - const view = map.getView(); - this.lastCentroid = null; - if (view.getAnimating()) { - view.cancelAnimations(); - } - if (this.kinetic_) { - this.kinetic_.begin(); - } - this.noKinetic_ = this.targetPointers.length > 1; - return true; - } - return false; - } -}; -var DragPan_default = DragPan; - -// node_modules/ol/interaction/DragRotate.js -var DragRotate = class extends Pointer_default { - /** - * @param {Options} [options] Options. - */ - constructor(options) { - options = options ? options : {}; - super({ - stopDown: FALSE - }); - this.condition_ = options.condition ? options.condition : altShiftKeysOnly; - this.lastAngle_ = void 0; - this.duration_ = options.duration !== void 0 ? options.duration : 250; - } - /** - * Handle pointer drag events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @override - */ - handleDragEvent(mapBrowserEvent) { - if (!mouseOnly(mapBrowserEvent)) { - return; - } - const map = mapBrowserEvent.map; - const view = map.getView(); - if (view.getConstraints().rotation === disable) { - return; - } - const size = map.getSize(); - const offset = mapBrowserEvent.pixel; - const theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2); - if (this.lastAngle_ !== void 0) { - const delta = theta - this.lastAngle_; - view.adjustRotationInternal(-delta); - } - this.lastAngle_ = theta; - } - /** - * Handle pointer up events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @return {boolean} If the event was consumed. - * @override - */ - handleUpEvent(mapBrowserEvent) { - if (!mouseOnly(mapBrowserEvent)) { - return true; - } - const map = mapBrowserEvent.map; - const view = map.getView(); - view.endInteraction(this.duration_); - return false; - } - /** - * Handle pointer down events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @return {boolean} If the event was consumed. - * @override - */ - handleDownEvent(mapBrowserEvent) { - if (!mouseOnly(mapBrowserEvent)) { - return false; - } - if (mouseActionButton(mapBrowserEvent) && this.condition_(mapBrowserEvent)) { - const map = mapBrowserEvent.map; - map.getView().beginInteraction(); - this.lastAngle_ = void 0; - return true; - } - return false; - } -}; -var DragRotate_default = DragRotate; - -// node_modules/ol/render/Box.js -var RenderBox = class extends Disposable_default { - /** - * @param {string} className CSS class name. - */ - constructor(className) { - super(); - this.geometry_ = null; - this.element_ = document.createElement("div"); - this.element_.style.position = "absolute"; - this.element_.style.pointerEvents = "auto"; - this.element_.className = "ol-box " + className; - this.map_ = null; - this.startPixel_ = null; - this.endPixel_ = null; - } - /** - * Clean up. - * @override - */ - disposeInternal() { - this.setMap(null); - } - /** - * @private - */ - render_() { - const startPixel = this.startPixel_; - const endPixel = this.endPixel_; - const px = "px"; - const style = this.element_.style; - style.left = Math.min(startPixel[0], endPixel[0]) + px; - style.top = Math.min(startPixel[1], endPixel[1]) + px; - style.width = Math.abs(endPixel[0] - startPixel[0]) + px; - style.height = Math.abs(endPixel[1] - startPixel[1]) + px; - } - /** - * @param {import("../Map.js").default|null} map Map. - */ - setMap(map) { - if (this.map_) { - this.map_.getOverlayContainer().removeChild(this.element_); - const style = this.element_.style; - style.left = "inherit"; - style.top = "inherit"; - style.width = "inherit"; - style.height = "inherit"; - } - this.map_ = map; - if (this.map_) { - this.map_.getOverlayContainer().appendChild(this.element_); - } - } - /** - * @param {import("../pixel.js").Pixel} startPixel Start pixel. - * @param {import("../pixel.js").Pixel} endPixel End pixel. - */ - setPixels(startPixel, endPixel) { - this.startPixel_ = startPixel; - this.endPixel_ = endPixel; - this.createOrUpdateGeometry(); - this.render_(); - } - /** - * Creates or updates the cached geometry. - */ - createOrUpdateGeometry() { - if (!this.map_) { - return; - } - const startPixel = this.startPixel_; - const endPixel = this.endPixel_; - const pixels = [ - startPixel, - [startPixel[0], endPixel[1]], - endPixel, - [endPixel[0], startPixel[1]] - ]; - const coordinates = pixels.map( - this.map_.getCoordinateFromPixelInternal, - this.map_ - ); - coordinates[4] = coordinates[0].slice(); - if (!this.geometry_) { - this.geometry_ = new Polygon_default([coordinates]); - } else { - this.geometry_.setCoordinates([coordinates]); - } - } - /** - * @return {import("../geom/Polygon.js").default} Geometry. - */ - getGeometry() { - return this.geometry_; - } -}; -var Box_default = RenderBox; - -// node_modules/ol/interaction/DragBox.js -var DragBoxEventType = { - /** - * Triggered upon drag box start. - * @event DragBoxEvent#boxstart - * @api - */ - BOXSTART: "boxstart", - /** - * Triggered on drag when box is active. - * @event DragBoxEvent#boxdrag - * @api - */ - BOXDRAG: "boxdrag", - /** - * Triggered upon drag box end. - * @event DragBoxEvent#boxend - * @api - */ - BOXEND: "boxend", - /** - * Triggered upon drag box canceled. - * @event DragBoxEvent#boxcancel - * @api - */ - BOXCANCEL: "boxcancel" -}; -var DragBoxEvent = class extends Event_default { - /** - * @param {string} type The event type. - * @param {import("../coordinate.js").Coordinate} coordinate The event coordinate. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Originating event. - */ - constructor(type, coordinate, mapBrowserEvent) { - super(type); - this.coordinate = coordinate; - this.mapBrowserEvent = mapBrowserEvent; - } -}; -var DragBox = class extends Pointer_default { - /** - * @param {Options} [options] Options. - */ - constructor(options) { - super(); - this.on; - this.once; - this.un; - options = options ?? {}; - this.box_ = new Box_default(options.className || "ol-dragbox"); - this.minArea_ = options.minArea ?? 64; - if (options.onBoxEnd) { - this.onBoxEnd = options.onBoxEnd; - } - this.startPixel_ = null; - this.condition_ = options.condition ?? mouseActionButton; - this.boxEndCondition_ = options.boxEndCondition ?? this.defaultBoxEndCondition; - } - /** - * The default condition for determining whether the boxend event - * should fire. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent The originating MapBrowserEvent - * leading to the box end. - * @param {import("../pixel.js").Pixel} startPixel The starting pixel of the box. - * @param {import("../pixel.js").Pixel} endPixel The end pixel of the box. - * @return {boolean} Whether or not the boxend condition should be fired. - */ - defaultBoxEndCondition(mapBrowserEvent, startPixel, endPixel) { - const width = endPixel[0] - startPixel[0]; - const height = endPixel[1] - startPixel[1]; - return width * width + height * height >= this.minArea_; - } - /** - * Returns geometry of last drawn box. - * @return {import("../geom/Polygon.js").default} Geometry. - * @api - */ - getGeometry() { - return this.box_.getGeometry(); - } - /** - * Handle pointer drag events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @override - */ - handleDragEvent(mapBrowserEvent) { - if (!this.startPixel_) { - return; - } - this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel); - this.dispatchEvent( - new DragBoxEvent( - DragBoxEventType.BOXDRAG, - mapBrowserEvent.coordinate, - mapBrowserEvent - ) - ); - } - /** - * Handle pointer up events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @return {boolean} If the event was consumed. - * @override - */ - handleUpEvent(mapBrowserEvent) { - if (!this.startPixel_) { - return false; - } - const completeBox = this.boxEndCondition_( - mapBrowserEvent, - this.startPixel_, - mapBrowserEvent.pixel - ); - if (completeBox) { - this.onBoxEnd(mapBrowserEvent); - } - this.dispatchEvent( - new DragBoxEvent( - completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL, - mapBrowserEvent.coordinate, - mapBrowserEvent - ) - ); - this.box_.setMap(null); - this.startPixel_ = null; - return false; - } - /** - * Handle pointer down events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @return {boolean} If the event was consumed. - * @override - */ - handleDownEvent(mapBrowserEvent) { - if (this.condition_(mapBrowserEvent)) { - this.startPixel_ = mapBrowserEvent.pixel; - this.box_.setMap(mapBrowserEvent.map); - this.box_.setPixels(this.startPixel_, this.startPixel_); - this.dispatchEvent( - new DragBoxEvent( - DragBoxEventType.BOXSTART, - mapBrowserEvent.coordinate, - mapBrowserEvent - ) - ); - return true; - } - return false; - } - /** - * Function to execute just before `onboxend` is fired - * @param {import("../MapBrowserEvent.js").default} event Event. - */ - onBoxEnd(event) { - } - /** - * Activate or deactivate the interaction. - * @param {boolean} active Active. - * @observable - * @api - * @override - */ - setActive(active) { - if (!active) { - this.box_.setMap(null); - if (this.startPixel_) { - this.dispatchEvent( - new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null) - ); - this.startPixel_ = null; - } - } - super.setActive(active); - } - /** - * @param {import("../Map.js").default|null} map Map. - * @override - */ - setMap(map) { - const oldMap = this.getMap(); - if (oldMap) { - this.box_.setMap(null); - if (this.startPixel_) { - this.dispatchEvent( - new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null) - ); - this.startPixel_ = null; - } - } - super.setMap(map); - } -}; -var DragBox_default = DragBox; - -// node_modules/ol/interaction/DragZoom.js -var DragZoom = class extends DragBox_default { - /** - * @param {Options} [options] Options. - */ - constructor(options) { - options = options ? options : {}; - const condition = options.condition ? options.condition : shiftKeyOnly; - super({ - condition, - className: options.className || "ol-dragzoom", - minArea: options.minArea - }); - this.duration_ = options.duration !== void 0 ? options.duration : 200; - this.out_ = options.out !== void 0 ? options.out : false; - } - /** - * Function to execute just before `onboxend` is fired - * @param {import("../MapBrowserEvent.js").default} event Event. - * @override - */ - onBoxEnd(event) { - const map = this.getMap(); - const view = ( - /** @type {!import("../View.js").default} */ - map.getView() - ); - let geometry = this.getGeometry(); - if (this.out_) { - const rotatedExtent = view.rotatedExtentForGeometry(geometry); - const resolution = view.getResolutionForExtentInternal(rotatedExtent); - const factor = view.getResolution() / resolution; - geometry = geometry.clone(); - geometry.scale(factor * factor); - } - view.fitInternal(geometry, { - duration: this.duration_, - easing: easeOut - }); - } -}; -var DragZoom_default = DragZoom; - -// node_modules/ol/events/Key.js -var Key_default = { - LEFT: "ArrowLeft", - UP: "ArrowUp", - RIGHT: "ArrowRight", - DOWN: "ArrowDown" -}; - -// node_modules/ol/interaction/KeyboardPan.js -var KeyboardPan = class extends Interaction_default { - /** - * @param {Options} [options] Options. - */ - constructor(options) { - super(); - options = options || {}; - this.defaultCondition_ = function(mapBrowserEvent) { - return noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent); - }; - this.condition_ = options.condition !== void 0 ? options.condition : this.defaultCondition_; - this.duration_ = options.duration !== void 0 ? options.duration : 100; - this.pixelDelta_ = options.pixelDelta !== void 0 ? options.pixelDelta : 128; - } - /** - * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a - * `KeyEvent`, and decides the direction to pan to (if an arrow key was - * pressed). - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. - * @return {boolean} `false` to stop event propagation. - * @override - */ - handleEvent(mapBrowserEvent) { - let stopEvent = false; - if (mapBrowserEvent.type == EventType_default.KEYDOWN) { - const keyEvent = ( - /** @type {KeyboardEvent} */ - mapBrowserEvent.originalEvent - ); - const key = keyEvent.key; - if (this.condition_(mapBrowserEvent) && (key == Key_default.DOWN || key == Key_default.LEFT || key == Key_default.RIGHT || key == Key_default.UP)) { - const map = mapBrowserEvent.map; - const view = map.getView(); - const mapUnitsDelta = view.getResolution() * this.pixelDelta_; - let deltaX = 0, deltaY = 0; - if (key == Key_default.DOWN) { - deltaY = -mapUnitsDelta; - } else if (key == Key_default.LEFT) { - deltaX = -mapUnitsDelta; - } else if (key == Key_default.RIGHT) { - deltaX = mapUnitsDelta; - } else { - deltaY = mapUnitsDelta; - } - const delta = [deltaX, deltaY]; - rotate(delta, view.getRotation()); - pan(view, delta, this.duration_); - keyEvent.preventDefault(); - stopEvent = true; - } - } - return !stopEvent; - } -}; -var KeyboardPan_default = KeyboardPan; - -// node_modules/ol/interaction/KeyboardZoom.js -var KeyboardZoom = class extends Interaction_default { - /** - * @param {Options} [options] Options. - */ - constructor(options) { - super(); - options = options ? options : {}; - this.condition_ = options.condition ? options.condition : function(mapBrowserEvent) { - return !platformModifierKey(mapBrowserEvent) && targetNotEditable(mapBrowserEvent); - }; - this.delta_ = options.delta ? options.delta : 1; - this.duration_ = options.duration !== void 0 ? options.duration : 100; - } - /** - * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a - * `KeyEvent`, and decides whether to zoom in or out (depending on whether the - * key pressed was '+' or '-'). - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. - * @return {boolean} `false` to stop event propagation. - * @override - */ - handleEvent(mapBrowserEvent) { - let stopEvent = false; - if (mapBrowserEvent.type == EventType_default.KEYDOWN || mapBrowserEvent.type == EventType_default.KEYPRESS) { - const keyEvent = ( - /** @type {KeyboardEvent} */ - mapBrowserEvent.originalEvent - ); - const key = keyEvent.key; - if (this.condition_(mapBrowserEvent) && (key === "+" || key === "-")) { - const map = mapBrowserEvent.map; - const delta = key === "+" ? this.delta_ : -this.delta_; - const view = map.getView(); - zoomByDelta(view, delta, void 0, this.duration_); - keyEvent.preventDefault(); - stopEvent = true; - } - } - return !stopEvent; - } -}; -var KeyboardZoom_default = KeyboardZoom; - -// node_modules/ol/interaction/MouseWheelZoom.js -var MouseWheelZoom = class extends Interaction_default { - /** - * @param {Options} [options] Options. - */ - constructor(options) { - options = options ? options : {}; - super( - /** @type {import("./Interaction.js").InteractionOptions} */ - options - ); - this.totalDelta_ = 0; - this.lastDelta_ = 0; - this.maxDelta_ = options.maxDelta !== void 0 ? options.maxDelta : 1; - this.duration_ = options.duration !== void 0 ? options.duration : 250; - this.timeout_ = options.timeout !== void 0 ? options.timeout : 80; - this.useAnchor_ = options.useAnchor !== void 0 ? options.useAnchor : true; - this.constrainResolution_ = options.constrainResolution !== void 0 ? options.constrainResolution : false; - const condition = options.condition ? options.condition : always; - this.condition_ = options.onFocusOnly ? all(focusWithTabindex, condition) : condition; - this.lastAnchor_ = null; - this.startTime_ = void 0; - this.timeoutId_; - this.mode_ = void 0; - this.trackpadEventGap_ = 400; - this.trackpadTimeoutId_; - this.deltaPerZoom_ = 300; - } - /** - * @private - */ - endInteraction_() { - this.trackpadTimeoutId_ = void 0; - const map = this.getMap(); - if (!map) { - return; - } - const view = map.getView(); - view.endInteraction( - void 0, - this.lastDelta_ ? this.lastDelta_ > 0 ? 1 : -1 : 0, - this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null - ); - } - /** - * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually - * zooms the map. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. - * @return {boolean} `false` to stop event propagation. - * @override - */ - handleEvent(mapBrowserEvent) { - if (!this.condition_(mapBrowserEvent)) { - return true; - } - const type = mapBrowserEvent.type; - if (type !== EventType_default.WHEEL) { - return true; - } - const map = mapBrowserEvent.map; - const wheelEvent = ( - /** @type {WheelEvent} */ - mapBrowserEvent.originalEvent - ); - wheelEvent.preventDefault(); - if (this.useAnchor_) { - this.lastAnchor_ = mapBrowserEvent.pixel; - } - let delta; - if (mapBrowserEvent.type == EventType_default.WHEEL) { - delta = wheelEvent.deltaY; - if (FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) { - delta /= DEVICE_PIXEL_RATIO; - } - if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) { - delta *= 40; - } - } - if (delta === 0) { - return false; - } - this.lastDelta_ = delta; - const now = Date.now(); - if (this.startTime_ === void 0) { - this.startTime_ = now; - } - if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) { - this.mode_ = Math.abs(delta) < 4 ? "trackpad" : "wheel"; - } - const view = map.getView(); - if (this.mode_ === "trackpad" && !(view.getConstrainResolution() || this.constrainResolution_)) { - if (this.trackpadTimeoutId_) { - clearTimeout(this.trackpadTimeoutId_); - } else { - if (view.getAnimating()) { - view.cancelAnimations(); - } - view.beginInteraction(); - } - this.trackpadTimeoutId_ = setTimeout( - this.endInteraction_.bind(this), - this.timeout_ - ); - view.adjustZoom( - -delta / this.deltaPerZoom_, - this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null - ); - this.startTime_ = now; - return false; - } - this.totalDelta_ += delta; - const timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0); - clearTimeout(this.timeoutId_); - this.timeoutId_ = setTimeout( - this.handleWheelZoom_.bind(this, map), - timeLeft - ); - return false; - } - /** - * @private - * @param {import("../Map.js").default} map Map. - */ - handleWheelZoom_(map) { - const view = map.getView(); - if (view.getAnimating()) { - view.cancelAnimations(); - } - let delta = -clamp( - this.totalDelta_, - -this.maxDelta_ * this.deltaPerZoom_, - this.maxDelta_ * this.deltaPerZoom_ - ) / this.deltaPerZoom_; - if (view.getConstrainResolution() || this.constrainResolution_) { - delta = delta ? delta > 0 ? 1 : -1 : 0; - } - zoomByDelta( - view, - delta, - this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null, - this.duration_ - ); - this.mode_ = void 0; - this.totalDelta_ = 0; - this.lastAnchor_ = null; - this.startTime_ = void 0; - this.timeoutId_ = void 0; - } - /** - * Enable or disable using the mouse's location as an anchor when zooming - * @param {boolean} useAnchor true to zoom to the mouse's location, false - * to zoom to the center of the map - * @api - */ - setMouseAnchor(useAnchor) { - this.useAnchor_ = useAnchor; - if (!useAnchor) { - this.lastAnchor_ = null; - } - } -}; -var MouseWheelZoom_default = MouseWheelZoom; - -// node_modules/ol/interaction/PinchRotate.js -var PinchRotate = class extends Pointer_default { - /** - * @param {Options} [options] Options. - */ - constructor(options) { - options = options ? options : {}; - const pointerOptions = ( - /** @type {import("./Pointer.js").Options} */ - options - ); - if (!pointerOptions.stopDown) { - pointerOptions.stopDown = FALSE; - } - super(pointerOptions); - this.anchor_ = null; - this.lastAngle_ = void 0; - this.rotating_ = false; - this.rotationDelta_ = 0; - this.threshold_ = options.threshold !== void 0 ? options.threshold : 0.3; - this.duration_ = options.duration !== void 0 ? options.duration : 250; - } - /** - * Handle pointer drag events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @override - */ - handleDragEvent(mapBrowserEvent) { - let rotationDelta = 0; - const touch0 = this.targetPointers[0]; - const touch1 = this.targetPointers[1]; - const angle = Math.atan2( - touch1.clientY - touch0.clientY, - touch1.clientX - touch0.clientX - ); - if (this.lastAngle_ !== void 0) { - const delta = angle - this.lastAngle_; - this.rotationDelta_ += delta; - if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) { - this.rotating_ = true; - } - rotationDelta = delta; - } - this.lastAngle_ = angle; - const map = mapBrowserEvent.map; - const view = map.getView(); - if (view.getConstraints().rotation === disable) { - return; - } - this.anchor_ = map.getCoordinateFromPixelInternal( - map.getEventPixel(centroid(this.targetPointers)) - ); - if (this.rotating_) { - map.render(); - view.adjustRotationInternal(rotationDelta, this.anchor_); - } - } - /** - * Handle pointer up events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @return {boolean} If the event was consumed. - * @override - */ - handleUpEvent(mapBrowserEvent) { - if (this.targetPointers.length < 2) { - const map = mapBrowserEvent.map; - const view = map.getView(); - view.endInteraction(this.duration_); - return false; - } - return true; - } - /** - * Handle pointer down events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @return {boolean} If the event was consumed. - * @override - */ - handleDownEvent(mapBrowserEvent) { - if (this.targetPointers.length >= 2) { - const map = mapBrowserEvent.map; - this.anchor_ = null; - this.lastAngle_ = void 0; - this.rotating_ = false; - this.rotationDelta_ = 0; - if (!this.handlingDownUpSequence) { - map.getView().beginInteraction(); - } - return true; - } - return false; - } -}; -var PinchRotate_default = PinchRotate; - -// node_modules/ol/interaction/PinchZoom.js -var PinchZoom = class extends Pointer_default { - /** - * @param {Options} [options] Options. - */ - constructor(options) { - options = options ? options : {}; - const pointerOptions = ( - /** @type {import("./Pointer.js").Options} */ - options - ); - if (!pointerOptions.stopDown) { - pointerOptions.stopDown = FALSE; - } - super(pointerOptions); - this.anchor_ = null; - this.duration_ = options.duration !== void 0 ? options.duration : 400; - this.lastDistance_ = void 0; - this.lastScaleDelta_ = 1; - } - /** - * Handle pointer drag events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @override - */ - handleDragEvent(mapBrowserEvent) { - let scaleDelta = 1; - const touch0 = this.targetPointers[0]; - const touch1 = this.targetPointers[1]; - const dx = touch0.clientX - touch1.clientX; - const dy = touch0.clientY - touch1.clientY; - const distance = Math.sqrt(dx * dx + dy * dy); - if (this.lastDistance_ !== void 0) { - scaleDelta = this.lastDistance_ / distance; - } - this.lastDistance_ = distance; - const map = mapBrowserEvent.map; - const view = map.getView(); - if (scaleDelta != 1) { - this.lastScaleDelta_ = scaleDelta; - } - this.anchor_ = map.getCoordinateFromPixelInternal( - map.getEventPixel(centroid(this.targetPointers)) - ); - map.render(); - view.adjustResolutionInternal(scaleDelta, this.anchor_); - } - /** - * Handle pointer up events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @return {boolean} If the event was consumed. - * @override - */ - handleUpEvent(mapBrowserEvent) { - if (this.targetPointers.length < 2) { - const map = mapBrowserEvent.map; - const view = map.getView(); - const direction = this.lastScaleDelta_ > 1 ? 1 : -1; - view.endInteraction(this.duration_, direction); - return false; - } - return true; - } - /** - * Handle pointer down events. - * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Event. - * @return {boolean} If the event was consumed. - * @override - */ - handleDownEvent(mapBrowserEvent) { - if (this.targetPointers.length >= 2) { - const map = mapBrowserEvent.map; - this.anchor_ = null; - this.lastDistance_ = void 0; - this.lastScaleDelta_ = 1; - if (!this.handlingDownUpSequence) { - map.getView().beginInteraction(); - } - return true; - } - return false; - } -}; -var PinchZoom_default = PinchZoom; - -// node_modules/ol/interaction/defaults.js -function defaults2(options) { - options = options ? options : {}; - const interactions = new Collection_default(); - const kinetic = new Kinetic_default(-5e-3, 0.05, 100); - const altShiftDragRotate = options.altShiftDragRotate !== void 0 ? options.altShiftDragRotate : true; - if (altShiftDragRotate) { - interactions.push(new DragRotate_default()); - } - const doubleClickZoom = options.doubleClickZoom !== void 0 ? options.doubleClickZoom : true; - if (doubleClickZoom) { - interactions.push( - new DoubleClickZoom_default({ - delta: options.zoomDelta, - duration: options.zoomDuration - }) - ); - } - const dragPan = options.dragPan !== void 0 ? options.dragPan : true; - if (dragPan) { - interactions.push( - new DragPan_default({ - onFocusOnly: options.onFocusOnly, - kinetic - }) - ); - } - const pinchRotate = options.pinchRotate !== void 0 ? options.pinchRotate : true; - if (pinchRotate) { - interactions.push(new PinchRotate_default()); - } - const pinchZoom = options.pinchZoom !== void 0 ? options.pinchZoom : true; - if (pinchZoom) { - interactions.push( - new PinchZoom_default({ - duration: options.zoomDuration - }) - ); - } - const keyboard = options.keyboard !== void 0 ? options.keyboard : true; - if (keyboard) { - interactions.push(new KeyboardPan_default()); - interactions.push( - new KeyboardZoom_default({ - delta: options.zoomDelta, - duration: options.zoomDuration - }) - ); - } - const mouseWheelZoom = options.mouseWheelZoom !== void 0 ? options.mouseWheelZoom : true; - if (mouseWheelZoom) { - interactions.push( - new MouseWheelZoom_default({ - onFocusOnly: options.onFocusOnly, - duration: options.zoomDuration - }) - ); - } - const shiftDragZoom = options.shiftDragZoom !== void 0 ? options.shiftDragZoom : true; - if (shiftDragZoom) { - interactions.push( - new DragZoom_default({ - duration: options.zoomDuration - }) - ); - } - return interactions; -} - // node_modules/ol/layer/Group.js var GroupEvent = class extends Event_default { /** @@ -4294,8 +3122,8 @@ var Map = class extends Object_default { this.targetChangeHandlerKeys_ = null; this.targetElement_ = null; this.resizeObserver_ = new ResizeObserver(() => this.updateSize()); - this.controls = optionsInternal.controls || defaults(); - this.interactions = optionsInternal.interactions || defaults2({ + this.controls = optionsInternal.controls || defaults2(); + this.interactions = optionsInternal.interactions || defaults({ onFocusOnly: true }); this.overlays_ = optionsInternal.overlays; diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/ol.js.map index ca947cf..f82b205 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol.js.map +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../ol/Geolocation.js", "../../ol/geom/flat/geodesic.js", "../../ol/render.js", "../../ol/layer/Graticule.js", "../../ol/ImageCanvas.js", "../../ol/Kinetic.js", "../../ol/pointer/EventType.js", "../../ol/MapBrowserEventHandler.js", "../../ol/MapEventType.js", "../../ol/MapProperty.js", "../../ol/structs/PriorityQueue.js", "../../ol/TileQueue.js", "../../ol/control/Control.js", "../../ol/control/Attribution.js", "../../ol/control/Rotate.js", "../../ol/control/Zoom.js", "../../ol/control/defaults.js", "../../ol/interaction/DoubleClickZoom.js", "../../ol/interaction/DragPan.js", "../../ol/interaction/DragRotate.js", "../../ol/render/Box.js", "../../ol/interaction/DragBox.js", "../../ol/interaction/DragZoom.js", "../../ol/events/Key.js", "../../ol/interaction/KeyboardPan.js", "../../ol/interaction/KeyboardZoom.js", "../../ol/interaction/MouseWheelZoom.js", "../../ol/interaction/PinchRotate.js", "../../ol/interaction/PinchZoom.js", "../../ol/interaction/defaults.js", "../../ol/layer/Group.js", "../../ol/renderer/Map.js", "../../ol/renderer/Composite.js", "../../ol/Map.js", "../../ol/Overlay.js", "../../ol/VectorRenderTile.js", "../../ol/VectorTile.js"], - "sourcesContent": ["/**\n * @module ol/Geolocation\n */\nimport BaseObject from './Object.js';\nimport BaseEvent from './events/Event.js';\nimport {circular as circularPolygon} from './geom/Polygon.js';\nimport {toRadians} from './math.js';\nimport {\n get as getProjection,\n getTransformFromProjections,\n identityTransform,\n} from './proj.js';\n\n/**\n * @enum {string}\n */\nconst Property = {\n ACCURACY: 'accuracy',\n ACCURACY_GEOMETRY: 'accuracyGeometry',\n ALTITUDE: 'altitude',\n ALTITUDE_ACCURACY: 'altitudeAccuracy',\n HEADING: 'heading',\n POSITION: 'position',\n PROJECTION: 'projection',\n SPEED: 'speed',\n TRACKING: 'tracking',\n TRACKING_OPTIONS: 'trackingOptions',\n};\n\n/**\n * @enum string\n */\nconst GeolocationErrorType = {\n /**\n * Triggered when a `GeolocationPositionError` occurs.\n * @event module:ol/Geolocation.GeolocationError#error\n * @api\n */\n ERROR: 'error',\n};\n\n/**\n * @classdesc\n * Events emitted on [GeolocationPositionError](https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPositionError).\n */\nexport class GeolocationError extends BaseEvent {\n /**\n * @param {GeolocationPositionError} error error object.\n */\n constructor(error) {\n super(GeolocationErrorType.ERROR);\n\n /**\n * Code of the underlying `GeolocationPositionError`.\n * @type {number}\n * @api\n */\n this.code = error.code;\n\n /**\n * Message of the underlying `GeolocationPositionError`.\n * @type {string}\n * @api\n */\n this.message = error.message;\n }\n}\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [tracking=false] Start Tracking right after\n * instantiation.\n * @property {PositionOptions} [trackingOptions] Tracking options.\n * See https://www.w3.org/TR/geolocation-API/#position_options_interface.\n * @property {import(\"./proj.js\").ProjectionLike} [projection] The projection the position\n * is reported in.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:accuracy'|'change:accuracyGeometry'|'change:altitude'|\n * 'change:altitudeAccuracy'|'change:heading'|'change:position'|'change:projection'|'change:speed'|'change:tracking'|\n * 'change:trackingOptions'} GeolocationObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature<'error', GeolocationError, Return> &\n * import(\"./Observable\").CombinedOnSignature &\n * import(\"./Observable\").OnSignature} GeolocationOnSignature\n */\n\n/**\n * @classdesc\n * Helper class for providing HTML5 Geolocation capabilities.\n * The [Geolocation API](https://www.w3.org/TR/geolocation-API/)\n * is used to locate a user's position.\n *\n * To get notified of position changes and errors, register listeners for the generic\n * `change` event and the `error` event on your instance of {@link module:ol/Geolocation~Geolocation}.\n *\n * Example:\n *\n * const geolocation = new Geolocation({\n * // take the projection to use from the map's view\n * projection: view.getProjection()\n * });\n * // listen to changes in position\n * geolocation.on('change', function(evt) {\n * console.log(geolocation.getPosition());\n * });\n * // listen to error\n * geolocation.on('error', function(evt) {\n * window.console.log(evt.message);\n * });\n *\n * @fires GeolocationError\n * @api\n */\nclass Geolocation extends BaseObject {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {GeolocationOnSignature}\n */\n this.on;\n\n /***\n * @type {GeolocationOnSignature}\n */\n this.once;\n\n /***\n * @type {GeolocationOnSignature}\n */\n this.un;\n\n options = options || {};\n\n /**\n * The unprojected (EPSG:4326) device position.\n * @private\n * @type {?import(\"./coordinate.js\").Coordinate}\n */\n this.position_ = null;\n\n /**\n * @private\n * @type {import(\"./proj.js\").TransformFunction}\n */\n this.transform_ = identityTransform;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.watchId_ = undefined;\n\n this.addChangeListener(Property.PROJECTION, this.handleProjectionChanged_);\n this.addChangeListener(Property.TRACKING, this.handleTrackingChanged_);\n\n if (options.projection !== undefined) {\n this.setProjection(options.projection);\n }\n if (options.trackingOptions !== undefined) {\n this.setTrackingOptions(options.trackingOptions);\n }\n\n this.setTracking(options.tracking !== undefined ? options.tracking : false);\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.setTracking(false);\n super.disposeInternal();\n }\n\n /**\n * @private\n */\n handleProjectionChanged_() {\n const projection = this.getProjection();\n if (projection) {\n this.transform_ = getTransformFromProjections(\n getProjection('EPSG:4326'),\n projection,\n );\n if (this.position_) {\n this.set(Property.POSITION, this.transform_(this.position_));\n }\n }\n }\n\n /**\n * @private\n */\n handleTrackingChanged_() {\n if ('geolocation' in navigator) {\n const tracking = this.getTracking();\n if (tracking && this.watchId_ === undefined) {\n this.watchId_ = navigator.geolocation.watchPosition(\n this.positionChange_.bind(this),\n this.positionError_.bind(this),\n this.getTrackingOptions(),\n );\n } else if (!tracking && this.watchId_ !== undefined) {\n navigator.geolocation.clearWatch(this.watchId_);\n this.watchId_ = undefined;\n }\n }\n }\n\n /**\n * @private\n * @param {GeolocationPosition} position position event.\n */\n positionChange_(position) {\n const coords = position.coords;\n this.set(Property.ACCURACY, coords.accuracy);\n this.set(\n Property.ALTITUDE,\n coords.altitude === null ? undefined : coords.altitude,\n );\n this.set(\n Property.ALTITUDE_ACCURACY,\n coords.altitudeAccuracy === null ? undefined : coords.altitudeAccuracy,\n );\n this.set(\n Property.HEADING,\n coords.heading === null ? undefined : toRadians(coords.heading),\n );\n if (!this.position_) {\n this.position_ = [coords.longitude, coords.latitude];\n } else {\n this.position_[0] = coords.longitude;\n this.position_[1] = coords.latitude;\n }\n const projectedPosition = this.transform_(this.position_);\n this.set(Property.POSITION, projectedPosition.slice());\n this.set(Property.SPEED, coords.speed === null ? undefined : coords.speed);\n const geometry = circularPolygon(this.position_, coords.accuracy);\n geometry.applyTransform(this.transform_);\n this.set(Property.ACCURACY_GEOMETRY, geometry);\n this.changed();\n }\n\n /**\n * @private\n * @param {GeolocationPositionError} error error object.\n */\n positionError_(error) {\n this.dispatchEvent(new GeolocationError(error));\n }\n\n /**\n * Get the accuracy of the position in meters.\n * @return {number|undefined} The accuracy of the position measurement in\n * meters.\n * @observable\n * @api\n */\n getAccuracy() {\n return /** @type {number|undefined} */ (this.get(Property.ACCURACY));\n }\n\n /**\n * Get a geometry of the position accuracy.\n * @return {?import(\"./geom/Polygon.js\").default} A geometry of the position accuracy.\n * @observable\n * @api\n */\n getAccuracyGeometry() {\n return /** @type {?import(\"./geom/Polygon.js\").default} */ (\n this.get(Property.ACCURACY_GEOMETRY) || null\n );\n }\n\n /**\n * Get the altitude associated with the position.\n * @return {number|undefined} The altitude of the position in meters above mean\n * sea level.\n * @observable\n * @api\n */\n getAltitude() {\n return /** @type {number|undefined} */ (this.get(Property.ALTITUDE));\n }\n\n /**\n * Get the altitude accuracy of the position.\n * @return {number|undefined} The accuracy of the altitude measurement in\n * meters.\n * @observable\n * @api\n */\n getAltitudeAccuracy() {\n return /** @type {number|undefined} */ (\n this.get(Property.ALTITUDE_ACCURACY)\n );\n }\n\n /**\n * Get the heading as radians clockwise from North.\n * Note: depending on the browser, the heading is only defined if the `enableHighAccuracy`\n * is set to `true` in the tracking options.\n * @return {number|undefined} The heading of the device in radians from north.\n * @observable\n * @api\n */\n getHeading() {\n return /** @type {number|undefined} */ (this.get(Property.HEADING));\n }\n\n /**\n * Get the position of the device.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The current position of the device reported\n * in the current projection.\n * @observable\n * @api\n */\n getPosition() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(Property.POSITION)\n );\n }\n\n /**\n * Get the projection associated with the position.\n * @return {import(\"./proj/Projection.js\").default|undefined} The projection the position is\n * reported in.\n * @observable\n * @api\n */\n getProjection() {\n return /** @type {import(\"./proj/Projection.js\").default|undefined} */ (\n this.get(Property.PROJECTION)\n );\n }\n\n /**\n * Get the speed in meters per second.\n * @return {number|undefined} The instantaneous speed of the device in meters\n * per second.\n * @observable\n * @api\n */\n getSpeed() {\n return /** @type {number|undefined} */ (this.get(Property.SPEED));\n }\n\n /**\n * Determine if the device location is being tracked.\n * @return {boolean} The device location is being tracked.\n * @observable\n * @api\n */\n getTracking() {\n return /** @type {boolean} */ (this.get(Property.TRACKING));\n }\n\n /**\n * Get the tracking options.\n * See https://www.w3.org/TR/geolocation-API/#position-options.\n * @return {PositionOptions|undefined} PositionOptions as defined by\n * the [HTML5 Geolocation spec\n * ](https://www.w3.org/TR/geolocation-API/#position_options_interface).\n * @observable\n * @api\n */\n getTrackingOptions() {\n return /** @type {PositionOptions|undefined} */ (\n this.get(Property.TRACKING_OPTIONS)\n );\n }\n\n /**\n * Set the projection to use for transforming the coordinates.\n * @param {import(\"./proj.js\").ProjectionLike} projection The projection the position is\n * reported in.\n * @observable\n * @api\n */\n setProjection(projection) {\n this.set(Property.PROJECTION, getProjection(projection));\n }\n\n /**\n * Enable or disable tracking.\n * @param {boolean} tracking Enable tracking.\n * @observable\n * @api\n */\n setTracking(tracking) {\n this.set(Property.TRACKING, tracking);\n }\n\n /**\n * Set the tracking options.\n * See http://www.w3.org/TR/geolocation-API/#position-options.\n * @param {PositionOptions} options PositionOptions as defined by the\n * [HTML5 Geolocation spec\n * ](http://www.w3.org/TR/geolocation-API/#position_options_interface).\n * @observable\n * @api\n */\n setTrackingOptions(options) {\n this.set(Property.TRACKING_OPTIONS, options);\n }\n}\n\nexport default Geolocation;\n", "/**\n * @module ol/geom/flat/geodesic\n */\nimport {squaredSegmentDistance, toDegrees, toRadians} from '../../math.js';\nimport {get as getProjection, getTransform} from '../../proj.js';\n\n/**\n * @param {function(number): import(\"../../coordinate.js\").Coordinate} interpolate Interpolate function.\n * @param {import(\"../../proj.js\").TransformFunction} transform Transform from longitude/latitude to\n * projected coordinates.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array} Flat coordinates.\n */\nfunction line(interpolate, transform, squaredTolerance) {\n // FIXME reduce garbage generation\n // FIXME optimize stack operations\n\n /** @type {Array} */\n const flatCoordinates = [];\n\n let geoA = interpolate(0);\n let geoB = interpolate(1);\n\n let a = transform(geoA);\n let b = transform(geoB);\n\n /** @type {Array} */\n const geoStack = [geoB, geoA];\n /** @type {Array} */\n const stack = [b, a];\n /** @type {Array} */\n const fractionStack = [1, 0];\n\n /** @type {!Object} */\n const fractions = {};\n\n let maxIterations = 1e5;\n let geoM, m, fracA, fracB, fracM, key;\n\n while (--maxIterations > 0 && fractionStack.length > 0) {\n // Pop the a coordinate off the stack\n fracA = fractionStack.pop();\n geoA = geoStack.pop();\n a = stack.pop();\n // Add the a coordinate if it has not been added yet\n key = fracA.toString();\n if (!(key in fractions)) {\n flatCoordinates.push(a[0], a[1]);\n fractions[key] = true;\n }\n // Pop the b coordinate off the stack\n fracB = fractionStack.pop();\n geoB = geoStack.pop();\n b = stack.pop();\n // Find the m point between the a and b coordinates\n fracM = (fracA + fracB) / 2;\n geoM = interpolate(fracM);\n m = transform(geoM);\n if (\n squaredSegmentDistance(m[0], m[1], a[0], a[1], b[0], b[1]) <\n squaredTolerance\n ) {\n // If the m point is sufficiently close to the straight line, then we\n // discard it. Just use the b coordinate and move on to the next line\n // segment.\n flatCoordinates.push(b[0], b[1]);\n key = fracB.toString();\n fractions[key] = true;\n } else {\n // Otherwise, we need to subdivide the current line segment. Split it\n // into two and push the two line segments onto the stack.\n fractionStack.push(fracB, fracM, fracM, fracA);\n stack.push(b, m, m, a);\n geoStack.push(geoB, geoM, geoM, geoA);\n }\n }\n\n return flatCoordinates;\n}\n\n/**\n * Generate a great-circle arcs between two lat/lon points.\n * @param {number} lon1 Longitude 1 in degrees.\n * @param {number} lat1 Latitude 1 in degrees.\n * @param {number} lon2 Longitude 2 in degrees.\n * @param {number} lat2 Latitude 2 in degrees.\n * @param {import(\"../../proj/Projection.js\").default} projection Projection.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array} Flat coordinates.\n */\nexport function greatCircleArc(\n lon1,\n lat1,\n lon2,\n lat2,\n projection,\n squaredTolerance,\n) {\n const geoProjection = getProjection('EPSG:4326');\n\n const cosLat1 = Math.cos(toRadians(lat1));\n const sinLat1 = Math.sin(toRadians(lat1));\n const cosLat2 = Math.cos(toRadians(lat2));\n const sinLat2 = Math.sin(toRadians(lat2));\n const cosDeltaLon = Math.cos(toRadians(lon2 - lon1));\n const sinDeltaLon = Math.sin(toRadians(lon2 - lon1));\n const d = sinLat1 * sinLat2 + cosLat1 * cosLat2 * cosDeltaLon;\n\n return line(\n /**\n * @param {number} frac Fraction.\n * @return {import(\"../../coordinate.js\").Coordinate} Coordinate.\n */\n function (frac) {\n if (1 <= d) {\n return [lon2, lat2];\n }\n const D = frac * Math.acos(d);\n const cosD = Math.cos(D);\n const sinD = Math.sin(D);\n const y = sinDeltaLon * cosLat2;\n const x = cosLat1 * sinLat2 - sinLat1 * cosLat2 * cosDeltaLon;\n const theta = Math.atan2(y, x);\n const lat = Math.asin(sinLat1 * cosD + cosLat1 * sinD * Math.cos(theta));\n const lon =\n toRadians(lon1) +\n Math.atan2(\n Math.sin(theta) * sinD * cosLat1,\n cosD - sinLat1 * Math.sin(lat),\n );\n return [toDegrees(lon), toDegrees(lat)];\n },\n getTransform(geoProjection, projection),\n squaredTolerance,\n );\n}\n\n/**\n * Generate a meridian (line at constant longitude).\n * @param {number} lon Longitude.\n * @param {number} lat1 Latitude 1.\n * @param {number} lat2 Latitude 2.\n * @param {import(\"../../proj/Projection.js\").default} projection Projection.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array} Flat coordinates.\n */\nexport function meridian(lon, lat1, lat2, projection, squaredTolerance) {\n const epsg4326Projection = getProjection('EPSG:4326');\n return line(\n /**\n * @param {number} frac Fraction.\n * @return {import(\"../../coordinate.js\").Coordinate} Coordinate.\n */\n function (frac) {\n return [lon, lat1 + (lat2 - lat1) * frac];\n },\n getTransform(epsg4326Projection, projection),\n squaredTolerance,\n );\n}\n\n/**\n * Generate a parallel (line at constant latitude).\n * @param {number} lat Latitude.\n * @param {number} lon1 Longitude 1.\n * @param {number} lon2 Longitude 2.\n * @param {import(\"../../proj/Projection.js\").default} projection Projection.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array} Flat coordinates.\n */\nexport function parallel(lat, lon1, lon2, projection, squaredTolerance) {\n const epsg4326Projection = getProjection('EPSG:4326');\n return line(\n /**\n * @param {number} frac Fraction.\n * @return {import(\"../../coordinate.js\").Coordinate} Coordinate.\n */\n function (frac) {\n return [lon1 + (lon2 - lon1) * frac, lat];\n },\n getTransform(epsg4326Projection, projection),\n squaredTolerance,\n );\n}\n", "/**\n * @module ol/render\n */\nimport {DEVICE_PIXEL_RATIO} from './has.js';\nimport {getTransformFromProjections, getUserProjection} from './proj.js';\nimport CanvasImmediateRenderer from './render/canvas/Immediate.js';\nimport {getSquaredTolerance} from './renderer/vector.js';\nimport {\n apply as applyTransform,\n create as createTransform,\n multiply as multiplyTransform,\n scale as scaleTransform,\n} from './transform.js';\n\n/**\n * @typedef {Object} State\n * @property {CanvasRenderingContext2D} context Canvas context that the layer is being rendered to.\n * @property {import(\"./Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"./geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} pixelRatio Pixel ratio used by the layer renderer.\n * @property {number} resolution Resolution that the render batch was created and optimized for.\n * This is not the view's resolution that is being rendered.\n * @property {number} rotation Rotation of the rendered layer in radians.\n */\n\n/**\n * A function to be used when sorting features before rendering.\n * It takes two instances of {@link module:ol/Feature~Feature} or\n * {@link module:ol/render/Feature~RenderFeature} and returns a `{number}`.\n *\n * @typedef {function(import(\"./Feature.js\").FeatureLike, import(\"./Feature.js\").FeatureLike):number} OrderFunction\n */\n\n/**\n * @typedef {Object} ToContextOptions\n * @property {import(\"./size.js\").Size} [size] Desired size of the canvas in css\n * pixels. When provided, both canvas and css size will be set according to the\n * `pixelRatio`. If not provided, the current canvas and css sizes will not be\n * altered.\n * @property {number} [pixelRatio=window.devicePixelRatio] Pixel ratio (canvas\n * pixel to css pixel ratio) for the canvas.\n */\n\n/**\n * Binds a Canvas Immediate API to a canvas context, to allow drawing geometries\n * to the context's canvas.\n *\n * The units for geometry coordinates are css pixels relative to the top left\n * corner of the canvas element.\n * ```js\n * import {toContext} from 'ol/render.js';\n * import Fill from 'ol/style/Fill.js';\n * import Polygon from 'ol/geom/Polygon.js';\n *\n * const canvas = document.createElement('canvas');\n * const render = toContext(\n * canvas.getContext('2d'),\n * {size: [100, 100]}\n * );\n * render.setFillStrokeStyle(new Fill({ color: blue }));\n * render.drawPolygon(\n * new Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]])\n * );\n * ```\n *\n * @param {CanvasRenderingContext2D} context Canvas context.\n * @param {ToContextOptions} [options] Options.\n * @return {CanvasImmediateRenderer} Canvas Immediate.\n * @api\n */\nexport function toContext(context, options) {\n const canvas = context.canvas;\n options = options ? options : {};\n const pixelRatio = options.pixelRatio || DEVICE_PIXEL_RATIO;\n const size = options.size;\n if (size) {\n canvas.width = size[0] * pixelRatio;\n canvas.height = size[1] * pixelRatio;\n canvas.style.width = size[0] + 'px';\n canvas.style.height = size[1] + 'px';\n }\n const extent = [0, 0, canvas.width, canvas.height];\n const transform = scaleTransform(createTransform(), pixelRatio, pixelRatio);\n return new CanvasImmediateRenderer(context, pixelRatio, extent, transform, 0);\n}\n\n/**\n * Gets a vector context for drawing to the event's canvas.\n * @param {import(\"./render/Event.js\").default} event Render event.\n * @return {CanvasImmediateRenderer} Vector context.\n * @api\n */\nexport function getVectorContext(event) {\n if (!(event.context instanceof CanvasRenderingContext2D)) {\n throw new Error('Only works for render events from Canvas 2D layers');\n }\n\n // canvas may be at a different pixel ratio than frameState.pixelRatio\n const a = event.inversePixelTransform[0];\n const b = event.inversePixelTransform[1];\n const canvasPixelRatio = Math.sqrt(a * a + b * b);\n const frameState = event.frameState;\n const transform = multiplyTransform(\n event.inversePixelTransform.slice(),\n frameState.coordinateToPixelTransform,\n );\n const squaredTolerance = getSquaredTolerance(\n frameState.viewState.resolution,\n canvasPixelRatio,\n );\n let userTransform;\n const userProjection = getUserProjection();\n if (userProjection) {\n userTransform = getTransformFromProjections(\n userProjection,\n frameState.viewState.projection,\n );\n }\n\n return new CanvasImmediateRenderer(\n event.context,\n canvasPixelRatio,\n frameState.extent,\n transform,\n frameState.viewState.rotation,\n squaredTolerance,\n userTransform,\n );\n}\n\n/**\n * Gets the pixel of the event's canvas context from the map viewport's CSS pixel.\n * @param {import(\"./render/Event.js\").default} event Render event.\n * @param {import(\"./pixel.js\").Pixel} pixel CSS pixel relative to the top-left\n * corner of the map viewport.\n * @return {import(\"./pixel.js\").Pixel} Pixel on the event's canvas context.\n * @api\n */\nexport function getRenderPixel(event, pixel) {\n return applyTransform(event.inversePixelTransform, pixel.slice(0));\n}\n", "/**\n * @module ol/layer/Graticule\n */\nimport Collection from '../Collection.js';\nimport Feature from '../Feature.js';\nimport {degreesToStringHDMS} from '../coordinate.js';\nimport {\n applyTransform,\n approximatelyEquals,\n containsCoordinate,\n containsExtent,\n equals,\n getCenter,\n getIntersection,\n getWidth,\n intersects,\n isEmpty,\n wrapX as wrapExtentX,\n} from '../extent.js';\nimport LineString from '../geom/LineString.js';\nimport Point from '../geom/Point.js';\nimport {meridian, parallel} from '../geom/flat/geodesic.js';\nimport {clamp} from '../math.js';\nimport {\n equivalent as equivalentProjection,\n get as getProjection,\n getTransform,\n} from '../proj.js';\nimport EventType from '../render/EventType.js';\nimport {getVectorContext} from '../render.js';\nimport VectorSource from '../source/Vector.js';\nimport Fill from '../style/Fill.js';\nimport Stroke from '../style/Stroke.js';\nimport Style from '../style/Style.js';\nimport Text from '../style/Text.js';\nimport VectorLayer from './Vector.js';\n\n/**\n * @type {Stroke}\n * @private\n * @const\n */\nconst DEFAULT_STROKE_STYLE = new Stroke({\n color: 'rgba(0,0,0,0.2)',\n});\n\n/**\n * @type {Array}\n * @private\n */\nconst INTERVALS = [\n 90,\n 45,\n 30,\n 20,\n 10,\n 5,\n 2,\n 1,\n 30 / 60,\n 20 / 60,\n 10 / 60,\n 5 / 60,\n 2 / 60,\n 1 / 60,\n 30 / 3600,\n 20 / 3600,\n 10 / 3600,\n 5 / 3600,\n 2 / 3600,\n 1 / 3600,\n];\n\n/**\n * @typedef {Object} GraticuleLabelDataType\n * @property {Point} geom Geometry.\n * @property {string} text Text.\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {number} [maxLines=100] The maximum number of meridians and\n * parallels from the center of the map. The default value of 100 means that at\n * most 200 meridians and 200 parallels will be displayed. The default value is\n * appropriate for conformal projections like Spherical Mercator. If you\n * increase the value, more lines will be drawn and the drawing performance will\n * decrease.\n * @property {Stroke} [strokeStyle] The\n * stroke style to use for drawing the graticule. If not provided, the following stroke will be used:\n * ```js\n * new Stroke({\n * color: 'rgba(0, 0, 0, 0.2)' // a not fully opaque black\n * });\n * ```\n * @property {number} [targetSize=100] The target size of the graticule cells,\n * in pixels.\n * @property {boolean} [showLabels=false] Render a label with the respective\n * latitude/longitude for each graticule line.\n * @property {function(number):string} [lonLabelFormatter] Label formatter for\n * longitudes. This function is called with the longitude as argument, and\n * should return a formatted string representing the longitude. By default,\n * labels are formatted as degrees, minutes, seconds and hemisphere.\n * @property {function(number):string} [latLabelFormatter] Label formatter for\n * latitudes. This function is called with the latitude as argument, and\n * should return a formatted string representing the latitude. By default,\n * labels are formatted as degrees, minutes, seconds and hemisphere.\n * @property {number} [lonLabelPosition=0] Longitude label position in fractions\n * (0..1) of view extent. 0 means at the bottom of the viewport, 1 means at the\n * top.\n * @property {number} [latLabelPosition=1] Latitude label position in fractions\n * (0..1) of view extent. 0 means at the left of the viewport, 1 means at the\n * right.\n * @property {Text} [lonLabelStyle] Longitude label text\n * style. If not provided, the following style will be used:\n * ```js\n * new Text({\n * font: '12px Calibri,sans-serif',\n * textBaseline: 'bottom',\n * fill: new Fill({\n * color: 'rgba(0,0,0,1)'\n * }),\n * stroke: new Stroke({\n * color: 'rgba(255,255,255,1)',\n * width: 3\n * })\n * });\n * ```\n * Note that the default's `textBaseline` configuration will not work well for\n * `lonLabelPosition` configurations that position labels close to the top of\n * the viewport.\n * @property {Text} [latLabelStyle] Latitude label text style.\n * If not provided, the following style will be used:\n * ```js\n * new Text({\n * font: '12px Calibri,sans-serif',\n * textAlign: 'end',\n * fill: new Fill({\n * color: 'rgba(0,0,0,1)'\n * }),\n * stroke: Stroke({\n * color: 'rgba(255,255,255,1)',\n * width: 3\n * })\n * });\n * ```\n * Note that the default's `textAlign` configuration will not work well for\n * `latLabelPosition` configurations that position labels close to the left of\n * the viewport.\n * @property {Array} [intervals=[90, 45, 30, 20, 10, 5, 2, 1, 30/60, 20/60, 10/60, 5/60, 2/60, 1/60, 30/3600, 20/3600, 10/3600, 5/3600, 2/3600, 1/3600]]\n * Intervals (in degrees) for the graticule. Example to limit graticules to 30 and 10 degrees intervals:\n * ```js\n * [30, 10]\n * ```\n * @property {boolean} [wrapX=true] Whether to repeat the graticule horizontally.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Layer that renders a grid for a coordinate system (currently only EPSG:4326 is supported).\n * Note that the view projection must define both extent and worldExtent.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n * @extends {VectorLayer>}\n * @api\n */\nclass Graticule extends VectorLayer {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const baseOptions = Object.assign(\n {\n updateWhileAnimating: true,\n updateWhileInteracting: true,\n renderBuffer: 0,\n },\n options,\n );\n\n delete baseOptions.maxLines;\n delete baseOptions.strokeStyle;\n delete baseOptions.targetSize;\n delete baseOptions.showLabels;\n delete baseOptions.lonLabelFormatter;\n delete baseOptions.latLabelFormatter;\n delete baseOptions.lonLabelPosition;\n delete baseOptions.latLabelPosition;\n delete baseOptions.lonLabelStyle;\n delete baseOptions.latLabelStyle;\n delete baseOptions.intervals;\n super(baseOptions);\n\n /**\n * @type {import(\"../proj/Projection.js\").default}\n * @private\n */\n this.projection_ = null;\n\n /**\n * @type {number}\n * @private\n */\n this.maxLat_ = Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.maxLon_ = Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.minLat_ = -Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.minLon_ = -Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.maxX_ = Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.maxY_ = Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.minX_ = -Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.minY_ = -Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.targetSize_ =\n options.targetSize !== undefined ? options.targetSize : 100;\n\n /**\n * @type {number}\n * @private\n */\n this.maxLines_ = options.maxLines !== undefined ? options.maxLines : 100;\n\n /**\n * @type {Array}\n * @private\n */\n this.meridians_ = [];\n\n /**\n * @type {Array}\n * @private\n */\n this.parallels_ = [];\n\n /**\n * @type {Stroke}\n * @private\n */\n this.strokeStyle_ =\n options.strokeStyle !== undefined\n ? options.strokeStyle\n : DEFAULT_STROKE_STYLE;\n\n /**\n * @type {import(\"../proj.js\").TransformFunction|undefined}\n * @private\n */\n this.fromLonLatTransform_ = undefined;\n\n /**\n * @type {import(\"../proj.js\").TransformFunction|undefined}\n * @private\n */\n this.toLonLatTransform_ = undefined;\n\n /**\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.projectionCenterLonLat_ = null;\n\n /**\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.bottomLeft_ = null;\n\n /**\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.bottomRight_ = null;\n\n /**\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.topLeft_ = null;\n\n /**\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.topRight_ = null;\n\n /**\n * @type {Array}\n * @private\n */\n this.meridiansLabels_ = null;\n\n /**\n * @type {Array}\n * @private\n */\n this.parallelsLabels_ = null;\n\n if (options.showLabels) {\n /**\n * @type {null|function(number):string}\n * @private\n */\n this.lonLabelFormatter_ =\n options.lonLabelFormatter == undefined\n ? degreesToStringHDMS.bind(this, 'EW')\n : options.lonLabelFormatter;\n\n /**\n * @type {function(number):string}\n * @private\n */\n this.latLabelFormatter_ =\n options.latLabelFormatter == undefined\n ? degreesToStringHDMS.bind(this, 'NS')\n : options.latLabelFormatter;\n\n /**\n * Longitude label position in fractions (0..1) of view extent. 0 means\n * bottom, 1 means top.\n * @type {number}\n * @private\n */\n this.lonLabelPosition_ =\n options.lonLabelPosition == undefined ? 0 : options.lonLabelPosition;\n\n /**\n * Latitude Label position in fractions (0..1) of view extent. 0 means left, 1\n * means right.\n * @type {number}\n * @private\n */\n this.latLabelPosition_ =\n options.latLabelPosition == undefined ? 1 : options.latLabelPosition;\n\n /**\n * @type {Style}\n * @private\n */\n this.lonLabelStyleBase_ = new Style({\n text:\n options.lonLabelStyle !== undefined\n ? options.lonLabelStyle.clone()\n : new Text({\n font: '12px Calibri,sans-serif',\n textBaseline: 'bottom',\n fill: new Fill({\n color: 'rgba(0,0,0,1)',\n }),\n stroke: new Stroke({\n color: 'rgba(255,255,255,1)',\n width: 3,\n }),\n }),\n });\n\n /**\n * @private\n * @param {import(\"../Feature\").default} feature Feature\n * @return {Style} style\n */\n this.lonLabelStyle_ = (feature) => {\n const label = feature.get('graticule_label');\n this.lonLabelStyleBase_.getText().setText(label);\n return this.lonLabelStyleBase_;\n };\n\n /**\n * @type {Style}\n * @private\n */\n this.latLabelStyleBase_ = new Style({\n text:\n options.latLabelStyle !== undefined\n ? options.latLabelStyle.clone()\n : new Text({\n font: '12px Calibri,sans-serif',\n textAlign: 'right',\n fill: new Fill({\n color: 'rgba(0,0,0,1)',\n }),\n stroke: new Stroke({\n color: 'rgba(255,255,255,1)',\n width: 3,\n }),\n }),\n });\n\n /**\n * @private\n * @param {import(\"../Feature\").default} feature Feature\n * @return {Style} style\n */\n this.latLabelStyle_ = (feature) => {\n const label = feature.get('graticule_label');\n this.latLabelStyleBase_.getText().setText(label);\n return this.latLabelStyleBase_;\n };\n\n this.meridiansLabels_ = [];\n this.parallelsLabels_ = [];\n\n this.addEventListener(EventType.POSTRENDER, this.drawLabels_.bind(this));\n }\n\n /**\n * @type {Array}\n * @private\n */\n this.intervals_ =\n options.intervals !== undefined ? options.intervals : INTERVALS;\n\n // use a source with a custom loader for lines & text\n this.setSource(\n new VectorSource({\n loader: this.loaderFunction.bind(this),\n strategy: this.strategyFunction.bind(this),\n features: new Collection(),\n overlaps: false,\n useSpatialIndex: false,\n wrapX: options.wrapX,\n }),\n );\n\n /**\n * feature pool to use when updating graticule\n * @type {Array}\n * @private\n */\n this.featurePool_ = [];\n\n /**\n * @type {Style}\n * @private\n */\n this.lineStyle_ = new Style({\n stroke: this.strokeStyle_,\n });\n\n /**\n * @type {?import(\"../extent.js\").Extent}\n * @private\n */\n this.loadedExtent_ = null;\n\n /**\n * @type {?import(\"../extent.js\").Extent}\n * @private\n */\n this.renderedExtent_ = null;\n\n /**\n * @type {?number}\n * @private\n */\n this.renderedResolution_ = null;\n\n this.setRenderOrder(null);\n }\n\n /**\n * Strategy function for loading features based on the view's extent and\n * resolution.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array} Extents.\n */\n strategyFunction(extent, resolution) {\n // extents may be passed in different worlds, to avoid endless loop we use only one\n let realWorldExtent = extent.slice();\n if (this.projection_ && this.getSource().getWrapX()) {\n wrapExtentX(realWorldExtent, this.projection_);\n }\n if (this.loadedExtent_) {\n if (\n approximatelyEquals(this.loadedExtent_, realWorldExtent, resolution)\n ) {\n // make sure result is exactly equal to previous extent\n realWorldExtent = this.loadedExtent_.slice();\n } else {\n // we should not keep track of loaded extents\n this.getSource().removeLoadedExtent(this.loadedExtent_);\n }\n }\n return [realWorldExtent];\n }\n\n /**\n * Update geometries in the source based on current view\n * @param {import(\"../extent\").Extent} extent Extent\n * @param {number} resolution Resolution\n * @param {import(\"../proj/Projection.js\").default} projection Projection\n */\n loaderFunction(extent, resolution, projection) {\n this.loadedExtent_ = extent;\n const source = this.getSource();\n\n // only consider the intersection between our own extent & the requested one\n const layerExtent = this.getExtent() || [\n -Infinity,\n -Infinity,\n Infinity,\n Infinity,\n ];\n const renderExtent = getIntersection(layerExtent, extent);\n\n if (\n this.renderedExtent_ &&\n equals(this.renderedExtent_, renderExtent) &&\n this.renderedResolution_ === resolution\n ) {\n return;\n }\n this.renderedExtent_ = renderExtent;\n this.renderedResolution_ = resolution;\n\n // bail out if nothing to render\n if (isEmpty(renderExtent)) {\n return;\n }\n\n // update projection info\n const center = getCenter(renderExtent);\n const squaredTolerance = (resolution * resolution) / 4;\n\n const updateProjectionInfo =\n !this.projection_ || !equivalentProjection(this.projection_, projection);\n\n if (updateProjectionInfo) {\n this.updateProjectionInfo_(projection);\n }\n\n this.createGraticule_(renderExtent, center, resolution, squaredTolerance);\n\n // first make sure we have enough features in the pool\n let featureCount = this.meridians_.length + this.parallels_.length;\n if (this.meridiansLabels_) {\n featureCount += this.meridians_.length;\n }\n if (this.parallelsLabels_) {\n featureCount += this.parallels_.length;\n }\n\n let feature;\n while (featureCount > this.featurePool_.length) {\n feature = new Feature();\n this.featurePool_.push(feature);\n }\n\n const featuresColl = source.getFeaturesCollection();\n featuresColl.clear();\n let poolIndex = 0;\n\n // add features for the lines & labels\n let i, l;\n for (i = 0, l = this.meridians_.length; i < l; ++i) {\n feature = this.featurePool_[poolIndex++];\n feature.setGeometry(this.meridians_[i]);\n feature.setStyle(this.lineStyle_);\n featuresColl.push(feature);\n }\n for (i = 0, l = this.parallels_.length; i < l; ++i) {\n feature = this.featurePool_[poolIndex++];\n feature.setGeometry(this.parallels_[i]);\n feature.setStyle(this.lineStyle_);\n featuresColl.push(feature);\n }\n }\n\n /**\n * @param {number} lon Longitude.\n * @param {number} minLat Minimal latitude.\n * @param {number} maxLat Maximal latitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} index Index.\n * @return {number} Index.\n * @private\n */\n addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, index) {\n const lineString = this.getMeridian_(\n lon,\n minLat,\n maxLat,\n squaredTolerance,\n index,\n );\n if (intersects(lineString.getExtent(), extent)) {\n if (this.meridiansLabels_) {\n const text = this.lonLabelFormatter_(lon);\n if (index in this.meridiansLabels_) {\n this.meridiansLabels_[index].text = text;\n } else {\n this.meridiansLabels_[index] = {\n geom: new Point([]),\n text: text,\n };\n }\n }\n this.meridians_[index++] = lineString;\n }\n return index;\n }\n\n /**\n * @param {number} lat Latitude.\n * @param {number} minLon Minimal longitude.\n * @param {number} maxLon Maximal longitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} index Index.\n * @return {number} Index.\n * @private\n */\n addParallel_(lat, minLon, maxLon, squaredTolerance, extent, index) {\n const lineString = this.getParallel_(\n lat,\n minLon,\n maxLon,\n squaredTolerance,\n index,\n );\n if (intersects(lineString.getExtent(), extent)) {\n if (this.parallelsLabels_) {\n const text = this.latLabelFormatter_(lat);\n if (index in this.parallelsLabels_) {\n this.parallelsLabels_[index].text = text;\n } else {\n this.parallelsLabels_[index] = {\n geom: new Point([]),\n text: text,\n };\n }\n }\n this.parallels_[index++] = lineString;\n }\n return index;\n }\n\n /**\n * @param {import(\"../render/Event.js\").default} event Render event.\n * @private\n */\n drawLabels_(event) {\n const rotation = event.frameState.viewState.rotation;\n const resolution = event.frameState.viewState.resolution;\n const size = event.frameState.size;\n const extent = event.frameState.extent;\n const rotationCenter = getCenter(extent);\n let rotationExtent = extent;\n if (rotation) {\n const unrotatedWidth = size[0] * resolution;\n const unrotatedHeight = size[1] * resolution;\n rotationExtent = [\n rotationCenter[0] - unrotatedWidth / 2,\n rotationCenter[1] - unrotatedHeight / 2,\n rotationCenter[0] + unrotatedWidth / 2,\n rotationCenter[1] + unrotatedHeight / 2,\n ];\n }\n\n let startWorld = 0;\n let endWorld = 0;\n let labelsAtStart = this.latLabelPosition_ < 0.5;\n const projectionExtent = this.projection_.getExtent();\n const worldWidth = getWidth(projectionExtent);\n if (\n this.getSource().getWrapX() &&\n this.projection_.canWrapX() &&\n !containsExtent(projectionExtent, extent)\n ) {\n startWorld = Math.floor((extent[0] - projectionExtent[0]) / worldWidth);\n endWorld = Math.ceil((extent[2] - projectionExtent[2]) / worldWidth);\n const inverted = Math.abs(rotation) > Math.PI / 2;\n labelsAtStart = labelsAtStart !== inverted;\n }\n const vectorContext = getVectorContext(event);\n\n for (let world = startWorld; world <= endWorld; ++world) {\n let poolIndex = this.meridians_.length + this.parallels_.length;\n let feature, index, l, textPoint;\n\n if (this.meridiansLabels_) {\n for (index = 0, l = this.meridiansLabels_.length; index < l; ++index) {\n const lineString = this.meridians_[index];\n if (!rotation && world === 0) {\n textPoint = this.getMeridianPoint_(lineString, extent, index);\n } else {\n const clone = lineString.clone();\n clone.translate(world * worldWidth, 0);\n clone.rotate(-rotation, rotationCenter);\n textPoint = this.getMeridianPoint_(clone, rotationExtent, index);\n textPoint.rotate(rotation, rotationCenter);\n }\n feature = this.featurePool_[poolIndex++];\n feature.setGeometry(textPoint);\n feature.set('graticule_label', this.meridiansLabels_[index].text);\n vectorContext.drawFeature(feature, this.lonLabelStyle_(feature));\n }\n }\n if (this.parallelsLabels_) {\n if (\n (world === startWorld && labelsAtStart) ||\n (world === endWorld && !labelsAtStart)\n ) {\n for (index = 0, l = this.parallels_.length; index < l; ++index) {\n const lineString = this.parallels_[index];\n if (!rotation && world === 0) {\n textPoint = this.getParallelPoint_(lineString, extent, index);\n } else {\n const clone = lineString.clone();\n clone.translate(world * worldWidth, 0);\n clone.rotate(-rotation, rotationCenter);\n textPoint = this.getParallelPoint_(clone, rotationExtent, index);\n textPoint.rotate(rotation, rotationCenter);\n }\n feature = this.featurePool_[poolIndex++];\n feature.setGeometry(textPoint);\n feature.set('graticule_label', this.parallelsLabels_[index].text);\n vectorContext.drawFeature(feature, this.latLabelStyle_(feature));\n }\n }\n }\n }\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {import(\"../coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} squaredTolerance Squared tolerance.\n * @private\n */\n createGraticule_(extent, center, resolution, squaredTolerance) {\n const interval = this.getInterval_(resolution);\n if (interval == -1) {\n this.meridians_.length = 0;\n this.parallels_.length = 0;\n if (this.meridiansLabels_) {\n this.meridiansLabels_.length = 0;\n }\n if (this.parallelsLabels_) {\n this.parallelsLabels_.length = 0;\n }\n return;\n }\n\n let wrapX = false;\n const projectionExtent = this.projection_.getExtent();\n const worldWidth = getWidth(projectionExtent);\n if (\n this.getSource().getWrapX() &&\n this.projection_.canWrapX() &&\n !containsExtent(projectionExtent, extent)\n ) {\n if (getWidth(extent) >= worldWidth) {\n extent[0] = projectionExtent[0];\n extent[2] = projectionExtent[2];\n } else {\n wrapX = true;\n }\n }\n\n // Constrain the center to fit into the extent available to the graticule\n\n const validCenterP = [\n clamp(center[0], this.minX_, this.maxX_),\n clamp(center[1], this.minY_, this.maxY_),\n ];\n\n // Transform the center to lon lat\n // Some projections may have a void area at the poles\n // so replace any NaN latitudes with the min or max value closest to a pole\n\n const centerLonLat = this.toLonLatTransform_(validCenterP);\n if (isNaN(centerLonLat[1])) {\n centerLonLat[1] =\n Math.abs(this.maxLat_) >= Math.abs(this.minLat_)\n ? this.maxLat_\n : this.minLat_;\n }\n let centerLon = clamp(centerLonLat[0], this.minLon_, this.maxLon_);\n let centerLat = clamp(centerLonLat[1], this.minLat_, this.maxLat_);\n const maxLines = this.maxLines_;\n let cnt, idx, lat, lon;\n\n // Limit the extent to fit into the extent available to the graticule\n\n let validExtentP = extent;\n if (!wrapX) {\n validExtentP = [\n clamp(extent[0], this.minX_, this.maxX_),\n clamp(extent[1], this.minY_, this.maxY_),\n clamp(extent[2], this.minX_, this.maxX_),\n clamp(extent[3], this.minY_, this.maxY_),\n ];\n }\n\n // Transform the extent to get the lon lat ranges for the edges of the extent\n\n const validExtent = applyTransform(\n validExtentP,\n this.toLonLatTransform_,\n undefined,\n 8,\n );\n\n let maxLat = validExtent[3];\n let maxLon = validExtent[2];\n let minLat = validExtent[1];\n let minLon = validExtent[0];\n\n if (!wrapX) {\n // Check if extremities of the world extent lie inside the extent\n // (for example the pole in a polar projection)\n // and extend the extent as appropriate\n\n if (containsCoordinate(validExtentP, this.bottomLeft_)) {\n minLon = this.minLon_;\n minLat = this.minLat_;\n }\n if (containsCoordinate(validExtentP, this.bottomRight_)) {\n maxLon = this.maxLon_;\n minLat = this.minLat_;\n }\n if (containsCoordinate(validExtentP, this.topLeft_)) {\n minLon = this.minLon_;\n maxLat = this.maxLat_;\n }\n if (containsCoordinate(validExtentP, this.topRight_)) {\n maxLon = this.maxLon_;\n maxLat = this.maxLat_;\n }\n\n // The transformed center may also extend the lon lat ranges used for rendering\n\n maxLat = clamp(maxLat, centerLat, this.maxLat_);\n maxLon = clamp(maxLon, centerLon, this.maxLon_);\n minLat = clamp(minLat, this.minLat_, centerLat);\n minLon = clamp(minLon, this.minLon_, centerLon);\n }\n\n // Create meridians\n\n centerLon = Math.floor(centerLon / interval) * interval;\n lon = clamp(centerLon, this.minLon_, this.maxLon_);\n\n idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, 0);\n\n cnt = 0;\n if (wrapX) {\n while ((lon -= interval) >= minLon && cnt++ < maxLines) {\n idx = this.addMeridian_(\n lon,\n minLat,\n maxLat,\n squaredTolerance,\n extent,\n idx,\n );\n }\n } else {\n while (lon != this.minLon_ && cnt++ < maxLines) {\n lon = Math.max(lon - interval, this.minLon_);\n idx = this.addMeridian_(\n lon,\n minLat,\n maxLat,\n squaredTolerance,\n extent,\n idx,\n );\n }\n }\n\n lon = clamp(centerLon, this.minLon_, this.maxLon_);\n\n cnt = 0;\n if (wrapX) {\n while ((lon += interval) <= maxLon && cnt++ < maxLines) {\n idx = this.addMeridian_(\n lon,\n minLat,\n maxLat,\n squaredTolerance,\n extent,\n idx,\n );\n }\n } else {\n while (lon != this.maxLon_ && cnt++ < maxLines) {\n lon = Math.min(lon + interval, this.maxLon_);\n idx = this.addMeridian_(\n lon,\n minLat,\n maxLat,\n squaredTolerance,\n extent,\n idx,\n );\n }\n }\n\n this.meridians_.length = idx;\n if (this.meridiansLabels_) {\n this.meridiansLabels_.length = idx;\n }\n\n // Create parallels\n\n centerLat = Math.floor(centerLat / interval) * interval;\n lat = clamp(centerLat, this.minLat_, this.maxLat_);\n\n idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, 0);\n\n cnt = 0;\n while (lat != this.minLat_ && cnt++ < maxLines) {\n lat = Math.max(lat - interval, this.minLat_);\n idx = this.addParallel_(\n lat,\n minLon,\n maxLon,\n squaredTolerance,\n extent,\n idx,\n );\n }\n\n lat = clamp(centerLat, this.minLat_, this.maxLat_);\n\n cnt = 0;\n while (lat != this.maxLat_ && cnt++ < maxLines) {\n lat = Math.min(lat + interval, this.maxLat_);\n idx = this.addParallel_(\n lat,\n minLon,\n maxLon,\n squaredTolerance,\n extent,\n idx,\n );\n }\n\n this.parallels_.length = idx;\n if (this.parallelsLabels_) {\n this.parallelsLabels_.length = idx;\n }\n }\n\n /**\n * @param {number} resolution Resolution.\n * @return {number} The interval in degrees.\n * @private\n */\n getInterval_(resolution) {\n const centerLon = this.projectionCenterLonLat_[0];\n const centerLat = this.projectionCenterLonLat_[1];\n let interval = -1;\n const target = Math.pow(this.targetSize_ * resolution, 2);\n /** @type {Array} **/\n const p1 = [];\n /** @type {Array} **/\n const p2 = [];\n for (let i = 0, ii = this.intervals_.length; i < ii; ++i) {\n const delta = clamp(this.intervals_[i] / 2, 0, 90);\n // Don't attempt to transform latitudes beyond the poles!\n const clampedLat = clamp(centerLat, -90 + delta, 90 - delta);\n p1[0] = centerLon - delta;\n p1[1] = clampedLat - delta;\n p2[0] = centerLon + delta;\n p2[1] = clampedLat + delta;\n this.fromLonLatTransform_(p1, p1);\n this.fromLonLatTransform_(p2, p2);\n const dist = Math.pow(p2[0] - p1[0], 2) + Math.pow(p2[1] - p1[1], 2);\n if (dist <= target) {\n break;\n }\n interval = this.intervals_[i];\n }\n return interval;\n }\n\n /**\n * @param {number} lon Longitude.\n * @param {number} minLat Minimal latitude.\n * @param {number} maxLat Maximal latitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LineString} The meridian line string.\n * @param {number} index Index.\n * @private\n */\n getMeridian_(lon, minLat, maxLat, squaredTolerance, index) {\n const flatCoordinates = meridian(\n lon,\n minLat,\n maxLat,\n this.projection_,\n squaredTolerance,\n );\n let lineString = this.meridians_[index];\n if (!lineString) {\n lineString = new LineString(flatCoordinates, 'XY');\n this.meridians_[index] = lineString;\n } else {\n lineString.setFlatCoordinates('XY', flatCoordinates);\n lineString.changed();\n }\n return lineString;\n }\n\n /**\n * @param {LineString} lineString Meridian\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} index Index.\n * @return {Point} Meridian point.\n * @private\n */\n getMeridianPoint_(lineString, extent, index) {\n const flatCoordinates = lineString.getFlatCoordinates();\n let bottom = 1;\n let top = flatCoordinates.length - 1;\n if (flatCoordinates[bottom] > flatCoordinates[top]) {\n bottom = top;\n top = 1;\n }\n const clampedBottom = Math.max(extent[1], flatCoordinates[bottom]);\n const clampedTop = Math.min(extent[3], flatCoordinates[top]);\n const lat = clamp(\n extent[1] + Math.abs(extent[1] - extent[3]) * this.lonLabelPosition_,\n clampedBottom,\n clampedTop,\n );\n const coordinate0 =\n flatCoordinates[bottom - 1] +\n ((flatCoordinates[top - 1] - flatCoordinates[bottom - 1]) *\n (lat - flatCoordinates[bottom])) /\n (flatCoordinates[top] - flatCoordinates[bottom]);\n const coordinate = [coordinate0, lat];\n const point = this.meridiansLabels_[index].geom;\n point.setCoordinates(coordinate);\n return point;\n }\n\n /**\n * Get the list of meridians. Meridians are lines of equal longitude.\n * @return {Array} The meridians.\n * @api\n */\n getMeridians() {\n return this.meridians_;\n }\n\n /**\n * @param {number} lat Latitude.\n * @param {number} minLon Minimal longitude.\n * @param {number} maxLon Maximal longitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LineString} The parallel line string.\n * @param {number} index Index.\n * @private\n */\n getParallel_(lat, minLon, maxLon, squaredTolerance, index) {\n const flatCoordinates = parallel(\n lat,\n minLon,\n maxLon,\n this.projection_,\n squaredTolerance,\n );\n let lineString = this.parallels_[index];\n if (!lineString) {\n lineString = new LineString(flatCoordinates, 'XY');\n } else {\n lineString.setFlatCoordinates('XY', flatCoordinates);\n lineString.changed();\n }\n return lineString;\n }\n\n /**\n * @param {LineString} lineString Parallels.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} index Index.\n * @return {Point} Parallel point.\n * @private\n */\n getParallelPoint_(lineString, extent, index) {\n const flatCoordinates = lineString.getFlatCoordinates();\n let left = 0;\n let right = flatCoordinates.length - 2;\n if (flatCoordinates[left] > flatCoordinates[right]) {\n left = right;\n right = 0;\n }\n const clampedLeft = Math.max(extent[0], flatCoordinates[left]);\n const clampedRight = Math.min(extent[2], flatCoordinates[right]);\n const lon = clamp(\n extent[0] + Math.abs(extent[0] - extent[2]) * this.latLabelPosition_,\n clampedLeft,\n clampedRight,\n );\n const coordinate1 =\n flatCoordinates[left + 1] +\n ((flatCoordinates[right + 1] - flatCoordinates[left + 1]) *\n (lon - flatCoordinates[left])) /\n (flatCoordinates[right] - flatCoordinates[left]);\n const coordinate = [lon, coordinate1];\n const point = this.parallelsLabels_[index].geom;\n point.setCoordinates(coordinate);\n return point;\n }\n\n /**\n * Get the list of parallels. Parallels are lines of equal latitude.\n * @return {Array} The parallels.\n * @api\n */\n getParallels() {\n return this.parallels_;\n }\n\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @private\n */\n updateProjectionInfo_(projection) {\n const epsg4326Projection = getProjection('EPSG:4326');\n\n const worldExtent = projection.getWorldExtent();\n\n this.maxLat_ = worldExtent[3];\n this.maxLon_ = worldExtent[2];\n this.minLat_ = worldExtent[1];\n this.minLon_ = worldExtent[0];\n\n // If the world extent crosses the dateline define a custom transform to\n // return longitudes which wrap the dateline\n\n const toLonLatTransform = getTransform(projection, epsg4326Projection);\n if (this.minLon_ < this.maxLon_) {\n this.toLonLatTransform_ = toLonLatTransform;\n } else {\n const split = this.minLon_ + this.maxLon_ / 2;\n this.maxLon_ += 360;\n this.toLonLatTransform_ = function (coordinates, output, dimension) {\n dimension = dimension || 2;\n const lonLatCoordinates = toLonLatTransform(\n coordinates,\n output,\n dimension,\n );\n for (let i = 0, l = lonLatCoordinates.length; i < l; i += dimension) {\n if (lonLatCoordinates[i] < split) {\n lonLatCoordinates[i] += 360;\n }\n }\n return lonLatCoordinates;\n };\n }\n\n // Transform the extent to get the limits of the view projection extent\n // which should be available to the graticule\n\n this.fromLonLatTransform_ = getTransform(epsg4326Projection, projection);\n const worldExtentP = applyTransform(\n [this.minLon_, this.minLat_, this.maxLon_, this.maxLat_],\n this.fromLonLatTransform_,\n undefined,\n 8,\n );\n\n this.minX_ = worldExtentP[0];\n this.maxX_ = worldExtentP[2];\n this.minY_ = worldExtentP[1];\n this.maxY_ = worldExtentP[3];\n\n // Determine the view projection coordinates of the extremities of the world extent\n // as these may lie inside a view extent (for example the pole in a polar projection)\n\n this.bottomLeft_ = this.fromLonLatTransform_([this.minLon_, this.minLat_]);\n this.bottomRight_ = this.fromLonLatTransform_([this.maxLon_, this.minLat_]);\n this.topLeft_ = this.fromLonLatTransform_([this.minLon_, this.maxLat_]);\n this.topRight_ = this.fromLonLatTransform_([this.maxLon_, this.maxLat_]);\n\n // Transform the projection center to lon lat\n // Some projections may have a void area at the poles\n // so replace any NaN latitudes with the min or max value closest to a pole\n\n this.projectionCenterLonLat_ = this.toLonLatTransform_(\n getCenter(projection.getExtent()),\n );\n if (isNaN(this.projectionCenterLonLat_[1])) {\n this.projectionCenterLonLat_[1] =\n Math.abs(this.maxLat_) >= Math.abs(this.minLat_)\n ? this.maxLat_\n : this.minLat_;\n }\n\n this.projection_ = projection;\n }\n}\n\nexport default Graticule;\n", "/**\n * @module ol/ImageCanvas\n */\nimport ImageWrapper from './Image.js';\nimport ImageState from './ImageState.js';\n\n/**\n * A function that is called to trigger asynchronous canvas drawing. It is\n * called with a \"done\" callback that should be called when drawing is done.\n * If any error occurs during drawing, the \"done\" callback should be called with\n * that error.\n *\n * @typedef {function(function(Error=): void): void} Loader\n */\n\nclass ImageCanvas extends ImageWrapper {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {HTMLCanvasElement} canvas Canvas.\n * @param {Loader} [loader] Optional loader function to\n * support asynchronous canvas drawing.\n */\n constructor(extent, resolution, pixelRatio, canvas, loader) {\n const state = loader !== undefined ? ImageState.IDLE : ImageState.LOADED;\n\n super(extent, resolution, pixelRatio, state);\n\n /**\n * Optional canvas loader function.\n * @type {?Loader}\n * @private\n */\n this.loader_ = loader !== undefined ? loader : null;\n\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n this.canvas_ = canvas;\n\n /**\n * @private\n * @type {?Error}\n */\n this.error_ = null;\n }\n\n /**\n * Get any error associated with asynchronous rendering.\n * @return {?Error} Any error that occurred during rendering.\n */\n getError() {\n return this.error_;\n }\n\n /**\n * Handle async drawing complete.\n * @param {Error} [err] Any error during drawing.\n * @private\n */\n handleLoad_(err) {\n if (err) {\n this.error_ = err;\n this.state = ImageState.ERROR;\n } else {\n this.state = ImageState.LOADED;\n }\n this.changed();\n }\n\n /**\n * Load not yet loaded URI.\n * @override\n */\n load() {\n if (this.state == ImageState.IDLE) {\n this.state = ImageState.LOADING;\n this.changed();\n this.loader_(this.handleLoad_.bind(this));\n }\n }\n\n /**\n * @return {HTMLCanvasElement} Canvas element.\n * @override\n */\n getImage() {\n return this.canvas_;\n }\n}\n\nexport default ImageCanvas;\n", "/**\n * @module ol/Kinetic\n */\n\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nclass Kinetic {\n /**\n * @param {number} decay Rate of decay (must be negative).\n * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n * @param {number} delay Delay to consider to calculate the kinetic\n * initial values (milliseconds).\n */\n constructor(decay, minVelocity, delay) {\n /**\n * @private\n * @type {number}\n */\n this.decay_ = decay;\n\n /**\n * @private\n * @type {number}\n */\n this.minVelocity_ = minVelocity;\n\n /**\n * @private\n * @type {number}\n */\n this.delay_ = delay;\n\n /**\n * @private\n * @type {Array}\n */\n this.points_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.angle_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.initialVelocity_ = 0;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n begin() {\n this.points_.length = 0;\n this.angle_ = 0;\n this.initialVelocity_ = 0;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n */\n update(x, y) {\n this.points_.push(x, y, Date.now());\n }\n\n /**\n * @return {boolean} Whether we should do kinetic animation.\n */\n end() {\n if (this.points_.length < 6) {\n // at least 2 points are required (i.e. there must be at least 6 elements\n // in the array)\n return false;\n }\n const delay = Date.now() - this.delay_;\n const lastIndex = this.points_.length - 3;\n if (this.points_[lastIndex + 2] < delay) {\n // the last tracked point is too old, which means that the user stopped\n // panning before releasing the map\n return false;\n }\n\n // get the first point which still falls into the delay time\n let firstIndex = lastIndex - 3;\n while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n firstIndex -= 3;\n }\n\n const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n // we don't want a duration of 0 (divide by zero)\n // we also make sure the user panned for a duration of at least one frame\n // (1/60s) to compute sane displacement values\n if (duration < 1000 / 60) {\n return false;\n }\n\n const dx = this.points_[lastIndex] - this.points_[firstIndex];\n const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n this.angle_ = Math.atan2(dy, dx);\n this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n return this.initialVelocity_ > this.minVelocity_;\n }\n\n /**\n * @return {number} Total distance travelled (pixels).\n */\n getDistance() {\n return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n }\n\n /**\n * @return {number} Angle of the kinetic panning animation (radians).\n */\n getAngle() {\n return this.angle_;\n }\n}\n\nexport default Kinetic;\n", "/**\n * @module ol/pointer/EventType\n */\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n", "/**\n * @module ol/MapBrowserEventHandler\n */\n\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport EventType from './events/EventType.js';\nimport Target from './events/Target.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {PASSIVE_EVENT_LISTENERS} from './has.js';\nimport PointerEventType from './pointer/EventType.js';\n\nclass MapBrowserEventHandler extends Target {\n /**\n * @param {import(\"./Map.js\").default} map The map with the viewport to listen to events on.\n * @param {number} [moveTolerance] The minimal distance the pointer must travel to trigger a move.\n */\n constructor(map, moveTolerance) {\n super(map);\n\n /**\n * This is the element that we will listen to the real events on.\n * @type {import(\"./Map.js\").default}\n * @private\n */\n this.map_ = map;\n\n /**\n * @type {ReturnType}\n * @private\n */\n this.clickTimeoutId_;\n\n /**\n * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n * @type {boolean}\n */\n this.emulateClicks_ = false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.dragging_ = false;\n\n /**\n * @type {!Array}\n * @private\n */\n this.dragListenerKeys_ = [];\n\n /**\n * @type {number}\n * @private\n */\n this.moveTolerance_ = moveTolerance === undefined ? 1 : moveTolerance;\n\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {PointerEvent|null}\n * @private\n */\n this.down_ = null;\n\n const element = this.map_.getViewport();\n\n /**\n * @type {Array}\n * @private\n */\n this.activePointers_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.trackedTouches_ = {};\n\n /**\n * @private\n */\n this.element_ = element;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.pointerdownListenerKey_ = listen(\n element,\n PointerEventType.POINTERDOWN,\n this.handlePointerDown_,\n this,\n );\n\n /**\n * @type {PointerEvent}\n * @private\n */\n this.originalPointerMoveEvent_;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.relayedListenerKey_ = listen(\n element,\n PointerEventType.POINTERMOVE,\n this.relayMoveEvent_,\n this,\n );\n\n /**\n * @private\n */\n this.boundHandleTouchMove_ = this.handleTouchMove_.bind(this);\n\n this.element_.addEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false,\n );\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n emulateClick_(pointerEvent) {\n let newEvent = new MapBrowserEvent(\n MapBrowserEventType.CLICK,\n this.map_,\n pointerEvent,\n );\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== undefined) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = undefined;\n newEvent = new MapBrowserEvent(\n MapBrowserEventType.DBLCLICK,\n this.map_,\n pointerEvent,\n );\n this.dispatchEvent(newEvent);\n } else {\n // click\n this.clickTimeoutId_ = setTimeout(() => {\n this.clickTimeoutId_ = undefined;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.SINGLECLICK,\n this.map_,\n pointerEvent,\n );\n this.dispatchEvent(newEvent);\n }, 250);\n }\n }\n\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n updateActivePointers_(pointerEvent) {\n const event = pointerEvent;\n const id = event.pointerId;\n\n if (\n event.type == MapBrowserEventType.POINTERUP ||\n event.type == MapBrowserEventType.POINTERCANCEL\n ) {\n delete this.trackedTouches_[id];\n for (const pointerId in this.trackedTouches_) {\n if (this.trackedTouches_[pointerId].target !== event.target) {\n // Some platforms assign a new pointerId when the target changes.\n // If this happens, delete one tracked pointer. If there is more\n // than one tracked pointer for the old target, it will be cleared\n // by subsequent POINTERUP events from other pointers.\n delete this.trackedTouches_[pointerId];\n break;\n }\n }\n } else if (\n event.type == MapBrowserEventType.POINTERDOWN ||\n event.type == MapBrowserEventType.POINTERMOVE\n ) {\n this.trackedTouches_[id] = event;\n }\n this.activePointers_ = Object.values(this.trackedTouches_);\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerUp_(pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERUP,\n this.map_,\n pointerEvent,\n undefined,\n undefined,\n this.activePointers_,\n );\n this.dispatchEvent(newEvent);\n\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.preventDefault().\n if (\n this.emulateClicks_ &&\n !newEvent.defaultPrevented &&\n !this.dragging_ &&\n this.isMouseActionButton_(pointerEvent)\n ) {\n this.emulateClick_(this.down_);\n }\n\n if (this.activePointers_.length === 0) {\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n isMouseActionButton_(pointerEvent) {\n return pointerEvent.button === 0;\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerDown_(pointerEvent) {\n this.emulateClicks_ = this.activePointers_.length === 0;\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDOWN,\n this.map_,\n pointerEvent,\n undefined,\n undefined,\n this.activePointers_,\n );\n this.dispatchEvent(newEvent);\n\n this.down_ = new PointerEvent(pointerEvent.type, pointerEvent);\n Object.defineProperty(this.down_, 'target', {\n writable: false,\n value: pointerEvent.target,\n });\n\n if (this.dragListenerKeys_.length === 0) {\n const doc = this.map_.getOwnerDocument();\n this.dragListenerKeys_.push(\n listen(\n doc,\n MapBrowserEventType.POINTERMOVE,\n this.handlePointerMove_,\n this,\n ),\n listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this),\n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n listen(\n this.element_,\n MapBrowserEventType.POINTERCANCEL,\n this.handlePointerUp_,\n this,\n ),\n );\n if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n this.dragListenerKeys_.push(\n listen(\n this.element_.getRootNode(),\n MapBrowserEventType.POINTERUP,\n this.handlePointerUp_,\n this,\n ),\n );\n }\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerMove_(pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.updateActivePointers_(pointerEvent);\n this.dragging_ = true;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDRAG,\n this.map_,\n pointerEvent,\n this.dragging_,\n undefined,\n this.activePointers_,\n );\n this.dispatchEvent(newEvent);\n }\n }\n\n /**\n * Wrap and relay a pointermove event.\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n relayMoveEvent_(pointerEvent) {\n this.originalPointerMoveEvent_ = pointerEvent;\n const dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(\n new MapBrowserEvent(\n MapBrowserEventType.POINTERMOVE,\n this.map_,\n pointerEvent,\n dragging,\n ),\n );\n }\n\n /**\n * Flexible handling of a `touch-action: none` css equivalent: because calling\n * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n * when an interaction (currently `DragPan` handles the event.\n * @param {TouchEvent} event Event.\n * @private\n */\n handleTouchMove_(event) {\n // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n // may not be initialized yet when we get here on a platform without native pointer events,\n // when elm-pep is used as pointer events polyfill.\n const originalEvent = this.originalPointerMoveEvent_;\n if (\n (!originalEvent || originalEvent.defaultPrevented) &&\n (typeof event.cancelable !== 'boolean' || event.cancelable === true)\n ) {\n event.preventDefault();\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n isMoving_(pointerEvent) {\n return (\n this.dragging_ ||\n Math.abs(pointerEvent.clientX - this.down_.clientX) >\n this.moveTolerance_ ||\n Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_\n );\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n if (this.relayedListenerKey_) {\n unlistenByKey(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n this.element_.removeEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_,\n );\n\n if (this.pointerdownListenerKey_) {\n unlistenByKey(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n\n this.element_ = null;\n super.disposeInternal();\n }\n}\n\nexport default MapBrowserEventHandler;\n", "/**\n * @module ol/MapEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend',\n\n /**\n * Triggered when loading of additional map data (tiles, images, features) starts.\n * @event module:ol/MapEvent~MapEvent#loadstart\n * @api\n */\n LOADSTART: 'loadstart',\n\n /**\n * Triggered when loading of additional map data has completed.\n * @event module:ol/MapEvent~MapEvent#loadend\n * @api\n */\n LOADEND: 'loadend',\n};\n\n/***\n * @typedef {'postrender'|'movestart'|'moveend'|'loadstart'|'loadend'} Types\n */\n", "/**\n * @module ol/MapProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view',\n};\n", "/**\n * @module ol/structs/PriorityQueue\n */\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\n\n/**\n * @type {number}\n */\nexport const DROP = Infinity;\n\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See https://github.com/google/closure-library/blob/master/closure/goog/structs/heap.js\n * and https://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nclass PriorityQueue {\n /**\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n */\n constructor(priorityFunction, keyFunction) {\n /**\n * @type {function(T): number}\n * @private\n */\n this.priorityFunction_ = priorityFunction;\n\n /**\n * @type {function(T): string}\n * @private\n */\n this.keyFunction_ = keyFunction;\n\n /**\n * @type {Array}\n * @private\n */\n this.elements_ = [];\n\n /**\n * @type {Array}\n * @private\n */\n this.priorities_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.queuedElements_ = {};\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.elements_.length = 0;\n this.priorities_.length = 0;\n clear(this.queuedElements_);\n }\n\n /**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\n dequeue() {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[0];\n if (elements.length == 1) {\n elements.length = 0;\n priorities.length = 0;\n } else {\n elements[0] = /** @type {T} */ (elements.pop());\n priorities[0] = /** @type {number} */ (priorities.pop());\n this.siftUp_(0);\n }\n const elementKey = this.keyFunction_(element);\n delete this.queuedElements_[elementKey];\n return element;\n }\n\n /**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n assert(\n !(this.keyFunction_(element) in this.queuedElements_),\n 'Tried to enqueue an `element` that was already added to the queue',\n );\n const priority = this.priorityFunction_(element);\n if (priority != DROP) {\n this.elements_.push(element);\n this.priorities_.push(priority);\n this.queuedElements_[this.keyFunction_(element)] = true;\n this.siftDown_(0, this.elements_.length - 1);\n return true;\n }\n return false;\n }\n\n /**\n * @return {number} Count.\n */\n getCount() {\n return this.elements_.length;\n }\n\n /**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\n getLeftChildIndex_(index) {\n return index * 2 + 1;\n }\n\n /**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\n getRightChildIndex_(index) {\n return index * 2 + 2;\n }\n\n /**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\n getParentIndex_(index) {\n return (index - 1) >> 1;\n }\n\n /**\n * Make this a heap. O(N).\n * @private\n */\n heapify_() {\n let i;\n for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n this.siftUp_(i);\n }\n }\n\n /**\n * @return {boolean} Is empty.\n */\n isEmpty() {\n return this.elements_.length === 0;\n }\n\n /**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\n isKeyQueued(key) {\n return key in this.queuedElements_;\n }\n\n /**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\n isQueued(element) {\n return this.isKeyQueued(this.keyFunction_(element));\n }\n\n /**\n * @param {number} index The index of the node to move down.\n * @private\n */\n siftUp_(index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const count = elements.length;\n const element = elements[index];\n const priority = priorities[index];\n const startIndex = index;\n\n while (index < count >> 1) {\n const lIndex = this.getLeftChildIndex_(index);\n const rIndex = this.getRightChildIndex_(index);\n\n const smallerChildIndex =\n rIndex < count && priorities[rIndex] < priorities[lIndex]\n ? rIndex\n : lIndex;\n\n elements[index] = elements[smallerChildIndex];\n priorities[index] = priorities[smallerChildIndex];\n index = smallerChildIndex;\n }\n\n elements[index] = element;\n priorities[index] = priority;\n this.siftDown_(startIndex, index);\n }\n\n /**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\n siftDown_(startIndex, index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[index];\n const priority = priorities[index];\n\n while (index > startIndex) {\n const parentIndex = this.getParentIndex_(index);\n if (priorities[parentIndex] > priority) {\n elements[index] = elements[parentIndex];\n priorities[index] = priorities[parentIndex];\n index = parentIndex;\n } else {\n break;\n }\n }\n elements[index] = element;\n priorities[index] = priority;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n reprioritize() {\n const priorityFunction = this.priorityFunction_;\n const elements = this.elements_;\n const priorities = this.priorities_;\n let index = 0;\n const n = elements.length;\n let element, i, priority;\n for (i = 0; i < n; ++i) {\n element = elements[i];\n priority = priorityFunction(element);\n if (priority == DROP) {\n delete this.queuedElements_[this.keyFunction_(element)];\n } else {\n priorities[index] = priority;\n elements[index++] = element;\n }\n }\n elements.length = index;\n priorities.length = index;\n this.heapify_();\n }\n}\n\nexport default PriorityQueue;\n", "/**\n * @module ol/TileQueue\n */\nimport TileState from './TileState.js';\nimport EventType from './events/EventType.js';\nimport PriorityQueue, {DROP} from './structs/PriorityQueue.js';\n\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import('./tilecoord.js').TileCoord, number): number} PriorityFunction\n */\n\n/**\n * @typedef {[import('./Tile.js').default, string, import('./tilecoord.js').TileCoord, number]} TileQueueElement\n */\n\n/**\n * @extends PriorityQueue}\n */\nclass TileQueue extends PriorityQueue {\n /**\n * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n constructor(tilePriorityFunction, tileChangeCallback) {\n super(\n (element) => tilePriorityFunction.apply(null, element),\n (element) => element[0].getKey(),\n );\n\n /** @private */\n this.boundHandleTileChange_ = this.handleTileChange.bind(this);\n\n /**\n * @private\n * @type {function(): ?}\n */\n this.tileChangeCallback_ = tileChangeCallback;\n\n /**\n * @private\n * @type {number}\n */\n this.tilesLoading_ = 0;\n\n /**\n * @private\n * @type {!Object}\n */\n this.tilesLoadingKeys_ = {};\n }\n\n /**\n * @param {TileQueueElement} element Element.\n * @return {boolean} The element was added to the queue.\n * @override\n */\n enqueue(element) {\n const added = super.enqueue(element);\n if (added) {\n const tile = element[0];\n tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n return added;\n }\n\n /**\n * @return {number} Number of tiles loading.\n */\n getTilesLoading() {\n return this.tilesLoading_;\n }\n\n /**\n * @param {import(\"./events/Event.js\").default} event Event.\n * @protected\n */\n handleTileChange(event) {\n const tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n const state = tile.getState();\n if (\n state === TileState.LOADED ||\n state === TileState.ERROR ||\n state === TileState.EMPTY\n ) {\n if (state !== TileState.ERROR) {\n tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n const tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n }\n\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n loadMoreTiles(maxTotalLoading, maxNewLoads) {\n let newLoads = 0;\n while (\n this.tilesLoading_ < maxTotalLoading &&\n newLoads < maxNewLoads &&\n this.getCount() > 0\n ) {\n const tile = this.dequeue()[0];\n const tileKey = tile.getKey();\n const state = tile.getState();\n if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n }\n}\n\nexport default TileQueue;\n\n/**\n * @param {import('./Map.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(\n frameState,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution,\n) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels between\n // the center of the tile and the center of the viewport. The factor of 65536\n // means that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n const center = frameState.viewState.center;\n const deltaX = tileCenter[0] - center[0];\n const deltaY = tileCenter[1] - center[1];\n return (\n 65536 * Math.log(tileResolution) +\n Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution\n );\n}\n", "/**\n * @module ol/control/Control\n */\nimport MapEventType from '../MapEventType.js';\nimport BaseObject from '../Object.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {VOID} from '../functions.js';\n\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * const myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nclass Control extends BaseObject {\n /**\n * @param {Options} options Control options.\n */\n constructor(options) {\n super();\n\n const element = options.element;\n if (element && !options.target && !element.style.pointerEvents) {\n element.style.pointerEvents = 'auto';\n }\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = element ? element : null;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.target_ = null;\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @protected\n * @type {!Array}\n */\n this.listenerKeys = [];\n\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.target) {\n this.setTarget(options.target);\n }\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.element?.remove();\n super.disposeInternal();\n }\n\n /**\n * Get the map associated with this control.\n * @return {import(\"../Map.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Pass `null` to just remove the control from the current map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.map_) {\n this.element?.remove();\n }\n for (let i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (map) {\n const target = this.target_ ?? map.getOverlayContainerStopEvent();\n if (this.element) {\n target.appendChild(this.element);\n }\n if (this.render !== VOID) {\n this.listenerKeys.push(\n listen(map, MapEventType.POSTRENDER, this.render, this),\n );\n }\n map.render();\n }\n }\n\n /**\n * Renders the control.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @api\n */\n render(mapEvent) {}\n\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n setTarget(target) {\n this.target_ =\n typeof target === 'string' ? document.getElementById(target) : target;\n }\n}\n\nexport default Control;\n", "/**\n * @module ol/control/Attribution\n */\nimport {equals} from '../array.js';\nimport {CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {removeChildren, replaceNode} from '../dom.js';\nimport EventType from '../events/EventType.js';\nimport {toPromise} from '../functions.js';\nimport Control from './Control.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string|HTMLElement} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='›'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {string|Array|undefined} [attributions] Optional attribution(s) that will always be\n * displayed regardless of the layers rendered\n */\n\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nclass Attribution extends Control {\n /**\n * @param {Options} [options] Attribution options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.ulElement_ = document.createElement('ul');\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsed_ =\n options.collapsed !== undefined ? options.collapsed : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.userCollapsed_ = this.collapsed_;\n\n /**\n * @private\n * @type {boolean}\n */\n this.overrideCollapsible_ = options.collapsible !== undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsible_ =\n options.collapsible !== undefined ? options.collapsible : true;\n\n if (!this.collapsible_) {\n this.collapsed_ = false;\n }\n\n /**\n * @private\n * @type {string | Array | undefined}\n */\n this.attributions_ = options.attributions;\n\n const className =\n options.className !== undefined ? options.className : 'ol-attribution';\n\n const tipLabel =\n options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n\n const expandClassName =\n options.expandClassName !== undefined\n ? options.expandClassName\n : className + '-expand';\n\n const collapseLabel =\n options.collapseLabel !== undefined ? options.collapseLabel : '\\u203A';\n\n const collapseClassName =\n options.collapseClassName !== undefined\n ? options.collapseClassName\n : className + '-collapse';\n\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.collapseLabel_ = document.createElement('span');\n this.collapseLabel_.textContent = collapseLabel;\n this.collapseLabel_.className = collapseClassName;\n } else {\n this.collapseLabel_ = collapseLabel;\n }\n\n const label = options.label !== undefined ? options.label : 'i';\n\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.label_ = document.createElement('span');\n this.label_.textContent = label;\n this.label_.className = expandClassName;\n } else {\n this.label_ = label;\n }\n\n const activeLabel =\n this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.toggleButton_ = document.createElement('button');\n this.toggleButton_.setAttribute('type', 'button');\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n this.toggleButton_.title = tipLabel;\n this.toggleButton_.appendChild(activeLabel);\n\n this.toggleButton_.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false,\n );\n\n const cssClasses =\n className +\n ' ' +\n CLASS_UNSELECTABLE +\n ' ' +\n CLASS_CONTROL +\n (this.collapsed_ && this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (this.collapsible_ ? '' : ' ol-uncollapsible');\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(this.toggleButton_);\n element.appendChild(this.ulElement_);\n\n /**\n * A list of currently rendered resolutions.\n * @type {Array}\n * @private\n */\n this.renderedAttributions_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * Collect a list of visible attributions and set the collapsible state.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @return {Array} Attributions.\n * @private\n */\n collectSourceAttributions_(frameState) {\n const layers = this.getMap().getAllLayers();\n const visibleAttributions = new Set(\n layers.flatMap((layer) => layer.getAttributions(frameState)),\n );\n if (this.attributions_ !== undefined) {\n Array.isArray(this.attributions_)\n ? this.attributions_.forEach((item) => visibleAttributions.add(item))\n : visibleAttributions.add(this.attributions_);\n }\n\n if (!this.overrideCollapsible_) {\n const collapsible = !layers.some(\n (layer) => layer.getSource()?.getAttributionsCollapsible() === false,\n );\n this.setCollapsible(collapsible);\n }\n return Array.from(visibleAttributions);\n }\n\n /**\n * @private\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n */\n async updateElement_(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n const attributions = await Promise.all(\n this.collectSourceAttributions_(frameState).map((attribution) =>\n toPromise(() => attribution),\n ),\n );\n\n const visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n\n if (equals(attributions, this.renderedAttributions_)) {\n return;\n }\n\n removeChildren(this.ulElement_);\n\n // append the attributions\n for (let i = 0, ii = attributions.length; i < ii; ++i) {\n const element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n\n this.renderedAttributions_ = attributions;\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n this.handleToggle_();\n this.userCollapsed_ = this.collapsed_;\n }\n\n /**\n * @private\n */\n handleToggle_() {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n } else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n }\n\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n getCollapsible() {\n return this.collapsible_;\n }\n\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n setCollapsible(collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (this.userCollapsed_) {\n this.handleToggle_();\n }\n }\n\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n setCollapsed(collapsed) {\n this.userCollapsed_ = collapsed;\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n }\n\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n getCollapsed() {\n return this.collapsed_;\n }\n\n /**\n * Update the attribution element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n this.updateElement_(mapEvent.frameState);\n }\n}\n\nexport default Attribution;\n", "/**\n * @module ol/control/Rotate\n */\nimport {CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\nimport EventType from '../events/EventType.js';\nimport Control from './Control.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nclass Rotate extends Control {\n /**\n * @param {Options} [options] Rotate options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-rotate';\n\n const label = options.label !== undefined ? options.label : '\\u21E7';\n\n const compassClassName =\n options.compassClassName !== undefined\n ? options.compassClassName\n : 'ol-compass';\n\n /**\n * @type {HTMLElement}\n * @private\n */\n this.label_ = null;\n\n if (typeof label === 'string') {\n this.label_ = document.createElement('span');\n this.label_.className = compassClassName;\n this.label_.textContent = label;\n } else {\n this.label_ = label;\n this.label_.classList.add(compassClassName);\n }\n\n const tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n\n const button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(this.label_);\n\n button.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false,\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(button);\n\n /**\n * @private\n */\n this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @type {boolean}\n * @private\n */\n this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.rotation_ = undefined;\n\n if (this.autoHide_) {\n this.element.classList.add(CLASS_HIDDEN);\n }\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n } else {\n this.resetNorth_();\n }\n }\n\n /**\n * @private\n */\n resetNorth_() {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const rotation = view.getRotation();\n if (rotation !== undefined) {\n if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setRotation(0);\n }\n }\n }\n\n /**\n * Update the rotate control element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n const frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n const rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n const transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n const contains = this.element.classList.contains(CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(CLASS_HIDDEN);\n } else if (contains && rotation !== 0) {\n this.element.classList.remove(CLASS_HIDDEN);\n }\n }\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n }\n}\n\nexport default Rotate;\n", "/**\n * @module ol/control/Zoom\n */\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\nimport EventType from '../events/EventType.js';\nimport Control from './Control.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='–'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nclass Zoom extends Control {\n /**\n * @param {Options} [options] Zoom options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-zoom';\n\n const delta = options.delta !== undefined ? options.delta : 1;\n\n const zoomInClassName =\n options.zoomInClassName !== undefined\n ? options.zoomInClassName\n : className + '-in';\n\n const zoomOutClassName =\n options.zoomOutClassName !== undefined\n ? options.zoomOutClassName\n : className + '-out';\n\n const zoomInLabel =\n options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n const zoomOutLabel =\n options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2013';\n\n const zoomInTipLabel =\n options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n const zoomOutTipLabel =\n options.zoomOutTipLabel !== undefined\n ? options.zoomOutTipLabel\n : 'Zoom out';\n\n const inElement = document.createElement('button');\n inElement.className = zoomInClassName;\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(\n typeof zoomInLabel === 'string'\n ? document.createTextNode(zoomInLabel)\n : zoomInLabel,\n );\n\n inElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, delta),\n false,\n );\n\n const outElement = document.createElement('button');\n outElement.className = zoomOutClassName;\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(\n typeof zoomOutLabel === 'string'\n ? document.createTextNode(zoomOutLabel)\n : zoomOutLabel,\n );\n\n outElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, -delta),\n false,\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n zoomByDelta_(delta) {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const currentZoom = view.getZoom();\n if (currentZoom !== undefined) {\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n zoom: newZoom,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setZoom(newZoom);\n }\n }\n }\n}\n\nexport default Zoom;\n", "/**\n * @module ol/control/defaults\n */\nimport Collection from '../Collection.js';\nimport Attribution from './Attribution.js';\nimport Rotate from './Rotate.js';\nimport Zoom from './Zoom.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n */\n\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * {@link module:ol/control/Zoom~Zoom}\n * {@link module:ol/control/Rotate~Rotate}\n * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions} [options] Options for the default controls.\n * @return {Collection} A collection of controls\n * to be used with the {@link module:ol/Map~Map} constructor's `controls` option.\n * @api\n */\nexport function defaults(options) {\n options = options ? options : {};\n\n /** @type {Collection} */\n const controls = new Collection();\n\n const zoomControl = options.zoom !== undefined ? options.zoom : true;\n if (zoomControl) {\n controls.push(new Zoom(options.zoomOptions));\n }\n\n const rotateControl = options.rotate !== undefined ? options.rotate : true;\n if (rotateControl) {\n controls.push(new Rotate(options.rotateOptions));\n }\n\n const attributionControl =\n options.attribution !== undefined ? options.attribution : true;\n if (attributionControl) {\n controls.push(new Attribution(options.attributionOptions));\n }\n\n return controls;\n}\n", "/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nclass DoubleClickZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n const browserEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const map = mapBrowserEvent.map;\n const anchor = mapBrowserEvent.coordinate;\n const delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, anchor, this.duration_);\n browserEvent.preventDefault();\n stopEvent = true;\n }\n return !stopEvent;\n }\n}\n\nexport default DoubleClickZoom;\n", "/**\n * @module ol/interaction/DragPan\n */\nimport {\n rotate as rotateCoordinate,\n scale as scaleCoordinate,\n} from '../coordinate.js';\nimport {easeOut} from '../easing.js';\nimport {\n all,\n focusWithTabindex,\n noModifierKeys,\n primaryAction,\n} from '../events/condition.js';\nimport {FALSE} from '../functions.js';\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.noModifierKeys} and {@link module:ol/events/condition.primaryAction}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {import(\"../Kinetic.js\").default} [kinetic] Kinetic inertia to apply to the pan.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map by dragging the map.\n * @api\n */\nclass DragPan extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super({\n stopDown: FALSE,\n });\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {import(\"../Kinetic.js\").default|undefined}\n */\n this.kinetic_ = options.kinetic;\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.lastCentroid = null;\n\n /**\n * @type {number}\n * @private\n */\n this.lastPointersCount_;\n\n /**\n * @type {boolean}\n * @private\n */\n this.panning_ = false;\n\n const condition = options.condition\n ? options.condition\n : all(noModifierKeys, primaryAction);\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n\n /**\n * @private\n * @type {boolean}\n */\n this.noKinetic_ = false;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n const map = mapBrowserEvent.map;\n if (!this.panning_) {\n this.panning_ = true;\n map.getView().beginInteraction();\n }\n const targetPointers = this.targetPointers;\n const centroid = map.getEventPixel(centroidFromPointers(targetPointers));\n if (targetPointers.length == this.lastPointersCount_) {\n if (this.kinetic_) {\n this.kinetic_.update(centroid[0], centroid[1]);\n }\n if (this.lastCentroid) {\n const delta = [\n this.lastCentroid[0] - centroid[0],\n centroid[1] - this.lastCentroid[1],\n ];\n const map = mapBrowserEvent.map;\n const view = map.getView();\n scaleCoordinate(delta, view.getResolution());\n rotateCoordinate(delta, view.getRotation());\n view.adjustCenterInternal(delta);\n }\n } else if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger down, tiny drag, second finger down\n this.kinetic_.begin();\n }\n this.lastCentroid = centroid;\n this.lastPointersCount_ = targetPointers.length;\n mapBrowserEvent.originalEvent.preventDefault();\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (this.targetPointers.length === 0) {\n if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {\n const distance = this.kinetic_.getDistance();\n const angle = this.kinetic_.getAngle();\n const center = view.getCenterInternal();\n const centerpx = map.getPixelFromCoordinateInternal(center);\n const dest = map.getCoordinateFromPixelInternal([\n centerpx[0] - distance * Math.cos(angle),\n centerpx[1] - distance * Math.sin(angle),\n ]);\n view.animateInternal({\n center: view.getConstrainedCenter(dest),\n duration: 500,\n easing: easeOut,\n });\n }\n if (this.panning_) {\n this.panning_ = false;\n view.endInteraction();\n }\n return false;\n }\n if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger up, tiny drag, second finger up\n this.kinetic_.begin();\n }\n this.lastCentroid = null;\n return true;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n this.lastCentroid = null;\n // stop any current animation\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n if (this.kinetic_) {\n this.kinetic_.begin();\n }\n // No kinetic as soon as more than one pointer on the screen is\n // detected. This is to prevent nasty pans after pinch.\n this.noKinetic_ = this.targetPointers.length > 1;\n return true;\n }\n return false;\n }\n}\n\nexport default DragPan;\n", "/**\n * @module ol/interaction/DragRotate\n */\nimport {\n altShiftKeysOnly,\n mouseActionButton,\n mouseOnly,\n} from '../events/condition.js';\nimport {FALSE} from '../functions.js';\nimport {disable} from '../rotationconstraint.js';\nimport PointerInteraction from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a\n * {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.altShiftKeysOnly}.\n * @property {number} [duration=250] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when the alt and shift keys are held down.\n *\n * This interaction is only supported for mouse devices.\n * @api\n */\nclass DragRotate extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n stopDown: FALSE,\n });\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : altShiftKeysOnly;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastAngle_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return;\n }\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n const size = map.getSize();\n const offset = mapBrowserEvent.pixel;\n const theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);\n if (this.lastAngle_ !== undefined) {\n const delta = theta - this.lastAngle_;\n view.adjustRotationInternal(-delta);\n }\n this.lastAngle_ = theta;\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return true;\n }\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return false;\n }\n\n if (\n mouseActionButton(mapBrowserEvent) &&\n this.condition_(mapBrowserEvent)\n ) {\n const map = mapBrowserEvent.map;\n map.getView().beginInteraction();\n this.lastAngle_ = undefined;\n return true;\n }\n return false;\n }\n}\n\nexport default DragRotate;\n", "/**\n * @module ol/render/Box\n */\n\nimport Disposable from '../Disposable.js';\nimport Polygon from '../geom/Polygon.js';\n\nclass RenderBox extends Disposable {\n /**\n * @param {string} className CSS class name.\n */\n constructor(className) {\n super();\n\n /**\n * @type {import(\"../geom/Polygon.js\").default}\n * @private\n */\n this.geometry_ = null;\n\n /**\n * @type {HTMLDivElement}\n * @private\n */\n this.element_ = document.createElement('div');\n this.element_.style.position = 'absolute';\n this.element_.style.pointerEvents = 'auto';\n this.element_.className = 'ol-box ' + className;\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.startPixel_ = null;\n\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.endPixel_ = null;\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.setMap(null);\n }\n\n /**\n * @private\n */\n render_() {\n const startPixel = this.startPixel_;\n const endPixel = this.endPixel_;\n const px = 'px';\n const style = this.element_.style;\n style.left = Math.min(startPixel[0], endPixel[0]) + px;\n style.top = Math.min(startPixel[1], endPixel[1]) + px;\n style.width = Math.abs(endPixel[0] - startPixel[0]) + px;\n style.height = Math.abs(endPixel[1] - startPixel[1]) + px;\n }\n\n /**\n * @param {import(\"../Map.js\").default|null} map Map.\n */\n setMap(map) {\n if (this.map_) {\n this.map_.getOverlayContainer().removeChild(this.element_);\n const style = this.element_.style;\n style.left = 'inherit';\n style.top = 'inherit';\n style.width = 'inherit';\n style.height = 'inherit';\n }\n this.map_ = map;\n if (this.map_) {\n this.map_.getOverlayContainer().appendChild(this.element_);\n }\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} startPixel Start pixel.\n * @param {import(\"../pixel.js\").Pixel} endPixel End pixel.\n */\n setPixels(startPixel, endPixel) {\n this.startPixel_ = startPixel;\n this.endPixel_ = endPixel;\n this.createOrUpdateGeometry();\n this.render_();\n }\n\n /**\n * Creates or updates the cached geometry.\n */\n createOrUpdateGeometry() {\n if (!this.map_) {\n return;\n }\n\n const startPixel = this.startPixel_;\n const endPixel = this.endPixel_;\n const pixels = [\n startPixel,\n [startPixel[0], endPixel[1]],\n endPixel,\n [endPixel[0], startPixel[1]],\n ];\n const coordinates = pixels.map(\n this.map_.getCoordinateFromPixelInternal,\n this.map_,\n );\n // close the polygon\n coordinates[4] = coordinates[0].slice();\n if (!this.geometry_) {\n this.geometry_ = new Polygon([coordinates]);\n } else {\n this.geometry_.setCoordinates([coordinates]);\n }\n }\n\n /**\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n */\n getGeometry() {\n return this.geometry_;\n }\n}\n\nexport default RenderBox;\n", "/**\n * @module ol/interaction/DragBox\n */\n// FIXME draw drag box\nimport Event from '../events/Event.js';\nimport {mouseActionButton} from '../events/condition.js';\nimport RenderBox from '../render/Box.js';\nimport PointerInteraction from './Pointer.js';\n\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s and returns a `{boolean}`. If the condition is met,\n * true should be returned.\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default, import(\"../pixel.js\").Pixel, import(\"../pixel.js\").Pixel):boolean} EndCondition\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragbox'] CSS class name for styling the box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link ol/events/condition~mouseActionButton}.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the default\n * `boxEndCondition` function.\n * @property {EndCondition} [boxEndCondition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s to indicate whether a `boxend` event should be fired.\n * Default is `true` if the area of the box is bigger than the `minArea` option.\n * @property {function(this:DragBox, import(\"../MapBrowserEvent.js\").default):void} [onBoxEnd] Code to execute just\n * before `boxend` is fired.\n */\n\n/**\n * @enum {string}\n */\nconst DragBoxEventType = {\n /**\n * Triggered upon drag box start.\n * @event DragBoxEvent#boxstart\n * @api\n */\n BOXSTART: 'boxstart',\n\n /**\n * Triggered on drag when box is active.\n * @event DragBoxEvent#boxdrag\n * @api\n */\n BOXDRAG: 'boxdrag',\n\n /**\n * Triggered upon drag box end.\n * @event DragBoxEvent#boxend\n * @api\n */\n BOXEND: 'boxend',\n\n /**\n * Triggered upon drag box canceled.\n * @event DragBoxEvent#boxcancel\n * @api\n */\n BOXCANCEL: 'boxcancel',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/DragBox~DragBox} instances are instances of\n * this type.\n */\nexport class DragBoxEvent extends Event {\n /**\n * @param {string} type The event type.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The event coordinate.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Originating event.\n */\n constructor(type, coordinate, mapBrowserEvent) {\n super(type);\n\n /**\n * The coordinate of the drag event.\n * @const\n * @type {import(\"../coordinate.js\").Coordinate}\n * @api\n */\n this.coordinate = coordinate;\n\n /**\n * @const\n * @type {import(\"../MapBrowserEvent.js\").default}\n * @api\n */\n this.mapBrowserEvent = mapBrowserEvent;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature<'boxcancel'|'boxdrag'|'boxend'|'boxstart', DragBoxEvent, Return> &\n * import(\"../Observable\").CombinedOnSignature} DragBoxOnSignature\n */\n\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when the shift or other key is held down. This is used, for example,\n * for zooming to a specific area of the map\n * (see {@link module:ol/interaction/DragZoom~DragZoom} and\n * {@link module:ol/interaction/DragRotateAndZoom~DragRotateAndZoom}).\n *\n * @fires DragBoxEvent\n * @api\n */\nclass DragBox extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.on;\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.once;\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.un;\n\n options = options ?? {};\n\n /**\n * @type {import(\"../render/Box.js\").default}\n * @private\n */\n this.box_ = new RenderBox(options.className || 'ol-dragbox');\n\n /**\n * @type {number}\n * @private\n */\n this.minArea_ = options.minArea ?? 64;\n\n if (options.onBoxEnd) {\n this.onBoxEnd = options.onBoxEnd;\n }\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n * @private\n */\n this.startPixel_ = null;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ?? mouseActionButton;\n\n /**\n * @private\n * @type {EndCondition}\n */\n this.boxEndCondition_ =\n options.boxEndCondition ?? this.defaultBoxEndCondition;\n }\n\n /**\n * The default condition for determining whether the boxend event\n * should fire.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent The originating MapBrowserEvent\n * leading to the box end.\n * @param {import(\"../pixel.js\").Pixel} startPixel The starting pixel of the box.\n * @param {import(\"../pixel.js\").Pixel} endPixel The end pixel of the box.\n * @return {boolean} Whether or not the boxend condition should be fired.\n */\n defaultBoxEndCondition(mapBrowserEvent, startPixel, endPixel) {\n const width = endPixel[0] - startPixel[0];\n const height = endPixel[1] - startPixel[1];\n return width * width + height * height >= this.minArea_;\n }\n\n /**\n * Returns geometry of last drawn box.\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n * @api\n */\n getGeometry() {\n return this.box_.getGeometry();\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n if (!this.startPixel_) {\n return;\n }\n\n this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);\n\n this.dispatchEvent(\n new DragBoxEvent(\n DragBoxEventType.BOXDRAG,\n mapBrowserEvent.coordinate,\n mapBrowserEvent,\n ),\n );\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (!this.startPixel_) {\n return false;\n }\n\n const completeBox = this.boxEndCondition_(\n mapBrowserEvent,\n this.startPixel_,\n mapBrowserEvent.pixel,\n );\n if (completeBox) {\n this.onBoxEnd(mapBrowserEvent);\n }\n this.dispatchEvent(\n new DragBoxEvent(\n completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL,\n mapBrowserEvent.coordinate,\n mapBrowserEvent,\n ),\n );\n\n this.box_.setMap(null);\n this.startPixel_ = null;\n\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.condition_(mapBrowserEvent)) {\n this.startPixel_ = mapBrowserEvent.pixel;\n this.box_.setMap(mapBrowserEvent.map);\n this.box_.setPixels(this.startPixel_, this.startPixel_);\n this.dispatchEvent(\n new DragBoxEvent(\n DragBoxEventType.BOXSTART,\n mapBrowserEvent.coordinate,\n mapBrowserEvent,\n ),\n );\n return true;\n }\n return false;\n }\n\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n onBoxEnd(event) {}\n\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n * @override\n */\n setActive(active) {\n if (!active) {\n this.box_.setMap(null);\n if (this.startPixel_) {\n this.dispatchEvent(\n new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null),\n );\n this.startPixel_ = null;\n }\n }\n\n super.setActive(active);\n }\n\n /**\n * @param {import(\"../Map.js\").default|null} map Map.\n * @override\n */\n setMap(map) {\n const oldMap = this.getMap();\n\n if (oldMap) {\n this.box_.setMap(null);\n\n if (this.startPixel_) {\n this.dispatchEvent(\n new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null),\n );\n this.startPixel_ = null;\n }\n }\n\n super.setMap(map);\n }\n}\n\nexport default DragBox;\n", "/**\n * @module ol/interaction/DragZoom\n */\nimport {easeOut} from '../easing.js';\nimport {shiftKeyOnly} from '../events/condition.js';\nimport DragBox from './DragBox.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragzoom'] CSS class name for styling the\n * box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.shiftKeyOnly}.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {boolean} [out=false] Use interaction for zooming out.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the parent default\n * `boxEndCondition` function.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when a key, shift by default, is held down.\n *\n * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or\n * your custom one configured with `className`.\n * @api\n */\nclass DragZoom extends DragBox {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const condition = options.condition ? options.condition : shiftKeyOnly;\n\n super({\n condition: condition,\n className: options.className || 'ol-dragzoom',\n minArea: options.minArea,\n });\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 200;\n\n /**\n * @private\n * @type {boolean}\n */\n this.out_ = options.out !== undefined ? options.out : false;\n }\n\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @override\n */\n onBoxEnd(event) {\n const map = this.getMap();\n const view = /** @type {!import(\"../View.js\").default} */ (map.getView());\n let geometry = this.getGeometry();\n\n if (this.out_) {\n const rotatedExtent = view.rotatedExtentForGeometry(geometry);\n const resolution = view.getResolutionForExtentInternal(rotatedExtent);\n const factor = view.getResolution() / resolution;\n geometry = geometry.clone();\n geometry.scale(factor * factor);\n }\n\n view.fitInternal(geometry, {\n duration: this.duration_,\n easing: easeOut,\n });\n }\n}\n\nexport default DragZoom;\n", "/**\n * @module ol/events/Key\n */\n\n/**\n * @enum {string}\n * @const\n */\nexport default {\n LEFT: 'ArrowLeft',\n UP: 'ArrowUp',\n RIGHT: 'ArrowRight',\n DOWN: 'ArrowDown',\n};\n", "/**\n * @module ol/interaction/KeyboardPan\n */\nimport {rotate as rotateCoordinate} from '../coordinate.js';\nimport EventType from '../events/EventType.js';\nimport Key from '../events/Key.js';\nimport {noModifierKeys, targetNotEditable} from '../events/condition.js';\nimport Interaction, {pan} from './Interaction.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.noModifierKeys} and\n * {@link module:ol/events/condition.targetNotEditable}.\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {number} [pixelDelta=128] The amount of pixels to pan on each key\n * press.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map using keyboard arrows.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}.\n * @api\n */\nclass KeyboardPan extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options || {};\n\n /**\n * @private\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Browser event.\n * @return {boolean} Combined condition result.\n */\n this.defaultCondition_ = function (mapBrowserEvent) {\n return (\n noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent)\n );\n };\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ =\n options.condition !== undefined\n ? options.condition\n : this.defaultCondition_;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 100;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelDelta_ =\n options.pixelDelta !== undefined ? options.pixelDelta : 128;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides the direction to pan to (if an arrow key was\n * pressed).\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == EventType.KEYDOWN) {\n const keyEvent = /** @type {KeyboardEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const key = keyEvent.key;\n if (\n this.condition_(mapBrowserEvent) &&\n (key == Key.DOWN ||\n key == Key.LEFT ||\n key == Key.RIGHT ||\n key == Key.UP)\n ) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n const mapUnitsDelta = view.getResolution() * this.pixelDelta_;\n let deltaX = 0,\n deltaY = 0;\n if (key == Key.DOWN) {\n deltaY = -mapUnitsDelta;\n } else if (key == Key.LEFT) {\n deltaX = -mapUnitsDelta;\n } else if (key == Key.RIGHT) {\n deltaX = mapUnitsDelta;\n } else {\n deltaY = mapUnitsDelta;\n }\n const delta = [deltaX, deltaY];\n rotateCoordinate(delta, view.getRotation());\n pan(view, delta, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n }\n}\n\nexport default KeyboardPan;\n", "/**\n * @module ol/interaction/KeyboardZoom\n */\nimport EventType from '../events/EventType.js';\nimport {platformModifierKey, targetNotEditable} from '../events/condition.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. The default condition is\n * that {@link module:ol/events/condition.targetNotEditable} is fulfilled and that\n * the platform modifier key isn't pressed\n * (!{@link module:ol/events/condition.platformModifierKey}).\n * @property {number} [delta=1] The zoom level delta on each key press.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map using keyboard + and -.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardPan~KeyboardPan}.\n * @api\n */\nclass KeyboardZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition\n ? options.condition\n : function (mapBrowserEvent) {\n return (\n !platformModifierKey(mapBrowserEvent) &&\n targetNotEditable(mapBrowserEvent)\n );\n };\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 100;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides whether to zoom in or out (depending on whether the\n * key pressed was '+' or '-').\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (\n mapBrowserEvent.type == EventType.KEYDOWN ||\n mapBrowserEvent.type == EventType.KEYPRESS\n ) {\n const keyEvent = /** @type {KeyboardEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const key = keyEvent.key;\n if (this.condition_(mapBrowserEvent) && (key === '+' || key === '-')) {\n const map = mapBrowserEvent.map;\n const delta = key === '+' ? this.delta_ : -this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, undefined, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n }\n}\n\nexport default KeyboardZoom;\n", "/**\n * @module ol/interaction/MouseWheelZoom\n */\nimport EventType from '../events/EventType.js';\nimport {all, always, focusWithTabindex} from '../events/condition.js';\nimport {DEVICE_PIXEL_RATIO, FIREFOX} from '../has.js';\nimport {clamp} from '../math.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\n\n/**\n * @typedef {'trackpad' | 'wheel'} Mode\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.always}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {number} [maxDelta=1] Maximum mouse wheel delta.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [timeout=80] Mouse wheel timeout duration in milliseconds.\n * @property {boolean} [useAnchor=true] Enable zooming using the mouse's\n * location as the anchor. When set to `false`, zooming in and out will zoom to\n * the center of the screen instead of zooming on the mouse's location.\n * @property {boolean} [constrainResolution=false] If true, the mouse wheel zoom\n * event will always animate to the closest zoom level after an interaction;\n * false means intermediary zoom levels are allowed.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by scrolling the mouse wheel.\n * @api\n */\nclass MouseWheelZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super(\n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options),\n );\n\n /**\n * @private\n * @type {number}\n */\n this.totalDelta_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.lastDelta_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = options.maxDelta !== undefined ? options.maxDelta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @private\n * @type {number}\n */\n this.timeout_ = options.timeout !== undefined ? options.timeout : 80;\n\n /**\n * @private\n * @type {boolean}\n */\n this.useAnchor_ =\n options.useAnchor !== undefined ? options.useAnchor : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.constrainResolution_ =\n options.constrainResolution !== undefined\n ? options.constrainResolution\n : false;\n\n const condition = options.condition ? options.condition : always;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n\n /**\n * @private\n * @type {?import(\"../pixel.js\").Pixel}\n */\n this.lastAnchor_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.startTime_ = undefined;\n\n /**\n * @private\n * @type {ReturnType}\n */\n this.timeoutId_;\n\n /**\n * @private\n * @type {Mode|undefined}\n */\n this.mode_ = undefined;\n\n /**\n * Trackpad events separated by this delay will be considered separate\n * interactions.\n * @private\n * @type {number}\n */\n this.trackpadEventGap_ = 400;\n\n /**\n * @private\n * @type {ReturnType}\n */\n this.trackpadTimeoutId_;\n\n /**\n * The number of delta values per zoom level\n * @private\n * @type {number}\n */\n this.deltaPerZoom_ = 300;\n }\n\n /**\n * @private\n */\n endInteraction_() {\n this.trackpadTimeoutId_ = undefined;\n const map = this.getMap();\n if (!map) {\n return;\n }\n const view = map.getView();\n view.endInteraction(\n undefined,\n this.lastDelta_ ? (this.lastDelta_ > 0 ? 1 : -1) : 0,\n this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null,\n );\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually\n * zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n if (!this.condition_(mapBrowserEvent)) {\n return true;\n }\n const type = mapBrowserEvent.type;\n if (type !== EventType.WHEEL) {\n return true;\n }\n\n const map = mapBrowserEvent.map;\n const wheelEvent = /** @type {WheelEvent} */ (\n mapBrowserEvent.originalEvent\n );\n wheelEvent.preventDefault();\n\n if (this.useAnchor_) {\n this.lastAnchor_ = mapBrowserEvent.pixel;\n }\n\n // Delta normalisation inspired by\n // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js\n let delta;\n if (mapBrowserEvent.type == EventType.WHEEL) {\n delta = wheelEvent.deltaY;\n if (FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= DEVICE_PIXEL_RATIO;\n }\n if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta *= 40;\n }\n }\n\n if (delta === 0) {\n return false;\n }\n this.lastDelta_ = delta;\n\n const now = Date.now();\n\n if (this.startTime_ === undefined) {\n this.startTime_ = now;\n }\n\n if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {\n this.mode_ = Math.abs(delta) < 4 ? 'trackpad' : 'wheel';\n }\n\n const view = map.getView();\n if (\n this.mode_ === 'trackpad' &&\n !(view.getConstrainResolution() || this.constrainResolution_)\n ) {\n if (this.trackpadTimeoutId_) {\n clearTimeout(this.trackpadTimeoutId_);\n } else {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.beginInteraction();\n }\n this.trackpadTimeoutId_ = setTimeout(\n this.endInteraction_.bind(this),\n this.timeout_,\n );\n view.adjustZoom(\n -delta / this.deltaPerZoom_,\n this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null,\n );\n this.startTime_ = now;\n return false;\n }\n\n this.totalDelta_ += delta;\n\n const timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);\n\n clearTimeout(this.timeoutId_);\n this.timeoutId_ = setTimeout(\n this.handleWheelZoom_.bind(this, map),\n timeLeft,\n );\n\n return false;\n }\n\n /**\n * @private\n * @param {import(\"../Map.js\").default} map Map.\n */\n handleWheelZoom_(map) {\n const view = map.getView();\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n let delta =\n -clamp(\n this.totalDelta_,\n -this.maxDelta_ * this.deltaPerZoom_,\n this.maxDelta_ * this.deltaPerZoom_,\n ) / this.deltaPerZoom_;\n if (view.getConstrainResolution() || this.constrainResolution_) {\n // view has a zoom constraint, zoom by 1\n delta = delta ? (delta > 0 ? 1 : -1) : 0;\n }\n zoomByDelta(\n view,\n delta,\n this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null,\n this.duration_,\n );\n\n this.mode_ = undefined;\n this.totalDelta_ = 0;\n this.lastAnchor_ = null;\n this.startTime_ = undefined;\n this.timeoutId_ = undefined;\n }\n\n /**\n * Enable or disable using the mouse's location as an anchor when zooming\n * @param {boolean} useAnchor true to zoom to the mouse's location, false\n * to zoom to the center of the map\n * @api\n */\n setMouseAnchor(useAnchor) {\n this.useAnchor_ = useAnchor;\n if (!useAnchor) {\n this.lastAnchor_ = null;\n }\n }\n}\n\nexport default MouseWheelZoom;\n", "/**\n * @module ol/interaction/PinchRotate\n */\nimport {FALSE} from '../functions.js';\nimport {disable} from '../rotationconstraint.js';\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] The duration of the animation in\n * milliseconds.\n * @property {number} [threshold=0.3] Minimal angle in radians to start a rotation.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by twisting with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchRotate extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.anchor_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastAngle_ = undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.rotating_ = false;\n\n /**\n * @private\n * @type {number}\n */\n this.rotationDelta_ = 0.0;\n\n /**\n * @private\n * @type {number}\n */\n this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n let rotationDelta = 0.0;\n\n const touch0 = this.targetPointers[0];\n const touch1 = this.targetPointers[1];\n\n // angle between touches\n const angle = Math.atan2(\n touch1.clientY - touch0.clientY,\n touch1.clientX - touch0.clientX,\n );\n\n if (this.lastAngle_ !== undefined) {\n const delta = angle - this.lastAngle_;\n this.rotationDelta_ += delta;\n if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {\n this.rotating_ = true;\n }\n rotationDelta = delta;\n }\n this.lastAngle_ = angle;\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n\n // rotate anchor point.\n // FIXME: should be the intersection point between the lines:\n // touch0,touch1 and previousTouch0,previousTouch1\n this.anchor_ = map.getCoordinateFromPixelInternal(\n map.getEventPixel(centroidFromPointers(this.targetPointers)),\n );\n\n // rotate\n if (this.rotating_) {\n map.render();\n view.adjustRotationInternal(rotationDelta, this.anchor_);\n }\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n }\n return true;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n const map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastAngle_ = undefined;\n this.rotating_ = false;\n this.rotationDelta_ = 0.0;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n }\n return false;\n }\n}\n\nexport default PinchRotate;\n", "/**\n * @module ol/interaction/PinchZoom\n */\nimport {FALSE} from '../functions.js';\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=400] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by pinching with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchZoom extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.anchor_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 400;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastDistance_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.lastScaleDelta_ = 1;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n let scaleDelta = 1.0;\n\n const touch0 = this.targetPointers[0];\n const touch1 = this.targetPointers[1];\n const dx = touch0.clientX - touch1.clientX;\n const dy = touch0.clientY - touch1.clientY;\n\n // distance between touches\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (this.lastDistance_ !== undefined) {\n scaleDelta = this.lastDistance_ / distance;\n }\n this.lastDistance_ = distance;\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n\n if (scaleDelta != 1.0) {\n this.lastScaleDelta_ = scaleDelta;\n }\n\n // scale anchor point.\n this.anchor_ = map.getCoordinateFromPixelInternal(\n map.getEventPixel(centroidFromPointers(this.targetPointers)),\n );\n\n // scale, bypass the resolution constraint\n map.render();\n view.adjustResolutionInternal(scaleDelta, this.anchor_);\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n const direction = this.lastScaleDelta_ > 1 ? 1 : -1;\n view.endInteraction(this.duration_, direction);\n return false;\n }\n return true;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n const map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastDistance_ = undefined;\n this.lastScaleDelta_ = 1;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n }\n return false;\n }\n}\n\nexport default PinchZoom;\n", "/**\n * @module ol/interaction/defaults\n */\nimport Collection from '../Collection.js';\nimport Kinetic from '../Kinetic.js';\nimport DoubleClickZoom from './DoubleClickZoom.js';\nimport DragPan from './DragPan.js';\nimport DragRotate from './DragRotate.js';\nimport DragZoom from './DragZoom.js';\nimport KeyboardPan from './KeyboardPan.js';\nimport KeyboardZoom from './KeyboardZoom.js';\nimport MouseWheelZoom from './MouseWheelZoom.js';\nimport PinchRotate from './PinchRotate.js';\nimport PinchZoom from './PinchZoom.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [altShiftDragRotate=true] Whether Alt-Shift-drag rotate is\n * desired.\n * @property {boolean} [onFocusOnly=false] Interact only when the map has the\n * focus. This affects the `MouseWheelZoom` and `DragPan` interactions and is\n * useful when page scroll is desired for maps that do not have the browser's\n * focus.\n * @property {boolean} [doubleClickZoom=true] Whether double click zoom is\n * desired.\n * @property {boolean} [keyboard=true] Whether keyboard interaction is desired.\n * @property {boolean} [mouseWheelZoom=true] Whether mousewheel zoom is desired.\n * @property {boolean} [shiftDragZoom=true] Whether Shift-drag zoom is desired.\n * @property {boolean} [dragPan=true] Whether drag pan is desired.\n * @property {boolean} [pinchRotate=true] Whether pinch rotate is desired.\n * @property {boolean} [pinchZoom=true] Whether pinch zoom is desired.\n * @property {number} [zoomDelta] Zoom level delta when using keyboard or double click zoom.\n * @property {number} [zoomDuration] Duration of the zoom animation in\n * milliseconds.\n */\n\n/**\n * Set of interactions included in maps by default. Specific interactions can be\n * excluded by setting the appropriate option to false in the constructor\n * options, but the order of the interactions is fixed. If you want to specify\n * a different order for interactions, you will need to create your own\n * {@link module:ol/interaction/Interaction~Interaction} instances and insert\n * them into a {@link module:ol/Collection~Collection} in the order you want\n * before creating your {@link module:ol/Map~Map} instance. Changing the order can\n * be of interest if the event propagation needs to be stopped at a point.\n * The default set of interactions, in sequence, is:\n * {@link module:ol/interaction/DragRotate~DragRotate}\n * {@link module:ol/interaction/DoubleClickZoom~DoubleClickZoom}\n * {@link module:ol/interaction/DragPan~DragPan}\n * {@link module:ol/interaction/PinchRotate~PinchRotate}\n * {@link module:ol/interaction/PinchZoom~PinchZoom}\n * {@link module:ol/interaction/KeyboardPan~KeyboardPan}\n * {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}\n * {@link module:ol/interaction/MouseWheelZoom~MouseWheelZoom}\n * {@link module:ol/interaction/DragZoom~DragZoom}\n *\n * @param {DefaultsOptions} [options] Defaults options.\n * @return {Collection}\n * A collection of interactions to be used with the {@link module:ol/Map~Map}\n * constructor's `interactions` option.\n * @api\n */\nexport function defaults(options) {\n options = options ? options : {};\n\n /** @type {Collection} */\n const interactions = new Collection();\n\n const kinetic = new Kinetic(-0.005, 0.05, 100);\n\n const altShiftDragRotate =\n options.altShiftDragRotate !== undefined\n ? options.altShiftDragRotate\n : true;\n if (altShiftDragRotate) {\n interactions.push(new DragRotate());\n }\n\n const doubleClickZoom =\n options.doubleClickZoom !== undefined ? options.doubleClickZoom : true;\n if (doubleClickZoom) {\n interactions.push(\n new DoubleClickZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n }),\n );\n }\n\n const dragPan = options.dragPan !== undefined ? options.dragPan : true;\n if (dragPan) {\n interactions.push(\n new DragPan({\n onFocusOnly: options.onFocusOnly,\n kinetic: kinetic,\n }),\n );\n }\n\n const pinchRotate =\n options.pinchRotate !== undefined ? options.pinchRotate : true;\n if (pinchRotate) {\n interactions.push(new PinchRotate());\n }\n\n const pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;\n if (pinchZoom) {\n interactions.push(\n new PinchZoom({\n duration: options.zoomDuration,\n }),\n );\n }\n\n const keyboard = options.keyboard !== undefined ? options.keyboard : true;\n if (keyboard) {\n interactions.push(new KeyboardPan());\n interactions.push(\n new KeyboardZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n }),\n );\n }\n\n const mouseWheelZoom =\n options.mouseWheelZoom !== undefined ? options.mouseWheelZoom : true;\n if (mouseWheelZoom) {\n interactions.push(\n new MouseWheelZoom({\n onFocusOnly: options.onFocusOnly,\n duration: options.zoomDuration,\n }),\n );\n }\n\n const shiftDragZoom =\n options.shiftDragZoom !== undefined ? options.shiftDragZoom : true;\n if (shiftDragZoom) {\n interactions.push(\n new DragZoom({\n duration: options.zoomDuration,\n }),\n );\n }\n\n return interactions;\n}\n", "/**\n * @module ol/layer/Group\n */\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport {assert} from '../asserts.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {getIntersection} from '../extent.js';\nimport {clear} from '../obj.js';\nimport {getUid} from '../util.js';\nimport BaseLayer from './Base.js';\n\n/**\n * @typedef {'addlayer'|'removelayer'} GroupEventType\n */\n\n/**\n * @classdesc\n * A layer group triggers 'addlayer' and 'removelayer' events when layers are added to or removed from\n * the group or one of its child groups. When a layer group is added to or removed from another layer group,\n * a single event will be triggered (instead of one per layer in the group added or removed).\n */\nexport class GroupEvent extends Event {\n /**\n * @param {GroupEventType} type The event type.\n * @param {BaseLayer} layer The layer.\n */\n constructor(type, layer) {\n super(type);\n\n /**\n * The added or removed layer.\n * @type {BaseLayer}\n * @api\n */\n this.layer = layer;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} GroupOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array|Collection} [layers] Child layers.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LAYERS: 'layers',\n};\n\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @api\n */\nclass LayerGroup extends BaseLayer {\n /**\n * @param {Options} [options] Layer options.\n */\n constructor(options) {\n options = options || {};\n const baseOptions = /** @type {Options} */ (Object.assign({}, options));\n delete baseOptions.layers;\n\n let layers = options.layers;\n\n super(baseOptions);\n\n /***\n * @type {GroupOnSignature}\n */\n this.on;\n\n /***\n * @type {GroupOnSignature}\n */\n this.once;\n\n /***\n * @type {GroupOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {Array}\n */\n this.layersListenerKeys_ = [];\n\n /**\n * @private\n * @type {Object>}\n */\n this.listenerKeys_ = {};\n\n this.addChangeListener(Property.LAYERS, this.handleLayersChanged_);\n\n if (layers) {\n if (Array.isArray(layers)) {\n layers = new Collection(layers.slice(), {unique: true});\n } else {\n assert(\n typeof (/** @type {?} */ (layers).getArray) === 'function',\n 'Expected `layers` to be an array or a `Collection`',\n );\n }\n } else {\n layers = new Collection(undefined, {unique: true});\n }\n\n this.setLayers(layers);\n }\n\n /**\n * @private\n */\n handleLayerChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleLayersChanged_() {\n this.layersListenerKeys_.forEach(unlistenByKey);\n this.layersListenerKeys_.length = 0;\n\n const layers = this.getLayers();\n this.layersListenerKeys_.push(\n listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this),\n listen(\n layers,\n CollectionEventType.REMOVE,\n this.handleLayersRemove_,\n this,\n ),\n );\n\n for (const id in this.listenerKeys_) {\n this.listenerKeys_[id].forEach(unlistenByKey);\n }\n clear(this.listenerKeys_);\n\n const layersArray = layers.getArray();\n for (let i = 0, ii = layersArray.length; i < ii; i++) {\n const layer = layersArray[i];\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n }\n this.changed();\n }\n\n /**\n * @param {BaseLayer} layer The layer.\n */\n registerLayerListeners_(layer) {\n const listenerKeys = [\n listen(\n layer,\n ObjectEventType.PROPERTYCHANGE,\n this.handleLayerChange_,\n this,\n ),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n ];\n\n if (layer instanceof LayerGroup) {\n listenerKeys.push(\n listen(layer, 'addlayer', this.handleLayerGroupAdd_, this),\n listen(layer, 'removelayer', this.handleLayerGroupRemove_, this),\n );\n }\n\n this.listenerKeys_[getUid(layer)] = listenerKeys;\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupAdd_(event) {\n this.dispatchEvent(new GroupEvent('addlayer', event.layer));\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupRemove_(event) {\n this.dispatchEvent(new GroupEvent('removelayer', event.layer));\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersAdd_(collectionEvent) {\n const layer = collectionEvent.element;\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n this.changed();\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersRemove_(collectionEvent) {\n const layer = collectionEvent.element;\n const key = getUid(layer);\n this.listenerKeys_[key].forEach(unlistenByKey);\n delete this.listenerKeys_[key];\n this.dispatchEvent(new GroupEvent('removelayer', layer));\n this.changed();\n }\n\n /**\n * Returns the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @return {!Collection} Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n getLayers() {\n return /** @type {!Collection} */ (\n this.get(Property.LAYERS)\n );\n }\n\n /**\n * Set the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @param {!Collection} layers Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n setLayers(layers) {\n const collection = this.getLayers();\n if (collection) {\n const currentLayers = collection.getArray();\n for (let i = 0, ii = currentLayers.length; i < ii; ++i) {\n this.dispatchEvent(new GroupEvent('removelayer', currentLayers[i]));\n }\n }\n\n this.set(Property.LAYERS, layers);\n }\n\n /**\n * @param {Array} [array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n * @override\n */\n getLayersArray(array) {\n array = array !== undefined ? array : [];\n this.getLayers().forEach(function (layer) {\n layer.getLayersArray(array);\n });\n return array;\n }\n\n /**\n * Get the layer states list and use this groups z-index as the default\n * for all layers in this and nested groups, if it is unset at this point.\n * If dest is not provided and this group's z-index is undefined\n * 0 is used a the default z-index.\n * @param {Array} [dest] Optional list\n * of layer states (to be modified in place).\n * @return {Array} List of layer states.\n * @override\n */\n getLayerStatesArray(dest) {\n const states = dest !== undefined ? dest : [];\n const pos = states.length;\n\n this.getLayers().forEach(function (layer) {\n layer.getLayerStatesArray(states);\n });\n\n const ownLayerState = this.getLayerState();\n let defaultZIndex = ownLayerState.zIndex;\n if (!dest && ownLayerState.zIndex === undefined) {\n defaultZIndex = 0;\n }\n for (let i = pos, ii = states.length; i < ii; i++) {\n const layerState = states[i];\n layerState.opacity *= ownLayerState.opacity;\n layerState.visible = layerState.visible && ownLayerState.visible;\n layerState.maxResolution = Math.min(\n layerState.maxResolution,\n ownLayerState.maxResolution,\n );\n layerState.minResolution = Math.max(\n layerState.minResolution,\n ownLayerState.minResolution,\n );\n layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);\n layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);\n if (ownLayerState.extent !== undefined) {\n if (layerState.extent !== undefined) {\n layerState.extent = getIntersection(\n layerState.extent,\n ownLayerState.extent,\n );\n } else {\n layerState.extent = ownLayerState.extent;\n }\n }\n if (layerState.zIndex === undefined) {\n layerState.zIndex = defaultZIndex;\n }\n }\n\n return states;\n }\n\n /**\n * @return {import(\"../source/Source.js\").State} Source state.\n * @override\n */\n getSourceState() {\n return 'ready';\n }\n}\n\nexport default LayerGroup;\n", "/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport {wrapX} from '../coordinate.js';\nimport {getWidth} from '../extent.js';\nimport {TRUE} from '../functions.js';\nimport {inView} from '../layer/Layer.js';\nimport {shared as iconImageCache} from '../style/IconImageCache.js';\nimport {compose as composeTransform, makeInverse} from '../transform.js';\nimport {abstract} from '../util.js';\n\n/**\n * @template T\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"../layer/Layer.js\").default} layer Layer.\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} distanceSq Squared distance.\n * @property {import(\"./vector.js\").FeatureCallback} callback Callback.\n */\n\n/**\n * @abstract\n */\nclass MapRenderer extends Disposable {\n /**\n * @param {import(\"../Map.js\").default} map Map.\n */\n constructor(map) {\n super();\n\n /**\n * @private\n * @type {import(\"../Map.js\").default}\n */\n this.map_ = map;\n }\n\n /**\n * @abstract\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\n dispatchRenderEvent(type, frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @protected\n */\n calculateMatrices2D(frameState) {\n const viewState = frameState.viewState;\n const coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n const pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n\n composeTransform(\n coordinateToPixelTransform,\n frameState.size[0] / 2,\n frameState.size[1] / 2,\n 1 / viewState.resolution,\n -1 / viewState.resolution,\n -viewState.rotation,\n -viewState.center[0],\n -viewState.center[1],\n );\n\n makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\n forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n callback,\n thisArg,\n layerFilter,\n thisArg2,\n ) {\n let result;\n const viewState = frameState.viewState;\n\n /**\n * @param {boolean} managed Managed layer.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n return callback.call(thisArg, feature, managed ? layer : null, geometry);\n }\n\n const projection = viewState.projection;\n\n const translatedCoordinate = wrapX(coordinate.slice(), projection);\n const offsets = [[0, 0]];\n if (projection.canWrapX() && checkWrapped) {\n const projectionExtent = projection.getExtent();\n const worldWidth = getWidth(projectionExtent);\n offsets.push([-worldWidth, 0], [worldWidth, 0]);\n }\n\n const layerStates = frameState.layerStatesArray;\n const numLayers = layerStates.length;\n\n const matches = /** @type {Array>} */ ([]);\n const tmpCoord = [];\n for (let i = 0; i < offsets.length; i++) {\n for (let j = numLayers - 1; j >= 0; --j) {\n const layerState = layerStates[j];\n const layer = layerState.layer;\n if (\n layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter.call(thisArg2, layer)\n ) {\n const layerRenderer = layer.getRenderer();\n const source = layer.getSource();\n if (layerRenderer && source) {\n const coordinates = source.getWrapX()\n ? translatedCoordinate\n : coordinate;\n const callback = forEachFeatureAtCoordinate.bind(\n null,\n layerState.managed,\n );\n tmpCoord[0] = coordinates[0] + offsets[i][0];\n tmpCoord[1] = coordinates[1] + offsets[i][1];\n result = layerRenderer.forEachFeatureAtCoordinate(\n tmpCoord,\n frameState,\n hitTolerance,\n callback,\n matches,\n );\n }\n if (result) {\n return result;\n }\n }\n }\n }\n if (matches.length === 0) {\n return undefined;\n }\n const order = 1 / matches.length;\n matches.forEach((m, i) => (m.distanceSq += i * order));\n matches.sort((a, b) => a.distanceSq - b.distanceSq);\n matches.some((m) => {\n return (result = m.callback(m.feature, m.layer, m.geometry));\n });\n return result;\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n * @return {boolean} Is there a feature at the given coordinate?\n * @template U\n */\n hasFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n layerFilter,\n thisArg,\n ) {\n const hasFeature = this.forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n TRUE,\n this,\n layerFilter,\n thisArg,\n );\n\n return hasFeature !== undefined;\n }\n\n /**\n * @return {import(\"../Map.js\").default} Map.\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Render.\n * @abstract\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n */\n renderFrame(frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n scheduleExpireIconCache(frameState) {\n if (iconImageCache.canExpireCache()) {\n frameState.postRenderFunctions.push(expireIconCache);\n }\n }\n}\n\n/**\n * @param {import(\"../Map.js\").default} map Map.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n iconImageCache.expire();\n}\n\nexport default MapRenderer;\n", "/**\n * @module ol/renderer/Composite\n */\nimport ObjectEventType from '../ObjectEventType.js';\nimport {CLASS_UNSELECTABLE} from '../css.js';\nimport {replaceChildren} from '../dom.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport BaseVectorLayer from '../layer/BaseVector.js';\nimport {inView} from '../layer/Layer.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport {checkedFonts} from '../render/canvas.js';\nimport MapRenderer from './Map.js';\n\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nclass CompositeMapRenderer extends MapRenderer {\n /**\n * @param {import(\"../Map.js\").default} map Map.\n */\n constructor(map) {\n super(map);\n\n /**\n * @private\n * @type {import(\"../events.js\").EventsKey}\n */\n this.fontChangeListenerKey_ = listen(\n checkedFonts,\n ObjectEventType.PROPERTYCHANGE,\n map.redrawText,\n map,\n );\n\n /**\n * @private\n * @type {HTMLDivElement}\n */\n this.element_ = document.createElement('div');\n const style = this.element_.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n style.zIndex = '0';\n\n this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n\n const container = map.getViewport();\n container.insertBefore(this.element_, container.firstChild || null);\n\n /**\n * @private\n * @type {Array}\n */\n this.children_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @override\n */\n dispatchRenderEvent(type, frameState) {\n const map = this.getMap();\n if (map.hasListener(type)) {\n const event = new RenderEvent(type, undefined, frameState);\n map.dispatchEvent(event);\n }\n }\n\n /**\n * @override\n */\n disposeInternal() {\n unlistenByKey(this.fontChangeListenerKey_);\n this.element_.remove();\n super.disposeInternal();\n }\n\n /**\n * Render.\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n * @override\n */\n renderFrame(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element_.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n this.calculateMatrices2D(frameState);\n this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n\n const layerStatesArray = frameState.layerStatesArray.sort(\n (a, b) => a.zIndex - b.zIndex,\n );\n const declutter = layerStatesArray.some(\n (layerState) =>\n layerState.layer instanceof BaseVectorLayer &&\n layerState.layer.getDeclutter(),\n );\n if (declutter) {\n // Some layers need decluttering, turn on deferred rendering hint\n frameState.declutter = {};\n }\n const viewState = frameState.viewState;\n\n this.children_.length = 0;\n\n const renderedLayerStates = [];\n let previousElement = null;\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layerState = layerStatesArray[i];\n frameState.layerIndex = i;\n\n const layer = layerState.layer;\n const sourceState = layer.getSourceState();\n if (\n !inView(layerState, viewState) ||\n (sourceState != 'ready' && sourceState != 'undefined')\n ) {\n layer.unrender();\n continue;\n }\n\n const element = layer.render(frameState, previousElement);\n if (!element) {\n continue;\n }\n if (element !== previousElement) {\n this.children_.push(element);\n previousElement = element;\n }\n\n renderedLayerStates.push(layerState);\n }\n\n this.declutter(frameState, renderedLayerStates);\n\n replaceChildren(this.element_, this.children_);\n\n this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n\n if (!this.renderedVisible_) {\n this.element_.style.display = '';\n this.renderedVisible_ = true;\n }\n\n this.scheduleExpireIconCache(frameState);\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {Array} layerStates Layers.\n */\n declutter(frameState, layerStates) {\n if (!frameState.declutter) {\n return;\n }\n for (let i = layerStates.length - 1; i >= 0; --i) {\n const layerState = layerStates[i];\n const layer = layerState.layer;\n if (layer.getDeclutter()) {\n layer.renderDeclutter(frameState, layerState);\n }\n }\n layerStates.forEach((layerState) =>\n layerState.layer.renderDeferred(frameState),\n );\n }\n}\n\nexport default CompositeMapRenderer;\n", "/**\n * @module ol/Map\n */\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport BaseObject from './Object.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport TileQueue, {getTilePriority} from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport {equals} from './array.js';\nimport {assert} from './asserts.js';\nimport {warn} from './console.js';\nimport {defaults as defaultControls} from './control/defaults.js';\nimport EventType from './events/EventType.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {\n clone,\n createOrUpdateEmpty,\n equals as equalsExtent,\n getForViewAndSize,\n isEmpty,\n} from './extent.js';\nimport {TRUE} from './functions.js';\nimport {DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS} from './has.js';\nimport {defaults as defaultInteractions} from './interaction/defaults.js';\nimport LayerGroup, {GroupEvent} from './layer/Group.js';\nimport Layer from './layer/Layer.js';\nimport PointerEventType from './pointer/EventType.js';\nimport {fromUserCoordinate, toUserCoordinate} from './proj.js';\nimport RenderEventType from './render/EventType.js';\nimport CompositeMapRenderer from './renderer/Composite.js';\nimport {hasArea} from './size.js';\nimport {\n apply as applyTransform,\n create as createTransform,\n} from './transform.js';\nimport {getUid} from './util.js';\n\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate Animate.\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform CoordinateToPixelTransform.\n * @property {Object>|null} declutter\n * Declutter trees by declutter group.\n * When null, no decluttering is needed because no layers have decluttering enabled.\n * @property {null|import(\"./extent.js\").Extent} extent Extent (in view projection coordinates).\n * @property {import(\"./extent.js\").Extent} [nextExtent] Next extent during an animation series.\n * @property {number} index Index.\n * @property {Array} layerStatesArray LayerStatesArray.\n * @property {number} layerIndex LayerIndex.\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform PixelToCoordinateTransform.\n * @property {Array} postRenderFunctions PostRenderFunctions.\n * @property {import(\"./size.js\").Size} size Size.\n * @property {TileQueue} tileQueue TileQueue.\n * @property {!Object>} usedTiles UsedTiles.\n * @property {Array} viewHints ViewHints.\n * @property {!Object>} wantedTiles WantedTiles.\n * @property {string} mapId The id of the map.\n * @property {Object} renderTargets Identifiers of previously rendered elements.\n */\n\n/**\n * @typedef {function(Map, FrameState): any} PostRenderFunction\n */\n\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer~Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for wrapped geometries inside the range of\n * +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection} [controls] Controls.\n * @property {Collection} [interactions] Interactions.\n * @property {HTMLElement|Document} keyboardEventTarget KeyboardEventTarget.\n * @property {Collection} overlays Overlays.\n * @property {Object} values Values.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:layergroup'|'change:size'|'change:target'|'change:view'} MapObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} MapEventHandler\n */\n\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection|Array} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control/defaults.defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection|Array} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction/defaults.defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array|Collection|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection|Array} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * For accessibility (focus and keyboard events for map navigation), the `target` element must have a\n * properly configured `tabindex` attribute. If the `target` element is inside a Shadow DOM, the\n * `tabindex` atribute must be set on the custom element's host element.\n * **Note:** CSS `transform` support for the target element is limited to `scale`.\n * @property {View|Promise} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n */\nfunction removeLayerMapProperty(layer) {\n if (layer instanceof Layer) {\n layer.setMapInternal(null);\n return;\n }\n if (layer instanceof LayerGroup) {\n layer.getLayers().forEach(removeLayerMapProperty);\n }\n}\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @param {Map} map Map.\n */\nfunction setLayerMapProperty(layer, map) {\n if (layer instanceof Layer) {\n layer.setMapInternal(map);\n return;\n }\n if (layer instanceof LayerGroup) {\n const layers = layer.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n setLayerMapProperty(layers[i], map);\n }\n }\n}\n\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n * import Map from 'ol/Map.js';\n * import View from 'ol/View.js';\n * import TileLayer from 'ol/layer/Tile.js';\n * import OSM from 'ol/source/OSM.js';\n *\n * const map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1,\n * }),\n * layers: [\n * new TileLayer({\n * source: new OSM(),\n * }),\n * ],\n * target: 'map',\n * });\n *\n * The above snippet creates a map using a {@link module:ol/layer/Tile~TileLayer} to\n * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM\n * element with the id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link module:ol/Overlay~Overlay} for the difference). The map\n * itself is placed in a further element within the viewport.\n *\n * Layers are stored as a {@link module:ol/Collection~Collection} in\n * layerGroups. A top-level group is provided by the library. This is what is\n * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the\n * options are added to this group, and `addLayer` and `removeLayer` change the\n * layer collection in the group. `getLayers` is a convenience function for\n * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~LayerGroup}\n * is a subclass of {@link module:ol/layer/Base~BaseLayer}, so layers entered in the\n * options or added with `addLayer` can be groups, which can contain further\n * groups, and so on.\n *\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nclass Map extends BaseObject {\n /**\n * @param {MapOptions} [options] Map options.\n */\n constructor(options) {\n super();\n\n options = options || {};\n\n /***\n * @type {MapEventHandler}\n */\n this.on;\n\n /***\n * @type {MapEventHandler}\n */\n this.once;\n\n /***\n * @type {MapEventHandler}\n */\n this.un;\n\n const optionsInternal = createOptionsInternal(options);\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderComplete_ = false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.loaded_ = true;\n\n /** @private */\n this.boundHandleBrowserEvent_ = this.handleBrowserEvent.bind(this);\n\n /**\n * @type {number}\n * @private\n */\n this.maxTilesLoading_ =\n options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ =\n options.pixelRatio !== undefined\n ? options.pixelRatio\n : DEVICE_PIXEL_RATIO;\n\n /**\n * @private\n * @type {ReturnType}\n */\n this.postRenderTimeoutHandle_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.animationDelayKey_;\n\n /**\n * @private\n */\n this.animationDelay_ = this.animationDelay_.bind(this);\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.coordinateToPixelTransform_ = createTransform();\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.pixelToCoordinateTransform_ = createTransform();\n\n /**\n * @private\n * @type {number}\n */\n this.frameIndex_ = 0;\n\n /**\n * @private\n * @type {?FrameState}\n */\n this.frameState_ = null;\n\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {import(\"./extent.js\").Extent}\n */\n this.previousExtent_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewPropertyListenerKey_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewChangeListenerKey_ = null;\n\n /**\n * @private\n * @type {?Array}\n */\n this.layerGroupPropertyListenerKeys_ = null;\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.viewport_ = document.createElement('div');\n this.viewport_.className =\n 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n this.viewport_.style.position = 'relative';\n this.viewport_.style.overflow = 'hidden';\n this.viewport_.style.width = '100%';\n this.viewport_.style.height = '100%';\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainer_ = document.createElement('div');\n this.overlayContainer_.style.position = 'absolute';\n this.overlayContainer_.style.zIndex = '0';\n this.overlayContainer_.style.width = '100%';\n this.overlayContainer_.style.height = '100%';\n this.overlayContainer_.style.pointerEvents = 'none';\n this.overlayContainer_.className = 'ol-overlaycontainer';\n this.viewport_.appendChild(this.overlayContainer_);\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainerStopEvent_ = document.createElement('div');\n this.overlayContainerStopEvent_.style.position = 'absolute';\n this.overlayContainerStopEvent_.style.zIndex = '0';\n this.overlayContainerStopEvent_.style.width = '100%';\n this.overlayContainerStopEvent_.style.height = '100%';\n this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n this.viewport_.appendChild(this.overlayContainerStopEvent_);\n\n /**\n * @private\n * @type {MapBrowserEventHandler}\n */\n this.mapBrowserEventHandler_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.moveTolerance_ = options.moveTolerance;\n\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n\n /**\n * @private\n * @type {?Array}\n */\n this.targetChangeHandlerKeys_ = null;\n\n /**\n * @private\n * @type {HTMLElement|null}\n */\n this.targetElement_ = null;\n\n /**\n * @private\n * @type {ResizeObserver}\n */\n this.resizeObserver_ = new ResizeObserver(() => this.updateSize());\n\n /**\n * @type {Collection}\n * @protected\n */\n this.controls = optionsInternal.controls || defaultControls();\n\n /**\n * @type {Collection}\n * @protected\n */\n this.interactions =\n optionsInternal.interactions ||\n defaultInteractions({\n onFocusOnly: true,\n });\n\n /**\n * @type {Collection}\n * @private\n */\n this.overlays_ = optionsInternal.overlays;\n\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object}\n */\n this.overlayIdIndex_ = {};\n\n /**\n * @type {import(\"./renderer/Map.js\").default|null}\n * @private\n */\n this.renderer_ = null;\n\n /**\n * @private\n * @type {!Array}\n */\n this.postRenderFunctions_ = [];\n\n /**\n * @private\n * @type {TileQueue}\n */\n this.tileQueue_ = new TileQueue(\n this.getTilePriority.bind(this),\n this.handleTileChange_.bind(this),\n );\n\n this.addChangeListener(\n MapProperty.LAYERGROUP,\n this.handleLayerGroupChanged_,\n );\n this.addChangeListener(MapProperty.VIEW, this.handleViewChanged_);\n this.addChangeListener(MapProperty.SIZE, this.handleSizeChanged_);\n this.addChangeListener(MapProperty.TARGET, this.handleTargetChanged_);\n\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n this.setProperties(optionsInternal.values);\n\n const map = this;\n if (options.view && !(options.view instanceof View)) {\n options.view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n this.controls.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent\n */\n (event) => {\n event.element.setMap(this);\n },\n );\n\n this.controls.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n event.element.setMap(null);\n },\n );\n\n this.interactions.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n event.element.setMap(this);\n },\n );\n\n this.interactions.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n event.element.setMap(null);\n },\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n this.addOverlayInternal_(event.element);\n },\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n const id = event.element.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n },\n );\n\n this.controls.forEach(\n /**\n * @param {import(\"./control/Control.js\").default} control Control.\n */\n (control) => {\n control.setMap(this);\n },\n );\n\n this.interactions.forEach(\n /**\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n */\n (interaction) => {\n interaction.setMap(this);\n },\n );\n\n this.overlays_.forEach(this.addOverlayInternal_.bind(this));\n }\n\n /**\n * Add the given control to the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @api\n */\n addControl(control) {\n this.getControls().push(control);\n }\n\n /**\n * Add the given interaction to the map. If you want to add an interaction\n * at another point of the collection use `getInteractions()` and the methods\n * available on {@link module:ol/Collection~Collection}. This can be used to\n * stop the event propagation from the handleEvent function. The interactions\n * get to handle the events in the reverse order of this collection.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n * @api\n */\n addInteraction(interaction) {\n this.getInteractions().push(interaction);\n }\n\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @api\n */\n addLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer add event.\n * @private\n */\n handleLayerAdd_(event) {\n setLayerMapProperty(event.layer, this);\n }\n\n /**\n * Add the given overlay to the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @api\n */\n addOverlay(overlay) {\n this.getOverlays().push(overlay);\n }\n\n /**\n * This deals with map's overlay collection changes.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @private\n */\n addOverlayInternal_(overlay) {\n const id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n }\n\n /**\n *\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.controls.clear();\n this.interactions.clear();\n this.overlays_.clear();\n this.resizeObserver_.disconnect();\n this.setTarget(null);\n super.disposeInternal();\n }\n\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `options`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature~Feature feature} or\n * {@link module:ol/render/Feature~RenderFeature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer~Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template T\n * @api\n */\n forEachFeatureAtPixel(pixel, callback, options) {\n if (!this.frameState_ || !this.renderer_) {\n return;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n options = options !== undefined ? options : {};\n const hitTolerance =\n options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const layerFilter =\n options.layerFilter !== undefined ? options.layerFilter : TRUE;\n const checkWrapped = options.checkWrapped !== false;\n return this.renderer_.forEachFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n callback,\n null,\n layerFilter,\n null,\n );\n }\n\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {Array} The detected features or\n * an empty array if none were found.\n * @api\n */\n getFeaturesAtPixel(pixel, options) {\n const features = [];\n this.forEachFeatureAtPixel(\n pixel,\n function (feature) {\n features.push(feature);\n },\n options,\n );\n return features;\n }\n\n /**\n * Get all layers from all layer groups.\n * @return {Array} Layers.\n * @api\n */\n getAllLayers() {\n const layers = [];\n function addLayersFrom(layerGroup) {\n layerGroup.forEach(function (layer) {\n if (layer instanceof LayerGroup) {\n addLayersFrom(layer.getLayers());\n } else {\n layers.push(layer);\n }\n });\n }\n addLayersFrom(this.getLayers());\n return layers;\n }\n\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through the `layerFilter` option.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @api\n */\n hasFeatureAtPixel(pixel, options) {\n if (!this.frameState_ || !this.renderer_) {\n return false;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n options = options !== undefined ? options : {};\n const layerFilter =\n options.layerFilter !== undefined ? options.layerFilter : TRUE;\n const hitTolerance =\n options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const checkWrapped = options.checkWrapped !== false;\n return this.renderer_.hasFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n layerFilter,\n null,\n );\n }\n\n /**\n * Returns the coordinate in user projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n getEventCoordinate(event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n }\n\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n */\n getEventCoordinateInternal(event) {\n return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n }\n\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {UIEvent|{clientX: number, clientY: number}} event Event.\n * @return {import(\"./pixel.js\").Pixel} Pixel.\n * @api\n */\n getEventPixel(event) {\n const viewport = this.viewport_;\n const viewportPosition = viewport.getBoundingClientRect();\n const viewportSize = this.getSize();\n const scaleX = viewportPosition.width / viewportSize[0];\n const scaleY = viewportPosition.height / viewportSize[1];\n const eventPosition =\n //FIXME Are we really calling this with a TouchEvent anywhere?\n 'changedTouches' in event\n ? /** @type {TouchEvent} */ (event).changedTouches[0]\n : /** @type {MouseEvent} */ (event);\n\n return [\n (eventPosition.clientX - viewportPosition.left) / scaleX,\n (eventPosition.clientY - viewportPosition.top) / scaleY,\n ];\n }\n\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n getTarget() {\n return /** @type {HTMLElement|string|undefined} */ (\n this.get(MapProperty.TARGET)\n );\n }\n\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n getTargetElement() {\n return this.targetElement_;\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * user projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n * @api\n */\n getCoordinateFromPixel(pixel) {\n return toUserCoordinate(\n this.getCoordinateFromPixelInternal(pixel),\n this.getView().getProjection(),\n );\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n */\n getCoordinateFromPixelInternal(pixel) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n return applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n }\n\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {Collection} Controls.\n * @api\n */\n getControls() {\n return this.controls;\n }\n\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {Collection} Overlays.\n * @api\n */\n getOverlays() {\n return this.overlays_;\n }\n\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {import(\"./Overlay.js\").default|null} Overlay.\n * @api\n */\n getOverlayById(id) {\n const overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n }\n\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {Collection} Interactions.\n * @api\n */\n getInteractions() {\n return this.interactions;\n }\n\n /**\n * Get the layergroup associated with this map.\n * @return {LayerGroup} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n getLayerGroup() {\n return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n }\n\n /**\n * Clear any existing layers and add layers to the map.\n * @param {Array|Collection} layers The layers to be added to the map.\n * @api\n */\n setLayers(layers) {\n const group = this.getLayerGroup();\n if (layers instanceof Collection) {\n group.setLayers(layers);\n return;\n }\n\n const collection = group.getLayers();\n collection.clear();\n collection.extend(layers);\n }\n\n /**\n * Get the collection of layers associated with this map.\n * @return {!Collection} Layers.\n * @api\n */\n getLayers() {\n const layers = this.getLayerGroup().getLayers();\n return layers;\n }\n\n /**\n * @return {boolean} Layers have sources that are still loading.\n */\n getLoadingOrNotReady() {\n const layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const state = layerStatesArray[i];\n if (!state.visible) {\n continue;\n }\n const renderer = state.layer.getRenderer();\n if (renderer && !renderer.ready) {\n return true;\n }\n const source = state.layer.getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the user\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n * @api\n */\n getPixelFromCoordinate(coordinate) {\n const viewCoordinate = fromUserCoordinate(\n coordinate,\n this.getView().getProjection(),\n );\n return this.getPixelFromCoordinateInternal(viewCoordinate);\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n */\n getPixelFromCoordinateInternal(coordinate) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n return applyTransform(\n frameState.coordinateToPixelTransform,\n coordinate.slice(0, 2),\n );\n }\n\n /**\n * Get the map renderer.\n * @return {import(\"./renderer/Map.js\").default|null} Renderer\n */\n getRenderer() {\n return this.renderer_;\n }\n\n /**\n * Get the size of this map.\n * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n getSize() {\n return /** @type {import(\"./size.js\").Size|undefined} */ (\n this.get(MapProperty.SIZE)\n );\n }\n\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {View} The view that controls this map.\n * @observable\n * @api\n */\n getView() {\n return /** @type {View} */ (this.get(MapProperty.VIEW));\n }\n\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n getViewport() {\n return this.viewport_;\n }\n\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n getOverlayContainer() {\n return this.overlayContainer_;\n }\n\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n getOverlayContainerStopEvent() {\n return this.overlayContainerStopEvent_;\n }\n\n /**\n * @return {!Document} The document where the map is displayed.\n */\n getOwnerDocument() {\n const targetElement = this.getTargetElement();\n return targetElement ? targetElement.ownerDocument : document;\n }\n\n /**\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n getTilePriority(tile, tileSourceKey, tileCenter, tileResolution) {\n return getTilePriority(\n this.frameState_,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution,\n );\n }\n\n /**\n * @param {UIEvent} browserEvent Browser event.\n * @param {string} [type] Type.\n */\n handleBrowserEvent(browserEvent, type) {\n type = type || browserEvent.type;\n const mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n }\n\n /**\n * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n handleMapBrowserEvent(mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n const originalEvent = /** @type {PointerEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const eventType = originalEvent.type;\n if (\n eventType === PointerEventType.POINTERDOWN ||\n eventType === EventType.WHEEL ||\n eventType === EventType.KEYDOWN\n ) {\n const doc = this.getOwnerDocument();\n const rootNode = this.viewport_.getRootNode\n ? this.viewport_.getRootNode()\n : doc;\n const target = /** @type {Node} */ (originalEvent.target);\n\n const currentDoc =\n rootNode instanceof ShadowRoot\n ? rootNode.host === target\n ? rootNode.host.ownerDocument\n : rootNode\n : rootNode === doc\n ? doc.documentElement\n : rootNode;\n if (\n // Abort if the target is a child of the container for elements whose events are not meant\n // to be handled by map interactions.\n this.overlayContainerStopEvent_.contains(target) ||\n // Abort if the event target is a child of the container that is no longer in the page.\n // It's possible for the target to no longer be in the page if it has been removed in an\n // event listener, this might happen in a Control that recreates it's content based on\n // user interaction either manually or via a render in something like https://reactjs.org/\n !currentDoc.contains(target)\n ) {\n return;\n }\n }\n mapBrowserEvent.frameState = this.frameState_;\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n const interactionsArray = this.getInteractions().getArray().slice();\n for (let i = interactionsArray.length - 1; i >= 0; i--) {\n const interaction = interactionsArray[i];\n if (\n interaction.getMap() !== this ||\n !interaction.getActive() ||\n !this.getTargetElement()\n ) {\n continue;\n }\n const cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont || mapBrowserEvent.propagationStopped) {\n break;\n }\n }\n }\n }\n\n /**\n * @protected\n */\n handlePostRender() {\n const frameState = this.frameState_;\n\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n const tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n let maxTotalLoading = this.maxTilesLoading_;\n let maxNewLoads = maxTotalLoading;\n if (frameState) {\n const hints = frameState.viewHints;\n if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) {\n const lowOnFrameBudget = Date.now() - frameState.time > 8;\n maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n maxNewLoads = lowOnFrameBudget ? 0 : 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n\n if (frameState && this.renderer_ && !frameState.animate) {\n if (this.renderComplete_) {\n if (this.hasListener(RenderEventType.RENDERCOMPLETE)) {\n this.renderer_.dispatchRenderEvent(\n RenderEventType.RENDERCOMPLETE,\n frameState,\n );\n }\n if (this.loaded_ === false) {\n this.loaded_ = true;\n this.dispatchEvent(\n new MapEvent(MapEventType.LOADEND, this, frameState),\n );\n }\n } else if (this.loaded_ === true) {\n this.loaded_ = false;\n this.dispatchEvent(\n new MapEvent(MapEventType.LOADSTART, this, frameState),\n );\n }\n }\n\n const postRenderFunctions = this.postRenderFunctions_;\n if (frameState) {\n for (let i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n }\n postRenderFunctions.length = 0;\n }\n\n /**\n * @private\n */\n handleSizeChanged_() {\n if (this.getView() && !this.getView().getAnimating()) {\n this.getView().resolveConstraints(0);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n handleTargetChanged_() {\n if (this.mapBrowserEventHandler_) {\n for (let i = 0, ii = this.targetChangeHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.targetChangeHandlerKeys_[i]);\n }\n this.targetChangeHandlerKeys_ = null;\n this.viewport_.removeEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_,\n );\n this.viewport_.removeEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_,\n );\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n this.viewport_.remove();\n }\n\n if (this.targetElement_) {\n this.resizeObserver_.unobserve(this.targetElement_);\n const rootNode = this.targetElement_.getRootNode();\n if (rootNode instanceof ShadowRoot) {\n this.resizeObserver_.unobserve(rootNode.host);\n }\n this.setSize(undefined);\n }\n\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n\n const target = this.getTarget();\n const targetElement =\n typeof target === 'string' ? document.getElementById(target) : target;\n this.targetElement_ = targetElement;\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n } else {\n targetElement.appendChild(this.viewport_);\n if (!this.renderer_) {\n this.renderer_ = new CompositeMapRenderer(this);\n }\n\n this.mapBrowserEventHandler_ = new MapBrowserEventHandler(\n this,\n this.moveTolerance_,\n );\n for (const key in MapBrowserEventType) {\n this.mapBrowserEventHandler_.addEventListener(\n MapBrowserEventType[key],\n this.handleMapBrowserEvent.bind(this),\n );\n }\n this.viewport_.addEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_,\n false,\n );\n this.viewport_.addEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false,\n );\n\n let keyboardEventTarget;\n if (!this.keyboardEventTarget_) {\n // check if map target is in shadowDOM, if yes use host element as target\n const targetRoot = targetElement.getRootNode();\n const targetCandidate =\n targetRoot instanceof ShadowRoot ? targetRoot.host : targetElement;\n keyboardEventTarget = targetCandidate;\n } else {\n keyboardEventTarget = this.keyboardEventTarget_;\n }\n\n this.targetChangeHandlerKeys_ = [\n listen(\n keyboardEventTarget,\n EventType.KEYDOWN,\n this.handleBrowserEvent,\n this,\n ),\n listen(\n keyboardEventTarget,\n EventType.KEYPRESS,\n this.handleBrowserEvent,\n this,\n ),\n ];\n const rootNode = targetElement.getRootNode();\n if (rootNode instanceof ShadowRoot) {\n this.resizeObserver_.observe(rootNode.host);\n }\n this.resizeObserver_.observe(targetElement);\n }\n\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n }\n\n /**\n * @private\n */\n handleTileChange_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewPropertyChanged_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewChanged_() {\n if (this.viewPropertyListenerKey_) {\n unlistenByKey(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n unlistenByKey(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n const view = this.getView();\n if (view) {\n this.updateViewportSize_(this.getSize());\n\n this.viewPropertyListenerKey_ = listen(\n view,\n ObjectEventType.PROPERTYCHANGE,\n this.handleViewPropertyChanged_,\n this,\n );\n this.viewChangeListenerKey_ = listen(\n view,\n EventType.CHANGE,\n this.handleViewPropertyChanged_,\n this,\n );\n\n view.resolveConstraints(0);\n }\n this.render();\n }\n\n /**\n * @private\n */\n handleLayerGroupChanged_() {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n const layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.handleLayerAdd_(new GroupEvent('addlayer', layerGroup));\n this.layerGroupPropertyListenerKeys_ = [\n listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n listen(layerGroup, EventType.CHANGE, this.render, this),\n listen(layerGroup, 'addlayer', this.handleLayerAdd_, this),\n listen(layerGroup, 'removelayer', this.handleLayerRemove_, this),\n ];\n }\n this.render();\n }\n\n /**\n * @return {boolean} Is rendered.\n */\n isRendered() {\n return !!this.frameState_;\n }\n\n /**\n * @private\n */\n animationDelay_() {\n this.animationDelayKey_ = undefined;\n this.renderFrame_(Date.now());\n }\n\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n renderSync() {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n }\n\n /**\n * Redraws all text after new fonts have loaded\n */\n redrawText() {\n const layerStates = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStates.length; i < ii; ++i) {\n const layer = layerStates[i].layer;\n if (layer.hasRenderer()) {\n layer.getRenderer().handleFontsChanged();\n }\n }\n }\n\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n render() {\n if (this.renderer_ && this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n }\n\n /**\n * Remove the given control from the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n removeControl(control) {\n return this.getControls().remove(control);\n }\n\n /**\n * Remove the given interaction from the map.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n removeInteraction(interaction) {\n return this.getInteractions().remove(interaction);\n }\n\n /**\n * Removes the given layer from the map.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n removeLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer remove event.\n * @private\n */\n handleLayerRemove_(event) {\n removeLayerMapProperty(event.layer);\n }\n\n /**\n * Remove the given overlay from the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n removeOverlay(overlay) {\n return this.getOverlays().remove(overlay);\n }\n\n /**\n * @param {number} time Time.\n * @private\n */\n renderFrame_(time) {\n const size = this.getSize();\n const view = this.getView();\n const previousFrameState = this.frameState_;\n /** @type {?FrameState} */\n let frameState = null;\n if (size !== undefined && hasArea(size) && view && view.isDef()) {\n const viewHints = view.getHints(\n this.frameState_ ? this.frameState_.viewHints : undefined,\n );\n const viewState = view.getState();\n frameState = {\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n declutter: null,\n extent: getForViewAndSize(\n viewState.center,\n viewState.resolution,\n viewState.rotation,\n size,\n ),\n index: this.frameIndex_++,\n layerIndex: 0,\n layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {},\n mapId: getUid(this),\n renderTargets: {},\n };\n if (viewState.nextCenter && viewState.nextResolution) {\n const rotation = isNaN(viewState.nextRotation)\n ? viewState.rotation\n : viewState.nextRotation;\n\n frameState.nextExtent = getForViewAndSize(\n viewState.nextCenter,\n viewState.nextResolution,\n rotation,\n size,\n );\n }\n }\n\n this.frameState_ = frameState;\n this.renderer_.renderFrame(frameState);\n\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(\n this.postRenderFunctions_,\n frameState.postRenderFunctions,\n );\n\n if (previousFrameState) {\n const moveStart =\n !this.previousExtent_ ||\n (!isEmpty(this.previousExtent_) &&\n !equalsExtent(frameState.extent, this.previousExtent_));\n if (moveStart) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVESTART, this, previousFrameState),\n );\n this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n }\n }\n\n const idle =\n this.previousExtent_ &&\n !frameState.viewHints[ViewHint.ANIMATING] &&\n !frameState.viewHints[ViewHint.INTERACTING] &&\n !equalsExtent(frameState.extent, this.previousExtent_);\n\n if (idle) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVEEND, this, frameState),\n );\n clone(frameState.extent, this.previousExtent_);\n }\n }\n\n this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n\n this.renderComplete_ =\n (this.hasListener(MapEventType.LOADSTART) ||\n this.hasListener(MapEventType.LOADEND) ||\n this.hasListener(RenderEventType.RENDERCOMPLETE)) &&\n !this.tileQueue_.getTilesLoading() &&\n !this.tileQueue_.getCount() &&\n !this.getLoadingOrNotReady();\n\n if (!this.postRenderTimeoutHandle_) {\n this.postRenderTimeoutHandle_ = setTimeout(() => {\n this.postRenderTimeoutHandle_ = undefined;\n this.handlePostRender();\n }, 0);\n }\n }\n\n /**\n * Sets the layergroup of this map.\n * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n setLayerGroup(layerGroup) {\n const oldLayerGroup = this.getLayerGroup();\n if (oldLayerGroup) {\n this.handleLayerRemove_(new GroupEvent('removelayer', oldLayerGroup));\n }\n this.set(MapProperty.LAYERGROUP, layerGroup);\n }\n\n /**\n * Set the size of this map.\n * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n setSize(size) {\n this.set(MapProperty.SIZE, size);\n }\n\n /**\n * Set the target element to render this map into.\n * For accessibility (focus and keyboard events for map navigation), the `target` element must have a\n * properly configured `tabindex` attribute. If the `target` element is inside a Shadow DOM, the\n * `tabindex` atribute must be set on the custom element's host element.\n * @param {HTMLElement|string} [target] The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n setTarget(target) {\n this.set(MapProperty.TARGET, target);\n }\n\n /**\n * Set the view for this map.\n * @param {View|Promise} view The view that controls this map.\n * It is also possible to pass a promise that resolves to options for constructing a view. This\n * alternative allows view properties to be resolved by sources or other components that load\n * view-related metadata.\n * @observable\n * @api\n */\n setView(view) {\n if (!view || view instanceof View) {\n this.set(MapProperty.VIEW, view);\n return;\n }\n this.set(MapProperty.VIEW, new View());\n\n const map = this;\n view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n updateSize() {\n const targetElement = this.getTargetElement();\n\n let size = undefined;\n if (targetElement) {\n const computedStyle = getComputedStyle(targetElement);\n const width =\n targetElement.offsetWidth -\n parseFloat(computedStyle['borderLeftWidth']) -\n parseFloat(computedStyle['paddingLeft']) -\n parseFloat(computedStyle['paddingRight']) -\n parseFloat(computedStyle['borderRightWidth']);\n const height =\n targetElement.offsetHeight -\n parseFloat(computedStyle['borderTopWidth']) -\n parseFloat(computedStyle['paddingTop']) -\n parseFloat(computedStyle['paddingBottom']) -\n parseFloat(computedStyle['borderBottomWidth']);\n if (!isNaN(width) && !isNaN(height)) {\n size = [Math.max(0, width), Math.max(0, height)];\n if (\n !hasArea(size) &&\n !!(\n targetElement.offsetWidth ||\n targetElement.offsetHeight ||\n targetElement.getClientRects().length\n )\n ) {\n warn(\n \"No map visible because the map container's width or height are 0.\",\n );\n }\n }\n }\n\n const oldSize = this.getSize();\n if (size && (!oldSize || !equals(size, oldSize))) {\n this.setSize(size);\n this.updateViewportSize_(size);\n }\n }\n\n /**\n * Recomputes the viewport size and save it on the view object (if any)\n * @param {import(\"./size.js\").Size|undefined} size The size.\n * @private\n */\n updateViewportSize_(size) {\n const view = this.getView();\n if (view) {\n view.setViewportSize(size);\n }\n }\n}\n\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n /**\n * @type {HTMLElement|Document}\n */\n let keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget =\n typeof options.keyboardEventTarget === 'string'\n ? document.getElementById(options.keyboardEventTarget)\n : options.keyboardEventTarget;\n }\n\n /**\n * @type {Object}\n */\n const values = {};\n\n const layerGroup =\n options.layers &&\n typeof (/** @type {?} */ (options.layers).getLayers) === 'function'\n ? /** @type {LayerGroup} */ (options.layers)\n : new LayerGroup({\n layers:\n /** @type {Collection|Array} */ (\n options.layers\n ),\n });\n values[MapProperty.LAYERGROUP] = layerGroup;\n\n values[MapProperty.TARGET] = options.target;\n\n values[MapProperty.VIEW] =\n options.view instanceof View ? options.view : new View();\n\n /** @type {Collection} */\n let controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new Collection(options.controls.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.controls).getArray) === 'function',\n 'Expected `controls` to be an array or an `ol/Collection.js`',\n );\n controls = options.controls;\n }\n }\n\n /** @type {Collection} */\n let interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new Collection(options.interactions.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.interactions).getArray) ===\n 'function',\n 'Expected `interactions` to be an array or an `ol/Collection.js`',\n );\n interactions = options.interactions;\n }\n }\n\n /** @type {Collection} */\n let overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new Collection(options.overlays.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.overlays).getArray) === 'function',\n 'Expected `overlays` to be an array or an `ol/Collection.js`',\n );\n overlays = options.overlays;\n }\n } else {\n overlays = new Collection();\n }\n\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values,\n };\n}\nexport default Map;\n", "/**\n * @module ol/Overlay\n */\nimport MapEventType from './MapEventType.js';\nimport BaseObject from './Object.js';\nimport {CLASS_SELECTABLE} from './css.js';\nimport {outerHeight, outerWidth, removeChildren} from './dom.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {containsExtent} from './extent.js';\n\n/**\n * @typedef {'bottom-left' | 'bottom-center' | 'bottom-right' | 'center-left' | 'center-center' | 'center-right' | 'top-left' | 'top-center' | 'top-right'} Positioning\n * The overlay position: `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, or `'top-right'`.\n */\n\n/**\n * @typedef {Object} Options\n * @property {number|string} [id] Set the overlay id. The overlay id can be used\n * with the {@link module:ol/Map~Map#getOverlayById} method.\n * @property {HTMLElement} [element] The overlay element.\n * @property {Array} [offset=[0, 0]] Offsets in pixels used when positioning\n * the overlay. The first element in the\n * array is the horizontal offset. A positive value shifts the overlay right.\n * The second element in the array is the vertical offset. A positive value\n * shifts the overlay down.\n * @property {import(\"./coordinate.js\").Coordinate} [position] The overlay position\n * in map projection.\n * @property {Positioning} [positioning='top-left'] Defines how\n * the overlay is actually positioned with respect to its `position` property.\n * Possible values are `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, and `'top-right'`.\n * @property {boolean} [stopEvent=true] Whether event propagation to the map\n * viewport should be stopped. If `true` the overlay is placed in the same\n * container as that of the controls (CSS class name\n * `ol-overlaycontainer-stopevent`); if `false` it is placed in the container\n * with CSS class name specified by the `className` property.\n * @property {boolean} [insertFirst=true] Whether the overlay is inserted first\n * in the overlay container, or appended. If the overlay is placed in the same\n * container as that of the controls (see the `stopEvent` option) you will\n * probably set `insertFirst` to `true` so the overlay is displayed below the\n * controls.\n * @property {PanIntoViewOptions|boolean} [autoPan=false] Pan the map when calling\n * `setPosition`, so that the overlay is entirely visible in the current viewport.\n * @property {string} [className='ol-overlay-container ol-selectable'] CSS class\n * name.\n */\n\n/**\n * @typedef {Object} PanOptions\n * @property {number} [duration=1000] The duration of the animation in\n * milliseconds.\n * @property {function(number):number} [easing] The easing function to use. Can\n * be one from {@link module:ol/easing} or a custom function.\n * Default is {@link module:ol/easing.inAndOut}.\n */\n\n/**\n * @typedef {Object} PanIntoViewOptions\n * @property {PanOptions} [animation={}] The animation parameters for the pan\n * @property {number} [margin=20] The margin (in pixels) between the\n * overlay and the borders of the map when panning into view.\n */\n\n/**\n * @enum {string}\n * @protected\n */\nconst Property = {\n ELEMENT: 'element',\n MAP: 'map',\n OFFSET: 'offset',\n POSITION: 'position',\n POSITIONING: 'positioning',\n};\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:element'|'change:map'|'change:offset'|'change:position'|\n * 'change:positioning'} OverlayObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} OverlayOnSignature\n */\n\n/**\n * @classdesc\n * An element to be displayed over the map and attached to a single map\n * location. Like {@link module:ol/control/Control~Control}, Overlays are\n * visible widgets. Unlike Controls, they are not in a fixed position on the\n * screen, but are tied to a geographical coordinate, so panning the map will\n * move an Overlay but not a Control.\n *\n * Example:\n *\n * import Overlay from 'ol/Overlay.js';\n *\n * // ...\n * const popup = new Overlay({\n * element: document.getElementById('popup'),\n * });\n * popup.setPosition(coordinate);\n * map.addOverlay(popup);\n *\n * @api\n */\nclass Overlay extends BaseObject {\n /**\n * @param {Options} options Overlay options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {OverlayOnSignature}\n */\n this.on;\n\n /***\n * @type {OverlayOnSignature}\n */\n this.once;\n\n /***\n * @type {OverlayOnSignature}\n */\n this.un;\n\n /**\n * @protected\n * @type {Options}\n */\n this.options = options;\n\n /**\n * @protected\n * @type {number|string|undefined}\n */\n this.id = options.id;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.insertFirst =\n options.insertFirst !== undefined ? options.insertFirst : true;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.stopEvent = options.stopEvent !== undefined ? options.stopEvent : true;\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = document.createElement('div');\n this.element.className =\n options.className !== undefined\n ? options.className\n : 'ol-overlay-container ' + CLASS_SELECTABLE;\n this.element.style.position = 'absolute';\n this.element.style.pointerEvents = 'auto';\n\n /**\n * @protected\n * @type {PanIntoViewOptions|undefined}\n */\n this.autoPan = options.autoPan === true ? {} : options.autoPan || undefined;\n\n /**\n * @protected\n * @type {{transform_: string,\n * visible: boolean}}\n */\n this.rendered = {\n transform_: '',\n visible: true,\n };\n\n /**\n * @protected\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.mapPostrenderListenerKey = null;\n\n this.addChangeListener(Property.ELEMENT, this.handleElementChanged);\n this.addChangeListener(Property.MAP, this.handleMapChanged);\n this.addChangeListener(Property.OFFSET, this.handleOffsetChanged);\n this.addChangeListener(Property.POSITION, this.handlePositionChanged);\n this.addChangeListener(Property.POSITIONING, this.handlePositioningChanged);\n\n if (options.element !== undefined) {\n this.setElement(options.element);\n }\n\n this.setOffset(options.offset !== undefined ? options.offset : [0, 0]);\n\n this.setPositioning(options.positioning || 'top-left');\n\n if (options.position !== undefined) {\n this.setPosition(options.position);\n }\n }\n\n /**\n * Get the DOM element of this overlay.\n * @return {HTMLElement|undefined} The Element containing the overlay.\n * @observable\n * @api\n */\n getElement() {\n return /** @type {HTMLElement|undefined} */ (this.get(Property.ELEMENT));\n }\n\n /**\n * Get the overlay identifier which is set on constructor.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id;\n }\n\n /**\n * Get the map associated with this overlay.\n * @return {import(\"./Map.js\").default|null} The map that the\n * overlay is part of.\n * @observable\n * @api\n */\n getMap() {\n return /** @type {import(\"./Map.js\").default|null} */ (\n this.get(Property.MAP) || null\n );\n }\n\n /**\n * Get the offset of this overlay.\n * @return {Array} The offset.\n * @observable\n * @api\n */\n getOffset() {\n return /** @type {Array} */ (this.get(Property.OFFSET));\n }\n\n /**\n * Get the current position of this overlay.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The spatial point that the overlay is\n * anchored at.\n * @observable\n * @api\n */\n getPosition() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(Property.POSITION)\n );\n }\n\n /**\n * Get the current positioning of this overlay.\n * @return {Positioning} How the overlay is positioned\n * relative to its point on the map.\n * @observable\n * @api\n */\n getPositioning() {\n return /** @type {Positioning} */ (this.get(Property.POSITIONING));\n }\n\n /**\n * @protected\n */\n handleElementChanged() {\n removeChildren(this.element);\n const element = this.getElement();\n if (element) {\n this.element.appendChild(element);\n }\n }\n\n /**\n * @protected\n */\n handleMapChanged() {\n if (this.mapPostrenderListenerKey) {\n this.element?.remove();\n unlistenByKey(this.mapPostrenderListenerKey);\n this.mapPostrenderListenerKey = null;\n }\n const map = this.getMap();\n if (map) {\n this.mapPostrenderListenerKey = listen(\n map,\n MapEventType.POSTRENDER,\n this.render,\n this,\n );\n this.updatePixelPosition();\n const container = this.stopEvent\n ? map.getOverlayContainerStopEvent()\n : map.getOverlayContainer();\n if (this.insertFirst) {\n container.insertBefore(this.element, container.childNodes[0] || null);\n } else {\n container.appendChild(this.element);\n }\n this.performAutoPan();\n }\n }\n\n /**\n * @protected\n */\n render() {\n this.updatePixelPosition();\n }\n\n /**\n * @protected\n */\n handleOffsetChanged() {\n this.updatePixelPosition();\n }\n\n /**\n * @protected\n */\n handlePositionChanged() {\n this.updatePixelPosition();\n this.performAutoPan();\n }\n\n /**\n * @protected\n */\n handlePositioningChanged() {\n this.updatePixelPosition();\n }\n\n /**\n * Set the DOM element to be associated with this overlay.\n * @param {HTMLElement|undefined} element The Element containing the overlay.\n * @observable\n * @api\n */\n setElement(element) {\n this.set(Property.ELEMENT, element);\n }\n\n /**\n * Set the map to be associated with this overlay.\n * @param {import(\"./Map.js\").default|null} map The map that the\n * overlay is part of. Pass `null` to just remove the overlay from the current map.\n * @observable\n * @api\n */\n setMap(map) {\n this.set(Property.MAP, map);\n }\n\n /**\n * Set the offset for this overlay.\n * @param {Array} offset Offset.\n * @observable\n * @api\n */\n setOffset(offset) {\n this.set(Property.OFFSET, offset);\n }\n\n /**\n * Set the position for this overlay. If the position is `undefined` the\n * overlay is hidden.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} position The spatial point that the overlay\n * is anchored at.\n * @observable\n * @api\n */\n setPosition(position) {\n this.set(Property.POSITION, position);\n }\n\n /**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary) using the configured autoPan parameters\n * @protected\n */\n performAutoPan() {\n if (this.autoPan) {\n this.panIntoView(this.autoPan);\n }\n }\n\n /**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary).\n * @param {PanIntoViewOptions} [panIntoViewOptions] Options for the pan action\n * @api\n */\n panIntoView(panIntoViewOptions) {\n const map = this.getMap();\n\n if (!map || !map.getTargetElement() || !this.get(Property.POSITION)) {\n return;\n }\n\n const mapRect = this.getRect(map.getTargetElement(), map.getSize());\n const element = this.getElement();\n const overlayRect = this.getRect(element, [\n outerWidth(element),\n outerHeight(element),\n ]);\n\n panIntoViewOptions = panIntoViewOptions || {};\n\n const myMargin =\n panIntoViewOptions.margin === undefined ? 20 : panIntoViewOptions.margin;\n if (!containsExtent(mapRect, overlayRect)) {\n // the overlay is not completely inside the viewport, so pan the map\n const offsetLeft = overlayRect[0] - mapRect[0];\n const offsetRight = mapRect[2] - overlayRect[2];\n const offsetTop = overlayRect[1] - mapRect[1];\n const offsetBottom = mapRect[3] - overlayRect[3];\n\n const delta = [0, 0];\n if (offsetLeft < 0) {\n // move map to the left\n delta[0] = offsetLeft - myMargin;\n } else if (offsetRight < 0) {\n // move map to the right\n delta[0] = Math.abs(offsetRight) + myMargin;\n }\n if (offsetTop < 0) {\n // move map up\n delta[1] = offsetTop - myMargin;\n } else if (offsetBottom < 0) {\n // move map down\n delta[1] = Math.abs(offsetBottom) + myMargin;\n }\n\n if (delta[0] !== 0 || delta[1] !== 0) {\n const center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n map.getView().getCenterInternal()\n );\n const centerPx = map.getPixelFromCoordinateInternal(center);\n if (!centerPx) {\n return;\n }\n const newCenterPx = [centerPx[0] + delta[0], centerPx[1] + delta[1]];\n\n const panOptions = panIntoViewOptions.animation || {};\n map.getView().animateInternal({\n center: map.getCoordinateFromPixelInternal(newCenterPx),\n duration: panOptions.duration,\n easing: panOptions.easing,\n });\n }\n }\n }\n\n /**\n * Get the extent of an element relative to the document\n * @param {HTMLElement} element The element.\n * @param {import(\"./size.js\").Size} size The size of the element.\n * @return {import(\"./extent.js\").Extent} The extent.\n * @protected\n */\n getRect(element, size) {\n const box = element.getBoundingClientRect();\n const offsetX = box.left + window.pageXOffset;\n const offsetY = box.top + window.pageYOffset;\n return [offsetX, offsetY, offsetX + size[0], offsetY + size[1]];\n }\n\n /**\n * Set the positioning for this overlay.\n * @param {Positioning} positioning how the overlay is\n * positioned relative to its point on the map.\n * @observable\n * @api\n */\n setPositioning(positioning) {\n this.set(Property.POSITIONING, positioning);\n }\n\n /**\n * Modify the visibility of the element.\n * @param {boolean} visible Element visibility.\n * @protected\n */\n setVisible(visible) {\n if (this.rendered.visible !== visible) {\n this.element.style.display = visible ? '' : 'none';\n this.rendered.visible = visible;\n }\n }\n\n /**\n * Update pixel position.\n * @protected\n */\n updatePixelPosition() {\n const map = this.getMap();\n const position = this.getPosition();\n if (!map || !map.isRendered() || !position) {\n this.setVisible(false);\n return;\n }\n\n const pixel = map.getPixelFromCoordinate(position);\n const mapSize = map.getSize();\n this.updateRenderedPosition(pixel, mapSize);\n }\n\n /**\n * @param {import(\"./pixel.js\").Pixel} pixel The pixel location.\n * @param {import(\"./size.js\").Size|undefined} mapSize The map size.\n * @protected\n */\n updateRenderedPosition(pixel, mapSize) {\n const style = this.element.style;\n const offset = this.getOffset();\n\n const positioning = this.getPositioning();\n\n this.setVisible(true);\n\n const x = Math.round(pixel[0] + offset[0]) + 'px';\n const y = Math.round(pixel[1] + offset[1]) + 'px';\n let posX = '0%';\n let posY = '0%';\n if (\n positioning == 'bottom-right' ||\n positioning == 'center-right' ||\n positioning == 'top-right'\n ) {\n posX = '-100%';\n } else if (\n positioning == 'bottom-center' ||\n positioning == 'center-center' ||\n positioning == 'top-center'\n ) {\n posX = '-50%';\n }\n if (\n positioning == 'bottom-left' ||\n positioning == 'bottom-center' ||\n positioning == 'bottom-right'\n ) {\n posY = '-100%';\n } else if (\n positioning == 'center-left' ||\n positioning == 'center-center' ||\n positioning == 'center-right'\n ) {\n posY = '-50%';\n }\n const transform = `translate(${posX}, ${posY}) translate(${x}, ${y})`;\n if (this.rendered.transform_ != transform) {\n this.rendered.transform_ = transform;\n style.transform = transform;\n }\n }\n\n /**\n * returns the options this Overlay has been created with\n * @return {Options} overlay options\n */\n getOptions() {\n return this.options;\n }\n}\n\nexport default Overlay;\n", "/**\n * @module ol/VectorRenderTile\n */\nimport Tile from './Tile.js';\nimport {createCanvasContext2D, releaseCanvas} from './dom.js';\nimport {getUid} from './util.js';\n\n/**\n * @typedef {Object} ReplayState\n * @property {boolean} dirty Dirty.\n * @property {null|import(\"./render.js\").OrderFunction} renderedRenderOrder RenderedRenderOrder.\n * @property {number} renderedTileRevision RenderedTileRevision.\n * @property {number} renderedResolution RenderedResolution.\n * @property {number} renderedRevision RenderedRevision.\n * @property {number} renderedTileResolution RenderedTileResolution.\n * @property {number} renderedTileZ RenderedTileZ.\n */\n\n/**\n * @type {Array}\n */\nconst canvasPool = [];\n\nclass VectorRenderTile extends Tile {\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {import(\"./tilecoord.js\").TileCoord} urlTileCoord Wrapped tile coordinate for source urls.\n * @param {function(VectorRenderTile):Array} getSourceTiles Function.\n * @param {function(VectorRenderTile):void} removeSourceTiles Function.\n */\n constructor(\n tileCoord,\n state,\n urlTileCoord,\n getSourceTiles,\n removeSourceTiles,\n ) {\n super(tileCoord, state, {transition: 0});\n\n /**\n * @private\n * @type {CanvasRenderingContext2D|null}\n */\n this.context_ = null;\n\n /**\n * Executor groups. Read/written by the renderer.\n * @type {Object>}\n */\n this.executorGroups = {};\n\n /**\n * Number of loading source tiles. Read/written by the source.\n * @type {number}\n */\n this.loadingSourceTiles = 0;\n\n /**\n * @type {Object}\n */\n this.hitDetectionImageData = {};\n\n /**\n * @private\n * @type {!Object}\n */\n this.replayState_ = {};\n\n /**\n * @type {Array}\n */\n this.sourceTiles = [];\n\n /**\n * @type {Object}\n */\n this.errorTileKeys = {};\n\n /**\n * @type {number}\n */\n this.wantedResolution;\n\n /**\n * @type {!function():Array}\n */\n this.getSourceTiles = getSourceTiles.bind(undefined, this);\n\n /**\n * @type {!function(VectorRenderTile):void}\n * @private\n */\n this.removeSourceTiles_ = removeSourceTiles;\n\n /**\n * @type {import(\"./tilecoord.js\").TileCoord}\n */\n this.wrappedTileCoord = urlTileCoord;\n }\n\n /**\n * @return {CanvasRenderingContext2D} The rendering context.\n */\n getContext() {\n if (!this.context_) {\n this.context_ = createCanvasContext2D(1, 1, canvasPool);\n }\n return this.context_;\n }\n\n /**\n * @return {boolean} Tile has a rendering context.\n */\n hasContext() {\n return !!this.context_;\n }\n\n /**\n * Get the Canvas for this tile.\n * @return {HTMLCanvasElement} Canvas.\n */\n getImage() {\n return this.hasContext() ? this.getContext().canvas : null;\n }\n\n /**\n * @param {import(\"./layer/Layer.js\").default} layer Layer.\n * @return {ReplayState} The replay state.\n */\n getReplayState(layer) {\n const key = getUid(layer);\n if (!(key in this.replayState_)) {\n this.replayState_[key] = {\n dirty: false,\n renderedRenderOrder: null,\n renderedResolution: NaN,\n renderedRevision: -1,\n renderedTileResolution: NaN,\n renderedTileRevision: -1,\n renderedTileZ: -1,\n };\n }\n return this.replayState_[key];\n }\n\n /**\n * Load the tile.\n * @override\n */\n load() {\n this.getSourceTiles();\n }\n\n /**\n * Remove from the cache due to expiry\n * @override\n */\n release() {\n if (this.context_) {\n releaseCanvas(this.context_);\n canvasPool.push(this.context_.canvas);\n this.context_ = null;\n }\n this.removeSourceTiles_(this);\n this.sourceTiles.length = 0;\n super.release();\n }\n}\n\nexport default VectorRenderTile;\n", "/**\n * @module ol/VectorTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\n\n/**\n * @template {import('./Feature.js').FeatureLike} FeatureType\n */\nclass VectorTile extends Tile {\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {string} src Data source url.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @param {import(\"./Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n * @param {import(\"./Tile.js\").Options} [options] Tile options.\n */\n constructor(tileCoord, state, src, format, tileLoadFunction, options) {\n super(tileCoord, state, options);\n\n /**\n * Extent of this tile; set by the source.\n * @type {import(\"./extent.js\").Extent}\n */\n this.extent = null;\n\n /**\n * @private\n * @type {import(\"./format/Feature.js\").default}\n */\n this.format_ = format;\n\n /**\n * @private\n * @type {Array}\n */\n this.features_ = null;\n\n /**\n * @private\n * @type {import(\"./featureloader.js\").FeatureLoader}\n */\n this.loader_;\n\n /**\n * Feature projection of this tile; set by the source.\n * @type {import(\"./proj/Projection.js\").default}\n */\n this.projection = null;\n\n /**\n * Resolution of this tile; set by the source.\n * @type {number}\n */\n this.resolution;\n\n /**\n * @private\n * @type {import(\"./Tile.js\").LoadFunction}\n */\n this.tileLoadFunction_ = tileLoadFunction;\n\n /**\n * @private\n * @type {string}\n */\n this.url_ = src;\n\n this.key = src;\n }\n\n /**\n * @return {string} Tile url.\n */\n getTileUrl() {\n return this.url_;\n }\n\n /**\n * Get the feature format assigned for reading this tile's features.\n * @return {import(\"./format/Feature.js\").default} Feature format.\n * @api\n */\n getFormat() {\n return this.format_;\n }\n\n /**\n * Get the features for this tile. Geometries will be in the view projection.\n * @return {Array} Features.\n * @api\n */\n getFeatures() {\n return this.features_;\n }\n\n /**\n * Load not yet loaded URI.\n * @override\n */\n load() {\n if (this.state == TileState.IDLE) {\n this.setState(TileState.LOADING);\n this.tileLoadFunction_(this, this.url_);\n if (this.loader_) {\n this.loader_(this.extent, this.resolution, this.projection);\n }\n }\n }\n\n /**\n * Handler for successful tile load.\n * @param {Array} features The loaded features.\n * @param {import(\"./proj/Projection.js\").default} dataProjection Data projection.\n */\n onLoad(features, dataProjection) {\n this.setFeatures(features);\n }\n\n /**\n * Handler for tile load errors.\n */\n onError() {\n this.setState(TileState.ERROR);\n }\n\n /**\n * Function for use in a {@link module:ol/source/VectorTile~VectorTile}'s `tileLoadFunction`.\n * Sets the features for the tile.\n * @param {Array} features Features.\n * @api\n */\n setFeatures(features) {\n this.features_ = features;\n this.setState(TileState.LOADED);\n }\n\n /**\n * Set the feature loader for reading this tile's features.\n * @param {import(\"./featureloader.js\").FeatureLoader} loader Feature loader.\n * @api\n */\n setLoader(loader) {\n this.loader_ = loader;\n }\n}\n\nexport default VectorTile;\n"], - "mappings": "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", - "names": ["Vector_default", "EventType_default", "equals", "clone", "wrapX", "EventType_default", "EventType_default", "newEvent", "centroid", "map", "defaults", "Property", "wrapX", "callback", "Event_default", "EventType_default", "defaults", "EventType_default", "equals", "Map_default", "Property"] + "sources": ["../../ol/Geolocation.js", "../../ol/geom/flat/geodesic.js", "../../ol/render.js", "../../ol/layer/Graticule.js", "../../ol/ImageCanvas.js", "../../ol/pointer/EventType.js", "../../ol/MapBrowserEventHandler.js", "../../ol/MapEventType.js", "../../ol/MapProperty.js", "../../ol/structs/PriorityQueue.js", "../../ol/TileQueue.js", "../../ol/control/Control.js", "../../ol/control/Attribution.js", "../../ol/control/Rotate.js", "../../ol/control/Zoom.js", "../../ol/control/defaults.js", "../../ol/layer/Group.js", "../../ol/renderer/Map.js", "../../ol/renderer/Composite.js", "../../ol/Map.js", "../../ol/Overlay.js", "../../ol/VectorRenderTile.js", "../../ol/VectorTile.js"], + "sourcesContent": ["/**\n * @module ol/Geolocation\n */\nimport BaseObject from './Object.js';\nimport BaseEvent from './events/Event.js';\nimport {circular as circularPolygon} from './geom/Polygon.js';\nimport {toRadians} from './math.js';\nimport {\n get as getProjection,\n getTransformFromProjections,\n identityTransform,\n} from './proj.js';\n\n/**\n * @enum {string}\n */\nconst Property = {\n ACCURACY: 'accuracy',\n ACCURACY_GEOMETRY: 'accuracyGeometry',\n ALTITUDE: 'altitude',\n ALTITUDE_ACCURACY: 'altitudeAccuracy',\n HEADING: 'heading',\n POSITION: 'position',\n PROJECTION: 'projection',\n SPEED: 'speed',\n TRACKING: 'tracking',\n TRACKING_OPTIONS: 'trackingOptions',\n};\n\n/**\n * @enum string\n */\nconst GeolocationErrorType = {\n /**\n * Triggered when a `GeolocationPositionError` occurs.\n * @event module:ol/Geolocation.GeolocationError#error\n * @api\n */\n ERROR: 'error',\n};\n\n/**\n * @classdesc\n * Events emitted on [GeolocationPositionError](https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPositionError).\n */\nexport class GeolocationError extends BaseEvent {\n /**\n * @param {GeolocationPositionError} error error object.\n */\n constructor(error) {\n super(GeolocationErrorType.ERROR);\n\n /**\n * Code of the underlying `GeolocationPositionError`.\n * @type {number}\n * @api\n */\n this.code = error.code;\n\n /**\n * Message of the underlying `GeolocationPositionError`.\n * @type {string}\n * @api\n */\n this.message = error.message;\n }\n}\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [tracking=false] Start Tracking right after\n * instantiation.\n * @property {PositionOptions} [trackingOptions] Tracking options.\n * See https://www.w3.org/TR/geolocation-API/#position_options_interface.\n * @property {import(\"./proj.js\").ProjectionLike} [projection] The projection the position\n * is reported in.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:accuracy'|'change:accuracyGeometry'|'change:altitude'|\n * 'change:altitudeAccuracy'|'change:heading'|'change:position'|'change:projection'|'change:speed'|'change:tracking'|\n * 'change:trackingOptions'} GeolocationObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature<'error', GeolocationError, Return> &\n * import(\"./Observable\").CombinedOnSignature &\n * import(\"./Observable\").OnSignature} GeolocationOnSignature\n */\n\n/**\n * @classdesc\n * Helper class for providing HTML5 Geolocation capabilities.\n * The [Geolocation API](https://www.w3.org/TR/geolocation-API/)\n * is used to locate a user's position.\n *\n * To get notified of position changes and errors, register listeners for the generic\n * `change` event and the `error` event on your instance of {@link module:ol/Geolocation~Geolocation}.\n *\n * Example:\n *\n * const geolocation = new Geolocation({\n * // take the projection to use from the map's view\n * projection: view.getProjection()\n * });\n * // listen to changes in position\n * geolocation.on('change', function(evt) {\n * console.log(geolocation.getPosition());\n * });\n * // listen to error\n * geolocation.on('error', function(evt) {\n * window.console.log(evt.message);\n * });\n *\n * @fires GeolocationError\n * @api\n */\nclass Geolocation extends BaseObject {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {GeolocationOnSignature}\n */\n this.on;\n\n /***\n * @type {GeolocationOnSignature}\n */\n this.once;\n\n /***\n * @type {GeolocationOnSignature}\n */\n this.un;\n\n options = options || {};\n\n /**\n * The unprojected (EPSG:4326) device position.\n * @private\n * @type {?import(\"./coordinate.js\").Coordinate}\n */\n this.position_ = null;\n\n /**\n * @private\n * @type {import(\"./proj.js\").TransformFunction}\n */\n this.transform_ = identityTransform;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.watchId_ = undefined;\n\n this.addChangeListener(Property.PROJECTION, this.handleProjectionChanged_);\n this.addChangeListener(Property.TRACKING, this.handleTrackingChanged_);\n\n if (options.projection !== undefined) {\n this.setProjection(options.projection);\n }\n if (options.trackingOptions !== undefined) {\n this.setTrackingOptions(options.trackingOptions);\n }\n\n this.setTracking(options.tracking !== undefined ? options.tracking : false);\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.setTracking(false);\n super.disposeInternal();\n }\n\n /**\n * @private\n */\n handleProjectionChanged_() {\n const projection = this.getProjection();\n if (projection) {\n this.transform_ = getTransformFromProjections(\n getProjection('EPSG:4326'),\n projection,\n );\n if (this.position_) {\n this.set(Property.POSITION, this.transform_(this.position_));\n }\n }\n }\n\n /**\n * @private\n */\n handleTrackingChanged_() {\n if ('geolocation' in navigator) {\n const tracking = this.getTracking();\n if (tracking && this.watchId_ === undefined) {\n this.watchId_ = navigator.geolocation.watchPosition(\n this.positionChange_.bind(this),\n this.positionError_.bind(this),\n this.getTrackingOptions(),\n );\n } else if (!tracking && this.watchId_ !== undefined) {\n navigator.geolocation.clearWatch(this.watchId_);\n this.watchId_ = undefined;\n }\n }\n }\n\n /**\n * @private\n * @param {GeolocationPosition} position position event.\n */\n positionChange_(position) {\n const coords = position.coords;\n this.set(Property.ACCURACY, coords.accuracy);\n this.set(\n Property.ALTITUDE,\n coords.altitude === null ? undefined : coords.altitude,\n );\n this.set(\n Property.ALTITUDE_ACCURACY,\n coords.altitudeAccuracy === null ? undefined : coords.altitudeAccuracy,\n );\n this.set(\n Property.HEADING,\n coords.heading === null ? undefined : toRadians(coords.heading),\n );\n if (!this.position_) {\n this.position_ = [coords.longitude, coords.latitude];\n } else {\n this.position_[0] = coords.longitude;\n this.position_[1] = coords.latitude;\n }\n const projectedPosition = this.transform_(this.position_);\n this.set(Property.POSITION, projectedPosition.slice());\n this.set(Property.SPEED, coords.speed === null ? undefined : coords.speed);\n const geometry = circularPolygon(this.position_, coords.accuracy);\n geometry.applyTransform(this.transform_);\n this.set(Property.ACCURACY_GEOMETRY, geometry);\n this.changed();\n }\n\n /**\n * @private\n * @param {GeolocationPositionError} error error object.\n */\n positionError_(error) {\n this.dispatchEvent(new GeolocationError(error));\n }\n\n /**\n * Get the accuracy of the position in meters.\n * @return {number|undefined} The accuracy of the position measurement in\n * meters.\n * @observable\n * @api\n */\n getAccuracy() {\n return /** @type {number|undefined} */ (this.get(Property.ACCURACY));\n }\n\n /**\n * Get a geometry of the position accuracy.\n * @return {?import(\"./geom/Polygon.js\").default} A geometry of the position accuracy.\n * @observable\n * @api\n */\n getAccuracyGeometry() {\n return /** @type {?import(\"./geom/Polygon.js\").default} */ (\n this.get(Property.ACCURACY_GEOMETRY) || null\n );\n }\n\n /**\n * Get the altitude associated with the position.\n * @return {number|undefined} The altitude of the position in meters above mean\n * sea level.\n * @observable\n * @api\n */\n getAltitude() {\n return /** @type {number|undefined} */ (this.get(Property.ALTITUDE));\n }\n\n /**\n * Get the altitude accuracy of the position.\n * @return {number|undefined} The accuracy of the altitude measurement in\n * meters.\n * @observable\n * @api\n */\n getAltitudeAccuracy() {\n return /** @type {number|undefined} */ (\n this.get(Property.ALTITUDE_ACCURACY)\n );\n }\n\n /**\n * Get the heading as radians clockwise from North.\n * Note: depending on the browser, the heading is only defined if the `enableHighAccuracy`\n * is set to `true` in the tracking options.\n * @return {number|undefined} The heading of the device in radians from north.\n * @observable\n * @api\n */\n getHeading() {\n return /** @type {number|undefined} */ (this.get(Property.HEADING));\n }\n\n /**\n * Get the position of the device.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The current position of the device reported\n * in the current projection.\n * @observable\n * @api\n */\n getPosition() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(Property.POSITION)\n );\n }\n\n /**\n * Get the projection associated with the position.\n * @return {import(\"./proj/Projection.js\").default|undefined} The projection the position is\n * reported in.\n * @observable\n * @api\n */\n getProjection() {\n return /** @type {import(\"./proj/Projection.js\").default|undefined} */ (\n this.get(Property.PROJECTION)\n );\n }\n\n /**\n * Get the speed in meters per second.\n * @return {number|undefined} The instantaneous speed of the device in meters\n * per second.\n * @observable\n * @api\n */\n getSpeed() {\n return /** @type {number|undefined} */ (this.get(Property.SPEED));\n }\n\n /**\n * Determine if the device location is being tracked.\n * @return {boolean} The device location is being tracked.\n * @observable\n * @api\n */\n getTracking() {\n return /** @type {boolean} */ (this.get(Property.TRACKING));\n }\n\n /**\n * Get the tracking options.\n * See https://www.w3.org/TR/geolocation-API/#position-options.\n * @return {PositionOptions|undefined} PositionOptions as defined by\n * the [HTML5 Geolocation spec\n * ](https://www.w3.org/TR/geolocation-API/#position_options_interface).\n * @observable\n * @api\n */\n getTrackingOptions() {\n return /** @type {PositionOptions|undefined} */ (\n this.get(Property.TRACKING_OPTIONS)\n );\n }\n\n /**\n * Set the projection to use for transforming the coordinates.\n * @param {import(\"./proj.js\").ProjectionLike} projection The projection the position is\n * reported in.\n * @observable\n * @api\n */\n setProjection(projection) {\n this.set(Property.PROJECTION, getProjection(projection));\n }\n\n /**\n * Enable or disable tracking.\n * @param {boolean} tracking Enable tracking.\n * @observable\n * @api\n */\n setTracking(tracking) {\n this.set(Property.TRACKING, tracking);\n }\n\n /**\n * Set the tracking options.\n * See http://www.w3.org/TR/geolocation-API/#position-options.\n * @param {PositionOptions} options PositionOptions as defined by the\n * [HTML5 Geolocation spec\n * ](http://www.w3.org/TR/geolocation-API/#position_options_interface).\n * @observable\n * @api\n */\n setTrackingOptions(options) {\n this.set(Property.TRACKING_OPTIONS, options);\n }\n}\n\nexport default Geolocation;\n", "/**\n * @module ol/geom/flat/geodesic\n */\nimport {squaredSegmentDistance, toDegrees, toRadians} from '../../math.js';\nimport {get as getProjection, getTransform} from '../../proj.js';\n\n/**\n * @param {function(number): import(\"../../coordinate.js\").Coordinate} interpolate Interpolate function.\n * @param {import(\"../../proj.js\").TransformFunction} transform Transform from longitude/latitude to\n * projected coordinates.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array} Flat coordinates.\n */\nfunction line(interpolate, transform, squaredTolerance) {\n // FIXME reduce garbage generation\n // FIXME optimize stack operations\n\n /** @type {Array} */\n const flatCoordinates = [];\n\n let geoA = interpolate(0);\n let geoB = interpolate(1);\n\n let a = transform(geoA);\n let b = transform(geoB);\n\n /** @type {Array} */\n const geoStack = [geoB, geoA];\n /** @type {Array} */\n const stack = [b, a];\n /** @type {Array} */\n const fractionStack = [1, 0];\n\n /** @type {!Object} */\n const fractions = {};\n\n let maxIterations = 1e5;\n let geoM, m, fracA, fracB, fracM, key;\n\n while (--maxIterations > 0 && fractionStack.length > 0) {\n // Pop the a coordinate off the stack\n fracA = fractionStack.pop();\n geoA = geoStack.pop();\n a = stack.pop();\n // Add the a coordinate if it has not been added yet\n key = fracA.toString();\n if (!(key in fractions)) {\n flatCoordinates.push(a[0], a[1]);\n fractions[key] = true;\n }\n // Pop the b coordinate off the stack\n fracB = fractionStack.pop();\n geoB = geoStack.pop();\n b = stack.pop();\n // Find the m point between the a and b coordinates\n fracM = (fracA + fracB) / 2;\n geoM = interpolate(fracM);\n m = transform(geoM);\n if (\n squaredSegmentDistance(m[0], m[1], a[0], a[1], b[0], b[1]) <\n squaredTolerance\n ) {\n // If the m point is sufficiently close to the straight line, then we\n // discard it. Just use the b coordinate and move on to the next line\n // segment.\n flatCoordinates.push(b[0], b[1]);\n key = fracB.toString();\n fractions[key] = true;\n } else {\n // Otherwise, we need to subdivide the current line segment. Split it\n // into two and push the two line segments onto the stack.\n fractionStack.push(fracB, fracM, fracM, fracA);\n stack.push(b, m, m, a);\n geoStack.push(geoB, geoM, geoM, geoA);\n }\n }\n\n return flatCoordinates;\n}\n\n/**\n * Generate a great-circle arcs between two lat/lon points.\n * @param {number} lon1 Longitude 1 in degrees.\n * @param {number} lat1 Latitude 1 in degrees.\n * @param {number} lon2 Longitude 2 in degrees.\n * @param {number} lat2 Latitude 2 in degrees.\n * @param {import(\"../../proj/Projection.js\").default} projection Projection.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array} Flat coordinates.\n */\nexport function greatCircleArc(\n lon1,\n lat1,\n lon2,\n lat2,\n projection,\n squaredTolerance,\n) {\n const geoProjection = getProjection('EPSG:4326');\n\n const cosLat1 = Math.cos(toRadians(lat1));\n const sinLat1 = Math.sin(toRadians(lat1));\n const cosLat2 = Math.cos(toRadians(lat2));\n const sinLat2 = Math.sin(toRadians(lat2));\n const cosDeltaLon = Math.cos(toRadians(lon2 - lon1));\n const sinDeltaLon = Math.sin(toRadians(lon2 - lon1));\n const d = sinLat1 * sinLat2 + cosLat1 * cosLat2 * cosDeltaLon;\n\n return line(\n /**\n * @param {number} frac Fraction.\n * @return {import(\"../../coordinate.js\").Coordinate} Coordinate.\n */\n function (frac) {\n if (1 <= d) {\n return [lon2, lat2];\n }\n const D = frac * Math.acos(d);\n const cosD = Math.cos(D);\n const sinD = Math.sin(D);\n const y = sinDeltaLon * cosLat2;\n const x = cosLat1 * sinLat2 - sinLat1 * cosLat2 * cosDeltaLon;\n const theta = Math.atan2(y, x);\n const lat = Math.asin(sinLat1 * cosD + cosLat1 * sinD * Math.cos(theta));\n const lon =\n toRadians(lon1) +\n Math.atan2(\n Math.sin(theta) * sinD * cosLat1,\n cosD - sinLat1 * Math.sin(lat),\n );\n return [toDegrees(lon), toDegrees(lat)];\n },\n getTransform(geoProjection, projection),\n squaredTolerance,\n );\n}\n\n/**\n * Generate a meridian (line at constant longitude).\n * @param {number} lon Longitude.\n * @param {number} lat1 Latitude 1.\n * @param {number} lat2 Latitude 2.\n * @param {import(\"../../proj/Projection.js\").default} projection Projection.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array} Flat coordinates.\n */\nexport function meridian(lon, lat1, lat2, projection, squaredTolerance) {\n const epsg4326Projection = getProjection('EPSG:4326');\n return line(\n /**\n * @param {number} frac Fraction.\n * @return {import(\"../../coordinate.js\").Coordinate} Coordinate.\n */\n function (frac) {\n return [lon, lat1 + (lat2 - lat1) * frac];\n },\n getTransform(epsg4326Projection, projection),\n squaredTolerance,\n );\n}\n\n/**\n * Generate a parallel (line at constant latitude).\n * @param {number} lat Latitude.\n * @param {number} lon1 Longitude 1.\n * @param {number} lon2 Longitude 2.\n * @param {import(\"../../proj/Projection.js\").default} projection Projection.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Array} Flat coordinates.\n */\nexport function parallel(lat, lon1, lon2, projection, squaredTolerance) {\n const epsg4326Projection = getProjection('EPSG:4326');\n return line(\n /**\n * @param {number} frac Fraction.\n * @return {import(\"../../coordinate.js\").Coordinate} Coordinate.\n */\n function (frac) {\n return [lon1 + (lon2 - lon1) * frac, lat];\n },\n getTransform(epsg4326Projection, projection),\n squaredTolerance,\n );\n}\n", "/**\n * @module ol/render\n */\nimport {DEVICE_PIXEL_RATIO} from './has.js';\nimport {getTransformFromProjections, getUserProjection} from './proj.js';\nimport CanvasImmediateRenderer from './render/canvas/Immediate.js';\nimport {getSquaredTolerance} from './renderer/vector.js';\nimport {\n apply as applyTransform,\n create as createTransform,\n multiply as multiplyTransform,\n scale as scaleTransform,\n} from './transform.js';\n\n/**\n * @typedef {Object} State\n * @property {CanvasRenderingContext2D} context Canvas context that the layer is being rendered to.\n * @property {import(\"./Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"./geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} pixelRatio Pixel ratio used by the layer renderer.\n * @property {number} resolution Resolution that the render batch was created and optimized for.\n * This is not the view's resolution that is being rendered.\n * @property {number} rotation Rotation of the rendered layer in radians.\n */\n\n/**\n * A function to be used when sorting features before rendering.\n * It takes two instances of {@link module:ol/Feature~Feature} or\n * {@link module:ol/render/Feature~RenderFeature} and returns a `{number}`.\n *\n * @typedef {function(import(\"./Feature.js\").FeatureLike, import(\"./Feature.js\").FeatureLike):number} OrderFunction\n */\n\n/**\n * @typedef {Object} ToContextOptions\n * @property {import(\"./size.js\").Size} [size] Desired size of the canvas in css\n * pixels. When provided, both canvas and css size will be set according to the\n * `pixelRatio`. If not provided, the current canvas and css sizes will not be\n * altered.\n * @property {number} [pixelRatio=window.devicePixelRatio] Pixel ratio (canvas\n * pixel to css pixel ratio) for the canvas.\n */\n\n/**\n * Binds a Canvas Immediate API to a canvas context, to allow drawing geometries\n * to the context's canvas.\n *\n * The units for geometry coordinates are css pixels relative to the top left\n * corner of the canvas element.\n * ```js\n * import {toContext} from 'ol/render.js';\n * import Fill from 'ol/style/Fill.js';\n * import Polygon from 'ol/geom/Polygon.js';\n *\n * const canvas = document.createElement('canvas');\n * const render = toContext(\n * canvas.getContext('2d'),\n * {size: [100, 100]}\n * );\n * render.setFillStrokeStyle(new Fill({ color: blue }));\n * render.drawPolygon(\n * new Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]])\n * );\n * ```\n *\n * @param {CanvasRenderingContext2D} context Canvas context.\n * @param {ToContextOptions} [options] Options.\n * @return {CanvasImmediateRenderer} Canvas Immediate.\n * @api\n */\nexport function toContext(context, options) {\n const canvas = context.canvas;\n options = options ? options : {};\n const pixelRatio = options.pixelRatio || DEVICE_PIXEL_RATIO;\n const size = options.size;\n if (size) {\n canvas.width = size[0] * pixelRatio;\n canvas.height = size[1] * pixelRatio;\n canvas.style.width = size[0] + 'px';\n canvas.style.height = size[1] + 'px';\n }\n const extent = [0, 0, canvas.width, canvas.height];\n const transform = scaleTransform(createTransform(), pixelRatio, pixelRatio);\n return new CanvasImmediateRenderer(context, pixelRatio, extent, transform, 0);\n}\n\n/**\n * Gets a vector context for drawing to the event's canvas.\n * @param {import(\"./render/Event.js\").default} event Render event.\n * @return {CanvasImmediateRenderer} Vector context.\n * @api\n */\nexport function getVectorContext(event) {\n if (!(event.context instanceof CanvasRenderingContext2D)) {\n throw new Error('Only works for render events from Canvas 2D layers');\n }\n\n // canvas may be at a different pixel ratio than frameState.pixelRatio\n const a = event.inversePixelTransform[0];\n const b = event.inversePixelTransform[1];\n const canvasPixelRatio = Math.sqrt(a * a + b * b);\n const frameState = event.frameState;\n const transform = multiplyTransform(\n event.inversePixelTransform.slice(),\n frameState.coordinateToPixelTransform,\n );\n const squaredTolerance = getSquaredTolerance(\n frameState.viewState.resolution,\n canvasPixelRatio,\n );\n let userTransform;\n const userProjection = getUserProjection();\n if (userProjection) {\n userTransform = getTransformFromProjections(\n userProjection,\n frameState.viewState.projection,\n );\n }\n\n return new CanvasImmediateRenderer(\n event.context,\n canvasPixelRatio,\n frameState.extent,\n transform,\n frameState.viewState.rotation,\n squaredTolerance,\n userTransform,\n );\n}\n\n/**\n * Gets the pixel of the event's canvas context from the map viewport's CSS pixel.\n * @param {import(\"./render/Event.js\").default} event Render event.\n * @param {import(\"./pixel.js\").Pixel} pixel CSS pixel relative to the top-left\n * corner of the map viewport.\n * @return {import(\"./pixel.js\").Pixel} Pixel on the event's canvas context.\n * @api\n */\nexport function getRenderPixel(event, pixel) {\n return applyTransform(event.inversePixelTransform, pixel.slice(0));\n}\n", "/**\n * @module ol/layer/Graticule\n */\nimport Collection from '../Collection.js';\nimport Feature from '../Feature.js';\nimport {degreesToStringHDMS} from '../coordinate.js';\nimport {\n applyTransform,\n approximatelyEquals,\n containsCoordinate,\n containsExtent,\n equals,\n getCenter,\n getIntersection,\n getWidth,\n intersects,\n isEmpty,\n wrapX as wrapExtentX,\n} from '../extent.js';\nimport LineString from '../geom/LineString.js';\nimport Point from '../geom/Point.js';\nimport {meridian, parallel} from '../geom/flat/geodesic.js';\nimport {clamp} from '../math.js';\nimport {\n equivalent as equivalentProjection,\n get as getProjection,\n getTransform,\n} from '../proj.js';\nimport EventType from '../render/EventType.js';\nimport {getVectorContext} from '../render.js';\nimport VectorSource from '../source/Vector.js';\nimport Fill from '../style/Fill.js';\nimport Stroke from '../style/Stroke.js';\nimport Style from '../style/Style.js';\nimport Text from '../style/Text.js';\nimport VectorLayer from './Vector.js';\n\n/**\n * @type {Stroke}\n * @private\n * @const\n */\nconst DEFAULT_STROKE_STYLE = new Stroke({\n color: 'rgba(0,0,0,0.2)',\n});\n\n/**\n * @type {Array}\n * @private\n */\nconst INTERVALS = [\n 90,\n 45,\n 30,\n 20,\n 10,\n 5,\n 2,\n 1,\n 30 / 60,\n 20 / 60,\n 10 / 60,\n 5 / 60,\n 2 / 60,\n 1 / 60,\n 30 / 3600,\n 20 / 3600,\n 10 / 3600,\n 5 / 3600,\n 2 / 3600,\n 1 / 3600,\n];\n\n/**\n * @typedef {Object} GraticuleLabelDataType\n * @property {Point} geom Geometry.\n * @property {string} text Text.\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {number} [maxLines=100] The maximum number of meridians and\n * parallels from the center of the map. The default value of 100 means that at\n * most 200 meridians and 200 parallels will be displayed. The default value is\n * appropriate for conformal projections like Spherical Mercator. If you\n * increase the value, more lines will be drawn and the drawing performance will\n * decrease.\n * @property {Stroke} [strokeStyle] The\n * stroke style to use for drawing the graticule. If not provided, the following stroke will be used:\n * ```js\n * new Stroke({\n * color: 'rgba(0, 0, 0, 0.2)' // a not fully opaque black\n * });\n * ```\n * @property {number} [targetSize=100] The target size of the graticule cells,\n * in pixels.\n * @property {boolean} [showLabels=false] Render a label with the respective\n * latitude/longitude for each graticule line.\n * @property {function(number):string} [lonLabelFormatter] Label formatter for\n * longitudes. This function is called with the longitude as argument, and\n * should return a formatted string representing the longitude. By default,\n * labels are formatted as degrees, minutes, seconds and hemisphere.\n * @property {function(number):string} [latLabelFormatter] Label formatter for\n * latitudes. This function is called with the latitude as argument, and\n * should return a formatted string representing the latitude. By default,\n * labels are formatted as degrees, minutes, seconds and hemisphere.\n * @property {number} [lonLabelPosition=0] Longitude label position in fractions\n * (0..1) of view extent. 0 means at the bottom of the viewport, 1 means at the\n * top.\n * @property {number} [latLabelPosition=1] Latitude label position in fractions\n * (0..1) of view extent. 0 means at the left of the viewport, 1 means at the\n * right.\n * @property {Text} [lonLabelStyle] Longitude label text\n * style. If not provided, the following style will be used:\n * ```js\n * new Text({\n * font: '12px Calibri,sans-serif',\n * textBaseline: 'bottom',\n * fill: new Fill({\n * color: 'rgba(0,0,0,1)'\n * }),\n * stroke: new Stroke({\n * color: 'rgba(255,255,255,1)',\n * width: 3\n * })\n * });\n * ```\n * Note that the default's `textBaseline` configuration will not work well for\n * `lonLabelPosition` configurations that position labels close to the top of\n * the viewport.\n * @property {Text} [latLabelStyle] Latitude label text style.\n * If not provided, the following style will be used:\n * ```js\n * new Text({\n * font: '12px Calibri,sans-serif',\n * textAlign: 'end',\n * fill: new Fill({\n * color: 'rgba(0,0,0,1)'\n * }),\n * stroke: Stroke({\n * color: 'rgba(255,255,255,1)',\n * width: 3\n * })\n * });\n * ```\n * Note that the default's `textAlign` configuration will not work well for\n * `latLabelPosition` configurations that position labels close to the left of\n * the viewport.\n * @property {Array} [intervals=[90, 45, 30, 20, 10, 5, 2, 1, 30/60, 20/60, 10/60, 5/60, 2/60, 1/60, 30/3600, 20/3600, 10/3600, 5/3600, 2/3600, 1/3600]]\n * Intervals (in degrees) for the graticule. Example to limit graticules to 30 and 10 degrees intervals:\n * ```js\n * [30, 10]\n * ```\n * @property {boolean} [wrapX=true] Whether to repeat the graticule horizontally.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Layer that renders a grid for a coordinate system (currently only EPSG:4326 is supported).\n * Note that the view projection must define both extent and worldExtent.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n * @extends {VectorLayer>}\n * @api\n */\nclass Graticule extends VectorLayer {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const baseOptions = Object.assign(\n {\n updateWhileAnimating: true,\n updateWhileInteracting: true,\n renderBuffer: 0,\n },\n options,\n );\n\n delete baseOptions.maxLines;\n delete baseOptions.strokeStyle;\n delete baseOptions.targetSize;\n delete baseOptions.showLabels;\n delete baseOptions.lonLabelFormatter;\n delete baseOptions.latLabelFormatter;\n delete baseOptions.lonLabelPosition;\n delete baseOptions.latLabelPosition;\n delete baseOptions.lonLabelStyle;\n delete baseOptions.latLabelStyle;\n delete baseOptions.intervals;\n super(baseOptions);\n\n /**\n * @type {import(\"../proj/Projection.js\").default}\n * @private\n */\n this.projection_ = null;\n\n /**\n * @type {number}\n * @private\n */\n this.maxLat_ = Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.maxLon_ = Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.minLat_ = -Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.minLon_ = -Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.maxX_ = Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.maxY_ = Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.minX_ = -Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.minY_ = -Infinity;\n\n /**\n * @type {number}\n * @private\n */\n this.targetSize_ =\n options.targetSize !== undefined ? options.targetSize : 100;\n\n /**\n * @type {number}\n * @private\n */\n this.maxLines_ = options.maxLines !== undefined ? options.maxLines : 100;\n\n /**\n * @type {Array}\n * @private\n */\n this.meridians_ = [];\n\n /**\n * @type {Array}\n * @private\n */\n this.parallels_ = [];\n\n /**\n * @type {Stroke}\n * @private\n */\n this.strokeStyle_ =\n options.strokeStyle !== undefined\n ? options.strokeStyle\n : DEFAULT_STROKE_STYLE;\n\n /**\n * @type {import(\"../proj.js\").TransformFunction|undefined}\n * @private\n */\n this.fromLonLatTransform_ = undefined;\n\n /**\n * @type {import(\"../proj.js\").TransformFunction|undefined}\n * @private\n */\n this.toLonLatTransform_ = undefined;\n\n /**\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.projectionCenterLonLat_ = null;\n\n /**\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.bottomLeft_ = null;\n\n /**\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.bottomRight_ = null;\n\n /**\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.topLeft_ = null;\n\n /**\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.topRight_ = null;\n\n /**\n * @type {Array}\n * @private\n */\n this.meridiansLabels_ = null;\n\n /**\n * @type {Array}\n * @private\n */\n this.parallelsLabels_ = null;\n\n if (options.showLabels) {\n /**\n * @type {null|function(number):string}\n * @private\n */\n this.lonLabelFormatter_ =\n options.lonLabelFormatter == undefined\n ? degreesToStringHDMS.bind(this, 'EW')\n : options.lonLabelFormatter;\n\n /**\n * @type {function(number):string}\n * @private\n */\n this.latLabelFormatter_ =\n options.latLabelFormatter == undefined\n ? degreesToStringHDMS.bind(this, 'NS')\n : options.latLabelFormatter;\n\n /**\n * Longitude label position in fractions (0..1) of view extent. 0 means\n * bottom, 1 means top.\n * @type {number}\n * @private\n */\n this.lonLabelPosition_ =\n options.lonLabelPosition == undefined ? 0 : options.lonLabelPosition;\n\n /**\n * Latitude Label position in fractions (0..1) of view extent. 0 means left, 1\n * means right.\n * @type {number}\n * @private\n */\n this.latLabelPosition_ =\n options.latLabelPosition == undefined ? 1 : options.latLabelPosition;\n\n /**\n * @type {Style}\n * @private\n */\n this.lonLabelStyleBase_ = new Style({\n text:\n options.lonLabelStyle !== undefined\n ? options.lonLabelStyle.clone()\n : new Text({\n font: '12px Calibri,sans-serif',\n textBaseline: 'bottom',\n fill: new Fill({\n color: 'rgba(0,0,0,1)',\n }),\n stroke: new Stroke({\n color: 'rgba(255,255,255,1)',\n width: 3,\n }),\n }),\n });\n\n /**\n * @private\n * @param {import(\"../Feature\").default} feature Feature\n * @return {Style} style\n */\n this.lonLabelStyle_ = (feature) => {\n const label = feature.get('graticule_label');\n this.lonLabelStyleBase_.getText().setText(label);\n return this.lonLabelStyleBase_;\n };\n\n /**\n * @type {Style}\n * @private\n */\n this.latLabelStyleBase_ = new Style({\n text:\n options.latLabelStyle !== undefined\n ? options.latLabelStyle.clone()\n : new Text({\n font: '12px Calibri,sans-serif',\n textAlign: 'right',\n fill: new Fill({\n color: 'rgba(0,0,0,1)',\n }),\n stroke: new Stroke({\n color: 'rgba(255,255,255,1)',\n width: 3,\n }),\n }),\n });\n\n /**\n * @private\n * @param {import(\"../Feature\").default} feature Feature\n * @return {Style} style\n */\n this.latLabelStyle_ = (feature) => {\n const label = feature.get('graticule_label');\n this.latLabelStyleBase_.getText().setText(label);\n return this.latLabelStyleBase_;\n };\n\n this.meridiansLabels_ = [];\n this.parallelsLabels_ = [];\n\n this.addEventListener(EventType.POSTRENDER, this.drawLabels_.bind(this));\n }\n\n /**\n * @type {Array}\n * @private\n */\n this.intervals_ =\n options.intervals !== undefined ? options.intervals : INTERVALS;\n\n // use a source with a custom loader for lines & text\n this.setSource(\n new VectorSource({\n loader: this.loaderFunction.bind(this),\n strategy: this.strategyFunction.bind(this),\n features: new Collection(),\n overlaps: false,\n useSpatialIndex: false,\n wrapX: options.wrapX,\n }),\n );\n\n /**\n * feature pool to use when updating graticule\n * @type {Array}\n * @private\n */\n this.featurePool_ = [];\n\n /**\n * @type {Style}\n * @private\n */\n this.lineStyle_ = new Style({\n stroke: this.strokeStyle_,\n });\n\n /**\n * @type {?import(\"../extent.js\").Extent}\n * @private\n */\n this.loadedExtent_ = null;\n\n /**\n * @type {?import(\"../extent.js\").Extent}\n * @private\n */\n this.renderedExtent_ = null;\n\n /**\n * @type {?number}\n * @private\n */\n this.renderedResolution_ = null;\n\n this.setRenderOrder(null);\n }\n\n /**\n * Strategy function for loading features based on the view's extent and\n * resolution.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array} Extents.\n */\n strategyFunction(extent, resolution) {\n // extents may be passed in different worlds, to avoid endless loop we use only one\n let realWorldExtent = extent.slice();\n if (this.projection_ && this.getSource().getWrapX()) {\n wrapExtentX(realWorldExtent, this.projection_);\n }\n if (this.loadedExtent_) {\n if (\n approximatelyEquals(this.loadedExtent_, realWorldExtent, resolution)\n ) {\n // make sure result is exactly equal to previous extent\n realWorldExtent = this.loadedExtent_.slice();\n } else {\n // we should not keep track of loaded extents\n this.getSource().removeLoadedExtent(this.loadedExtent_);\n }\n }\n return [realWorldExtent];\n }\n\n /**\n * Update geometries in the source based on current view\n * @param {import(\"../extent\").Extent} extent Extent\n * @param {number} resolution Resolution\n * @param {import(\"../proj/Projection.js\").default} projection Projection\n */\n loaderFunction(extent, resolution, projection) {\n this.loadedExtent_ = extent;\n const source = this.getSource();\n\n // only consider the intersection between our own extent & the requested one\n const layerExtent = this.getExtent() || [\n -Infinity,\n -Infinity,\n Infinity,\n Infinity,\n ];\n const renderExtent = getIntersection(layerExtent, extent);\n\n if (\n this.renderedExtent_ &&\n equals(this.renderedExtent_, renderExtent) &&\n this.renderedResolution_ === resolution\n ) {\n return;\n }\n this.renderedExtent_ = renderExtent;\n this.renderedResolution_ = resolution;\n\n // bail out if nothing to render\n if (isEmpty(renderExtent)) {\n return;\n }\n\n // update projection info\n const center = getCenter(renderExtent);\n const squaredTolerance = (resolution * resolution) / 4;\n\n const updateProjectionInfo =\n !this.projection_ || !equivalentProjection(this.projection_, projection);\n\n if (updateProjectionInfo) {\n this.updateProjectionInfo_(projection);\n }\n\n this.createGraticule_(renderExtent, center, resolution, squaredTolerance);\n\n // first make sure we have enough features in the pool\n let featureCount = this.meridians_.length + this.parallels_.length;\n if (this.meridiansLabels_) {\n featureCount += this.meridians_.length;\n }\n if (this.parallelsLabels_) {\n featureCount += this.parallels_.length;\n }\n\n let feature;\n while (featureCount > this.featurePool_.length) {\n feature = new Feature();\n this.featurePool_.push(feature);\n }\n\n const featuresColl = source.getFeaturesCollection();\n featuresColl.clear();\n let poolIndex = 0;\n\n // add features for the lines & labels\n let i, l;\n for (i = 0, l = this.meridians_.length; i < l; ++i) {\n feature = this.featurePool_[poolIndex++];\n feature.setGeometry(this.meridians_[i]);\n feature.setStyle(this.lineStyle_);\n featuresColl.push(feature);\n }\n for (i = 0, l = this.parallels_.length; i < l; ++i) {\n feature = this.featurePool_[poolIndex++];\n feature.setGeometry(this.parallels_[i]);\n feature.setStyle(this.lineStyle_);\n featuresColl.push(feature);\n }\n }\n\n /**\n * @param {number} lon Longitude.\n * @param {number} minLat Minimal latitude.\n * @param {number} maxLat Maximal latitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} index Index.\n * @return {number} Index.\n * @private\n */\n addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, index) {\n const lineString = this.getMeridian_(\n lon,\n minLat,\n maxLat,\n squaredTolerance,\n index,\n );\n if (intersects(lineString.getExtent(), extent)) {\n if (this.meridiansLabels_) {\n const text = this.lonLabelFormatter_(lon);\n if (index in this.meridiansLabels_) {\n this.meridiansLabels_[index].text = text;\n } else {\n this.meridiansLabels_[index] = {\n geom: new Point([]),\n text: text,\n };\n }\n }\n this.meridians_[index++] = lineString;\n }\n return index;\n }\n\n /**\n * @param {number} lat Latitude.\n * @param {number} minLon Minimal longitude.\n * @param {number} maxLon Maximal longitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} index Index.\n * @return {number} Index.\n * @private\n */\n addParallel_(lat, minLon, maxLon, squaredTolerance, extent, index) {\n const lineString = this.getParallel_(\n lat,\n minLon,\n maxLon,\n squaredTolerance,\n index,\n );\n if (intersects(lineString.getExtent(), extent)) {\n if (this.parallelsLabels_) {\n const text = this.latLabelFormatter_(lat);\n if (index in this.parallelsLabels_) {\n this.parallelsLabels_[index].text = text;\n } else {\n this.parallelsLabels_[index] = {\n geom: new Point([]),\n text: text,\n };\n }\n }\n this.parallels_[index++] = lineString;\n }\n return index;\n }\n\n /**\n * @param {import(\"../render/Event.js\").default} event Render event.\n * @private\n */\n drawLabels_(event) {\n const rotation = event.frameState.viewState.rotation;\n const resolution = event.frameState.viewState.resolution;\n const size = event.frameState.size;\n const extent = event.frameState.extent;\n const rotationCenter = getCenter(extent);\n let rotationExtent = extent;\n if (rotation) {\n const unrotatedWidth = size[0] * resolution;\n const unrotatedHeight = size[1] * resolution;\n rotationExtent = [\n rotationCenter[0] - unrotatedWidth / 2,\n rotationCenter[1] - unrotatedHeight / 2,\n rotationCenter[0] + unrotatedWidth / 2,\n rotationCenter[1] + unrotatedHeight / 2,\n ];\n }\n\n let startWorld = 0;\n let endWorld = 0;\n let labelsAtStart = this.latLabelPosition_ < 0.5;\n const projectionExtent = this.projection_.getExtent();\n const worldWidth = getWidth(projectionExtent);\n if (\n this.getSource().getWrapX() &&\n this.projection_.canWrapX() &&\n !containsExtent(projectionExtent, extent)\n ) {\n startWorld = Math.floor((extent[0] - projectionExtent[0]) / worldWidth);\n endWorld = Math.ceil((extent[2] - projectionExtent[2]) / worldWidth);\n const inverted = Math.abs(rotation) > Math.PI / 2;\n labelsAtStart = labelsAtStart !== inverted;\n }\n const vectorContext = getVectorContext(event);\n\n for (let world = startWorld; world <= endWorld; ++world) {\n let poolIndex = this.meridians_.length + this.parallels_.length;\n let feature, index, l, textPoint;\n\n if (this.meridiansLabels_) {\n for (index = 0, l = this.meridiansLabels_.length; index < l; ++index) {\n const lineString = this.meridians_[index];\n if (!rotation && world === 0) {\n textPoint = this.getMeridianPoint_(lineString, extent, index);\n } else {\n const clone = lineString.clone();\n clone.translate(world * worldWidth, 0);\n clone.rotate(-rotation, rotationCenter);\n textPoint = this.getMeridianPoint_(clone, rotationExtent, index);\n textPoint.rotate(rotation, rotationCenter);\n }\n feature = this.featurePool_[poolIndex++];\n feature.setGeometry(textPoint);\n feature.set('graticule_label', this.meridiansLabels_[index].text);\n vectorContext.drawFeature(feature, this.lonLabelStyle_(feature));\n }\n }\n if (this.parallelsLabels_) {\n if (\n (world === startWorld && labelsAtStart) ||\n (world === endWorld && !labelsAtStart)\n ) {\n for (index = 0, l = this.parallels_.length; index < l; ++index) {\n const lineString = this.parallels_[index];\n if (!rotation && world === 0) {\n textPoint = this.getParallelPoint_(lineString, extent, index);\n } else {\n const clone = lineString.clone();\n clone.translate(world * worldWidth, 0);\n clone.rotate(-rotation, rotationCenter);\n textPoint = this.getParallelPoint_(clone, rotationExtent, index);\n textPoint.rotate(rotation, rotationCenter);\n }\n feature = this.featurePool_[poolIndex++];\n feature.setGeometry(textPoint);\n feature.set('graticule_label', this.parallelsLabels_[index].text);\n vectorContext.drawFeature(feature, this.latLabelStyle_(feature));\n }\n }\n }\n }\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {import(\"../coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} squaredTolerance Squared tolerance.\n * @private\n */\n createGraticule_(extent, center, resolution, squaredTolerance) {\n const interval = this.getInterval_(resolution);\n if (interval == -1) {\n this.meridians_.length = 0;\n this.parallels_.length = 0;\n if (this.meridiansLabels_) {\n this.meridiansLabels_.length = 0;\n }\n if (this.parallelsLabels_) {\n this.parallelsLabels_.length = 0;\n }\n return;\n }\n\n let wrapX = false;\n const projectionExtent = this.projection_.getExtent();\n const worldWidth = getWidth(projectionExtent);\n if (\n this.getSource().getWrapX() &&\n this.projection_.canWrapX() &&\n !containsExtent(projectionExtent, extent)\n ) {\n if (getWidth(extent) >= worldWidth) {\n extent[0] = projectionExtent[0];\n extent[2] = projectionExtent[2];\n } else {\n wrapX = true;\n }\n }\n\n // Constrain the center to fit into the extent available to the graticule\n\n const validCenterP = [\n clamp(center[0], this.minX_, this.maxX_),\n clamp(center[1], this.minY_, this.maxY_),\n ];\n\n // Transform the center to lon lat\n // Some projections may have a void area at the poles\n // so replace any NaN latitudes with the min or max value closest to a pole\n\n const centerLonLat = this.toLonLatTransform_(validCenterP);\n if (isNaN(centerLonLat[1])) {\n centerLonLat[1] =\n Math.abs(this.maxLat_) >= Math.abs(this.minLat_)\n ? this.maxLat_\n : this.minLat_;\n }\n let centerLon = clamp(centerLonLat[0], this.minLon_, this.maxLon_);\n let centerLat = clamp(centerLonLat[1], this.minLat_, this.maxLat_);\n const maxLines = this.maxLines_;\n let cnt, idx, lat, lon;\n\n // Limit the extent to fit into the extent available to the graticule\n\n let validExtentP = extent;\n if (!wrapX) {\n validExtentP = [\n clamp(extent[0], this.minX_, this.maxX_),\n clamp(extent[1], this.minY_, this.maxY_),\n clamp(extent[2], this.minX_, this.maxX_),\n clamp(extent[3], this.minY_, this.maxY_),\n ];\n }\n\n // Transform the extent to get the lon lat ranges for the edges of the extent\n\n const validExtent = applyTransform(\n validExtentP,\n this.toLonLatTransform_,\n undefined,\n 8,\n );\n\n let maxLat = validExtent[3];\n let maxLon = validExtent[2];\n let minLat = validExtent[1];\n let minLon = validExtent[0];\n\n if (!wrapX) {\n // Check if extremities of the world extent lie inside the extent\n // (for example the pole in a polar projection)\n // and extend the extent as appropriate\n\n if (containsCoordinate(validExtentP, this.bottomLeft_)) {\n minLon = this.minLon_;\n minLat = this.minLat_;\n }\n if (containsCoordinate(validExtentP, this.bottomRight_)) {\n maxLon = this.maxLon_;\n minLat = this.minLat_;\n }\n if (containsCoordinate(validExtentP, this.topLeft_)) {\n minLon = this.minLon_;\n maxLat = this.maxLat_;\n }\n if (containsCoordinate(validExtentP, this.topRight_)) {\n maxLon = this.maxLon_;\n maxLat = this.maxLat_;\n }\n\n // The transformed center may also extend the lon lat ranges used for rendering\n\n maxLat = clamp(maxLat, centerLat, this.maxLat_);\n maxLon = clamp(maxLon, centerLon, this.maxLon_);\n minLat = clamp(minLat, this.minLat_, centerLat);\n minLon = clamp(minLon, this.minLon_, centerLon);\n }\n\n // Create meridians\n\n centerLon = Math.floor(centerLon / interval) * interval;\n lon = clamp(centerLon, this.minLon_, this.maxLon_);\n\n idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, 0);\n\n cnt = 0;\n if (wrapX) {\n while ((lon -= interval) >= minLon && cnt++ < maxLines) {\n idx = this.addMeridian_(\n lon,\n minLat,\n maxLat,\n squaredTolerance,\n extent,\n idx,\n );\n }\n } else {\n while (lon != this.minLon_ && cnt++ < maxLines) {\n lon = Math.max(lon - interval, this.minLon_);\n idx = this.addMeridian_(\n lon,\n minLat,\n maxLat,\n squaredTolerance,\n extent,\n idx,\n );\n }\n }\n\n lon = clamp(centerLon, this.minLon_, this.maxLon_);\n\n cnt = 0;\n if (wrapX) {\n while ((lon += interval) <= maxLon && cnt++ < maxLines) {\n idx = this.addMeridian_(\n lon,\n minLat,\n maxLat,\n squaredTolerance,\n extent,\n idx,\n );\n }\n } else {\n while (lon != this.maxLon_ && cnt++ < maxLines) {\n lon = Math.min(lon + interval, this.maxLon_);\n idx = this.addMeridian_(\n lon,\n minLat,\n maxLat,\n squaredTolerance,\n extent,\n idx,\n );\n }\n }\n\n this.meridians_.length = idx;\n if (this.meridiansLabels_) {\n this.meridiansLabels_.length = idx;\n }\n\n // Create parallels\n\n centerLat = Math.floor(centerLat / interval) * interval;\n lat = clamp(centerLat, this.minLat_, this.maxLat_);\n\n idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, 0);\n\n cnt = 0;\n while (lat != this.minLat_ && cnt++ < maxLines) {\n lat = Math.max(lat - interval, this.minLat_);\n idx = this.addParallel_(\n lat,\n minLon,\n maxLon,\n squaredTolerance,\n extent,\n idx,\n );\n }\n\n lat = clamp(centerLat, this.minLat_, this.maxLat_);\n\n cnt = 0;\n while (lat != this.maxLat_ && cnt++ < maxLines) {\n lat = Math.min(lat + interval, this.maxLat_);\n idx = this.addParallel_(\n lat,\n minLon,\n maxLon,\n squaredTolerance,\n extent,\n idx,\n );\n }\n\n this.parallels_.length = idx;\n if (this.parallelsLabels_) {\n this.parallelsLabels_.length = idx;\n }\n }\n\n /**\n * @param {number} resolution Resolution.\n * @return {number} The interval in degrees.\n * @private\n */\n getInterval_(resolution) {\n const centerLon = this.projectionCenterLonLat_[0];\n const centerLat = this.projectionCenterLonLat_[1];\n let interval = -1;\n const target = Math.pow(this.targetSize_ * resolution, 2);\n /** @type {Array} **/\n const p1 = [];\n /** @type {Array} **/\n const p2 = [];\n for (let i = 0, ii = this.intervals_.length; i < ii; ++i) {\n const delta = clamp(this.intervals_[i] / 2, 0, 90);\n // Don't attempt to transform latitudes beyond the poles!\n const clampedLat = clamp(centerLat, -90 + delta, 90 - delta);\n p1[0] = centerLon - delta;\n p1[1] = clampedLat - delta;\n p2[0] = centerLon + delta;\n p2[1] = clampedLat + delta;\n this.fromLonLatTransform_(p1, p1);\n this.fromLonLatTransform_(p2, p2);\n const dist = Math.pow(p2[0] - p1[0], 2) + Math.pow(p2[1] - p1[1], 2);\n if (dist <= target) {\n break;\n }\n interval = this.intervals_[i];\n }\n return interval;\n }\n\n /**\n * @param {number} lon Longitude.\n * @param {number} minLat Minimal latitude.\n * @param {number} maxLat Maximal latitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LineString} The meridian line string.\n * @param {number} index Index.\n * @private\n */\n getMeridian_(lon, minLat, maxLat, squaredTolerance, index) {\n const flatCoordinates = meridian(\n lon,\n minLat,\n maxLat,\n this.projection_,\n squaredTolerance,\n );\n let lineString = this.meridians_[index];\n if (!lineString) {\n lineString = new LineString(flatCoordinates, 'XY');\n this.meridians_[index] = lineString;\n } else {\n lineString.setFlatCoordinates('XY', flatCoordinates);\n lineString.changed();\n }\n return lineString;\n }\n\n /**\n * @param {LineString} lineString Meridian\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} index Index.\n * @return {Point} Meridian point.\n * @private\n */\n getMeridianPoint_(lineString, extent, index) {\n const flatCoordinates = lineString.getFlatCoordinates();\n let bottom = 1;\n let top = flatCoordinates.length - 1;\n if (flatCoordinates[bottom] > flatCoordinates[top]) {\n bottom = top;\n top = 1;\n }\n const clampedBottom = Math.max(extent[1], flatCoordinates[bottom]);\n const clampedTop = Math.min(extent[3], flatCoordinates[top]);\n const lat = clamp(\n extent[1] + Math.abs(extent[1] - extent[3]) * this.lonLabelPosition_,\n clampedBottom,\n clampedTop,\n );\n const coordinate0 =\n flatCoordinates[bottom - 1] +\n ((flatCoordinates[top - 1] - flatCoordinates[bottom - 1]) *\n (lat - flatCoordinates[bottom])) /\n (flatCoordinates[top] - flatCoordinates[bottom]);\n const coordinate = [coordinate0, lat];\n const point = this.meridiansLabels_[index].geom;\n point.setCoordinates(coordinate);\n return point;\n }\n\n /**\n * Get the list of meridians. Meridians are lines of equal longitude.\n * @return {Array} The meridians.\n * @api\n */\n getMeridians() {\n return this.meridians_;\n }\n\n /**\n * @param {number} lat Latitude.\n * @param {number} minLon Minimal longitude.\n * @param {number} maxLon Maximal longitude.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LineString} The parallel line string.\n * @param {number} index Index.\n * @private\n */\n getParallel_(lat, minLon, maxLon, squaredTolerance, index) {\n const flatCoordinates = parallel(\n lat,\n minLon,\n maxLon,\n this.projection_,\n squaredTolerance,\n );\n let lineString = this.parallels_[index];\n if (!lineString) {\n lineString = new LineString(flatCoordinates, 'XY');\n } else {\n lineString.setFlatCoordinates('XY', flatCoordinates);\n lineString.changed();\n }\n return lineString;\n }\n\n /**\n * @param {LineString} lineString Parallels.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} index Index.\n * @return {Point} Parallel point.\n * @private\n */\n getParallelPoint_(lineString, extent, index) {\n const flatCoordinates = lineString.getFlatCoordinates();\n let left = 0;\n let right = flatCoordinates.length - 2;\n if (flatCoordinates[left] > flatCoordinates[right]) {\n left = right;\n right = 0;\n }\n const clampedLeft = Math.max(extent[0], flatCoordinates[left]);\n const clampedRight = Math.min(extent[2], flatCoordinates[right]);\n const lon = clamp(\n extent[0] + Math.abs(extent[0] - extent[2]) * this.latLabelPosition_,\n clampedLeft,\n clampedRight,\n );\n const coordinate1 =\n flatCoordinates[left + 1] +\n ((flatCoordinates[right + 1] - flatCoordinates[left + 1]) *\n (lon - flatCoordinates[left])) /\n (flatCoordinates[right] - flatCoordinates[left]);\n const coordinate = [lon, coordinate1];\n const point = this.parallelsLabels_[index].geom;\n point.setCoordinates(coordinate);\n return point;\n }\n\n /**\n * Get the list of parallels. Parallels are lines of equal latitude.\n * @return {Array} The parallels.\n * @api\n */\n getParallels() {\n return this.parallels_;\n }\n\n /**\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @private\n */\n updateProjectionInfo_(projection) {\n const epsg4326Projection = getProjection('EPSG:4326');\n\n const worldExtent = projection.getWorldExtent();\n\n this.maxLat_ = worldExtent[3];\n this.maxLon_ = worldExtent[2];\n this.minLat_ = worldExtent[1];\n this.minLon_ = worldExtent[0];\n\n // If the world extent crosses the dateline define a custom transform to\n // return longitudes which wrap the dateline\n\n const toLonLatTransform = getTransform(projection, epsg4326Projection);\n if (this.minLon_ < this.maxLon_) {\n this.toLonLatTransform_ = toLonLatTransform;\n } else {\n const split = this.minLon_ + this.maxLon_ / 2;\n this.maxLon_ += 360;\n this.toLonLatTransform_ = function (coordinates, output, dimension) {\n dimension = dimension || 2;\n const lonLatCoordinates = toLonLatTransform(\n coordinates,\n output,\n dimension,\n );\n for (let i = 0, l = lonLatCoordinates.length; i < l; i += dimension) {\n if (lonLatCoordinates[i] < split) {\n lonLatCoordinates[i] += 360;\n }\n }\n return lonLatCoordinates;\n };\n }\n\n // Transform the extent to get the limits of the view projection extent\n // which should be available to the graticule\n\n this.fromLonLatTransform_ = getTransform(epsg4326Projection, projection);\n const worldExtentP = applyTransform(\n [this.minLon_, this.minLat_, this.maxLon_, this.maxLat_],\n this.fromLonLatTransform_,\n undefined,\n 8,\n );\n\n this.minX_ = worldExtentP[0];\n this.maxX_ = worldExtentP[2];\n this.minY_ = worldExtentP[1];\n this.maxY_ = worldExtentP[3];\n\n // Determine the view projection coordinates of the extremities of the world extent\n // as these may lie inside a view extent (for example the pole in a polar projection)\n\n this.bottomLeft_ = this.fromLonLatTransform_([this.minLon_, this.minLat_]);\n this.bottomRight_ = this.fromLonLatTransform_([this.maxLon_, this.minLat_]);\n this.topLeft_ = this.fromLonLatTransform_([this.minLon_, this.maxLat_]);\n this.topRight_ = this.fromLonLatTransform_([this.maxLon_, this.maxLat_]);\n\n // Transform the projection center to lon lat\n // Some projections may have a void area at the poles\n // so replace any NaN latitudes with the min or max value closest to a pole\n\n this.projectionCenterLonLat_ = this.toLonLatTransform_(\n getCenter(projection.getExtent()),\n );\n if (isNaN(this.projectionCenterLonLat_[1])) {\n this.projectionCenterLonLat_[1] =\n Math.abs(this.maxLat_) >= Math.abs(this.minLat_)\n ? this.maxLat_\n : this.minLat_;\n }\n\n this.projection_ = projection;\n }\n}\n\nexport default Graticule;\n", "/**\n * @module ol/ImageCanvas\n */\nimport ImageWrapper from './Image.js';\nimport ImageState from './ImageState.js';\n\n/**\n * A function that is called to trigger asynchronous canvas drawing. It is\n * called with a \"done\" callback that should be called when drawing is done.\n * If any error occurs during drawing, the \"done\" callback should be called with\n * that error.\n *\n * @typedef {function(function(Error=): void): void} Loader\n */\n\nclass ImageCanvas extends ImageWrapper {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {HTMLCanvasElement} canvas Canvas.\n * @param {Loader} [loader] Optional loader function to\n * support asynchronous canvas drawing.\n */\n constructor(extent, resolution, pixelRatio, canvas, loader) {\n const state = loader !== undefined ? ImageState.IDLE : ImageState.LOADED;\n\n super(extent, resolution, pixelRatio, state);\n\n /**\n * Optional canvas loader function.\n * @type {?Loader}\n * @private\n */\n this.loader_ = loader !== undefined ? loader : null;\n\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n this.canvas_ = canvas;\n\n /**\n * @private\n * @type {?Error}\n */\n this.error_ = null;\n }\n\n /**\n * Get any error associated with asynchronous rendering.\n * @return {?Error} Any error that occurred during rendering.\n */\n getError() {\n return this.error_;\n }\n\n /**\n * Handle async drawing complete.\n * @param {Error} [err] Any error during drawing.\n * @private\n */\n handleLoad_(err) {\n if (err) {\n this.error_ = err;\n this.state = ImageState.ERROR;\n } else {\n this.state = ImageState.LOADED;\n }\n this.changed();\n }\n\n /**\n * Load not yet loaded URI.\n * @override\n */\n load() {\n if (this.state == ImageState.IDLE) {\n this.state = ImageState.LOADING;\n this.changed();\n this.loader_(this.handleLoad_.bind(this));\n }\n }\n\n /**\n * @return {HTMLCanvasElement} Canvas element.\n * @override\n */\n getImage() {\n return this.canvas_;\n }\n}\n\nexport default ImageCanvas;\n", "/**\n * @module ol/pointer/EventType\n */\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n", "/**\n * @module ol/MapBrowserEventHandler\n */\n\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport EventType from './events/EventType.js';\nimport Target from './events/Target.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {PASSIVE_EVENT_LISTENERS} from './has.js';\nimport PointerEventType from './pointer/EventType.js';\n\nclass MapBrowserEventHandler extends Target {\n /**\n * @param {import(\"./Map.js\").default} map The map with the viewport to listen to events on.\n * @param {number} [moveTolerance] The minimal distance the pointer must travel to trigger a move.\n */\n constructor(map, moveTolerance) {\n super(map);\n\n /**\n * This is the element that we will listen to the real events on.\n * @type {import(\"./Map.js\").default}\n * @private\n */\n this.map_ = map;\n\n /**\n * @type {ReturnType}\n * @private\n */\n this.clickTimeoutId_;\n\n /**\n * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n * @type {boolean}\n */\n this.emulateClicks_ = false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.dragging_ = false;\n\n /**\n * @type {!Array}\n * @private\n */\n this.dragListenerKeys_ = [];\n\n /**\n * @type {number}\n * @private\n */\n this.moveTolerance_ = moveTolerance === undefined ? 1 : moveTolerance;\n\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {PointerEvent|null}\n * @private\n */\n this.down_ = null;\n\n const element = this.map_.getViewport();\n\n /**\n * @type {Array}\n * @private\n */\n this.activePointers_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.trackedTouches_ = {};\n\n /**\n * @private\n */\n this.element_ = element;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.pointerdownListenerKey_ = listen(\n element,\n PointerEventType.POINTERDOWN,\n this.handlePointerDown_,\n this,\n );\n\n /**\n * @type {PointerEvent}\n * @private\n */\n this.originalPointerMoveEvent_;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.relayedListenerKey_ = listen(\n element,\n PointerEventType.POINTERMOVE,\n this.relayMoveEvent_,\n this,\n );\n\n /**\n * @private\n */\n this.boundHandleTouchMove_ = this.handleTouchMove_.bind(this);\n\n this.element_.addEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false,\n );\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n emulateClick_(pointerEvent) {\n let newEvent = new MapBrowserEvent(\n MapBrowserEventType.CLICK,\n this.map_,\n pointerEvent,\n );\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== undefined) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = undefined;\n newEvent = new MapBrowserEvent(\n MapBrowserEventType.DBLCLICK,\n this.map_,\n pointerEvent,\n );\n this.dispatchEvent(newEvent);\n } else {\n // click\n this.clickTimeoutId_ = setTimeout(() => {\n this.clickTimeoutId_ = undefined;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.SINGLECLICK,\n this.map_,\n pointerEvent,\n );\n this.dispatchEvent(newEvent);\n }, 250);\n }\n }\n\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n updateActivePointers_(pointerEvent) {\n const event = pointerEvent;\n const id = event.pointerId;\n\n if (\n event.type == MapBrowserEventType.POINTERUP ||\n event.type == MapBrowserEventType.POINTERCANCEL\n ) {\n delete this.trackedTouches_[id];\n for (const pointerId in this.trackedTouches_) {\n if (this.trackedTouches_[pointerId].target !== event.target) {\n // Some platforms assign a new pointerId when the target changes.\n // If this happens, delete one tracked pointer. If there is more\n // than one tracked pointer for the old target, it will be cleared\n // by subsequent POINTERUP events from other pointers.\n delete this.trackedTouches_[pointerId];\n break;\n }\n }\n } else if (\n event.type == MapBrowserEventType.POINTERDOWN ||\n event.type == MapBrowserEventType.POINTERMOVE\n ) {\n this.trackedTouches_[id] = event;\n }\n this.activePointers_ = Object.values(this.trackedTouches_);\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerUp_(pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERUP,\n this.map_,\n pointerEvent,\n undefined,\n undefined,\n this.activePointers_,\n );\n this.dispatchEvent(newEvent);\n\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.preventDefault().\n if (\n this.emulateClicks_ &&\n !newEvent.defaultPrevented &&\n !this.dragging_ &&\n this.isMouseActionButton_(pointerEvent)\n ) {\n this.emulateClick_(this.down_);\n }\n\n if (this.activePointers_.length === 0) {\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n isMouseActionButton_(pointerEvent) {\n return pointerEvent.button === 0;\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerDown_(pointerEvent) {\n this.emulateClicks_ = this.activePointers_.length === 0;\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDOWN,\n this.map_,\n pointerEvent,\n undefined,\n undefined,\n this.activePointers_,\n );\n this.dispatchEvent(newEvent);\n\n this.down_ = new PointerEvent(pointerEvent.type, pointerEvent);\n Object.defineProperty(this.down_, 'target', {\n writable: false,\n value: pointerEvent.target,\n });\n\n if (this.dragListenerKeys_.length === 0) {\n const doc = this.map_.getOwnerDocument();\n this.dragListenerKeys_.push(\n listen(\n doc,\n MapBrowserEventType.POINTERMOVE,\n this.handlePointerMove_,\n this,\n ),\n listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this),\n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n listen(\n this.element_,\n MapBrowserEventType.POINTERCANCEL,\n this.handlePointerUp_,\n this,\n ),\n );\n if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n this.dragListenerKeys_.push(\n listen(\n this.element_.getRootNode(),\n MapBrowserEventType.POINTERUP,\n this.handlePointerUp_,\n this,\n ),\n );\n }\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerMove_(pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.updateActivePointers_(pointerEvent);\n this.dragging_ = true;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDRAG,\n this.map_,\n pointerEvent,\n this.dragging_,\n undefined,\n this.activePointers_,\n );\n this.dispatchEvent(newEvent);\n }\n }\n\n /**\n * Wrap and relay a pointermove event.\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n relayMoveEvent_(pointerEvent) {\n this.originalPointerMoveEvent_ = pointerEvent;\n const dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(\n new MapBrowserEvent(\n MapBrowserEventType.POINTERMOVE,\n this.map_,\n pointerEvent,\n dragging,\n ),\n );\n }\n\n /**\n * Flexible handling of a `touch-action: none` css equivalent: because calling\n * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n * when an interaction (currently `DragPan` handles the event.\n * @param {TouchEvent} event Event.\n * @private\n */\n handleTouchMove_(event) {\n // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n // may not be initialized yet when we get here on a platform without native pointer events,\n // when elm-pep is used as pointer events polyfill.\n const originalEvent = this.originalPointerMoveEvent_;\n if (\n (!originalEvent || originalEvent.defaultPrevented) &&\n (typeof event.cancelable !== 'boolean' || event.cancelable === true)\n ) {\n event.preventDefault();\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n isMoving_(pointerEvent) {\n return (\n this.dragging_ ||\n Math.abs(pointerEvent.clientX - this.down_.clientX) >\n this.moveTolerance_ ||\n Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_\n );\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n if (this.relayedListenerKey_) {\n unlistenByKey(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n this.element_.removeEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_,\n );\n\n if (this.pointerdownListenerKey_) {\n unlistenByKey(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n\n this.element_ = null;\n super.disposeInternal();\n }\n}\n\nexport default MapBrowserEventHandler;\n", "/**\n * @module ol/MapEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend',\n\n /**\n * Triggered when loading of additional map data (tiles, images, features) starts.\n * @event module:ol/MapEvent~MapEvent#loadstart\n * @api\n */\n LOADSTART: 'loadstart',\n\n /**\n * Triggered when loading of additional map data has completed.\n * @event module:ol/MapEvent~MapEvent#loadend\n * @api\n */\n LOADEND: 'loadend',\n};\n\n/***\n * @typedef {'postrender'|'movestart'|'moveend'|'loadstart'|'loadend'} Types\n */\n", "/**\n * @module ol/MapProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view',\n};\n", "/**\n * @module ol/structs/PriorityQueue\n */\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\n\n/**\n * @type {number}\n */\nexport const DROP = Infinity;\n\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See https://github.com/google/closure-library/blob/master/closure/goog/structs/heap.js\n * and https://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nclass PriorityQueue {\n /**\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n */\n constructor(priorityFunction, keyFunction) {\n /**\n * @type {function(T): number}\n * @private\n */\n this.priorityFunction_ = priorityFunction;\n\n /**\n * @type {function(T): string}\n * @private\n */\n this.keyFunction_ = keyFunction;\n\n /**\n * @type {Array}\n * @private\n */\n this.elements_ = [];\n\n /**\n * @type {Array}\n * @private\n */\n this.priorities_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.queuedElements_ = {};\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.elements_.length = 0;\n this.priorities_.length = 0;\n clear(this.queuedElements_);\n }\n\n /**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\n dequeue() {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[0];\n if (elements.length == 1) {\n elements.length = 0;\n priorities.length = 0;\n } else {\n elements[0] = /** @type {T} */ (elements.pop());\n priorities[0] = /** @type {number} */ (priorities.pop());\n this.siftUp_(0);\n }\n const elementKey = this.keyFunction_(element);\n delete this.queuedElements_[elementKey];\n return element;\n }\n\n /**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n assert(\n !(this.keyFunction_(element) in this.queuedElements_),\n 'Tried to enqueue an `element` that was already added to the queue',\n );\n const priority = this.priorityFunction_(element);\n if (priority != DROP) {\n this.elements_.push(element);\n this.priorities_.push(priority);\n this.queuedElements_[this.keyFunction_(element)] = true;\n this.siftDown_(0, this.elements_.length - 1);\n return true;\n }\n return false;\n }\n\n /**\n * @return {number} Count.\n */\n getCount() {\n return this.elements_.length;\n }\n\n /**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\n getLeftChildIndex_(index) {\n return index * 2 + 1;\n }\n\n /**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\n getRightChildIndex_(index) {\n return index * 2 + 2;\n }\n\n /**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\n getParentIndex_(index) {\n return (index - 1) >> 1;\n }\n\n /**\n * Make this a heap. O(N).\n * @private\n */\n heapify_() {\n let i;\n for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n this.siftUp_(i);\n }\n }\n\n /**\n * @return {boolean} Is empty.\n */\n isEmpty() {\n return this.elements_.length === 0;\n }\n\n /**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\n isKeyQueued(key) {\n return key in this.queuedElements_;\n }\n\n /**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\n isQueued(element) {\n return this.isKeyQueued(this.keyFunction_(element));\n }\n\n /**\n * @param {number} index The index of the node to move down.\n * @private\n */\n siftUp_(index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const count = elements.length;\n const element = elements[index];\n const priority = priorities[index];\n const startIndex = index;\n\n while (index < count >> 1) {\n const lIndex = this.getLeftChildIndex_(index);\n const rIndex = this.getRightChildIndex_(index);\n\n const smallerChildIndex =\n rIndex < count && priorities[rIndex] < priorities[lIndex]\n ? rIndex\n : lIndex;\n\n elements[index] = elements[smallerChildIndex];\n priorities[index] = priorities[smallerChildIndex];\n index = smallerChildIndex;\n }\n\n elements[index] = element;\n priorities[index] = priority;\n this.siftDown_(startIndex, index);\n }\n\n /**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\n siftDown_(startIndex, index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[index];\n const priority = priorities[index];\n\n while (index > startIndex) {\n const parentIndex = this.getParentIndex_(index);\n if (priorities[parentIndex] > priority) {\n elements[index] = elements[parentIndex];\n priorities[index] = priorities[parentIndex];\n index = parentIndex;\n } else {\n break;\n }\n }\n elements[index] = element;\n priorities[index] = priority;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n reprioritize() {\n const priorityFunction = this.priorityFunction_;\n const elements = this.elements_;\n const priorities = this.priorities_;\n let index = 0;\n const n = elements.length;\n let element, i, priority;\n for (i = 0; i < n; ++i) {\n element = elements[i];\n priority = priorityFunction(element);\n if (priority == DROP) {\n delete this.queuedElements_[this.keyFunction_(element)];\n } else {\n priorities[index] = priority;\n elements[index++] = element;\n }\n }\n elements.length = index;\n priorities.length = index;\n this.heapify_();\n }\n}\n\nexport default PriorityQueue;\n", "/**\n * @module ol/TileQueue\n */\nimport TileState from './TileState.js';\nimport EventType from './events/EventType.js';\nimport PriorityQueue, {DROP} from './structs/PriorityQueue.js';\n\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import('./tilecoord.js').TileCoord, number): number} PriorityFunction\n */\n\n/**\n * @typedef {[import('./Tile.js').default, string, import('./tilecoord.js').TileCoord, number]} TileQueueElement\n */\n\n/**\n * @extends PriorityQueue}\n */\nclass TileQueue extends PriorityQueue {\n /**\n * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n constructor(tilePriorityFunction, tileChangeCallback) {\n super(\n (element) => tilePriorityFunction.apply(null, element),\n (element) => element[0].getKey(),\n );\n\n /** @private */\n this.boundHandleTileChange_ = this.handleTileChange.bind(this);\n\n /**\n * @private\n * @type {function(): ?}\n */\n this.tileChangeCallback_ = tileChangeCallback;\n\n /**\n * @private\n * @type {number}\n */\n this.tilesLoading_ = 0;\n\n /**\n * @private\n * @type {!Object}\n */\n this.tilesLoadingKeys_ = {};\n }\n\n /**\n * @param {TileQueueElement} element Element.\n * @return {boolean} The element was added to the queue.\n * @override\n */\n enqueue(element) {\n const added = super.enqueue(element);\n if (added) {\n const tile = element[0];\n tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n return added;\n }\n\n /**\n * @return {number} Number of tiles loading.\n */\n getTilesLoading() {\n return this.tilesLoading_;\n }\n\n /**\n * @param {import(\"./events/Event.js\").default} event Event.\n * @protected\n */\n handleTileChange(event) {\n const tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n const state = tile.getState();\n if (\n state === TileState.LOADED ||\n state === TileState.ERROR ||\n state === TileState.EMPTY\n ) {\n if (state !== TileState.ERROR) {\n tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n const tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n }\n\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n loadMoreTiles(maxTotalLoading, maxNewLoads) {\n let newLoads = 0;\n while (\n this.tilesLoading_ < maxTotalLoading &&\n newLoads < maxNewLoads &&\n this.getCount() > 0\n ) {\n const tile = this.dequeue()[0];\n const tileKey = tile.getKey();\n const state = tile.getState();\n if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n }\n}\n\nexport default TileQueue;\n\n/**\n * @param {import('./Map.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(\n frameState,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution,\n) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels between\n // the center of the tile and the center of the viewport. The factor of 65536\n // means that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n const center = frameState.viewState.center;\n const deltaX = tileCenter[0] - center[0];\n const deltaY = tileCenter[1] - center[1];\n return (\n 65536 * Math.log(tileResolution) +\n Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution\n );\n}\n", "/**\n * @module ol/control/Control\n */\nimport MapEventType from '../MapEventType.js';\nimport BaseObject from '../Object.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {VOID} from '../functions.js';\n\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * const myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nclass Control extends BaseObject {\n /**\n * @param {Options} options Control options.\n */\n constructor(options) {\n super();\n\n const element = options.element;\n if (element && !options.target && !element.style.pointerEvents) {\n element.style.pointerEvents = 'auto';\n }\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = element ? element : null;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.target_ = null;\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @protected\n * @type {!Array}\n */\n this.listenerKeys = [];\n\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.target) {\n this.setTarget(options.target);\n }\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.element?.remove();\n super.disposeInternal();\n }\n\n /**\n * Get the map associated with this control.\n * @return {import(\"../Map.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Pass `null` to just remove the control from the current map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.map_) {\n this.element?.remove();\n }\n for (let i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (map) {\n const target = this.target_ ?? map.getOverlayContainerStopEvent();\n if (this.element) {\n target.appendChild(this.element);\n }\n if (this.render !== VOID) {\n this.listenerKeys.push(\n listen(map, MapEventType.POSTRENDER, this.render, this),\n );\n }\n map.render();\n }\n }\n\n /**\n * Renders the control.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @api\n */\n render(mapEvent) {}\n\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n setTarget(target) {\n this.target_ =\n typeof target === 'string' ? document.getElementById(target) : target;\n }\n}\n\nexport default Control;\n", "/**\n * @module ol/control/Attribution\n */\nimport {equals} from '../array.js';\nimport {CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {removeChildren, replaceNode} from '../dom.js';\nimport EventType from '../events/EventType.js';\nimport {toPromise} from '../functions.js';\nimport Control from './Control.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string|HTMLElement} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='›'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {string|Array|undefined} [attributions] Optional attribution(s) that will always be\n * displayed regardless of the layers rendered\n */\n\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nclass Attribution extends Control {\n /**\n * @param {Options} [options] Attribution options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.ulElement_ = document.createElement('ul');\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsed_ =\n options.collapsed !== undefined ? options.collapsed : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.userCollapsed_ = this.collapsed_;\n\n /**\n * @private\n * @type {boolean}\n */\n this.overrideCollapsible_ = options.collapsible !== undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsible_ =\n options.collapsible !== undefined ? options.collapsible : true;\n\n if (!this.collapsible_) {\n this.collapsed_ = false;\n }\n\n /**\n * @private\n * @type {string | Array | undefined}\n */\n this.attributions_ = options.attributions;\n\n const className =\n options.className !== undefined ? options.className : 'ol-attribution';\n\n const tipLabel =\n options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n\n const expandClassName =\n options.expandClassName !== undefined\n ? options.expandClassName\n : className + '-expand';\n\n const collapseLabel =\n options.collapseLabel !== undefined ? options.collapseLabel : '\\u203A';\n\n const collapseClassName =\n options.collapseClassName !== undefined\n ? options.collapseClassName\n : className + '-collapse';\n\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.collapseLabel_ = document.createElement('span');\n this.collapseLabel_.textContent = collapseLabel;\n this.collapseLabel_.className = collapseClassName;\n } else {\n this.collapseLabel_ = collapseLabel;\n }\n\n const label = options.label !== undefined ? options.label : 'i';\n\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.label_ = document.createElement('span');\n this.label_.textContent = label;\n this.label_.className = expandClassName;\n } else {\n this.label_ = label;\n }\n\n const activeLabel =\n this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.toggleButton_ = document.createElement('button');\n this.toggleButton_.setAttribute('type', 'button');\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n this.toggleButton_.title = tipLabel;\n this.toggleButton_.appendChild(activeLabel);\n\n this.toggleButton_.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false,\n );\n\n const cssClasses =\n className +\n ' ' +\n CLASS_UNSELECTABLE +\n ' ' +\n CLASS_CONTROL +\n (this.collapsed_ && this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (this.collapsible_ ? '' : ' ol-uncollapsible');\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(this.toggleButton_);\n element.appendChild(this.ulElement_);\n\n /**\n * A list of currently rendered resolutions.\n * @type {Array}\n * @private\n */\n this.renderedAttributions_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * Collect a list of visible attributions and set the collapsible state.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @return {Array} Attributions.\n * @private\n */\n collectSourceAttributions_(frameState) {\n const layers = this.getMap().getAllLayers();\n const visibleAttributions = new Set(\n layers.flatMap((layer) => layer.getAttributions(frameState)),\n );\n if (this.attributions_ !== undefined) {\n Array.isArray(this.attributions_)\n ? this.attributions_.forEach((item) => visibleAttributions.add(item))\n : visibleAttributions.add(this.attributions_);\n }\n\n if (!this.overrideCollapsible_) {\n const collapsible = !layers.some(\n (layer) => layer.getSource()?.getAttributionsCollapsible() === false,\n );\n this.setCollapsible(collapsible);\n }\n return Array.from(visibleAttributions);\n }\n\n /**\n * @private\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n */\n async updateElement_(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n const attributions = await Promise.all(\n this.collectSourceAttributions_(frameState).map((attribution) =>\n toPromise(() => attribution),\n ),\n );\n\n const visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n\n if (equals(attributions, this.renderedAttributions_)) {\n return;\n }\n\n removeChildren(this.ulElement_);\n\n // append the attributions\n for (let i = 0, ii = attributions.length; i < ii; ++i) {\n const element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n\n this.renderedAttributions_ = attributions;\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n this.handleToggle_();\n this.userCollapsed_ = this.collapsed_;\n }\n\n /**\n * @private\n */\n handleToggle_() {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n } else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n }\n\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n getCollapsible() {\n return this.collapsible_;\n }\n\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n setCollapsible(collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (this.userCollapsed_) {\n this.handleToggle_();\n }\n }\n\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n setCollapsed(collapsed) {\n this.userCollapsed_ = collapsed;\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n }\n\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n getCollapsed() {\n return this.collapsed_;\n }\n\n /**\n * Update the attribution element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n this.updateElement_(mapEvent.frameState);\n }\n}\n\nexport default Attribution;\n", "/**\n * @module ol/control/Rotate\n */\nimport {CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\nimport EventType from '../events/EventType.js';\nimport Control from './Control.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nclass Rotate extends Control {\n /**\n * @param {Options} [options] Rotate options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-rotate';\n\n const label = options.label !== undefined ? options.label : '\\u21E7';\n\n const compassClassName =\n options.compassClassName !== undefined\n ? options.compassClassName\n : 'ol-compass';\n\n /**\n * @type {HTMLElement}\n * @private\n */\n this.label_ = null;\n\n if (typeof label === 'string') {\n this.label_ = document.createElement('span');\n this.label_.className = compassClassName;\n this.label_.textContent = label;\n } else {\n this.label_ = label;\n this.label_.classList.add(compassClassName);\n }\n\n const tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n\n const button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(this.label_);\n\n button.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false,\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(button);\n\n /**\n * @private\n */\n this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @type {boolean}\n * @private\n */\n this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.rotation_ = undefined;\n\n if (this.autoHide_) {\n this.element.classList.add(CLASS_HIDDEN);\n }\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n } else {\n this.resetNorth_();\n }\n }\n\n /**\n * @private\n */\n resetNorth_() {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const rotation = view.getRotation();\n if (rotation !== undefined) {\n if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setRotation(0);\n }\n }\n }\n\n /**\n * Update the rotate control element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n const frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n const rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n const transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n const contains = this.element.classList.contains(CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(CLASS_HIDDEN);\n } else if (contains && rotation !== 0) {\n this.element.classList.remove(CLASS_HIDDEN);\n }\n }\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n }\n}\n\nexport default Rotate;\n", "/**\n * @module ol/control/Zoom\n */\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\nimport EventType from '../events/EventType.js';\nimport Control from './Control.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='–'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nclass Zoom extends Control {\n /**\n * @param {Options} [options] Zoom options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-zoom';\n\n const delta = options.delta !== undefined ? options.delta : 1;\n\n const zoomInClassName =\n options.zoomInClassName !== undefined\n ? options.zoomInClassName\n : className + '-in';\n\n const zoomOutClassName =\n options.zoomOutClassName !== undefined\n ? options.zoomOutClassName\n : className + '-out';\n\n const zoomInLabel =\n options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n const zoomOutLabel =\n options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2013';\n\n const zoomInTipLabel =\n options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n const zoomOutTipLabel =\n options.zoomOutTipLabel !== undefined\n ? options.zoomOutTipLabel\n : 'Zoom out';\n\n const inElement = document.createElement('button');\n inElement.className = zoomInClassName;\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(\n typeof zoomInLabel === 'string'\n ? document.createTextNode(zoomInLabel)\n : zoomInLabel,\n );\n\n inElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, delta),\n false,\n );\n\n const outElement = document.createElement('button');\n outElement.className = zoomOutClassName;\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(\n typeof zoomOutLabel === 'string'\n ? document.createTextNode(zoomOutLabel)\n : zoomOutLabel,\n );\n\n outElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, -delta),\n false,\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n zoomByDelta_(delta) {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const currentZoom = view.getZoom();\n if (currentZoom !== undefined) {\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n zoom: newZoom,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setZoom(newZoom);\n }\n }\n }\n}\n\nexport default Zoom;\n", "/**\n * @module ol/control/defaults\n */\nimport Collection from '../Collection.js';\nimport Attribution from './Attribution.js';\nimport Rotate from './Rotate.js';\nimport Zoom from './Zoom.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n */\n\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * {@link module:ol/control/Zoom~Zoom}\n * {@link module:ol/control/Rotate~Rotate}\n * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions} [options] Options for the default controls.\n * @return {Collection} A collection of controls\n * to be used with the {@link module:ol/Map~Map} constructor's `controls` option.\n * @api\n */\nexport function defaults(options) {\n options = options ? options : {};\n\n /** @type {Collection} */\n const controls = new Collection();\n\n const zoomControl = options.zoom !== undefined ? options.zoom : true;\n if (zoomControl) {\n controls.push(new Zoom(options.zoomOptions));\n }\n\n const rotateControl = options.rotate !== undefined ? options.rotate : true;\n if (rotateControl) {\n controls.push(new Rotate(options.rotateOptions));\n }\n\n const attributionControl =\n options.attribution !== undefined ? options.attribution : true;\n if (attributionControl) {\n controls.push(new Attribution(options.attributionOptions));\n }\n\n return controls;\n}\n", "/**\n * @module ol/layer/Group\n */\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport {assert} from '../asserts.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {getIntersection} from '../extent.js';\nimport {clear} from '../obj.js';\nimport {getUid} from '../util.js';\nimport BaseLayer from './Base.js';\n\n/**\n * @typedef {'addlayer'|'removelayer'} GroupEventType\n */\n\n/**\n * @classdesc\n * A layer group triggers 'addlayer' and 'removelayer' events when layers are added to or removed from\n * the group or one of its child groups. When a layer group is added to or removed from another layer group,\n * a single event will be triggered (instead of one per layer in the group added or removed).\n */\nexport class GroupEvent extends Event {\n /**\n * @param {GroupEventType} type The event type.\n * @param {BaseLayer} layer The layer.\n */\n constructor(type, layer) {\n super(type);\n\n /**\n * The added or removed layer.\n * @type {BaseLayer}\n * @api\n */\n this.layer = layer;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} GroupOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array|Collection} [layers] Child layers.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LAYERS: 'layers',\n};\n\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @api\n */\nclass LayerGroup extends BaseLayer {\n /**\n * @param {Options} [options] Layer options.\n */\n constructor(options) {\n options = options || {};\n const baseOptions = /** @type {Options} */ (Object.assign({}, options));\n delete baseOptions.layers;\n\n let layers = options.layers;\n\n super(baseOptions);\n\n /***\n * @type {GroupOnSignature}\n */\n this.on;\n\n /***\n * @type {GroupOnSignature}\n */\n this.once;\n\n /***\n * @type {GroupOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {Array}\n */\n this.layersListenerKeys_ = [];\n\n /**\n * @private\n * @type {Object>}\n */\n this.listenerKeys_ = {};\n\n this.addChangeListener(Property.LAYERS, this.handleLayersChanged_);\n\n if (layers) {\n if (Array.isArray(layers)) {\n layers = new Collection(layers.slice(), {unique: true});\n } else {\n assert(\n typeof (/** @type {?} */ (layers).getArray) === 'function',\n 'Expected `layers` to be an array or a `Collection`',\n );\n }\n } else {\n layers = new Collection(undefined, {unique: true});\n }\n\n this.setLayers(layers);\n }\n\n /**\n * @private\n */\n handleLayerChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleLayersChanged_() {\n this.layersListenerKeys_.forEach(unlistenByKey);\n this.layersListenerKeys_.length = 0;\n\n const layers = this.getLayers();\n this.layersListenerKeys_.push(\n listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this),\n listen(\n layers,\n CollectionEventType.REMOVE,\n this.handleLayersRemove_,\n this,\n ),\n );\n\n for (const id in this.listenerKeys_) {\n this.listenerKeys_[id].forEach(unlistenByKey);\n }\n clear(this.listenerKeys_);\n\n const layersArray = layers.getArray();\n for (let i = 0, ii = layersArray.length; i < ii; i++) {\n const layer = layersArray[i];\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n }\n this.changed();\n }\n\n /**\n * @param {BaseLayer} layer The layer.\n */\n registerLayerListeners_(layer) {\n const listenerKeys = [\n listen(\n layer,\n ObjectEventType.PROPERTYCHANGE,\n this.handleLayerChange_,\n this,\n ),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n ];\n\n if (layer instanceof LayerGroup) {\n listenerKeys.push(\n listen(layer, 'addlayer', this.handleLayerGroupAdd_, this),\n listen(layer, 'removelayer', this.handleLayerGroupRemove_, this),\n );\n }\n\n this.listenerKeys_[getUid(layer)] = listenerKeys;\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupAdd_(event) {\n this.dispatchEvent(new GroupEvent('addlayer', event.layer));\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupRemove_(event) {\n this.dispatchEvent(new GroupEvent('removelayer', event.layer));\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersAdd_(collectionEvent) {\n const layer = collectionEvent.element;\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n this.changed();\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersRemove_(collectionEvent) {\n const layer = collectionEvent.element;\n const key = getUid(layer);\n this.listenerKeys_[key].forEach(unlistenByKey);\n delete this.listenerKeys_[key];\n this.dispatchEvent(new GroupEvent('removelayer', layer));\n this.changed();\n }\n\n /**\n * Returns the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @return {!Collection} Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n getLayers() {\n return /** @type {!Collection} */ (\n this.get(Property.LAYERS)\n );\n }\n\n /**\n * Set the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @param {!Collection} layers Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n setLayers(layers) {\n const collection = this.getLayers();\n if (collection) {\n const currentLayers = collection.getArray();\n for (let i = 0, ii = currentLayers.length; i < ii; ++i) {\n this.dispatchEvent(new GroupEvent('removelayer', currentLayers[i]));\n }\n }\n\n this.set(Property.LAYERS, layers);\n }\n\n /**\n * @param {Array} [array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n * @override\n */\n getLayersArray(array) {\n array = array !== undefined ? array : [];\n this.getLayers().forEach(function (layer) {\n layer.getLayersArray(array);\n });\n return array;\n }\n\n /**\n * Get the layer states list and use this groups z-index as the default\n * for all layers in this and nested groups, if it is unset at this point.\n * If dest is not provided and this group's z-index is undefined\n * 0 is used a the default z-index.\n * @param {Array} [dest] Optional list\n * of layer states (to be modified in place).\n * @return {Array} List of layer states.\n * @override\n */\n getLayerStatesArray(dest) {\n const states = dest !== undefined ? dest : [];\n const pos = states.length;\n\n this.getLayers().forEach(function (layer) {\n layer.getLayerStatesArray(states);\n });\n\n const ownLayerState = this.getLayerState();\n let defaultZIndex = ownLayerState.zIndex;\n if (!dest && ownLayerState.zIndex === undefined) {\n defaultZIndex = 0;\n }\n for (let i = pos, ii = states.length; i < ii; i++) {\n const layerState = states[i];\n layerState.opacity *= ownLayerState.opacity;\n layerState.visible = layerState.visible && ownLayerState.visible;\n layerState.maxResolution = Math.min(\n layerState.maxResolution,\n ownLayerState.maxResolution,\n );\n layerState.minResolution = Math.max(\n layerState.minResolution,\n ownLayerState.minResolution,\n );\n layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);\n layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);\n if (ownLayerState.extent !== undefined) {\n if (layerState.extent !== undefined) {\n layerState.extent = getIntersection(\n layerState.extent,\n ownLayerState.extent,\n );\n } else {\n layerState.extent = ownLayerState.extent;\n }\n }\n if (layerState.zIndex === undefined) {\n layerState.zIndex = defaultZIndex;\n }\n }\n\n return states;\n }\n\n /**\n * @return {import(\"../source/Source.js\").State} Source state.\n * @override\n */\n getSourceState() {\n return 'ready';\n }\n}\n\nexport default LayerGroup;\n", "/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport {wrapX} from '../coordinate.js';\nimport {getWidth} from '../extent.js';\nimport {TRUE} from '../functions.js';\nimport {inView} from '../layer/Layer.js';\nimport {shared as iconImageCache} from '../style/IconImageCache.js';\nimport {compose as composeTransform, makeInverse} from '../transform.js';\nimport {abstract} from '../util.js';\n\n/**\n * @template T\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"../layer/Layer.js\").default} layer Layer.\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} distanceSq Squared distance.\n * @property {import(\"./vector.js\").FeatureCallback} callback Callback.\n */\n\n/**\n * @abstract\n */\nclass MapRenderer extends Disposable {\n /**\n * @param {import(\"../Map.js\").default} map Map.\n */\n constructor(map) {\n super();\n\n /**\n * @private\n * @type {import(\"../Map.js\").default}\n */\n this.map_ = map;\n }\n\n /**\n * @abstract\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\n dispatchRenderEvent(type, frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @protected\n */\n calculateMatrices2D(frameState) {\n const viewState = frameState.viewState;\n const coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n const pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n\n composeTransform(\n coordinateToPixelTransform,\n frameState.size[0] / 2,\n frameState.size[1] / 2,\n 1 / viewState.resolution,\n -1 / viewState.resolution,\n -viewState.rotation,\n -viewState.center[0],\n -viewState.center[1],\n );\n\n makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\n forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n callback,\n thisArg,\n layerFilter,\n thisArg2,\n ) {\n let result;\n const viewState = frameState.viewState;\n\n /**\n * @param {boolean} managed Managed layer.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n return callback.call(thisArg, feature, managed ? layer : null, geometry);\n }\n\n const projection = viewState.projection;\n\n const translatedCoordinate = wrapX(coordinate.slice(), projection);\n const offsets = [[0, 0]];\n if (projection.canWrapX() && checkWrapped) {\n const projectionExtent = projection.getExtent();\n const worldWidth = getWidth(projectionExtent);\n offsets.push([-worldWidth, 0], [worldWidth, 0]);\n }\n\n const layerStates = frameState.layerStatesArray;\n const numLayers = layerStates.length;\n\n const matches = /** @type {Array>} */ ([]);\n const tmpCoord = [];\n for (let i = 0; i < offsets.length; i++) {\n for (let j = numLayers - 1; j >= 0; --j) {\n const layerState = layerStates[j];\n const layer = layerState.layer;\n if (\n layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter.call(thisArg2, layer)\n ) {\n const layerRenderer = layer.getRenderer();\n const source = layer.getSource();\n if (layerRenderer && source) {\n const coordinates = source.getWrapX()\n ? translatedCoordinate\n : coordinate;\n const callback = forEachFeatureAtCoordinate.bind(\n null,\n layerState.managed,\n );\n tmpCoord[0] = coordinates[0] + offsets[i][0];\n tmpCoord[1] = coordinates[1] + offsets[i][1];\n result = layerRenderer.forEachFeatureAtCoordinate(\n tmpCoord,\n frameState,\n hitTolerance,\n callback,\n matches,\n );\n }\n if (result) {\n return result;\n }\n }\n }\n }\n if (matches.length === 0) {\n return undefined;\n }\n const order = 1 / matches.length;\n matches.forEach((m, i) => (m.distanceSq += i * order));\n matches.sort((a, b) => a.distanceSq - b.distanceSq);\n matches.some((m) => {\n return (result = m.callback(m.feature, m.layer, m.geometry));\n });\n return result;\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n * @return {boolean} Is there a feature at the given coordinate?\n * @template U\n */\n hasFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n layerFilter,\n thisArg,\n ) {\n const hasFeature = this.forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n TRUE,\n this,\n layerFilter,\n thisArg,\n );\n\n return hasFeature !== undefined;\n }\n\n /**\n * @return {import(\"../Map.js\").default} Map.\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Render.\n * @abstract\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n */\n renderFrame(frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n scheduleExpireIconCache(frameState) {\n if (iconImageCache.canExpireCache()) {\n frameState.postRenderFunctions.push(expireIconCache);\n }\n }\n}\n\n/**\n * @param {import(\"../Map.js\").default} map Map.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n iconImageCache.expire();\n}\n\nexport default MapRenderer;\n", "/**\n * @module ol/renderer/Composite\n */\nimport ObjectEventType from '../ObjectEventType.js';\nimport {CLASS_UNSELECTABLE} from '../css.js';\nimport {replaceChildren} from '../dom.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport BaseVectorLayer from '../layer/BaseVector.js';\nimport {inView} from '../layer/Layer.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport {checkedFonts} from '../render/canvas.js';\nimport MapRenderer from './Map.js';\n\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nclass CompositeMapRenderer extends MapRenderer {\n /**\n * @param {import(\"../Map.js\").default} map Map.\n */\n constructor(map) {\n super(map);\n\n /**\n * @private\n * @type {import(\"../events.js\").EventsKey}\n */\n this.fontChangeListenerKey_ = listen(\n checkedFonts,\n ObjectEventType.PROPERTYCHANGE,\n map.redrawText,\n map,\n );\n\n /**\n * @private\n * @type {HTMLDivElement}\n */\n this.element_ = document.createElement('div');\n const style = this.element_.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n style.zIndex = '0';\n\n this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n\n const container = map.getViewport();\n container.insertBefore(this.element_, container.firstChild || null);\n\n /**\n * @private\n * @type {Array}\n */\n this.children_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @override\n */\n dispatchRenderEvent(type, frameState) {\n const map = this.getMap();\n if (map.hasListener(type)) {\n const event = new RenderEvent(type, undefined, frameState);\n map.dispatchEvent(event);\n }\n }\n\n /**\n * @override\n */\n disposeInternal() {\n unlistenByKey(this.fontChangeListenerKey_);\n this.element_.remove();\n super.disposeInternal();\n }\n\n /**\n * Render.\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n * @override\n */\n renderFrame(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element_.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n this.calculateMatrices2D(frameState);\n this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n\n const layerStatesArray = frameState.layerStatesArray.sort(\n (a, b) => a.zIndex - b.zIndex,\n );\n const declutter = layerStatesArray.some(\n (layerState) =>\n layerState.layer instanceof BaseVectorLayer &&\n layerState.layer.getDeclutter(),\n );\n if (declutter) {\n // Some layers need decluttering, turn on deferred rendering hint\n frameState.declutter = {};\n }\n const viewState = frameState.viewState;\n\n this.children_.length = 0;\n\n const renderedLayerStates = [];\n let previousElement = null;\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layerState = layerStatesArray[i];\n frameState.layerIndex = i;\n\n const layer = layerState.layer;\n const sourceState = layer.getSourceState();\n if (\n !inView(layerState, viewState) ||\n (sourceState != 'ready' && sourceState != 'undefined')\n ) {\n layer.unrender();\n continue;\n }\n\n const element = layer.render(frameState, previousElement);\n if (!element) {\n continue;\n }\n if (element !== previousElement) {\n this.children_.push(element);\n previousElement = element;\n }\n\n renderedLayerStates.push(layerState);\n }\n\n this.declutter(frameState, renderedLayerStates);\n\n replaceChildren(this.element_, this.children_);\n\n this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n\n if (!this.renderedVisible_) {\n this.element_.style.display = '';\n this.renderedVisible_ = true;\n }\n\n this.scheduleExpireIconCache(frameState);\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {Array} layerStates Layers.\n */\n declutter(frameState, layerStates) {\n if (!frameState.declutter) {\n return;\n }\n for (let i = layerStates.length - 1; i >= 0; --i) {\n const layerState = layerStates[i];\n const layer = layerState.layer;\n if (layer.getDeclutter()) {\n layer.renderDeclutter(frameState, layerState);\n }\n }\n layerStates.forEach((layerState) =>\n layerState.layer.renderDeferred(frameState),\n );\n }\n}\n\nexport default CompositeMapRenderer;\n", "/**\n * @module ol/Map\n */\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport BaseObject from './Object.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport TileQueue, {getTilePriority} from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport {equals} from './array.js';\nimport {assert} from './asserts.js';\nimport {warn} from './console.js';\nimport {defaults as defaultControls} from './control/defaults.js';\nimport EventType from './events/EventType.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {\n clone,\n createOrUpdateEmpty,\n equals as equalsExtent,\n getForViewAndSize,\n isEmpty,\n} from './extent.js';\nimport {TRUE} from './functions.js';\nimport {DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS} from './has.js';\nimport {defaults as defaultInteractions} from './interaction/defaults.js';\nimport LayerGroup, {GroupEvent} from './layer/Group.js';\nimport Layer from './layer/Layer.js';\nimport PointerEventType from './pointer/EventType.js';\nimport {fromUserCoordinate, toUserCoordinate} from './proj.js';\nimport RenderEventType from './render/EventType.js';\nimport CompositeMapRenderer from './renderer/Composite.js';\nimport {hasArea} from './size.js';\nimport {\n apply as applyTransform,\n create as createTransform,\n} from './transform.js';\nimport {getUid} from './util.js';\n\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate Animate.\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform CoordinateToPixelTransform.\n * @property {Object>|null} declutter\n * Declutter trees by declutter group.\n * When null, no decluttering is needed because no layers have decluttering enabled.\n * @property {null|import(\"./extent.js\").Extent} extent Extent (in view projection coordinates).\n * @property {import(\"./extent.js\").Extent} [nextExtent] Next extent during an animation series.\n * @property {number} index Index.\n * @property {Array} layerStatesArray LayerStatesArray.\n * @property {number} layerIndex LayerIndex.\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform PixelToCoordinateTransform.\n * @property {Array} postRenderFunctions PostRenderFunctions.\n * @property {import(\"./size.js\").Size} size Size.\n * @property {TileQueue} tileQueue TileQueue.\n * @property {!Object>} usedTiles UsedTiles.\n * @property {Array} viewHints ViewHints.\n * @property {!Object>} wantedTiles WantedTiles.\n * @property {string} mapId The id of the map.\n * @property {Object} renderTargets Identifiers of previously rendered elements.\n */\n\n/**\n * @typedef {function(Map, FrameState): any} PostRenderFunction\n */\n\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer~Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for wrapped geometries inside the range of\n * +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection} [controls] Controls.\n * @property {Collection} [interactions] Interactions.\n * @property {HTMLElement|Document} keyboardEventTarget KeyboardEventTarget.\n * @property {Collection} overlays Overlays.\n * @property {Object} values Values.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:layergroup'|'change:size'|'change:target'|'change:view'} MapObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} MapEventHandler\n */\n\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection|Array} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control/defaults.defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection|Array} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction/defaults.defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array|Collection|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection|Array} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * For accessibility (focus and keyboard events for map navigation), the `target` element must have a\n * properly configured `tabindex` attribute. If the `target` element is inside a Shadow DOM, the\n * `tabindex` atribute must be set on the custom element's host element.\n * **Note:** CSS `transform` support for the target element is limited to `scale`.\n * @property {View|Promise} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n */\nfunction removeLayerMapProperty(layer) {\n if (layer instanceof Layer) {\n layer.setMapInternal(null);\n return;\n }\n if (layer instanceof LayerGroup) {\n layer.getLayers().forEach(removeLayerMapProperty);\n }\n}\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @param {Map} map Map.\n */\nfunction setLayerMapProperty(layer, map) {\n if (layer instanceof Layer) {\n layer.setMapInternal(map);\n return;\n }\n if (layer instanceof LayerGroup) {\n const layers = layer.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n setLayerMapProperty(layers[i], map);\n }\n }\n}\n\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n * import Map from 'ol/Map.js';\n * import View from 'ol/View.js';\n * import TileLayer from 'ol/layer/Tile.js';\n * import OSM from 'ol/source/OSM.js';\n *\n * const map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1,\n * }),\n * layers: [\n * new TileLayer({\n * source: new OSM(),\n * }),\n * ],\n * target: 'map',\n * });\n *\n * The above snippet creates a map using a {@link module:ol/layer/Tile~TileLayer} to\n * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM\n * element with the id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link module:ol/Overlay~Overlay} for the difference). The map\n * itself is placed in a further element within the viewport.\n *\n * Layers are stored as a {@link module:ol/Collection~Collection} in\n * layerGroups. A top-level group is provided by the library. This is what is\n * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the\n * options are added to this group, and `addLayer` and `removeLayer` change the\n * layer collection in the group. `getLayers` is a convenience function for\n * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~LayerGroup}\n * is a subclass of {@link module:ol/layer/Base~BaseLayer}, so layers entered in the\n * options or added with `addLayer` can be groups, which can contain further\n * groups, and so on.\n *\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nclass Map extends BaseObject {\n /**\n * @param {MapOptions} [options] Map options.\n */\n constructor(options) {\n super();\n\n options = options || {};\n\n /***\n * @type {MapEventHandler}\n */\n this.on;\n\n /***\n * @type {MapEventHandler}\n */\n this.once;\n\n /***\n * @type {MapEventHandler}\n */\n this.un;\n\n const optionsInternal = createOptionsInternal(options);\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderComplete_ = false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.loaded_ = true;\n\n /** @private */\n this.boundHandleBrowserEvent_ = this.handleBrowserEvent.bind(this);\n\n /**\n * @type {number}\n * @private\n */\n this.maxTilesLoading_ =\n options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ =\n options.pixelRatio !== undefined\n ? options.pixelRatio\n : DEVICE_PIXEL_RATIO;\n\n /**\n * @private\n * @type {ReturnType}\n */\n this.postRenderTimeoutHandle_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.animationDelayKey_;\n\n /**\n * @private\n */\n this.animationDelay_ = this.animationDelay_.bind(this);\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.coordinateToPixelTransform_ = createTransform();\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.pixelToCoordinateTransform_ = createTransform();\n\n /**\n * @private\n * @type {number}\n */\n this.frameIndex_ = 0;\n\n /**\n * @private\n * @type {?FrameState}\n */\n this.frameState_ = null;\n\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {import(\"./extent.js\").Extent}\n */\n this.previousExtent_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewPropertyListenerKey_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewChangeListenerKey_ = null;\n\n /**\n * @private\n * @type {?Array}\n */\n this.layerGroupPropertyListenerKeys_ = null;\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.viewport_ = document.createElement('div');\n this.viewport_.className =\n 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n this.viewport_.style.position = 'relative';\n this.viewport_.style.overflow = 'hidden';\n this.viewport_.style.width = '100%';\n this.viewport_.style.height = '100%';\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainer_ = document.createElement('div');\n this.overlayContainer_.style.position = 'absolute';\n this.overlayContainer_.style.zIndex = '0';\n this.overlayContainer_.style.width = '100%';\n this.overlayContainer_.style.height = '100%';\n this.overlayContainer_.style.pointerEvents = 'none';\n this.overlayContainer_.className = 'ol-overlaycontainer';\n this.viewport_.appendChild(this.overlayContainer_);\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainerStopEvent_ = document.createElement('div');\n this.overlayContainerStopEvent_.style.position = 'absolute';\n this.overlayContainerStopEvent_.style.zIndex = '0';\n this.overlayContainerStopEvent_.style.width = '100%';\n this.overlayContainerStopEvent_.style.height = '100%';\n this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n this.viewport_.appendChild(this.overlayContainerStopEvent_);\n\n /**\n * @private\n * @type {MapBrowserEventHandler}\n */\n this.mapBrowserEventHandler_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.moveTolerance_ = options.moveTolerance;\n\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n\n /**\n * @private\n * @type {?Array}\n */\n this.targetChangeHandlerKeys_ = null;\n\n /**\n * @private\n * @type {HTMLElement|null}\n */\n this.targetElement_ = null;\n\n /**\n * @private\n * @type {ResizeObserver}\n */\n this.resizeObserver_ = new ResizeObserver(() => this.updateSize());\n\n /**\n * @type {Collection}\n * @protected\n */\n this.controls = optionsInternal.controls || defaultControls();\n\n /**\n * @type {Collection}\n * @protected\n */\n this.interactions =\n optionsInternal.interactions ||\n defaultInteractions({\n onFocusOnly: true,\n });\n\n /**\n * @type {Collection}\n * @private\n */\n this.overlays_ = optionsInternal.overlays;\n\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object}\n */\n this.overlayIdIndex_ = {};\n\n /**\n * @type {import(\"./renderer/Map.js\").default|null}\n * @private\n */\n this.renderer_ = null;\n\n /**\n * @private\n * @type {!Array}\n */\n this.postRenderFunctions_ = [];\n\n /**\n * @private\n * @type {TileQueue}\n */\n this.tileQueue_ = new TileQueue(\n this.getTilePriority.bind(this),\n this.handleTileChange_.bind(this),\n );\n\n this.addChangeListener(\n MapProperty.LAYERGROUP,\n this.handleLayerGroupChanged_,\n );\n this.addChangeListener(MapProperty.VIEW, this.handleViewChanged_);\n this.addChangeListener(MapProperty.SIZE, this.handleSizeChanged_);\n this.addChangeListener(MapProperty.TARGET, this.handleTargetChanged_);\n\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n this.setProperties(optionsInternal.values);\n\n const map = this;\n if (options.view && !(options.view instanceof View)) {\n options.view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n this.controls.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent\n */\n (event) => {\n event.element.setMap(this);\n },\n );\n\n this.controls.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n event.element.setMap(null);\n },\n );\n\n this.interactions.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n event.element.setMap(this);\n },\n );\n\n this.interactions.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n event.element.setMap(null);\n },\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n this.addOverlayInternal_(event.element);\n },\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n const id = event.element.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n },\n );\n\n this.controls.forEach(\n /**\n * @param {import(\"./control/Control.js\").default} control Control.\n */\n (control) => {\n control.setMap(this);\n },\n );\n\n this.interactions.forEach(\n /**\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n */\n (interaction) => {\n interaction.setMap(this);\n },\n );\n\n this.overlays_.forEach(this.addOverlayInternal_.bind(this));\n }\n\n /**\n * Add the given control to the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @api\n */\n addControl(control) {\n this.getControls().push(control);\n }\n\n /**\n * Add the given interaction to the map. If you want to add an interaction\n * at another point of the collection use `getInteractions()` and the methods\n * available on {@link module:ol/Collection~Collection}. This can be used to\n * stop the event propagation from the handleEvent function. The interactions\n * get to handle the events in the reverse order of this collection.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n * @api\n */\n addInteraction(interaction) {\n this.getInteractions().push(interaction);\n }\n\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @api\n */\n addLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer add event.\n * @private\n */\n handleLayerAdd_(event) {\n setLayerMapProperty(event.layer, this);\n }\n\n /**\n * Add the given overlay to the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @api\n */\n addOverlay(overlay) {\n this.getOverlays().push(overlay);\n }\n\n /**\n * This deals with map's overlay collection changes.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @private\n */\n addOverlayInternal_(overlay) {\n const id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n }\n\n /**\n *\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.controls.clear();\n this.interactions.clear();\n this.overlays_.clear();\n this.resizeObserver_.disconnect();\n this.setTarget(null);\n super.disposeInternal();\n }\n\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `options`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature~Feature feature} or\n * {@link module:ol/render/Feature~RenderFeature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer~Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template T\n * @api\n */\n forEachFeatureAtPixel(pixel, callback, options) {\n if (!this.frameState_ || !this.renderer_) {\n return;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n options = options !== undefined ? options : {};\n const hitTolerance =\n options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const layerFilter =\n options.layerFilter !== undefined ? options.layerFilter : TRUE;\n const checkWrapped = options.checkWrapped !== false;\n return this.renderer_.forEachFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n callback,\n null,\n layerFilter,\n null,\n );\n }\n\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {Array} The detected features or\n * an empty array if none were found.\n * @api\n */\n getFeaturesAtPixel(pixel, options) {\n const features = [];\n this.forEachFeatureAtPixel(\n pixel,\n function (feature) {\n features.push(feature);\n },\n options,\n );\n return features;\n }\n\n /**\n * Get all layers from all layer groups.\n * @return {Array} Layers.\n * @api\n */\n getAllLayers() {\n const layers = [];\n function addLayersFrom(layerGroup) {\n layerGroup.forEach(function (layer) {\n if (layer instanceof LayerGroup) {\n addLayersFrom(layer.getLayers());\n } else {\n layers.push(layer);\n }\n });\n }\n addLayersFrom(this.getLayers());\n return layers;\n }\n\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through the `layerFilter` option.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @api\n */\n hasFeatureAtPixel(pixel, options) {\n if (!this.frameState_ || !this.renderer_) {\n return false;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n options = options !== undefined ? options : {};\n const layerFilter =\n options.layerFilter !== undefined ? options.layerFilter : TRUE;\n const hitTolerance =\n options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const checkWrapped = options.checkWrapped !== false;\n return this.renderer_.hasFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n layerFilter,\n null,\n );\n }\n\n /**\n * Returns the coordinate in user projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n getEventCoordinate(event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n }\n\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n */\n getEventCoordinateInternal(event) {\n return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n }\n\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {UIEvent|{clientX: number, clientY: number}} event Event.\n * @return {import(\"./pixel.js\").Pixel} Pixel.\n * @api\n */\n getEventPixel(event) {\n const viewport = this.viewport_;\n const viewportPosition = viewport.getBoundingClientRect();\n const viewportSize = this.getSize();\n const scaleX = viewportPosition.width / viewportSize[0];\n const scaleY = viewportPosition.height / viewportSize[1];\n const eventPosition =\n //FIXME Are we really calling this with a TouchEvent anywhere?\n 'changedTouches' in event\n ? /** @type {TouchEvent} */ (event).changedTouches[0]\n : /** @type {MouseEvent} */ (event);\n\n return [\n (eventPosition.clientX - viewportPosition.left) / scaleX,\n (eventPosition.clientY - viewportPosition.top) / scaleY,\n ];\n }\n\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n getTarget() {\n return /** @type {HTMLElement|string|undefined} */ (\n this.get(MapProperty.TARGET)\n );\n }\n\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n getTargetElement() {\n return this.targetElement_;\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * user projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n * @api\n */\n getCoordinateFromPixel(pixel) {\n return toUserCoordinate(\n this.getCoordinateFromPixelInternal(pixel),\n this.getView().getProjection(),\n );\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n */\n getCoordinateFromPixelInternal(pixel) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n return applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n }\n\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {Collection} Controls.\n * @api\n */\n getControls() {\n return this.controls;\n }\n\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {Collection} Overlays.\n * @api\n */\n getOverlays() {\n return this.overlays_;\n }\n\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {import(\"./Overlay.js\").default|null} Overlay.\n * @api\n */\n getOverlayById(id) {\n const overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n }\n\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {Collection} Interactions.\n * @api\n */\n getInteractions() {\n return this.interactions;\n }\n\n /**\n * Get the layergroup associated with this map.\n * @return {LayerGroup} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n getLayerGroup() {\n return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n }\n\n /**\n * Clear any existing layers and add layers to the map.\n * @param {Array|Collection} layers The layers to be added to the map.\n * @api\n */\n setLayers(layers) {\n const group = this.getLayerGroup();\n if (layers instanceof Collection) {\n group.setLayers(layers);\n return;\n }\n\n const collection = group.getLayers();\n collection.clear();\n collection.extend(layers);\n }\n\n /**\n * Get the collection of layers associated with this map.\n * @return {!Collection} Layers.\n * @api\n */\n getLayers() {\n const layers = this.getLayerGroup().getLayers();\n return layers;\n }\n\n /**\n * @return {boolean} Layers have sources that are still loading.\n */\n getLoadingOrNotReady() {\n const layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const state = layerStatesArray[i];\n if (!state.visible) {\n continue;\n }\n const renderer = state.layer.getRenderer();\n if (renderer && !renderer.ready) {\n return true;\n }\n const source = state.layer.getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the user\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n * @api\n */\n getPixelFromCoordinate(coordinate) {\n const viewCoordinate = fromUserCoordinate(\n coordinate,\n this.getView().getProjection(),\n );\n return this.getPixelFromCoordinateInternal(viewCoordinate);\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n */\n getPixelFromCoordinateInternal(coordinate) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n return applyTransform(\n frameState.coordinateToPixelTransform,\n coordinate.slice(0, 2),\n );\n }\n\n /**\n * Get the map renderer.\n * @return {import(\"./renderer/Map.js\").default|null} Renderer\n */\n getRenderer() {\n return this.renderer_;\n }\n\n /**\n * Get the size of this map.\n * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n getSize() {\n return /** @type {import(\"./size.js\").Size|undefined} */ (\n this.get(MapProperty.SIZE)\n );\n }\n\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {View} The view that controls this map.\n * @observable\n * @api\n */\n getView() {\n return /** @type {View} */ (this.get(MapProperty.VIEW));\n }\n\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n getViewport() {\n return this.viewport_;\n }\n\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n getOverlayContainer() {\n return this.overlayContainer_;\n }\n\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n getOverlayContainerStopEvent() {\n return this.overlayContainerStopEvent_;\n }\n\n /**\n * @return {!Document} The document where the map is displayed.\n */\n getOwnerDocument() {\n const targetElement = this.getTargetElement();\n return targetElement ? targetElement.ownerDocument : document;\n }\n\n /**\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n getTilePriority(tile, tileSourceKey, tileCenter, tileResolution) {\n return getTilePriority(\n this.frameState_,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution,\n );\n }\n\n /**\n * @param {UIEvent} browserEvent Browser event.\n * @param {string} [type] Type.\n */\n handleBrowserEvent(browserEvent, type) {\n type = type || browserEvent.type;\n const mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n }\n\n /**\n * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n handleMapBrowserEvent(mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n const originalEvent = /** @type {PointerEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const eventType = originalEvent.type;\n if (\n eventType === PointerEventType.POINTERDOWN ||\n eventType === EventType.WHEEL ||\n eventType === EventType.KEYDOWN\n ) {\n const doc = this.getOwnerDocument();\n const rootNode = this.viewport_.getRootNode\n ? this.viewport_.getRootNode()\n : doc;\n const target = /** @type {Node} */ (originalEvent.target);\n\n const currentDoc =\n rootNode instanceof ShadowRoot\n ? rootNode.host === target\n ? rootNode.host.ownerDocument\n : rootNode\n : rootNode === doc\n ? doc.documentElement\n : rootNode;\n if (\n // Abort if the target is a child of the container for elements whose events are not meant\n // to be handled by map interactions.\n this.overlayContainerStopEvent_.contains(target) ||\n // Abort if the event target is a child of the container that is no longer in the page.\n // It's possible for the target to no longer be in the page if it has been removed in an\n // event listener, this might happen in a Control that recreates it's content based on\n // user interaction either manually or via a render in something like https://reactjs.org/\n !currentDoc.contains(target)\n ) {\n return;\n }\n }\n mapBrowserEvent.frameState = this.frameState_;\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n const interactionsArray = this.getInteractions().getArray().slice();\n for (let i = interactionsArray.length - 1; i >= 0; i--) {\n const interaction = interactionsArray[i];\n if (\n interaction.getMap() !== this ||\n !interaction.getActive() ||\n !this.getTargetElement()\n ) {\n continue;\n }\n const cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont || mapBrowserEvent.propagationStopped) {\n break;\n }\n }\n }\n }\n\n /**\n * @protected\n */\n handlePostRender() {\n const frameState = this.frameState_;\n\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n const tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n let maxTotalLoading = this.maxTilesLoading_;\n let maxNewLoads = maxTotalLoading;\n if (frameState) {\n const hints = frameState.viewHints;\n if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) {\n const lowOnFrameBudget = Date.now() - frameState.time > 8;\n maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n maxNewLoads = lowOnFrameBudget ? 0 : 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n\n if (frameState && this.renderer_ && !frameState.animate) {\n if (this.renderComplete_) {\n if (this.hasListener(RenderEventType.RENDERCOMPLETE)) {\n this.renderer_.dispatchRenderEvent(\n RenderEventType.RENDERCOMPLETE,\n frameState,\n );\n }\n if (this.loaded_ === false) {\n this.loaded_ = true;\n this.dispatchEvent(\n new MapEvent(MapEventType.LOADEND, this, frameState),\n );\n }\n } else if (this.loaded_ === true) {\n this.loaded_ = false;\n this.dispatchEvent(\n new MapEvent(MapEventType.LOADSTART, this, frameState),\n );\n }\n }\n\n const postRenderFunctions = this.postRenderFunctions_;\n if (frameState) {\n for (let i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n }\n postRenderFunctions.length = 0;\n }\n\n /**\n * @private\n */\n handleSizeChanged_() {\n if (this.getView() && !this.getView().getAnimating()) {\n this.getView().resolveConstraints(0);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n handleTargetChanged_() {\n if (this.mapBrowserEventHandler_) {\n for (let i = 0, ii = this.targetChangeHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.targetChangeHandlerKeys_[i]);\n }\n this.targetChangeHandlerKeys_ = null;\n this.viewport_.removeEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_,\n );\n this.viewport_.removeEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_,\n );\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n this.viewport_.remove();\n }\n\n if (this.targetElement_) {\n this.resizeObserver_.unobserve(this.targetElement_);\n const rootNode = this.targetElement_.getRootNode();\n if (rootNode instanceof ShadowRoot) {\n this.resizeObserver_.unobserve(rootNode.host);\n }\n this.setSize(undefined);\n }\n\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n\n const target = this.getTarget();\n const targetElement =\n typeof target === 'string' ? document.getElementById(target) : target;\n this.targetElement_ = targetElement;\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n } else {\n targetElement.appendChild(this.viewport_);\n if (!this.renderer_) {\n this.renderer_ = new CompositeMapRenderer(this);\n }\n\n this.mapBrowserEventHandler_ = new MapBrowserEventHandler(\n this,\n this.moveTolerance_,\n );\n for (const key in MapBrowserEventType) {\n this.mapBrowserEventHandler_.addEventListener(\n MapBrowserEventType[key],\n this.handleMapBrowserEvent.bind(this),\n );\n }\n this.viewport_.addEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_,\n false,\n );\n this.viewport_.addEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false,\n );\n\n let keyboardEventTarget;\n if (!this.keyboardEventTarget_) {\n // check if map target is in shadowDOM, if yes use host element as target\n const targetRoot = targetElement.getRootNode();\n const targetCandidate =\n targetRoot instanceof ShadowRoot ? targetRoot.host : targetElement;\n keyboardEventTarget = targetCandidate;\n } else {\n keyboardEventTarget = this.keyboardEventTarget_;\n }\n\n this.targetChangeHandlerKeys_ = [\n listen(\n keyboardEventTarget,\n EventType.KEYDOWN,\n this.handleBrowserEvent,\n this,\n ),\n listen(\n keyboardEventTarget,\n EventType.KEYPRESS,\n this.handleBrowserEvent,\n this,\n ),\n ];\n const rootNode = targetElement.getRootNode();\n if (rootNode instanceof ShadowRoot) {\n this.resizeObserver_.observe(rootNode.host);\n }\n this.resizeObserver_.observe(targetElement);\n }\n\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n }\n\n /**\n * @private\n */\n handleTileChange_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewPropertyChanged_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewChanged_() {\n if (this.viewPropertyListenerKey_) {\n unlistenByKey(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n unlistenByKey(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n const view = this.getView();\n if (view) {\n this.updateViewportSize_(this.getSize());\n\n this.viewPropertyListenerKey_ = listen(\n view,\n ObjectEventType.PROPERTYCHANGE,\n this.handleViewPropertyChanged_,\n this,\n );\n this.viewChangeListenerKey_ = listen(\n view,\n EventType.CHANGE,\n this.handleViewPropertyChanged_,\n this,\n );\n\n view.resolveConstraints(0);\n }\n this.render();\n }\n\n /**\n * @private\n */\n handleLayerGroupChanged_() {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n const layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.handleLayerAdd_(new GroupEvent('addlayer', layerGroup));\n this.layerGroupPropertyListenerKeys_ = [\n listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n listen(layerGroup, EventType.CHANGE, this.render, this),\n listen(layerGroup, 'addlayer', this.handleLayerAdd_, this),\n listen(layerGroup, 'removelayer', this.handleLayerRemove_, this),\n ];\n }\n this.render();\n }\n\n /**\n * @return {boolean} Is rendered.\n */\n isRendered() {\n return !!this.frameState_;\n }\n\n /**\n * @private\n */\n animationDelay_() {\n this.animationDelayKey_ = undefined;\n this.renderFrame_(Date.now());\n }\n\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n renderSync() {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n }\n\n /**\n * Redraws all text after new fonts have loaded\n */\n redrawText() {\n const layerStates = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStates.length; i < ii; ++i) {\n const layer = layerStates[i].layer;\n if (layer.hasRenderer()) {\n layer.getRenderer().handleFontsChanged();\n }\n }\n }\n\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n render() {\n if (this.renderer_ && this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n }\n\n /**\n * Remove the given control from the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n removeControl(control) {\n return this.getControls().remove(control);\n }\n\n /**\n * Remove the given interaction from the map.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n removeInteraction(interaction) {\n return this.getInteractions().remove(interaction);\n }\n\n /**\n * Removes the given layer from the map.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n removeLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer remove event.\n * @private\n */\n handleLayerRemove_(event) {\n removeLayerMapProperty(event.layer);\n }\n\n /**\n * Remove the given overlay from the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n removeOverlay(overlay) {\n return this.getOverlays().remove(overlay);\n }\n\n /**\n * @param {number} time Time.\n * @private\n */\n renderFrame_(time) {\n const size = this.getSize();\n const view = this.getView();\n const previousFrameState = this.frameState_;\n /** @type {?FrameState} */\n let frameState = null;\n if (size !== undefined && hasArea(size) && view && view.isDef()) {\n const viewHints = view.getHints(\n this.frameState_ ? this.frameState_.viewHints : undefined,\n );\n const viewState = view.getState();\n frameState = {\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n declutter: null,\n extent: getForViewAndSize(\n viewState.center,\n viewState.resolution,\n viewState.rotation,\n size,\n ),\n index: this.frameIndex_++,\n layerIndex: 0,\n layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {},\n mapId: getUid(this),\n renderTargets: {},\n };\n if (viewState.nextCenter && viewState.nextResolution) {\n const rotation = isNaN(viewState.nextRotation)\n ? viewState.rotation\n : viewState.nextRotation;\n\n frameState.nextExtent = getForViewAndSize(\n viewState.nextCenter,\n viewState.nextResolution,\n rotation,\n size,\n );\n }\n }\n\n this.frameState_ = frameState;\n this.renderer_.renderFrame(frameState);\n\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(\n this.postRenderFunctions_,\n frameState.postRenderFunctions,\n );\n\n if (previousFrameState) {\n const moveStart =\n !this.previousExtent_ ||\n (!isEmpty(this.previousExtent_) &&\n !equalsExtent(frameState.extent, this.previousExtent_));\n if (moveStart) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVESTART, this, previousFrameState),\n );\n this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n }\n }\n\n const idle =\n this.previousExtent_ &&\n !frameState.viewHints[ViewHint.ANIMATING] &&\n !frameState.viewHints[ViewHint.INTERACTING] &&\n !equalsExtent(frameState.extent, this.previousExtent_);\n\n if (idle) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVEEND, this, frameState),\n );\n clone(frameState.extent, this.previousExtent_);\n }\n }\n\n this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n\n this.renderComplete_ =\n (this.hasListener(MapEventType.LOADSTART) ||\n this.hasListener(MapEventType.LOADEND) ||\n this.hasListener(RenderEventType.RENDERCOMPLETE)) &&\n !this.tileQueue_.getTilesLoading() &&\n !this.tileQueue_.getCount() &&\n !this.getLoadingOrNotReady();\n\n if (!this.postRenderTimeoutHandle_) {\n this.postRenderTimeoutHandle_ = setTimeout(() => {\n this.postRenderTimeoutHandle_ = undefined;\n this.handlePostRender();\n }, 0);\n }\n }\n\n /**\n * Sets the layergroup of this map.\n * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n setLayerGroup(layerGroup) {\n const oldLayerGroup = this.getLayerGroup();\n if (oldLayerGroup) {\n this.handleLayerRemove_(new GroupEvent('removelayer', oldLayerGroup));\n }\n this.set(MapProperty.LAYERGROUP, layerGroup);\n }\n\n /**\n * Set the size of this map.\n * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n setSize(size) {\n this.set(MapProperty.SIZE, size);\n }\n\n /**\n * Set the target element to render this map into.\n * For accessibility (focus and keyboard events for map navigation), the `target` element must have a\n * properly configured `tabindex` attribute. If the `target` element is inside a Shadow DOM, the\n * `tabindex` atribute must be set on the custom element's host element.\n * @param {HTMLElement|string} [target] The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n setTarget(target) {\n this.set(MapProperty.TARGET, target);\n }\n\n /**\n * Set the view for this map.\n * @param {View|Promise} view The view that controls this map.\n * It is also possible to pass a promise that resolves to options for constructing a view. This\n * alternative allows view properties to be resolved by sources or other components that load\n * view-related metadata.\n * @observable\n * @api\n */\n setView(view) {\n if (!view || view instanceof View) {\n this.set(MapProperty.VIEW, view);\n return;\n }\n this.set(MapProperty.VIEW, new View());\n\n const map = this;\n view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n updateSize() {\n const targetElement = this.getTargetElement();\n\n let size = undefined;\n if (targetElement) {\n const computedStyle = getComputedStyle(targetElement);\n const width =\n targetElement.offsetWidth -\n parseFloat(computedStyle['borderLeftWidth']) -\n parseFloat(computedStyle['paddingLeft']) -\n parseFloat(computedStyle['paddingRight']) -\n parseFloat(computedStyle['borderRightWidth']);\n const height =\n targetElement.offsetHeight -\n parseFloat(computedStyle['borderTopWidth']) -\n parseFloat(computedStyle['paddingTop']) -\n parseFloat(computedStyle['paddingBottom']) -\n parseFloat(computedStyle['borderBottomWidth']);\n if (!isNaN(width) && !isNaN(height)) {\n size = [Math.max(0, width), Math.max(0, height)];\n if (\n !hasArea(size) &&\n !!(\n targetElement.offsetWidth ||\n targetElement.offsetHeight ||\n targetElement.getClientRects().length\n )\n ) {\n warn(\n \"No map visible because the map container's width or height are 0.\",\n );\n }\n }\n }\n\n const oldSize = this.getSize();\n if (size && (!oldSize || !equals(size, oldSize))) {\n this.setSize(size);\n this.updateViewportSize_(size);\n }\n }\n\n /**\n * Recomputes the viewport size and save it on the view object (if any)\n * @param {import(\"./size.js\").Size|undefined} size The size.\n * @private\n */\n updateViewportSize_(size) {\n const view = this.getView();\n if (view) {\n view.setViewportSize(size);\n }\n }\n}\n\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n /**\n * @type {HTMLElement|Document}\n */\n let keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget =\n typeof options.keyboardEventTarget === 'string'\n ? document.getElementById(options.keyboardEventTarget)\n : options.keyboardEventTarget;\n }\n\n /**\n * @type {Object}\n */\n const values = {};\n\n const layerGroup =\n options.layers &&\n typeof (/** @type {?} */ (options.layers).getLayers) === 'function'\n ? /** @type {LayerGroup} */ (options.layers)\n : new LayerGroup({\n layers:\n /** @type {Collection|Array} */ (\n options.layers\n ),\n });\n values[MapProperty.LAYERGROUP] = layerGroup;\n\n values[MapProperty.TARGET] = options.target;\n\n values[MapProperty.VIEW] =\n options.view instanceof View ? options.view : new View();\n\n /** @type {Collection} */\n let controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new Collection(options.controls.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.controls).getArray) === 'function',\n 'Expected `controls` to be an array or an `ol/Collection.js`',\n );\n controls = options.controls;\n }\n }\n\n /** @type {Collection} */\n let interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new Collection(options.interactions.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.interactions).getArray) ===\n 'function',\n 'Expected `interactions` to be an array or an `ol/Collection.js`',\n );\n interactions = options.interactions;\n }\n }\n\n /** @type {Collection} */\n let overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new Collection(options.overlays.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.overlays).getArray) === 'function',\n 'Expected `overlays` to be an array or an `ol/Collection.js`',\n );\n overlays = options.overlays;\n }\n } else {\n overlays = new Collection();\n }\n\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values,\n };\n}\nexport default Map;\n", "/**\n * @module ol/Overlay\n */\nimport MapEventType from './MapEventType.js';\nimport BaseObject from './Object.js';\nimport {CLASS_SELECTABLE} from './css.js';\nimport {outerHeight, outerWidth, removeChildren} from './dom.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {containsExtent} from './extent.js';\n\n/**\n * @typedef {'bottom-left' | 'bottom-center' | 'bottom-right' | 'center-left' | 'center-center' | 'center-right' | 'top-left' | 'top-center' | 'top-right'} Positioning\n * The overlay position: `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, or `'top-right'`.\n */\n\n/**\n * @typedef {Object} Options\n * @property {number|string} [id] Set the overlay id. The overlay id can be used\n * with the {@link module:ol/Map~Map#getOverlayById} method.\n * @property {HTMLElement} [element] The overlay element.\n * @property {Array} [offset=[0, 0]] Offsets in pixels used when positioning\n * the overlay. The first element in the\n * array is the horizontal offset. A positive value shifts the overlay right.\n * The second element in the array is the vertical offset. A positive value\n * shifts the overlay down.\n * @property {import(\"./coordinate.js\").Coordinate} [position] The overlay position\n * in map projection.\n * @property {Positioning} [positioning='top-left'] Defines how\n * the overlay is actually positioned with respect to its `position` property.\n * Possible values are `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, and `'top-right'`.\n * @property {boolean} [stopEvent=true] Whether event propagation to the map\n * viewport should be stopped. If `true` the overlay is placed in the same\n * container as that of the controls (CSS class name\n * `ol-overlaycontainer-stopevent`); if `false` it is placed in the container\n * with CSS class name specified by the `className` property.\n * @property {boolean} [insertFirst=true] Whether the overlay is inserted first\n * in the overlay container, or appended. If the overlay is placed in the same\n * container as that of the controls (see the `stopEvent` option) you will\n * probably set `insertFirst` to `true` so the overlay is displayed below the\n * controls.\n * @property {PanIntoViewOptions|boolean} [autoPan=false] Pan the map when calling\n * `setPosition`, so that the overlay is entirely visible in the current viewport.\n * @property {string} [className='ol-overlay-container ol-selectable'] CSS class\n * name.\n */\n\n/**\n * @typedef {Object} PanOptions\n * @property {number} [duration=1000] The duration of the animation in\n * milliseconds.\n * @property {function(number):number} [easing] The easing function to use. Can\n * be one from {@link module:ol/easing} or a custom function.\n * Default is {@link module:ol/easing.inAndOut}.\n */\n\n/**\n * @typedef {Object} PanIntoViewOptions\n * @property {PanOptions} [animation={}] The animation parameters for the pan\n * @property {number} [margin=20] The margin (in pixels) between the\n * overlay and the borders of the map when panning into view.\n */\n\n/**\n * @enum {string}\n * @protected\n */\nconst Property = {\n ELEMENT: 'element',\n MAP: 'map',\n OFFSET: 'offset',\n POSITION: 'position',\n POSITIONING: 'positioning',\n};\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:element'|'change:map'|'change:offset'|'change:position'|\n * 'change:positioning'} OverlayObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} OverlayOnSignature\n */\n\n/**\n * @classdesc\n * An element to be displayed over the map and attached to a single map\n * location. Like {@link module:ol/control/Control~Control}, Overlays are\n * visible widgets. Unlike Controls, they are not in a fixed position on the\n * screen, but are tied to a geographical coordinate, so panning the map will\n * move an Overlay but not a Control.\n *\n * Example:\n *\n * import Overlay from 'ol/Overlay.js';\n *\n * // ...\n * const popup = new Overlay({\n * element: document.getElementById('popup'),\n * });\n * popup.setPosition(coordinate);\n * map.addOverlay(popup);\n *\n * @api\n */\nclass Overlay extends BaseObject {\n /**\n * @param {Options} options Overlay options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {OverlayOnSignature}\n */\n this.on;\n\n /***\n * @type {OverlayOnSignature}\n */\n this.once;\n\n /***\n * @type {OverlayOnSignature}\n */\n this.un;\n\n /**\n * @protected\n * @type {Options}\n */\n this.options = options;\n\n /**\n * @protected\n * @type {number|string|undefined}\n */\n this.id = options.id;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.insertFirst =\n options.insertFirst !== undefined ? options.insertFirst : true;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.stopEvent = options.stopEvent !== undefined ? options.stopEvent : true;\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = document.createElement('div');\n this.element.className =\n options.className !== undefined\n ? options.className\n : 'ol-overlay-container ' + CLASS_SELECTABLE;\n this.element.style.position = 'absolute';\n this.element.style.pointerEvents = 'auto';\n\n /**\n * @protected\n * @type {PanIntoViewOptions|undefined}\n */\n this.autoPan = options.autoPan === true ? {} : options.autoPan || undefined;\n\n /**\n * @protected\n * @type {{transform_: string,\n * visible: boolean}}\n */\n this.rendered = {\n transform_: '',\n visible: true,\n };\n\n /**\n * @protected\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.mapPostrenderListenerKey = null;\n\n this.addChangeListener(Property.ELEMENT, this.handleElementChanged);\n this.addChangeListener(Property.MAP, this.handleMapChanged);\n this.addChangeListener(Property.OFFSET, this.handleOffsetChanged);\n this.addChangeListener(Property.POSITION, this.handlePositionChanged);\n this.addChangeListener(Property.POSITIONING, this.handlePositioningChanged);\n\n if (options.element !== undefined) {\n this.setElement(options.element);\n }\n\n this.setOffset(options.offset !== undefined ? options.offset : [0, 0]);\n\n this.setPositioning(options.positioning || 'top-left');\n\n if (options.position !== undefined) {\n this.setPosition(options.position);\n }\n }\n\n /**\n * Get the DOM element of this overlay.\n * @return {HTMLElement|undefined} The Element containing the overlay.\n * @observable\n * @api\n */\n getElement() {\n return /** @type {HTMLElement|undefined} */ (this.get(Property.ELEMENT));\n }\n\n /**\n * Get the overlay identifier which is set on constructor.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id;\n }\n\n /**\n * Get the map associated with this overlay.\n * @return {import(\"./Map.js\").default|null} The map that the\n * overlay is part of.\n * @observable\n * @api\n */\n getMap() {\n return /** @type {import(\"./Map.js\").default|null} */ (\n this.get(Property.MAP) || null\n );\n }\n\n /**\n * Get the offset of this overlay.\n * @return {Array} The offset.\n * @observable\n * @api\n */\n getOffset() {\n return /** @type {Array} */ (this.get(Property.OFFSET));\n }\n\n /**\n * Get the current position of this overlay.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The spatial point that the overlay is\n * anchored at.\n * @observable\n * @api\n */\n getPosition() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(Property.POSITION)\n );\n }\n\n /**\n * Get the current positioning of this overlay.\n * @return {Positioning} How the overlay is positioned\n * relative to its point on the map.\n * @observable\n * @api\n */\n getPositioning() {\n return /** @type {Positioning} */ (this.get(Property.POSITIONING));\n }\n\n /**\n * @protected\n */\n handleElementChanged() {\n removeChildren(this.element);\n const element = this.getElement();\n if (element) {\n this.element.appendChild(element);\n }\n }\n\n /**\n * @protected\n */\n handleMapChanged() {\n if (this.mapPostrenderListenerKey) {\n this.element?.remove();\n unlistenByKey(this.mapPostrenderListenerKey);\n this.mapPostrenderListenerKey = null;\n }\n const map = this.getMap();\n if (map) {\n this.mapPostrenderListenerKey = listen(\n map,\n MapEventType.POSTRENDER,\n this.render,\n this,\n );\n this.updatePixelPosition();\n const container = this.stopEvent\n ? map.getOverlayContainerStopEvent()\n : map.getOverlayContainer();\n if (this.insertFirst) {\n container.insertBefore(this.element, container.childNodes[0] || null);\n } else {\n container.appendChild(this.element);\n }\n this.performAutoPan();\n }\n }\n\n /**\n * @protected\n */\n render() {\n this.updatePixelPosition();\n }\n\n /**\n * @protected\n */\n handleOffsetChanged() {\n this.updatePixelPosition();\n }\n\n /**\n * @protected\n */\n handlePositionChanged() {\n this.updatePixelPosition();\n this.performAutoPan();\n }\n\n /**\n * @protected\n */\n handlePositioningChanged() {\n this.updatePixelPosition();\n }\n\n /**\n * Set the DOM element to be associated with this overlay.\n * @param {HTMLElement|undefined} element The Element containing the overlay.\n * @observable\n * @api\n */\n setElement(element) {\n this.set(Property.ELEMENT, element);\n }\n\n /**\n * Set the map to be associated with this overlay.\n * @param {import(\"./Map.js\").default|null} map The map that the\n * overlay is part of. Pass `null` to just remove the overlay from the current map.\n * @observable\n * @api\n */\n setMap(map) {\n this.set(Property.MAP, map);\n }\n\n /**\n * Set the offset for this overlay.\n * @param {Array} offset Offset.\n * @observable\n * @api\n */\n setOffset(offset) {\n this.set(Property.OFFSET, offset);\n }\n\n /**\n * Set the position for this overlay. If the position is `undefined` the\n * overlay is hidden.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} position The spatial point that the overlay\n * is anchored at.\n * @observable\n * @api\n */\n setPosition(position) {\n this.set(Property.POSITION, position);\n }\n\n /**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary) using the configured autoPan parameters\n * @protected\n */\n performAutoPan() {\n if (this.autoPan) {\n this.panIntoView(this.autoPan);\n }\n }\n\n /**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary).\n * @param {PanIntoViewOptions} [panIntoViewOptions] Options for the pan action\n * @api\n */\n panIntoView(panIntoViewOptions) {\n const map = this.getMap();\n\n if (!map || !map.getTargetElement() || !this.get(Property.POSITION)) {\n return;\n }\n\n const mapRect = this.getRect(map.getTargetElement(), map.getSize());\n const element = this.getElement();\n const overlayRect = this.getRect(element, [\n outerWidth(element),\n outerHeight(element),\n ]);\n\n panIntoViewOptions = panIntoViewOptions || {};\n\n const myMargin =\n panIntoViewOptions.margin === undefined ? 20 : panIntoViewOptions.margin;\n if (!containsExtent(mapRect, overlayRect)) {\n // the overlay is not completely inside the viewport, so pan the map\n const offsetLeft = overlayRect[0] - mapRect[0];\n const offsetRight = mapRect[2] - overlayRect[2];\n const offsetTop = overlayRect[1] - mapRect[1];\n const offsetBottom = mapRect[3] - overlayRect[3];\n\n const delta = [0, 0];\n if (offsetLeft < 0) {\n // move map to the left\n delta[0] = offsetLeft - myMargin;\n } else if (offsetRight < 0) {\n // move map to the right\n delta[0] = Math.abs(offsetRight) + myMargin;\n }\n if (offsetTop < 0) {\n // move map up\n delta[1] = offsetTop - myMargin;\n } else if (offsetBottom < 0) {\n // move map down\n delta[1] = Math.abs(offsetBottom) + myMargin;\n }\n\n if (delta[0] !== 0 || delta[1] !== 0) {\n const center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n map.getView().getCenterInternal()\n );\n const centerPx = map.getPixelFromCoordinateInternal(center);\n if (!centerPx) {\n return;\n }\n const newCenterPx = [centerPx[0] + delta[0], centerPx[1] + delta[1]];\n\n const panOptions = panIntoViewOptions.animation || {};\n map.getView().animateInternal({\n center: map.getCoordinateFromPixelInternal(newCenterPx),\n duration: panOptions.duration,\n easing: panOptions.easing,\n });\n }\n }\n }\n\n /**\n * Get the extent of an element relative to the document\n * @param {HTMLElement} element The element.\n * @param {import(\"./size.js\").Size} size The size of the element.\n * @return {import(\"./extent.js\").Extent} The extent.\n * @protected\n */\n getRect(element, size) {\n const box = element.getBoundingClientRect();\n const offsetX = box.left + window.pageXOffset;\n const offsetY = box.top + window.pageYOffset;\n return [offsetX, offsetY, offsetX + size[0], offsetY + size[1]];\n }\n\n /**\n * Set the positioning for this overlay.\n * @param {Positioning} positioning how the overlay is\n * positioned relative to its point on the map.\n * @observable\n * @api\n */\n setPositioning(positioning) {\n this.set(Property.POSITIONING, positioning);\n }\n\n /**\n * Modify the visibility of the element.\n * @param {boolean} visible Element visibility.\n * @protected\n */\n setVisible(visible) {\n if (this.rendered.visible !== visible) {\n this.element.style.display = visible ? '' : 'none';\n this.rendered.visible = visible;\n }\n }\n\n /**\n * Update pixel position.\n * @protected\n */\n updatePixelPosition() {\n const map = this.getMap();\n const position = this.getPosition();\n if (!map || !map.isRendered() || !position) {\n this.setVisible(false);\n return;\n }\n\n const pixel = map.getPixelFromCoordinate(position);\n const mapSize = map.getSize();\n this.updateRenderedPosition(pixel, mapSize);\n }\n\n /**\n * @param {import(\"./pixel.js\").Pixel} pixel The pixel location.\n * @param {import(\"./size.js\").Size|undefined} mapSize The map size.\n * @protected\n */\n updateRenderedPosition(pixel, mapSize) {\n const style = this.element.style;\n const offset = this.getOffset();\n\n const positioning = this.getPositioning();\n\n this.setVisible(true);\n\n const x = Math.round(pixel[0] + offset[0]) + 'px';\n const y = Math.round(pixel[1] + offset[1]) + 'px';\n let posX = '0%';\n let posY = '0%';\n if (\n positioning == 'bottom-right' ||\n positioning == 'center-right' ||\n positioning == 'top-right'\n ) {\n posX = '-100%';\n } else if (\n positioning == 'bottom-center' ||\n positioning == 'center-center' ||\n positioning == 'top-center'\n ) {\n posX = '-50%';\n }\n if (\n positioning == 'bottom-left' ||\n positioning == 'bottom-center' ||\n positioning == 'bottom-right'\n ) {\n posY = '-100%';\n } else if (\n positioning == 'center-left' ||\n positioning == 'center-center' ||\n positioning == 'center-right'\n ) {\n posY = '-50%';\n }\n const transform = `translate(${posX}, ${posY}) translate(${x}, ${y})`;\n if (this.rendered.transform_ != transform) {\n this.rendered.transform_ = transform;\n style.transform = transform;\n }\n }\n\n /**\n * returns the options this Overlay has been created with\n * @return {Options} overlay options\n */\n getOptions() {\n return this.options;\n }\n}\n\nexport default Overlay;\n", "/**\n * @module ol/VectorRenderTile\n */\nimport Tile from './Tile.js';\nimport {createCanvasContext2D, releaseCanvas} from './dom.js';\nimport {getUid} from './util.js';\n\n/**\n * @typedef {Object} ReplayState\n * @property {boolean} dirty Dirty.\n * @property {null|import(\"./render.js\").OrderFunction} renderedRenderOrder RenderedRenderOrder.\n * @property {number} renderedTileRevision RenderedTileRevision.\n * @property {number} renderedResolution RenderedResolution.\n * @property {number} renderedRevision RenderedRevision.\n * @property {number} renderedTileResolution RenderedTileResolution.\n * @property {number} renderedTileZ RenderedTileZ.\n */\n\n/**\n * @type {Array}\n */\nconst canvasPool = [];\n\nclass VectorRenderTile extends Tile {\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {import(\"./tilecoord.js\").TileCoord} urlTileCoord Wrapped tile coordinate for source urls.\n * @param {function(VectorRenderTile):Array} getSourceTiles Function.\n * @param {function(VectorRenderTile):void} removeSourceTiles Function.\n */\n constructor(\n tileCoord,\n state,\n urlTileCoord,\n getSourceTiles,\n removeSourceTiles,\n ) {\n super(tileCoord, state, {transition: 0});\n\n /**\n * @private\n * @type {CanvasRenderingContext2D|null}\n */\n this.context_ = null;\n\n /**\n * Executor groups. Read/written by the renderer.\n * @type {Object>}\n */\n this.executorGroups = {};\n\n /**\n * Number of loading source tiles. Read/written by the source.\n * @type {number}\n */\n this.loadingSourceTiles = 0;\n\n /**\n * @type {Object}\n */\n this.hitDetectionImageData = {};\n\n /**\n * @private\n * @type {!Object}\n */\n this.replayState_ = {};\n\n /**\n * @type {Array}\n */\n this.sourceTiles = [];\n\n /**\n * @type {Object}\n */\n this.errorTileKeys = {};\n\n /**\n * @type {number}\n */\n this.wantedResolution;\n\n /**\n * @type {!function():Array}\n */\n this.getSourceTiles = getSourceTiles.bind(undefined, this);\n\n /**\n * @type {!function(VectorRenderTile):void}\n * @private\n */\n this.removeSourceTiles_ = removeSourceTiles;\n\n /**\n * @type {import(\"./tilecoord.js\").TileCoord}\n */\n this.wrappedTileCoord = urlTileCoord;\n }\n\n /**\n * @return {CanvasRenderingContext2D} The rendering context.\n */\n getContext() {\n if (!this.context_) {\n this.context_ = createCanvasContext2D(1, 1, canvasPool);\n }\n return this.context_;\n }\n\n /**\n * @return {boolean} Tile has a rendering context.\n */\n hasContext() {\n return !!this.context_;\n }\n\n /**\n * Get the Canvas for this tile.\n * @return {HTMLCanvasElement} Canvas.\n */\n getImage() {\n return this.hasContext() ? this.getContext().canvas : null;\n }\n\n /**\n * @param {import(\"./layer/Layer.js\").default} layer Layer.\n * @return {ReplayState} The replay state.\n */\n getReplayState(layer) {\n const key = getUid(layer);\n if (!(key in this.replayState_)) {\n this.replayState_[key] = {\n dirty: false,\n renderedRenderOrder: null,\n renderedResolution: NaN,\n renderedRevision: -1,\n renderedTileResolution: NaN,\n renderedTileRevision: -1,\n renderedTileZ: -1,\n };\n }\n return this.replayState_[key];\n }\n\n /**\n * Load the tile.\n * @override\n */\n load() {\n this.getSourceTiles();\n }\n\n /**\n * Remove from the cache due to expiry\n * @override\n */\n release() {\n if (this.context_) {\n releaseCanvas(this.context_);\n canvasPool.push(this.context_.canvas);\n this.context_ = null;\n }\n this.removeSourceTiles_(this);\n this.sourceTiles.length = 0;\n super.release();\n }\n}\n\nexport default VectorRenderTile;\n", "/**\n * @module ol/VectorTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\n\n/**\n * @template {import('./Feature.js').FeatureLike} FeatureType\n */\nclass VectorTile extends Tile {\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {string} src Data source url.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @param {import(\"./Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n * @param {import(\"./Tile.js\").Options} [options] Tile options.\n */\n constructor(tileCoord, state, src, format, tileLoadFunction, options) {\n super(tileCoord, state, options);\n\n /**\n * Extent of this tile; set by the source.\n * @type {import(\"./extent.js\").Extent}\n */\n this.extent = null;\n\n /**\n * @private\n * @type {import(\"./format/Feature.js\").default}\n */\n this.format_ = format;\n\n /**\n * @private\n * @type {Array}\n */\n this.features_ = null;\n\n /**\n * @private\n * @type {import(\"./featureloader.js\").FeatureLoader}\n */\n this.loader_;\n\n /**\n * Feature projection of this tile; set by the source.\n * @type {import(\"./proj/Projection.js\").default}\n */\n this.projection = null;\n\n /**\n * Resolution of this tile; set by the source.\n * @type {number}\n */\n this.resolution;\n\n /**\n * @private\n * @type {import(\"./Tile.js\").LoadFunction}\n */\n this.tileLoadFunction_ = tileLoadFunction;\n\n /**\n * @private\n * @type {string}\n */\n this.url_ = src;\n\n this.key = src;\n }\n\n /**\n * @return {string} Tile url.\n */\n getTileUrl() {\n return this.url_;\n }\n\n /**\n * Get the feature format assigned for reading this tile's features.\n * @return {import(\"./format/Feature.js\").default} Feature format.\n * @api\n */\n getFormat() {\n return this.format_;\n }\n\n /**\n * Get the features for this tile. Geometries will be in the view projection.\n * @return {Array} Features.\n * @api\n */\n getFeatures() {\n return this.features_;\n }\n\n /**\n * Load not yet loaded URI.\n * @override\n */\n load() {\n if (this.state == TileState.IDLE) {\n this.setState(TileState.LOADING);\n this.tileLoadFunction_(this, this.url_);\n if (this.loader_) {\n this.loader_(this.extent, this.resolution, this.projection);\n }\n }\n }\n\n /**\n * Handler for successful tile load.\n * @param {Array} features The loaded features.\n * @param {import(\"./proj/Projection.js\").default} dataProjection Data projection.\n */\n onLoad(features, dataProjection) {\n this.setFeatures(features);\n }\n\n /**\n * Handler for tile load errors.\n */\n onError() {\n this.setState(TileState.ERROR);\n }\n\n /**\n * Function for use in a {@link module:ol/source/VectorTile~VectorTile}'s `tileLoadFunction`.\n * Sets the features for the tile.\n * @param {Array} features Features.\n * @api\n */\n setFeatures(features) {\n this.features_ = features;\n this.setState(TileState.LOADED);\n }\n\n /**\n * Set the feature loader for reading this tile's features.\n * @param {import(\"./featureloader.js\").FeatureLoader} loader Feature loader.\n * @api\n */\n setLoader(loader) {\n this.loader_ = loader;\n }\n}\n\nexport default VectorTile;\n"], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,IAAM,WAAW;AAAA,EACf,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,UAAU;AAAA,EACV,kBAAkB;AACpB;AAKA,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM3B,OAAO;AACT;AAMO,IAAM,mBAAN,cAA+B,cAAU;AAAA;AAAA;AAAA;AAAA,EAI9C,YAAY,OAAO;AACjB,UAAM,qBAAqB,KAAK;AAOhC,SAAK,OAAO,MAAM;AAOlB,SAAK,UAAU,MAAM;AAAA,EACvB;AACF;AAqDA,IAAM,cAAN,cAA0B,eAAW;AAAA;AAAA;AAAA;AAAA,EAInC,YAAY,SAAS;AACnB,UAAM;AAKN,SAAK;AAKL,SAAK;AAKL,SAAK;AAEL,cAAU,WAAW,CAAC;AAOtB,SAAK,YAAY;AAMjB,SAAK,aAAa;AAMlB,SAAK,WAAW;AAEhB,SAAK,kBAAkB,SAAS,YAAY,KAAK,wBAAwB;AACzE,SAAK,kBAAkB,SAAS,UAAU,KAAK,sBAAsB;AAErE,QAAI,QAAQ,eAAe,QAAW;AACpC,WAAK,cAAc,QAAQ,UAAU;AAAA,IACvC;AACA,QAAI,QAAQ,oBAAoB,QAAW;AACzC,WAAK,mBAAmB,QAAQ,eAAe;AAAA,IACjD;AAEA,SAAK,YAAY,QAAQ,aAAa,SAAY,QAAQ,WAAW,KAAK;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB;AAChB,SAAK,YAAY,KAAK;AACtB,UAAM,gBAAgB;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,2BAA2B;AACzB,UAAM,aAAa,KAAK,cAAc;AACtC,QAAI,YAAY;AACd,WAAK,aAAa;AAAA,QAChB,IAAc,WAAW;AAAA,QACzB;AAAA,MACF;AACA,UAAI,KAAK,WAAW;AAClB,aAAK,IAAI,SAAS,UAAU,KAAK,WAAW,KAAK,SAAS,CAAC;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,yBAAyB;AACvB,QAAI,iBAAiB,WAAW;AAC9B,YAAM,WAAW,KAAK,YAAY;AAClC,UAAI,YAAY,KAAK,aAAa,QAAW;AAC3C,aAAK,WAAW,UAAU,YAAY;AAAA,UACpC,KAAK,gBAAgB,KAAK,IAAI;AAAA,UAC9B,KAAK,eAAe,KAAK,IAAI;AAAA,UAC7B,KAAK,mBAAmB;AAAA,QAC1B;AAAA,MACF,WAAW,CAAC,YAAY,KAAK,aAAa,QAAW;AACnD,kBAAU,YAAY,WAAW,KAAK,QAAQ;AAC9C,aAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB,UAAU;AACxB,UAAM,SAAS,SAAS;AACxB,SAAK,IAAI,SAAS,UAAU,OAAO,QAAQ;AAC3C,SAAK;AAAA,MACH,SAAS;AAAA,MACT,OAAO,aAAa,OAAO,SAAY,OAAO;AAAA,IAChD;AACA,SAAK;AAAA,MACH,SAAS;AAAA,MACT,OAAO,qBAAqB,OAAO,SAAY,OAAO;AAAA,IACxD;AACA,SAAK;AAAA,MACH,SAAS;AAAA,MACT,OAAO,YAAY,OAAO,SAAY,UAAU,OAAO,OAAO;AAAA,IAChE;AACA,QAAI,CAAC,KAAK,WAAW;AACnB,WAAK,YAAY,CAAC,OAAO,WAAW,OAAO,QAAQ;AAAA,IACrD,OAAO;AACL,WAAK,UAAU,CAAC,IAAI,OAAO;AAC3B,WAAK,UAAU,CAAC,IAAI,OAAO;AAAA,IAC7B;AACA,UAAM,oBAAoB,KAAK,WAAW,KAAK,SAAS;AACxD,SAAK,IAAI,SAAS,UAAU,kBAAkB,MAAM,CAAC;AACrD,SAAK,IAAI,SAAS,OAAO,OAAO,UAAU,OAAO,SAAY,OAAO,KAAK;AACzE,UAAM,WAAW,SAAgB,KAAK,WAAW,OAAO,QAAQ;AAChE,aAAS,eAAe,KAAK,UAAU;AACvC,SAAK,IAAI,SAAS,mBAAmB,QAAQ;AAC7C,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,OAAO;AACpB,SAAK,cAAc,IAAI,iBAAiB,KAAK,CAAC;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc;AACZ;AAAA;AAAA,MAAwC,KAAK,IAAI,SAAS,QAAQ;AAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,sBAAsB;AACpB;AAAA;AAAA,MACE,KAAK,IAAI,SAAS,iBAAiB,KAAK;AAAA;AAAA,EAE5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc;AACZ;AAAA;AAAA,MAAwC,KAAK,IAAI,SAAS,QAAQ;AAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAsB;AACpB;AAAA;AAAA,MACE,KAAK,IAAI,SAAS,iBAAiB;AAAA;AAAA,EAEvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAa;AACX;AAAA;AAAA,MAAwC,KAAK,IAAI,SAAS,OAAO;AAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc;AACZ;AAAA;AAAA,MACE,KAAK,IAAI,SAAS,QAAQ;AAAA;AAAA,EAE9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,gBAAgB;AACd;AAAA;AAAA,MACE,KAAK,IAAI,SAAS,UAAU;AAAA;AAAA,EAEhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW;AACT;AAAA;AAAA,MAAwC,KAAK,IAAI,SAAS,KAAK;AAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc;AACZ;AAAA;AAAA,MAA+B,KAAK,IAAI,SAAS,QAAQ;AAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,qBAAqB;AACnB;AAAA;AAAA,MACE,KAAK,IAAI,SAAS,gBAAgB;AAAA;AAAA,EAEtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,YAAY;AACxB,SAAK,IAAI,SAAS,YAAY,IAAc,UAAU,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,UAAU;AACpB,SAAK,IAAI,SAAS,UAAU,QAAQ;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,mBAAmB,SAAS;AAC1B,SAAK,IAAI,SAAS,kBAAkB,OAAO;AAAA,EAC7C;AACF;AAEA,IAAO,sBAAQ;;;ACpZf,SAAS,KAAK,aAAa,WAAW,kBAAkB;AAKtD,QAAM,kBAAkB,CAAC;AAEzB,MAAI,OAAO,YAAY,CAAC;AACxB,MAAI,OAAO,YAAY,CAAC;AAExB,MAAI,IAAI,UAAU,IAAI;AACtB,MAAI,IAAI,UAAU,IAAI;AAGtB,QAAM,WAAW,CAAC,MAAM,IAAI;AAE5B,QAAM,QAAQ,CAAC,GAAG,CAAC;AAEnB,QAAM,gBAAgB,CAAC,GAAG,CAAC;AAG3B,QAAM,YAAY,CAAC;AAEnB,MAAI,gBAAgB;AACpB,MAAI,MAAM,GAAG,OAAO,OAAO,OAAO;AAElC,SAAO,EAAE,gBAAgB,KAAK,cAAc,SAAS,GAAG;AAEtD,YAAQ,cAAc,IAAI;AAC1B,WAAO,SAAS,IAAI;AACpB,QAAI,MAAM,IAAI;AAEd,UAAM,MAAM,SAAS;AACrB,QAAI,EAAE,OAAO,YAAY;AACvB,sBAAgB,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/B,gBAAU,GAAG,IAAI;AAAA,IACnB;AAEA,YAAQ,cAAc,IAAI;AAC1B,WAAO,SAAS,IAAI;AACpB,QAAI,MAAM,IAAI;AAEd,aAAS,QAAQ,SAAS;AAC1B,WAAO,YAAY,KAAK;AACxB,QAAI,UAAU,IAAI;AAClB,QACE,uBAAuB,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,IACzD,kBACA;AAIA,sBAAgB,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/B,YAAM,MAAM,SAAS;AACrB,gBAAU,GAAG,IAAI;AAAA,IACnB,OAAO;AAGL,oBAAc,KAAK,OAAO,OAAO,OAAO,KAAK;AAC7C,YAAM,KAAK,GAAG,GAAG,GAAG,CAAC;AACrB,eAAS,KAAK,MAAM,MAAM,MAAM,IAAI;AAAA,IACtC;AAAA,EACF;AAEA,SAAO;AACT;AAoEO,SAAS,SAAS,KAAK,MAAM,MAAM,YAAY,kBAAkB;AACtE,QAAM,qBAAqB,IAAc,WAAW;AACpD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,SAAU,MAAM;AACd,aAAO,CAAC,KAAK,QAAQ,OAAO,QAAQ,IAAI;AAAA,IAC1C;AAAA,IACA,aAAa,oBAAoB,UAAU;AAAA,IAC3C;AAAA,EACF;AACF;AAWO,SAAS,SAAS,KAAK,MAAM,MAAM,YAAY,kBAAkB;AACtE,QAAM,qBAAqB,IAAc,WAAW;AACpD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,SAAU,MAAM;AACd,aAAO,CAAC,QAAQ,OAAO,QAAQ,MAAM,GAAG;AAAA,IAC1C;AAAA,IACA,aAAa,oBAAoB,UAAU;AAAA,IAC3C;AAAA,EACF;AACF;;;AC3FO,SAAS,iBAAiB,OAAO;AACtC,MAAI,EAAE,MAAM,mBAAmB,2BAA2B;AACxD,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAGA,QAAM,IAAI,MAAM,sBAAsB,CAAC;AACvC,QAAM,IAAI,MAAM,sBAAsB,CAAC;AACvC,QAAM,mBAAmB,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAChD,QAAM,aAAa,MAAM;AACzB,QAAM,YAAY;AAAA,IAChB,MAAM,sBAAsB,MAAM;AAAA,IAClC,WAAW;AAAA,EACb;AACA,QAAM,mBAAmB;AAAA,IACvB,WAAW,UAAU;AAAA,IACrB;AAAA,EACF;AACA,MAAI;AACJ,QAAM,iBAAiB,kBAAkB;AACzC,MAAI,gBAAgB;AAClB,oBAAgB;AAAA,MACd;AAAA,MACA,WAAW,UAAU;AAAA,IACvB;AAAA,EACF;AAEA,SAAO,IAAI;AAAA,IACT,MAAM;AAAA,IACN;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,WAAW,UAAU;AAAA,IACrB;AAAA,IACA;AAAA,EACF;AACF;;;ACtFA,IAAM,uBAAuB,IAAI,eAAO;AAAA,EACtC,OAAO;AACT,CAAC;AAMD,IAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAiHA,IAAM,YAAN,cAAwBA,gBAAY;AAAA;AAAA;AAAA;AAAA,EAIlC,YAAY,SAAS;AACnB,cAAU,UAAU,UAAU,CAAC;AAE/B,UAAM,cAAc,OAAO;AAAA,MACzB;AAAA,QACE,sBAAsB;AAAA,QACtB,wBAAwB;AAAA,QACxB,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,IACF;AAEA,WAAO,YAAY;AACnB,WAAO,YAAY;AACnB,WAAO,YAAY;AACnB,WAAO,YAAY;AACnB,WAAO,YAAY;AACnB,WAAO,YAAY;AACnB,WAAO,YAAY;AACnB,WAAO,YAAY;AACnB,WAAO,YAAY;AACnB,WAAO,YAAY;AACnB,WAAO,YAAY;AACnB,UAAM,WAAW;AAMjB,SAAK,cAAc;AAMnB,SAAK,UAAU;AAMf,SAAK,UAAU;AAMf,SAAK,UAAU;AAMf,SAAK,UAAU;AAMf,SAAK,QAAQ;AAMb,SAAK,QAAQ;AAMb,SAAK,QAAQ;AAMb,SAAK,QAAQ;AAMb,SAAK,cACH,QAAQ,eAAe,SAAY,QAAQ,aAAa;AAM1D,SAAK,YAAY,QAAQ,aAAa,SAAY,QAAQ,WAAW;AAMrE,SAAK,aAAa,CAAC;AAMnB,SAAK,aAAa,CAAC;AAMnB,SAAK,eACH,QAAQ,gBAAgB,SACpB,QAAQ,cACR;AAMN,SAAK,uBAAuB;AAM5B,SAAK,qBAAqB;AAM1B,SAAK,0BAA0B;AAM/B,SAAK,cAAc;AAMnB,SAAK,eAAe;AAMpB,SAAK,WAAW;AAMhB,SAAK,YAAY;AAMjB,SAAK,mBAAmB;AAMxB,SAAK,mBAAmB;AAExB,QAAI,QAAQ,YAAY;AAKtB,WAAK,qBACH,QAAQ,qBAAqB,SACzB,oBAAoB,KAAK,MAAM,IAAI,IACnC,QAAQ;AAMd,WAAK,qBACH,QAAQ,qBAAqB,SACzB,oBAAoB,KAAK,MAAM,IAAI,IACnC,QAAQ;AAQd,WAAK,oBACH,QAAQ,oBAAoB,SAAY,IAAI,QAAQ;AAQtD,WAAK,oBACH,QAAQ,oBAAoB,SAAY,IAAI,QAAQ;AAMtD,WAAK,qBAAqB,IAAI,cAAM;AAAA,QAClC,MACE,QAAQ,kBAAkB,SACtB,QAAQ,cAAc,MAAM,IAC5B,IAAI,aAAK;AAAA,UACP,MAAM;AAAA,UACN,cAAc;AAAA,UACd,MAAM,IAAI,aAAK;AAAA,YACb,OAAO;AAAA,UACT,CAAC;AAAA,UACD,QAAQ,IAAI,eAAO;AAAA,YACjB,OAAO;AAAA,YACP,OAAO;AAAA,UACT,CAAC;AAAA,QACH,CAAC;AAAA,MACT,CAAC;AAOD,WAAK,iBAAiB,CAAC,YAAY;AACjC,cAAM,QAAQ,QAAQ,IAAI,iBAAiB;AAC3C,aAAK,mBAAmB,QAAQ,EAAE,QAAQ,KAAK;AAC/C,eAAO,KAAK;AAAA,MACd;AAMA,WAAK,qBAAqB,IAAI,cAAM;AAAA,QAClC,MACE,QAAQ,kBAAkB,SACtB,QAAQ,cAAc,MAAM,IAC5B,IAAI,aAAK;AAAA,UACP,MAAM;AAAA,UACN,WAAW;AAAA,UACX,MAAM,IAAI,aAAK;AAAA,YACb,OAAO;AAAA,UACT,CAAC;AAAA,UACD,QAAQ,IAAI,eAAO;AAAA,YACjB,OAAO;AAAA,YACP,OAAO;AAAA,UACT,CAAC;AAAA,QACH,CAAC;AAAA,MACT,CAAC;AAOD,WAAK,iBAAiB,CAAC,YAAY;AACjC,cAAM,QAAQ,QAAQ,IAAI,iBAAiB;AAC3C,aAAK,mBAAmB,QAAQ,EAAE,QAAQ,KAAK;AAC/C,eAAO,KAAK;AAAA,MACd;AAEA,WAAK,mBAAmB,CAAC;AACzB,WAAK,mBAAmB,CAAC;AAEzB,WAAK,iBAAiBC,mBAAU,YAAY,KAAK,YAAY,KAAK,IAAI,CAAC;AAAA,IACzE;AAMA,SAAK,aACH,QAAQ,cAAc,SAAY,QAAQ,YAAY;AAGxD,SAAK;AAAA,MACH,IAAI,eAAa;AAAA,QACf,QAAQ,KAAK,eAAe,KAAK,IAAI;AAAA,QACrC,UAAU,KAAK,iBAAiB,KAAK,IAAI;AAAA,QACzC,UAAU,IAAI,mBAAW;AAAA,QACzB,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,OAAO,QAAQ;AAAA,MACjB,CAAC;AAAA,IACH;AAOA,SAAK,eAAe,CAAC;AAMrB,SAAK,aAAa,IAAI,cAAM;AAAA,MAC1B,QAAQ,KAAK;AAAA,IACf,CAAC;AAMD,SAAK,gBAAgB;AAMrB,SAAK,kBAAkB;AAMvB,SAAK,sBAAsB;AAE3B,SAAK,eAAe,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,QAAQ,YAAY;AAEnC,QAAI,kBAAkB,OAAO,MAAM;AACnC,QAAI,KAAK,eAAe,KAAK,UAAU,EAAE,SAAS,GAAG;AACnD,YAAY,iBAAiB,KAAK,WAAW;AAAA,IAC/C;AACA,QAAI,KAAK,eAAe;AACtB,UACE,oBAAoB,KAAK,eAAe,iBAAiB,UAAU,GACnE;AAEA,0BAAkB,KAAK,cAAc,MAAM;AAAA,MAC7C,OAAO;AAEL,aAAK,UAAU,EAAE,mBAAmB,KAAK,aAAa;AAAA,MACxD;AAAA,IACF;AACA,WAAO,CAAC,eAAe;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,QAAQ,YAAY,YAAY;AAC7C,SAAK,gBAAgB;AACrB,UAAM,SAAS,KAAK,UAAU;AAG9B,UAAM,cAAc,KAAK,UAAU,KAAK;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,eAAe,gBAAgB,aAAa,MAAM;AAExD,QACE,KAAK,mBACLC,QAAO,KAAK,iBAAiB,YAAY,KACzC,KAAK,wBAAwB,YAC7B;AACA;AAAA,IACF;AACA,SAAK,kBAAkB;AACvB,SAAK,sBAAsB;AAG3B,QAAI,QAAQ,YAAY,GAAG;AACzB;AAAA,IACF;AAGA,UAAM,SAAS,UAAU,YAAY;AACrC,UAAM,mBAAoB,aAAa,aAAc;AAErD,UAAM,uBACJ,CAAC,KAAK,eAAe,CAAC,WAAqB,KAAK,aAAa,UAAU;AAEzE,QAAI,sBAAsB;AACxB,WAAK,sBAAsB,UAAU;AAAA,IACvC;AAEA,SAAK,iBAAiB,cAAc,QAAQ,YAAY,gBAAgB;AAGxE,QAAI,eAAe,KAAK,WAAW,SAAS,KAAK,WAAW;AAC5D,QAAI,KAAK,kBAAkB;AACzB,sBAAgB,KAAK,WAAW;AAAA,IAClC;AACA,QAAI,KAAK,kBAAkB;AACzB,sBAAgB,KAAK,WAAW;AAAA,IAClC;AAEA,QAAI;AACJ,WAAO,eAAe,KAAK,aAAa,QAAQ;AAC9C,gBAAU,IAAI,gBAAQ;AACtB,WAAK,aAAa,KAAK,OAAO;AAAA,IAChC;AAEA,UAAM,eAAe,OAAO,sBAAsB;AAClD,iBAAa,MAAM;AACnB,QAAI,YAAY;AAGhB,QAAI,GAAG;AACP,SAAK,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAI,GAAG,EAAE,GAAG;AAClD,gBAAU,KAAK,aAAa,WAAW;AACvC,cAAQ,YAAY,KAAK,WAAW,CAAC,CAAC;AACtC,cAAQ,SAAS,KAAK,UAAU;AAChC,mBAAa,KAAK,OAAO;AAAA,IAC3B;AACA,SAAK,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAI,GAAG,EAAE,GAAG;AAClD,gBAAU,KAAK,aAAa,WAAW;AACvC,cAAQ,YAAY,KAAK,WAAW,CAAC,CAAC;AACtC,cAAQ,SAAS,KAAK,UAAU;AAChC,mBAAa,KAAK,OAAO;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,aAAa,KAAK,QAAQ,QAAQ,kBAAkB,QAAQ,OAAO;AACjE,UAAM,aAAa,KAAK;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,WAAW,WAAW,UAAU,GAAG,MAAM,GAAG;AAC9C,UAAI,KAAK,kBAAkB;AACzB,cAAM,OAAO,KAAK,mBAAmB,GAAG;AACxC,YAAI,SAAS,KAAK,kBAAkB;AAClC,eAAK,iBAAiB,KAAK,EAAE,OAAO;AAAA,QACtC,OAAO;AACL,eAAK,iBAAiB,KAAK,IAAI;AAAA,YAC7B,MAAM,IAAI,cAAM,CAAC,CAAC;AAAA,YAClB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,WAAK,WAAW,OAAO,IAAI;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,aAAa,KAAK,QAAQ,QAAQ,kBAAkB,QAAQ,OAAO;AACjE,UAAM,aAAa,KAAK;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,WAAW,WAAW,UAAU,GAAG,MAAM,GAAG;AAC9C,UAAI,KAAK,kBAAkB;AACzB,cAAM,OAAO,KAAK,mBAAmB,GAAG;AACxC,YAAI,SAAS,KAAK,kBAAkB;AAClC,eAAK,iBAAiB,KAAK,EAAE,OAAO;AAAA,QACtC,OAAO;AACL,eAAK,iBAAiB,KAAK,IAAI;AAAA,YAC7B,MAAM,IAAI,cAAM,CAAC,CAAC;AAAA,YAClB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,WAAK,WAAW,OAAO,IAAI;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,OAAO;AACjB,UAAM,WAAW,MAAM,WAAW,UAAU;AAC5C,UAAM,aAAa,MAAM,WAAW,UAAU;AAC9C,UAAM,OAAO,MAAM,WAAW;AAC9B,UAAM,SAAS,MAAM,WAAW;AAChC,UAAM,iBAAiB,UAAU,MAAM;AACvC,QAAI,iBAAiB;AACrB,QAAI,UAAU;AACZ,YAAM,iBAAiB,KAAK,CAAC,IAAI;AACjC,YAAM,kBAAkB,KAAK,CAAC,IAAI;AAClC,uBAAiB;AAAA,QACf,eAAe,CAAC,IAAI,iBAAiB;AAAA,QACrC,eAAe,CAAC,IAAI,kBAAkB;AAAA,QACtC,eAAe,CAAC,IAAI,iBAAiB;AAAA,QACrC,eAAe,CAAC,IAAI,kBAAkB;AAAA,MACxC;AAAA,IACF;AAEA,QAAI,aAAa;AACjB,QAAI,WAAW;AACf,QAAI,gBAAgB,KAAK,oBAAoB;AAC7C,UAAM,mBAAmB,KAAK,YAAY,UAAU;AACpD,UAAM,aAAa,SAAS,gBAAgB;AAC5C,QACE,KAAK,UAAU,EAAE,SAAS,KAC1B,KAAK,YAAY,SAAS,KAC1B,CAAC,eAAe,kBAAkB,MAAM,GACxC;AACA,mBAAa,KAAK,OAAO,OAAO,CAAC,IAAI,iBAAiB,CAAC,KAAK,UAAU;AACtE,iBAAW,KAAK,MAAM,OAAO,CAAC,IAAI,iBAAiB,CAAC,KAAK,UAAU;AACnE,YAAM,WAAW,KAAK,IAAI,QAAQ,IAAI,KAAK,KAAK;AAChD,sBAAgB,kBAAkB;AAAA,IACpC;AACA,UAAM,gBAAgB,iBAAiB,KAAK;AAE5C,aAAS,QAAQ,YAAY,SAAS,UAAU,EAAE,OAAO;AACvD,UAAI,YAAY,KAAK,WAAW,SAAS,KAAK,WAAW;AACzD,UAAI,SAAS,OAAO,GAAG;AAEvB,UAAI,KAAK,kBAAkB;AACzB,aAAK,QAAQ,GAAG,IAAI,KAAK,iBAAiB,QAAQ,QAAQ,GAAG,EAAE,OAAO;AACpE,gBAAM,aAAa,KAAK,WAAW,KAAK;AACxC,cAAI,CAAC,YAAY,UAAU,GAAG;AAC5B,wBAAY,KAAK,kBAAkB,YAAY,QAAQ,KAAK;AAAA,UAC9D,OAAO;AACL,kBAAMC,SAAQ,WAAW,MAAM;AAC/B,YAAAA,OAAM,UAAU,QAAQ,YAAY,CAAC;AACrC,YAAAA,OAAM,OAAO,CAAC,UAAU,cAAc;AACtC,wBAAY,KAAK,kBAAkBA,QAAO,gBAAgB,KAAK;AAC/D,sBAAU,OAAO,UAAU,cAAc;AAAA,UAC3C;AACA,oBAAU,KAAK,aAAa,WAAW;AACvC,kBAAQ,YAAY,SAAS;AAC7B,kBAAQ,IAAI,mBAAmB,KAAK,iBAAiB,KAAK,EAAE,IAAI;AAChE,wBAAc,YAAY,SAAS,KAAK,eAAe,OAAO,CAAC;AAAA,QACjE;AAAA,MACF;AACA,UAAI,KAAK,kBAAkB;AACzB,YACG,UAAU,cAAc,iBACxB,UAAU,YAAY,CAAC,eACxB;AACA,eAAK,QAAQ,GAAG,IAAI,KAAK,WAAW,QAAQ,QAAQ,GAAG,EAAE,OAAO;AAC9D,kBAAM,aAAa,KAAK,WAAW,KAAK;AACxC,gBAAI,CAAC,YAAY,UAAU,GAAG;AAC5B,0BAAY,KAAK,kBAAkB,YAAY,QAAQ,KAAK;AAAA,YAC9D,OAAO;AACL,oBAAMA,SAAQ,WAAW,MAAM;AAC/B,cAAAA,OAAM,UAAU,QAAQ,YAAY,CAAC;AACrC,cAAAA,OAAM,OAAO,CAAC,UAAU,cAAc;AACtC,0BAAY,KAAK,kBAAkBA,QAAO,gBAAgB,KAAK;AAC/D,wBAAU,OAAO,UAAU,cAAc;AAAA,YAC3C;AACA,sBAAU,KAAK,aAAa,WAAW;AACvC,oBAAQ,YAAY,SAAS;AAC7B,oBAAQ,IAAI,mBAAmB,KAAK,iBAAiB,KAAK,EAAE,IAAI;AAChE,0BAAc,YAAY,SAAS,KAAK,eAAe,OAAO,CAAC;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,QAAQ,QAAQ,YAAY,kBAAkB;AAC7D,UAAM,WAAW,KAAK,aAAa,UAAU;AAC7C,QAAI,YAAY,IAAI;AAClB,WAAK,WAAW,SAAS;AACzB,WAAK,WAAW,SAAS;AACzB,UAAI,KAAK,kBAAkB;AACzB,aAAK,iBAAiB,SAAS;AAAA,MACjC;AACA,UAAI,KAAK,kBAAkB;AACzB,aAAK,iBAAiB,SAAS;AAAA,MACjC;AACA;AAAA,IACF;AAEA,QAAIC,SAAQ;AACZ,UAAM,mBAAmB,KAAK,YAAY,UAAU;AACpD,UAAM,aAAa,SAAS,gBAAgB;AAC5C,QACE,KAAK,UAAU,EAAE,SAAS,KAC1B,KAAK,YAAY,SAAS,KAC1B,CAAC,eAAe,kBAAkB,MAAM,GACxC;AACA,UAAI,SAAS,MAAM,KAAK,YAAY;AAClC,eAAO,CAAC,IAAI,iBAAiB,CAAC;AAC9B,eAAO,CAAC,IAAI,iBAAiB,CAAC;AAAA,MAChC,OAAO;AACL,QAAAA,SAAQ;AAAA,MACV;AAAA,IACF;AAIA,UAAM,eAAe;AAAA,MACnB,MAAM,OAAO,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK;AAAA,MACvC,MAAM,OAAO,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK;AAAA,IACzC;AAMA,UAAM,eAAe,KAAK,mBAAmB,YAAY;AACzD,QAAI,MAAM,aAAa,CAAC,CAAC,GAAG;AAC1B,mBAAa,CAAC,IACZ,KAAK,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI,KAAK,OAAO,IAC3C,KAAK,UACL,KAAK;AAAA,IACb;AACA,QAAI,YAAY,MAAM,aAAa,CAAC,GAAG,KAAK,SAAS,KAAK,OAAO;AACjE,QAAI,YAAY,MAAM,aAAa,CAAC,GAAG,KAAK,SAAS,KAAK,OAAO;AACjE,UAAM,WAAW,KAAK;AACtB,QAAI,KAAK,KAAK,KAAK;AAInB,QAAI,eAAe;AACnB,QAAI,CAACA,QAAO;AACV,qBAAe;AAAA,QACb,MAAM,OAAO,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK;AAAA,QACvC,MAAM,OAAO,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK;AAAA,QACvC,MAAM,OAAO,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK;AAAA,QACvC,MAAM,OAAO,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK;AAAA,MACzC;AAAA,IACF;AAIA,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAEA,QAAI,SAAS,YAAY,CAAC;AAC1B,QAAI,SAAS,YAAY,CAAC;AAC1B,QAAI,SAAS,YAAY,CAAC;AAC1B,QAAI,SAAS,YAAY,CAAC;AAE1B,QAAI,CAACA,QAAO;AAKV,UAAI,mBAAmB,cAAc,KAAK,WAAW,GAAG;AACtD,iBAAS,KAAK;AACd,iBAAS,KAAK;AAAA,MAChB;AACA,UAAI,mBAAmB,cAAc,KAAK,YAAY,GAAG;AACvD,iBAAS,KAAK;AACd,iBAAS,KAAK;AAAA,MAChB;AACA,UAAI,mBAAmB,cAAc,KAAK,QAAQ,GAAG;AACnD,iBAAS,KAAK;AACd,iBAAS,KAAK;AAAA,MAChB;AACA,UAAI,mBAAmB,cAAc,KAAK,SAAS,GAAG;AACpD,iBAAS,KAAK;AACd,iBAAS,KAAK;AAAA,MAChB;AAIA,eAAS,MAAM,QAAQ,WAAW,KAAK,OAAO;AAC9C,eAAS,MAAM,QAAQ,WAAW,KAAK,OAAO;AAC9C,eAAS,MAAM,QAAQ,KAAK,SAAS,SAAS;AAC9C,eAAS,MAAM,QAAQ,KAAK,SAAS,SAAS;AAAA,IAChD;AAIA,gBAAY,KAAK,MAAM,YAAY,QAAQ,IAAI;AAC/C,UAAM,MAAM,WAAW,KAAK,SAAS,KAAK,OAAO;AAEjD,UAAM,KAAK,aAAa,KAAK,QAAQ,QAAQ,kBAAkB,QAAQ,CAAC;AAExE,UAAM;AACN,QAAIA,QAAO;AACT,cAAQ,OAAO,aAAa,UAAU,QAAQ,UAAU;AACtD,cAAM,KAAK;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO,OAAO,KAAK,WAAW,QAAQ,UAAU;AAC9C,cAAM,KAAK,IAAI,MAAM,UAAU,KAAK,OAAO;AAC3C,cAAM,KAAK;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,WAAW,KAAK,SAAS,KAAK,OAAO;AAEjD,UAAM;AACN,QAAIA,QAAO;AACT,cAAQ,OAAO,aAAa,UAAU,QAAQ,UAAU;AACtD,cAAM,KAAK;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO,OAAO,KAAK,WAAW,QAAQ,UAAU;AAC9C,cAAM,KAAK,IAAI,MAAM,UAAU,KAAK,OAAO;AAC3C,cAAM,KAAK;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,SAAK,WAAW,SAAS;AACzB,QAAI,KAAK,kBAAkB;AACzB,WAAK,iBAAiB,SAAS;AAAA,IACjC;AAIA,gBAAY,KAAK,MAAM,YAAY,QAAQ,IAAI;AAC/C,UAAM,MAAM,WAAW,KAAK,SAAS,KAAK,OAAO;AAEjD,UAAM,KAAK,aAAa,KAAK,QAAQ,QAAQ,kBAAkB,QAAQ,CAAC;AAExE,UAAM;AACN,WAAO,OAAO,KAAK,WAAW,QAAQ,UAAU;AAC9C,YAAM,KAAK,IAAI,MAAM,UAAU,KAAK,OAAO;AAC3C,YAAM,KAAK;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,WAAW,KAAK,SAAS,KAAK,OAAO;AAEjD,UAAM;AACN,WAAO,OAAO,KAAK,WAAW,QAAQ,UAAU;AAC9C,YAAM,KAAK,IAAI,MAAM,UAAU,KAAK,OAAO;AAC3C,YAAM,KAAK;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,SAAK,WAAW,SAAS;AACzB,QAAI,KAAK,kBAAkB;AACzB,WAAK,iBAAiB,SAAS;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,YAAY;AACvB,UAAM,YAAY,KAAK,wBAAwB,CAAC;AAChD,UAAM,YAAY,KAAK,wBAAwB,CAAC;AAChD,QAAI,WAAW;AACf,UAAM,SAAS,KAAK,IAAI,KAAK,cAAc,YAAY,CAAC;AAExD,UAAM,KAAK,CAAC;AAEZ,UAAM,KAAK,CAAC;AACZ,aAAS,IAAI,GAAG,KAAK,KAAK,WAAW,QAAQ,IAAI,IAAI,EAAE,GAAG;AACxD,YAAM,QAAQ,MAAM,KAAK,WAAW,CAAC,IAAI,GAAG,GAAG,EAAE;AAEjD,YAAM,aAAa,MAAM,WAAW,MAAM,OAAO,KAAK,KAAK;AAC3D,SAAG,CAAC,IAAI,YAAY;AACpB,SAAG,CAAC,IAAI,aAAa;AACrB,SAAG,CAAC,IAAI,YAAY;AACpB,SAAG,CAAC,IAAI,aAAa;AACrB,WAAK,qBAAqB,IAAI,EAAE;AAChC,WAAK,qBAAqB,IAAI,EAAE;AAChC,YAAM,OAAO,KAAK,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;AACnE,UAAI,QAAQ,QAAQ;AAClB;AAAA,MACF;AACA,iBAAW,KAAK,WAAW,CAAC;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,aAAa,KAAK,QAAQ,QAAQ,kBAAkB,OAAO;AACzD,UAAM,kBAAkB;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACF;AACA,QAAI,aAAa,KAAK,WAAW,KAAK;AACtC,QAAI,CAAC,YAAY;AACf,mBAAa,IAAI,mBAAW,iBAAiB,IAAI;AACjD,WAAK,WAAW,KAAK,IAAI;AAAA,IAC3B,OAAO;AACL,iBAAW,mBAAmB,MAAM,eAAe;AACnD,iBAAW,QAAQ;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAkB,YAAY,QAAQ,OAAO;AAC3C,UAAM,kBAAkB,WAAW,mBAAmB;AACtD,QAAI,SAAS;AACb,QAAI,MAAM,gBAAgB,SAAS;AACnC,QAAI,gBAAgB,MAAM,IAAI,gBAAgB,GAAG,GAAG;AAClD,eAAS;AACT,YAAM;AAAA,IACR;AACA,UAAM,gBAAgB,KAAK,IAAI,OAAO,CAAC,GAAG,gBAAgB,MAAM,CAAC;AACjE,UAAM,aAAa,KAAK,IAAI,OAAO,CAAC,GAAG,gBAAgB,GAAG,CAAC;AAC3D,UAAM,MAAM;AAAA,MACV,OAAO,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK;AAAA,MACnD;AAAA,MACA;AAAA,IACF;AACA,UAAM,cACJ,gBAAgB,SAAS,CAAC,KACxB,gBAAgB,MAAM,CAAC,IAAI,gBAAgB,SAAS,CAAC,MACpD,MAAM,gBAAgB,MAAM,MAC5B,gBAAgB,GAAG,IAAI,gBAAgB,MAAM;AAClD,UAAM,aAAa,CAAC,aAAa,GAAG;AACpC,UAAM,QAAQ,KAAK,iBAAiB,KAAK,EAAE;AAC3C,UAAM,eAAe,UAAU;AAC/B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe;AACb,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,aAAa,KAAK,QAAQ,QAAQ,kBAAkB,OAAO;AACzD,UAAM,kBAAkB;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACF;AACA,QAAI,aAAa,KAAK,WAAW,KAAK;AACtC,QAAI,CAAC,YAAY;AACf,mBAAa,IAAI,mBAAW,iBAAiB,IAAI;AAAA,IACnD,OAAO;AACL,iBAAW,mBAAmB,MAAM,eAAe;AACnD,iBAAW,QAAQ;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAkB,YAAY,QAAQ,OAAO;AAC3C,UAAM,kBAAkB,WAAW,mBAAmB;AACtD,QAAI,OAAO;AACX,QAAI,QAAQ,gBAAgB,SAAS;AACrC,QAAI,gBAAgB,IAAI,IAAI,gBAAgB,KAAK,GAAG;AAClD,aAAO;AACP,cAAQ;AAAA,IACV;AACA,UAAM,cAAc,KAAK,IAAI,OAAO,CAAC,GAAG,gBAAgB,IAAI,CAAC;AAC7D,UAAM,eAAe,KAAK,IAAI,OAAO,CAAC,GAAG,gBAAgB,KAAK,CAAC;AAC/D,UAAM,MAAM;AAAA,MACV,OAAO,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK;AAAA,MACnD;AAAA,MACA;AAAA,IACF;AACA,UAAM,cACJ,gBAAgB,OAAO,CAAC,KACtB,gBAAgB,QAAQ,CAAC,IAAI,gBAAgB,OAAO,CAAC,MACpD,MAAM,gBAAgB,IAAI,MAC1B,gBAAgB,KAAK,IAAI,gBAAgB,IAAI;AAClD,UAAM,aAAa,CAAC,KAAK,WAAW;AACpC,UAAM,QAAQ,KAAK,iBAAiB,KAAK,EAAE;AAC3C,UAAM,eAAe,UAAU;AAC/B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe;AACb,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,sBAAsB,YAAY;AAChC,UAAM,qBAAqB,IAAc,WAAW;AAEpD,UAAM,cAAc,WAAW,eAAe;AAE9C,SAAK,UAAU,YAAY,CAAC;AAC5B,SAAK,UAAU,YAAY,CAAC;AAC5B,SAAK,UAAU,YAAY,CAAC;AAC5B,SAAK,UAAU,YAAY,CAAC;AAK5B,UAAM,oBAAoB,aAAa,YAAY,kBAAkB;AACrE,QAAI,KAAK,UAAU,KAAK,SAAS;AAC/B,WAAK,qBAAqB;AAAA,IAC5B,OAAO;AACL,YAAM,QAAQ,KAAK,UAAU,KAAK,UAAU;AAC5C,WAAK,WAAW;AAChB,WAAK,qBAAqB,SAAU,aAAa,QAAQ,WAAW;AAClE,oBAAY,aAAa;AACzB,cAAM,oBAAoB;AAAA,UACxB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,iBAAS,IAAI,GAAG,IAAI,kBAAkB,QAAQ,IAAI,GAAG,KAAK,WAAW;AACnE,cAAI,kBAAkB,CAAC,IAAI,OAAO;AAChC,8BAAkB,CAAC,KAAK;AAAA,UAC1B;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAKA,SAAK,uBAAuB,aAAa,oBAAoB,UAAU;AACvE,UAAM,eAAe;AAAA,MACnB,CAAC,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,KAAK,OAAO;AAAA,MACvD,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAEA,SAAK,QAAQ,aAAa,CAAC;AAC3B,SAAK,QAAQ,aAAa,CAAC;AAC3B,SAAK,QAAQ,aAAa,CAAC;AAC3B,SAAK,QAAQ,aAAa,CAAC;AAK3B,SAAK,cAAc,KAAK,qBAAqB,CAAC,KAAK,SAAS,KAAK,OAAO,CAAC;AACzE,SAAK,eAAe,KAAK,qBAAqB,CAAC,KAAK,SAAS,KAAK,OAAO,CAAC;AAC1E,SAAK,WAAW,KAAK,qBAAqB,CAAC,KAAK,SAAS,KAAK,OAAO,CAAC;AACtE,SAAK,YAAY,KAAK,qBAAqB,CAAC,KAAK,SAAS,KAAK,OAAO,CAAC;AAMvE,SAAK,0BAA0B,KAAK;AAAA,MAClC,UAAU,WAAW,UAAU,CAAC;AAAA,IAClC;AACA,QAAI,MAAM,KAAK,wBAAwB,CAAC,CAAC,GAAG;AAC1C,WAAK,wBAAwB,CAAC,IAC5B,KAAK,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI,KAAK,OAAO,IAC3C,KAAK,UACL,KAAK;AAAA,IACb;AAEA,SAAK,cAAc;AAAA,EACrB;AACF;AAEA,IAAO,oBAAQ;;;AC5tCf,IAAM,cAAN,cAA0B,cAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrC,YAAY,QAAQ,YAAY,YAAY,QAAQ,QAAQ;AAC1D,UAAM,QAAQ,WAAW,SAAY,mBAAW,OAAO,mBAAW;AAElE,UAAM,QAAQ,YAAY,YAAY,KAAK;AAO3C,SAAK,UAAU,WAAW,SAAY,SAAS;AAM/C,SAAK,UAAU;AAMf,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW;AACT,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,KAAK;AACf,QAAI,KAAK;AACP,WAAK,SAAS;AACd,WAAK,QAAQ,mBAAW;AAAA,IAC1B,OAAO;AACL,WAAK,QAAQ,mBAAW;AAAA,IAC1B;AACA,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACL,QAAI,KAAK,SAAS,mBAAW,MAAM;AACjC,WAAK,QAAQ,mBAAW;AACxB,WAAK,QAAQ;AACb,WAAK,QAAQ,KAAK,YAAY,KAAK,IAAI,CAAC;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW;AACT,WAAO,KAAK;AAAA,EACd;AACF;AAEA,IAAO,sBAAQ;;;ACrFf,IAAOC,qBAAQ;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AACjB;;;ACLA,IAAM,yBAAN,cAAqC,eAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAK1C,YAAY,KAAK,eAAe;AAC9B,UAAM,GAAG;AAOT,SAAK,OAAO;AAMZ,SAAK;AAML,SAAK,iBAAiB;AAMtB,SAAK,YAAY;AAMjB,SAAK,oBAAoB,CAAC;AAM1B,SAAK,iBAAiB,kBAAkB,SAAY,IAAI;AAQxD,SAAK,QAAQ;AAEb,UAAM,UAAU,KAAK,KAAK,YAAY;AAMtC,SAAK,kBAAkB,CAAC;AAMxB,SAAK,kBAAkB,CAAC;AAKxB,SAAK,WAAW;AAMhB,SAAK,0BAA0B;AAAA,MAC7B;AAAA,MACAC,mBAAiB;AAAA,MACjB,KAAK;AAAA,MACL;AAAA,IACF;AAMA,SAAK;AAML,SAAK,sBAAsB;AAAA,MACzB;AAAA,MACAA,mBAAiB;AAAA,MACjB,KAAK;AAAA,MACL;AAAA,IACF;AAKA,SAAK,wBAAwB,KAAK,iBAAiB,KAAK,IAAI;AAE5D,SAAK,SAAS;AAAA,MACZ,kBAAU;AAAA,MACV,KAAK;AAAA,MACL,0BAA0B,EAAC,SAAS,MAAK,IAAI;AAAA,IAC/C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,cAAc;AAC1B,QAAI,WAAW,IAAI;AAAA,MACjB,4BAAoB;AAAA,MACpB,KAAK;AAAA,MACL;AAAA,IACF;AACA,SAAK,cAAc,QAAQ;AAC3B,QAAI,KAAK,oBAAoB,QAAW;AAEtC,mBAAa,KAAK,eAAe;AACjC,WAAK,kBAAkB;AACvB,iBAAW,IAAI;AAAA,QACb,4BAAoB;AAAA,QACpB,KAAK;AAAA,QACL;AAAA,MACF;AACA,WAAK,cAAc,QAAQ;AAAA,IAC7B,OAAO;AAEL,WAAK,kBAAkB,WAAW,MAAM;AACtC,aAAK,kBAAkB;AACvB,cAAMC,YAAW,IAAI;AAAA,UACnB,4BAAoB;AAAA,UACpB,KAAK;AAAA,UACL;AAAA,QACF;AACA,aAAK,cAAcA,SAAQ;AAAA,MAC7B,GAAG,GAAG;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAsB,cAAc;AAClC,UAAM,QAAQ;AACd,UAAM,KAAK,MAAM;AAEjB,QACE,MAAM,QAAQ,4BAAoB,aAClC,MAAM,QAAQ,4BAAoB,eAClC;AACA,aAAO,KAAK,gBAAgB,EAAE;AAC9B,iBAAW,aAAa,KAAK,iBAAiB;AAC5C,YAAI,KAAK,gBAAgB,SAAS,EAAE,WAAW,MAAM,QAAQ;AAK3D,iBAAO,KAAK,gBAAgB,SAAS;AACrC;AAAA,QACF;AAAA,MACF;AAAA,IACF,WACE,MAAM,QAAQ,4BAAoB,eAClC,MAAM,QAAQ,4BAAoB,aAClC;AACA,WAAK,gBAAgB,EAAE,IAAI;AAAA,IAC7B;AACA,SAAK,kBAAkB,OAAO,OAAO,KAAK,eAAe;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB,cAAc;AAC7B,SAAK,sBAAsB,YAAY;AACvC,UAAM,WAAW,IAAI;AAAA,MACnB,4BAAoB;AAAA,MACpB,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACP;AACA,SAAK,cAAc,QAAQ;AAQ3B,QACE,KAAK,kBACL,CAAC,SAAS,oBACV,CAAC,KAAK,aACN,KAAK,qBAAqB,YAAY,GACtC;AACA,WAAK,cAAc,KAAK,KAAK;AAAA,IAC/B;AAEA,QAAI,KAAK,gBAAgB,WAAW,GAAG;AACrC,WAAK,kBAAkB,QAAQ,aAAa;AAC5C,WAAK,kBAAkB,SAAS;AAChC,WAAK,YAAY;AACjB,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBAAqB,cAAc;AACjC,WAAO,aAAa,WAAW;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAmB,cAAc;AAC/B,SAAK,iBAAiB,KAAK,gBAAgB,WAAW;AACtD,SAAK,sBAAsB,YAAY;AACvC,UAAM,WAAW,IAAI;AAAA,MACnB,4BAAoB;AAAA,MACpB,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACP;AACA,SAAK,cAAc,QAAQ;AAE3B,SAAK,QAAQ,IAAI,aAAa,aAAa,MAAM,YAAY;AAC7D,WAAO,eAAe,KAAK,OAAO,UAAU;AAAA,MAC1C,UAAU;AAAA,MACV,OAAO,aAAa;AAAA,IACtB,CAAC;AAED,QAAI,KAAK,kBAAkB,WAAW,GAAG;AACvC,YAAM,MAAM,KAAK,KAAK,iBAAiB;AACvC,WAAK,kBAAkB;AAAA,QACrB;AAAA,UACE;AAAA,UACA,4BAAoB;AAAA,UACpB,KAAK;AAAA,UACL;AAAA,QACF;AAAA,QACA,OAAO,KAAK,4BAAoB,WAAW,KAAK,kBAAkB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QActE;AAAA,UACE,KAAK;AAAA,UACL,4BAAoB;AAAA,UACpB,KAAK;AAAA,UACL;AAAA,QACF;AAAA,MACF;AACA,UAAI,KAAK,SAAS,eAAe,KAAK,SAAS,YAAY,MAAM,KAAK;AACpE,aAAK,kBAAkB;AAAA,UACrB;AAAA,YACE,KAAK,SAAS,YAAY;AAAA,YAC1B,4BAAoB;AAAA,YACpB,KAAK;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAmB,cAAc;AAI/B,QAAI,KAAK,UAAU,YAAY,GAAG;AAChC,WAAK,sBAAsB,YAAY;AACvC,WAAK,YAAY;AACjB,YAAM,WAAW,IAAI;AAAA,QACnB,4BAAoB;AAAA,QACpB,KAAK;AAAA,QACL;AAAA,QACA,KAAK;AAAA,QACL;AAAA,QACA,KAAK;AAAA,MACP;AACA,WAAK,cAAc,QAAQ;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,cAAc;AAC5B,SAAK,4BAA4B;AACjC,UAAM,WAAW,CAAC,EAAE,KAAK,SAAS,KAAK,UAAU,YAAY;AAC7D,SAAK;AAAA,MACH,IAAI;AAAA,QACF,4BAAoB;AAAA,QACpB,KAAK;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iBAAiB,OAAO;AAItB,UAAM,gBAAgB,KAAK;AAC3B,SACG,CAAC,iBAAiB,cAAc,sBAChC,OAAO,MAAM,eAAe,aAAa,MAAM,eAAe,OAC/D;AACA,YAAM,eAAe;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,cAAc;AACtB,WACE,KAAK,aACL,KAAK,IAAI,aAAa,UAAU,KAAK,MAAM,OAAO,IAChD,KAAK,kBACP,KAAK,IAAI,aAAa,UAAU,KAAK,MAAM,OAAO,IAAI,KAAK;AAAA,EAE/D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB;AAChB,QAAI,KAAK,qBAAqB;AAC5B,oBAAc,KAAK,mBAAmB;AACtC,WAAK,sBAAsB;AAAA,IAC7B;AACA,SAAK,SAAS;AAAA,MACZ,kBAAU;AAAA,MACV,KAAK;AAAA,IACP;AAEA,QAAI,KAAK,yBAAyB;AAChC,oBAAc,KAAK,uBAAuB;AAC1C,WAAK,0BAA0B;AAAA,IACjC;AAEA,SAAK,kBAAkB,QAAQ,aAAa;AAC5C,SAAK,kBAAkB,SAAS;AAEhC,SAAK,WAAW;AAChB,UAAM,gBAAgB;AAAA,EACxB;AACF;AAEA,IAAO,iCAAQ;;;AC3Zf,IAAO,uBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMb,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOZ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOX,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOX,SAAS;AACX;;;ACnCA,IAAO,sBAAQ;AAAA,EACb,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AACR;;;ACHO,IAAM,OAAO;AAcpB,IAAM,gBAAN,MAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlB,YAAY,kBAAkB,aAAa;AAKzC,SAAK,oBAAoB;AAMzB,SAAK,eAAe;AAMpB,SAAK,YAAY,CAAC;AAMlB,SAAK,cAAc,CAAC;AAMpB,SAAK,kBAAkB,CAAC;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,SAAK,UAAU,SAAS;AACxB,SAAK,YAAY,SAAS;AAC1B,UAAM,KAAK,eAAe;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU;AACR,UAAM,WAAW,KAAK;AACtB,UAAM,aAAa,KAAK;AACxB,UAAM,UAAU,SAAS,CAAC;AAC1B,QAAI,SAAS,UAAU,GAAG;AACxB,eAAS,SAAS;AAClB,iBAAW,SAAS;AAAA,IACtB,OAAO;AACL,eAAS,CAAC;AAAA,MAAsB,SAAS,IAAI;AAC7C,iBAAW,CAAC;AAAA,MAA2B,WAAW,IAAI;AACtD,WAAK,QAAQ,CAAC;AAAA,IAChB;AACA,UAAM,aAAa,KAAK,aAAa,OAAO;AAC5C,WAAO,KAAK,gBAAgB,UAAU;AACtC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,SAAS;AACf;AAAA,MACE,EAAE,KAAK,aAAa,OAAO,KAAK,KAAK;AAAA,MACrC;AAAA,IACF;AACA,UAAM,WAAW,KAAK,kBAAkB,OAAO;AAC/C,QAAI,YAAY,MAAM;AACpB,WAAK,UAAU,KAAK,OAAO;AAC3B,WAAK,YAAY,KAAK,QAAQ;AAC9B,WAAK,gBAAgB,KAAK,aAAa,OAAO,CAAC,IAAI;AACnD,WAAK,UAAU,GAAG,KAAK,UAAU,SAAS,CAAC;AAC3C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACT,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,OAAO;AACxB,WAAO,QAAQ,IAAI;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,oBAAoB,OAAO;AACzB,WAAO,QAAQ,IAAI;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,OAAO;AACrB,WAAQ,QAAQ,KAAM;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW;AACT,QAAI;AACJ,SAAK,KAAK,KAAK,UAAU,UAAU,KAAK,GAAG,KAAK,GAAG,KAAK;AACtD,WAAK,QAAQ,CAAC;AAAA,IAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,KAAK;AACf,WAAO,OAAO,KAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,SAAS;AAChB,WAAO,KAAK,YAAY,KAAK,aAAa,OAAO,CAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,OAAO;AACb,UAAM,WAAW,KAAK;AACtB,UAAM,aAAa,KAAK;AACxB,UAAM,QAAQ,SAAS;AACvB,UAAM,UAAU,SAAS,KAAK;AAC9B,UAAM,WAAW,WAAW,KAAK;AACjC,UAAM,aAAa;AAEnB,WAAO,QAAQ,SAAS,GAAG;AACzB,YAAM,SAAS,KAAK,mBAAmB,KAAK;AAC5C,YAAM,SAAS,KAAK,oBAAoB,KAAK;AAE7C,YAAM,oBACJ,SAAS,SAAS,WAAW,MAAM,IAAI,WAAW,MAAM,IACpD,SACA;AAEN,eAAS,KAAK,IAAI,SAAS,iBAAiB;AAC5C,iBAAW,KAAK,IAAI,WAAW,iBAAiB;AAChD,cAAQ;AAAA,IACV;AAEA,aAAS,KAAK,IAAI;AAClB,eAAW,KAAK,IAAI;AACpB,SAAK,UAAU,YAAY,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,YAAY,OAAO;AAC3B,UAAM,WAAW,KAAK;AACtB,UAAM,aAAa,KAAK;AACxB,UAAM,UAAU,SAAS,KAAK;AAC9B,UAAM,WAAW,WAAW,KAAK;AAEjC,WAAO,QAAQ,YAAY;AACzB,YAAM,cAAc,KAAK,gBAAgB,KAAK;AAC9C,UAAI,WAAW,WAAW,IAAI,UAAU;AACtC,iBAAS,KAAK,IAAI,SAAS,WAAW;AACtC,mBAAW,KAAK,IAAI,WAAW,WAAW;AAC1C,gBAAQ;AAAA,MACV,OAAO;AACL;AAAA,MACF;AAAA,IACF;AACA,aAAS,KAAK,IAAI;AAClB,eAAW,KAAK,IAAI;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe;AACb,UAAM,mBAAmB,KAAK;AAC9B,UAAM,WAAW,KAAK;AACtB,UAAM,aAAa,KAAK;AACxB,QAAI,QAAQ;AACZ,UAAM,IAAI,SAAS;AACnB,QAAI,SAAS,GAAG;AAChB,SAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACtB,gBAAU,SAAS,CAAC;AACpB,iBAAW,iBAAiB,OAAO;AACnC,UAAI,YAAY,MAAM;AACpB,eAAO,KAAK,gBAAgB,KAAK,aAAa,OAAO,CAAC;AAAA,MACxD,OAAO;AACL,mBAAW,KAAK,IAAI;AACpB,iBAAS,OAAO,IAAI;AAAA,MACtB;AAAA,IACF;AACA,aAAS,SAAS;AAClB,eAAW,SAAS;AACpB,SAAK,SAAS;AAAA,EAChB;AACF;AAEA,IAAO,wBAAQ;;;ACtPf,IAAM,YAAN,cAAwB,sBAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpC,YAAY,sBAAsB,oBAAoB;AACpD;AAAA,MACE,CAAC,YAAY,qBAAqB,MAAM,MAAM,OAAO;AAAA,MACrD,CAAC,YAAY,QAAQ,CAAC,EAAE,OAAO;AAAA,IACjC;AAGA,SAAK,yBAAyB,KAAK,iBAAiB,KAAK,IAAI;AAM7D,SAAK,sBAAsB;AAM3B,SAAK,gBAAgB;AAMrB,SAAK,oBAAoB,CAAC;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,SAAS;AACf,UAAM,QAAQ,MAAM,QAAQ,OAAO;AACnC,QAAI,OAAO;AACT,YAAM,OAAO,QAAQ,CAAC;AACtB,WAAK,iBAAiB,kBAAU,QAAQ,KAAK,sBAAsB;AAAA,IACrE;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AAChB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB,OAAO;AACtB,UAAM;AAAA;AAAA,MAAmD,MAAM;AAAA;AAC/D,UAAM,QAAQ,KAAK,SAAS;AAC5B,QACE,UAAU,kBAAU,UACpB,UAAU,kBAAU,SACpB,UAAU,kBAAU,OACpB;AACA,UAAI,UAAU,kBAAU,OAAO;AAC7B,aAAK,oBAAoB,kBAAU,QAAQ,KAAK,sBAAsB;AAAA,MACxE;AACA,YAAM,UAAU,KAAK,OAAO;AAC5B,UAAI,WAAW,KAAK,mBAAmB;AACrC,eAAO,KAAK,kBAAkB,OAAO;AACrC,UAAE,KAAK;AAAA,MACT;AACA,WAAK,oBAAoB;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,iBAAiB,aAAa;AAC1C,QAAI,WAAW;AACf,WACE,KAAK,gBAAgB,mBACrB,WAAW,eACX,KAAK,SAAS,IAAI,GAClB;AACA,YAAM,OAAO,KAAK,QAAQ,EAAE,CAAC;AAC7B,YAAM,UAAU,KAAK,OAAO;AAC5B,YAAM,QAAQ,KAAK,SAAS;AAC5B,UAAI,UAAU,kBAAU,QAAQ,EAAE,WAAW,KAAK,oBAAoB;AACpE,aAAK,kBAAkB,OAAO,IAAI;AAClC,UAAE,KAAK;AACP,UAAE;AACF,aAAK,KAAK;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,oBAAQ;AAUR,SAAS,gBACd,YACA,MACA,eACA,YACA,gBACA;AAGA,MAAI,CAAC,cAAc,EAAE,iBAAiB,WAAW,cAAc;AAC7D,WAAO;AAAA,EACT;AACA,MAAI,CAAC,WAAW,YAAY,aAAa,EAAE,KAAK,OAAO,CAAC,GAAG;AACzD,WAAO;AAAA,EACT;AAOA,QAAM,SAAS,WAAW,UAAU;AACpC,QAAM,SAAS,WAAW,CAAC,IAAI,OAAO,CAAC;AACvC,QAAM,SAAS,WAAW,CAAC,IAAI,OAAO,CAAC;AACvC,SACE,QAAQ,KAAK,IAAI,cAAc,IAC/B,KAAK,KAAK,SAAS,SAAS,SAAS,MAAM,IAAI;AAEnD;;;AClHA,IAAM,UAAN,cAAsB,eAAW;AAAA;AAAA;AAAA;AAAA,EAI/B,YAAY,SAAS;AACnB,UAAM;AAEN,UAAM,UAAU,QAAQ;AACxB,QAAI,WAAW,CAAC,QAAQ,UAAU,CAAC,QAAQ,MAAM,eAAe;AAC9D,cAAQ,MAAM,gBAAgB;AAAA,IAChC;AAMA,SAAK,UAAU,UAAU,UAAU;AAMnC,SAAK,UAAU;AAMf,SAAK,OAAO;AAMZ,SAAK,eAAe,CAAC;AAErB,QAAI,QAAQ,QAAQ;AAClB,WAAK,SAAS,QAAQ;AAAA,IACxB;AAEA,QAAI,QAAQ,QAAQ;AAClB,WAAK,UAAU,QAAQ,MAAM;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB;AA7FpB;AA8FI,eAAK,YAAL,mBAAc;AACd,UAAM,gBAAgB;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS;AACP,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,KAAK;AAnHd;AAoHI,QAAI,KAAK,MAAM;AACb,iBAAK,YAAL,mBAAc;AAAA,IAChB;AACA,aAAS,IAAI,GAAG,KAAK,KAAK,aAAa,QAAQ,IAAI,IAAI,EAAE,GAAG;AAC1D,oBAAc,KAAK,aAAa,CAAC,CAAC;AAAA,IACpC;AACA,SAAK,aAAa,SAAS;AAC3B,SAAK,OAAO;AACZ,QAAI,KAAK;AACP,YAAM,SAAS,KAAK,WAAW,IAAI,6BAA6B;AAChE,UAAI,KAAK,SAAS;AAChB,eAAO,YAAY,KAAK,OAAO;AAAA,MACjC;AACA,UAAI,KAAK,WAAW,MAAM;AACxB,aAAK,aAAa;AAAA,UAChB,OAAO,KAAK,qBAAa,YAAY,KAAK,QAAQ,IAAI;AAAA,QACxD;AAAA,MACF;AACA,UAAI,OAAO;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWlB,UAAU,QAAQ;AAChB,SAAK,UACH,OAAO,WAAW,WAAW,SAAS,eAAe,MAAM,IAAI;AAAA,EACnE;AACF;AAEA,IAAO,kBAAQ;;;AChHf,IAAM,cAAN,cAA0B,gBAAQ;AAAA;AAAA;AAAA;AAAA,EAIhC,YAAY,SAAS;AACnB,cAAU,UAAU,UAAU,CAAC;AAE/B,UAAM;AAAA,MACJ,SAAS,SAAS,cAAc,KAAK;AAAA,MACrC,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAMD,SAAK,aAAa,SAAS,cAAc,IAAI;AAM7C,SAAK,aACH,QAAQ,cAAc,SAAY,QAAQ,YAAY;AAMxD,SAAK,iBAAiB,KAAK;AAM3B,SAAK,uBAAuB,QAAQ,gBAAgB;AAMpD,SAAK,eACH,QAAQ,gBAAgB,SAAY,QAAQ,cAAc;AAE5D,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,aAAa;AAAA,IACpB;AAMA,SAAK,gBAAgB,QAAQ;AAE7B,UAAM,YACJ,QAAQ,cAAc,SAAY,QAAQ,YAAY;AAExD,UAAM,WACJ,QAAQ,aAAa,SAAY,QAAQ,WAAW;AAEtD,UAAM,kBACJ,QAAQ,oBAAoB,SACxB,QAAQ,kBACR,YAAY;AAElB,UAAM,gBACJ,QAAQ,kBAAkB,SAAY,QAAQ,gBAAgB;AAEhE,UAAM,oBACJ,QAAQ,sBAAsB,SAC1B,QAAQ,oBACR,YAAY;AAElB,QAAI,OAAO,kBAAkB,UAAU;AAKrC,WAAK,iBAAiB,SAAS,cAAc,MAAM;AACnD,WAAK,eAAe,cAAc;AAClC,WAAK,eAAe,YAAY;AAAA,IAClC,OAAO;AACL,WAAK,iBAAiB;AAAA,IACxB;AAEA,UAAM,QAAQ,QAAQ,UAAU,SAAY,QAAQ,QAAQ;AAE5D,QAAI,OAAO,UAAU,UAAU;AAK7B,WAAK,SAAS,SAAS,cAAc,MAAM;AAC3C,WAAK,OAAO,cAAc;AAC1B,WAAK,OAAO,YAAY;AAAA,IAC1B,OAAO;AACL,WAAK,SAAS;AAAA,IAChB;AAEA,UAAM,cACJ,KAAK,gBAAgB,CAAC,KAAK,aAAa,KAAK,iBAAiB,KAAK;AAMrE,SAAK,gBAAgB,SAAS,cAAc,QAAQ;AACpD,SAAK,cAAc,aAAa,QAAQ,QAAQ;AAChD,SAAK,cAAc,aAAa,iBAAiB,OAAO,CAAC,KAAK,UAAU,CAAC;AACzE,SAAK,cAAc,QAAQ;AAC3B,SAAK,cAAc,YAAY,WAAW;AAE1C,SAAK,cAAc;AAAA,MACjB,kBAAU;AAAA,MACV,KAAK,aAAa,KAAK,IAAI;AAAA,MAC3B;AAAA,IACF;AAEA,UAAM,aACJ,YACA,MACA,qBACA,MACA,iBACC,KAAK,cAAc,KAAK,eAAe,MAAM,kBAAkB,OAC/D,KAAK,eAAe,KAAK;AAC5B,UAAM,UAAU,KAAK;AACrB,YAAQ,YAAY;AACpB,YAAQ,YAAY,KAAK,aAAa;AACtC,YAAQ,YAAY,KAAK,UAAU;AAOnC,SAAK,wBAAwB,CAAC;AAM9B,SAAK,mBAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,2BAA2B,YAAY;AACrC,UAAM,SAAS,KAAK,OAAO,EAAE,aAAa;AAC1C,UAAM,sBAAsB,IAAI;AAAA,MAC9B,OAAO,QAAQ,CAAC,UAAU,MAAM,gBAAgB,UAAU,CAAC;AAAA,IAC7D;AACA,QAAI,KAAK,kBAAkB,QAAW;AACpC,YAAM,QAAQ,KAAK,aAAa,IAC5B,KAAK,cAAc,QAAQ,CAAC,SAAS,oBAAoB,IAAI,IAAI,CAAC,IAClE,oBAAoB,IAAI,KAAK,aAAa;AAAA,IAChD;AAEA,QAAI,CAAC,KAAK,sBAAsB;AAC9B,YAAM,cAAc,CAAC,OAAO;AAAA,QAC1B,CAAC,UAAO;AArNhB;AAqNmB,8BAAM,UAAU,MAAhB,mBAAmB,kCAAiC;AAAA;AAAA,MACjE;AACA,WAAK,eAAe,WAAW;AAAA,IACjC;AACA,WAAO,MAAM,KAAK,mBAAmB;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,YAAY;AAC/B,QAAI,CAAC,YAAY;AACf,UAAI,KAAK,kBAAkB;AACzB,aAAK,QAAQ,MAAM,UAAU;AAC7B,aAAK,mBAAmB;AAAA,MAC1B;AACA;AAAA,IACF;AAEA,UAAM,eAAe,MAAM,QAAQ;AAAA,MACjC,KAAK,2BAA2B,UAAU,EAAE;AAAA,QAAI,CAAC,gBAC/C,UAAU,MAAM,WAAW;AAAA,MAC7B;AAAA,IACF;AAEA,UAAM,UAAU,aAAa,SAAS;AACtC,QAAI,KAAK,oBAAoB,SAAS;AACpC,WAAK,QAAQ,MAAM,UAAU,UAAU,KAAK;AAC5C,WAAK,mBAAmB;AAAA,IAC1B;AAEA,QAAI,OAAO,cAAc,KAAK,qBAAqB,GAAG;AACpD;AAAA,IACF;AAEA,mBAAe,KAAK,UAAU;AAG9B,aAAS,IAAI,GAAG,KAAK,aAAa,QAAQ,IAAI,IAAI,EAAE,GAAG;AACrD,YAAM,UAAU,SAAS,cAAc,IAAI;AAC3C,cAAQ,YAAY,aAAa,CAAC;AAClC,WAAK,WAAW,YAAY,OAAO;AAAA,IACrC;AAEA,SAAK,wBAAwB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,OAAO;AAClB,UAAM,eAAe;AACrB,SAAK,cAAc;AACnB,SAAK,iBAAiB,KAAK;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACd,SAAK,QAAQ,UAAU,OAAO,eAAe;AAC7C,QAAI,KAAK,YAAY;AACnB,kBAAY,KAAK,gBAAgB,KAAK,MAAM;AAAA,IAC9C,OAAO;AACL,kBAAY,KAAK,QAAQ,KAAK,cAAc;AAAA,IAC9C;AACA,SAAK,aAAa,CAAC,KAAK;AACxB,SAAK,cAAc,aAAa,iBAAiB,OAAO,CAAC,KAAK,UAAU,CAAC;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB;AACf,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,aAAa;AAC1B,QAAI,KAAK,iBAAiB,aAAa;AACrC;AAAA,IACF;AACA,SAAK,eAAe;AACpB,SAAK,QAAQ,UAAU,OAAO,kBAAkB;AAChD,QAAI,KAAK,gBAAgB;AACvB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,WAAW;AACtB,SAAK,iBAAiB;AACtB,QAAI,CAAC,KAAK,gBAAgB,KAAK,eAAe,WAAW;AACvD;AAAA,IACF;AACA,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe;AACb,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU;AACf,SAAK,eAAe,SAAS,UAAU;AAAA,EACzC;AACF;AAEA,IAAO,sBAAQ;;;ACxTf,IAAM,SAAN,cAAqB,gBAAQ;AAAA;AAAA;AAAA;AAAA,EAI3B,YAAY,SAAS;AACnB,cAAU,UAAU,UAAU,CAAC;AAE/B,UAAM;AAAA,MACJ,SAAS,SAAS,cAAc,KAAK;AAAA,MACrC,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAED,UAAM,YACJ,QAAQ,cAAc,SAAY,QAAQ,YAAY;AAExD,UAAM,QAAQ,QAAQ,UAAU,SAAY,QAAQ,QAAQ;AAE5D,UAAM,mBACJ,QAAQ,qBAAqB,SACzB,QAAQ,mBACR;AAMN,SAAK,SAAS;AAEd,QAAI,OAAO,UAAU,UAAU;AAC7B,WAAK,SAAS,SAAS,cAAc,MAAM;AAC3C,WAAK,OAAO,YAAY;AACxB,WAAK,OAAO,cAAc;AAAA,IAC5B,OAAO;AACL,WAAK,SAAS;AACd,WAAK,OAAO,UAAU,IAAI,gBAAgB;AAAA,IAC5C;AAEA,UAAM,WAAW,QAAQ,WAAW,QAAQ,WAAW;AAEvD,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,YAAY,YAAY;AAC/B,WAAO,aAAa,QAAQ,QAAQ;AACpC,WAAO,QAAQ;AACf,WAAO,YAAY,KAAK,MAAM;AAE9B,WAAO;AAAA,MACL,kBAAU;AAAA,MACV,KAAK,aAAa,KAAK,IAAI;AAAA,MAC3B;AAAA,IACF;AAEA,UAAM,aACJ,YAAY,MAAM,qBAAqB,MAAM;AAC/C,UAAM,UAAU,KAAK;AACrB,YAAQ,YAAY;AACpB,YAAQ,YAAY,MAAM;AAK1B,SAAK,kBAAkB,QAAQ,aAAa,QAAQ,aAAa;AAMjE,SAAK,YAAY,QAAQ,aAAa,SAAY,QAAQ,WAAW;AAMrE,SAAK,YAAY,QAAQ,aAAa,SAAY,QAAQ,WAAW;AAMrE,SAAK,YAAY;AAEjB,QAAI,KAAK,WAAW;AAClB,WAAK,QAAQ,UAAU,IAAI,YAAY;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,OAAO;AAClB,UAAM,eAAe;AACrB,QAAI,KAAK,oBAAoB,QAAW;AACtC,WAAK,gBAAgB;AAAA,IACvB,OAAO;AACL,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc;AACZ,UAAM,MAAM,KAAK,OAAO;AACxB,UAAM,OAAO,IAAI,QAAQ;AACzB,QAAI,CAAC,MAAM;AAGT;AAAA,IACF;AACA,UAAM,WAAW,KAAK,YAAY;AAClC,QAAI,aAAa,QAAW;AAC1B,UAAI,KAAK,YAAY,KAAK,YAAY,IAAI,KAAK,QAAQ,GAAG;AACxD,aAAK,QAAQ;AAAA,UACX,UAAU;AAAA,UACV,UAAU,KAAK;AAAA,UACf,QAAQ;AAAA,QACV,CAAC;AAAA,MACH,OAAO;AACL,aAAK,YAAY,CAAC;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU;AACf,UAAM,aAAa,SAAS;AAC5B,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACA,UAAM,WAAW,WAAW,UAAU;AACtC,QAAI,YAAY,KAAK,WAAW;AAC9B,YAAM,YAAY,YAAY,WAAW;AACzC,UAAI,KAAK,WAAW;AAClB,cAAM,WAAW,KAAK,QAAQ,UAAU,SAAS,YAAY;AAC7D,YAAI,CAAC,YAAY,aAAa,GAAG;AAC/B,eAAK,QAAQ,UAAU,IAAI,YAAY;AAAA,QACzC,WAAW,YAAY,aAAa,GAAG;AACrC,eAAK,QAAQ,UAAU,OAAO,YAAY;AAAA,QAC5C;AAAA,MACF;AACA,WAAK,OAAO,MAAM,YAAY;AAAA,IAChC;AACA,SAAK,YAAY;AAAA,EACnB;AACF;AAEA,IAAO,iBAAQ;;;ACvJf,IAAM,OAAN,cAAmB,gBAAQ;AAAA;AAAA;AAAA;AAAA,EAIzB,YAAY,SAAS;AACnB,cAAU,UAAU,UAAU,CAAC;AAE/B,UAAM;AAAA,MACJ,SAAS,SAAS,cAAc,KAAK;AAAA,MACrC,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAED,UAAM,YACJ,QAAQ,cAAc,SAAY,QAAQ,YAAY;AAExD,UAAM,QAAQ,QAAQ,UAAU,SAAY,QAAQ,QAAQ;AAE5D,UAAM,kBACJ,QAAQ,oBAAoB,SACxB,QAAQ,kBACR,YAAY;AAElB,UAAM,mBACJ,QAAQ,qBAAqB,SACzB,QAAQ,mBACR,YAAY;AAElB,UAAM,cACJ,QAAQ,gBAAgB,SAAY,QAAQ,cAAc;AAC5D,UAAM,eACJ,QAAQ,iBAAiB,SAAY,QAAQ,eAAe;AAE9D,UAAM,iBACJ,QAAQ,mBAAmB,SAAY,QAAQ,iBAAiB;AAClE,UAAM,kBACJ,QAAQ,oBAAoB,SACxB,QAAQ,kBACR;AAEN,UAAM,YAAY,SAAS,cAAc,QAAQ;AACjD,cAAU,YAAY;AACtB,cAAU,aAAa,QAAQ,QAAQ;AACvC,cAAU,QAAQ;AAClB,cAAU;AAAA,MACR,OAAO,gBAAgB,WACnB,SAAS,eAAe,WAAW,IACnC;AAAA,IACN;AAEA,cAAU;AAAA,MACR,kBAAU;AAAA,MACV,KAAK,aAAa,KAAK,MAAM,KAAK;AAAA,MAClC;AAAA,IACF;AAEA,UAAM,aAAa,SAAS,cAAc,QAAQ;AAClD,eAAW,YAAY;AACvB,eAAW,aAAa,QAAQ,QAAQ;AACxC,eAAW,QAAQ;AACnB,eAAW;AAAA,MACT,OAAO,iBAAiB,WACpB,SAAS,eAAe,YAAY,IACpC;AAAA,IACN;AAEA,eAAW;AAAA,MACT,kBAAU;AAAA,MACV,KAAK,aAAa,KAAK,MAAM,CAAC,KAAK;AAAA,MACnC;AAAA,IACF;AAEA,UAAM,aACJ,YAAY,MAAM,qBAAqB,MAAM;AAC/C,UAAM,UAAU,KAAK;AACrB,YAAQ,YAAY;AACpB,YAAQ,YAAY,SAAS;AAC7B,YAAQ,YAAY,UAAU;AAM9B,SAAK,YAAY,QAAQ,aAAa,SAAY,QAAQ,WAAW;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,OAAO,OAAO;AACzB,UAAM,eAAe;AACrB,SAAK,aAAa,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,OAAO;AAClB,UAAM,MAAM,KAAK,OAAO;AACxB,UAAM,OAAO,IAAI,QAAQ;AACzB,QAAI,CAAC,MAAM;AAGT;AAAA,IACF;AACA,UAAM,cAAc,KAAK,QAAQ;AACjC,QAAI,gBAAgB,QAAW;AAC7B,YAAM,UAAU,KAAK,mBAAmB,cAAc,KAAK;AAC3D,UAAI,KAAK,YAAY,GAAG;AACtB,YAAI,KAAK,aAAa,GAAG;AACvB,eAAK,iBAAiB;AAAA,QACxB;AACA,aAAK,QAAQ;AAAA,UACX,MAAM;AAAA,UACN,UAAU,KAAK;AAAA,UACf,QAAQ;AAAA,QACV,CAAC;AAAA,MACH,OAAO;AACL,aAAK,QAAQ,OAAO;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,eAAQ;;;AC3HR,SAASC,UAAS,SAAS;AAChC,YAAU,UAAU,UAAU,CAAC;AAG/B,QAAM,WAAW,IAAI,mBAAW;AAEhC,QAAM,cAAc,QAAQ,SAAS,SAAY,QAAQ,OAAO;AAChE,MAAI,aAAa;AACf,aAAS,KAAK,IAAI,aAAK,QAAQ,WAAW,CAAC;AAAA,EAC7C;AAEA,QAAM,gBAAgB,QAAQ,WAAW,SAAY,QAAQ,SAAS;AACtE,MAAI,eAAe;AACjB,aAAS,KAAK,IAAI,eAAO,QAAQ,aAAa,CAAC;AAAA,EACjD;AAEA,QAAM,qBACJ,QAAQ,gBAAgB,SAAY,QAAQ,cAAc;AAC5D,MAAI,oBAAoB;AACtB,aAAS,KAAK,IAAI,oBAAY,QAAQ,kBAAkB,CAAC;AAAA,EAC3D;AAEA,SAAO;AACT;;;AClCO,IAAM,aAAN,cAAyB,cAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpC,YAAY,MAAM,OAAO;AACvB,UAAM,IAAI;AAOV,SAAK,QAAQ;AAAA,EACf;AACF;AAoCA,IAAMC,YAAW;AAAA,EACf,QAAQ;AACV;AAUA,IAAM,aAAN,MAAM,oBAAmB,aAAU;AAAA;AAAA;AAAA;AAAA,EAIjC,YAAY,SAAS;AACnB,cAAU,WAAW,CAAC;AACtB,UAAM;AAAA;AAAA,MAAsC,OAAO,OAAO,CAAC,GAAG,OAAO;AAAA;AACrE,WAAO,YAAY;AAEnB,QAAI,SAAS,QAAQ;AAErB,UAAM,WAAW;AAKjB,SAAK;AAKL,SAAK;AAKL,SAAK;AAML,SAAK,sBAAsB,CAAC;AAM5B,SAAK,gBAAgB,CAAC;AAEtB,SAAK,kBAAkBA,UAAS,QAAQ,KAAK,oBAAoB;AAEjE,QAAI,QAAQ;AACV,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,iBAAS,IAAI,mBAAW,OAAO,MAAM,GAAG,EAAC,QAAQ,KAAI,CAAC;AAAA,MACxD,OAAO;AACL;AAAA,UACE;AAAA,UAA0B,OAAQ,aAAc;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,eAAS,IAAI,mBAAW,QAAW,EAAC,QAAQ,KAAI,CAAC;AAAA,IACnD;AAEA,SAAK,UAAU,MAAM;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB;AACnB,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB;AACrB,SAAK,oBAAoB,QAAQ,aAAa;AAC9C,SAAK,oBAAoB,SAAS;AAElC,UAAM,SAAS,KAAK,UAAU;AAC9B,SAAK,oBAAoB;AAAA,MACvB,OAAO,QAAQ,4BAAoB,KAAK,KAAK,kBAAkB,IAAI;AAAA,MACnE;AAAA,QACE;AAAA,QACA,4BAAoB;AAAA,QACpB,KAAK;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAEA,eAAW,MAAM,KAAK,eAAe;AACnC,WAAK,cAAc,EAAE,EAAE,QAAQ,aAAa;AAAA,IAC9C;AACA,UAAM,KAAK,aAAa;AAExB,UAAM,cAAc,OAAO,SAAS;AACpC,aAAS,IAAI,GAAG,KAAK,YAAY,QAAQ,IAAI,IAAI,KAAK;AACpD,YAAM,QAAQ,YAAY,CAAC;AAC3B,WAAK,wBAAwB,KAAK;AAClC,WAAK,cAAc,IAAI,WAAW,YAAY,KAAK,CAAC;AAAA,IACtD;AACA,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB,OAAO;AAC7B,UAAM,eAAe;AAAA,MACnB;AAAA,QACE;AAAA,QACA,wBAAgB;AAAA,QAChB,KAAK;AAAA,QACL;AAAA,MACF;AAAA,MACA,OAAO,OAAO,kBAAU,QAAQ,KAAK,oBAAoB,IAAI;AAAA,IAC/D;AAEA,QAAI,iBAAiB,aAAY;AAC/B,mBAAa;AAAA,QACX,OAAO,OAAO,YAAY,KAAK,sBAAsB,IAAI;AAAA,QACzD,OAAO,OAAO,eAAe,KAAK,yBAAyB,IAAI;AAAA,MACjE;AAAA,IACF;AAEA,SAAK,cAAc,OAAO,KAAK,CAAC,IAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB,OAAO;AAC1B,SAAK,cAAc,IAAI,WAAW,YAAY,MAAM,KAAK,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB,OAAO;AAC7B,SAAK,cAAc,IAAI,WAAW,eAAe,MAAM,KAAK,CAAC;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB,iBAAiB;AAChC,UAAM,QAAQ,gBAAgB;AAC9B,SAAK,wBAAwB,KAAK;AAClC,SAAK,cAAc,IAAI,WAAW,YAAY,KAAK,CAAC;AACpD,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAoB,iBAAiB;AACnC,UAAM,QAAQ,gBAAgB;AAC9B,UAAM,MAAM,OAAO,KAAK;AACxB,SAAK,cAAc,GAAG,EAAE,QAAQ,aAAa;AAC7C,WAAO,KAAK,cAAc,GAAG;AAC7B,SAAK,cAAc,IAAI,WAAW,eAAe,KAAK,CAAC;AACvD,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAY;AACV;AAAA;AAAA,MACE,KAAK,IAAIA,UAAS,MAAM;AAAA;AAAA,EAE5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAU,QAAQ;AAChB,UAAM,aAAa,KAAK,UAAU;AAClC,QAAI,YAAY;AACd,YAAM,gBAAgB,WAAW,SAAS;AAC1C,eAAS,IAAI,GAAG,KAAK,cAAc,QAAQ,IAAI,IAAI,EAAE,GAAG;AACtD,aAAK,cAAc,IAAI,WAAW,eAAe,cAAc,CAAC,CAAC,CAAC;AAAA,MACpE;AAAA,IACF;AAEA,SAAK,IAAIA,UAAS,QAAQ,MAAM;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,OAAO;AACpB,YAAQ,UAAU,SAAY,QAAQ,CAAC;AACvC,SAAK,UAAU,EAAE,QAAQ,SAAU,OAAO;AACxC,YAAM,eAAe,KAAK;AAAA,IAC5B,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,oBAAoB,MAAM;AACxB,UAAM,SAAS,SAAS,SAAY,OAAO,CAAC;AAC5C,UAAM,MAAM,OAAO;AAEnB,SAAK,UAAU,EAAE,QAAQ,SAAU,OAAO;AACxC,YAAM,oBAAoB,MAAM;AAAA,IAClC,CAAC;AAED,UAAM,gBAAgB,KAAK,cAAc;AACzC,QAAI,gBAAgB,cAAc;AAClC,QAAI,CAAC,QAAQ,cAAc,WAAW,QAAW;AAC/C,sBAAgB;AAAA,IAClB;AACA,aAAS,IAAI,KAAK,KAAK,OAAO,QAAQ,IAAI,IAAI,KAAK;AACjD,YAAM,aAAa,OAAO,CAAC;AAC3B,iBAAW,WAAW,cAAc;AACpC,iBAAW,UAAU,WAAW,WAAW,cAAc;AACzD,iBAAW,gBAAgB,KAAK;AAAA,QAC9B,WAAW;AAAA,QACX,cAAc;AAAA,MAChB;AACA,iBAAW,gBAAgB,KAAK;AAAA,QAC9B,WAAW;AAAA,QACX,cAAc;AAAA,MAChB;AACA,iBAAW,UAAU,KAAK,IAAI,WAAW,SAAS,cAAc,OAAO;AACvE,iBAAW,UAAU,KAAK,IAAI,WAAW,SAAS,cAAc,OAAO;AACvE,UAAI,cAAc,WAAW,QAAW;AACtC,YAAI,WAAW,WAAW,QAAW;AACnC,qBAAW,SAAS;AAAA,YAClB,WAAW;AAAA,YACX,cAAc;AAAA,UAChB;AAAA,QACF,OAAO;AACL,qBAAW,SAAS,cAAc;AAAA,QACpC;AAAA,MACF;AACA,UAAI,WAAW,WAAW,QAAW;AACnC,mBAAW,SAAS;AAAA,MACtB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB;AACf,WAAO;AAAA,EACT;AACF;AAEA,IAAO,gBAAQ;;;AC7Uf,IAAM,cAAN,cAA0B,mBAAW;AAAA;AAAA;AAAA;AAAA,EAInC,YAAY,KAAK;AACf,UAAM;AAMN,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,MAAM,YAAY;AACpC,aAAS;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAoB,YAAY;AAC9B,UAAM,YAAY,WAAW;AAC7B,UAAM,6BAA6B,WAAW;AAC9C,UAAM,6BAA6B,WAAW;AAE9C;AAAA,MACE;AAAA,MACA,WAAW,KAAK,CAAC,IAAI;AAAA,MACrB,WAAW,KAAK,CAAC,IAAI;AAAA,MACrB,IAAI,UAAU;AAAA,MACd,KAAK,UAAU;AAAA,MACf,CAAC,UAAU;AAAA,MACX,CAAC,UAAU,OAAO,CAAC;AAAA,MACnB,CAAC,UAAU,OAAO,CAAC;AAAA,IACrB;AAEA,gBAAY,4BAA4B,0BAA0B;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,2BACE,YACA,YACA,cACA,cACA,UACA,SACA,aACA,UACA;AACA,QAAI;AACJ,UAAM,YAAY,WAAW;AAS7B,aAAS,2BAA2B,SAAS,SAAS,OAAO,UAAU;AACrE,aAAO,SAAS,KAAK,SAAS,SAAS,UAAU,QAAQ,MAAM,QAAQ;AAAA,IACzE;AAEA,UAAM,aAAa,UAAU;AAE7B,UAAM,uBAAuBC,OAAM,WAAW,MAAM,GAAG,UAAU;AACjE,UAAM,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;AACvB,QAAI,WAAW,SAAS,KAAK,cAAc;AACzC,YAAM,mBAAmB,WAAW,UAAU;AAC9C,YAAM,aAAa,SAAS,gBAAgB;AAC5C,cAAQ,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAAA,IAChD;AAEA,UAAM,cAAc,WAAW;AAC/B,UAAM,YAAY,YAAY;AAE9B,UAAM;AAAA;AAAA,MAA6C,CAAC;AAAA;AACpD,UAAM,WAAW,CAAC;AAClB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,eAAS,IAAI,YAAY,GAAG,KAAK,GAAG,EAAE,GAAG;AACvC,cAAM,aAAa,YAAY,CAAC;AAChC,cAAM,QAAQ,WAAW;AACzB,YACE,MAAM,YAAY,KAClB,OAAO,YAAY,SAAS,KAC5B,YAAY,KAAK,UAAU,KAAK,GAChC;AACA,gBAAM,gBAAgB,MAAM,YAAY;AACxC,gBAAM,SAAS,MAAM,UAAU;AAC/B,cAAI,iBAAiB,QAAQ;AAC3B,kBAAM,cAAc,OAAO,SAAS,IAChC,uBACA;AACJ,kBAAMC,YAAW,2BAA2B;AAAA,cAC1C;AAAA,cACA,WAAW;AAAA,YACb;AACA,qBAAS,CAAC,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC;AAC3C,qBAAS,CAAC,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC;AAC3C,qBAAS,cAAc;AAAA,cACrB;AAAA,cACA;AAAA,cACA;AAAA,cACAA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AACA,cAAI,QAAQ;AACV,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,IAAI,QAAQ;AAC1B,YAAQ,QAAQ,CAAC,GAAG,MAAO,EAAE,cAAc,IAAI,KAAM;AACrD,YAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,UAAU;AAClD,YAAQ,KAAK,CAAC,MAAM;AAClB,aAAQ,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ;AAAA,IAC5D,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,uBACE,YACA,YACA,cACA,cACA,aACA,SACA;AACA,UAAM,aAAa,KAAK;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,eAAe;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS;AACP,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,YAAY;AACtB,aAAS;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,wBAAwB,YAAY;AAClC,QAAI,OAAe,eAAe,GAAG;AACnC,iBAAW,oBAAoB,KAAK,eAAe;AAAA,IACrD;AAAA,EACF;AACF;AAMA,SAAS,gBAAgB,KAAK,YAAY;AACxC,SAAe,OAAO;AACxB;AAEA,IAAO,cAAQ;;;AC/Nf,IAAM,uBAAN,cAAmC,YAAY;AAAA;AAAA;AAAA;AAAA,EAI7C,YAAY,KAAK;AACf,UAAM,GAAG;AAMT,SAAK,yBAAyB;AAAA,MAC5B;AAAA,MACA,wBAAgB;AAAA,MAChB,IAAI;AAAA,MACJ;AAAA,IACF;AAMA,SAAK,WAAW,SAAS,cAAc,KAAK;AAC5C,UAAM,QAAQ,KAAK,SAAS;AAC5B,UAAM,WAAW;AACjB,UAAM,QAAQ;AACd,UAAM,SAAS;AACf,UAAM,SAAS;AAEf,SAAK,SAAS,YAAY,qBAAqB;AAE/C,UAAM,YAAY,IAAI,YAAY;AAClC,cAAU,aAAa,KAAK,UAAU,UAAU,cAAc,IAAI;AAMlE,SAAK,YAAY,CAAC;AAMlB,SAAK,mBAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,MAAM,YAAY;AACpC,UAAM,MAAM,KAAK,OAAO;AACxB,QAAI,IAAI,YAAY,IAAI,GAAG;AACzB,YAAM,QAAQ,IAAIC,eAAY,MAAM,QAAW,UAAU;AACzD,UAAI,cAAc,KAAK;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AAChB,kBAAc,KAAK,sBAAsB;AACzC,SAAK,SAAS,OAAO;AACrB,UAAM,gBAAgB;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,YAAY;AACtB,QAAI,CAAC,YAAY;AACf,UAAI,KAAK,kBAAkB;AACzB,aAAK,SAAS,MAAM,UAAU;AAC9B,aAAK,mBAAmB;AAAA,MAC1B;AACA;AAAA,IACF;AAEA,SAAK,oBAAoB,UAAU;AACnC,SAAK,oBAAoBC,mBAAgB,YAAY,UAAU;AAE/D,UAAM,mBAAmB,WAAW,iBAAiB;AAAA,MACnD,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE;AAAA,IACzB;AACA,UAAM,YAAY,iBAAiB;AAAA,MACjC,CAAC,eACC,WAAW,iBAAiB,sBAC5B,WAAW,MAAM,aAAa;AAAA,IAClC;AACA,QAAI,WAAW;AAEb,iBAAW,YAAY,CAAC;AAAA,IAC1B;AACA,UAAM,YAAY,WAAW;AAE7B,SAAK,UAAU,SAAS;AAExB,UAAM,sBAAsB,CAAC;AAC7B,QAAI,kBAAkB;AACtB,aAAS,IAAI,GAAG,KAAK,iBAAiB,QAAQ,IAAI,IAAI,EAAE,GAAG;AACzD,YAAM,aAAa,iBAAiB,CAAC;AACrC,iBAAW,aAAa;AAExB,YAAM,QAAQ,WAAW;AACzB,YAAM,cAAc,MAAM,eAAe;AACzC,UACE,CAAC,OAAO,YAAY,SAAS,KAC5B,eAAe,WAAW,eAAe,aAC1C;AACA,cAAM,SAAS;AACf;AAAA,MACF;AAEA,YAAM,UAAU,MAAM,OAAO,YAAY,eAAe;AACxD,UAAI,CAAC,SAAS;AACZ;AAAA,MACF;AACA,UAAI,YAAY,iBAAiB;AAC/B,aAAK,UAAU,KAAK,OAAO;AAC3B,0BAAkB;AAAA,MACpB;AAEA,0BAAoB,KAAK,UAAU;AAAA,IACrC;AAEA,SAAK,UAAU,YAAY,mBAAmB;AAE9C,oBAAgB,KAAK,UAAU,KAAK,SAAS;AAE7C,SAAK,oBAAoBA,mBAAgB,aAAa,UAAU;AAEhE,QAAI,CAAC,KAAK,kBAAkB;AAC1B,WAAK,SAAS,MAAM,UAAU;AAC9B,WAAK,mBAAmB;AAAA,IAC1B;AAEA,SAAK,wBAAwB,UAAU;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,YAAY,aAAa;AACjC,QAAI,CAAC,WAAW,WAAW;AACzB;AAAA,IACF;AACA,aAAS,IAAI,YAAY,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AAChD,YAAM,aAAa,YAAY,CAAC;AAChC,YAAM,QAAQ,WAAW;AACzB,UAAI,MAAM,aAAa,GAAG;AACxB,cAAM,gBAAgB,YAAY,UAAU;AAAA,MAC9C;AAAA,IACF;AACA,gBAAY;AAAA,MAAQ,CAAC,eACnB,WAAW,MAAM,eAAe,UAAU;AAAA,IAC5C;AAAA,EACF;AACF;AAEA,IAAO,oBAAQ;;;ACtBf,SAAS,uBAAuB,OAAO;AACrC,MAAI,iBAAiB,eAAO;AAC1B,UAAM,eAAe,IAAI;AACzB;AAAA,EACF;AACA,MAAI,iBAAiB,eAAY;AAC/B,UAAM,UAAU,EAAE,QAAQ,sBAAsB;AAAA,EAClD;AACF;AAMA,SAAS,oBAAoB,OAAO,KAAK;AACvC,MAAI,iBAAiB,eAAO;AAC1B,UAAM,eAAe,GAAG;AACxB;AAAA,EACF;AACA,MAAI,iBAAiB,eAAY;AAC/B,UAAM,SAAS,MAAM,UAAU,EAAE,SAAS;AAC1C,aAAS,IAAI,GAAG,KAAK,OAAO,QAAQ,IAAI,IAAI,EAAE,GAAG;AAC/C,0BAAoB,OAAO,CAAC,GAAG,GAAG;AAAA,IACpC;AAAA,EACF;AACF;AAsDA,IAAM,MAAN,cAAkB,eAAW;AAAA;AAAA;AAAA;AAAA,EAI3B,YAAY,SAAS;AACnB,UAAM;AAEN,cAAU,WAAW,CAAC;AAKtB,SAAK;AAKL,SAAK;AAKL,SAAK;AAEL,UAAM,kBAAkB,sBAAsB,OAAO;AAMrD,SAAK,kBAAkB;AAMvB,SAAK,UAAU;AAGf,SAAK,2BAA2B,KAAK,mBAAmB,KAAK,IAAI;AAMjE,SAAK,mBACH,QAAQ,oBAAoB,SAAY,QAAQ,kBAAkB;AAMpE,SAAK,cACH,QAAQ,eAAe,SACnB,QAAQ,aACR;AAMN,SAAK;AAML,SAAK;AAKL,SAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AAMrD,SAAK,8BAA8B,OAAgB;AAMnD,SAAK,8BAA8B,OAAgB;AAMnD,SAAK,cAAc;AAMnB,SAAK,cAAc;AAOnB,SAAK,kBAAkB;AAMvB,SAAK,2BAA2B;AAMhC,SAAK,yBAAyB;AAM9B,SAAK,kCAAkC;AAMvC,SAAK,YAAY,SAAS,cAAc,KAAK;AAC7C,SAAK,UAAU,YACb,iBAAiB,kBAAkB,SAAS,cAAc;AAC5D,SAAK,UAAU,MAAM,WAAW;AAChC,SAAK,UAAU,MAAM,WAAW;AAChC,SAAK,UAAU,MAAM,QAAQ;AAC7B,SAAK,UAAU,MAAM,SAAS;AAM9B,SAAK,oBAAoB,SAAS,cAAc,KAAK;AACrD,SAAK,kBAAkB,MAAM,WAAW;AACxC,SAAK,kBAAkB,MAAM,SAAS;AACtC,SAAK,kBAAkB,MAAM,QAAQ;AACrC,SAAK,kBAAkB,MAAM,SAAS;AACtC,SAAK,kBAAkB,MAAM,gBAAgB;AAC7C,SAAK,kBAAkB,YAAY;AACnC,SAAK,UAAU,YAAY,KAAK,iBAAiB;AAMjD,SAAK,6BAA6B,SAAS,cAAc,KAAK;AAC9D,SAAK,2BAA2B,MAAM,WAAW;AACjD,SAAK,2BAA2B,MAAM,SAAS;AAC/C,SAAK,2BAA2B,MAAM,QAAQ;AAC9C,SAAK,2BAA2B,MAAM,SAAS;AAC/C,SAAK,2BAA2B,MAAM,gBAAgB;AACtD,SAAK,2BAA2B,YAAY;AAC5C,SAAK,UAAU,YAAY,KAAK,0BAA0B;AAM1D,SAAK,0BAA0B;AAM/B,SAAK,iBAAiB,QAAQ;AAM9B,SAAK,uBAAuB,gBAAgB;AAM5C,SAAK,2BAA2B;AAMhC,SAAK,iBAAiB;AAMtB,SAAK,kBAAkB,IAAI,eAAe,MAAM,KAAK,WAAW,CAAC;AAMjE,SAAK,WAAW,gBAAgB,YAAYC,UAAgB;AAM5D,SAAK,eACH,gBAAgB,gBAChB,SAAoB;AAAA,MAClB,aAAa;AAAA,IACf,CAAC;AAMH,SAAK,YAAY,gBAAgB;AAOjC,SAAK,kBAAkB,CAAC;AAMxB,SAAK,YAAY;AAMjB,SAAK,uBAAuB,CAAC;AAM7B,SAAK,aAAa,IAAI;AAAA,MACpB,KAAK,gBAAgB,KAAK,IAAI;AAAA,MAC9B,KAAK,kBAAkB,KAAK,IAAI;AAAA,IAClC;AAEA,SAAK;AAAA,MACH,oBAAY;AAAA,MACZ,KAAK;AAAA,IACP;AACA,SAAK,kBAAkB,oBAAY,MAAM,KAAK,kBAAkB;AAChE,SAAK,kBAAkB,oBAAY,MAAM,KAAK,kBAAkB;AAChE,SAAK,kBAAkB,oBAAY,QAAQ,KAAK,oBAAoB;AAIpE,SAAK,cAAc,gBAAgB,MAAM;AAEzC,UAAM,MAAM;AACZ,QAAI,QAAQ,QAAQ,EAAE,QAAQ,gBAAgB,eAAO;AACnD,cAAQ,KAAK,KAAK,SAAU,aAAa;AACvC,YAAI,QAAQ,IAAI,aAAK,WAAW,CAAC;AAAA,MACnC,CAAC;AAAA,IACH;AAEA,SAAK,SAAS;AAAA,MACZ,4BAAoB;AAAA;AAAA;AAAA;AAAA,MAIpB,CAAC,UAAU;AACT,cAAM,QAAQ,OAAO,IAAI;AAAA,MAC3B;AAAA,IACF;AAEA,SAAK,SAAS;AAAA,MACZ,4BAAoB;AAAA;AAAA;AAAA;AAAA,MAIpB,CAAC,UAAU;AACT,cAAM,QAAQ,OAAO,IAAI;AAAA,MAC3B;AAAA,IACF;AAEA,SAAK,aAAa;AAAA,MAChB,4BAAoB;AAAA;AAAA;AAAA;AAAA,MAIpB,CAAC,UAAU;AACT,cAAM,QAAQ,OAAO,IAAI;AAAA,MAC3B;AAAA,IACF;AAEA,SAAK,aAAa;AAAA,MAChB,4BAAoB;AAAA;AAAA;AAAA;AAAA,MAIpB,CAAC,UAAU;AACT,cAAM,QAAQ,OAAO,IAAI;AAAA,MAC3B;AAAA,IACF;AAEA,SAAK,UAAU;AAAA,MACb,4BAAoB;AAAA;AAAA;AAAA;AAAA,MAIpB,CAAC,UAAU;AACT,aAAK,oBAAoB,MAAM,OAAO;AAAA,MACxC;AAAA,IACF;AAEA,SAAK,UAAU;AAAA,MACb,4BAAoB;AAAA;AAAA;AAAA;AAAA,MAIpB,CAAC,UAAU;AACT,cAAM,KAAK,MAAM,QAAQ,MAAM;AAC/B,YAAI,OAAO,QAAW;AACpB,iBAAO,KAAK,gBAAgB,GAAG,SAAS,CAAC;AAAA,QAC3C;AACA,cAAM,QAAQ,OAAO,IAAI;AAAA,MAC3B;AAAA,IACF;AAEA,SAAK,SAAS;AAAA;AAAA;AAAA;AAAA,MAIZ,CAAC,YAAY;AACX,gBAAQ,OAAO,IAAI;AAAA,MACrB;AAAA,IACF;AAEA,SAAK,aAAa;AAAA;AAAA;AAAA;AAAA,MAIhB,CAAC,gBAAgB;AACf,oBAAY,OAAO,IAAI;AAAA,MACzB;AAAA,IACF;AAEA,SAAK,UAAU,QAAQ,KAAK,oBAAoB,KAAK,IAAI,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,SAAS;AAClB,SAAK,YAAY,EAAE,KAAK,OAAO;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,eAAe,aAAa;AAC1B,SAAK,gBAAgB,EAAE,KAAK,WAAW;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAS,OAAO;AACd,UAAM,SAAS,KAAK,cAAc,EAAE,UAAU;AAC9C,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB,OAAO;AACrB,wBAAoB,MAAM,OAAO,IAAI;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,SAAS;AAClB,SAAK,YAAY,EAAE,KAAK,OAAO;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,SAAS;AAC3B,UAAM,KAAK,QAAQ,MAAM;AACzB,QAAI,OAAO,QAAW;AACpB,WAAK,gBAAgB,GAAG,SAAS,CAAC,IAAI;AAAA,IACxC;AACA,YAAQ,OAAO,IAAI;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB;AAChB,SAAK,SAAS,MAAM;AACpB,SAAK,aAAa,MAAM;AACxB,SAAK,UAAU,MAAM;AACrB,SAAK,gBAAgB,WAAW;AAChC,SAAK,UAAU,IAAI;AACnB,UAAM,gBAAgB;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,sBAAsB,OAAO,UAAU,SAAS;AAC9C,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK,WAAW;AACxC;AAAA,IACF;AACA,UAAM,aAAa,KAAK,+BAA+B,KAAK;AAC5D,cAAU,YAAY,SAAY,UAAU,CAAC;AAC7C,UAAM,eACJ,QAAQ,iBAAiB,SAAY,QAAQ,eAAe;AAC9D,UAAM,cACJ,QAAQ,gBAAgB,SAAY,QAAQ,cAAc;AAC5D,UAAM,eAAe,QAAQ,iBAAiB;AAC9C,WAAO,KAAK,UAAU;AAAA,MACpB;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,mBAAmB,OAAO,SAAS;AACjC,UAAM,WAAW,CAAC;AAClB,SAAK;AAAA,MACH;AAAA,MACA,SAAU,SAAS;AACjB,iBAAS,KAAK,OAAO;AAAA,MACvB;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe;AACb,UAAM,SAAS,CAAC;AAChB,aAAS,cAAc,YAAY;AACjC,iBAAW,QAAQ,SAAU,OAAO;AAClC,YAAI,iBAAiB,eAAY;AAC/B,wBAAc,MAAM,UAAU,CAAC;AAAA,QACjC,OAAO;AACL,iBAAO,KAAK,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AACA,kBAAc,KAAK,UAAU,CAAC;AAC9B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,kBAAkB,OAAO,SAAS;AAChC,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK,WAAW;AACxC,aAAO;AAAA,IACT;AACA,UAAM,aAAa,KAAK,+BAA+B,KAAK;AAC5D,cAAU,YAAY,SAAY,UAAU,CAAC;AAC7C,UAAM,cACJ,QAAQ,gBAAgB,SAAY,QAAQ,cAAc;AAC5D,UAAM,eACJ,QAAQ,iBAAiB,SAAY,QAAQ,eAAe;AAC9D,UAAM,eAAe,QAAQ,iBAAiB;AAC9C,WAAO,KAAK,UAAU;AAAA,MACpB;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,OAAO;AACxB,WAAO,KAAK,uBAAuB,KAAK,cAAc,KAAK,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,2BAA2B,OAAO;AAChC,WAAO,KAAK,+BAA+B,KAAK,cAAc,KAAK,CAAC;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,OAAO;AACnB,UAAM,WAAW,KAAK;AACtB,UAAM,mBAAmB,SAAS,sBAAsB;AACxD,UAAM,eAAe,KAAK,QAAQ;AAClC,UAAM,SAAS,iBAAiB,QAAQ,aAAa,CAAC;AACtD,UAAM,SAAS,iBAAiB,SAAS,aAAa,CAAC;AACvD,UAAM;AAAA;AAAA,MAEJ,oBAAoB;AAAA;AAAA,QACW,MAAO,eAAe,CAAC;AAAA;AAAA;AAAA,QACvB;AAAA;AAAA;AAEjC,WAAO;AAAA,OACJ,cAAc,UAAU,iBAAiB,QAAQ;AAAA,OACjD,cAAc,UAAU,iBAAiB,OAAO;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,YAAY;AACV;AAAA;AAAA,MACE,KAAK,IAAI,oBAAY,MAAM;AAAA;AAAA,EAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,OAAO;AAC5B,WAAO;AAAA,MACL,KAAK,+BAA+B,KAAK;AAAA,MACzC,KAAK,QAAQ,EAAE,cAAc;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,+BAA+B,OAAO;AACpC,UAAM,aAAa,KAAK;AACxB,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AACA,WAAO,MAAe,WAAW,4BAA4B,MAAM,MAAM,CAAC;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAe,IAAI;AACjB,UAAM,UAAU,KAAK,gBAAgB,GAAG,SAAS,CAAC;AAClD,WAAO,YAAY,SAAY,UAAU;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,kBAAkB;AAChB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB;AACd;AAAA;AAAA,MAAkC,KAAK,IAAI,oBAAY,UAAU;AAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,QAAQ;AAChB,UAAM,QAAQ,KAAK,cAAc;AACjC,QAAI,kBAAkB,oBAAY;AAChC,YAAM,UAAU,MAAM;AACtB;AAAA,IACF;AAEA,UAAM,aAAa,MAAM,UAAU;AACnC,eAAW,MAAM;AACjB,eAAW,OAAO,MAAM;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY;AACV,UAAM,SAAS,KAAK,cAAc,EAAE,UAAU;AAC9C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB;AACrB,UAAM,mBAAmB,KAAK,cAAc,EAAE,oBAAoB;AAClE,aAAS,IAAI,GAAG,KAAK,iBAAiB,QAAQ,IAAI,IAAI,EAAE,GAAG;AACzD,YAAM,QAAQ,iBAAiB,CAAC;AAChC,UAAI,CAAC,MAAM,SAAS;AAClB;AAAA,MACF;AACA,YAAM,WAAW,MAAM,MAAM,YAAY;AACzC,UAAI,YAAY,CAAC,SAAS,OAAO;AAC/B,eAAO;AAAA,MACT;AACA,YAAM,SAAS,MAAM,MAAM,UAAU;AACrC,UAAI,UAAU,OAAO,SAAS;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,YAAY;AACjC,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,KAAK,QAAQ,EAAE,cAAc;AAAA,IAC/B;AACA,WAAO,KAAK,+BAA+B,cAAc;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,+BAA+B,YAAY;AACzC,UAAM,aAAa,KAAK;AACxB,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,WAAW;AAAA,MACX,WAAW,MAAM,GAAG,CAAC;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU;AACR;AAAA;AAAA,MACE,KAAK,IAAI,oBAAY,IAAI;AAAA;AAAA,EAE7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU;AACR;AAAA;AAAA,MAA4B,KAAK,IAAI,oBAAY,IAAI;AAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,+BAA+B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;AACjB,UAAM,gBAAgB,KAAK,iBAAiB;AAC5C,WAAO,gBAAgB,cAAc,gBAAgB;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,gBAAgB,MAAM,eAAe,YAAY,gBAAgB;AAC/D,WAAO;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,cAAc,MAAM;AACrC,WAAO,QAAQ,aAAa;AAC5B,UAAM,kBAAkB,IAAI,wBAAgB,MAAM,MAAM,YAAY;AACpE,SAAK,sBAAsB,eAAe;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,iBAAiB;AACrC,QAAI,CAAC,KAAK,aAAa;AAGrB;AAAA,IACF;AACA,UAAM;AAAA;AAAA,MACJ,gBAAgB;AAAA;AAElB,UAAM,YAAY,cAAc;AAChC,QACE,cAAcC,mBAAiB,eAC/B,cAAc,kBAAU,SACxB,cAAc,kBAAU,SACxB;AACA,YAAM,MAAM,KAAK,iBAAiB;AAClC,YAAM,WAAW,KAAK,UAAU,cAC5B,KAAK,UAAU,YAAY,IAC3B;AACJ,YAAM;AAAA;AAAA,QAA8B,cAAc;AAAA;AAElD,YAAM,aACJ,oBAAoB,aAChB,SAAS,SAAS,SAChB,SAAS,KAAK,gBACd,WACF,aAAa,MACX,IAAI,kBACJ;AACR;AAAA;AAAA;AAAA,QAGE,KAAK,2BAA2B,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA,QAK/C,CAAC,WAAW,SAAS,MAAM;AAAA,QAC3B;AACA;AAAA,MACF;AAAA,IACF;AACA,oBAAgB,aAAa,KAAK;AAClC,QAAI,KAAK,cAAc,eAAe,MAAM,OAAO;AACjD,YAAM,oBAAoB,KAAK,gBAAgB,EAAE,SAAS,EAAE,MAAM;AAClE,eAAS,IAAI,kBAAkB,SAAS,GAAG,KAAK,GAAG,KAAK;AACtD,cAAM,cAAc,kBAAkB,CAAC;AACvC,YACE,YAAY,OAAO,MAAM,QACzB,CAAC,YAAY,UAAU,KACvB,CAAC,KAAK,iBAAiB,GACvB;AACA;AAAA,QACF;AACA,cAAM,OAAO,YAAY,YAAY,eAAe;AACpD,YAAI,CAAC,QAAQ,gBAAgB,oBAAoB;AAC/C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;AACjB,UAAM,aAAa,KAAK;AAWxB,UAAM,YAAY,KAAK;AACvB,QAAI,CAAC,UAAU,QAAQ,GAAG;AACxB,UAAI,kBAAkB,KAAK;AAC3B,UAAI,cAAc;AAClB,UAAI,YAAY;AACd,cAAM,QAAQ,WAAW;AACzB,YAAI,MAAM,iBAAS,SAAS,KAAK,MAAM,iBAAS,WAAW,GAAG;AAC5D,gBAAM,mBAAmB,KAAK,IAAI,IAAI,WAAW,OAAO;AACxD,4BAAkB,mBAAmB,IAAI;AACzC,wBAAc,mBAAmB,IAAI;AAAA,QACvC;AAAA,MACF;AACA,UAAI,UAAU,gBAAgB,IAAI,iBAAiB;AACjD,kBAAU,aAAa;AACvB,kBAAU,cAAc,iBAAiB,WAAW;AAAA,MACtD;AAAA,IACF;AAEA,QAAI,cAAc,KAAK,aAAa,CAAC,WAAW,SAAS;AACvD,UAAI,KAAK,iBAAiB;AACxB,YAAI,KAAK,YAAYA,mBAAgB,cAAc,GAAG;AACpD,eAAK,UAAU;AAAA,YACbA,mBAAgB;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AACA,YAAI,KAAK,YAAY,OAAO;AAC1B,eAAK,UAAU;AACf,eAAK;AAAA,YACH,IAAI,iBAAS,qBAAa,SAAS,MAAM,UAAU;AAAA,UACrD;AAAA,QACF;AAAA,MACF,WAAW,KAAK,YAAY,MAAM;AAChC,aAAK,UAAU;AACf,aAAK;AAAA,UACH,IAAI,iBAAS,qBAAa,WAAW,MAAM,UAAU;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,sBAAsB,KAAK;AACjC,QAAI,YAAY;AACd,eAAS,IAAI,GAAG,KAAK,oBAAoB,QAAQ,IAAI,IAAI,EAAE,GAAG;AAC5D,4BAAoB,CAAC,EAAE,MAAM,UAAU;AAAA,MACzC;AAAA,IACF;AACA,wBAAoB,SAAS;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB;AACnB,QAAI,KAAK,QAAQ,KAAK,CAAC,KAAK,QAAQ,EAAE,aAAa,GAAG;AACpD,WAAK,QAAQ,EAAE,mBAAmB,CAAC;AAAA,IACrC;AAEA,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB;AACrB,QAAI,KAAK,yBAAyB;AAChC,eAAS,IAAI,GAAG,KAAK,KAAK,yBAAyB,QAAQ,IAAI,IAAI,EAAE,GAAG;AACtE,sBAAc,KAAK,yBAAyB,CAAC,CAAC;AAAA,MAChD;AACA,WAAK,2BAA2B;AAChC,WAAK,UAAU;AAAA,QACb,kBAAU;AAAA,QACV,KAAK;AAAA,MACP;AACA,WAAK,UAAU;AAAA,QACb,kBAAU;AAAA,QACV,KAAK;AAAA,MACP;AACA,WAAK,wBAAwB,QAAQ;AACrC,WAAK,0BAA0B;AAC/B,WAAK,UAAU,OAAO;AAAA,IACxB;AAEA,QAAI,KAAK,gBAAgB;AACvB,WAAK,gBAAgB,UAAU,KAAK,cAAc;AAClD,YAAM,WAAW,KAAK,eAAe,YAAY;AACjD,UAAI,oBAAoB,YAAY;AAClC,aAAK,gBAAgB,UAAU,SAAS,IAAI;AAAA,MAC9C;AACA,WAAK,QAAQ,MAAS;AAAA,IACxB;AAOA,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,gBACJ,OAAO,WAAW,WAAW,SAAS,eAAe,MAAM,IAAI;AACjE,SAAK,iBAAiB;AACtB,QAAI,CAAC,eAAe;AAClB,UAAI,KAAK,WAAW;AAClB,qBAAa,KAAK,wBAAwB;AAC1C,aAAK,2BAA2B;AAChC,aAAK,qBAAqB,SAAS;AACnC,aAAK,UAAU,QAAQ;AACvB,aAAK,YAAY;AAAA,MACnB;AACA,UAAI,KAAK,oBAAoB;AAC3B,6BAAqB,KAAK,kBAAkB;AAC5C,aAAK,qBAAqB;AAAA,MAC5B;AAAA,IACF,OAAO;AACL,oBAAc,YAAY,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK,WAAW;AACnB,aAAK,YAAY,IAAI,kBAAqB,IAAI;AAAA,MAChD;AAEA,WAAK,0BAA0B,IAAI;AAAA,QACjC;AAAA,QACA,KAAK;AAAA,MACP;AACA,iBAAW,OAAO,6BAAqB;AACrC,aAAK,wBAAwB;AAAA,UAC3B,4BAAoB,GAAG;AAAA,UACvB,KAAK,sBAAsB,KAAK,IAAI;AAAA,QACtC;AAAA,MACF;AACA,WAAK,UAAU;AAAA,QACb,kBAAU;AAAA,QACV,KAAK;AAAA,QACL;AAAA,MACF;AACA,WAAK,UAAU;AAAA,QACb,kBAAU;AAAA,QACV,KAAK;AAAA,QACL,0BAA0B,EAAC,SAAS,MAAK,IAAI;AAAA,MAC/C;AAEA,UAAI;AACJ,UAAI,CAAC,KAAK,sBAAsB;AAE9B,cAAM,aAAa,cAAc,YAAY;AAC7C,cAAM,kBACJ,sBAAsB,aAAa,WAAW,OAAO;AACvD,8BAAsB;AAAA,MACxB,OAAO;AACL,8BAAsB,KAAK;AAAA,MAC7B;AAEA,WAAK,2BAA2B;AAAA,QAC9B;AAAA,UACE;AAAA,UACA,kBAAU;AAAA,UACV,KAAK;AAAA,UACL;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UACA,kBAAU;AAAA,UACV,KAAK;AAAA,UACL;AAAA,QACF;AAAA,MACF;AACA,YAAM,WAAW,cAAc,YAAY;AAC3C,UAAI,oBAAoB,YAAY;AAClC,aAAK,gBAAgB,QAAQ,SAAS,IAAI;AAAA,MAC5C;AACA,WAAK,gBAAgB,QAAQ,aAAa;AAAA,IAC5C;AAEA,SAAK,WAAW;AAAA,EAGlB;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB;AAClB,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,6BAA6B;AAC3B,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB;AACnB,QAAI,KAAK,0BAA0B;AACjC,oBAAc,KAAK,wBAAwB;AAC3C,WAAK,2BAA2B;AAAA,IAClC;AACA,QAAI,KAAK,wBAAwB;AAC/B,oBAAc,KAAK,sBAAsB;AACzC,WAAK,yBAAyB;AAAA,IAChC;AACA,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,MAAM;AACR,WAAK,oBAAoB,KAAK,QAAQ,CAAC;AAEvC,WAAK,2BAA2B;AAAA,QAC9B;AAAA,QACA,wBAAgB;AAAA,QAChB,KAAK;AAAA,QACL;AAAA,MACF;AACA,WAAK,yBAAyB;AAAA,QAC5B;AAAA,QACA,kBAAU;AAAA,QACV,KAAK;AAAA,QACL;AAAA,MACF;AAEA,WAAK,mBAAmB,CAAC;AAAA,IAC3B;AACA,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,2BAA2B;AACzB,QAAI,KAAK,iCAAiC;AACxC,WAAK,gCAAgC,QAAQ,aAAa;AAC1D,WAAK,kCAAkC;AAAA,IACzC;AACA,UAAM,aAAa,KAAK,cAAc;AACtC,QAAI,YAAY;AACd,WAAK,gBAAgB,IAAI,WAAW,YAAY,UAAU,CAAC;AAC3D,WAAK,kCAAkC;AAAA,QACrC,OAAO,YAAY,wBAAgB,gBAAgB,KAAK,QAAQ,IAAI;AAAA,QACpE,OAAO,YAAY,kBAAU,QAAQ,KAAK,QAAQ,IAAI;AAAA,QACtD,OAAO,YAAY,YAAY,KAAK,iBAAiB,IAAI;AAAA,QACzD,OAAO,YAAY,eAAe,KAAK,oBAAoB,IAAI;AAAA,MACjE;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa;AACX,WAAO,CAAC,CAAC,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AAChB,SAAK,qBAAqB;AAC1B,SAAK,aAAa,KAAK,IAAI,CAAC;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa;AACX,QAAI,KAAK,oBAAoB;AAC3B,2BAAqB,KAAK,kBAAkB;AAAA,IAC9C;AACA,SAAK,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa;AACX,UAAM,cAAc,KAAK,cAAc,EAAE,oBAAoB;AAC7D,aAAS,IAAI,GAAG,KAAK,YAAY,QAAQ,IAAI,IAAI,EAAE,GAAG;AACpD,YAAM,QAAQ,YAAY,CAAC,EAAE;AAC7B,UAAI,MAAM,YAAY,GAAG;AACvB,cAAM,YAAY,EAAE,mBAAmB;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS;AACP,QAAI,KAAK,aAAa,KAAK,uBAAuB,QAAW;AAC3D,WAAK,qBAAqB,sBAAsB,KAAK,eAAe;AAAA,IACtE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,SAAS;AACrB,WAAO,KAAK,YAAY,EAAE,OAAO,OAAO;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAkB,aAAa;AAC7B,WAAO,KAAK,gBAAgB,EAAE,OAAO,WAAW;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,OAAO;AACjB,UAAM,SAAS,KAAK,cAAc,EAAE,UAAU;AAC9C,WAAO,OAAO,OAAO,KAAK;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,OAAO;AACxB,2BAAuB,MAAM,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,SAAS;AACrB,WAAO,KAAK,YAAY,EAAE,OAAO,OAAO;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,MAAM;AACjB,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,qBAAqB,KAAK;AAEhC,QAAI,aAAa;AACjB,QAAI,SAAS,UAAa,QAAQ,IAAI,KAAK,QAAQ,KAAK,MAAM,GAAG;AAC/D,YAAM,YAAY,KAAK;AAAA,QACrB,KAAK,cAAc,KAAK,YAAY,YAAY;AAAA,MAClD;AACA,YAAM,YAAY,KAAK,SAAS;AAChC,mBAAa;AAAA,QACX,SAAS;AAAA,QACT,4BAA4B,KAAK;AAAA,QACjC,WAAW;AAAA,QACX,QAAQ;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU;AAAA,UACV;AAAA,QACF;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,YAAY;AAAA,QACZ,kBAAkB,KAAK,cAAc,EAAE,oBAAoB;AAAA,QAC3D,YAAY,KAAK;AAAA,QACjB,4BAA4B,KAAK;AAAA,QACjC,qBAAqB,CAAC;AAAA,QACtB;AAAA,QACA,WAAW,KAAK;AAAA,QAChB;AAAA,QACA,WAAW,CAAC;AAAA,QACZ;AAAA,QACA;AAAA,QACA,aAAa,CAAC;AAAA,QACd,OAAO,OAAO,IAAI;AAAA,QAClB,eAAe,CAAC;AAAA,MAClB;AACA,UAAI,UAAU,cAAc,UAAU,gBAAgB;AACpD,cAAM,WAAW,MAAM,UAAU,YAAY,IACzC,UAAU,WACV,UAAU;AAEd,mBAAW,aAAa;AAAA,UACtB,UAAU;AAAA,UACV,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,SAAK,cAAc;AACnB,SAAK,UAAU,YAAY,UAAU;AAErC,QAAI,YAAY;AACd,UAAI,WAAW,SAAS;AACtB,aAAK,OAAO;AAAA,MACd;AACA,YAAM,UAAU,KAAK;AAAA,QACnB,KAAK;AAAA,QACL,WAAW;AAAA,MACb;AAEA,UAAI,oBAAoB;AACtB,cAAM,YACJ,CAAC,KAAK,mBACL,CAAC,QAAQ,KAAK,eAAe,KAC5B,CAACC,QAAa,WAAW,QAAQ,KAAK,eAAe;AACzD,YAAI,WAAW;AACb,eAAK;AAAA,YACH,IAAI,iBAAS,qBAAa,WAAW,MAAM,kBAAkB;AAAA,UAC/D;AACA,eAAK,kBAAkB,oBAAoB,KAAK,eAAe;AAAA,QACjE;AAAA,MACF;AAEA,YAAM,OACJ,KAAK,mBACL,CAAC,WAAW,UAAU,iBAAS,SAAS,KACxC,CAAC,WAAW,UAAU,iBAAS,WAAW,KAC1C,CAACA,QAAa,WAAW,QAAQ,KAAK,eAAe;AAEvD,UAAI,MAAM;AACR,aAAK;AAAA,UACH,IAAI,iBAAS,qBAAa,SAAS,MAAM,UAAU;AAAA,QACrD;AACA,cAAM,WAAW,QAAQ,KAAK,eAAe;AAAA,MAC/C;AAAA,IACF;AAEA,SAAK,cAAc,IAAI,iBAAS,qBAAa,YAAY,MAAM,UAAU,CAAC;AAE1E,SAAK,mBACF,KAAK,YAAY,qBAAa,SAAS,KACtC,KAAK,YAAY,qBAAa,OAAO,KACrC,KAAK,YAAYD,mBAAgB,cAAc,MACjD,CAAC,KAAK,WAAW,gBAAgB,KACjC,CAAC,KAAK,WAAW,SAAS,KAC1B,CAAC,KAAK,qBAAqB;AAE7B,QAAI,CAAC,KAAK,0BAA0B;AAClC,WAAK,2BAA2B,WAAW,MAAM;AAC/C,aAAK,2BAA2B;AAChC,aAAK,iBAAiB;AAAA,MACxB,GAAG,CAAC;AAAA,IACN;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,YAAY;AACxB,UAAM,gBAAgB,KAAK,cAAc;AACzC,QAAI,eAAe;AACjB,WAAK,mBAAmB,IAAI,WAAW,eAAe,aAAa,CAAC;AAAA,IACtE;AACA,SAAK,IAAI,oBAAY,YAAY,UAAU;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,MAAM;AACZ,SAAK,IAAI,oBAAY,MAAM,IAAI;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,UAAU,QAAQ;AAChB,SAAK,IAAI,oBAAY,QAAQ,MAAM;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,QAAQ,MAAM;AACZ,QAAI,CAAC,QAAQ,gBAAgB,cAAM;AACjC,WAAK,IAAI,oBAAY,MAAM,IAAI;AAC/B;AAAA,IACF;AACA,SAAK,IAAI,oBAAY,MAAM,IAAI,aAAK,CAAC;AAErC,UAAM,MAAM;AACZ,SAAK,KAAK,SAAU,aAAa;AAC/B,UAAI,QAAQ,IAAI,aAAK,WAAW,CAAC;AAAA,IACnC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa;AACX,UAAM,gBAAgB,KAAK,iBAAiB;AAE5C,QAAI,OAAO;AACX,QAAI,eAAe;AACjB,YAAM,gBAAgB,iBAAiB,aAAa;AACpD,YAAM,QACJ,cAAc,cACd,WAAW,cAAc,iBAAiB,CAAC,IAC3C,WAAW,cAAc,aAAa,CAAC,IACvC,WAAW,cAAc,cAAc,CAAC,IACxC,WAAW,cAAc,kBAAkB,CAAC;AAC9C,YAAM,SACJ,cAAc,eACd,WAAW,cAAc,gBAAgB,CAAC,IAC1C,WAAW,cAAc,YAAY,CAAC,IACtC,WAAW,cAAc,eAAe,CAAC,IACzC,WAAW,cAAc,mBAAmB,CAAC;AAC/C,UAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,MAAM,GAAG;AACnC,eAAO,CAAC,KAAK,IAAI,GAAG,KAAK,GAAG,KAAK,IAAI,GAAG,MAAM,CAAC;AAC/C,YACE,CAAC,QAAQ,IAAI,KACb,CAAC,EACC,cAAc,eACd,cAAc,gBACd,cAAc,eAAe,EAAE,SAEjC;AACA;AAAA,YACE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,UAAU,KAAK,QAAQ;AAC7B,QAAI,SAAS,CAAC,WAAW,CAAC,OAAO,MAAM,OAAO,IAAI;AAChD,WAAK,QAAQ,IAAI;AACjB,WAAK,oBAAoB,IAAI;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,MAAM;AACxB,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,MAAM;AACR,WAAK,gBAAgB,IAAI;AAAA,IAC3B;AAAA,EACF;AACF;AAMA,SAAS,sBAAsB,SAAS;AAItC,MAAI,sBAAsB;AAC1B,MAAI,QAAQ,wBAAwB,QAAW;AAC7C,0BACE,OAAO,QAAQ,wBAAwB,WACnC,SAAS,eAAe,QAAQ,mBAAmB,IACnD,QAAQ;AAAA,EAChB;AAKA,QAAM,SAAS,CAAC;AAEhB,QAAM,aACJ,QAAQ,UACR;AAAA,EAA0B,QAAQ,OAAQ,cAAe;AAAA;AAAA,IAC1B,QAAQ;AAAA,MACnC,IAAI,cAAW;AAAA,IACb;AAAA;AAAA,MAEI,QAAQ;AAAA;AAAA,EAEd,CAAC;AACP,SAAO,oBAAY,UAAU,IAAI;AAEjC,SAAO,oBAAY,MAAM,IAAI,QAAQ;AAErC,SAAO,oBAAY,IAAI,IACrB,QAAQ,gBAAgB,eAAO,QAAQ,OAAO,IAAI,aAAK;AAGzD,MAAI;AACJ,MAAI,QAAQ,aAAa,QAAW;AAClC,QAAI,MAAM,QAAQ,QAAQ,QAAQ,GAAG;AACnC,iBAAW,IAAI,mBAAW,QAAQ,SAAS,MAAM,CAAC;AAAA,IACpD,OAAO;AACL;AAAA,QACE;AAAA,QAA0B,QAAQ,SAAU,aAAc;AAAA,QAC1D;AAAA,MACF;AACA,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF;AAGA,MAAI;AACJ,MAAI,QAAQ,iBAAiB,QAAW;AACtC,QAAI,MAAM,QAAQ,QAAQ,YAAY,GAAG;AACvC,qBAAe,IAAI,mBAAW,QAAQ,aAAa,MAAM,CAAC;AAAA,IAC5D,OAAO;AACL;AAAA,QACE;AAAA,QAA0B,QAAQ,aAAc,aAC9C;AAAA,QACF;AAAA,MACF;AACA,qBAAe,QAAQ;AAAA,IACzB;AAAA,EACF;AAGA,MAAI;AACJ,MAAI,QAAQ,aAAa,QAAW;AAClC,QAAI,MAAM,QAAQ,QAAQ,QAAQ,GAAG;AACnC,iBAAW,IAAI,mBAAW,QAAQ,SAAS,MAAM,CAAC;AAAA,IACpD,OAAO;AACL;AAAA,QACE;AAAA,QAA0B,QAAQ,SAAU,aAAc;AAAA,QAC1D;AAAA,MACF;AACA,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF,OAAO;AACL,eAAW,IAAI,mBAAW;AAAA,EAC5B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AACA,IAAOE,eAAQ;;;AC9vDf,IAAMC,YAAW;AAAA,EACf,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,aAAa;AACf;AAmCA,IAAM,UAAN,cAAsB,eAAW;AAAA;AAAA;AAAA;AAAA,EAI/B,YAAY,SAAS;AACnB,UAAM;AAKN,SAAK;AAKL,SAAK;AAKL,SAAK;AAML,SAAK,UAAU;AAMf,SAAK,KAAK,QAAQ;AAMlB,SAAK,cACH,QAAQ,gBAAgB,SAAY,QAAQ,cAAc;AAM5D,SAAK,YAAY,QAAQ,cAAc,SAAY,QAAQ,YAAY;AAMvE,SAAK,UAAU,SAAS,cAAc,KAAK;AAC3C,SAAK,QAAQ,YACX,QAAQ,cAAc,SAClB,QAAQ,YACR,0BAA0B;AAChC,SAAK,QAAQ,MAAM,WAAW;AAC9B,SAAK,QAAQ,MAAM,gBAAgB;AAMnC,SAAK,UAAU,QAAQ,YAAY,OAAO,CAAC,IAAI,QAAQ,WAAW;AAOlE,SAAK,WAAW;AAAA,MACd,YAAY;AAAA,MACZ,SAAS;AAAA,IACX;AAMA,SAAK,2BAA2B;AAEhC,SAAK,kBAAkBA,UAAS,SAAS,KAAK,oBAAoB;AAClE,SAAK,kBAAkBA,UAAS,KAAK,KAAK,gBAAgB;AAC1D,SAAK,kBAAkBA,UAAS,QAAQ,KAAK,mBAAmB;AAChE,SAAK,kBAAkBA,UAAS,UAAU,KAAK,qBAAqB;AACpE,SAAK,kBAAkBA,UAAS,aAAa,KAAK,wBAAwB;AAE1E,QAAI,QAAQ,YAAY,QAAW;AACjC,WAAK,WAAW,QAAQ,OAAO;AAAA,IACjC;AAEA,SAAK,UAAU,QAAQ,WAAW,SAAY,QAAQ,SAAS,CAAC,GAAG,CAAC,CAAC;AAErE,SAAK,eAAe,QAAQ,eAAe,UAAU;AAErD,QAAI,QAAQ,aAAa,QAAW;AAClC,WAAK,YAAY,QAAQ,QAAQ;AAAA,IACnC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa;AACX;AAAA;AAAA,MAA6C,KAAK,IAAIA,UAAS,OAAO;AAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ;AACN,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAS;AACP;AAAA;AAAA,MACE,KAAK,IAAIA,UAAS,GAAG,KAAK;AAAA;AAAA,EAE9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY;AACV;AAAA;AAAA,MAAqC,KAAK,IAAIA,UAAS,MAAM;AAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc;AACZ;AAAA;AAAA,MACE,KAAK,IAAIA,UAAS,QAAQ;AAAA;AAAA,EAE9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB;AACf;AAAA;AAAA,MAAmC,KAAK,IAAIA,UAAS,WAAW;AAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB;AACrB,mBAAe,KAAK,OAAO;AAC3B,UAAM,UAAU,KAAK,WAAW;AAChC,QAAI,SAAS;AACX,WAAK,QAAQ,YAAY,OAAO;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;AAnSrB;AAoSI,QAAI,KAAK,0BAA0B;AACjC,iBAAK,YAAL,mBAAc;AACd,oBAAc,KAAK,wBAAwB;AAC3C,WAAK,2BAA2B;AAAA,IAClC;AACA,UAAM,MAAM,KAAK,OAAO;AACxB,QAAI,KAAK;AACP,WAAK,2BAA2B;AAAA,QAC9B;AAAA,QACA,qBAAa;AAAA,QACb,KAAK;AAAA,QACL;AAAA,MACF;AACA,WAAK,oBAAoB;AACzB,YAAM,YAAY,KAAK,YACnB,IAAI,6BAA6B,IACjC,IAAI,oBAAoB;AAC5B,UAAI,KAAK,aAAa;AACpB,kBAAU,aAAa,KAAK,SAAS,UAAU,WAAW,CAAC,KAAK,IAAI;AAAA,MACtE,OAAO;AACL,kBAAU,YAAY,KAAK,OAAO;AAAA,MACpC;AACA,WAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS;AACP,SAAK,oBAAoB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB;AACpB,SAAK,oBAAoB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB;AACtB,SAAK,oBAAoB;AACzB,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,2BAA2B;AACzB,SAAK,oBAAoB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,SAAS;AAClB,SAAK,IAAIA,UAAS,SAAS,OAAO;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,KAAK;AACV,SAAK,IAAIA,UAAS,KAAK,GAAG;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,QAAQ;AAChB,SAAK,IAAIA,UAAS,QAAQ,MAAM;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAY,UAAU;AACpB,SAAK,IAAIA,UAAS,UAAU,QAAQ;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB;AACf,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,KAAK,OAAO;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,oBAAoB;AAC9B,UAAM,MAAM,KAAK,OAAO;AAExB,QAAI,CAAC,OAAO,CAAC,IAAI,iBAAiB,KAAK,CAAC,KAAK,IAAIA,UAAS,QAAQ,GAAG;AACnE;AAAA,IACF;AAEA,UAAM,UAAU,KAAK,QAAQ,IAAI,iBAAiB,GAAG,IAAI,QAAQ,CAAC;AAClE,UAAM,UAAU,KAAK,WAAW;AAChC,UAAM,cAAc,KAAK,QAAQ,SAAS;AAAA,MACxC,WAAW,OAAO;AAAA,MAClB,YAAY,OAAO;AAAA,IACrB,CAAC;AAED,yBAAqB,sBAAsB,CAAC;AAE5C,UAAM,WACJ,mBAAmB,WAAW,SAAY,KAAK,mBAAmB;AACpE,QAAI,CAAC,eAAe,SAAS,WAAW,GAAG;AAEzC,YAAM,aAAa,YAAY,CAAC,IAAI,QAAQ,CAAC;AAC7C,YAAM,cAAc,QAAQ,CAAC,IAAI,YAAY,CAAC;AAC9C,YAAM,YAAY,YAAY,CAAC,IAAI,QAAQ,CAAC;AAC5C,YAAM,eAAe,QAAQ,CAAC,IAAI,YAAY,CAAC;AAE/C,YAAM,QAAQ,CAAC,GAAG,CAAC;AACnB,UAAI,aAAa,GAAG;AAElB,cAAM,CAAC,IAAI,aAAa;AAAA,MAC1B,WAAW,cAAc,GAAG;AAE1B,cAAM,CAAC,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,MACrC;AACA,UAAI,YAAY,GAAG;AAEjB,cAAM,CAAC,IAAI,YAAY;AAAA,MACzB,WAAW,eAAe,GAAG;AAE3B,cAAM,CAAC,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,MACtC;AAEA,UAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,GAAG;AACpC,cAAM;AAAA;AAAA,UACJ,IAAI,QAAQ,EAAE,kBAAkB;AAAA;AAElC,cAAM,WAAW,IAAI,+BAA+B,MAAM;AAC1D,YAAI,CAAC,UAAU;AACb;AAAA,QACF;AACA,cAAM,cAAc,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,MAAM,CAAC,CAAC;AAEnE,cAAM,aAAa,mBAAmB,aAAa,CAAC;AACpD,YAAI,QAAQ,EAAE,gBAAgB;AAAA,UAC5B,QAAQ,IAAI,+BAA+B,WAAW;AAAA,UACtD,UAAU,WAAW;AAAA,UACrB,QAAQ,WAAW;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,SAAS,MAAM;AACrB,UAAM,MAAM,QAAQ,sBAAsB;AAC1C,UAAM,UAAU,IAAI,OAAO,OAAO;AAClC,UAAM,UAAU,IAAI,MAAM,OAAO;AACjC,WAAO,CAAC,SAAS,SAAS,UAAU,KAAK,CAAC,GAAG,UAAU,KAAK,CAAC,CAAC;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe,aAAa;AAC1B,SAAK,IAAIA,UAAS,aAAa,WAAW;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,SAAS;AAClB,QAAI,KAAK,SAAS,YAAY,SAAS;AACrC,WAAK,QAAQ,MAAM,UAAU,UAAU,KAAK;AAC5C,WAAK,SAAS,UAAU;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,sBAAsB;AACpB,UAAM,MAAM,KAAK,OAAO;AACxB,UAAM,WAAW,KAAK,YAAY;AAClC,QAAI,CAAC,OAAO,CAAC,IAAI,WAAW,KAAK,CAAC,UAAU;AAC1C,WAAK,WAAW,KAAK;AACrB;AAAA,IACF;AAEA,UAAM,QAAQ,IAAI,uBAAuB,QAAQ;AACjD,UAAM,UAAU,IAAI,QAAQ;AAC5B,SAAK,uBAAuB,OAAO,OAAO;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,uBAAuB,OAAO,SAAS;AACrC,UAAM,QAAQ,KAAK,QAAQ;AAC3B,UAAM,SAAS,KAAK,UAAU;AAE9B,UAAM,cAAc,KAAK,eAAe;AAExC,SAAK,WAAW,IAAI;AAEpB,UAAM,IAAI,KAAK,MAAM,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI;AAC7C,UAAM,IAAI,KAAK,MAAM,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI;AAC7C,QAAI,OAAO;AACX,QAAI,OAAO;AACX,QACE,eAAe,kBACf,eAAe,kBACf,eAAe,aACf;AACA,aAAO;AAAA,IACT,WACE,eAAe,mBACf,eAAe,mBACf,eAAe,cACf;AACA,aAAO;AAAA,IACT;AACA,QACE,eAAe,iBACf,eAAe,mBACf,eAAe,gBACf;AACA,aAAO;AAAA,IACT,WACE,eAAe,iBACf,eAAe,mBACf,eAAe,gBACf;AACA,aAAO;AAAA,IACT;AACA,UAAM,YAAY,aAAa,IAAI,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC;AAClE,QAAI,KAAK,SAAS,cAAc,WAAW;AACzC,WAAK,SAAS,aAAa;AAC3B,YAAM,YAAY;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa;AACX,WAAO,KAAK;AAAA,EACd;AACF;AAEA,IAAO,kBAAQ;;;AChjBf,IAAM,aAAa,CAAC;AAEpB,IAAM,mBAAN,cAA+B,aAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlC,YACE,WACA,OACA,cACA,gBACA,mBACA;AACA,UAAM,WAAW,OAAO,EAAC,YAAY,EAAC,CAAC;AAMvC,SAAK,WAAW;AAMhB,SAAK,iBAAiB,CAAC;AAMvB,SAAK,qBAAqB;AAK1B,SAAK,wBAAwB,CAAC;AAM9B,SAAK,eAAe,CAAC;AAKrB,SAAK,cAAc,CAAC;AAKpB,SAAK,gBAAgB,CAAC;AAKtB,SAAK;AAKL,SAAK,iBAAiB,eAAe,KAAK,QAAW,IAAI;AAMzD,SAAK,qBAAqB;AAK1B,SAAK,mBAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa;AACX,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,WAAW,sBAAsB,GAAG,GAAG,UAAU;AAAA,IACxD;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa;AACX,WAAO,CAAC,CAAC,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW;AACT,WAAO,KAAK,WAAW,IAAI,KAAK,WAAW,EAAE,SAAS;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,OAAO;AACpB,UAAM,MAAM,OAAO,KAAK;AACxB,QAAI,EAAE,OAAO,KAAK,eAAe;AAC/B,WAAK,aAAa,GAAG,IAAI;AAAA,QACvB,OAAO;AAAA,QACP,qBAAqB;AAAA,QACrB,oBAAoB;AAAA,QACpB,kBAAkB;AAAA,QAClB,wBAAwB;AAAA,QACxB,sBAAsB;AAAA,QACtB,eAAe;AAAA,MACjB;AAAA,IACF;AACA,WAAO,KAAK,aAAa,GAAG;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACL,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU;AACR,QAAI,KAAK,UAAU;AACjB,oBAAc,KAAK,QAAQ;AAC3B,iBAAW,KAAK,KAAK,SAAS,MAAM;AACpC,WAAK,WAAW;AAAA,IAClB;AACA,SAAK,mBAAmB,IAAI;AAC5B,SAAK,YAAY,SAAS;AAC1B,UAAM,QAAQ;AAAA,EAChB;AACF;AAEA,IAAO,2BAAQ;;;ACjKf,IAAM,aAAN,cAAyB,aAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS5B,YAAY,WAAW,OAAO,KAAK,QAAQ,kBAAkB,SAAS;AACpE,UAAM,WAAW,OAAO,OAAO;AAM/B,SAAK,SAAS;AAMd,SAAK,UAAU;AAMf,SAAK,YAAY;AAMjB,SAAK;AAML,SAAK,aAAa;AAMlB,SAAK;AAML,SAAK,oBAAoB;AAMzB,SAAK,OAAO;AAEZ,SAAK,MAAM;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa;AACX,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY;AACV,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACL,QAAI,KAAK,SAAS,kBAAU,MAAM;AAChC,WAAK,SAAS,kBAAU,OAAO;AAC/B,WAAK,kBAAkB,MAAM,KAAK,IAAI;AACtC,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ,KAAK,QAAQ,KAAK,YAAY,KAAK,UAAU;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU,gBAAgB;AAC/B,SAAK,YAAY,QAAQ;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,SAAK,SAAS,kBAAU,KAAK;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,UAAU;AACpB,SAAK,YAAY;AACjB,SAAK,SAAS,kBAAU,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,QAAQ;AAChB,SAAK,UAAU;AAAA,EACjB;AACF;AAEA,IAAO,qBAAQ;", + "names": ["Vector_default", "EventType_default", "equals", "clone", "wrapX", "EventType_default", "EventType_default", "newEvent", "defaults", "Property", "wrapX", "callback", "Event_default", "EventType_default", "defaults", "EventType_default", "equals", "Map_default", "Property"] } diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_Feature.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_Feature.js index be7752e..833ccca 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_Feature.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_Feature.js @@ -1,9 +1,9 @@ import { Feature_default, createStyleFunction -} from "./chunk-GAPTD7YR.js"; -import "./chunk-QFCIXVZ3.js"; +} from "./chunk-ATTNMDTG.js"; import "./chunk-V2VQBN44.js"; +import "./chunk-QFCIXVZ3.js"; import "./chunk-33VDV4DG.js"; import "./chunk-FQY6EMA7.js"; import "./chunk-V6TY7KAL.js"; diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_events_condition.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_events_condition.js index 581ccf0..782375d 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_events_condition.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_events_condition.js @@ -20,8 +20,9 @@ import { singleClick, targetNotEditable, touchOnly -} from "./chunk-OOF5364O.js"; +} from "./chunk-VAUZYTLA.js"; import "./chunk-ZPDML4Q3.js"; +import "./chunk-POVGKIBQ.js"; import "./chunk-QFCIXVZ3.js"; import "./chunk-33VDV4DG.js"; import "./chunk-FQY6EMA7.js"; diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_expr_expression.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_expr_expression.js index d936f32..a92b6a0 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_expr_expression.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_expr_expression.js @@ -20,8 +20,8 @@ import { } from "./chunk-S7HK3S7W.js"; import "./chunk-33EAEVLP.js"; import "./chunk-PPP4FLHO.js"; -import "./chunk-FQY6EMA7.js"; import "./chunk-V7KTD4MH.js"; +import "./chunk-FQY6EMA7.js"; import "./chunk-V6TY7KAL.js"; export { AnyType, diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom.js index f4e9dfd..f29ce5c 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom.js @@ -4,32 +4,32 @@ import { MultiLineString_default, MultiPoint_default, MultiPolygon_default -} from "./chunk-2NX2FDVC.js"; -import { - LinearRing_default, - Polygon_default -} from "./chunk-5CPSJRE2.js"; +} from "./chunk-6OUHCICN.js"; import { LineString_default -} from "./chunk-7MYDC76J.js"; +} from "./chunk-NER2BJ37.js"; import "./chunk-JFXZSSOM.js"; +import { + LinearRing_default, + Polygon_default +} from "./chunk-47JK3GLV.js"; import "./chunk-TRW2RYAI.js"; import "./chunk-QIVUQU5K.js"; import { Point_default -} from "./chunk-QJJYQF6H.js"; +} from "./chunk-G3HPQ3BH.js"; import { Geometry_default, SimpleGeometry_default -} from "./chunk-W2FV6P6N.js"; +} from "./chunk-6GRRGW6V.js"; import "./chunk-MPRNTLUM.js"; import "./chunk-5ACH5F45.js"; -import "./chunk-QFCIXVZ3.js"; +import "./chunk-WXT7AISE.js"; import "./chunk-V2VQBN44.js"; +import "./chunk-V7KTD4MH.js"; +import "./chunk-QFCIXVZ3.js"; import "./chunk-33VDV4DG.js"; import "./chunk-FQY6EMA7.js"; -import "./chunk-WXT7AISE.js"; -import "./chunk-V7KTD4MH.js"; import "./chunk-V6TY7KAL.js"; export { Circle_default as Circle, diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom_LineString.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom_LineString.js index 9906ae2..be785b1 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom_LineString.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom_LineString.js @@ -1,18 +1,18 @@ import { LineString_default -} from "./chunk-7MYDC76J.js"; +} from "./chunk-NER2BJ37.js"; import "./chunk-JFXZSSOM.js"; import "./chunk-TRW2RYAI.js"; import "./chunk-QIVUQU5K.js"; -import "./chunk-W2FV6P6N.js"; +import "./chunk-6GRRGW6V.js"; import "./chunk-MPRNTLUM.js"; import "./chunk-5ACH5F45.js"; -import "./chunk-QFCIXVZ3.js"; +import "./chunk-WXT7AISE.js"; import "./chunk-V2VQBN44.js"; +import "./chunk-V7KTD4MH.js"; +import "./chunk-QFCIXVZ3.js"; import "./chunk-33VDV4DG.js"; import "./chunk-FQY6EMA7.js"; -import "./chunk-WXT7AISE.js"; -import "./chunk-V7KTD4MH.js"; import "./chunk-V6TY7KAL.js"; export { LineString_default as default diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom_Point.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom_Point.js index becc051..45b71f7 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom_Point.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_geom_Point.js @@ -1,15 +1,15 @@ import { Point_default -} from "./chunk-QJJYQF6H.js"; -import "./chunk-W2FV6P6N.js"; +} from "./chunk-G3HPQ3BH.js"; +import "./chunk-6GRRGW6V.js"; import "./chunk-MPRNTLUM.js"; import "./chunk-5ACH5F45.js"; -import "./chunk-QFCIXVZ3.js"; +import "./chunk-WXT7AISE.js"; import "./chunk-V2VQBN44.js"; +import "./chunk-V7KTD4MH.js"; +import "./chunk-QFCIXVZ3.js"; import "./chunk-33VDV4DG.js"; import "./chunk-FQY6EMA7.js"; -import "./chunk-WXT7AISE.js"; -import "./chunk-V7KTD4MH.js"; import "./chunk-V6TY7KAL.js"; export { Point_default as default diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Draw.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Draw.js index 22be79b..ea16db8 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Draw.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Draw.js @@ -2,80 +2,73 @@ import { MapBrowserEvent_default } from "./chunk-LKL2NEMT.js"; import { - Pointer_default -} from "./chunk-UWCYJJIT.js"; + Vector_default +} from "./chunk-JOMDBGKW.js"; +import { + Circle_default, + GeometryCollection_default, + MultiLineString_default, + MultiPoint_default, + MultiPolygon_default +} from "./chunk-6OUHCICN.js"; +import { + LineString_default +} from "./chunk-NER2BJ37.js"; +import { + Feature_default +} from "./chunk-ATTNMDTG.js"; import { Vector_default as Vector_default2 -} from "./chunk-VQAOIZZU.js"; +} from "./chunk-HFPY7EDW.js"; import { createEditingStyle -} from "./chunk-LKGRVZZI.js"; -import "./chunk-6SP66AVH.js"; -import "./chunk-S7HK3S7W.js"; -import "./chunk-33EAEVLP.js"; +} from "./chunk-GKDSB34V.js"; +import "./chunk-RW3V7S4F.js"; +import "./chunk-JFXZSSOM.js"; +import "./chunk-VWBYIKLE.js"; +import "./chunk-DYKFAHI6.js"; import "./chunk-FM44FOIC.js"; import "./chunk-WEQYAO4O.js"; -import "./chunk-PPP4FLHO.js"; +import "./chunk-RMGZ5HGX.js"; +import { + Polygon_default, + fromCircle, + makeRegular +} from "./chunk-47JK3GLV.js"; +import "./chunk-TRW2RYAI.js"; +import "./chunk-QIVUQU5K.js"; +import { + Pointer_default +} from "./chunk-LKZG5HMW.js"; import { Property_default } from "./chunk-F2HSAX6I.js"; import "./chunk-LMC3RO5P.js"; +import "./chunk-4E4H2AGX.js"; +import "./chunk-S7HK3S7W.js"; +import "./chunk-33EAEVLP.js"; +import "./chunk-PPP4FLHO.js"; import { - Vector_default -} from "./chunk-2R5MNV34.js"; -import "./chunk-DYKFAHI6.js"; -import "./chunk-RW3V7S4F.js"; -import { - Feature_default -} from "./chunk-GAPTD7YR.js"; -import { - MapBrowserEventType_default, always, never, noModifierKeys, shiftKeyOnly -} from "./chunk-OOF5364O.js"; +} from "./chunk-VAUZYTLA.js"; import "./chunk-ZPDML4Q3.js"; import { - Circle_default, - GeometryCollection_default, - MultiLineString_default, - MultiPoint_default, - MultiPolygon_default -} from "./chunk-2NX2FDVC.js"; -import { - Polygon_default, - fromCircle, - makeRegular -} from "./chunk-5CPSJRE2.js"; -import "./chunk-4E4H2AGX.js"; -import { - LineString_default -} from "./chunk-7MYDC76J.js"; -import "./chunk-JFXZSSOM.js"; -import "./chunk-TRW2RYAI.js"; -import "./chunk-QIVUQU5K.js"; + MapBrowserEventType_default +} from "./chunk-POVGKIBQ.js"; import { Point_default -} from "./chunk-QJJYQF6H.js"; +} from "./chunk-G3HPQ3BH.js"; import { getStrideForLayout -} from "./chunk-W2FV6P6N.js"; +} from "./chunk-6GRRGW6V.js"; import "./chunk-MPRNTLUM.js"; import { fromUserCoordinate, getUserProjection } from "./chunk-5ACH5F45.js"; -import "./chunk-QFCIXVZ3.js"; -import { - Event_default -} from "./chunk-V2VQBN44.js"; -import { - EventType_default, - FALSE, - TRUE -} from "./chunk-33VDV4DG.js"; -import "./chunk-FQY6EMA7.js"; import { boundingExtent, distance, @@ -85,11 +78,21 @@ import { getTopRight, squaredDistance as squaredDistance2 } from "./chunk-WXT7AISE.js"; +import { + Event_default +} from "./chunk-V2VQBN44.js"; import { clamp, squaredDistance, toFixed } from "./chunk-V7KTD4MH.js"; +import "./chunk-QFCIXVZ3.js"; +import { + EventType_default, + FALSE, + TRUE +} from "./chunk-33VDV4DG.js"; +import "./chunk-FQY6EMA7.js"; import "./chunk-V6TY7KAL.js"; // node_modules/ol/interaction/Draw.js diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Draw.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Draw.js.map index f804b7f..28b6ae9 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Draw.js.map +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Draw.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../../ol/interaction/Draw.js"], "sourcesContent": ["/**\n * @module ol/interaction/Draw\n */\nimport Feature from '../Feature.js';\nimport MapBrowserEvent from '../MapBrowserEvent.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {\n distance,\n squaredDistance as squaredCoordinateDistance,\n} from '../coordinate.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport {\n always,\n never,\n noModifierKeys,\n shiftKeyOnly,\n} from '../events/condition.js';\nimport {\n boundingExtent,\n getBottomLeft,\n getBottomRight,\n getTopLeft,\n getTopRight,\n} from '../extent.js';\nimport {FALSE, TRUE} from '../functions.js';\nimport Circle from '../geom/Circle.js';\nimport GeometryCollection from '../geom/GeometryCollection.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon, {fromCircle, makeRegular} from '../geom/Polygon.js';\nimport {getStrideForLayout} from '../geom/SimpleGeometry.js';\nimport VectorLayer from '../layer/Vector.js';\nimport {clamp, squaredDistance, toFixed} from '../math.js';\nimport {fromUserCoordinate, getUserProjection} from '../proj.js';\nimport VectorSource from '../source/Vector.js';\nimport {createEditingStyle} from '../style/Style.js';\nimport PointerInteraction from './Pointer.js';\nimport InteractionProperty from './Property.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../geom/Geometry.js\").Type} type Geometry type of\n * the geometries being drawn with this instance.\n * @property {number} [clickTolerance=6] The maximum distance in pixels between\n * \"down\" and \"up\" for a \"up\" event to be considered a \"click\" event and\n * actually add a point/vertex to the geometry being drawn. The default of `6`\n * was chosen for the draw interaction to behave correctly on mouse as well as\n * on touch devices.\n * @property {import(\"../Collection.js\").default} [features]\n * Destination collection for the drawn features.\n * @property {VectorSource} [source] Destination source for\n * the drawn features.\n * @property {number} [dragVertexDelay=500] Delay in milliseconds after pointerdown\n * before the current vertex can be dragged to its exact position.\n * @property {number} [snapTolerance=12] Pixel distance for snapping to the\n * drawing finish. Must be greater than `0`.\n * @property {boolean} [stopClick=false] Stop click, singleclick, and\n * doubleclick events from firing during drawing.\n * @property {number} [maxPoints] The number of points that can be drawn before\n * a polygon ring or line string is finished. By default there is no\n * restriction.\n * @property {number} [minPoints] The number of points that must be drawn\n * before a polygon ring or line string can be finished. Default is `3` for\n * polygon rings and `2` for line strings.\n * @property {import(\"../events/condition.js\").Condition} [finishCondition] A function\n * that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether the drawing can be finished. Not used when drawing\n * POINT or MULTI_POINT geometries.\n * @property {import(\"../style/Style.js\").StyleLike|import(\"../style/flat.js\").FlatStyleLike} [style]\n * Style for sketch features. The draw interaction can have up to three sketch features, depending on the mode.\n * It will always contain a feature with a `Point` geometry that corresponds to the current cursor position.\n * If the mode is `LineString` or `Polygon`, and there is at least one drawn point, it will also contain a feature with\n * a `LineString` geometry that corresponds to the line between the already drawn points and the current cursor position.\n * If the mode is `Polygon`, and there is at least one drawn point, it will also contain a feature with a `Polygon`\n * geometry that corresponds to the polygon between the already drawn points and the current cursor position\n * (note that this polygon has only two points if only one point is drawn).\n * If the mode is `Circle`, and there is one point drawn, it will also contain a feature with a `Circle` geometry whose\n * center is the drawn point and the radius is determined by the distance between the drawn point and the cursor.\n * @property {GeometryFunction} [geometryFunction]\n * Function that is called when a geometry's coordinates are updated.\n * @property {string} [geometryName] Geometry name to use for features created\n * by the draw interaction.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * By default {@link module:ol/events/condition.noModifierKeys}, i.e. a click,\n * adds a vertex or deactivates freehand drawing.\n * @property {boolean} [freehand=false] Operate in freehand mode for lines,\n * polygons, and circles. This makes the interaction always operate in freehand\n * mode and takes precedence over any `freehandCondition` option.\n * @property {import(\"../events/condition.js\").Condition} [freehandCondition]\n * Condition that activates freehand drawing for lines and polygons. This\n * function takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and\n * returns a boolean to indicate whether that event should be handled. The\n * default is {@link module:ol/events/condition.shiftKeyOnly}, meaning that the\n * Shift key activates freehand drawing.\n * @property {boolean|import(\"../events/condition.js\").Condition} [trace=false] Trace a portion of another geometry.\n * Ignored when in freehand mode.\n * @property {VectorSource} [traceSource] Source for features to trace. If tracing is active and a `traceSource` is\n * not provided, the interaction's `source` will be used. Tracing requires that the interaction is configured with\n * either a `traceSource` or a `source`.\n * @property {boolean} [wrapX=false] Wrap the world horizontally on the sketch\n * overlay.\n * @property {import(\"../geom/Geometry.js\").GeometryLayout} [geometryLayout='XY'] Layout of the\n * feature geometries created by the draw interaction.\n */\n\n/**\n * Coordinate type when drawing points.\n * @typedef {import(\"../coordinate.js\").Coordinate} PointCoordType\n */\n\n/**\n * Coordinate type when drawing lines.\n * @typedef {Array} LineCoordType\n */\n\n/**\n * Coordinate type when drawing polygons.\n * @typedef {Array>} PolyCoordType\n */\n\n/**\n * Types used for drawing coordinates.\n * @typedef {PointCoordType|LineCoordType|PolyCoordType} SketchCoordType\n */\n\n/**\n * @typedef {Object} TraceState\n * @property {boolean} active Tracing active.\n * @property {import(\"../pixel.js\").Pixel} [startPx] The initially clicked pixel location.\n * @property {Array} [targets] Targets available for tracing.\n * @property {number} [targetIndex] The index of the currently traced target. A value of -1 indicates\n * that no trace target is active.\n */\n\n/**\n * @typedef {Object} TraceTarget\n * @property {Array} coordinates Target coordinates.\n * @property {boolean} ring The target coordinates are a linear ring.\n * @property {number} startIndex The index of first traced coordinate. A fractional index represents an\n * edge intersection. Index values for rings will wrap (may be negative or larger than coordinates length).\n * @property {number} endIndex The index of last traced coordinate. Details from startIndex also apply here.\n */\n\n/**\n * Function that takes an array of coordinates and an optional existing geometry\n * and a projection as arguments, and returns a geometry. The optional existing\n * geometry is the geometry that is returned when the function is called without\n * a second argument.\n * @typedef {function(!SketchCoordType, import(\"../geom/SimpleGeometry.js\").default,\n * import(\"../proj/Projection.js\").default):\n * import(\"../geom/SimpleGeometry.js\").default} GeometryFunction\n */\n\n/**\n * @typedef {'Point' | 'LineString' | 'Polygon' | 'Circle'} Mode\n * Draw mode. This collapses multi-part geometry types with their single-part\n * cousins.\n */\n\n/**\n * @enum {string}\n */\nconst DrawEventType = {\n /**\n * Triggered upon feature draw start\n * @event DrawEvent#drawstart\n * @api\n */\n DRAWSTART: 'drawstart',\n /**\n * Triggered upon feature draw end\n * @event DrawEvent#drawend\n * @api\n */\n DRAWEND: 'drawend',\n /**\n * Triggered upon feature draw abortion\n * @event DrawEvent#drawabort\n * @api\n */\n DRAWABORT: 'drawabort',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/Draw~Draw} instances are\n * instances of this type.\n */\nexport class DrawEvent extends Event {\n /**\n * @param {DrawEventType} type Type.\n * @param {Feature} feature The feature drawn.\n */\n constructor(type, feature) {\n super(type);\n\n /**\n * The feature being drawn.\n * @type {Feature}\n * @api\n */\n this.feature = feature;\n }\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The coordinate.\n * @param {Array} features The candidate features.\n * @return {Array} The trace targets.\n */\nfunction getTraceTargets(coordinate, features) {\n /**\n * @type {Array}\n */\n const targets = [];\n\n for (let i = 0; i < features.length; ++i) {\n const feature = features[i];\n const geometry = feature.getGeometry();\n appendGeometryTraceTargets(coordinate, geometry, targets);\n }\n\n return targets;\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} a One coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} b Another coordinate.\n * @return {number} The squared distance between the two coordinates.\n */\nfunction getSquaredDistance(a, b) {\n return squaredDistance(a[0], a[1], b[0], b[1]);\n}\n\n/**\n * @param {LineCoordType} coordinates The ring coordinates.\n * @param {number} index The index. May be wrapped.\n * @return {import(\"../coordinate.js\").Coordinate} The coordinate.\n */\nfunction getCoordinate(coordinates, index) {\n const count = coordinates.length;\n if (index < 0) {\n return coordinates[index + count];\n }\n if (index >= count) {\n return coordinates[index - count];\n }\n return coordinates[index];\n}\n\n/**\n * Get the cumulative squared distance along a ring path. The end index index may be \"wrapped\" and it may\n * be less than the start index to indicate the direction of travel. The start and end index may have\n * a fractional part to indicate a point between two coordinates.\n * @param {LineCoordType} coordinates Ring coordinates.\n * @param {number} startIndex The start index.\n * @param {number} endIndex The end index.\n * @return {number} The cumulative squared distance along the ring path.\n */\nfunction getCumulativeSquaredDistance(coordinates, startIndex, endIndex) {\n let lowIndex, highIndex;\n if (startIndex < endIndex) {\n lowIndex = startIndex;\n highIndex = endIndex;\n } else {\n lowIndex = endIndex;\n highIndex = startIndex;\n }\n const lowWholeIndex = Math.ceil(lowIndex);\n const highWholeIndex = Math.floor(highIndex);\n\n if (lowWholeIndex > highWholeIndex) {\n // both start and end are on the same segment\n const start = interpolateCoordinate(coordinates, lowIndex);\n const end = interpolateCoordinate(coordinates, highIndex);\n return getSquaredDistance(start, end);\n }\n\n let sd = 0;\n\n if (lowIndex < lowWholeIndex) {\n const start = interpolateCoordinate(coordinates, lowIndex);\n const end = getCoordinate(coordinates, lowWholeIndex);\n sd += getSquaredDistance(start, end);\n }\n\n if (highWholeIndex < highIndex) {\n const start = getCoordinate(coordinates, highWholeIndex);\n const end = interpolateCoordinate(coordinates, highIndex);\n sd += getSquaredDistance(start, end);\n }\n\n for (let i = lowWholeIndex; i < highWholeIndex - 1; ++i) {\n const start = getCoordinate(coordinates, i);\n const end = getCoordinate(coordinates, i + 1);\n sd += getSquaredDistance(start, end);\n }\n\n return sd;\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The coordinate.\n * @param {import(\"../geom/Geometry.js\").default} geometry The candidate geometry.\n * @param {Array} targets The trace targets.\n */\nfunction appendGeometryTraceTargets(coordinate, geometry, targets) {\n if (geometry instanceof LineString) {\n appendTraceTarget(coordinate, geometry.getCoordinates(), false, targets);\n return;\n }\n if (geometry instanceof MultiLineString) {\n const coordinates = geometry.getCoordinates();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n appendTraceTarget(coordinate, coordinates[i], false, targets);\n }\n return;\n }\n if (geometry instanceof Polygon) {\n const coordinates = geometry.getCoordinates();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n appendTraceTarget(coordinate, coordinates[i], true, targets);\n }\n return;\n }\n if (geometry instanceof MultiPolygon) {\n const polys = geometry.getCoordinates();\n for (let i = 0, ii = polys.length; i < ii; ++i) {\n const coordinates = polys[i];\n for (let j = 0, jj = coordinates.length; j < jj; ++j) {\n appendTraceTarget(coordinate, coordinates[j], true, targets);\n }\n }\n return;\n }\n if (geometry instanceof GeometryCollection) {\n const geometries = geometry.getGeometries();\n for (let i = 0; i < geometries.length; ++i) {\n appendGeometryTraceTargets(coordinate, geometries[i], targets);\n }\n return;\n }\n // other types cannot be traced\n}\n\n/**\n * @typedef {Object} TraceTargetUpdateInfo\n * @property {number} index The new target index.\n * @property {number} endIndex The new segment end index.\n */\n\n/**\n * @type {TraceTargetUpdateInfo}\n */\nconst sharedUpdateInfo = {index: -1, endIndex: NaN};\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The coordinate.\n * @param {TraceState} traceState The trace state.\n * @param {import(\"../Map.js\").default} map The map.\n * @param {number} snapTolerance The snap tolerance.\n * @return {TraceTargetUpdateInfo} Information about the new trace target. The returned\n * object is reused between calls and must not be modified by the caller.\n */\nfunction getTraceTargetUpdate(coordinate, traceState, map, snapTolerance) {\n const x = coordinate[0];\n const y = coordinate[1];\n\n let closestTargetDistance = Infinity;\n\n let newTargetIndex = -1;\n let newEndIndex = NaN;\n\n for (\n let targetIndex = 0;\n targetIndex < traceState.targets.length;\n ++targetIndex\n ) {\n const target = traceState.targets[targetIndex];\n const coordinates = target.coordinates;\n\n let minSegmentDistance = Infinity;\n let endIndex;\n for (\n let coordinateIndex = 0;\n coordinateIndex < coordinates.length - 1;\n ++coordinateIndex\n ) {\n const start = coordinates[coordinateIndex];\n const end = coordinates[coordinateIndex + 1];\n const rel = getPointSegmentRelationship(x, y, start, end);\n if (rel.squaredDistance < minSegmentDistance) {\n minSegmentDistance = rel.squaredDistance;\n endIndex = coordinateIndex + rel.along;\n }\n }\n\n if (minSegmentDistance < closestTargetDistance) {\n closestTargetDistance = minSegmentDistance;\n if (target.ring && traceState.targetIndex === targetIndex) {\n // same target, maintain the same trace direction\n if (target.endIndex > target.startIndex) {\n // forward trace\n if (endIndex < target.startIndex) {\n endIndex += coordinates.length;\n }\n } else if (target.endIndex < target.startIndex) {\n // reverse trace\n if (endIndex > target.startIndex) {\n endIndex -= coordinates.length;\n }\n }\n }\n newEndIndex = endIndex;\n newTargetIndex = targetIndex;\n }\n }\n\n const newTarget = traceState.targets[newTargetIndex];\n let considerBothDirections = newTarget.ring;\n if (traceState.targetIndex === newTargetIndex && considerBothDirections) {\n // only consider switching trace direction if close to the start\n const newCoordinate = interpolateCoordinate(\n newTarget.coordinates,\n newEndIndex,\n );\n const pixel = map.getPixelFromCoordinate(newCoordinate);\n if (distance(pixel, traceState.startPx) > snapTolerance) {\n considerBothDirections = false;\n }\n }\n\n if (considerBothDirections) {\n const coordinates = newTarget.coordinates;\n const count = coordinates.length;\n const startIndex = newTarget.startIndex;\n const endIndex = newEndIndex;\n if (startIndex < endIndex) {\n const forwardDistance = getCumulativeSquaredDistance(\n coordinates,\n startIndex,\n endIndex,\n );\n const reverseDistance = getCumulativeSquaredDistance(\n coordinates,\n startIndex,\n endIndex - count,\n );\n if (reverseDistance < forwardDistance) {\n newEndIndex -= count;\n }\n } else {\n const reverseDistance = getCumulativeSquaredDistance(\n coordinates,\n startIndex,\n endIndex,\n );\n const forwardDistance = getCumulativeSquaredDistance(\n coordinates,\n startIndex,\n endIndex + count,\n );\n if (forwardDistance < reverseDistance) {\n newEndIndex += count;\n }\n }\n }\n\n sharedUpdateInfo.index = newTargetIndex;\n sharedUpdateInfo.endIndex = newEndIndex;\n return sharedUpdateInfo;\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The clicked coordinate.\n * @param {Array} coordinates The geometry component coordinates.\n * @param {boolean} ring The coordinates represent a linear ring.\n * @param {Array} targets The trace targets.\n */\nfunction appendTraceTarget(coordinate, coordinates, ring, targets) {\n const x = coordinate[0];\n const y = coordinate[1];\n for (let i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n const start = coordinates[i];\n const end = coordinates[i + 1];\n const rel = getPointSegmentRelationship(x, y, start, end);\n if (rel.squaredDistance === 0) {\n const index = i + rel.along;\n targets.push({\n coordinates: coordinates,\n ring: ring,\n startIndex: index,\n endIndex: index,\n });\n return;\n }\n }\n}\n\n/**\n * @typedef {Object} PointSegmentRelationship\n * @property {number} along The closest point expressed as a fraction along the segment length.\n * @property {number} squaredDistance The squared distance of the point to the segment.\n */\n\n/**\n * @type {PointSegmentRelationship}\n */\nconst sharedRel = {along: 0, squaredDistance: 0};\n\n/**\n * @param {number} x The point x.\n * @param {number} y The point y.\n * @param {import(\"../coordinate.js\").Coordinate} start The segment start.\n * @param {import(\"../coordinate.js\").Coordinate} end The segment end.\n * @return {PointSegmentRelationship} The point segment relationship. The returned object is\n * shared between calls and must not be modified by the caller.\n */\nfunction getPointSegmentRelationship(x, y, start, end) {\n const x1 = start[0];\n const y1 = start[1];\n const x2 = end[0];\n const y2 = end[1];\n const dx = x2 - x1;\n const dy = y2 - y1;\n let along = 0;\n let px = x1;\n let py = y1;\n if (dx !== 0 || dy !== 0) {\n along = clamp(((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy), 0, 1);\n px += dx * along;\n py += dy * along;\n }\n\n sharedRel.along = along;\n sharedRel.squaredDistance = toFixed(squaredDistance(x, y, px, py), 10);\n return sharedRel;\n}\n\n/**\n * @param {LineCoordType} coordinates The coordinates.\n * @param {number} index The index. May be fractional and may wrap.\n * @return {import(\"../coordinate.js\").Coordinate} The interpolated coordinate.\n */\nfunction interpolateCoordinate(coordinates, index) {\n const count = coordinates.length;\n\n let startIndex = Math.floor(index);\n const along = index - startIndex;\n if (startIndex >= count) {\n startIndex -= count;\n } else if (startIndex < 0) {\n startIndex += count;\n }\n\n let endIndex = startIndex + 1;\n if (endIndex >= count) {\n endIndex -= count;\n }\n\n const start = coordinates[startIndex];\n const x0 = start[0];\n const y0 = start[1];\n const end = coordinates[endIndex];\n const dx = end[0] - x0;\n const dy = end[1] - y0;\n\n return [x0 + dx * along, y0 + dy * along];\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature<'drawabort'|'drawend'|'drawstart', DrawEvent, Return> &\n * import(\"../Observable\").CombinedOnSignature} DrawOnSignature\n */\n\n/**\n * @classdesc\n * Interaction for drawing feature geometries.\n *\n * @fires DrawEvent\n * @api\n */\nclass Draw extends PointerInteraction {\n /**\n * @param {Options} options Options.\n */\n constructor(options) {\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /***\n * @type {DrawOnSignature}\n */\n this.on;\n\n /***\n * @type {DrawOnSignature}\n */\n this.once;\n\n /***\n * @type {DrawOnSignature}\n */\n this.un;\n\n /**\n * @type {boolean}\n * @private\n */\n this.shouldHandle_ = false;\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n * @private\n */\n this.downPx_ = null;\n\n /**\n * @type {ReturnType}\n * @private\n */\n this.downTimeout_;\n\n /**\n * @type {number|undefined}\n * @private\n */\n this.lastDragTime_;\n\n /**\n * Pointer type of the last pointermove event\n * @type {string}\n * @private\n */\n this.pointerType_;\n\n /**\n * @type {boolean}\n * @private\n */\n this.freehand_ = false;\n\n /**\n * Target source for drawn features.\n * @type {VectorSource|null}\n * @private\n */\n this.source_ = options.source ? options.source : null;\n\n /**\n * Target collection for drawn features.\n * @type {import(\"../Collection.js\").default|null}\n * @private\n */\n this.features_ = options.features ? options.features : null;\n\n /**\n * Pixel distance for snapping.\n * @type {number}\n * @private\n */\n this.snapTolerance_ = options.snapTolerance ? options.snapTolerance : 12;\n\n /**\n * Geometry type.\n * @type {import(\"../geom/Geometry.js\").Type}\n * @private\n */\n this.type_ = /** @type {import(\"../geom/Geometry.js\").Type} */ (\n options.type\n );\n\n /**\n * Drawing mode (derived from geometry type.\n * @type {Mode}\n * @private\n */\n this.mode_ = getMode(this.type_);\n\n /**\n * Stop click, singleclick, and doubleclick events from firing during drawing.\n * Default is `false`.\n * @type {boolean}\n * @private\n */\n this.stopClick_ = !!options.stopClick;\n\n /**\n * The number of points that must be drawn before a polygon ring or line\n * string can be finished. The default is 3 for polygon rings and 2 for\n * line strings.\n * @type {number}\n * @private\n */\n this.minPoints_ = options.minPoints\n ? options.minPoints\n : this.mode_ === 'Polygon'\n ? 3\n : 2;\n\n /**\n * The number of points that can be drawn before a polygon ring or line string\n * is finished. The default is no restriction.\n * @type {number}\n * @private\n */\n this.maxPoints_ =\n this.mode_ === 'Circle'\n ? 2\n : options.maxPoints\n ? options.maxPoints\n : Infinity;\n\n /**\n * A function to decide if a potential finish coordinate is permissible\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.finishCondition_ = options.finishCondition\n ? options.finishCondition\n : TRUE;\n\n /**\n * @private\n * @type {import(\"../geom/Geometry.js\").GeometryLayout}\n */\n this.geometryLayout_ = options.geometryLayout\n ? options.geometryLayout\n : 'XY';\n\n let geometryFunction = options.geometryFunction;\n if (!geometryFunction) {\n const mode = this.mode_;\n if (mode === 'Circle') {\n /**\n * @param {!LineCoordType} coordinates The coordinates.\n * @param {import(\"../geom/SimpleGeometry.js\").default|undefined} geometry Optional geometry.\n * @param {import(\"../proj/Projection.js\").default} projection The view projection.\n * @return {import(\"../geom/SimpleGeometry.js\").default} A geometry.\n */\n geometryFunction = (coordinates, geometry, projection) => {\n const circle = geometry\n ? /** @type {Circle} */ (geometry)\n : new Circle([NaN, NaN]);\n const center = fromUserCoordinate(coordinates[0], projection);\n const squaredLength = squaredCoordinateDistance(\n center,\n fromUserCoordinate(coordinates[coordinates.length - 1], projection),\n );\n circle.setCenterAndRadius(\n center,\n Math.sqrt(squaredLength),\n this.geometryLayout_,\n );\n const userProjection = getUserProjection();\n if (userProjection) {\n circle.transform(projection, userProjection);\n }\n return circle;\n };\n } else {\n let Constructor;\n if (mode === 'Point') {\n Constructor = Point;\n } else if (mode === 'LineString') {\n Constructor = LineString;\n } else if (mode === 'Polygon') {\n Constructor = Polygon;\n }\n /**\n * @param {!LineCoordType} coordinates The coordinates.\n * @param {import(\"../geom/SimpleGeometry.js\").default|undefined} geometry Optional geometry.\n * @param {import(\"../proj/Projection.js\").default} projection The view projection.\n * @return {import(\"../geom/SimpleGeometry.js\").default} A geometry.\n */\n geometryFunction = (coordinates, geometry, projection) => {\n if (geometry) {\n if (mode === 'Polygon') {\n if (coordinates[0].length) {\n // Add a closing coordinate to match the first\n geometry.setCoordinates(\n [coordinates[0].concat([coordinates[0][0]])],\n this.geometryLayout_,\n );\n } else {\n geometry.setCoordinates([], this.geometryLayout_);\n }\n } else {\n geometry.setCoordinates(coordinates, this.geometryLayout_);\n }\n } else {\n geometry = new Constructor(coordinates, this.geometryLayout_);\n }\n return geometry;\n };\n }\n }\n\n /**\n * @type {GeometryFunction}\n * @private\n */\n this.geometryFunction_ = geometryFunction;\n\n /**\n * @type {number}\n * @private\n */\n this.dragVertexDelay_ =\n options.dragVertexDelay !== undefined ? options.dragVertexDelay : 500;\n\n /**\n * Finish coordinate for the feature (first point for polygons, last point for\n * linestrings).\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.finishCoordinate_ = null;\n\n /**\n * Sketch feature.\n * @type {Feature}\n * @private\n */\n this.sketchFeature_ = null;\n\n /**\n * Sketch point.\n * @type {Feature}\n * @private\n */\n this.sketchPoint_ = null;\n\n /**\n * Sketch coordinates. Used when drawing a line or polygon.\n * @type {SketchCoordType}\n * @private\n */\n this.sketchCoords_ = null;\n\n /**\n * Sketch line. Used when drawing polygon.\n * @type {Feature}\n * @private\n */\n this.sketchLine_ = null;\n\n /**\n * Sketch line coordinates. Used when drawing a polygon or circle.\n * @type {LineCoordType}\n * @private\n */\n this.sketchLineCoords_ = null;\n\n /**\n * Squared tolerance for handling up events. If the squared distance\n * between a down and up event is greater than this tolerance, up events\n * will not be handled.\n * @type {number}\n * @private\n */\n this.squaredClickTolerance_ = options.clickTolerance\n ? options.clickTolerance * options.clickTolerance\n : 36;\n\n /**\n * Draw overlay where our sketch features are drawn.\n * @type {VectorLayer}\n * @private\n */\n this.overlay_ = new VectorLayer({\n source: new VectorSource({\n useSpatialIndex: false,\n wrapX: options.wrapX ? options.wrapX : false,\n }),\n style: options.style ? options.style : getDefaultStyleFunction(),\n updateWhileInteracting: true,\n });\n\n /**\n * Name of the geometry attribute for newly created features.\n * @type {string|undefined}\n * @private\n */\n this.geometryName_ = options.geometryName;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : noModifierKeys;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.freehandCondition_;\n if (options.freehand) {\n this.freehandCondition_ = always;\n } else {\n this.freehandCondition_ = options.freehandCondition\n ? options.freehandCondition\n : shiftKeyOnly;\n }\n\n /**\n * @type {import(\"../events/condition.js\").Condition}\n * @private\n */\n this.traceCondition_;\n this.setTrace(options.trace || false);\n\n /**\n * @type {TraceState}\n * @private\n */\n this.traceState_ = {active: false};\n\n /**\n * @type {VectorSource|null}\n * @private\n */\n this.traceSource_ = options.traceSource || options.source || null;\n\n this.addChangeListener(InteractionProperty.ACTIVE, this.updateState_);\n }\n\n /**\n * Toggle tracing mode or set a tracing condition.\n *\n * @param {boolean|import(\"../events/condition.js\").Condition} trace A boolean to toggle tracing mode or an event\n * condition that will be checked when a feature is clicked to determine if tracing should be active.\n */\n setTrace(trace) {\n let condition;\n if (!trace) {\n condition = never;\n } else if (trace === true) {\n condition = always;\n } else {\n condition = trace;\n }\n this.traceCondition_ = condition;\n }\n\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default} map Map.\n * @override\n */\n setMap(map) {\n super.setMap(map);\n this.updateState_();\n }\n\n /**\n * Get the overlay layer that this interaction renders sketch features to.\n * @return {VectorLayer} Overlay layer.\n * @api\n */\n getOverlay() {\n return this.overlay_;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} and may actually draw or finish the drawing.\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n * @override\n */\n handleEvent(event) {\n if (event.originalEvent.type === EventType.CONTEXTMENU) {\n // Avoid context menu for long taps when drawing on mobile\n event.originalEvent.preventDefault();\n }\n this.freehand_ = this.mode_ !== 'Point' && this.freehandCondition_(event);\n let move = event.type === MapBrowserEventType.POINTERMOVE;\n let pass = true;\n if (\n !this.freehand_ &&\n this.lastDragTime_ &&\n event.type === MapBrowserEventType.POINTERDRAG\n ) {\n const now = Date.now();\n if (now - this.lastDragTime_ >= this.dragVertexDelay_) {\n this.downPx_ = event.pixel;\n this.shouldHandle_ = !this.freehand_;\n move = true;\n } else {\n this.lastDragTime_ = undefined;\n }\n if (this.shouldHandle_ && this.downTimeout_ !== undefined) {\n clearTimeout(this.downTimeout_);\n this.downTimeout_ = undefined;\n }\n }\n if (\n this.freehand_ &&\n event.type === MapBrowserEventType.POINTERDRAG &&\n this.sketchFeature_ !== null\n ) {\n this.addToDrawing_(event.coordinate);\n pass = false;\n } else if (\n this.freehand_ &&\n event.type === MapBrowserEventType.POINTERDOWN\n ) {\n pass = false;\n } else if (move && this.getPointerCount() < 2) {\n pass = event.type === MapBrowserEventType.POINTERMOVE;\n if (pass && this.freehand_) {\n this.handlePointerMove_(event);\n if (this.shouldHandle_) {\n // Avoid page scrolling when freehand drawing on mobile\n event.originalEvent.preventDefault();\n }\n } else if (\n event.originalEvent.pointerType === 'mouse' ||\n (event.type === MapBrowserEventType.POINTERDRAG &&\n this.downTimeout_ === undefined)\n ) {\n this.handlePointerMove_(event);\n }\n } else if (event.type === MapBrowserEventType.DBLCLICK) {\n pass = false;\n }\n\n return super.handleEvent(event) && pass;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(event) {\n this.shouldHandle_ = !this.freehand_;\n\n if (this.freehand_) {\n this.downPx_ = event.pixel;\n if (!this.finishCoordinate_) {\n this.startDrawing_(event.coordinate);\n }\n return true;\n }\n\n if (!this.condition_(event)) {\n this.lastDragTime_ = undefined;\n return false;\n }\n\n this.lastDragTime_ = Date.now();\n this.downTimeout_ = setTimeout(() => {\n this.handlePointerMove_(\n new MapBrowserEvent(\n MapBrowserEventType.POINTERMOVE,\n event.map,\n event.originalEvent,\n false,\n event.frameState,\n ),\n );\n }, this.dragVertexDelay_);\n this.downPx_ = event.pixel;\n return true;\n }\n\n /**\n * @private\n */\n deactivateTrace_() {\n this.traceState_ = {active: false};\n }\n\n /**\n * Activate or deactivate trace state based on a browser event.\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @private\n */\n toggleTraceState_(event) {\n if (!this.traceSource_ || !this.traceCondition_(event)) {\n return;\n }\n\n if (this.traceState_.active) {\n this.deactivateTrace_();\n return;\n }\n\n const map = this.getMap();\n const lowerLeft = map.getCoordinateFromPixel([\n event.pixel[0] - this.snapTolerance_,\n event.pixel[1] + this.snapTolerance_,\n ]);\n const upperRight = map.getCoordinateFromPixel([\n event.pixel[0] + this.snapTolerance_,\n event.pixel[1] - this.snapTolerance_,\n ]);\n const extent = boundingExtent([lowerLeft, upperRight]);\n const features = this.traceSource_.getFeaturesInExtent(extent);\n if (features.length === 0) {\n return;\n }\n\n const targets = getTraceTargets(event.coordinate, features);\n if (targets.length) {\n this.traceState_ = {\n active: true,\n startPx: event.pixel.slice(),\n targets: targets,\n targetIndex: -1,\n };\n }\n }\n\n /**\n * @param {TraceTarget} target The trace target.\n * @param {number} endIndex The new end index of the trace.\n * @private\n */\n addOrRemoveTracedCoordinates_(target, endIndex) {\n // three cases to handle:\n // 1. traced in the same direction and points need adding\n // 2. traced in the same direction and points need removing\n // 3. traced in a new direction\n const previouslyForward = target.startIndex <= target.endIndex;\n const currentlyForward = target.startIndex <= endIndex;\n if (previouslyForward === currentlyForward) {\n // same direction\n if (\n (previouslyForward && endIndex > target.endIndex) ||\n (!previouslyForward && endIndex < target.endIndex)\n ) {\n // case 1 - add new points\n this.addTracedCoordinates_(target, target.endIndex, endIndex);\n } else if (\n (previouslyForward && endIndex < target.endIndex) ||\n (!previouslyForward && endIndex > target.endIndex)\n ) {\n // case 2 - remove old points\n this.removeTracedCoordinates_(endIndex, target.endIndex);\n }\n } else {\n // case 3 - remove old points, add new points\n this.removeTracedCoordinates_(target.startIndex, target.endIndex);\n this.addTracedCoordinates_(target, target.startIndex, endIndex);\n }\n }\n\n /**\n * @param {number} fromIndex The start index.\n * @param {number} toIndex The end index.\n * @private\n */\n removeTracedCoordinates_(fromIndex, toIndex) {\n if (fromIndex === toIndex) {\n return;\n }\n\n let remove = 0;\n if (fromIndex < toIndex) {\n const start = Math.ceil(fromIndex);\n let end = Math.floor(toIndex);\n if (end === toIndex) {\n end -= 1;\n }\n remove = end - start + 1;\n } else {\n const start = Math.floor(fromIndex);\n let end = Math.ceil(toIndex);\n if (end === toIndex) {\n end += 1;\n }\n remove = start - end + 1;\n }\n\n if (remove > 0) {\n this.removeLastPoints_(remove);\n }\n }\n\n /**\n * @param {TraceTarget} target The trace target.\n * @param {number} fromIndex The start index.\n * @param {number} toIndex The end index.\n * @private\n */\n addTracedCoordinates_(target, fromIndex, toIndex) {\n if (fromIndex === toIndex) {\n return;\n }\n\n const coordinates = [];\n if (fromIndex < toIndex) {\n // forward trace\n const start = Math.ceil(fromIndex);\n let end = Math.floor(toIndex);\n if (end === toIndex) {\n // if end is snapped to a vertex, it will be added later\n end -= 1;\n }\n for (let i = start; i <= end; ++i) {\n coordinates.push(getCoordinate(target.coordinates, i));\n }\n } else {\n // reverse trace\n const start = Math.floor(fromIndex);\n let end = Math.ceil(toIndex);\n if (end === toIndex) {\n end += 1;\n }\n for (let i = start; i >= end; --i) {\n coordinates.push(getCoordinate(target.coordinates, i));\n }\n }\n if (coordinates.length) {\n this.appendCoordinates(coordinates);\n }\n }\n\n /**\n * Update the trace.\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @private\n */\n updateTrace_(event) {\n const traceState = this.traceState_;\n if (!traceState.active) {\n return;\n }\n\n if (traceState.targetIndex === -1) {\n // check if we are ready to pick a target\n if (distance(traceState.startPx, event.pixel) < this.snapTolerance_) {\n return;\n }\n }\n\n const updatedTraceTarget = getTraceTargetUpdate(\n event.coordinate,\n traceState,\n this.getMap(),\n this.snapTolerance_,\n );\n\n if (traceState.targetIndex !== updatedTraceTarget.index) {\n // target changed\n if (traceState.targetIndex !== -1) {\n // remove points added during previous trace\n const oldTarget = traceState.targets[traceState.targetIndex];\n this.removeTracedCoordinates_(oldTarget.startIndex, oldTarget.endIndex);\n }\n // add points for the new target\n const newTarget = traceState.targets[updatedTraceTarget.index];\n this.addTracedCoordinates_(\n newTarget,\n newTarget.startIndex,\n updatedTraceTarget.endIndex,\n );\n } else {\n // target stayed the same\n const target = traceState.targets[traceState.targetIndex];\n this.addOrRemoveTracedCoordinates_(target, updatedTraceTarget.endIndex);\n }\n\n // modify the state with updated info\n traceState.targetIndex = updatedTraceTarget.index;\n const target = traceState.targets[traceState.targetIndex];\n target.endIndex = updatedTraceTarget.endIndex;\n\n // update event coordinate and pixel to match end point of final segment\n const coordinate = interpolateCoordinate(\n target.coordinates,\n target.endIndex,\n );\n const pixel = this.getMap().getPixelFromCoordinate(coordinate);\n event.coordinate = coordinate;\n event.pixel = [Math.round(pixel[0]), Math.round(pixel[1])];\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(event) {\n let pass = true;\n\n if (this.getPointerCount() === 0) {\n if (this.downTimeout_) {\n clearTimeout(this.downTimeout_);\n this.downTimeout_ = undefined;\n }\n\n this.handlePointerMove_(event);\n const tracing = this.traceState_.active;\n this.toggleTraceState_(event);\n\n if (this.shouldHandle_) {\n const startingToDraw = !this.finishCoordinate_;\n if (startingToDraw) {\n this.startDrawing_(event.coordinate);\n }\n if (!startingToDraw && this.freehand_) {\n this.finishDrawing();\n } else if (\n !this.freehand_ &&\n (!startingToDraw || this.mode_ === 'Point')\n ) {\n if (this.atFinish_(event.pixel, tracing)) {\n if (this.finishCondition_(event)) {\n this.finishDrawing();\n }\n } else {\n this.addToDrawing_(event.coordinate);\n }\n }\n pass = false;\n } else if (this.freehand_) {\n this.abortDrawing();\n }\n }\n\n if (!pass && this.stopClick_) {\n event.preventDefault();\n }\n return pass;\n }\n\n /**\n * Handle move events.\n * @param {import(\"../MapBrowserEvent.js\").default} event A move event.\n * @private\n */\n handlePointerMove_(event) {\n this.pointerType_ = event.originalEvent.pointerType;\n if (\n this.downPx_ &&\n ((!this.freehand_ && this.shouldHandle_) ||\n (this.freehand_ && !this.shouldHandle_))\n ) {\n const downPx = this.downPx_;\n const clickPx = event.pixel;\n const dx = downPx[0] - clickPx[0];\n const dy = downPx[1] - clickPx[1];\n const squaredDistance = dx * dx + dy * dy;\n this.shouldHandle_ = this.freehand_\n ? squaredDistance > this.squaredClickTolerance_\n : squaredDistance <= this.squaredClickTolerance_;\n if (!this.shouldHandle_) {\n return;\n }\n }\n\n if (!this.finishCoordinate_) {\n this.createOrUpdateSketchPoint_(event.coordinate.slice());\n return;\n }\n\n this.updateTrace_(event);\n this.modifyDrawing_(event.coordinate);\n }\n\n /**\n * Determine if an event is within the snapping tolerance of the start coord.\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {boolean} [tracing] Drawing in trace mode (only stop if at the starting point).\n * @return {boolean} The event is within the snapping tolerance of the start.\n * @private\n */\n atFinish_(pixel, tracing) {\n let at = false;\n if (this.sketchFeature_) {\n let potentiallyDone = false;\n let potentiallyFinishCoordinates = [this.finishCoordinate_];\n const mode = this.mode_;\n if (mode === 'Point') {\n at = true;\n } else if (mode === 'Circle') {\n at = this.sketchCoords_.length === 2;\n } else if (mode === 'LineString') {\n potentiallyDone =\n !tracing && this.sketchCoords_.length > this.minPoints_;\n } else if (mode === 'Polygon') {\n const sketchCoords = /** @type {PolyCoordType} */ (this.sketchCoords_);\n potentiallyDone = sketchCoords[0].length > this.minPoints_;\n potentiallyFinishCoordinates = [\n sketchCoords[0][0],\n sketchCoords[0][sketchCoords[0].length - 2],\n ];\n if (tracing) {\n potentiallyFinishCoordinates = [sketchCoords[0][0]];\n } else {\n potentiallyFinishCoordinates = [\n sketchCoords[0][0],\n sketchCoords[0][sketchCoords[0].length - 2],\n ];\n }\n }\n if (potentiallyDone) {\n const map = this.getMap();\n for (let i = 0, ii = potentiallyFinishCoordinates.length; i < ii; i++) {\n const finishCoordinate = potentiallyFinishCoordinates[i];\n const finishPixel = map.getPixelFromCoordinate(finishCoordinate);\n const dx = pixel[0] - finishPixel[0];\n const dy = pixel[1] - finishPixel[1];\n const snapTolerance = this.freehand_ ? 1 : this.snapTolerance_;\n at = Math.sqrt(dx * dx + dy * dy) <= snapTolerance;\n if (at) {\n this.finishCoordinate_ = finishCoordinate;\n break;\n }\n }\n }\n }\n return at;\n }\n\n /**\n * @param {import(\"../coordinate\").Coordinate} coordinates Coordinate.\n * @private\n */\n createOrUpdateSketchPoint_(coordinates) {\n if (!this.sketchPoint_) {\n this.sketchPoint_ = new Feature(new Point(coordinates));\n this.updateSketchFeatures_();\n } else {\n const sketchPointGeom = this.sketchPoint_.getGeometry();\n sketchPointGeom.setCoordinates(coordinates);\n }\n }\n\n /**\n * @param {import(\"../geom/Polygon.js\").default} geometry Polygon geometry.\n * @private\n */\n createOrUpdateCustomSketchLine_(geometry) {\n if (!this.sketchLine_) {\n this.sketchLine_ = new Feature();\n }\n const ring = geometry.getLinearRing(0);\n let sketchLineGeom = this.sketchLine_.getGeometry();\n if (!sketchLineGeom) {\n sketchLineGeom = new LineString(\n ring.getFlatCoordinates(),\n ring.getLayout(),\n );\n this.sketchLine_.setGeometry(sketchLineGeom);\n } else {\n sketchLineGeom.setFlatCoordinates(\n ring.getLayout(),\n ring.getFlatCoordinates(),\n );\n sketchLineGeom.changed();\n }\n }\n\n /**\n * Start the drawing.\n * @param {import(\"../coordinate.js\").Coordinate} start Start coordinate.\n * @private\n */\n startDrawing_(start) {\n const projection = this.getMap().getView().getProjection();\n const stride = getStrideForLayout(this.geometryLayout_);\n while (start.length < stride) {\n start.push(0);\n }\n this.finishCoordinate_ = start;\n if (this.mode_ === 'Point') {\n this.sketchCoords_ = start.slice();\n } else if (this.mode_ === 'Polygon') {\n this.sketchCoords_ = [[start.slice(), start.slice()]];\n this.sketchLineCoords_ = this.sketchCoords_[0];\n } else {\n this.sketchCoords_ = [start.slice(), start.slice()];\n }\n if (this.sketchLineCoords_) {\n this.sketchLine_ = new Feature(new LineString(this.sketchLineCoords_));\n }\n const geometry = this.geometryFunction_(\n this.sketchCoords_,\n undefined,\n projection,\n );\n this.sketchFeature_ = new Feature();\n if (this.geometryName_) {\n this.sketchFeature_.setGeometryName(this.geometryName_);\n }\n this.sketchFeature_.setGeometry(geometry);\n this.updateSketchFeatures_();\n this.dispatchEvent(\n new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_),\n );\n }\n\n /**\n * Modify the drawing.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @private\n */\n modifyDrawing_(coordinate) {\n const map = this.getMap();\n const geometry = this.sketchFeature_.getGeometry();\n const projection = map.getView().getProjection();\n const stride = getStrideForLayout(this.geometryLayout_);\n let coordinates, last;\n while (coordinate.length < stride) {\n coordinate.push(0);\n }\n if (this.mode_ === 'Point') {\n last = this.sketchCoords_;\n } else if (this.mode_ === 'Polygon') {\n coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];\n last = coordinates[coordinates.length - 1];\n if (this.atFinish_(map.getPixelFromCoordinate(coordinate))) {\n // snap to finish\n coordinate = this.finishCoordinate_.slice();\n }\n } else {\n coordinates = this.sketchCoords_;\n last = coordinates[coordinates.length - 1];\n }\n last[0] = coordinate[0];\n last[1] = coordinate[1];\n this.geometryFunction_(\n /** @type {!LineCoordType} */ (this.sketchCoords_),\n geometry,\n projection,\n );\n if (this.sketchPoint_) {\n const sketchPointGeom = this.sketchPoint_.getGeometry();\n sketchPointGeom.setCoordinates(coordinate);\n }\n if (geometry.getType() === 'Polygon' && this.mode_ !== 'Polygon') {\n this.createOrUpdateCustomSketchLine_(/** @type {Polygon} */ (geometry));\n } else if (this.sketchLineCoords_) {\n const sketchLineGeom = this.sketchLine_.getGeometry();\n sketchLineGeom.setCoordinates(this.sketchLineCoords_);\n }\n this.updateSketchFeatures_();\n }\n\n /**\n * Add a new coordinate to the drawing.\n * @param {!PointCoordType} coordinate Coordinate\n * @return {Feature} The sketch feature.\n * @private\n */\n addToDrawing_(coordinate) {\n const geometry = this.sketchFeature_.getGeometry();\n const projection = this.getMap().getView().getProjection();\n let done;\n let coordinates;\n const mode = this.mode_;\n if (mode === 'LineString' || mode === 'Circle') {\n this.finishCoordinate_ = coordinate.slice();\n coordinates = /** @type {LineCoordType} */ (this.sketchCoords_);\n if (coordinates.length >= this.maxPoints_) {\n if (this.freehand_) {\n coordinates.pop();\n } else {\n done = true;\n }\n }\n coordinates.push(coordinate.slice());\n this.geometryFunction_(coordinates, geometry, projection);\n } else if (mode === 'Polygon') {\n coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];\n if (coordinates.length >= this.maxPoints_) {\n if (this.freehand_) {\n coordinates.pop();\n } else {\n done = true;\n }\n }\n coordinates.push(coordinate.slice());\n if (done) {\n this.finishCoordinate_ = coordinates[0];\n }\n this.geometryFunction_(this.sketchCoords_, geometry, projection);\n }\n this.createOrUpdateSketchPoint_(coordinate.slice());\n this.updateSketchFeatures_();\n if (done) {\n return this.finishDrawing();\n }\n return this.sketchFeature_;\n }\n\n /**\n * @param {number} n The number of points to remove.\n */\n removeLastPoints_(n) {\n if (!this.sketchFeature_) {\n return;\n }\n const geometry = this.sketchFeature_.getGeometry();\n const projection = this.getMap().getView().getProjection();\n const mode = this.mode_;\n for (let i = 0; i < n; ++i) {\n let coordinates;\n if (mode === 'LineString' || mode === 'Circle') {\n coordinates = /** @type {LineCoordType} */ (this.sketchCoords_);\n coordinates.splice(-2, 1);\n if (coordinates.length >= 2) {\n this.finishCoordinate_ = coordinates[coordinates.length - 2].slice();\n const finishCoordinate = this.finishCoordinate_.slice();\n coordinates[coordinates.length - 1] = finishCoordinate;\n this.createOrUpdateSketchPoint_(finishCoordinate);\n }\n this.geometryFunction_(coordinates, geometry, projection);\n if (geometry.getType() === 'Polygon' && this.sketchLine_) {\n this.createOrUpdateCustomSketchLine_(\n /** @type {Polygon} */ (geometry),\n );\n }\n } else if (mode === 'Polygon') {\n coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];\n coordinates.splice(-2, 1);\n const sketchLineGeom = this.sketchLine_.getGeometry();\n if (coordinates.length >= 2) {\n const finishCoordinate = coordinates[coordinates.length - 2].slice();\n coordinates[coordinates.length - 1] = finishCoordinate;\n this.createOrUpdateSketchPoint_(finishCoordinate);\n }\n sketchLineGeom.setCoordinates(coordinates);\n this.geometryFunction_(this.sketchCoords_, geometry, projection);\n }\n\n if (coordinates.length === 1) {\n this.abortDrawing();\n break;\n }\n }\n\n this.updateSketchFeatures_();\n }\n\n /**\n * Remove last point of the feature currently being drawn. Does not do anything when\n * drawing POINT or MULTI_POINT geometries.\n * @api\n */\n removeLastPoint() {\n this.removeLastPoints_(1);\n }\n\n /**\n * Stop drawing and add the sketch feature to the target layer.\n * The {@link module:ol/interaction/Draw~DrawEventType.DRAWEND} event is\n * dispatched before inserting the feature.\n * @return {Feature|null} The drawn feature.\n * @api\n */\n finishDrawing() {\n const sketchFeature = this.abortDrawing_();\n if (!sketchFeature) {\n return null;\n }\n let coordinates = this.sketchCoords_;\n const geometry = sketchFeature.getGeometry();\n const projection = this.getMap().getView().getProjection();\n if (this.mode_ === 'LineString') {\n // remove the redundant last point\n coordinates.pop();\n this.geometryFunction_(coordinates, geometry, projection);\n } else if (this.mode_ === 'Polygon') {\n // remove the redundant last point in ring\n /** @type {PolyCoordType} */ (coordinates)[0].pop();\n this.geometryFunction_(coordinates, geometry, projection);\n coordinates = geometry.getCoordinates();\n }\n\n // cast multi-part geometries\n if (this.type_ === 'MultiPoint') {\n sketchFeature.setGeometry(\n new MultiPoint([/** @type {PointCoordType} */ (coordinates)]),\n );\n } else if (this.type_ === 'MultiLineString') {\n sketchFeature.setGeometry(\n new MultiLineString([/** @type {LineCoordType} */ (coordinates)]),\n );\n } else if (this.type_ === 'MultiPolygon') {\n sketchFeature.setGeometry(\n new MultiPolygon([/** @type {PolyCoordType} */ (coordinates)]),\n );\n }\n\n // First dispatch event to allow full set up of feature\n this.dispatchEvent(new DrawEvent(DrawEventType.DRAWEND, sketchFeature));\n\n // Then insert feature\n if (this.features_) {\n this.features_.push(sketchFeature);\n }\n if (this.source_) {\n this.source_.addFeature(sketchFeature);\n }\n return sketchFeature;\n }\n\n /**\n * Stop drawing without adding the sketch feature to the target layer.\n * @return {Feature|null} The sketch feature (or null if none).\n * @private\n */\n abortDrawing_() {\n this.finishCoordinate_ = null;\n const sketchFeature = this.sketchFeature_;\n this.sketchFeature_ = null;\n this.sketchPoint_ = null;\n this.sketchLine_ = null;\n this.overlay_.getSource().clear(true);\n this.deactivateTrace_();\n return sketchFeature;\n }\n\n /**\n * Stop drawing without adding the sketch feature to the target layer.\n * @api\n */\n abortDrawing() {\n const sketchFeature = this.abortDrawing_();\n if (sketchFeature) {\n this.dispatchEvent(new DrawEvent(DrawEventType.DRAWABORT, sketchFeature));\n }\n }\n\n /**\n * Append coordinates to the end of the geometry that is currently being drawn.\n * This can be used when drawing LineStrings or Polygons. Coordinates will\n * either be appended to the current LineString or the outer ring of the current\n * Polygon. If no geometry is being drawn, a new one will be created.\n * @param {!LineCoordType} coordinates Linear coordinates to be appended to\n * the coordinate array.\n * @api\n */\n appendCoordinates(coordinates) {\n const mode = this.mode_;\n const newDrawing = !this.sketchFeature_;\n if (newDrawing) {\n this.startDrawing_(coordinates[0]);\n }\n /** @type {LineCoordType} */\n let sketchCoords;\n if (mode === 'LineString' || mode === 'Circle') {\n sketchCoords = /** @type {LineCoordType} */ (this.sketchCoords_);\n } else if (mode === 'Polygon') {\n sketchCoords =\n this.sketchCoords_ && this.sketchCoords_.length\n ? /** @type {PolyCoordType} */ (this.sketchCoords_)[0]\n : [];\n } else {\n return;\n }\n\n if (newDrawing) {\n sketchCoords.shift();\n }\n\n // Remove last coordinate from sketch drawing (this coordinate follows cursor position)\n sketchCoords.pop();\n\n // Append coordinate list\n for (let i = 0; i < coordinates.length; i++) {\n this.addToDrawing_(coordinates[i]);\n }\n\n const ending = coordinates[coordinates.length - 1];\n // Duplicate last coordinate for sketch drawing (cursor position)\n this.sketchFeature_ = this.addToDrawing_(ending);\n this.modifyDrawing_(ending);\n }\n\n /**\n * Initiate draw mode by starting from an existing geometry which will\n * receive new additional points. This only works on features with\n * `LineString` geometries, where the interaction will extend lines by adding\n * points to the end of the coordinates array.\n * This will change the original feature, instead of drawing a copy.\n *\n * The function will dispatch a `drawstart` event.\n *\n * @param {!Feature} feature Feature to be extended.\n * @api\n */\n extend(feature) {\n const geometry = feature.getGeometry();\n const lineString = geometry;\n this.sketchFeature_ = feature;\n this.sketchCoords_ = lineString.getCoordinates();\n const last = this.sketchCoords_[this.sketchCoords_.length - 1];\n this.finishCoordinate_ = last.slice();\n this.sketchCoords_.push(last.slice());\n this.sketchPoint_ = new Feature(new Point(last));\n this.updateSketchFeatures_();\n this.dispatchEvent(\n new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_),\n );\n }\n\n /**\n * Redraw the sketch features.\n * @private\n */\n updateSketchFeatures_() {\n const sketchFeatures = [];\n if (this.sketchFeature_) {\n sketchFeatures.push(this.sketchFeature_);\n }\n if (this.sketchLine_) {\n sketchFeatures.push(this.sketchLine_);\n }\n if (this.sketchPoint_) {\n sketchFeatures.push(this.sketchPoint_);\n }\n const overlaySource = this.overlay_.getSource();\n overlaySource.clear(true);\n overlaySource.addFeatures(sketchFeatures);\n }\n\n /**\n * @private\n */\n updateState_() {\n const map = this.getMap();\n const active = this.getActive();\n if (!map || !active) {\n this.abortDrawing();\n }\n this.overlay_.setMap(active ? map : null);\n }\n}\n\n/**\n * @return {import(\"../style/Style.js\").StyleFunction} Styles.\n */\nfunction getDefaultStyleFunction() {\n const styles = createEditingStyle();\n return function (feature, resolution) {\n return styles[feature.getGeometry().getType()];\n };\n}\n\n/**\n * Create a `geometryFunction` for `type: 'Circle'` that will create a regular\n * polygon with a user specified number of sides and start angle instead of a\n * {@link import(\"../geom/Circle.js\").Circle} geometry.\n * @param {number} [sides] Number of sides of the regular polygon.\n * Default is 32.\n * @param {number} [angle] Angle of the first point in counter-clockwise\n * radians. 0 means East.\n * Default is the angle defined by the heading from the center of the\n * regular polygon to the current pointer position.\n * @return {GeometryFunction} Function that draws a polygon.\n * @api\n */\nexport function createRegularPolygon(sides, angle) {\n return function (coordinates, geometry, projection) {\n const center = fromUserCoordinate(\n /** @type {LineCoordType} */ (coordinates)[0],\n projection,\n );\n const end = fromUserCoordinate(\n /** @type {LineCoordType} */ (coordinates)[coordinates.length - 1],\n projection,\n );\n const radius = Math.sqrt(squaredCoordinateDistance(center, end));\n geometry = geometry || fromCircle(new Circle(center), sides);\n\n let internalAngle = angle;\n if (!angle && angle !== 0) {\n const x = end[0] - center[0];\n const y = end[1] - center[1];\n internalAngle = Math.atan2(y, x);\n }\n makeRegular(\n /** @type {Polygon} */ (geometry),\n center,\n radius,\n internalAngle,\n );\n\n const userProjection = getUserProjection();\n if (userProjection) {\n geometry.transform(projection, userProjection);\n }\n return geometry;\n };\n}\n\n/**\n * Create a `geometryFunction` that will create a box-shaped polygon (aligned\n * with the coordinate system axes). Use this with the draw interaction and\n * `type: 'Circle'` to return a box instead of a circle geometry.\n * @return {GeometryFunction} Function that draws a box-shaped polygon.\n * @api\n */\nexport function createBox() {\n return function (coordinates, geometry, projection) {\n const extent = boundingExtent(\n /** @type {LineCoordType} */ ([\n coordinates[0],\n coordinates[coordinates.length - 1],\n ]).map(function (coordinate) {\n return fromUserCoordinate(coordinate, projection);\n }),\n );\n const boxCoordinates = [\n [\n getBottomLeft(extent),\n getBottomRight(extent),\n getTopRight(extent),\n getTopLeft(extent),\n getBottomLeft(extent),\n ],\n ];\n if (geometry) {\n geometry.setCoordinates(boxCoordinates);\n } else {\n geometry = new Polygon(boxCoordinates);\n }\n const userProjection = getUserProjection();\n if (userProjection) {\n geometry.transform(projection, userProjection);\n }\n return geometry;\n };\n}\n\n/**\n * Get the drawing mode. The mode for multi-part geometries is the same as for\n * their single-part cousins.\n * @param {import(\"../geom/Geometry.js\").Type} type Geometry type.\n * @return {Mode} Drawing mode.\n */\nfunction getMode(type) {\n switch (type) {\n case 'Point':\n case 'MultiPoint':\n return 'Point';\n case 'LineString':\n case 'MultiLineString':\n return 'LineString';\n case 'Polygon':\n case 'MultiPolygon':\n return 'Polygon';\n case 'Circle':\n return 'Circle';\n default:\n throw new Error('Invalid type: ' + type);\n }\n}\n\nexport default Draw;\n"], - "mappings": "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", + "mappings": "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", "names": ["squaredDistance", "Vector_default", "target"] } diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Pointer__js.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Pointer__js.js new file mode 100644 index 0000000..4a3d045 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Pointer__js.js @@ -0,0 +1,15 @@ +import { + Pointer_default, + centroid +} from "./chunk-LKZG5HMW.js"; +import "./chunk-F2HSAX6I.js"; +import "./chunk-LMC3RO5P.js"; +import "./chunk-POVGKIBQ.js"; +import "./chunk-V2VQBN44.js"; +import "./chunk-33VDV4DG.js"; +import "./chunk-FQY6EMA7.js"; +import "./chunk-V6TY7KAL.js"; +export { + centroid, + Pointer_default as default +}; diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Pointer__js.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Pointer__js.js.map new file mode 100644 index 0000000..9865211 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Pointer__js.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Select.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Select.js index a1e4c4f..6f2ba24 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Select.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Select.js @@ -1,55 +1,57 @@ +import { + Feature_default +} from "./chunk-ATTNMDTG.js"; import { Vector_default -} from "./chunk-VQAOIZZU.js"; +} from "./chunk-HFPY7EDW.js"; import { createEditingStyle -} from "./chunk-LKGRVZZI.js"; -import "./chunk-6SP66AVH.js"; -import "./chunk-S7HK3S7W.js"; -import "./chunk-33EAEVLP.js"; +} from "./chunk-GKDSB34V.js"; +import "./chunk-RW3V7S4F.js"; +import "./chunk-JFXZSSOM.js"; +import "./chunk-VWBYIKLE.js"; import "./chunk-FM44FOIC.js"; import "./chunk-WEQYAO4O.js"; -import "./chunk-PPP4FLHO.js"; +import "./chunk-RMGZ5HGX.js"; +import "./chunk-47JK3GLV.js"; +import "./chunk-TRW2RYAI.js"; +import "./chunk-QIVUQU5K.js"; import { Interaction_default } from "./chunk-F2HSAX6I.js"; import "./chunk-LMC3RO5P.js"; -import "./chunk-RW3V7S4F.js"; import { - Feature_default -} from "./chunk-GAPTD7YR.js"; + CollectionEventType_default, + Collection_default +} from "./chunk-4E4H2AGX.js"; +import "./chunk-S7HK3S7W.js"; +import "./chunk-33EAEVLP.js"; +import "./chunk-PPP4FLHO.js"; import { never, shiftKeyOnly, singleClick -} from "./chunk-OOF5364O.js"; +} from "./chunk-VAUZYTLA.js"; import "./chunk-ZPDML4Q3.js"; -import "./chunk-5CPSJRE2.js"; -import { - CollectionEventType_default, - Collection_default -} from "./chunk-4E4H2AGX.js"; -import "./chunk-JFXZSSOM.js"; -import "./chunk-TRW2RYAI.js"; -import "./chunk-QIVUQU5K.js"; -import "./chunk-QJJYQF6H.js"; -import "./chunk-W2FV6P6N.js"; +import "./chunk-POVGKIBQ.js"; +import "./chunk-G3HPQ3BH.js"; +import "./chunk-6GRRGW6V.js"; import "./chunk-MPRNTLUM.js"; import "./chunk-5ACH5F45.js"; -import "./chunk-QFCIXVZ3.js"; +import "./chunk-WXT7AISE.js"; import { Event_default, clear, getUid } from "./chunk-V2VQBN44.js"; +import "./chunk-V7KTD4MH.js"; +import "./chunk-QFCIXVZ3.js"; import { TRUE } from "./chunk-33VDV4DG.js"; import { extend } from "./chunk-FQY6EMA7.js"; -import "./chunk-WXT7AISE.js"; -import "./chunk-V7KTD4MH.js"; import "./chunk-V6TY7KAL.js"; // node_modules/ol/interaction/Select.js diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Select.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Select.js.map index c1207b3..8eab372 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Select.js.map +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Select.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../../ol/interaction/Select.js"], "sourcesContent": ["/**\n * @module ol/interaction/Select\n */\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport Feature from '../Feature.js';\nimport {extend} from '../array.js';\nimport Event from '../events/Event.js';\nimport {never, shiftKeyOnly, singleClick} from '../events/condition.js';\nimport {TRUE} from '../functions.js';\nimport VectorLayer from '../layer/Vector.js';\nimport {clear} from '../obj.js';\nimport {createEditingStyle} from '../style/Style.js';\nimport {getUid} from '../util.js';\nimport Interaction from './Interaction.js';\n\n/**\n * @enum {string}\n */\nconst SelectEventType = {\n /**\n * Triggered when feature(s) has been (de)selected.\n * @event SelectEvent#select\n * @api\n */\n SELECT: 'select',\n};\n\n/**\n * A function that takes a {@link module:ol/Feature~Feature} and returns `true` if the feature may be\n * selected or `false` otherwise.\n * @typedef {function(import(\"../Feature.js\").default, import(\"../layer/Layer.js\").default):boolean} FilterFunction\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [addCondition] A function\n * that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * By default, this is {@link module:ol/events/condition.never}. Use this if you\n * want to use different events for add and remove instead of `toggle`.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. This is the event\n * for the selected features as a whole. By default, this is\n * {@link module:ol/events/condition.singleClick}. Clicking on a feature selects that\n * feature and removes any that were in the selection. Clicking outside any\n * feature removes all from the selection.\n * See `toggle`, `add`, `remove` options for adding/removing extra features to/\n * from the selection.\n * @property {Array|function(import(\"../layer/Layer.js\").default): boolean} [layers]\n * A list of layers from which features should be selected. Alternatively, a\n * filter function can be provided. The function will be called for each layer\n * in the map and should return `true` for layers that you want to be\n * selectable. If the option is absent, all visible layers will be considered\n * selectable.\n * @property {import(\"../style/Style.js\").StyleLike|null} [style]\n * Style for the selected features. By default the default edit style is used\n * (see {@link module:ol/style/Style~Style}). Set to `null` if this interaction should not apply\n * any style changes for selected features.\n * If set to a falsey value, the selected feature's style will not change.\n * @property {import(\"../events/condition.js\").Condition} [removeCondition] A function\n * that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * By default, this is {@link module:ol/events/condition.never}. Use this if you\n * want to use different events for add and remove instead of `toggle`.\n * @property {import(\"../events/condition.js\").Condition} [toggleCondition] A function\n * that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. This is in addition\n * to the `condition` event. By default,\n * {@link module:ol/events/condition.shiftKeyOnly}, i.e. pressing `shift` as\n * well as the `condition` event, adds that feature to the current selection if\n * it is not currently selected, and removes it if it is. See `add` and `remove`\n * if you want to use different events instead of a toggle.\n * @property {boolean} [multi=false] A boolean that determines if the default\n * behaviour should select only single features or all (overlapping) features at\n * the clicked map position. The default of `false` means single select.\n * @property {Collection} [features]\n * Collection where the interaction will place selected features. Optional. If\n * not set the interaction will create a collection. In any case the collection\n * used by the interaction is returned by\n * {@link module:ol/interaction/Select~Select#getFeatures}.\n * @property {FilterFunction} [filter] A function\n * that takes a {@link module:ol/Feature~Feature} and a\n * {@link module:ol/layer/Layer~Layer} and returns `true` if the feature may be\n * selected or `false` otherwise.\n * @property {number} [hitTolerance=0] Hit-detection tolerance. Pixels inside\n * the radius around the given position will be checked for features.\n */\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/Select~Select} instances are instances of\n * this type.\n */\nexport class SelectEvent extends Event {\n /**\n * @param {SelectEventType} type The event type.\n * @param {Array} selected Selected features.\n * @param {Array} deselected Deselected features.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Associated\n * {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n */\n constructor(type, selected, deselected, mapBrowserEvent) {\n super(type);\n\n /**\n * Selected features array.\n * @type {Array}\n * @api\n */\n this.selected = selected;\n\n /**\n * Deselected features array.\n * @type {Array}\n * @api\n */\n this.deselected = deselected;\n\n /**\n * Associated {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @type {import(\"../MapBrowserEvent.js\").default}\n * @api\n */\n this.mapBrowserEvent = mapBrowserEvent;\n }\n}\n\n/**\n * Original feature styles to reset to when features are no longer selected.\n * @type {Object|import(\"../style/Style.js\").StyleFunction>}\n */\nconst originalFeatureStyles = {};\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature<'select', SelectEvent, Return> &\n * import(\"../Observable\").CombinedOnSignature} SelectOnSignature\n */\n\n/**\n * @classdesc\n * Interaction for selecting vector features. By default, selected features are\n * styled differently, so this interaction can be used for visual highlighting,\n * as well as selecting features for other actions, such as modification or\n * output. There are three ways of controlling which features are selected:\n * using the browser event as defined by the `condition` and optionally the\n * `toggle`, `add`/`remove`, and `multi` options; a `layers` filter; and a\n * further feature filter using the `filter` option.\n *\n * @fires SelectEvent\n * @api\n */\nclass Select extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {SelectOnSignature}\n */\n this.on;\n\n /***\n * @type {SelectOnSignature}\n */\n this.once;\n\n /***\n * @type {SelectOnSignature}\n */\n this.un;\n\n options = options ? options : {};\n\n /**\n * @private\n */\n this.boundAddFeature_ = this.addFeature_.bind(this);\n\n /**\n * @private\n */\n this.boundRemoveFeature_ = this.removeFeature_.bind(this);\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : singleClick;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.addCondition_ = options.addCondition ? options.addCondition : never;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.removeCondition_ = options.removeCondition\n ? options.removeCondition\n : never;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.toggleCondition_ = options.toggleCondition\n ? options.toggleCondition\n : shiftKeyOnly;\n\n /**\n * @private\n * @type {boolean}\n */\n this.multi_ = options.multi ? options.multi : false;\n\n /**\n * @private\n * @type {FilterFunction}\n */\n this.filter_ = options.filter ? options.filter : TRUE;\n\n /**\n * @private\n * @type {number}\n */\n this.hitTolerance_ = options.hitTolerance ? options.hitTolerance : 0;\n\n /**\n * @private\n * @type {import(\"../style/Style.js\").default|Array|import(\"../style/Style.js\").StyleFunction|null}\n */\n this.style_ =\n options.style !== undefined ? options.style : getDefaultStyleFunction();\n\n /**\n * @private\n * @type {Collection}\n */\n this.features_ = options.features || new Collection();\n\n /** @type {function(import(\"../layer/Layer.js\").default): boolean} */\n let layerFilter;\n if (options.layers) {\n if (typeof options.layers === 'function') {\n layerFilter = options.layers;\n } else {\n const layers = options.layers;\n layerFilter = function (layer) {\n return layers.includes(layer);\n };\n }\n } else {\n layerFilter = TRUE;\n }\n\n /**\n * @private\n * @type {function(import(\"../layer/Layer.js\").default): boolean}\n */\n this.layerFilter_ = layerFilter;\n\n /**\n * An association between selected feature (key)\n * and layer (value)\n * @private\n * @type {Object}\n */\n this.featureLayerAssociation_ = {};\n }\n\n /**\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @private\n */\n addFeatureLayerAssociation_(feature, layer) {\n this.featureLayerAssociation_[getUid(feature)] = layer;\n }\n\n /**\n * Get the selected features.\n * @return {Collection} Features collection.\n * @api\n */\n getFeatures() {\n return this.features_;\n }\n\n /**\n * Returns the Hit-detection tolerance.\n * @return {number} Hit tolerance in pixels.\n * @api\n */\n getHitTolerance() {\n return this.hitTolerance_;\n }\n\n /**\n * Returns the associated {@link module:ol/layer/Vector~VectorLayer vector layer} of\n * a selected feature.\n * @param {import(\"../Feature.js\").default} feature Feature\n * @return {import('../layer/Vector.js').default} Layer.\n * @api\n */\n getLayer(feature) {\n return /** @type {import('../layer/Vector.js').default} */ (\n this.featureLayerAssociation_[getUid(feature)]\n );\n }\n\n /**\n * Hit-detection tolerance. Pixels inside the radius around the given position\n * will be checked for features.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @api\n */\n setHitTolerance(hitTolerance) {\n this.hitTolerance_ = hitTolerance;\n }\n\n /**\n * Remove the interaction from its current map, if any, and attach it to a new\n * map, if any. Pass `null` to just remove the interaction from the current map.\n * @param {import(\"../Map.js\").default|null} map Map.\n * @api\n * @override\n */\n setMap(map) {\n const currentMap = this.getMap();\n if (currentMap && this.style_) {\n this.features_.forEach(this.restorePreviousStyle_.bind(this));\n }\n super.setMap(map);\n if (map) {\n this.features_.addEventListener(\n CollectionEventType.ADD,\n this.boundAddFeature_,\n );\n this.features_.addEventListener(\n CollectionEventType.REMOVE,\n this.boundRemoveFeature_,\n );\n\n if (this.style_) {\n this.features_.forEach(this.applySelectedStyle_.bind(this));\n }\n } else {\n this.features_.removeEventListener(\n CollectionEventType.ADD,\n this.boundAddFeature_,\n );\n this.features_.removeEventListener(\n CollectionEventType.REMOVE,\n this.boundRemoveFeature_,\n );\n }\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} evt Event.\n * @private\n */\n addFeature_(evt) {\n const feature = evt.element;\n if (this.style_) {\n this.applySelectedStyle_(feature);\n }\n if (!this.getLayer(feature)) {\n const layer = /** @type {VectorLayer} */ (\n this.getMap()\n .getAllLayers()\n .find(function (layer) {\n if (\n layer instanceof VectorLayer &&\n layer.getSource() &&\n layer.getSource().hasFeature(feature)\n ) {\n return layer;\n }\n })\n );\n if (layer) {\n this.addFeatureLayerAssociation_(feature, layer);\n }\n }\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} evt Event.\n * @private\n */\n removeFeature_(evt) {\n if (this.style_) {\n this.restorePreviousStyle_(evt.element);\n }\n }\n\n /**\n * @return {import(\"../style/Style.js\").StyleLike|null} Select style.\n */\n getStyle() {\n return this.style_;\n }\n\n /**\n * @param {Feature} feature Feature\n * @private\n */\n applySelectedStyle_(feature) {\n const key = getUid(feature);\n if (!(key in originalFeatureStyles)) {\n originalFeatureStyles[key] = feature.getStyle();\n }\n feature.setStyle(this.style_);\n }\n\n /**\n * @param {Feature} feature Feature\n * @private\n */\n restorePreviousStyle_(feature) {\n const interactions = this.getMap().getInteractions().getArray();\n for (let i = interactions.length - 1; i >= 0; --i) {\n const interaction = interactions[i];\n if (\n interaction !== this &&\n interaction instanceof Select &&\n interaction.getStyle() &&\n interaction.getFeatures().getArray().lastIndexOf(feature) !== -1\n ) {\n feature.setStyle(interaction.getStyle());\n return;\n }\n }\n\n const key = getUid(feature);\n feature.setStyle(originalFeatureStyles[key]);\n delete originalFeatureStyles[key];\n }\n\n /**\n * @param {Feature} feature Feature.\n * @private\n */\n removeFeatureLayerAssociation_(feature) {\n delete this.featureLayerAssociation_[getUid(feature)];\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} and may change the\n * selected state of features.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n if (!this.condition_(mapBrowserEvent)) {\n return true;\n }\n const add = this.addCondition_(mapBrowserEvent);\n const remove = this.removeCondition_(mapBrowserEvent);\n const toggle = this.toggleCondition_(mapBrowserEvent);\n const set = !add && !remove && !toggle;\n const map = mapBrowserEvent.map;\n const features = this.getFeatures();\n\n /**\n * @type {Array}\n */\n const deselected = [];\n\n /**\n * @type {Array}\n */\n const selected = [];\n\n if (set) {\n // Replace the currently selected feature(s) with the feature(s) at the\n // pixel, or clear the selected feature(s) if there is no feature at\n // the pixel.\n clear(this.featureLayerAssociation_);\n map.forEachFeatureAtPixel(\n mapBrowserEvent.pixel,\n /**\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @return {boolean|undefined} Continue to iterate over the features.\n */\n (feature, layer) => {\n if (!(feature instanceof Feature) || !this.filter_(feature, layer)) {\n return;\n }\n this.addFeatureLayerAssociation_(feature, layer);\n selected.push(feature);\n return !this.multi_;\n },\n {\n layerFilter: this.layerFilter_,\n hitTolerance: this.hitTolerance_,\n },\n );\n for (let i = features.getLength() - 1; i >= 0; --i) {\n const feature = features.item(i);\n const index = selected.indexOf(feature);\n if (index > -1) {\n // feature is already selected\n selected.splice(index, 1);\n } else {\n features.remove(feature);\n deselected.push(feature);\n }\n }\n if (selected.length !== 0) {\n features.extend(selected);\n }\n } else {\n // Modify the currently selected feature(s).\n map.forEachFeatureAtPixel(\n mapBrowserEvent.pixel,\n /**\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @return {boolean|undefined} Continue to iterate over the features.\n */\n (feature, layer) => {\n if (!(feature instanceof Feature) || !this.filter_(feature, layer)) {\n return;\n }\n if ((add || toggle) && !features.getArray().includes(feature)) {\n this.addFeatureLayerAssociation_(feature, layer);\n selected.push(feature);\n } else if (\n (remove || toggle) &&\n features.getArray().includes(feature)\n ) {\n deselected.push(feature);\n this.removeFeatureLayerAssociation_(feature);\n }\n return !this.multi_;\n },\n {\n layerFilter: this.layerFilter_,\n hitTolerance: this.hitTolerance_,\n },\n );\n for (let j = deselected.length - 1; j >= 0; --j) {\n features.remove(deselected[j]);\n }\n features.extend(selected);\n }\n if (selected.length > 0 || deselected.length > 0) {\n this.dispatchEvent(\n new SelectEvent(\n SelectEventType.SELECT,\n selected,\n deselected,\n mapBrowserEvent,\n ),\n );\n }\n return true;\n }\n}\n\n/**\n * @return {import(\"../style/Style.js\").StyleFunction} Styles.\n */\nfunction getDefaultStyleFunction() {\n const styles = createEditingStyle();\n extend(styles['Polygon'], styles['LineString']);\n extend(styles['GeometryCollection'], styles['LineString']);\n\n return function (feature) {\n if (!feature.getGeometry()) {\n return null;\n }\n return styles[feature.getGeometry().getType()];\n };\n}\n\nexport default Select;\n"], - "mappings": "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", + "mappings": "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", "names": ["layer"] } diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Translate.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Translate.js index 1593ef3..dd4bb05 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Translate.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Translate.js @@ -1,34 +1,35 @@ +import { + Feature_default +} from "./chunk-ATTNMDTG.js"; import { Pointer_default -} from "./chunk-UWCYJJIT.js"; +} from "./chunk-LKZG5HMW.js"; import { Property_default } from "./chunk-F2HSAX6I.js"; import "./chunk-LMC3RO5P.js"; import { - Feature_default -} from "./chunk-GAPTD7YR.js"; + Collection_default +} from "./chunk-4E4H2AGX.js"; import { always -} from "./chunk-OOF5364O.js"; +} from "./chunk-VAUZYTLA.js"; import "./chunk-ZPDML4Q3.js"; -import { - Collection_default -} from "./chunk-4E4H2AGX.js"; +import "./chunk-POVGKIBQ.js"; import { fromUserCoordinate, getUserProjection } from "./chunk-5ACH5F45.js"; -import "./chunk-QFCIXVZ3.js"; +import "./chunk-WXT7AISE.js"; import { Event_default } from "./chunk-V2VQBN44.js"; +import "./chunk-V7KTD4MH.js"; +import "./chunk-QFCIXVZ3.js"; import { TRUE } from "./chunk-33VDV4DG.js"; import "./chunk-FQY6EMA7.js"; -import "./chunk-WXT7AISE.js"; -import "./chunk-V7KTD4MH.js"; import "./chunk-V6TY7KAL.js"; // node_modules/ol/interaction/Translate.js diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Translate.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Translate.js.map index 898ea36..e7a07b5 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Translate.js.map +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_Translate.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../../ol/interaction/Translate.js"], "sourcesContent": ["/**\n * @module ol/interaction/Translate\n */\nimport Collection from '../Collection.js';\nimport Feature from '../Feature.js';\nimport Event from '../events/Event.js';\nimport {always} from '../events/condition.js';\nimport {TRUE} from '../functions.js';\nimport {fromUserCoordinate, getUserProjection} from '../proj.js';\nimport PointerInteraction from './Pointer.js';\nimport InteractionProperty from './Property.js';\n\n/**\n * @enum {string}\n */\nconst TranslateEventType = {\n /**\n * Triggered upon feature translation start.\n * @event TranslateEvent#translatestart\n * @api\n */\n TRANSLATESTART: 'translatestart',\n /**\n * Triggered upon feature translation.\n * @event TranslateEvent#translating\n * @api\n */\n TRANSLATING: 'translating',\n /**\n * Triggered upon feature translation end.\n * @event TranslateEvent#translateend\n * @api\n */\n TRANSLATEEND: 'translateend',\n};\n\n/**\n * A function that takes a {@link module:ol/Feature~Feature} or\n * {@link module:ol/render/Feature~RenderFeature} and a\n * {@link module:ol/layer/Layer~Layer} and returns `true` if the feature may be\n * translated or `false` otherwise.\n * @typedef {function(Feature, import(\"../layer/Layer.js\").default):boolean} FilterFunction\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.always}.\n * @property {Collection} [features] Features contained in this collection will be able to be translated together.\n * @property {Array|function(import(\"../layer/Layer.js\").default): boolean} [layers] A list of layers from which features should be\n * translated. Alternatively, a filter function can be provided. The\n * function will be called for each layer in the map and should return\n * `true` for layers that you want to be translatable. If the option is\n * absent, all visible layers will be considered translatable.\n * Not used if `features` is provided.\n * @property {FilterFunction} [filter] A function\n * that takes a {@link module:ol/Feature~Feature} and an\n * {@link module:ol/layer/Layer~Layer} and returns `true` if the feature may be\n * translated or `false` otherwise. Not used if `features` is provided.\n * @property {number} [hitTolerance=0] Hit-detection tolerance. Pixels inside the radius around the given position\n * will be checked for features.\n */\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/Translate~Translate} instances\n * are instances of this type.\n */\nexport class TranslateEvent extends Event {\n /**\n * @param {TranslateEventType} type Type.\n * @param {Collection} features The features translated.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The event coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} startCoordinate The original coordinates before.translation started\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n */\n constructor(type, features, coordinate, startCoordinate, mapBrowserEvent) {\n super(type);\n\n /**\n * The features being translated.\n * @type {Collection}\n * @api\n */\n this.features = features;\n\n /**\n * The coordinate of the drag event.\n * @const\n * @type {import(\"../coordinate.js\").Coordinate}\n * @api\n */\n this.coordinate = coordinate;\n\n /**\n * The coordinate of the start position before translation started.\n * @const\n * @type {import(\"../coordinate.js\").Coordinate}\n * @api\n */\n this.startCoordinate = startCoordinate;\n\n /**\n * Associated {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @type {import(\"../MapBrowserEvent.js\").default}\n * @api\n */\n this.mapBrowserEvent = mapBrowserEvent;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature<'translateend'|'translatestart'|'translating', TranslateEvent, Return> &\n * import(\"../Observable\").CombinedOnSignature} TranslateOnSignature\n */\n\n/**\n * @classdesc\n * Interaction for translating (moving) features.\n * If you want to translate multiple features in a single action (for example,\n * the collection used by a select interaction), construct the interaction with\n * the `features` option.\n *\n * @fires TranslateEvent\n * @api\n */\nclass Translate extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super(/** @type {import(\"./Pointer.js\").Options} */ (options));\n\n /***\n * @type {TranslateOnSignature}\n */\n this.on;\n\n /***\n * @type {TranslateOnSignature}\n */\n this.once;\n\n /***\n * @type {TranslateOnSignature}\n */\n this.un;\n\n /**\n * The last position we translated to.\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.lastCoordinate_ = null;\n\n /**\n * The start position before translation started.\n * @type {import(\"../coordinate.js\").Coordinate}\n * @private\n */\n this.startCoordinate_ = null;\n\n /**\n * @type {Collection|null}\n * @private\n */\n this.features_ = options.features !== undefined ? options.features : null;\n\n /** @type {function(import(\"../layer/Layer.js\").default): boolean} */\n let layerFilter;\n if (options.layers && !this.features_) {\n if (typeof options.layers === 'function') {\n layerFilter = options.layers;\n } else {\n const layers = options.layers;\n layerFilter = function (layer) {\n return layers.includes(layer);\n };\n }\n } else {\n layerFilter = TRUE;\n }\n\n /**\n * @private\n * @type {function(import(\"../layer/Layer.js\").default): boolean}\n */\n this.layerFilter_ = layerFilter;\n\n /**\n * @private\n * @type {FilterFunction}\n */\n this.filter_ = options.filter && !this.features_ ? options.filter : TRUE;\n\n /**\n * @private\n * @type {number}\n */\n this.hitTolerance_ = options.hitTolerance ? options.hitTolerance : 0;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : always;\n\n /**\n * @type {Feature}\n * @private\n */\n this.lastFeature_ = null;\n\n this.addChangeListener(\n InteractionProperty.ACTIVE,\n this.handleActiveChanged_,\n );\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(event) {\n if (!event.originalEvent || !this.condition_(event)) {\n return false;\n }\n this.lastFeature_ = this.featuresAtPixel_(event.pixel, event.map);\n if (!this.lastCoordinate_ && this.lastFeature_) {\n this.startCoordinate_ = event.coordinate;\n this.lastCoordinate_ = event.coordinate;\n this.handleMoveEvent(event);\n\n const features = this.features_ || new Collection([this.lastFeature_]);\n\n this.dispatchEvent(\n new TranslateEvent(\n TranslateEventType.TRANSLATESTART,\n features,\n event.coordinate,\n this.startCoordinate_,\n event,\n ),\n );\n return true;\n }\n return false;\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(event) {\n if (this.lastCoordinate_) {\n this.lastCoordinate_ = null;\n this.handleMoveEvent(event);\n\n const features = this.features_ || new Collection([this.lastFeature_]);\n\n this.dispatchEvent(\n new TranslateEvent(\n TranslateEventType.TRANSLATEEND,\n features,\n event.coordinate,\n this.startCoordinate_,\n event,\n ),\n );\n // cleanup\n this.startCoordinate_ = null;\n return true;\n }\n return false;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @override\n */\n handleDragEvent(event) {\n if (this.lastCoordinate_) {\n const newCoordinate = event.coordinate;\n const projection = event.map.getView().getProjection();\n\n const newViewCoordinate = fromUserCoordinate(newCoordinate, projection);\n const lastViewCoordinate = fromUserCoordinate(\n this.lastCoordinate_,\n projection,\n );\n const deltaX = newViewCoordinate[0] - lastViewCoordinate[0];\n const deltaY = newViewCoordinate[1] - lastViewCoordinate[1];\n\n const features = this.features_ || new Collection([this.lastFeature_]);\n const userProjection = getUserProjection();\n\n features.forEach(function (feature) {\n const geom = feature.getGeometry();\n if (userProjection) {\n geom.transform(userProjection, projection);\n geom.translate(deltaX, deltaY);\n geom.transform(projection, userProjection);\n } else {\n geom.translate(deltaX, deltaY);\n }\n feature.setGeometry(geom);\n });\n\n this.lastCoordinate_ = newCoordinate;\n\n this.dispatchEvent(\n new TranslateEvent(\n TranslateEventType.TRANSLATING,\n features,\n newCoordinate,\n this.startCoordinate_,\n event,\n ),\n );\n }\n }\n\n /**\n * Handle pointer move events.\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @override\n */\n handleMoveEvent(event) {\n const elem = event.map.getViewport();\n\n // Change the cursor to grab/grabbing if hovering any of the features managed\n // by the interaction\n if (this.featuresAtPixel_(event.pixel, event.map)) {\n elem.classList.remove(this.lastCoordinate_ ? 'ol-grab' : 'ol-grabbing');\n elem.classList.add(this.lastCoordinate_ ? 'ol-grabbing' : 'ol-grab');\n } else {\n elem.classList.remove('ol-grab', 'ol-grabbing');\n }\n }\n\n /**\n * Tests to see if the given coordinates intersects any of our selected\n * features.\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel coordinate to test for intersection.\n * @param {import(\"../Map.js\").default} map Map to test the intersection on.\n * @return {Feature} Returns the feature found at the specified pixel\n * coordinates.\n * @private\n */\n featuresAtPixel_(pixel, map) {\n return map.forEachFeatureAtPixel(\n pixel,\n (feature, layer) => {\n if (!(feature instanceof Feature) || !this.filter_(feature, layer)) {\n return undefined;\n }\n if (this.features_ && !this.features_.getArray().includes(feature)) {\n return undefined;\n }\n return feature;\n },\n {\n layerFilter: this.layerFilter_,\n hitTolerance: this.hitTolerance_,\n },\n );\n }\n\n /**\n * Returns the Hit-detection tolerance.\n * @return {number} Hit tolerance in pixels.\n * @api\n */\n getHitTolerance() {\n return this.hitTolerance_;\n }\n\n /**\n * Hit-detection tolerance. Pixels inside the radius around the given position\n * will be checked for features.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @api\n */\n setHitTolerance(hitTolerance) {\n this.hitTolerance_ = hitTolerance;\n }\n\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default} map Map.\n * @override\n */\n setMap(map) {\n const oldMap = this.getMap();\n super.setMap(map);\n this.updateState_(oldMap);\n }\n\n /**\n * @private\n */\n handleActiveChanged_() {\n this.updateState_(null);\n }\n\n /**\n * @param {import(\"../Map.js\").default} oldMap Old map.\n * @private\n */\n updateState_(oldMap) {\n let map = this.getMap();\n const active = this.getActive();\n if (!map || !active) {\n map = map || oldMap;\n if (map) {\n const elem = map.getViewport();\n elem.classList.remove('ol-grab', 'ol-grabbing');\n }\n }\n }\n}\n\nexport default Translate;\n"], - "mappings": "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", + "mappings": "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", "names": [] } diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_defaults__js.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_defaults__js.js new file mode 100644 index 0000000..8920ae1 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_defaults__js.js @@ -0,0 +1,28 @@ +import { + defaults +} from "./chunk-7RGUNZVN.js"; +import "./chunk-RMGZ5HGX.js"; +import "./chunk-47JK3GLV.js"; +import "./chunk-TRW2RYAI.js"; +import "./chunk-QIVUQU5K.js"; +import "./chunk-LKZG5HMW.js"; +import "./chunk-F2HSAX6I.js"; +import "./chunk-LMC3RO5P.js"; +import "./chunk-4E4H2AGX.js"; +import "./chunk-VAUZYTLA.js"; +import "./chunk-ZPDML4Q3.js"; +import "./chunk-POVGKIBQ.js"; +import "./chunk-G3HPQ3BH.js"; +import "./chunk-6GRRGW6V.js"; +import "./chunk-MPRNTLUM.js"; +import "./chunk-5ACH5F45.js"; +import "./chunk-WXT7AISE.js"; +import "./chunk-V2VQBN44.js"; +import "./chunk-V7KTD4MH.js"; +import "./chunk-QFCIXVZ3.js"; +import "./chunk-33VDV4DG.js"; +import "./chunk-FQY6EMA7.js"; +import "./chunk-V6TY7KAL.js"; +export { + defaults +}; diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_defaults__js.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_defaults__js.js.map new file mode 100644 index 0000000..9865211 --- /dev/null +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_interaction_defaults__js.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Tile.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Tile.js index f2f614a..b580fcd 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Tile.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Tile.js @@ -2,30 +2,31 @@ import { Tile_default as Tile_default2, createOrUpdate, getKeyZXY -} from "./chunk-X2KP4TK5.js"; +} from "./chunk-GQSVCNL3.js"; +import { + Layer_default, + Layer_default2 +} from "./chunk-VWBYIKLE.js"; import { ImageTile_default, TileRange_default, TileState_default, Tile_default } from "./chunk-V7I37XKR.js"; -import { - Layer_default, - Layer_default2 -} from "./chunk-6SP66AVH.js"; -import "./chunk-33EAEVLP.js"; import "./chunk-FM44FOIC.js"; import "./chunk-WEQYAO4O.js"; +import "./chunk-RMGZ5HGX.js"; +import "./chunk-47JK3GLV.js"; +import "./chunk-TRW2RYAI.js"; +import "./chunk-QIVUQU5K.js"; +import "./chunk-LMC3RO5P.js"; +import "./chunk-33EAEVLP.js"; import { toSize } from "./chunk-PPP4FLHO.js"; -import "./chunk-LMC3RO5P.js"; import "./chunk-ZPDML4Q3.js"; -import "./chunk-5CPSJRE2.js"; -import "./chunk-TRW2RYAI.js"; -import "./chunk-QIVUQU5K.js"; -import "./chunk-QJJYQF6H.js"; -import "./chunk-W2FV6P6N.js"; +import "./chunk-G3HPQ3BH.js"; +import "./chunk-6GRRGW6V.js"; import { apply, compose @@ -33,17 +34,6 @@ import { import { fromUserExtent } from "./chunk-5ACH5F45.js"; -import { - assert -} from "./chunk-QFCIXVZ3.js"; -import { - Disposable_default, - getUid -} from "./chunk-V2VQBN44.js"; -import "./chunk-33VDV4DG.js"; -import { - ascending -} from "./chunk-FQY6EMA7.js"; import { containsCoordinate, createEmpty, @@ -53,7 +43,18 @@ import { getTopLeft, intersects } from "./chunk-WXT7AISE.js"; +import { + Disposable_default, + getUid +} from "./chunk-V2VQBN44.js"; import "./chunk-V7KTD4MH.js"; +import { + assert +} from "./chunk-QFCIXVZ3.js"; +import "./chunk-33VDV4DG.js"; +import { + ascending +} from "./chunk-FQY6EMA7.js"; import "./chunk-V6TY7KAL.js"; // node_modules/ol/DataTile.js diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Tile.js.map b/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Tile.js.map index 3683687..ad2edc5 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Tile.js.map +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Tile.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../../ol/DataTile.js", "../../ol/structs/LRUCache.js", "../../ol/renderer/canvas/TileLayer.js", "../../ol/layer/TileProperty.js", "../../ol/layer/BaseTile.js", "../../ol/layer/Tile.js"], "sourcesContent": ["/**\n * @module ol/DataTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\nimport {createCanvasContext2D} from './dom.js';\n\n/**\n * @typedef {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|ImageBitmap} ImageLike\n */\n\n/**\n * @typedef {Uint8Array|Uint8ClampedArray|Float32Array|DataView} ArrayLike\n */\n\n/**\n * Data that can be used with a DataTile.\n * @typedef {ArrayLike|ImageLike} Data\n */\n\n/**\n * @param {Data} data Tile data.\n * @return {ImageLike|null} The image-like data.\n */\nexport function asImageLike(data) {\n return data instanceof Image ||\n data instanceof HTMLCanvasElement ||\n data instanceof HTMLVideoElement ||\n data instanceof ImageBitmap\n ? data\n : null;\n}\n\n/**\n * @param {Data} data Tile data.\n * @return {ArrayLike|null} The array-like data.\n */\nexport function asArrayLike(data) {\n return data instanceof Uint8Array ||\n data instanceof Uint8ClampedArray ||\n data instanceof Float32Array ||\n data instanceof DataView\n ? data\n : null;\n}\n\n/**\n * This is set as the cancellation reason when a tile is disposed.\n */\nexport const disposedError = new Error('disposed');\n\n/**\n * @type {CanvasRenderingContext2D|null}\n */\nlet sharedContext = null;\n\n/**\n * @param {ImageLike} image The image.\n * @return {Uint8ClampedArray} The data.\n */\nexport function toArray(image) {\n if (!sharedContext) {\n sharedContext = createCanvasContext2D(\n image.width,\n image.height,\n undefined,\n {willReadFrequently: true},\n );\n }\n const canvas = sharedContext.canvas;\n const width = image.width;\n if (canvas.width !== width) {\n canvas.width = width;\n }\n const height = image.height;\n if (canvas.height !== height) {\n canvas.height = height;\n }\n sharedContext.clearRect(0, 0, width, height);\n sharedContext.drawImage(image, 0, 0);\n return sharedContext.getImageData(0, 0, width, height).data;\n}\n\n/**\n * @type {import('./size.js').Size}\n */\nconst defaultSize = [256, 256];\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @property {function(): Promise} loader Data loader. For loaders that generate images,\n * the promise should not resolve until the image is loaded.\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling. By default,\n * the nearest neighbor is used when resampling.\n * @property {import('./size.js').Size} [size=[256, 256]] Tile size.\n * @property {AbortController} [controller] An abort controller.\n * @api\n */\n\nclass DataTile extends Tile {\n /**\n * @param {Options} options Tile options.\n */\n constructor(options) {\n const state = TileState.IDLE;\n\n super(options.tileCoord, state, {\n transition: options.transition,\n interpolate: options.interpolate,\n });\n\n /**\n * @type {function(): Promise}\n * @private\n */\n this.loader_ = options.loader;\n\n /**\n * @type {Data}\n * @private\n */\n this.data_ = null;\n\n /**\n * @type {Error}\n * @private\n */\n this.error_ = null;\n\n /**\n * @type {import('./size.js').Size|null}\n * @private\n */\n this.size_ = options.size || null;\n\n /**\n * @type {AbortController|null}\n * @private\n */\n this.controller_ = options.controller || null;\n }\n\n /**\n * Get the tile size.\n * @return {import('./size.js').Size} Tile size.\n */\n getSize() {\n if (this.size_) {\n return this.size_;\n }\n const imageData = asImageLike(this.data_);\n if (imageData) {\n return [imageData.width, imageData.height];\n }\n return defaultSize;\n }\n\n /**\n * Get the data for the tile.\n * @return {Data} Tile data.\n * @api\n */\n getData() {\n return this.data_;\n }\n\n /**\n * Get any loading error.\n * @return {Error} Loading error.\n * @api\n */\n getError() {\n return this.error_;\n }\n\n /**\n * Load the tile data.\n * @api\n * @override\n */\n load() {\n if (this.state !== TileState.IDLE && this.state !== TileState.ERROR) {\n return;\n }\n this.state = TileState.LOADING;\n this.changed();\n\n const self = this;\n this.loader_()\n .then(function (data) {\n self.data_ = data;\n self.state = TileState.LOADED;\n self.changed();\n })\n .catch(function (error) {\n self.error_ = error;\n self.state = TileState.ERROR;\n self.changed();\n });\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n if (this.controller_) {\n this.controller_.abort(disposedError);\n this.controller_ = null;\n }\n super.disposeInternal();\n }\n}\n\nexport default DataTile;\n", "/**\n * @module ol/structs/LRUCache\n */\n\nimport Disposable from '../Disposable.js';\nimport {assert} from '../asserts.js';\n\n/**\n * @typedef {Object} Entry\n * @property {string} key_ Key.\n * @property {Entry|null} newer Newer.\n * @property {Entry|null} older Older.\n * @property {*} value_ Value.\n */\n\n/**\n * @classdesc\n * Implements a Least-Recently-Used cache where the keys do not conflict with\n * Object's properties (e.g. 'hasOwnProperty' is not allowed as a key). Expiring\n * items from the cache is the responsibility of the user.\n *\n * @fires import(\"../events/Event.js\").default\n * @template T\n */\nclass LRUCache {\n /**\n * @param {number} [highWaterMark] High water mark.\n */\n constructor(highWaterMark) {\n /**\n * Desired max cache size after expireCache(). If set to 0, no cache entries\n * will be pruned at all.\n * @type {number}\n */\n this.highWaterMark = highWaterMark !== undefined ? highWaterMark : 2048;\n\n /**\n * @private\n * @type {number}\n */\n this.count_ = 0;\n\n /**\n * @private\n * @type {!Object}\n */\n this.entries_ = {};\n\n /**\n * @private\n * @type {?Entry}\n */\n this.oldest_ = null;\n\n /**\n * @private\n * @type {?Entry}\n */\n this.newest_ = null;\n }\n\n deleteOldest() {\n const entry = this.pop();\n if (entry instanceof Disposable) {\n entry.dispose();\n }\n }\n\n /**\n * @return {boolean} Can expire cache.\n */\n canExpireCache() {\n return this.highWaterMark > 0 && this.getCount() > this.highWaterMark;\n }\n\n /**\n * Expire the cache. When the cache entry is a {@link module:ol/Disposable~Disposable},\n * the entry will be disposed.\n * @param {!Object} [keep] Keys to keep. To be implemented by subclasses.\n */\n expireCache(keep) {\n while (this.canExpireCache()) {\n this.deleteOldest();\n }\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n while (this.oldest_) {\n this.deleteOldest();\n }\n }\n\n /**\n * @param {string} key Key.\n * @return {boolean} Contains key.\n */\n containsKey(key) {\n return this.entries_.hasOwnProperty(key);\n }\n\n /**\n * @param {function(T, string, LRUCache): ?} f The function\n * to call for every entry from the oldest to the newer. This function takes\n * 3 arguments (the entry value, the entry key and the LRUCache object).\n * The return value is ignored.\n */\n forEach(f) {\n let entry = this.oldest_;\n while (entry) {\n f(entry.value_, entry.key_, this);\n entry = entry.newer;\n }\n }\n\n /**\n * @param {string} key Key.\n * @param {*} [options] Options (reserved for subclasses).\n * @return {T} Value.\n */\n get(key, options) {\n const entry = this.entries_[key];\n assert(\n entry !== undefined,\n 'Tried to get a value for a key that does not exist in the cache',\n );\n if (entry === this.newest_) {\n return entry.value_;\n }\n if (entry === this.oldest_) {\n this.oldest_ = /** @type {Entry} */ (this.oldest_.newer);\n this.oldest_.older = null;\n } else {\n entry.newer.older = entry.older;\n entry.older.newer = entry.newer;\n }\n entry.newer = null;\n entry.older = this.newest_;\n this.newest_.newer = entry;\n this.newest_ = entry;\n return entry.value_;\n }\n\n /**\n * Remove an entry from the cache.\n * @param {string} key The entry key.\n * @return {T} The removed entry.\n */\n remove(key) {\n const entry = this.entries_[key];\n assert(\n entry !== undefined,\n 'Tried to get a value for a key that does not exist in the cache',\n );\n if (entry === this.newest_) {\n this.newest_ = /** @type {Entry} */ (entry.older);\n if (this.newest_) {\n this.newest_.newer = null;\n }\n } else if (entry === this.oldest_) {\n this.oldest_ = /** @type {Entry} */ (entry.newer);\n if (this.oldest_) {\n this.oldest_.older = null;\n }\n } else {\n entry.newer.older = entry.older;\n entry.older.newer = entry.newer;\n }\n delete this.entries_[key];\n --this.count_;\n return entry.value_;\n }\n\n /**\n * @return {number} Count.\n */\n getCount() {\n return this.count_;\n }\n\n /**\n * @return {Array} Keys.\n */\n getKeys() {\n const keys = new Array(this.count_);\n let i = 0;\n let entry;\n for (entry = this.newest_; entry; entry = entry.older) {\n keys[i++] = entry.key_;\n }\n return keys;\n }\n\n /**\n * @return {Array} Values.\n */\n getValues() {\n const values = new Array(this.count_);\n let i = 0;\n let entry;\n for (entry = this.newest_; entry; entry = entry.older) {\n values[i++] = entry.value_;\n }\n return values;\n }\n\n /**\n * @return {T} Last value.\n */\n peekLast() {\n return this.oldest_.value_;\n }\n\n /**\n * @return {string} Last key.\n */\n peekLastKey() {\n return this.oldest_.key_;\n }\n\n /**\n * Get the key of the newest item in the cache. Throws if the cache is empty.\n * @return {string} The newest key.\n */\n peekFirstKey() {\n return this.newest_.key_;\n }\n\n /**\n * Return an entry without updating least recently used time.\n * @param {string} key Key.\n * @return {T|undefined} Value.\n */\n peek(key) {\n return this.entries_[key]?.value_;\n }\n\n /**\n * @return {T} value Value.\n */\n pop() {\n const entry = this.oldest_;\n delete this.entries_[entry.key_];\n if (entry.newer) {\n entry.newer.older = null;\n }\n this.oldest_ = /** @type {Entry} */ (entry.newer);\n if (!this.oldest_) {\n this.newest_ = null;\n }\n --this.count_;\n return entry.value_;\n }\n\n /**\n * @param {string} key Key.\n * @param {T} value Value.\n */\n replace(key, value) {\n this.get(key); // update `newest_`\n this.entries_[key].value_ = value;\n }\n\n /**\n * @param {string} key Key.\n * @param {T} value Value.\n */\n set(key, value) {\n assert(\n !(key in this.entries_),\n 'Tried to set a value for a key that is used already',\n );\n const entry = {\n key_: key,\n newer: null,\n older: this.newest_,\n value_: value,\n };\n if (!this.newest_) {\n this.oldest_ = entry;\n } else {\n this.newest_.newer = entry;\n }\n this.newest_ = entry;\n this.entries_[key] = entry;\n ++this.count_;\n }\n\n /**\n * Set a maximum number of entries for the cache.\n * @param {number} size Cache size.\n * @api\n */\n setSize(size) {\n this.highWaterMark = size;\n }\n}\n\nexport default LRUCache;\n", "/**\n * @module ol/renderer/canvas/TileLayer\n */\nimport DataTile, {asImageLike} from '../../DataTile.js';\nimport ImageTile from '../../ImageTile.js';\nimport TileRange from '../../TileRange.js';\nimport TileState from '../../TileState.js';\nimport {ascending} from '../../array.js';\nimport {\n containsCoordinate,\n createEmpty,\n equals,\n getIntersection,\n getRotatedViewport,\n getTopLeft,\n intersects,\n} from '../../extent.js';\nimport {fromUserExtent} from '../../proj.js';\nimport ReprojTile from '../../reproj/Tile.js';\nimport {toSize} from '../../size.js';\nimport LRUCache from '../../structs/LRUCache.js';\nimport {createOrUpdate as createTileCoord, getKeyZXY} from '../../tilecoord.js';\nimport {\n apply as applyTransform,\n compose as composeTransform,\n} from '../../transform.js';\nimport {getUid} from '../../util.js';\nimport CanvasLayerRenderer from './Layer.js';\n\n/**\n * @param {string} sourceKey The source key.\n * @param {number} z The tile z level.\n * @param {number} x The tile x level.\n * @param {number} y The tile y level.\n * @return {string} The cache key.\n */\nfunction getCacheKey(sourceKey, z, x, y) {\n return `${sourceKey},${getKeyZXY(z, x, y)}`;\n}\n\n/**\n * @typedef {Object>} TileLookup\n */\n\n/**\n * Add a tile to the lookup.\n * @param {TileLookup} tilesByZ Lookup of tiles by zoom level.\n * @param {import(\"../../Tile.js\").default} tile A tile.\n * @param {number} z The zoom level.\n * @return {boolean} The tile was added to the lookup.\n */\nfunction addTileToLookup(tilesByZ, tile, z) {\n if (!(z in tilesByZ)) {\n tilesByZ[z] = new Set([tile]);\n return true;\n }\n const set = tilesByZ[z];\n const existing = set.has(tile);\n if (!existing) {\n set.add(tile);\n }\n return !existing;\n}\n\n/**\n * Remove a tile from the lookup.\n * @param {TileLookup} tilesByZ Lookup of tiles by zoom level.\n * @param {import(\"../../Tile.js\").default} tile A tile.\n * @param {number} z The zoom level.\n * @return {boolean} The tile was removed from the lookup.\n */\nfunction removeTileFromLookup(tilesByZ, tile, z) {\n const set = tilesByZ[z];\n if (set) {\n return set.delete(tile);\n }\n return false;\n}\n\n/**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../../extent.js\").Extent} extent The frame extent.\n * @return {import(\"../../extent.js\").Extent} Frame extent intersected with layer extents.\n */\nfunction getRenderExtent(frameState, extent) {\n const layerState = frameState.layerStatesArray[frameState.layerIndex];\n if (layerState.extent) {\n extent = getIntersection(\n extent,\n fromUserExtent(layerState.extent, frameState.viewState.projection),\n );\n }\n const source = /** @type {import(\"../../source/Tile.js\").default} */ (\n layerState.layer.getRenderSource()\n );\n if (!source.getWrapX()) {\n const gridExtent = source\n .getTileGridForProjection(frameState.viewState.projection)\n .getExtent();\n if (gridExtent) {\n extent = getIntersection(extent, gridExtent);\n }\n }\n return extent;\n}\n\n/**\n * @typedef {Object} Options\n * @property {number} [cacheSize=512] The cache size.\n */\n\n/**\n * @classdesc\n * Canvas renderer for tile layers.\n * @api\n * @template {import(\"../../layer/Tile.js\").default|import(\"../../layer/VectorTile.js\").default} [LayerType=import(\"../../layer/Tile.js\").default|import(\"../../layer/VectorTile.js\").default]\n * @extends {CanvasLayerRenderer}\n */\nclass CanvasTileLayerRenderer extends CanvasLayerRenderer {\n /**\n * @param {LayerType} tileLayer Tile layer.\n * @param {Options} [options] Options.\n */\n constructor(tileLayer, options) {\n super(tileLayer);\n\n options = options || {};\n\n /**\n * Rendered extent has changed since the previous `renderFrame()` call\n * @type {boolean}\n */\n this.extentChanged = true;\n\n /**\n * The last call to `renderFrame` was completed with all tiles loaded\n * @type {boolean}\n */\n this.renderComplete = false;\n\n /**\n * @private\n * @type {?import(\"../../extent.js\").Extent}\n */\n this.renderedExtent_ = null;\n\n /**\n * @protected\n * @type {number}\n */\n this.renderedPixelRatio;\n\n /**\n * @protected\n * @type {import(\"../../proj/Projection.js\").default|null}\n */\n this.renderedProjection = null;\n\n /**\n * @private\n * @type {number}\n */\n this.renderedRevision_;\n\n /**\n * @protected\n * @type {!Array}\n */\n this.renderedTiles = [];\n\n /**\n * @private\n * @type {string}\n */\n this.renderedSourceKey_;\n\n /**\n * @private\n * @type {number}\n */\n this.renderedSourceRevision_;\n\n /**\n * @protected\n * @type {import(\"../../extent.js\").Extent}\n */\n this.tempExtent = createEmpty();\n\n /**\n * @private\n * @type {import(\"../../TileRange.js\").default}\n */\n this.tempTileRange_ = new TileRange(0, 0, 0, 0);\n\n /**\n * @type {import(\"../../tilecoord.js\").TileCoord}\n * @private\n */\n this.tempTileCoord_ = createTileCoord(0, 0, 0);\n\n const cacheSize = options.cacheSize !== undefined ? options.cacheSize : 512;\n\n /**\n * @type {import(\"../../structs/LRUCache.js\").default}\n * @private\n */\n this.tileCache_ = new LRUCache(cacheSize);\n\n this.maxStaleKeys = cacheSize * 0.5;\n }\n\n /**\n * @return {LRUCache} Tile cache.\n */\n getTileCache() {\n return this.tileCache_;\n }\n\n /**\n * Get a tile from the cache or create one if needed.\n *\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @return {import(\"../../Tile.js\").default|null} Tile (or null if outside source extent).\n * @protected\n */\n getOrCreateTile(z, x, y, frameState) {\n const tileCache = this.tileCache_;\n const tileLayer = this.getLayer();\n const tileSource = tileLayer.getSource();\n const cacheKey = getCacheKey(tileSource.getKey(), z, x, y);\n\n /** @type {import(\"../../Tile.js\").default} */\n let tile;\n\n if (tileCache.containsKey(cacheKey)) {\n tile = tileCache.get(cacheKey);\n } else {\n tile = tileSource.getTile(\n z,\n x,\n y,\n frameState.pixelRatio,\n frameState.viewState.projection,\n );\n if (!tile) {\n return null;\n }\n tileCache.set(cacheKey, tile);\n }\n return tile;\n }\n\n /**\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @return {import(\"../../Tile.js\").default|null} Tile (or null if outside source extent).\n * @protected\n */\n getTile(z, x, y, frameState) {\n const tile = this.getOrCreateTile(z, x, y, frameState);\n if (!tile) {\n return null;\n }\n return tile;\n }\n\n /**\n * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray} Data at the pixel location.\n * @override\n */\n getData(pixel) {\n const frameState = this.frameState;\n if (!frameState) {\n return null;\n }\n\n const layer = this.getLayer();\n const coordinate = applyTransform(\n frameState.pixelToCoordinateTransform,\n pixel.slice(),\n );\n\n const layerExtent = layer.getExtent();\n if (layerExtent) {\n if (!containsCoordinate(layerExtent, coordinate)) {\n return null;\n }\n }\n\n const viewState = frameState.viewState;\n const source = layer.getRenderSource();\n const tileGrid = source.getTileGridForProjection(viewState.projection);\n const tilePixelRatio = source.getTilePixelRatio(frameState.pixelRatio);\n\n for (\n let z = tileGrid.getZForResolution(viewState.resolution);\n z >= tileGrid.getMinZoom();\n --z\n ) {\n const tileCoord = tileGrid.getTileCoordForCoordAndZ(coordinate, z);\n const tile = this.getTile(z, tileCoord[1], tileCoord[2], frameState);\n if (!tile || tile.getState() !== TileState.LOADED) {\n continue;\n }\n\n const tileOrigin = tileGrid.getOrigin(z);\n const tileSize = toSize(tileGrid.getTileSize(z));\n const tileResolution = tileGrid.getResolution(z);\n\n /**\n * @type {import('../../DataTile.js').ImageLike}\n */\n let image;\n if (tile instanceof ImageTile || tile instanceof ReprojTile) {\n image = tile.getImage();\n } else if (tile instanceof DataTile) {\n image = asImageLike(tile.getData());\n if (!image) {\n continue;\n }\n } else {\n continue;\n }\n\n const col = Math.floor(\n tilePixelRatio *\n ((coordinate[0] - tileOrigin[0]) / tileResolution -\n tileCoord[1] * tileSize[0]),\n );\n\n const row = Math.floor(\n tilePixelRatio *\n ((tileOrigin[1] - coordinate[1]) / tileResolution -\n tileCoord[2] * tileSize[1]),\n );\n\n const gutter = Math.round(\n tilePixelRatio * source.getGutterForProjection(viewState.projection),\n );\n\n return this.getImageData(image, col + gutter, row + gutter);\n }\n\n return null;\n }\n\n /**\n * Determine whether render should be called.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n * @override\n */\n prepareFrame(frameState) {\n if (!this.renderedProjection) {\n this.renderedProjection = frameState.viewState.projection;\n } else if (frameState.viewState.projection !== this.renderedProjection) {\n this.tileCache_.clear();\n this.renderedProjection = frameState.viewState.projection;\n }\n\n const source = this.getLayer().getSource();\n if (!source) {\n return false;\n }\n const sourceRevision = source.getRevision();\n if (!this.renderedRevision_) {\n this.renderedRevision_ = sourceRevision;\n } else if (this.renderedRevision_ !== sourceRevision) {\n this.renderedRevision_ = sourceRevision;\n if (this.renderedSourceKey_ === source.getKey()) {\n this.tileCache_.clear();\n }\n }\n return true;\n }\n\n /**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../../extent.js\").Extent} extent The extent to be rendered.\n * @param {number} initialZ The zoom level.\n * @param {TileLookup} tilesByZ Lookup of tiles by zoom level.\n * @param {number} preload Number of additional levels to load.\n */\n enqueueTiles(frameState, extent, initialZ, tilesByZ, preload) {\n const viewState = frameState.viewState;\n const tileLayer = this.getLayer();\n const tileSource = tileLayer.getRenderSource();\n const tileGrid = tileSource.getTileGridForProjection(viewState.projection);\n\n const tileSourceKey = getUid(tileSource);\n if (!(tileSourceKey in frameState.wantedTiles)) {\n frameState.wantedTiles[tileSourceKey] = {};\n }\n\n const wantedTiles = frameState.wantedTiles[tileSourceKey];\n\n const map = tileLayer.getMapInternal();\n const minZ = Math.max(\n initialZ - preload,\n tileGrid.getMinZoom(),\n tileGrid.getZForResolution(\n Math.min(\n tileLayer.getMaxResolution(),\n map\n ? map\n .getView()\n .getResolutionForZoom(Math.max(tileLayer.getMinZoom(), 0))\n : tileGrid.getResolution(0),\n ),\n tileSource.zDirection,\n ),\n );\n const rotation = viewState.rotation;\n const viewport = rotation\n ? getRotatedViewport(\n viewState.center,\n viewState.resolution,\n rotation,\n frameState.size,\n )\n : undefined;\n for (let z = initialZ; z >= minZ; --z) {\n const tileRange = tileGrid.getTileRangeForExtentAndZ(\n extent,\n z,\n this.tempTileRange_,\n );\n\n const tileResolution = tileGrid.getResolution(z);\n\n for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {\n for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {\n if (\n rotation &&\n !tileGrid.tileCoordIntersectsViewport([z, x, y], viewport)\n ) {\n continue;\n }\n const tile = this.getTile(z, x, y, frameState);\n if (!tile) {\n continue;\n }\n const added = addTileToLookup(tilesByZ, tile, z);\n if (!added) {\n continue;\n }\n\n const tileQueueKey = tile.getKey();\n wantedTiles[tileQueueKey] = true;\n\n if (tile.getState() === TileState.IDLE) {\n if (!frameState.tileQueue.isKeyQueued(tileQueueKey)) {\n const tileCoord = createTileCoord(z, x, y, this.tempTileCoord_);\n frameState.tileQueue.enqueue([\n tile,\n tileSourceKey,\n tileGrid.getTileCoordCenter(tileCoord),\n tileResolution,\n ]);\n }\n }\n }\n }\n }\n }\n\n /**\n * Look for tiles covering the provided tile coordinate at an alternate\n * zoom level. Loaded tiles will be added to the provided tile texture lookup.\n * @param {import(\"../../tilecoord.js\").TileCoord} tileCoord The target tile coordinate.\n * @param {TileLookup} tilesByZ Lookup of tiles by zoom level.\n * @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.\n * @private\n */\n findStaleTile_(tileCoord, tilesByZ) {\n const tileCache = this.tileCache_;\n const z = tileCoord[0];\n const x = tileCoord[1];\n const y = tileCoord[2];\n const staleKeys = this.getStaleKeys();\n for (let i = 0; i < staleKeys.length; ++i) {\n const cacheKey = getCacheKey(staleKeys[i], z, x, y);\n if (tileCache.containsKey(cacheKey)) {\n const tile = tileCache.peek(cacheKey);\n if (tile.getState() === TileState.LOADED) {\n tile.endTransition(getUid(this));\n addTileToLookup(tilesByZ, tile, z);\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Look for tiles covering the provided tile coordinate at an alternate\n * zoom level. Loaded tiles will be added to the provided tile texture lookup.\n * @param {import(\"../../tilegrid/TileGrid.js\").default} tileGrid The tile grid.\n * @param {import(\"../../tilecoord.js\").TileCoord} tileCoord The target tile coordinate.\n * @param {number} altZ The alternate zoom level.\n * @param {TileLookup} tilesByZ Lookup of tiles by zoom level.\n * @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.\n * @private\n */\n findAltTiles_(tileGrid, tileCoord, altZ, tilesByZ) {\n const tileRange = tileGrid.getTileRangeForTileCoordAndZ(\n tileCoord,\n altZ,\n this.tempTileRange_,\n );\n\n if (!tileRange) {\n return false;\n }\n\n let covered = true;\n const tileCache = this.tileCache_;\n const source = this.getLayer().getRenderSource();\n const sourceKey = source.getKey();\n for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {\n for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {\n const cacheKey = getCacheKey(sourceKey, altZ, x, y);\n let loaded = false;\n if (tileCache.containsKey(cacheKey)) {\n const tile = tileCache.peek(cacheKey);\n if (tile.getState() === TileState.LOADED) {\n addTileToLookup(tilesByZ, tile, altZ);\n loaded = true;\n }\n }\n if (!loaded) {\n covered = false;\n }\n }\n }\n return covered;\n }\n\n /**\n * Render the layer.\n *\n * The frame rendering logic has three parts:\n *\n * 1. Enqueue tiles\n * 2. Find alt tiles for those that are not yet loaded\n * 3. Render loaded tiles\n *\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target that may be used to render content to.\n * @return {HTMLElement} The rendered element.\n * @override\n */\n renderFrame(frameState, target) {\n let allTilesIdle = true;\n this.renderComplete = true;\n\n /**\n * TODO:\n * maybe skip transition when not fully opaque\n * decide if this.renderComplete is useful\n */\n\n const layerState = frameState.layerStatesArray[frameState.layerIndex];\n const viewState = frameState.viewState;\n const projection = viewState.projection;\n const viewResolution = viewState.resolution;\n const viewCenter = viewState.center;\n const pixelRatio = frameState.pixelRatio;\n\n const tileLayer = this.getLayer();\n const tileSource = tileLayer.getSource();\n const tileGrid = tileSource.getTileGridForProjection(projection);\n const z = tileGrid.getZForResolution(viewResolution, tileSource.zDirection);\n const tileResolution = tileGrid.getResolution(z);\n\n const sourceKey = tileSource.getKey();\n if (!this.renderedSourceKey_) {\n this.renderedSourceKey_ = sourceKey;\n } else if (this.renderedSourceKey_ !== sourceKey) {\n this.prependStaleKey(this.renderedSourceKey_);\n this.renderedSourceKey_ = sourceKey;\n }\n\n let frameExtent = frameState.extent;\n const tilePixelRatio = tileSource.getTilePixelRatio(pixelRatio);\n\n this.prepareContainer(frameState, target);\n\n // desired dimensions of the canvas in pixels\n const width = this.context.canvas.width;\n const height = this.context.canvas.height;\n\n const layerExtent =\n layerState.extent && fromUserExtent(layerState.extent, projection);\n if (layerExtent) {\n frameExtent = getIntersection(\n frameExtent,\n fromUserExtent(layerState.extent, projection),\n );\n }\n\n const dx = (tileResolution * width) / 2 / tilePixelRatio;\n const dy = (tileResolution * height) / 2 / tilePixelRatio;\n const canvasExtent = [\n viewCenter[0] - dx,\n viewCenter[1] - dy,\n viewCenter[0] + dx,\n viewCenter[1] + dy,\n ];\n\n /**\n * @type {TileLookup}\n */\n const tilesByZ = {};\n\n this.renderedTiles.length = 0;\n\n /**\n * Part 1: Enqueue tiles\n */\n\n const preload = tileLayer.getPreload();\n if (frameState.nextExtent) {\n const targetZ = tileGrid.getZForResolution(\n viewState.nextResolution,\n tileSource.zDirection,\n );\n const nextExtent = getRenderExtent(frameState, frameState.nextExtent);\n this.enqueueTiles(frameState, nextExtent, targetZ, tilesByZ, preload);\n }\n\n const renderExtent = getRenderExtent(frameState, frameExtent);\n this.enqueueTiles(frameState, renderExtent, z, tilesByZ, 0);\n if (preload > 0) {\n setTimeout(() => {\n this.enqueueTiles(\n frameState,\n renderExtent,\n z - 1,\n tilesByZ,\n preload - 1,\n );\n }, 0);\n }\n\n if (!(z in tilesByZ)) {\n return this.container;\n }\n\n /**\n * Part 2: Find alt tiles for those that are not yet loaded\n */\n\n const uid = getUid(this);\n const time = frameState.time;\n\n // look for cached tiles to use if a target tile is not ready\n for (const tile of tilesByZ[z]) {\n const tileState = tile.getState();\n if (tileState === TileState.EMPTY) {\n continue;\n }\n const tileCoord = tile.tileCoord;\n\n if (tileState === TileState.LOADED) {\n const alpha = tile.getAlpha(uid, time);\n if (alpha === 1) {\n // no need to look for alt tiles\n tile.endTransition(uid);\n continue;\n }\n }\n if (tileState !== TileState.IDLE) {\n allTilesIdle = false;\n }\n if (tileState !== TileState.ERROR) {\n this.renderComplete = false;\n }\n\n const hasStaleTile = this.findStaleTile_(tileCoord, tilesByZ);\n if (hasStaleTile) {\n // use the stale tile before the new tile's transition has completed\n removeTileFromLookup(tilesByZ, tile, z);\n frameState.animate = true;\n continue;\n }\n\n // first look for child tiles (at z + 1)\n const coveredByChildren = this.findAltTiles_(\n tileGrid,\n tileCoord,\n z + 1,\n tilesByZ,\n );\n\n if (coveredByChildren) {\n continue;\n }\n\n // next look for parent tiles\n const minZoom = tileGrid.getMinZoom();\n for (let parentZ = z - 1; parentZ >= minZoom; --parentZ) {\n const coveredByParent = this.findAltTiles_(\n tileGrid,\n tileCoord,\n parentZ,\n tilesByZ,\n );\n\n if (coveredByParent) {\n break;\n }\n }\n }\n\n /**\n * Part 3: Render loaded tiles\n */\n\n const canvasScale =\n ((tileResolution / viewResolution) * pixelRatio) / tilePixelRatio;\n\n const context = this.getRenderContext(frameState);\n\n // set scale transform for calculating tile positions on the canvas\n composeTransform(\n this.tempTransform,\n width / 2,\n height / 2,\n canvasScale,\n canvasScale,\n 0,\n -width / 2,\n -height / 2,\n );\n\n if (layerState.extent) {\n this.clipUnrotated(context, frameState, layerExtent);\n }\n\n if (!tileSource.getInterpolate()) {\n context.imageSmoothingEnabled = false;\n }\n\n this.preRender(context, frameState);\n\n /** @type {Array} */\n const zs = Object.keys(tilesByZ).map(Number);\n zs.sort(ascending);\n\n let currentClip;\n const clips = [];\n const clipZs = [];\n for (let i = zs.length - 1; i >= 0; --i) {\n const currentZ = zs[i];\n const currentTilePixelSize = tileSource.getTilePixelSize(\n currentZ,\n pixelRatio,\n projection,\n );\n const currentResolution = tileGrid.getResolution(currentZ);\n const currentScale = currentResolution / tileResolution;\n const dx = currentTilePixelSize[0] * currentScale * canvasScale;\n const dy = currentTilePixelSize[1] * currentScale * canvasScale;\n const originTileCoord = tileGrid.getTileCoordForCoordAndZ(\n getTopLeft(canvasExtent),\n currentZ,\n );\n const originTileExtent = tileGrid.getTileCoordExtent(originTileCoord);\n const origin = applyTransform(this.tempTransform, [\n (tilePixelRatio * (originTileExtent[0] - canvasExtent[0])) /\n tileResolution,\n (tilePixelRatio * (canvasExtent[3] - originTileExtent[3])) /\n tileResolution,\n ]);\n const tileGutter =\n tilePixelRatio * tileSource.getGutterForProjection(projection);\n for (const tile of tilesByZ[currentZ]) {\n if (tile.getState() !== TileState.LOADED) {\n continue;\n }\n const tileCoord = tile.tileCoord;\n\n // Calculate integer positions and sizes so that tiles align\n const xIndex = originTileCoord[1] - tileCoord[1];\n const nextX = Math.round(origin[0] - (xIndex - 1) * dx);\n const yIndex = originTileCoord[2] - tileCoord[2];\n const nextY = Math.round(origin[1] - (yIndex - 1) * dy);\n const x = Math.round(origin[0] - xIndex * dx);\n const y = Math.round(origin[1] - yIndex * dy);\n const w = nextX - x;\n const h = nextY - y;\n const transition = zs.length === 1;\n\n let contextSaved = false;\n\n // Clip mask for regions in this tile that already filled by a higher z tile\n currentClip = [x, y, x + w, y, x + w, y + h, x, y + h];\n for (let i = 0, ii = clips.length; i < ii; ++i) {\n if (!transition && currentZ < clipZs[i]) {\n const clip = clips[i];\n if (\n intersects(\n [x, y, x + w, y + h],\n [clip[0], clip[3], clip[4], clip[7]],\n )\n ) {\n if (!contextSaved) {\n context.save();\n contextSaved = true;\n }\n context.beginPath();\n // counter-clockwise (outer ring) for current tile\n context.moveTo(currentClip[0], currentClip[1]);\n context.lineTo(currentClip[2], currentClip[3]);\n context.lineTo(currentClip[4], currentClip[5]);\n context.lineTo(currentClip[6], currentClip[7]);\n // clockwise (inner ring) for higher z tile\n context.moveTo(clip[6], clip[7]);\n context.lineTo(clip[4], clip[5]);\n context.lineTo(clip[2], clip[3]);\n context.lineTo(clip[0], clip[1]);\n context.clip();\n }\n }\n }\n clips.push(currentClip);\n clipZs.push(currentZ);\n\n this.drawTile(tile, frameState, x, y, w, h, tileGutter, transition);\n if (contextSaved) {\n context.restore();\n }\n this.renderedTiles.unshift(tile);\n\n // TODO: decide if this is necessary\n this.updateUsedTiles(frameState.usedTiles, tileSource, tile);\n }\n }\n\n this.renderedResolution = tileResolution;\n this.extentChanged =\n !this.renderedExtent_ || !equals(this.renderedExtent_, canvasExtent);\n this.renderedExtent_ = canvasExtent;\n this.renderedPixelRatio = pixelRatio;\n\n this.postRender(this.context, frameState);\n\n if (layerState.extent) {\n context.restore();\n }\n context.imageSmoothingEnabled = true;\n\n if (this.renderComplete) {\n /**\n * @param {import(\"../../Map.js\").default} map Map.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n */\n const postRenderFunction = (map, frameState) => {\n const tileSourceKey = getUid(tileSource);\n const wantedTiles = frameState.wantedTiles[tileSourceKey];\n const tilesCount = wantedTiles ? Object.keys(wantedTiles).length : 0;\n this.updateCacheSize(tilesCount);\n this.tileCache_.expireCache();\n };\n\n frameState.postRenderFunctions.push(postRenderFunction);\n }\n if (!this.renderComplete && !allTilesIdle) {\n frameState.animate = true;\n }\n\n return this.container;\n }\n\n /**\n * Increases the cache size if needed\n * @param {number} tileCount Minimum number of tiles needed.\n */\n updateCacheSize(tileCount) {\n this.tileCache_.highWaterMark = Math.max(\n this.tileCache_.highWaterMark,\n tileCount * 2,\n );\n }\n\n /**\n * @param {import(\"../../Tile.js\").default} tile Tile.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {number} x Left of the tile.\n * @param {number} y Top of the tile.\n * @param {number} w Width of the tile.\n * @param {number} h Height of the tile.\n * @param {number} gutter Tile gutter.\n * @param {boolean} transition Apply an alpha transition.\n * @protected\n */\n drawTile(tile, frameState, x, y, w, h, gutter, transition) {\n let image;\n if (tile instanceof DataTile) {\n image = asImageLike(tile.getData());\n if (!image) {\n throw new Error('Rendering array data is not yet supported');\n }\n } else {\n image = this.getTileImage(\n /** @type {import(\"../../ImageTile.js\").default} */ (tile),\n );\n }\n if (!image) {\n return;\n }\n const context = this.getRenderContext(frameState);\n const uid = getUid(this);\n const layerState = frameState.layerStatesArray[frameState.layerIndex];\n const alpha =\n layerState.opacity *\n (transition ? tile.getAlpha(uid, frameState.time) : 1);\n const alphaChanged = alpha !== context.globalAlpha;\n if (alphaChanged) {\n context.save();\n context.globalAlpha = alpha;\n }\n context.drawImage(\n image,\n gutter,\n gutter,\n image.width - 2 * gutter,\n image.height - 2 * gutter,\n x,\n y,\n w,\n h,\n );\n\n if (alphaChanged) {\n context.restore();\n }\n if (alpha !== layerState.opacity) {\n frameState.animate = true;\n } else if (transition) {\n tile.endTransition(uid);\n }\n }\n\n /**\n * @return {HTMLCanvasElement} Image\n */\n getImage() {\n const context = this.context;\n return context ? context.canvas : null;\n }\n\n /**\n * Get the image from a tile.\n * @param {import(\"../../ImageTile.js\").default} tile Tile.\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @protected\n */\n getTileImage(tile) {\n return tile.getImage();\n }\n\n /**\n * @param {!Object>} usedTiles Used tiles.\n * @param {import(\"../../source/Tile.js\").default} tileSource Tile source.\n * @param {import('../../Tile.js').default} tile Tile.\n * @protected\n */\n updateUsedTiles(usedTiles, tileSource, tile) {\n // FIXME should we use tilesToDrawByZ instead?\n const tileSourceKey = getUid(tileSource);\n if (!(tileSourceKey in usedTiles)) {\n usedTiles[tileSourceKey] = {};\n }\n usedTiles[tileSourceKey][tile.getKey()] = true;\n }\n}\n\nexport default CanvasTileLayerRenderer;\n", "/**\n * @module ol/layer/TileProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n PRELOAD: 'preload',\n USE_INTERIM_TILES_ON_ERROR: 'useInterimTilesOnError',\n};\n", "/**\n * @module ol/layer/BaseTile\n */\nimport Layer from './Layer.js';\nimport TileProperty from './TileProperty.js';\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} BaseTileLayerOnSignature\n */\n\n/**\n * @template {import(\"../source/Tile.js\").default} TileSourceType\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {TileSourceType} [source] Source for this layer.\n * @property {import(\"../Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link import(\"../Map.js\").default#addLayer map.addLayer()}.\n * @property {import(\"./Base.js\").BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {boolean} [useInterimTilesOnError=true] Deprecated. Use interim tiles on error.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n * @property {number} [cacheSize=512] The internal tile cache size. This needs to be large enough to render\n * two zoom levels worth of tiles.\n */\n\n/**\n * @classdesc\n * For layer sources that provide pre-rendered, tiled images in grids that are\n * organized by zoom levels for specific resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Tile.js\").default} TileSourceType\n * @template {import(\"../renderer/Layer.js\").default} RendererType\n * @extends {Layer}\n * @api\n */\nclass BaseTileLayer extends Layer {\n /**\n * @param {Options} [options] Tile layer options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const baseOptions = Object.assign({}, options);\n\n const cacheSize = options.cacheSize;\n delete options.cacheSize;\n\n delete baseOptions.preload;\n delete baseOptions.useInterimTilesOnError;\n super(baseOptions);\n\n /***\n * @type {BaseTileLayerOnSignature}\n */\n this.on;\n\n /***\n * @type {BaseTileLayerOnSignature}\n */\n this.once;\n\n /***\n * @type {BaseTileLayerOnSignature}\n */\n this.un;\n\n /**\n * @type {number|undefined}\n * @private\n */\n this.cacheSize_ = cacheSize;\n\n this.setPreload(options.preload !== undefined ? options.preload : 0);\n this.setUseInterimTilesOnError(\n options.useInterimTilesOnError !== undefined\n ? options.useInterimTilesOnError\n : true,\n );\n }\n\n /**\n * @return {number|undefined} The suggested cache size\n * @protected\n */\n getCacheSize() {\n return this.cacheSize_;\n }\n\n /**\n * Return the level as number to which we will preload tiles up to.\n * @return {number} The level to preload tiles up to.\n * @observable\n * @api\n */\n getPreload() {\n return /** @type {number} */ (this.get(TileProperty.PRELOAD));\n }\n\n /**\n * Set the level as number to which we will preload tiles up to.\n * @param {number} preload The level to preload tiles up to.\n * @observable\n * @api\n */\n setPreload(preload) {\n this.set(TileProperty.PRELOAD, preload);\n }\n\n /**\n * Deprecated. Whether we use interim tiles on error.\n * @return {boolean} Use interim tiles on error.\n * @observable\n * @api\n */\n getUseInterimTilesOnError() {\n return /** @type {boolean} */ (\n this.get(TileProperty.USE_INTERIM_TILES_ON_ERROR)\n );\n }\n\n /**\n * Deprecated. Set whether we use interim tiles on error.\n * @param {boolean} useInterimTilesOnError Use interim tiles on error.\n * @observable\n * @api\n */\n setUseInterimTilesOnError(useInterimTilesOnError) {\n this.set(TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);\n }\n\n /**\n * Get data for a pixel location. The return type depends on the source data. For image tiles,\n * a four element RGBA array will be returned. For data tiles, the array length will match the\n * number of bands in the dataset. For requests outside the layer extent, `null` will be returned.\n * Data for a image tiles can only be retrieved if the source's `crossOrigin` property is set.\n *\n * ```js\n * // display layer data on every pointer move\n * map.on('pointermove', (event) => {\n * console.log(layer.getData(event.pixel));\n * });\n * ```\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n * @api\n * @override\n */\n getData(pixel) {\n return super.getData(pixel);\n }\n}\n\nexport default BaseTileLayer;\n", "/**\n * @module ol/layer/Tile\n */\nimport CanvasTileLayerRenderer from '../renderer/canvas/TileLayer.js';\nimport BaseTileLayer from './BaseTile.js';\n\n/**\n * @classdesc\n * For layer sources that provide pre-rendered, tiled images in grids that are\n * organized by zoom levels for specific resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Tile.js\").default} [TileSourceType=import(\"../source/Tile.js\").default]\n * @extends BaseTileLayer\n * @api\n */\nclass TileLayer extends BaseTileLayer {\n /**\n * @param {import(\"./BaseTile.js\").Options} [options] Tile layer options.\n */\n constructor(options) {\n super(options);\n }\n\n /**\n * @override\n */\n createRenderer() {\n return new CanvasTileLayerRenderer(this, {\n cacheSize: this.getCacheSize(),\n });\n }\n}\n\nexport default TileLayer;\n"], - "mappings": "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", + "mappings": "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", "names": ["Tile_default", "dx", "dy", "i", "frameState", "Layer_default", "Tile_default"] } diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Vector.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Vector.js index 66f8689..d41a957 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Vector.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_layer_Vector.js @@ -1,30 +1,31 @@ import { Vector_default -} from "./chunk-VQAOIZZU.js"; -import "./chunk-LKGRVZZI.js"; -import "./chunk-6SP66AVH.js"; -import "./chunk-S7HK3S7W.js"; -import "./chunk-33EAEVLP.js"; -import "./chunk-FM44FOIC.js"; -import "./chunk-WEQYAO4O.js"; -import "./chunk-PPP4FLHO.js"; -import "./chunk-LMC3RO5P.js"; +} from "./chunk-HFPY7EDW.js"; +import "./chunk-GKDSB34V.js"; import "./chunk-RW3V7S4F.js"; -import "./chunk-ZPDML4Q3.js"; -import "./chunk-5CPSJRE2.js"; import "./chunk-JFXZSSOM.js"; +import "./chunk-VWBYIKLE.js"; +import "./chunk-FM44FOIC.js"; +import "./chunk-WEQYAO4O.js"; +import "./chunk-RMGZ5HGX.js"; +import "./chunk-47JK3GLV.js"; import "./chunk-TRW2RYAI.js"; import "./chunk-QIVUQU5K.js"; -import "./chunk-QJJYQF6H.js"; -import "./chunk-W2FV6P6N.js"; +import "./chunk-LMC3RO5P.js"; +import "./chunk-S7HK3S7W.js"; +import "./chunk-33EAEVLP.js"; +import "./chunk-PPP4FLHO.js"; +import "./chunk-ZPDML4Q3.js"; +import "./chunk-G3HPQ3BH.js"; +import "./chunk-6GRRGW6V.js"; import "./chunk-MPRNTLUM.js"; import "./chunk-5ACH5F45.js"; -import "./chunk-QFCIXVZ3.js"; +import "./chunk-WXT7AISE.js"; import "./chunk-V2VQBN44.js"; +import "./chunk-V7KTD4MH.js"; +import "./chunk-QFCIXVZ3.js"; import "./chunk-33VDV4DG.js"; import "./chunk-FQY6EMA7.js"; -import "./chunk-WXT7AISE.js"; -import "./chunk-V7KTD4MH.js"; import "./chunk-V6TY7KAL.js"; export { Vector_default as default diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_source_OSM.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_source_OSM.js index 03cb12f..e6f1dc3 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_source_OSM.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_source_OSM.js @@ -3,7 +3,10 @@ import { createOrUpdate as createOrUpdate3, hash, withinExtentAndZ -} from "./chunk-X2KP4TK5.js"; +} from "./chunk-GQSVCNL3.js"; +import { + Source_default +} from "./chunk-DYKFAHI6.js"; import { ImageTile_default, TileRange_default, @@ -15,39 +18,21 @@ import { DEFAULT_TILE_SIZE } from "./chunk-FM44FOIC.js"; import "./chunk-WEQYAO4O.js"; +import { + intersectsLinearRing +} from "./chunk-QIVUQU5K.js"; +import "./chunk-LMC3RO5P.js"; import { scale, toSize } from "./chunk-PPP4FLHO.js"; -import "./chunk-LMC3RO5P.js"; -import { - Source_default -} from "./chunk-DYKFAHI6.js"; import "./chunk-ZPDML4Q3.js"; -import { - intersectsLinearRing -} from "./chunk-QIVUQU5K.js"; import "./chunk-MPRNTLUM.js"; import { METERS_PER_UNIT, equivalent, get } from "./chunk-5ACH5F45.js"; -import { - assert -} from "./chunk-QFCIXVZ3.js"; -import { - Event_default, - abstract, - getUid -} from "./chunk-V2VQBN44.js"; -import { - EventType_default -} from "./chunk-33VDV4DG.js"; -import { - isSorted, - linearFindNearest -} from "./chunk-FQY6EMA7.js"; import { containsCoordinate, createOrUpdate, @@ -56,12 +41,27 @@ import { getTopLeft, getWidth } from "./chunk-WXT7AISE.js"; +import { + Event_default, + abstract, + getUid +} from "./chunk-V2VQBN44.js"; import { ceil, clamp, floor, modulo } from "./chunk-V7KTD4MH.js"; +import { + assert +} from "./chunk-QFCIXVZ3.js"; +import { + EventType_default +} from "./chunk-33VDV4DG.js"; +import { + isSorted, + linearFindNearest +} from "./chunk-FQY6EMA7.js"; import "./chunk-V6TY7KAL.js"; // node_modules/ol/tilegrid/TileGrid.js diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_source_Vector.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_source_Vector.js index 99b3cc5..51c98f6 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_source_Vector.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_source_Vector.js @@ -1,27 +1,27 @@ import { VectorSourceEvent, Vector_default -} from "./chunk-2R5MNV34.js"; -import "./chunk-DYKFAHI6.js"; +} from "./chunk-JOMDBGKW.js"; +import "./chunk-6OUHCICN.js"; +import "./chunk-NER2BJ37.js"; +import "./chunk-ATTNMDTG.js"; import "./chunk-RW3V7S4F.js"; -import "./chunk-GAPTD7YR.js"; -import "./chunk-2NX2FDVC.js"; -import "./chunk-5CPSJRE2.js"; -import "./chunk-4E4H2AGX.js"; -import "./chunk-7MYDC76J.js"; import "./chunk-JFXZSSOM.js"; +import "./chunk-DYKFAHI6.js"; +import "./chunk-47JK3GLV.js"; import "./chunk-TRW2RYAI.js"; import "./chunk-QIVUQU5K.js"; -import "./chunk-QJJYQF6H.js"; -import "./chunk-W2FV6P6N.js"; +import "./chunk-4E4H2AGX.js"; +import "./chunk-G3HPQ3BH.js"; +import "./chunk-6GRRGW6V.js"; import "./chunk-MPRNTLUM.js"; import "./chunk-5ACH5F45.js"; -import "./chunk-QFCIXVZ3.js"; +import "./chunk-WXT7AISE.js"; import "./chunk-V2VQBN44.js"; +import "./chunk-V7KTD4MH.js"; +import "./chunk-QFCIXVZ3.js"; import "./chunk-33VDV4DG.js"; import "./chunk-FQY6EMA7.js"; -import "./chunk-WXT7AISE.js"; -import "./chunk-V7KTD4MH.js"; import "./chunk-V6TY7KAL.js"; export { VectorSourceEvent, diff --git a/VentusFlowWebGUI/node_modules/.vite/deps/ol_style.js b/VentusFlowWebGUI/node_modules/.vite/deps/ol_style.js index 82321eb..4c916c0 100644 --- a/VentusFlowWebGUI/node_modules/.vite/deps/ol_style.js +++ b/VentusFlowWebGUI/node_modules/.vite/deps/ol_style.js @@ -8,16 +8,16 @@ import { Stroke_default, Style_default, Text_default -} from "./chunk-LKGRVZZI.js"; -import "./chunk-33EAEVLP.js"; +} from "./chunk-GKDSB34V.js"; import "./chunk-WEQYAO4O.js"; +import "./chunk-33EAEVLP.js"; import "./chunk-PPP4FLHO.js"; import "./chunk-ZPDML4Q3.js"; -import "./chunk-QFCIXVZ3.js"; import "./chunk-V2VQBN44.js"; +import "./chunk-V7KTD4MH.js"; +import "./chunk-QFCIXVZ3.js"; import "./chunk-33VDV4DG.js"; import "./chunk-FQY6EMA7.js"; -import "./chunk-V7KTD4MH.js"; import "./chunk-V6TY7KAL.js"; export { Circle_default as Circle, From f6f516e2b3b40558bb1a8c7788ce4b09520aa036 Mon Sep 17 00:00:00 2001 From: PapaFruta <8912yl04@gmail.com> Date: Tue, 10 Jun 2025 11:06:44 +0200 Subject: [PATCH 2/3] fix minor bug, where region wont spawn after turbine --- VentusFlowWebGUI/frontend/src/main.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/VentusFlowWebGUI/frontend/src/main.js b/VentusFlowWebGUI/frontend/src/main.js index 3b37401..16ef1ab 100644 --- a/VentusFlowWebGUI/frontend/src/main.js +++ b/VentusFlowWebGUI/frontend/src/main.js @@ -151,6 +151,9 @@ let pfeilSource = null; // Karten- und Zeichenebenen-Erstellung // ====================================================================== +let wakeToTurbine = new Map(); +let turbineToWake = new Map(); + // Drag Interaction class Drag extends PointerInteraction { From adad24a8201213e13c483c2efc3197a32fdb730a Mon Sep 17 00:00:00 2001 From: PapaFruta <8912yl04@gmail.com> Date: Wed, 11 Jun 2025 13:28:14 +0200 Subject: [PATCH 3/3] working deletion --- VentusFlowWebGUI/frontend/index.html | 4 +- VentusFlowWebGUI/frontend/src/main.js | 50 ++++++++++++++++++- .../frontend/src/styles/style.css | 31 +++++++++--- 3 files changed, 75 insertions(+), 10 deletions(-) diff --git a/VentusFlowWebGUI/frontend/index.html b/VentusFlowWebGUI/frontend/index.html index 67ec8d8..d4f2599 100644 --- a/VentusFlowWebGUI/frontend/index.html +++ b/VentusFlowWebGUI/frontend/index.html @@ -28,7 +28,7 @@