diff --git a/.yarn-offline-cache/@deck.gl-mapbox-9.2.7.tgz b/.yarn-offline-cache/@deck.gl-mapbox-9.2.7.tgz new file mode 100644 index 00000000..15543b1c Binary files /dev/null and b/.yarn-offline-cache/@deck.gl-mapbox-9.2.7.tgz differ diff --git a/.yarn-offline-cache/@mapbox-geojson-rewind-0.5.2.tgz b/.yarn-offline-cache/@mapbox-geojson-rewind-0.5.2.tgz new file mode 100644 index 00000000..1ebaa712 Binary files /dev/null and b/.yarn-offline-cache/@mapbox-geojson-rewind-0.5.2.tgz differ diff --git a/.yarn-offline-cache/@mapbox-jsonlint-lines-primitives-2.0.2.tgz b/.yarn-offline-cache/@mapbox-jsonlint-lines-primitives-2.0.2.tgz new file mode 100644 index 00000000..ac6c0ccd Binary files /dev/null and b/.yarn-offline-cache/@mapbox-jsonlint-lines-primitives-2.0.2.tgz differ diff --git a/.yarn-offline-cache/@mapbox-point-geometry-1.1.0.tgz b/.yarn-offline-cache/@mapbox-point-geometry-1.1.0.tgz new file mode 100644 index 00000000..d8138194 Binary files /dev/null and b/.yarn-offline-cache/@mapbox-point-geometry-1.1.0.tgz differ diff --git a/.yarn-offline-cache/@mapbox-unitbezier-0.0.1.tgz b/.yarn-offline-cache/@mapbox-unitbezier-0.0.1.tgz new file mode 100644 index 00000000..c0bb66ad Binary files /dev/null and b/.yarn-offline-cache/@mapbox-unitbezier-0.0.1.tgz differ diff --git a/.yarn-offline-cache/@mapbox-vector-tile-2.0.4.tgz b/.yarn-offline-cache/@mapbox-vector-tile-2.0.4.tgz new file mode 100644 index 00000000..cf8f349e Binary files /dev/null and b/.yarn-offline-cache/@mapbox-vector-tile-2.0.4.tgz differ diff --git a/.yarn-offline-cache/@mapbox-whoots-js-3.1.0.tgz b/.yarn-offline-cache/@mapbox-whoots-js-3.1.0.tgz new file mode 100644 index 00000000..da91d004 Binary files /dev/null and b/.yarn-offline-cache/@mapbox-whoots-js-3.1.0.tgz differ diff --git a/.yarn-offline-cache/@maplibre-geojson-vt-5.0.4.tgz b/.yarn-offline-cache/@maplibre-geojson-vt-5.0.4.tgz new file mode 100644 index 00000000..89eee8ca Binary files /dev/null and b/.yarn-offline-cache/@maplibre-geojson-vt-5.0.4.tgz differ diff --git a/.yarn-offline-cache/@maplibre-maplibre-gl-style-spec-24.4.1.tgz b/.yarn-offline-cache/@maplibre-maplibre-gl-style-spec-24.4.1.tgz new file mode 100644 index 00000000..114bd3ee Binary files /dev/null and b/.yarn-offline-cache/@maplibre-maplibre-gl-style-spec-24.4.1.tgz differ diff --git a/.yarn-offline-cache/@maplibre-mlt-1.1.6.tgz b/.yarn-offline-cache/@maplibre-mlt-1.1.6.tgz new file mode 100644 index 00000000..4ad84959 Binary files /dev/null and b/.yarn-offline-cache/@maplibre-mlt-1.1.6.tgz differ diff --git a/.yarn-offline-cache/@maplibre-vt-pbf-4.2.1.tgz b/.yarn-offline-cache/@maplibre-vt-pbf-4.2.1.tgz new file mode 100644 index 00000000..dee44804 Binary files /dev/null and b/.yarn-offline-cache/@maplibre-vt-pbf-4.2.1.tgz differ diff --git a/.yarn-offline-cache/@turf-along-7.3.4.tgz b/.yarn-offline-cache/@turf-along-7.3.4.tgz new file mode 100644 index 00000000..3584ca93 Binary files /dev/null and b/.yarn-offline-cache/@turf-along-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-angle-7.3.4.tgz b/.yarn-offline-cache/@turf-angle-7.3.4.tgz new file mode 100644 index 00000000..98540c86 Binary files /dev/null and b/.yarn-offline-cache/@turf-angle-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-area-7.3.4.tgz b/.yarn-offline-cache/@turf-area-7.3.4.tgz new file mode 100644 index 00000000..e4bda4c9 Binary files /dev/null and b/.yarn-offline-cache/@turf-area-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-bbox-7.3.4.tgz b/.yarn-offline-cache/@turf-bbox-7.3.4.tgz new file mode 100644 index 00000000..b7c8262a Binary files /dev/null and b/.yarn-offline-cache/@turf-bbox-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-bbox-clip-7.3.4.tgz b/.yarn-offline-cache/@turf-bbox-clip-7.3.4.tgz new file mode 100644 index 00000000..be6cd98f Binary files /dev/null and b/.yarn-offline-cache/@turf-bbox-clip-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-bbox-polygon-7.3.4.tgz b/.yarn-offline-cache/@turf-bbox-polygon-7.3.4.tgz new file mode 100644 index 00000000..02723e76 Binary files /dev/null and b/.yarn-offline-cache/@turf-bbox-polygon-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-bearing-7.3.4.tgz b/.yarn-offline-cache/@turf-bearing-7.3.4.tgz new file mode 100644 index 00000000..368e7f2b Binary files /dev/null and b/.yarn-offline-cache/@turf-bearing-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-bezier-spline-7.3.4.tgz b/.yarn-offline-cache/@turf-bezier-spline-7.3.4.tgz new file mode 100644 index 00000000..44c36315 Binary files /dev/null and b/.yarn-offline-cache/@turf-bezier-spline-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-clockwise-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-clockwise-7.3.4.tgz new file mode 100644 index 00000000..1cb3fa62 Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-clockwise-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-concave-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-concave-7.3.4.tgz new file mode 100644 index 00000000..6f61f495 Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-concave-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-contains-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-contains-7.3.4.tgz new file mode 100644 index 00000000..08430c27 Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-contains-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-crosses-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-crosses-7.3.4.tgz new file mode 100644 index 00000000..6dbdd7ca Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-crosses-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-disjoint-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-disjoint-7.3.4.tgz new file mode 100644 index 00000000..9e9bc7f4 Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-disjoint-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-equal-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-equal-7.3.4.tgz new file mode 100644 index 00000000..4f460468 Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-equal-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-intersects-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-intersects-7.3.4.tgz new file mode 100644 index 00000000..dcfce0f9 Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-intersects-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-overlap-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-overlap-7.3.4.tgz new file mode 100644 index 00000000..00cb96be Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-overlap-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-parallel-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-parallel-7.3.4.tgz new file mode 100644 index 00000000..285e9fb5 Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-parallel-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-point-in-polygon-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-point-in-polygon-7.3.4.tgz new file mode 100644 index 00000000..f117462a Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-point-in-polygon-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-point-on-line-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-point-on-line-7.3.4.tgz new file mode 100644 index 00000000..e13006eb Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-point-on-line-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-touches-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-touches-7.3.4.tgz new file mode 100644 index 00000000..4ff4de6a Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-touches-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-valid-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-valid-7.3.4.tgz new file mode 100644 index 00000000..8e142599 Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-valid-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-boolean-within-7.3.4.tgz b/.yarn-offline-cache/@turf-boolean-within-7.3.4.tgz new file mode 100644 index 00000000..7378ad54 Binary files /dev/null and b/.yarn-offline-cache/@turf-boolean-within-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-buffer-7.3.4.tgz b/.yarn-offline-cache/@turf-buffer-7.3.4.tgz new file mode 100644 index 00000000..410645c0 Binary files /dev/null and b/.yarn-offline-cache/@turf-buffer-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-center-7.3.4.tgz b/.yarn-offline-cache/@turf-center-7.3.4.tgz new file mode 100644 index 00000000..fcdf451e Binary files /dev/null and b/.yarn-offline-cache/@turf-center-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-center-mean-7.3.4.tgz b/.yarn-offline-cache/@turf-center-mean-7.3.4.tgz new file mode 100644 index 00000000..fd74eac1 Binary files /dev/null and b/.yarn-offline-cache/@turf-center-mean-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-center-median-7.3.4.tgz b/.yarn-offline-cache/@turf-center-median-7.3.4.tgz new file mode 100644 index 00000000..aaa4ee19 Binary files /dev/null and b/.yarn-offline-cache/@turf-center-median-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-center-of-mass-7.3.4.tgz b/.yarn-offline-cache/@turf-center-of-mass-7.3.4.tgz new file mode 100644 index 00000000..d6591d7f Binary files /dev/null and b/.yarn-offline-cache/@turf-center-of-mass-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-centroid-7.3.4.tgz b/.yarn-offline-cache/@turf-centroid-7.3.4.tgz new file mode 100644 index 00000000..12d65fd3 Binary files /dev/null and b/.yarn-offline-cache/@turf-centroid-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-circle-7.3.4.tgz b/.yarn-offline-cache/@turf-circle-7.3.4.tgz new file mode 100644 index 00000000..db705d82 Binary files /dev/null and b/.yarn-offline-cache/@turf-circle-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-clean-coords-7.3.4.tgz b/.yarn-offline-cache/@turf-clean-coords-7.3.4.tgz new file mode 100644 index 00000000..ab1924b2 Binary files /dev/null and b/.yarn-offline-cache/@turf-clean-coords-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-clone-7.3.4.tgz b/.yarn-offline-cache/@turf-clone-7.3.4.tgz new file mode 100644 index 00000000..bf269069 Binary files /dev/null and b/.yarn-offline-cache/@turf-clone-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-clusters-7.3.4.tgz b/.yarn-offline-cache/@turf-clusters-7.3.4.tgz new file mode 100644 index 00000000..878e1553 Binary files /dev/null and b/.yarn-offline-cache/@turf-clusters-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-clusters-dbscan-7.3.4.tgz b/.yarn-offline-cache/@turf-clusters-dbscan-7.3.4.tgz new file mode 100644 index 00000000..e32a2abb Binary files /dev/null and b/.yarn-offline-cache/@turf-clusters-dbscan-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-clusters-kmeans-7.3.4.tgz b/.yarn-offline-cache/@turf-clusters-kmeans-7.3.4.tgz new file mode 100644 index 00000000..63429199 Binary files /dev/null and b/.yarn-offline-cache/@turf-clusters-kmeans-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-collect-7.3.4.tgz b/.yarn-offline-cache/@turf-collect-7.3.4.tgz new file mode 100644 index 00000000..6744353e Binary files /dev/null and b/.yarn-offline-cache/@turf-collect-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-combine-7.3.4.tgz b/.yarn-offline-cache/@turf-combine-7.3.4.tgz new file mode 100644 index 00000000..a7057ff8 Binary files /dev/null and b/.yarn-offline-cache/@turf-combine-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-concave-7.3.4.tgz b/.yarn-offline-cache/@turf-concave-7.3.4.tgz new file mode 100644 index 00000000..c17118d2 Binary files /dev/null and b/.yarn-offline-cache/@turf-concave-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-convex-7.3.4.tgz b/.yarn-offline-cache/@turf-convex-7.3.4.tgz new file mode 100644 index 00000000..dc553593 Binary files /dev/null and b/.yarn-offline-cache/@turf-convex-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-destination-7.3.4.tgz b/.yarn-offline-cache/@turf-destination-7.3.4.tgz new file mode 100644 index 00000000..60e15d24 Binary files /dev/null and b/.yarn-offline-cache/@turf-destination-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-difference-7.3.4.tgz b/.yarn-offline-cache/@turf-difference-7.3.4.tgz new file mode 100644 index 00000000..f70ed640 Binary files /dev/null and b/.yarn-offline-cache/@turf-difference-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-dissolve-7.3.4.tgz b/.yarn-offline-cache/@turf-dissolve-7.3.4.tgz new file mode 100644 index 00000000..1f3a98e0 Binary files /dev/null and b/.yarn-offline-cache/@turf-dissolve-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-distance-7.3.4.tgz b/.yarn-offline-cache/@turf-distance-7.3.4.tgz new file mode 100644 index 00000000..5912e076 Binary files /dev/null and b/.yarn-offline-cache/@turf-distance-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-distance-weight-7.3.4.tgz b/.yarn-offline-cache/@turf-distance-weight-7.3.4.tgz new file mode 100644 index 00000000..08fd90cb Binary files /dev/null and b/.yarn-offline-cache/@turf-distance-weight-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-ellipse-7.3.4.tgz b/.yarn-offline-cache/@turf-ellipse-7.3.4.tgz new file mode 100644 index 00000000..3163cd97 Binary files /dev/null and b/.yarn-offline-cache/@turf-ellipse-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-envelope-7.3.4.tgz b/.yarn-offline-cache/@turf-envelope-7.3.4.tgz new file mode 100644 index 00000000..822118aa Binary files /dev/null and b/.yarn-offline-cache/@turf-envelope-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-explode-7.3.4.tgz b/.yarn-offline-cache/@turf-explode-7.3.4.tgz new file mode 100644 index 00000000..1e03cd57 Binary files /dev/null and b/.yarn-offline-cache/@turf-explode-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-flatten-7.3.4.tgz b/.yarn-offline-cache/@turf-flatten-7.3.4.tgz new file mode 100644 index 00000000..82496512 Binary files /dev/null and b/.yarn-offline-cache/@turf-flatten-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-flip-7.3.4.tgz b/.yarn-offline-cache/@turf-flip-7.3.4.tgz new file mode 100644 index 00000000..6a2b865b Binary files /dev/null and b/.yarn-offline-cache/@turf-flip-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-geojson-rbush-7.3.4.tgz b/.yarn-offline-cache/@turf-geojson-rbush-7.3.4.tgz new file mode 100644 index 00000000..e2ee28f4 Binary files /dev/null and b/.yarn-offline-cache/@turf-geojson-rbush-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-great-circle-7.3.4.tgz b/.yarn-offline-cache/@turf-great-circle-7.3.4.tgz new file mode 100644 index 00000000..a11cc738 Binary files /dev/null and b/.yarn-offline-cache/@turf-great-circle-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-helpers-7.3.4.tgz b/.yarn-offline-cache/@turf-helpers-7.3.4.tgz new file mode 100644 index 00000000..ee65c7ca Binary files /dev/null and b/.yarn-offline-cache/@turf-helpers-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-hex-grid-7.3.4.tgz b/.yarn-offline-cache/@turf-hex-grid-7.3.4.tgz new file mode 100644 index 00000000..d0024c7f Binary files /dev/null and b/.yarn-offline-cache/@turf-hex-grid-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-interpolate-7.3.4.tgz b/.yarn-offline-cache/@turf-interpolate-7.3.4.tgz new file mode 100644 index 00000000..7bd2b895 Binary files /dev/null and b/.yarn-offline-cache/@turf-interpolate-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-intersect-7.3.4.tgz b/.yarn-offline-cache/@turf-intersect-7.3.4.tgz new file mode 100644 index 00000000..43093a57 Binary files /dev/null and b/.yarn-offline-cache/@turf-intersect-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-invariant-7.3.4.tgz b/.yarn-offline-cache/@turf-invariant-7.3.4.tgz new file mode 100644 index 00000000..355413ca Binary files /dev/null and b/.yarn-offline-cache/@turf-invariant-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-isobands-7.3.4.tgz b/.yarn-offline-cache/@turf-isobands-7.3.4.tgz new file mode 100644 index 00000000..b9031e50 Binary files /dev/null and b/.yarn-offline-cache/@turf-isobands-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-isolines-7.3.4.tgz b/.yarn-offline-cache/@turf-isolines-7.3.4.tgz new file mode 100644 index 00000000..8320db35 Binary files /dev/null and b/.yarn-offline-cache/@turf-isolines-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-jsts-2.7.2.tgz b/.yarn-offline-cache/@turf-jsts-2.7.2.tgz new file mode 100644 index 00000000..e5a4bb37 Binary files /dev/null and b/.yarn-offline-cache/@turf-jsts-2.7.2.tgz differ diff --git a/.yarn-offline-cache/@turf-kinks-7.3.4.tgz b/.yarn-offline-cache/@turf-kinks-7.3.4.tgz new file mode 100644 index 00000000..fd7fd7d0 Binary files /dev/null and b/.yarn-offline-cache/@turf-kinks-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-length-7.3.4.tgz b/.yarn-offline-cache/@turf-length-7.3.4.tgz new file mode 100644 index 00000000..181f3e92 Binary files /dev/null and b/.yarn-offline-cache/@turf-length-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-line-arc-7.3.4.tgz b/.yarn-offline-cache/@turf-line-arc-7.3.4.tgz new file mode 100644 index 00000000..94543f3c Binary files /dev/null and b/.yarn-offline-cache/@turf-line-arc-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-line-chunk-7.3.4.tgz b/.yarn-offline-cache/@turf-line-chunk-7.3.4.tgz new file mode 100644 index 00000000..b1c5f3e0 Binary files /dev/null and b/.yarn-offline-cache/@turf-line-chunk-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-line-intersect-7.3.4.tgz b/.yarn-offline-cache/@turf-line-intersect-7.3.4.tgz new file mode 100644 index 00000000..b2e8f638 Binary files /dev/null and b/.yarn-offline-cache/@turf-line-intersect-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-line-offset-7.3.4.tgz b/.yarn-offline-cache/@turf-line-offset-7.3.4.tgz new file mode 100644 index 00000000..a40071d5 Binary files /dev/null and b/.yarn-offline-cache/@turf-line-offset-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-line-overlap-7.3.4.tgz b/.yarn-offline-cache/@turf-line-overlap-7.3.4.tgz new file mode 100644 index 00000000..acc10815 Binary files /dev/null and b/.yarn-offline-cache/@turf-line-overlap-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-line-segment-7.3.4.tgz b/.yarn-offline-cache/@turf-line-segment-7.3.4.tgz new file mode 100644 index 00000000..3f94e3d4 Binary files /dev/null and b/.yarn-offline-cache/@turf-line-segment-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-line-slice-7.3.4.tgz b/.yarn-offline-cache/@turf-line-slice-7.3.4.tgz new file mode 100644 index 00000000..6eea8d1c Binary files /dev/null and b/.yarn-offline-cache/@turf-line-slice-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-line-slice-along-7.3.4.tgz b/.yarn-offline-cache/@turf-line-slice-along-7.3.4.tgz new file mode 100644 index 00000000..b46191c4 Binary files /dev/null and b/.yarn-offline-cache/@turf-line-slice-along-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-line-split-7.3.4.tgz b/.yarn-offline-cache/@turf-line-split-7.3.4.tgz new file mode 100644 index 00000000..7e6c4b79 Binary files /dev/null and b/.yarn-offline-cache/@turf-line-split-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-line-to-polygon-7.3.4.tgz b/.yarn-offline-cache/@turf-line-to-polygon-7.3.4.tgz new file mode 100644 index 00000000..7ad688dd Binary files /dev/null and b/.yarn-offline-cache/@turf-line-to-polygon-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-mask-7.3.4.tgz b/.yarn-offline-cache/@turf-mask-7.3.4.tgz new file mode 100644 index 00000000..e2614832 Binary files /dev/null and b/.yarn-offline-cache/@turf-mask-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-meta-7.3.4.tgz b/.yarn-offline-cache/@turf-meta-7.3.4.tgz new file mode 100644 index 00000000..42898ed6 Binary files /dev/null and b/.yarn-offline-cache/@turf-meta-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-midpoint-7.3.4.tgz b/.yarn-offline-cache/@turf-midpoint-7.3.4.tgz new file mode 100644 index 00000000..6c5e16ba Binary files /dev/null and b/.yarn-offline-cache/@turf-midpoint-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-moran-index-7.3.4.tgz b/.yarn-offline-cache/@turf-moran-index-7.3.4.tgz new file mode 100644 index 00000000..a5c65660 Binary files /dev/null and b/.yarn-offline-cache/@turf-moran-index-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-nearest-neighbor-analysis-7.3.4.tgz b/.yarn-offline-cache/@turf-nearest-neighbor-analysis-7.3.4.tgz new file mode 100644 index 00000000..9e1bf749 Binary files /dev/null and b/.yarn-offline-cache/@turf-nearest-neighbor-analysis-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-nearest-point-7.3.4.tgz b/.yarn-offline-cache/@turf-nearest-point-7.3.4.tgz new file mode 100644 index 00000000..16a1695f Binary files /dev/null and b/.yarn-offline-cache/@turf-nearest-point-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-nearest-point-on-line-7.3.4.tgz b/.yarn-offline-cache/@turf-nearest-point-on-line-7.3.4.tgz new file mode 100644 index 00000000..dc639312 Binary files /dev/null and b/.yarn-offline-cache/@turf-nearest-point-on-line-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-nearest-point-to-line-7.3.4.tgz b/.yarn-offline-cache/@turf-nearest-point-to-line-7.3.4.tgz new file mode 100644 index 00000000..5838aa06 Binary files /dev/null and b/.yarn-offline-cache/@turf-nearest-point-to-line-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-planepoint-7.3.4.tgz b/.yarn-offline-cache/@turf-planepoint-7.3.4.tgz new file mode 100644 index 00000000..54a766f0 Binary files /dev/null and b/.yarn-offline-cache/@turf-planepoint-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-point-grid-7.3.4.tgz b/.yarn-offline-cache/@turf-point-grid-7.3.4.tgz new file mode 100644 index 00000000..4e81f2f8 Binary files /dev/null and b/.yarn-offline-cache/@turf-point-grid-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-point-on-feature-7.3.4.tgz b/.yarn-offline-cache/@turf-point-on-feature-7.3.4.tgz new file mode 100644 index 00000000..073e57e5 Binary files /dev/null and b/.yarn-offline-cache/@turf-point-on-feature-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-point-to-line-distance-7.3.4.tgz b/.yarn-offline-cache/@turf-point-to-line-distance-7.3.4.tgz new file mode 100644 index 00000000..98b28709 Binary files /dev/null and b/.yarn-offline-cache/@turf-point-to-line-distance-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-point-to-polygon-distance-7.3.4.tgz b/.yarn-offline-cache/@turf-point-to-polygon-distance-7.3.4.tgz new file mode 100644 index 00000000..d95d11d3 Binary files /dev/null and b/.yarn-offline-cache/@turf-point-to-polygon-distance-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-points-within-polygon-7.3.4.tgz b/.yarn-offline-cache/@turf-points-within-polygon-7.3.4.tgz new file mode 100644 index 00000000..4d459ea2 Binary files /dev/null and b/.yarn-offline-cache/@turf-points-within-polygon-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-polygon-smooth-7.3.4.tgz b/.yarn-offline-cache/@turf-polygon-smooth-7.3.4.tgz new file mode 100644 index 00000000..c7ddd0f5 Binary files /dev/null and b/.yarn-offline-cache/@turf-polygon-smooth-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-polygon-tangents-7.3.4.tgz b/.yarn-offline-cache/@turf-polygon-tangents-7.3.4.tgz new file mode 100644 index 00000000..a56cb19e Binary files /dev/null and b/.yarn-offline-cache/@turf-polygon-tangents-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-polygon-to-line-7.3.4.tgz b/.yarn-offline-cache/@turf-polygon-to-line-7.3.4.tgz new file mode 100644 index 00000000..615ebac9 Binary files /dev/null and b/.yarn-offline-cache/@turf-polygon-to-line-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-polygonize-7.3.4.tgz b/.yarn-offline-cache/@turf-polygonize-7.3.4.tgz new file mode 100644 index 00000000..cf2356a9 Binary files /dev/null and b/.yarn-offline-cache/@turf-polygonize-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-projection-7.3.4.tgz b/.yarn-offline-cache/@turf-projection-7.3.4.tgz new file mode 100644 index 00000000..1df82f5e Binary files /dev/null and b/.yarn-offline-cache/@turf-projection-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-quadrat-analysis-7.3.4.tgz b/.yarn-offline-cache/@turf-quadrat-analysis-7.3.4.tgz new file mode 100644 index 00000000..88813426 Binary files /dev/null and b/.yarn-offline-cache/@turf-quadrat-analysis-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-random-7.3.4.tgz b/.yarn-offline-cache/@turf-random-7.3.4.tgz new file mode 100644 index 00000000..d444c866 Binary files /dev/null and b/.yarn-offline-cache/@turf-random-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-rectangle-grid-7.3.4.tgz b/.yarn-offline-cache/@turf-rectangle-grid-7.3.4.tgz new file mode 100644 index 00000000..4331b2fb Binary files /dev/null and b/.yarn-offline-cache/@turf-rectangle-grid-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-rewind-7.3.4.tgz b/.yarn-offline-cache/@turf-rewind-7.3.4.tgz new file mode 100644 index 00000000..050efd45 Binary files /dev/null and b/.yarn-offline-cache/@turf-rewind-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-rhumb-bearing-7.3.4.tgz b/.yarn-offline-cache/@turf-rhumb-bearing-7.3.4.tgz new file mode 100644 index 00000000..a9f65357 Binary files /dev/null and b/.yarn-offline-cache/@turf-rhumb-bearing-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-rhumb-destination-7.3.4.tgz b/.yarn-offline-cache/@turf-rhumb-destination-7.3.4.tgz new file mode 100644 index 00000000..50cce2e4 Binary files /dev/null and b/.yarn-offline-cache/@turf-rhumb-destination-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-rhumb-distance-7.3.4.tgz b/.yarn-offline-cache/@turf-rhumb-distance-7.3.4.tgz new file mode 100644 index 00000000..3b253161 Binary files /dev/null and b/.yarn-offline-cache/@turf-rhumb-distance-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-sample-7.3.4.tgz b/.yarn-offline-cache/@turf-sample-7.3.4.tgz new file mode 100644 index 00000000..138baa63 Binary files /dev/null and b/.yarn-offline-cache/@turf-sample-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-sector-7.3.4.tgz b/.yarn-offline-cache/@turf-sector-7.3.4.tgz new file mode 100644 index 00000000..626e10b1 Binary files /dev/null and b/.yarn-offline-cache/@turf-sector-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-shortest-path-7.3.4.tgz b/.yarn-offline-cache/@turf-shortest-path-7.3.4.tgz new file mode 100644 index 00000000..eb98296c Binary files /dev/null and b/.yarn-offline-cache/@turf-shortest-path-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-simplify-7.3.4.tgz b/.yarn-offline-cache/@turf-simplify-7.3.4.tgz new file mode 100644 index 00000000..4b3c34d7 Binary files /dev/null and b/.yarn-offline-cache/@turf-simplify-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-square-7.3.4.tgz b/.yarn-offline-cache/@turf-square-7.3.4.tgz new file mode 100644 index 00000000..17307dae Binary files /dev/null and b/.yarn-offline-cache/@turf-square-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-square-grid-7.3.4.tgz b/.yarn-offline-cache/@turf-square-grid-7.3.4.tgz new file mode 100644 index 00000000..891a1500 Binary files /dev/null and b/.yarn-offline-cache/@turf-square-grid-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-standard-deviational-ellipse-7.3.4.tgz b/.yarn-offline-cache/@turf-standard-deviational-ellipse-7.3.4.tgz new file mode 100644 index 00000000..07ab5ea1 Binary files /dev/null and b/.yarn-offline-cache/@turf-standard-deviational-ellipse-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-tag-7.3.4.tgz b/.yarn-offline-cache/@turf-tag-7.3.4.tgz new file mode 100644 index 00000000..fa19d716 Binary files /dev/null and b/.yarn-offline-cache/@turf-tag-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-tesselate-7.3.4.tgz b/.yarn-offline-cache/@turf-tesselate-7.3.4.tgz new file mode 100644 index 00000000..58a37043 Binary files /dev/null and b/.yarn-offline-cache/@turf-tesselate-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-tin-7.3.4.tgz b/.yarn-offline-cache/@turf-tin-7.3.4.tgz new file mode 100644 index 00000000..7f1d5388 Binary files /dev/null and b/.yarn-offline-cache/@turf-tin-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-transform-rotate-7.3.4.tgz b/.yarn-offline-cache/@turf-transform-rotate-7.3.4.tgz new file mode 100644 index 00000000..5d4cc681 Binary files /dev/null and b/.yarn-offline-cache/@turf-transform-rotate-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-transform-scale-7.3.4.tgz b/.yarn-offline-cache/@turf-transform-scale-7.3.4.tgz new file mode 100644 index 00000000..08f9ee57 Binary files /dev/null and b/.yarn-offline-cache/@turf-transform-scale-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-transform-translate-7.3.4.tgz b/.yarn-offline-cache/@turf-transform-translate-7.3.4.tgz new file mode 100644 index 00000000..686e54d1 Binary files /dev/null and b/.yarn-offline-cache/@turf-transform-translate-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-triangle-grid-7.3.4.tgz b/.yarn-offline-cache/@turf-triangle-grid-7.3.4.tgz new file mode 100644 index 00000000..72e03bc4 Binary files /dev/null and b/.yarn-offline-cache/@turf-triangle-grid-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-truncate-7.3.4.tgz b/.yarn-offline-cache/@turf-truncate-7.3.4.tgz new file mode 100644 index 00000000..8631045a Binary files /dev/null and b/.yarn-offline-cache/@turf-truncate-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-turf-7.3.4.tgz b/.yarn-offline-cache/@turf-turf-7.3.4.tgz new file mode 100644 index 00000000..dc689747 Binary files /dev/null and b/.yarn-offline-cache/@turf-turf-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-union-7.3.4.tgz b/.yarn-offline-cache/@turf-union-7.3.4.tgz new file mode 100644 index 00000000..14ab63dc Binary files /dev/null and b/.yarn-offline-cache/@turf-union-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-unkink-polygon-7.3.4.tgz b/.yarn-offline-cache/@turf-unkink-polygon-7.3.4.tgz new file mode 100644 index 00000000..2bf6cb43 Binary files /dev/null and b/.yarn-offline-cache/@turf-unkink-polygon-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@turf-voronoi-7.3.4.tgz b/.yarn-offline-cache/@turf-voronoi-7.3.4.tgz new file mode 100644 index 00000000..34cca3fd Binary files /dev/null and b/.yarn-offline-cache/@turf-voronoi-7.3.4.tgz differ diff --git a/.yarn-offline-cache/@types-d3-voronoi-1.1.12.tgz b/.yarn-offline-cache/@types-d3-voronoi-1.1.12.tgz new file mode 100644 index 00000000..5cd2da03 Binary files /dev/null and b/.yarn-offline-cache/@types-d3-voronoi-1.1.12.tgz differ diff --git a/.yarn-offline-cache/@types-geokdbush-1.1.5.tgz b/.yarn-offline-cache/@types-geokdbush-1.1.5.tgz new file mode 100644 index 00000000..d6134e44 Binary files /dev/null and b/.yarn-offline-cache/@types-geokdbush-1.1.5.tgz differ diff --git a/.yarn-offline-cache/@types-kdbush-1.0.7.tgz b/.yarn-offline-cache/@types-kdbush-1.0.7.tgz new file mode 100644 index 00000000..26656e6a Binary files /dev/null and b/.yarn-offline-cache/@types-kdbush-1.0.7.tgz differ diff --git a/.yarn-offline-cache/@types-kdbush-3.0.5.tgz b/.yarn-offline-cache/@types-kdbush-3.0.5.tgz new file mode 100644 index 00000000..27bb5887 Binary files /dev/null and b/.yarn-offline-cache/@types-kdbush-3.0.5.tgz differ diff --git a/.yarn-offline-cache/@types-supercluster-7.1.3.tgz b/.yarn-offline-cache/@types-supercluster-7.1.3.tgz new file mode 100644 index 00000000..7f946b5d Binary files /dev/null and b/.yarn-offline-cache/@types-supercluster-7.1.3.tgz differ diff --git a/.yarn-offline-cache/arc-0.2.0.tgz b/.yarn-offline-cache/arc-0.2.0.tgz new file mode 100644 index 00000000..d2f20c2f Binary files /dev/null and b/.yarn-offline-cache/arc-0.2.0.tgz differ diff --git a/.yarn-offline-cache/bignumber.js-9.3.1.tgz b/.yarn-offline-cache/bignumber.js-9.3.1.tgz new file mode 100644 index 00000000..c5f6c7ed Binary files /dev/null and b/.yarn-offline-cache/bignumber.js-9.3.1.tgz differ diff --git a/.yarn-offline-cache/commander-2.20.3.tgz b/.yarn-offline-cache/commander-2.20.3.tgz new file mode 100644 index 00000000..6158fbbf Binary files /dev/null and b/.yarn-offline-cache/commander-2.20.3.tgz differ diff --git a/.yarn-offline-cache/concaveman-1.2.1.tgz b/.yarn-offline-cache/concaveman-1.2.1.tgz new file mode 100644 index 00000000..5cc24af4 Binary files /dev/null and b/.yarn-offline-cache/concaveman-1.2.1.tgz differ diff --git a/.yarn-offline-cache/d3-array-1.2.4.tgz b/.yarn-offline-cache/d3-array-1.2.4.tgz new file mode 100644 index 00000000..aa654459 Binary files /dev/null and b/.yarn-offline-cache/d3-array-1.2.4.tgz differ diff --git a/.yarn-offline-cache/d3-geo-1.7.1.tgz b/.yarn-offline-cache/d3-geo-1.7.1.tgz new file mode 100644 index 00000000..ee6c09b9 Binary files /dev/null and b/.yarn-offline-cache/d3-geo-1.7.1.tgz differ diff --git a/.yarn-offline-cache/d3-voronoi-1.1.2.tgz b/.yarn-offline-cache/d3-voronoi-1.1.2.tgz new file mode 100644 index 00000000..f721287d Binary files /dev/null and b/.yarn-offline-cache/d3-voronoi-1.1.2.tgz differ diff --git a/.yarn-offline-cache/geojson-equality-ts-1.0.2.tgz b/.yarn-offline-cache/geojson-equality-ts-1.0.2.tgz new file mode 100644 index 00000000..63195225 Binary files /dev/null and b/.yarn-offline-cache/geojson-equality-ts-1.0.2.tgz differ diff --git a/.yarn-offline-cache/geojson-polygon-self-intersections-1.2.2.tgz b/.yarn-offline-cache/geojson-polygon-self-intersections-1.2.2.tgz new file mode 100644 index 00000000..3ef99ff6 Binary files /dev/null and b/.yarn-offline-cache/geojson-polygon-self-intersections-1.2.2.tgz differ diff --git a/.yarn-offline-cache/geokdbush-2.0.1.tgz b/.yarn-offline-cache/geokdbush-2.0.1.tgz new file mode 100644 index 00000000..d45f3d90 Binary files /dev/null and b/.yarn-offline-cache/geokdbush-2.0.1.tgz differ diff --git a/.yarn-offline-cache/get-stream-6.0.1.tgz b/.yarn-offline-cache/get-stream-6.0.1.tgz new file mode 100644 index 00000000..7508de4a Binary files /dev/null and b/.yarn-offline-cache/get-stream-6.0.1.tgz differ diff --git a/.yarn-offline-cache/json-stringify-pretty-compact-4.0.0.tgz b/.yarn-offline-cache/json-stringify-pretty-compact-4.0.0.tgz new file mode 100644 index 00000000..27c7464b Binary files /dev/null and b/.yarn-offline-cache/json-stringify-pretty-compact-4.0.0.tgz differ diff --git a/.yarn-offline-cache/jsts-2.7.1.tgz b/.yarn-offline-cache/jsts-2.7.1.tgz new file mode 100644 index 00000000..99cb9ce2 Binary files /dev/null and b/.yarn-offline-cache/jsts-2.7.1.tgz differ diff --git a/.yarn-offline-cache/kdbush-4.0.2.tgz b/.yarn-offline-cache/kdbush-4.0.2.tgz new file mode 100644 index 00000000..0a594a16 Binary files /dev/null and b/.yarn-offline-cache/kdbush-4.0.2.tgz differ diff --git a/.yarn-offline-cache/maplibre-gl-5.18.0.tgz b/.yarn-offline-cache/maplibre-gl-5.18.0.tgz new file mode 100644 index 00000000..2ca197a7 Binary files /dev/null and b/.yarn-offline-cache/maplibre-gl-5.18.0.tgz differ diff --git a/.yarn-offline-cache/minimist-1.2.8.tgz b/.yarn-offline-cache/minimist-1.2.8.tgz new file mode 100644 index 00000000..2653b25e Binary files /dev/null and b/.yarn-offline-cache/minimist-1.2.8.tgz differ diff --git a/.yarn-offline-cache/murmurhash-js-1.0.0.tgz b/.yarn-offline-cache/murmurhash-js-1.0.0.tgz new file mode 100644 index 00000000..3731522a Binary files /dev/null and b/.yarn-offline-cache/murmurhash-js-1.0.0.tgz differ diff --git a/.yarn-offline-cache/point-in-polygon-1.1.0.tgz b/.yarn-offline-cache/point-in-polygon-1.1.0.tgz new file mode 100644 index 00000000..945b85aa Binary files /dev/null and b/.yarn-offline-cache/point-in-polygon-1.1.0.tgz differ diff --git a/.yarn-offline-cache/point-in-polygon-hao-1.2.4.tgz b/.yarn-offline-cache/point-in-polygon-hao-1.2.4.tgz new file mode 100644 index 00000000..fb37022c Binary files /dev/null and b/.yarn-offline-cache/point-in-polygon-hao-1.2.4.tgz differ diff --git a/.yarn-offline-cache/polyclip-ts-0.16.8.tgz b/.yarn-offline-cache/polyclip-ts-0.16.8.tgz new file mode 100644 index 00000000..45263660 Binary files /dev/null and b/.yarn-offline-cache/polyclip-ts-0.16.8.tgz differ diff --git a/.yarn-offline-cache/potpack-2.1.0.tgz b/.yarn-offline-cache/potpack-2.1.0.tgz new file mode 100644 index 00000000..d57f78a9 Binary files /dev/null and b/.yarn-offline-cache/potpack-2.1.0.tgz differ diff --git a/.yarn-offline-cache/quickselect-1.1.1.tgz b/.yarn-offline-cache/quickselect-1.1.1.tgz new file mode 100644 index 00000000..39e1208d Binary files /dev/null and b/.yarn-offline-cache/quickselect-1.1.1.tgz differ diff --git a/.yarn-offline-cache/rbush-2.0.2.tgz b/.yarn-offline-cache/rbush-2.0.2.tgz new file mode 100644 index 00000000..7aaea4c8 Binary files /dev/null and b/.yarn-offline-cache/rbush-2.0.2.tgz differ diff --git a/.yarn-offline-cache/robust-predicates-2.0.4.tgz b/.yarn-offline-cache/robust-predicates-2.0.4.tgz new file mode 100644 index 00000000..3b795a52 Binary files /dev/null and b/.yarn-offline-cache/robust-predicates-2.0.4.tgz differ diff --git a/.yarn-offline-cache/robust-predicates-3.0.2.tgz b/.yarn-offline-cache/robust-predicates-3.0.2.tgz new file mode 100644 index 00000000..c9a3f965 Binary files /dev/null and b/.yarn-offline-cache/robust-predicates-3.0.2.tgz differ diff --git a/.yarn-offline-cache/rw-1.3.3.tgz b/.yarn-offline-cache/rw-1.3.3.tgz new file mode 100644 index 00000000..435c646d Binary files /dev/null and b/.yarn-offline-cache/rw-1.3.3.tgz differ diff --git a/.yarn-offline-cache/skmeans-0.9.7.tgz b/.yarn-offline-cache/skmeans-0.9.7.tgz new file mode 100644 index 00000000..64abc1a9 Binary files /dev/null and b/.yarn-offline-cache/skmeans-0.9.7.tgz differ diff --git a/.yarn-offline-cache/splaytree-ts-1.0.2.tgz b/.yarn-offline-cache/splaytree-ts-1.0.2.tgz new file mode 100644 index 00000000..6923e72b Binary files /dev/null and b/.yarn-offline-cache/splaytree-ts-1.0.2.tgz differ diff --git a/.yarn-offline-cache/supercluster-8.0.1.tgz b/.yarn-offline-cache/supercluster-8.0.1.tgz new file mode 100644 index 00000000..71cf2b47 Binary files /dev/null and b/.yarn-offline-cache/supercluster-8.0.1.tgz differ diff --git a/.yarn-offline-cache/sweepline-intersections-1.5.0.tgz b/.yarn-offline-cache/sweepline-intersections-1.5.0.tgz new file mode 100644 index 00000000..5b88baf4 Binary files /dev/null and b/.yarn-offline-cache/sweepline-intersections-1.5.0.tgz differ diff --git a/.yarn-offline-cache/tinyqueue-2.0.3.tgz b/.yarn-offline-cache/tinyqueue-2.0.3.tgz new file mode 100644 index 00000000..5d28d117 Binary files /dev/null and b/.yarn-offline-cache/tinyqueue-2.0.3.tgz differ diff --git a/.yarn-offline-cache/tinyqueue-3.0.0.tgz b/.yarn-offline-cache/tinyqueue-3.0.0.tgz new file mode 100644 index 00000000..c6647eb9 Binary files /dev/null and b/.yarn-offline-cache/tinyqueue-3.0.0.tgz differ diff --git a/.yarn-offline-cache/topojson-client-3.1.0.tgz b/.yarn-offline-cache/topojson-client-3.1.0.tgz new file mode 100644 index 00000000..716087fe Binary files /dev/null and b/.yarn-offline-cache/topojson-client-3.1.0.tgz differ diff --git a/.yarn-offline-cache/topojson-server-3.0.1.tgz b/.yarn-offline-cache/topojson-server-3.0.1.tgz new file mode 100644 index 00000000..9a5abfdf Binary files /dev/null and b/.yarn-offline-cache/topojson-server-3.0.1.tgz differ diff --git a/.yarn-offline-cache/tslib-2.8.1.tgz b/.yarn-offline-cache/tslib-2.8.1.tgz new file mode 100644 index 00000000..a1e8b078 Binary files /dev/null and b/.yarn-offline-cache/tslib-2.8.1.tgz differ diff --git a/package.json b/package.json index f65df265..de5a3469 100644 --- a/package.json +++ b/package.json @@ -20,11 +20,14 @@ "@deck.gl/extensions": "^9.2.6", "@deck.gl/geo-layers": "^9.2.6", "@deck.gl/layers": "^9.2.6", + "@deck.gl/mapbox": "^9.2.7", "@deck.gl/mesh-layers": "^9.2.6", "@stomp/stompjs": "^7.2.1", + "@turf/turf": "^7.3.4", "axios": "^1.4.0", "dayjs": "^1.11.11", "html2canvas": "^1.4.1", + "maplibre-gl": "^5.18.0", "ol": "^9.2.4", "ol-ext": "^4.0.10", "react": "^19.2.4", diff --git a/src/areaSearch/components/StsContactDetailModal.tsx b/src/areaSearch/components/StsContactDetailModal.tsx index 46697839..77243ae6 100644 --- a/src/areaSearch/components/StsContactDetailModal.tsx +++ b/src/areaSearch/components/StsContactDetailModal.tsx @@ -32,7 +32,7 @@ import { formatDuration, getContactRiskColor, } from '../types/sts.types'; -import { mapLayerConfig } from '../../map/layers/baseLayer'; +import { DARK_TILE_URL } from '../../map/layers/baseLayer'; import './StsContactDetailModal.scss'; function getNationalFlagUrl(nationalCode: string | undefined): string | null { @@ -201,7 +201,7 @@ export default function StsContactDetailModal({ groupIndex, onClose }: StsContac if (!mapContainerRef.current || !group || !vessel1Track || !vessel2Track) return; const tileSource = new XYZ({ - url: mapLayerConfig.darkLayer.source.getUrls()![0], + url: DARK_TILE_URL, minZoom: 6, maxZoom: 11, }); diff --git a/src/areaSearch/components/VesselDetailModal.tsx b/src/areaSearch/components/VesselDetailModal.tsx index b178bb3a..21c4a3f0 100644 --- a/src/areaSearch/components/VesselDetailModal.tsx +++ b/src/areaSearch/components/VesselDetailModal.tsx @@ -23,7 +23,7 @@ import type { Zone, HitDetail } from '../types/areaSearch.types'; import type { ProcessedTrack } from '../stores/areaSearchStore'; import { getShipKindColor, getShipKindName, getSignalSourceName } from '../../tracking/types/trackQuery.types'; import { formatTimestamp, formatPosition } from './AreaSearchTooltip'; -import { mapLayerConfig } from '../../map/layers/baseLayer'; +import { DARK_TILE_URL } from '../../map/layers/baseLayer'; import './VesselDetailModal.scss'; function getNationalFlagUrl(nationalCode: string | undefined): string | null { @@ -288,7 +288,7 @@ export default function VesselDetailModal({ vesselId, onClose }: VesselDetailMod if (!mapContainerRef.current || !track) return; const tileSource = new XYZ({ - url: mapLayerConfig.darkLayer.source.getUrls()![0], + url: DARK_TILE_URL, minZoom: 6, maxZoom: 11, }); diff --git a/src/areaSearch/hooks/useZoneDraw.ts b/src/areaSearch/hooks/useZoneDraw.ts index 0f75b73b..dc19b9c0 100644 --- a/src/areaSearch/hooks/useZoneDraw.ts +++ b/src/areaSearch/hooks/useZoneDraw.ts @@ -67,6 +67,12 @@ export default function useZoneDraw(): void { useEffect(() => { if (!map) return; + // MapLibre 전환 후 OL VectorLayer는 호환 불가 — Session G에서 MapLibre 네이티브로 마이그레이션 + if (typeof map.getCanvas === 'function') { + console.warn('[useZoneDraw] MapLibre 맵 감지 — OL 구역 레이어 비활성화 (Session G에서 마이그레이션)'); + return; + } + const source = new VectorSource({ wrapX: false }); const layer = new VectorLayer({ source, diff --git a/src/areaSearch/hooks/useZoneEdit.ts b/src/areaSearch/hooks/useZoneEdit.ts index 528848e7..76b95cb9 100644 --- a/src/areaSearch/hooks/useZoneEdit.ts +++ b/src/areaSearch/hooks/useZoneEdit.ts @@ -19,6 +19,8 @@ import type Feature from 'ol/Feature'; import type { Geometry, Polygon } from 'ol/geom'; import type { Coordinate } from 'ol/coordinate'; import type MapBrowserEvent from 'ol/MapBrowserEvent'; +import type { FeatureLike } from 'ol/Feature'; +import type Layer from 'ol/layer/Layer'; import { useMapStore } from '../../stores/mapStore'; import { useAreaSearchStore } from '../stores/areaSearchStore'; import { ZONE_COLORS, ZONE_DRAW_TYPES } from '../types/areaSearch.types'; @@ -296,6 +298,9 @@ export default function useZoneEdit(): void { useEffect(() => { if (!map) return; + // MapLibre 전환 후 OL 이벤트 호환 불가 — Session G에서 마이그레이션 + if (typeof map.getCanvas === 'function') return; + const handleClick = (evt: MapBrowserEvent) => { // Drawing 중이면 무시 if (useAreaSearchStore.getState().activeDrawType) return; @@ -310,11 +315,11 @@ export default function useZoneEdit(): void { let clickedZone: Zone | undefined; const { zones } = useAreaSearchStore.getState(); - map.forEachFeatureAtPixel(evt.pixel, (feature) => { + map.forEachFeatureAtPixel(evt.pixel, (feature: FeatureLike) => { if (clickedZone) return; // 이미 찾았으면 무시 const zone = zones.find((z: Zone) => z.olFeature === feature); if (zone) clickedZone = zone; - }, { layerFilter: (layer) => layer.getSource() === source }); + }, { layerFilter: (layer: Layer) => layer.getSource() === source }); const { selectedZoneId } = useAreaSearchStore.getState(); @@ -345,6 +350,7 @@ export default function useZoneEdit(): void { // 우클릭 꼭짓점 삭제 (Polygon 전용) useEffect(() => { if (!map) return; + if (typeof map.getCanvas === 'function') return; // MapLibre 가드 const handleContextMenu = (e: MouseEvent) => { const { selectedZoneId, zones } = useAreaSearchStore.getState(); @@ -426,6 +432,7 @@ export default function useZoneEdit(): void { // pointermove → 호버 피드백 (커서 + 스타일) useEffect(() => { if (!map) return; + if (typeof map.getCanvas === 'function') return; // MapLibre 가드 const viewport = map.getViewport(); @@ -470,9 +477,9 @@ export default function useZoneEdit(): void { // 선택된 구역 내부 → move let overSelected = false; - map.forEachFeatureAtPixel(evt.pixel, (feature) => { + map.forEachFeatureAtPixel(evt.pixel, (feature: FeatureLike) => { if (feature === zone.olFeature) overSelected = true; - }, { layerFilter: (l) => l.getSource() === source }); + }, { layerFilter: (l: Layer) => l.getSource() === source }); if (overSelected) { viewport.style.cursor = 'move'; @@ -483,11 +490,11 @@ export default function useZoneEdit(): void { // 2. 비선택 구역 호버 let hoveredZone: Zone | undefined; - map.forEachFeatureAtPixel(evt.pixel, (feature) => { + map.forEachFeatureAtPixel(evt.pixel, (feature: FeatureLike) => { if (hoveredZone) return; const zone = zones.find((z: Zone) => z.olFeature === feature && z.id !== selectedZoneId); if (zone) hoveredZone = zone; - }, { layerFilter: (l) => l.getSource() === source }); + }, { layerFilter: (l: Layer) => l.getSource() === source }); if (hoveredZone) { const hz = hoveredZone as Zone; diff --git a/src/components/map/TopBar.tsx b/src/components/map/TopBar.tsx index daa2b7ef..73f16ae8 100644 --- a/src/components/map/TopBar.tsx +++ b/src/components/map/TopBar.tsx @@ -6,7 +6,6 @@ * - 선박 검색 (통합모드 ON/OFF에 따른 검색 조건 분기) */ import { useState, useEffect, useCallback, useRef } from 'react'; -import { toLonLat } from 'ol/proj'; import { useMapStore } from '../../stores/mapStore'; import useTrackingModeStore from '../../stores/trackingModeStore'; import useShipSearch, { type SearchResult } from '../../hooks/useShipSearch'; @@ -145,12 +144,12 @@ export default function TopBar() { // 좌표 업데이트 쓰로틀 ref const throttleRef = useRef | null>(null); - // 마우스 이동 시 좌표 업데이트 + // 마우스 이동 시 좌표 업데이트 (MapLibre API) useEffect(() => { if (!map) return; // eslint-disable-next-line @typescript-eslint/no-explicit-any - const handlePointerMove = (evt: any) => { + const handleMouseMove = (evt: any) => { // 쓰로틀: 100ms if (throttleRef.current) return; @@ -158,21 +157,18 @@ export default function TopBar() { throttleRef.current = null; }, 100); - const pixel = evt.pixel; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const coord3857 = (map as any).getCoordinateFromPixel(pixel); - if (coord3857) { - const [lon, lat] = toLonLat(coord3857); - setCoordinates({ lon, lat }); + const lngLat = evt.lngLat; + if (lngLat) { + setCoordinates({ lon: lngLat.lng, lat: lngLat.lat }); } }; // eslint-disable-next-line @typescript-eslint/no-explicit-any - (map as any).on('pointermove', handlePointerMove); + (map as any).on('mousemove', handleMouseMove); return () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any - (map as any).un('pointermove', handlePointerMove); + (map as any).off('mousemove', handleMouseMove); if (throttleRef.current) { clearTimeout(throttleRef.current); throttleRef.current = null; diff --git a/src/hooks/useRealmLayer.ts b/src/hooks/useRealmLayer.ts index 93ca1515..af5ee1b4 100644 --- a/src/hooks/useRealmLayer.ts +++ b/src/hooks/useRealmLayer.ts @@ -35,6 +35,12 @@ export default function useRealmLayer(): void { useEffect(() => { if (!map) return; + // MapLibre 전환 후 OL VectorLayer는 호환 불가 — Session E에서 MapLibre 네이티브 레이어로 마이그레이션 + if (typeof map.addControl === 'function' && typeof map.getCanvas === 'function') { + console.warn('[useRealmLayer] MapLibre 맵 감지 — OL 관심구역 레이어 비활성화 (Session E에서 마이그레이션)'); + return; + } + const source = new VectorSource(); const layer = new VectorLayer({ source, diff --git a/src/hooks/useShipLayer.ts b/src/hooks/useShipLayer.ts index 8de3a4a2..844242c7 100644 --- a/src/hooks/useShipLayer.ts +++ b/src/hooks/useShipLayer.ts @@ -1,16 +1,12 @@ /** * 선박 Deck.gl 레이어 관리 훅 - * - OpenLayers 맵과 Deck.gl 레이어 통합 + * - MapLibre GL JS + @deck.gl/mapbox MapboxOverlay 자동 통합 * - 배치 렌더러 기반 최적화된 렌더링 * - 선박 데이터 변경 시 레이어 업데이트 * - 항적 레이어: 정적(경로/포인트) 캐싱 + 동적(가상선박) 경량 갱신 - * - * 참조: mda-react-front/src/common/deck.ts */ import { useEffect, useRef, useCallback } from 'react'; -import { Deck } from '@deck.gl/core'; -import { toLonLat } from 'ol/proj'; -import type Map from 'ol/Map'; +import { MapboxOverlay } from '@deck.gl/mapbox'; import { createShipLayers, clearClusterCache } from '../map/layers/shipLayer'; import useShipStore from '../stores/shipStore'; import { useTrackQueryStore } from '../tracking/stores/trackQueryStore'; @@ -33,19 +29,17 @@ interface ViewportBounds { /** useShipLayer 반환 타입 */ interface UseShipLayerReturn { - deckCanvas: HTMLCanvasElement | null; - deckRef: React.MutableRefObject; + deckCanvas: null; + deckRef: React.MutableRefObject; } /** * 선박 레이어 관리 훅 - * @param {Map | null} map - OpenLayers 맵 인스턴스 - * @returns {UseShipLayerReturn} { deckCanvas } + * @param map - MapLibre GL JS 맵 인스턴스 (mapStore에서 any 타입) */ -export default function useShipLayer(map: Map | null): UseShipLayerReturn { - const deckRef = useRef(null); - const canvasRef = useRef(null); - const animationFrameRef = useRef(null); +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export default function useShipLayer(map: any): UseShipLayerReturn { + const overlayRef = useRef(null); const batchRendererInitialized = useRef(false); const getSelectedShips = useShipStore((s) => s.getSelectedShips); @@ -56,77 +50,22 @@ export default function useShipLayer(map: Map | null): UseShipLayerReturn { const lastShipLayersRef = useRef([]); /** - * Deck.gl 인스턴스 초기화 - */ - const initDeck = useCallback((container: HTMLElement): void => { - if (deckRef.current) return; - - const canvas = document.createElement('canvas'); - canvas.id = 'deck-canvas'; - canvas.style.position = 'absolute'; - canvas.style.left = '0'; - canvas.style.top = '0'; - canvas.style.width = '100%'; - canvas.style.height = '100%'; - canvas.style.pointerEvents = 'none'; - canvas.style.zIndex = '0'; - container.appendChild(canvas); - canvasRef.current = canvas; - - deckRef.current = new Deck({ - canvas, - controller: false, - layers: [], - useDevicePixels: true, - pickingRadius: 20, - onError: (error: Error) => { - console.error('[Deck.gl] Error:', error); - }, - }); - }, []); - - /** - * Deck.gl viewState를 OpenLayers 뷰와 동기화 - */ - const syncViewState = useCallback((): void => { - if (!map || !deckRef.current) return; - - const view = map.getView(); - const center = view.getCenter(); - const zoom = view.getZoom(); - const rotation = view.getRotation(); - - if (!center || zoom === undefined) return; - - const [lon, lat] = toLonLat(center); - - deckRef.current.setProps({ - viewState: { - longitude: lon, - latitude: lat, - zoom: zoom - 1, - bearing: (-rotation * 180) / Math.PI, - pitch: 0, - }, - }); - }, [map]); - - /** - * 뷰포트 범위 계산 + * 뷰포트 범위 계산 (MapLibre 네이티브) */ const getViewportBounds = useCallback((): ViewportBounds | null => { if (!map) return null; - const view = map.getView(); - const size = map.getSize(); - if (!size) return null; - - const extent = view.calculateExtent(size); - const [minX, minY, maxX, maxY] = extent; - const [minLon, minLat] = toLonLat([minX, minY]); - const [maxLon, maxLat] = toLonLat([maxX, maxY]); - - return { minLon, maxLon, minLat, maxLat }; + try { + const bounds = map.getBounds(); + return { + minLon: bounds.getWest(), + maxLon: bounds.getEast(), + minLat: bounds.getSouth(), + maxLat: bounds.getNorth(), + }; + } catch { + return null; + } }, [map]); /** @@ -134,10 +73,10 @@ export default function useShipLayer(map: Map | null): UseShipLayerReturn { */ // eslint-disable-next-line @typescript-eslint/no-explicit-any const handleBatchRender = useCallback((ships: any[], trigger: number): void => { - if (!deckRef.current || !map) return; + if (!overlayRef.current || !map) return; - const view = map.getView(); - const zoom = view.getZoom() || 7; + // mapStore.zoom은 OL 규약 (= MapLibre zoom + 1) + const zoom = useMapStore.getState().zoom; const selectedShips = getSelectedShips(); const { showLabels: currentShowLabels, labelOptions: currentLabelOptions, isIntegrate: currentIsIntegrate, darkSignalIds } = useShipStore.getState(); @@ -166,7 +105,7 @@ export default function useShipLayer(map: Map | null): UseShipLayerReturn { const stsLayers = getStsLayers(); // 병합: 선박 + 항적 + 리플레이 + 항적분석 + STS 레이어 - deckRef.current.setProps({ + overlayRef.current.setProps({ layers: [...shipLayers, ...trackLayers, ...replayLayers, ...areaSearchLayers, ...stsLayers], }); }, [map, getSelectedShips]); @@ -175,15 +114,15 @@ export default function useShipLayer(map: Map | null): UseShipLayerReturn { * 선박 레이어 업데이트 (배치 렌더러 사용) */ const updateLayers = useCallback((): void => { - if (!deckRef.current || !map) return; + if (!overlayRef.current || !map) return; if (!isShipVisible) { - deckRef.current.setProps({ layers: [] }); + overlayRef.current.setProps({ layers: [] }); return; } - const view = map.getView(); - const zoom = view.getZoom() || 10; + // mapStore.zoom은 OL 규약 + const zoom = useMapStore.getState().zoom; const zoomIntChanged = shipBatchRenderer.setZoom(zoom); const bounds = getViewportBounds(); @@ -198,60 +137,59 @@ export default function useShipLayer(map: Map | null): UseShipLayerReturn { shipBatchRenderer.requestRender(); }, [map, isShipVisible, getViewportBounds]); - /** - * 렌더링 루프 - */ - const render = useCallback((): void => { - syncViewState(); - updateLayers(); - deckRef.current?.redraw(); - }, [syncViewState, updateLayers]); - - // 맵 초기화 및 이벤트 바인딩 + // MapboxOverlay 초기화 및 이벤트 바인딩 useEffect(() => { if (!map) return; - const viewport = map.getViewport(); - initDeck(viewport); + const initOverlay = () => { + if (overlayRef.current) return; - if (!batchRendererInitialized.current) { - shipBatchRenderer.initialize(handleBatchRender); - batchRendererInitialized.current = true; - } + const overlay = new MapboxOverlay({ + interleaved: false, // overlaid 모드 (맵 위에 렌더링) + layers: [], + }); - const handleMoveEnd = (): void => { render(); }; - const handlePostRender = (): void => { - syncViewState(); - deckRef.current?.redraw(); + map.addControl(overlay); + overlayRef.current = overlay; + + // 배치 렌더러 초기화 + if (!batchRendererInitialized.current) { + shipBatchRenderer.initialize(handleBatchRender); + batchRendererInitialized.current = true; + } + + // 초기 렌더링 + setTimeout(() => { updateLayers(); }, 100); }; - map.on('moveend', handleMoveEnd); - map.on('postrender', handlePostRender); + if (map.loaded()) { + initOverlay(); + } else { + map.on('load', initOverlay); + } - setTimeout(() => { render(); }, 100); + // MapLibre 이동 이벤트 + const handleMoveEnd = () => { updateLayers(); }; + map.on('moveend', handleMoveEnd); return () => { - map.un('moveend', handleMoveEnd); - map.un('postrender', handlePostRender); + map.off('load', initOverlay); + map.off('moveend', handleMoveEnd); - if (animationFrameRef.current) { - cancelAnimationFrame(animationFrameRef.current); - } - - if (deckRef.current) { - deckRef.current.finalize(); - deckRef.current = null; - } - - if (canvasRef.current) { - canvasRef.current.remove(); - canvasRef.current = null; + if (overlayRef.current) { + try { + map.removeControl(overlayRef.current); + } catch { + // 맵이 이미 제거된 경우 + } + overlayRef.current.finalize(); + overlayRef.current = null; } shipBatchRenderer.dispose(); batchRendererInitialized.current = false; }; - }, [map, initDeck, render, syncViewState, handleBatchRender]); + }, [map, handleBatchRender, updateLayers]); // 선박 데이터 변경 시 레이어 업데이트 useEffect(() => { @@ -286,14 +224,12 @@ export default function useShipLayer(map: Map | null): UseShipLayerReturn { return () => { unsubscribe(); }; }, [updateLayers]); - // === trackQueryStore 변경 시 선박 레이어 리렌더 === - // tracking 패키지의 TrackQueryViewer가 레이어를 전역 레지스트리에 등록하면 - // 여기서 shipBatchRenderer를 트리거하여 deck.gl에 반영 + // trackQueryStore 변경 시 선박 레이어 리렌더 useEffect(() => { const unsubscribe = useTrackQueryStore.subscribe( (state) => [state.tracks, state.currentTime, state.showPoints, state.showVirtualShip, state.showLabels, state.disabledVesselIds, state.hideLiveShips], () => { - if (deckRef.current && map) { + if (overlayRef.current && map) { shipBatchRenderer.requestRender(); } }, @@ -304,14 +240,12 @@ export default function useShipLayer(map: Map | null): UseShipLayerReturn { return () => unsubscribe(); }, [map]); - // === trackingModeStore 변경 시 선박 레이어 리렌더 === - // 반경 필터링 상태가 변경되면 즉시 렌더링 + // trackingModeStore 변경 시 선박 레이어 리렌더 useEffect(() => { const unsubscribe = useTrackingModeStore.subscribe( (state) => [state.mode, state.trackedShipId, state.trackedShip, state.radiusNM], () => { - if (deckRef.current && map) { - // 반경/추적 모드 변경은 필터 변경이므로 캐시 클리어 후 즉시 렌더링 + if (overlayRef.current && map) { shipBatchRenderer.clearCache(); clearClusterCache(); shipBatchRenderer.immediateRender(); @@ -324,13 +258,12 @@ export default function useShipLayer(map: Map | null): UseShipLayerReturn { return () => unsubscribe(); }, [map]); - // === mapStore 테마(배경지도) 변경 시 선박 레이어 리렌더 === - // 테마 변경 시 선박명/속도벡터/선박크기 색상이 변경되므로 즉시 렌더링 + // mapStore 테마(배경지도) 변경 시 선박 레이어 리렌더 useEffect(() => { const unsubscribe = useMapStore.subscribe( (state) => state.baseMapType, () => { - if (deckRef.current && map) { + if (overlayRef.current && map) { clearClusterCache(); shipBatchRenderer.immediateRender(); } @@ -340,13 +273,12 @@ export default function useShipLayer(map: Map | null): UseShipLayerReturn { return () => unsubscribe(); }, [map]); - // === favoriteStore 변경 시 선박 레이어 리렌더 === - // 관심선박 토글/목록 변경 시 필터 캐시 초기화 + 즉시 렌더링 + // favoriteStore 변경 시 선박 레이어 리렌더 useEffect(() => { const unsubscribe = useFavoriteStore.subscribe( (state) => [state.isFavoriteEnabled, state.favoriteSet], () => { - if (deckRef.current && map) { + if (overlayRef.current && map) { shipBatchRenderer.clearCache(); clearClusterCache(); shipBatchRenderer.immediateRender(); @@ -360,7 +292,7 @@ export default function useShipLayer(map: Map | null): UseShipLayerReturn { }, [map]); return { - deckCanvas: canvasRef.current, - deckRef, + deckCanvas: null, + deckRef: overlayRef, }; } diff --git a/src/hooks/useShipSearch.ts b/src/hooks/useShipSearch.ts index d0eb1826..6a355924 100644 --- a/src/hooks/useShipSearch.ts +++ b/src/hooks/useShipSearch.ts @@ -15,7 +15,6 @@ * - 조기 종료 (결과 10개 도달 시) */ import { useState, useCallback, useRef, useEffect } from 'react'; -import { fromLonLat } from 'ol/proj'; import useShipStore from '../stores/shipStore'; import { useMapStore } from '../stores/mapStore'; import useTrackingModeStore, { isWithinRadius, NM_TO_METERS } from '../stores/trackingModeStore'; @@ -299,11 +298,10 @@ export default function useShipSearch(): UseShipSearchReturn { openDetailModal(ship); } - // 지도 중심 이동 (애니메이션) - const position = fromLonLat([longitude, latitude]); - map.getView().animate({ - center: position, - zoom: 14, + // 지도 중심 이동 (MapLibre flyTo) + map.flyTo({ + center: [longitude, latitude], + zoom: 13, // MapLibre zoom = OL 14 - 1 duration: 500, }); diff --git a/src/hooks/useTrackingMode.ts b/src/hooks/useTrackingMode.ts index e05f8d5b..9711e2a0 100644 --- a/src/hooks/useTrackingMode.ts +++ b/src/hooks/useTrackingMode.ts @@ -1,18 +1,12 @@ /** * 추적 모드 훅 * - 선박 모드일 때 추적 함정 중심으로 지도 이동 - * - 반경 원 레이어 생성 및 업데이트 + * - 반경 원 레이어 생성 및 업데이트 (OL → MapLibre 마이그레이션 Session E에서 구현) */ import { useEffect, useRef, useCallback } from 'react'; -import { fromLonLat } from 'ol/proj'; -import { circular } from 'ol/geom/Polygon'; -import VectorLayer from 'ol/layer/Vector'; -import VectorSource from 'ol/source/Vector'; -import Feature from 'ol/Feature'; -import { Fill, Stroke, Style } from 'ol/style'; import { useMapStore } from '../stores/mapStore'; import useShipStore from '../stores/shipStore'; -import useTrackingModeStore, { NM_TO_METERS } from '../stores/trackingModeStore'; +import useTrackingModeStore from '../stores/trackingModeStore'; import type { ShipFeature } from '../types/ship'; /** useTrackingMode 반환 타입 */ @@ -36,83 +30,26 @@ export default function useTrackingMode(): UseTrackingModeReturn { const radiusNM = useTrackingModeStore((s) => s.radiusNM); const updateTrackedShip = useTrackingModeStore((s) => s.updateTrackedShip); - // 반경 원 레이어 ref - const radiusLayerRef = useRef | null>(null); - const radiusFeatureRef = useRef(null); - // 이전 좌표 (중복 업데이트 방지) const prevCoordsRef = useRef(null); - /** - * 반경 원 레이어 생성 - */ - const createRadiusLayer = useCallback(() => { - if (!map) return; - - // 기존 레이어 제거 - if (radiusLayerRef.current) { - map.removeLayer(radiusLayerRef.current); - } - - const source = new VectorSource(); - const layer = new VectorLayer({ - source, - style: new Style({ - fill: new Fill({ - color: 'rgba(0, 150, 255, 0.08)', // 매우 투명한 파란색 - }), - stroke: new Stroke({ - color: 'rgba(0, 150, 255, 0.4)', - width: 2, - lineDash: [8, 4], - }), - }), - zIndex: 5, // 선박 레이어보다 낮게 - }); - - map.addLayer(layer); - radiusLayerRef.current = layer; - - return layer; - }, [map]); + // TODO: Session E — 반경 원 레이어를 MapLibre 네이티브 GeoJSON source + circle-layer로 구현 /** - * 반경 원 업데이트 - */ - const updateRadiusCircle = useCallback((lon: number, lat: number) => { - if (!radiusLayerRef.current) return; - - const source = radiusLayerRef.current.getSource(); - if (!source) return; - source.clear(); - - // 원형 폴리곤 생성 (WGS84 좌표에서 미터 단위 반경) - const radiusMeters = radiusNM * NM_TO_METERS; - const circle = circular([lon, lat], radiusMeters, 64); - - // EPSG:3857로 변환 - circle.transform('EPSG:4326', 'EPSG:3857'); - - const feature = new Feature({ geometry: circle }); - radiusFeatureRef.current = feature; - source.addFeature(feature); - }, [radiusNM]); - - /** - * 지도 중심 이동 (애니메이션) + * 지도 중심 이동 (MapLibre API) */ const centerMapOnShip = useCallback((lon: number, lat: number, animate = true) => { if (!map) return; - const center = fromLonLat([lon, lat]); - if (animate) { - map.getView().animate({ - center, + map.flyTo({ + center: [lon, lat], duration: 300, }); } else { - map.getView().setCenter(center); + map.jumpTo({ + center: [lon, lat], + }); } }, [map]); @@ -132,15 +69,9 @@ export default function useTrackingMode(): UseTrackingModeReturn { updateTrackedShip(latestShip); }, [mode, trackedShipId, features, updateTrackedShip]); - // 선박 모드 활성화 시 레이어 생성 및 초기 위치 설정 + // 선박 모드 활성화 시 초기 위치 설정 useEffect(() => { if (mode !== 'ship' || !trackedShip || !map) { - // 선박 모드 비활성화 시 레이어 제거 - if (radiusLayerRef.current && map) { - map.removeLayer(radiusLayerRef.current); - radiusLayerRef.current = null; - radiusFeatureRef.current = null; - } prevCoordsRef.current = null; return; } @@ -148,37 +79,9 @@ export default function useTrackingMode(): UseTrackingModeReturn { const { longitude, latitude } = trackedShip; if (!longitude || !latitude) return; - // 레이어가 없으면 생성 - if (!radiusLayerRef.current) { - createRadiusLayer(); - } - - // 반경 원 업데이트 - updateRadiusCircle(longitude, latitude); - // 지도 중심 이동 centerMapOnShip(longitude, latitude); - }, [mode, trackedShip, map, createRadiusLayer, updateRadiusCircle, centerMapOnShip]); - - // 반경 변경 시 원 업데이트 - useEffect(() => { - if (mode !== 'ship' || !trackedShip) return; - - const { longitude, latitude } = trackedShip; - if (!longitude || !latitude) return; - - updateRadiusCircle(longitude, latitude); - }, [radiusNM, mode, trackedShip, updateRadiusCircle]); - - // 컴포넌트 언마운트 시 정리 - useEffect(() => { - return () => { - if (radiusLayerRef.current && map) { - map.removeLayer(radiusLayerRef.current); - radiusLayerRef.current = null; - } - }; - }, [map]); + }, [mode, trackedShip, map, centerMapOnShip]); return { isTrackingActive: mode === 'ship' && trackedShip !== null, diff --git a/src/main.tsx b/src/main.tsx index 8919f998..9cd05a74 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -2,7 +2,9 @@ import ReactDOM from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; import App from './App'; -// OpenLayers 스타일 +// MapLibre GL JS 스타일 +import 'maplibre-gl/dist/maplibre-gl.css'; +// OpenLayers 스타일 (측정/구역 OL 오버레이용 — Session H에서 제거) import 'ol/ol.css'; // 글로벌 스타일 diff --git a/src/map/MapContainer.scss b/src/map/MapContainer.scss index 9db4911c..fdff6316 100644 --- a/src/map/MapContainer.scss +++ b/src/map/MapContainer.scss @@ -10,6 +10,15 @@ width: 100%; height: 100%; z-index: 0; + + // MapLibre 기본 grab 커서 → default로 오버라이드 + .maplibregl-canvas-container { + cursor: default !important; + + &:active { + cursor: grabbing !important; + } + } } // OpenLayers 기본 컨트롤 숨김 (스케일바 제외) @@ -98,3 +107,27 @@ border: 2px solid rgba(255, 215, 0, 0.8); background-color: rgba(255, 215, 0, 0.1); } + +// MapLibre Ctrl+Drag 박스 선택 스타일 +.maplibre-dragbox { + position: absolute; + border: 2px solid rgba(255, 215, 0, 0.8); + background-color: rgba(255, 215, 0, 0.1); + pointer-events: none; + z-index: 10; +} + +// MapLibre 스케일 컨트롤 +.maplibregl-ctrl-scale { + position: absolute; + right: 70px; + bottom: 16px; + background: rgba(30, 35, 45, 0.92); + border-radius: 4px; + padding: 4px 8px; + color: #eee; + font-family: 'Segoe UI', sans-serif; + font-size: 11px; + border: 1px solid rgba(255, 255, 255, 0.2); + z-index: 100; +} diff --git a/src/map/MapContainer.tsx b/src/map/MapContainer.tsx index 75761225..7e1c865c 100644 --- a/src/map/MapContainer.tsx +++ b/src/map/MapContainer.tsx @@ -1,15 +1,9 @@ import { useEffect, useRef, useCallback } from 'react'; -import Map from 'ol/Map'; -import View from 'ol/View'; -import { fromLonLat, transformExtent } from 'ol/proj'; -import { defaults as defaultControls, ScaleLine } from 'ol/control'; -import { defaults as defaultInteractions, DragBox } from 'ol/interaction'; -import { platformModifierKeyOnly } from 'ol/events/condition'; -import type { MapBrowserEvent } from 'ol'; -import type { Deck } from '@deck.gl/core'; +import maplibregl from 'maplibre-gl'; +import type { MapboxOverlay } from '@deck.gl/mapbox'; -import { createBaseLayers } from './layers/baseLayer'; -import { useMapStore, BASE_MAP_TYPES } from '../stores/mapStore'; +import { getBaseMapStyle } from './layers/baseLayer'; +import { useMapStore } from '../stores/mapStore'; import useShipStore from '../stores/shipStore'; import type { ShipFeature } from '../types/ship'; import useShipData from '../hooks/useShipData'; @@ -62,19 +56,14 @@ interface DeckPickResult { /** * 지도 컨테이너 컴포넌트 - * - OpenLayers 맵 초기화 및 관리 - * - STOMP 선박 데이터 연결 - * - Deck.gl 선박 레이어 렌더링 + * - MapLibre GL JS 맵 초기화 및 관리 + * - AIS API 선박 데이터 연결 + * - Deck.gl 선박 레이어 렌더링 (MapboxOverlay) * - 선박 호버 툴팁 / 더블클릭 상세 모달 */ export default function MapContainer() { const mapRef = useRef(null); - const mapInstanceRef = useRef(null); - const baseLayersRef = useRef<{ - worldMap: import('ol/layer/Tile').default; - encMap: import('ol/layer/Tile').default; - darkMap: import('ol/layer/Tile').default; - } | null>(null); + const mapInstanceRef = useRef(null); const { map, setMap, setZoom, center, baseMapType } = useMapStore(); const showLegend = useShipStore((s) => s.showLegend); const hoverInfo = useShipStore((s) => s.hoverInfo); @@ -82,16 +71,16 @@ export default function MapContainer() { const replayCompleted = useReplayStore((s) => s.queryCompleted); const replayQuery = useReplayStore((s) => s.currentQuery); - // STOMP 선박 데이터 연결 + // AIS 선박 데이터 연결 useShipData({ autoConnect: true }); // 관심선박 + 관심구역 데이터 로딩 useFavoriteData(); - // 관심구역 OL 레이어 + // 관심구역 OL 레이어 (MapLibre 전환 후 별도 세션에서 수정) useRealmLayer(); - // Deck.gl 선박 레이어 + // Deck.gl 선박 레이어 (MapboxOverlay) const { deckRef } = useShipLayer(map); // 리플레이 레이어 @@ -107,22 +96,21 @@ export default function MapContainer() { const stsCompleted = useStsStore((s) => s.queryCompleted); const analysisCompleted = areaSearchCompleted || stsCompleted; - // 측정 도구 + // 측정 도구 (MapLibre 전환 후 별도 세션에서 수정) useMeasure(); - // 추적 모드 (함정 중심 지도 이동 + 반경 원) + // 추적 모드 (MapLibre 전환 후 별도 세션에서 수정) useTrackingMode(); - // 배경지도 타입 변경 시 레이어 가시성 토글 + // 배경지도 타입 변경 시 스타일 교체 useEffect(() => { - if (!baseLayersRef.current) return; - - const { worldMap, encMap, darkMap } = baseLayersRef.current; - - worldMap.setVisible(baseMapType === BASE_MAP_TYPES.NORMAL); - encMap.setVisible(baseMapType === BASE_MAP_TYPES.ENC); - darkMap.setVisible(baseMapType === BASE_MAP_TYPES.DARK); - }, [baseMapType]); + if (!map) return; + try { + map.setStyle(getBaseMapStyle(baseMapType)); + } catch { + // 맵이 아직 로드되지 않은 경우 + } + }, [baseMapType, map]); // 호버 쓰로틀 타이머 const hoverTimerRef = useRef | null>(null); @@ -131,12 +119,11 @@ export default function MapContainer() { * deck.pickObject 헬퍼 (라이브 선박 전용) */ const pickShip = useCallback((pixel: number[]): ShipFeature | null => { - const deck = deckRef.current; - if (!deck) return null; - if (!(deck as Deck & { layerManager?: unknown }).layerManager) return null; + const overlay = deckRef.current as MapboxOverlay | null; + if (!overlay) return null; try { - const result = deck.pickObject({ + const result = overlay.pickObject({ x: pixel[0], y: pixel[1], layerIds: ['ship-icon-layer'], @@ -151,13 +138,11 @@ export default function MapContainer() { * deck.pickObject 헬퍼 (모든 레이어) */ const pickAny = useCallback((pixel: number[]): DeckPickResult | null => { - const deck = deckRef.current; - if (!deck) return null; - if (!(deck as Deck & { layerManager?: unknown }).layerManager) return null; + const overlay = deckRef.current as MapboxOverlay | null; + if (!overlay) return null; try { - // layerIds를 지정하지 않으면 모든 pickable 레이어에서 픽킹 - const result = deck.pickObject({ + const result = overlay.pickObject({ x: pixel[0], y: pixel[1], }); @@ -168,32 +153,22 @@ export default function MapContainer() { }, [deckRef]); /** - * OpenLayers pointermove -> 호버 툴팁 + * mousemove -> 호버 툴팁 */ - const handlePointerMove = useCallback((evt: MapBrowserEvent) => { - // 드래그 중이면 무시 - if (evt.dragging) { - useShipStore.getState().setHoverInfo(null); - useTrackQueryStore.getState().setHighlightedVesselId(null); - useReplayStore.getState().setHighlightedVesselId(null); - useAreaSearchStore.getState().setAreaSearchTooltip(null); - useAreaSearchStore.getState().setHighlightedVesselId(null); - useStsStore.getState().setHighlightedGroupIndex(null); - return; - } - + const handlePointerMove = useCallback((e: maplibregl.MapMouseEvent) => { // 쓰로틀 if (hoverTimerRef.current) return; hoverTimerRef.current = setTimeout(() => { hoverTimerRef.current = null; - const pixel = evt.pixel; - const { clientX, clientY } = evt.originalEvent; - const pickResult = pickAny(pixel as unknown as number[]); + const pixel = [e.point.x, e.point.y]; + const { clientX, clientY } = e.originalEvent; + const pickResult = pickAny(pixel); + const canvas = map?.getCanvas(); if (!pickResult || !pickResult.layer) { - // 아무것도 픽킹되지 않음 + if (canvas) canvas.style.cursor = ''; useShipStore.getState().setHoverInfo(null); useTrackQueryStore.getState().setHighlightedVesselId(null); useTrackQueryStore.getState().clearHoveredPoint(); @@ -204,6 +179,9 @@ export default function MapContainer() { return; } + // 호버 대상이 있으면 pointer 커서 + if (canvas) canvas.style.cursor = 'pointer'; + const layerId = pickResult.layer.id; const obj = pickResult.object; @@ -244,7 +222,6 @@ export default function MapContainer() { useShipStore.getState().setHoverInfo(null); useTrackQueryStore.getState().setHighlightedVesselId((obj as Record)?.vesselId as string || null); useReplayStore.getState().setHighlightedVesselId(null); - // 포인트 호버 정보 설정 if (obj) { const o = obj as Record; useTrackQueryStore.getState().setHoveredPoint({ @@ -312,7 +289,6 @@ export default function MapContainer() { useTrackQueryStore.getState().clearHoveredPoint(); useReplayStore.getState().setHighlightedVesselId(null); - // vesselId -> 그룹 인덱스 매핑 (쌍 하이라이트) const vesselId = (obj as Record)?.vesselId as string | undefined; if (vesselId) { const groups = useStsStore.getState().groupedContacts; @@ -359,25 +335,14 @@ export default function MapContainer() { useReplayStore.getState().setHighlightedVesselId(null); useStsStore.getState().setHighlightedGroupIndex(null); }, HOVER_THROTTLE_MS); - }, [pickAny]); - - /** - * OpenLayers dblclick -> 상세 모달 - */ - const handleDblClick = useCallback((evt: MapBrowserEvent) => { - const pixel = evt.pixel; - const ship = pickShip(pixel as unknown as number[]); - - if (ship) { - evt.stopPropagation(); - useShipStore.getState().openDetailModal(ship); - } - }, [pickShip]); + }, [pickAny, map]); /** * pointerout -> 툴팁 숨김 + 하이라이트 클리어 */ const handlePointerOut = useCallback(() => { + const canvas = map?.getCanvas(); + if (canvas) canvas.style.cursor = ''; useShipStore.getState().setHoverInfo(null); useTrackQueryStore.getState().setHighlightedVesselId(null); useTrackQueryStore.getState().clearHoveredPoint(); @@ -385,36 +350,45 @@ export default function MapContainer() { useAreaSearchStore.getState().setAreaSearchTooltip(null); useAreaSearchStore.getState().setHighlightedVesselId(null); useStsStore.getState().setHighlightedGroupIndex(null); - }, []); + }, [map]); - /** - * singleclick -> 빈 영역 클릭 시 선택/메뉴 해제 - */ - const handleSingleClick = useCallback((evt: MapBrowserEvent) => { - const ship = pickShip(evt.pixel as unknown as number[]); - if (!ship) { - useShipStore.getState().clearSelectedShips(); - useShipStore.getState().closeContextMenu(); - } - }, [pickShip]); - - // OL 이벤트 바인딩 + // MapLibre 이벤트 바인딩 useEffect(() => { if (!map) return; - map.on('pointermove', handlePointerMove as (evt: MapBrowserEvent) => void); + // mousemove (호버 툴팁) + map.on('mousemove', handlePointerMove); + + // dblclick (상세 모달) + const handleDblClick = (e: maplibregl.MapMouseEvent) => { + const pixel = [e.point.x, e.point.y]; + const ship = pickShip(pixel); + if (ship) { + e.preventDefault(); + useShipStore.getState().openDetailModal(ship); + } + }; map.on('dblclick', handleDblClick); - map.on('singleclick', handleSingleClick); - // pointerout은 뷰포트 DOM 이벤트로 처리 - const viewport = map.getViewport(); - viewport.addEventListener('pointerout', handlePointerOut); + // click (빈 영역 클릭 시 선택/메뉴 해제) + const handleClick = (e: maplibregl.MapMouseEvent) => { + const ship = pickShip([e.point.x, e.point.y]); + if (!ship) { + useShipStore.getState().clearSelectedShips(); + useShipStore.getState().closeContextMenu(); + } + }; + map.on('click', handleClick); - // 우클릭 컨텍스트 메뉴 + // mouseleave (툴팁 숨김) + const canvas = map.getCanvasContainer(); + canvas.addEventListener('mouseleave', handlePointerOut); + + // contextmenu (우클릭) const handleContextMenu = (e: MouseEvent): void => { e.preventDefault(); - const pixel = map.getEventPixel(e); - const ship = pickShip(pixel as unknown as number[]); + const pixel = [e.offsetX, e.offsetY]; + const ship = pickShip(pixel); const state = useShipStore.getState(); if (ship) { @@ -424,80 +398,60 @@ export default function MapContainer() { state.openContextMenu({ x: e.clientX, y: e.clientY, ships: selectedShips }); } }; - viewport.addEventListener('contextmenu', handleContextMenu); + canvas.addEventListener('contextmenu', handleContextMenu); - return () => { - map.un('pointermove', handlePointerMove as (evt: MapBrowserEvent) => void); - map.un('dblclick', handleDblClick); - map.un('singleclick', handleSingleClick); - viewport.removeEventListener('pointerout', handlePointerOut); - viewport.removeEventListener('contextmenu', handleContextMenu); + // === Ctrl+Drag 박스 선택 === + let isDragging = false; + let startPoint: { x: number; y: number } | null = null; + let boxElement: HTMLDivElement | null = null; - if (hoverTimerRef.current) { - clearTimeout(hoverTimerRef.current); - hoverTimerRef.current = null; - } + const handleMouseDown = (e: MouseEvent) => { + if (!(e.ctrlKey || e.metaKey)) return; + isDragging = true; + startPoint = { x: e.offsetX, y: e.offsetY }; + + boxElement = document.createElement('div'); + boxElement.className = 'maplibre-dragbox'; + canvas.appendChild(boxElement); + e.preventDefault(); + map.dragPan.disable(); }; - }, [map, handlePointerMove, handleDblClick, handleSingleClick, handlePointerOut, pickShip]); - useEffect(() => { - if (!mapRef.current || mapInstanceRef.current) return; + const handleMouseMove = (e: MouseEvent) => { + if (!isDragging || !startPoint || !boxElement) return; + const minX = Math.min(startPoint.x, e.offsetX); + const minY = Math.min(startPoint.y, e.offsetY); + const maxX = Math.max(startPoint.x, e.offsetX); + const maxY = Math.max(startPoint.y, e.offsetY); + boxElement.style.left = `${minX}px`; + boxElement.style.top = `${minY}px`; + boxElement.style.width = `${maxX - minX}px`; + boxElement.style.height = `${maxY - minY}px`; + }; - // 현재 배경지도 타입 가져오기 - const currentBaseMapType = useMapStore.getState().baseMapType; + const handleMouseUp = (e: MouseEvent) => { + if (!isDragging || !startPoint) return; + isDragging = false; + map.dragPan.enable(); - // 베이스 레이어 생성 (3가지 배경지도 + 상세지도) - const { worldMap, encMap, darkMap, eastAsiaMap, korMap } = createBaseLayers(currentBaseMapType); + // 픽셀 범위 → LngLat 범위 + const sw = map.unproject([ + Math.min(startPoint.x, e.offsetX), + Math.max(startPoint.y, e.offsetY), + ]); + const ne = map.unproject([ + Math.max(startPoint.x, e.offsetX), + Math.min(startPoint.y, e.offsetY), + ]); - // 배경지도 레이어 참조 저장 - baseLayersRef.current = { worldMap, encMap, darkMap }; - - // 스케일라인 컨트롤 (해리 단위) - const scaleLineControl = new ScaleLine({ - units: 'nautical', - bar: true, - text: true, - }); - - // 지도 인스턴스 생성 - const olMap = new Map({ - target: mapRef.current, - layers: [ - worldMap, - encMap, - darkMap, - eastAsiaMap, - korMap, - ], - view: new View({ - center: fromLonLat(center), - zoom: 7, - minZoom: 5, // 야간지도 타일 최소 레벨 - maxZoom: 15, // 줌 확장은 15까지 (타일은 12레벨까지만 로드) - }), - controls: defaultControls({ - attribution: false, - zoom: false, - rotate: false, - }).extend([scaleLineControl]), - interactions: defaultInteractions({ - doubleClickZoom: false, - }), - }); - - // Ctrl+Drag 박스 선택 인터랙션 - const dragBox = new DragBox({ condition: platformModifierKeyOnly }); - olMap.addInteraction(dragBox); - - dragBox.on('boxend', () => { - const extent3857 = dragBox.getGeometry().getExtent(); - const [minLon, minLat, maxLon, maxLat] = transformExtent(extent3857, 'EPSG:3857', 'EPSG:4326'); + const minLon = sw.lng, minLat = sw.lat; + const maxLon = ne.lng, maxLat = ne.lat; + // 선박 매칭 (기존 DragBox 로직 재사용) const state = useShipStore.getState(); const { features, darkSignalIds, isIntegrate, kindVisibility, sourceVisibility, nationalVisibility, darkSignalVisible } = state; - // 국적 코드 매핑 (shipStore.js와 동일) const mapNational = (code: string | undefined): string => { if (!code) return 'OTHER'; const c = code.toUpperCase(); @@ -510,12 +464,9 @@ export default function MapContainer() { const matchedIds: string[] = []; features.forEach((ship, featureId) => { - // 단독 레이더 제외 if (ship.signalSourceCode === '000005' && !ship.integrate) return; - // 통합 모드 ON: isPriority만 if (isIntegrate && ship.integrate && !ship.isPriority) return; - // 다크시그널: 독립 필터 if (darkSignalIds.has(featureId)) { if (!darkSignalVisible) return; } else { @@ -533,27 +484,79 @@ export default function MapContainer() { }); state.setSelectedShipIds(matchedIds); + + if (boxElement) { + boxElement.remove(); + boxElement = null; + } + startPoint = null; + }; + + canvas.addEventListener('mousedown', handleMouseDown); + canvas.addEventListener('mousemove', handleMouseMove); + canvas.addEventListener('mouseup', handleMouseUp); + + return () => { + map.off('mousemove', handlePointerMove); + map.off('dblclick', handleDblClick); + map.off('click', handleClick); + canvas.removeEventListener('mouseleave', handlePointerOut); + canvas.removeEventListener('contextmenu', handleContextMenu); + canvas.removeEventListener('mousedown', handleMouseDown); + canvas.removeEventListener('mousemove', handleMouseMove); + canvas.removeEventListener('mouseup', handleMouseUp); + + if (hoverTimerRef.current) { + clearTimeout(hoverTimerRef.current); + hoverTimerRef.current = null; + } + }; + }, [map, handlePointerMove, handlePointerOut, pickShip, pickAny]); + + // MapLibre 맵 초기화 + useEffect(() => { + if (!mapRef.current || mapInstanceRef.current) return; + + const currentBaseMapType = useMapStore.getState().baseMapType; + + const mlMap = new maplibregl.Map({ + container: mapRef.current, + style: getBaseMapStyle(currentBaseMapType), + center: center, + zoom: 6, // OL 7 - 1 = MapLibre 6 + minZoom: 4, // OL 5 - 1 + maxZoom: 14, // OL 15 - 1 + attributionControl: false, + doubleClickZoom: false, }); - // 줌 변경 이벤트 - olMap.getView().on('change:resolution', () => { - const zoom = Math.round(olMap.getView().getZoom() ?? 7); + // 스케일 컨트롤 (해리 단위) + mlMap.addControl(new maplibregl.ScaleControl({ + maxWidth: 200, + unit: 'nautical', + }), 'bottom-right'); + + // 줌 변경 이벤트 (OL 규약으로 변환: +1) + mlMap.on('zoomend', () => { + const zoom = Math.round(mlMap.getZoom() + 1); setZoom(zoom); }); // 스토어에 맵 인스턴스 저장 - setMap(olMap); - mapInstanceRef.current = olMap; - // TrackQueryViewer 등에서 줌 감지용 - (window as Window & { __mainMap__?: Map | null }).__mainMap__ = olMap; + setMap(mlMap); + mapInstanceRef.current = mlMap; + + // TrackQueryViewer 등에서 줌 감지용 전역 참조 + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (window as any).__mainMap__ = mlMap; - // 클린업 return () => { if (mapInstanceRef.current) { - mapInstanceRef.current.setTarget(undefined); + mapInstanceRef.current.remove(); mapInstanceRef.current = null; } - (window as Window & { __mainMap__?: Map | null }).__mainMap__ = null; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (window as any).__mainMap__ = null; }; }, []); @@ -581,7 +584,7 @@ export default function MapContainer() { useReplayStore.getState().reset(); useAnimationStore.getState().reset(); unregisterReplayLayers(); - showLiveShips(); // 라이브 선박 다시 표시 + showLiveShips(); shipBatchRenderer.immediateRender(); }} /> diff --git a/src/map/layers/baseLayer.ts b/src/map/layers/baseLayer.ts index ed62004b..8f339178 100644 --- a/src/map/layers/baseLayer.ts +++ b/src/map/layers/baseLayer.ts @@ -1,80 +1,59 @@ /** - * 베이스맵 레이어 설정 - * - 민간화: 내부망 타일서버 → OSM 타일로 임시 전환 - * - Phase 3에서 MapLibre GL JS 벡터맵으로 최종 전환 예정 + * 베이스맵 스타일 설정 (MapLibre GL JS) + * + * 래스터 타일 기반 스타일: + * - normal/enc: OpenStreetMap + * - dark: CartoDB Dark Matter */ -import { XYZ, OSM } from 'ol/source'; -import type TileSource from 'ol/source/Tile'; -import TileLayer from 'ol/layer/Tile'; - -const DARK_TILE_URL = 'https://{a-d}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png'; +import type { StyleSpecification } from 'maplibre-gl'; type BaseMapType = 'normal' | 'enc' | 'dark'; -interface MapLayerConfig { - darkLayer: { - source: XYZ; - }; -} - -interface BaseLayers { - worldMap: TileLayer; - encMap: TileLayer; - darkMap: TileLayer; - eastAsiaMap: TileLayer; - korMap: TileLayer; -} - -/** - * 레이어 설정 (하위 모듈 호환용 export) - */ -export const mapLayerConfig: MapLayerConfig = { - darkLayer: { - source: new XYZ({ - url: DARK_TILE_URL, - maxZoom: 19, - }), +const OSM_RASTER_STYLE: StyleSpecification = { + version: 8, + sources: { + osm: { + type: 'raster', + tiles: ['https://tile.openstreetmap.org/{z}/{x}/{y}.png'], + tileSize: 256, + attribution: '© OpenStreetMap', + maxzoom: 19, + }, }, + layers: [{ id: 'osm-tiles', type: 'raster', source: 'osm' }], }; +const DARK_RASTER_STYLE: StyleSpecification = { + version: 8, + sources: { + 'carto-dark': { + type: 'raster', + tiles: [ + 'https://a.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', + 'https://b.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', + 'https://c.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', + 'https://d.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', + ], + tileSize: 256, + attribution: '© OpenStreetMap © CARTO', + maxzoom: 19, + }, + }, + layers: [{ id: 'carto-dark-tiles', type: 'raster', source: 'carto-dark' }], +}; + +const BASE_MAP_STYLES: Record = { + normal: OSM_RASTER_STYLE, + enc: OSM_RASTER_STYLE, // ENC는 일반지도와 동일 (임시) + dark: DARK_RASTER_STYLE, +}; + +/** CartoDB Dark 타일 URL (미니맵 등 OL 기반 컴포넌트용) */ +export const DARK_TILE_URL = 'https://a.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png'; + /** - * 베이스맵 레이어 생성 - * @param {string} baseMapType - 배경지도 타입 ('normal' | 'enc' | 'dark') + * 배경지도 타입에 해당하는 MapLibre StyleSpecification 반환 */ -export const createBaseLayers = (baseMapType: BaseMapType = 'dark'): BaseLayers => { - // OSM 기반 일반지도 - const worldMap = new TileLayer({ - source: new OSM(), - visible: baseMapType === 'normal', - }); - - // ENC (일반지도와 동일 — 임시) - const encMap = new TileLayer({ - source: new OSM(), - visible: baseMapType === 'enc', - }); - - // 야간 모드 (CartoDB Dark Matter) - const darkMap = new TileLayer({ - source: new XYZ({ - url: DARK_TILE_URL, - attributions: '© OpenStreetMap contributors, © CARTO', - maxZoom: 19, - }), - visible: baseMapType === 'dark', - }); - - // 상세 레이어는 OSM이 자체 커버하므로 빈 레이어로 대체 - const eastAsiaMap = new TileLayer({ visible: false }); - const korMap = new TileLayer({ visible: false }); - - return { - worldMap, - encMap, - darkMap, - eastAsiaMap, - korMap, - }; -}; - -export default createBaseLayers; +export function getBaseMapStyle(type: BaseMapType): StyleSpecification { + return BASE_MAP_STYLES[type] || DARK_RASTER_STYLE; +} diff --git a/src/map/layers/shipLayer.ts b/src/map/layers/shipLayer.ts index de8a2420..d15d665e 100644 --- a/src/map/layers/shipLayer.ts +++ b/src/map/layers/shipLayer.ts @@ -5,7 +5,7 @@ */ import { IconLayer, TextLayer, ScatterplotLayer, LineLayer, PathLayer } from '@deck.gl/layers'; import type { Layer } from '@deck.gl/core'; -import { fromLonLat, toLonLat } from 'ol/proj'; +import { lngLatToMercator, mercatorToLngLat } from '../../utils/projection'; import { ICON_ATLAS_MAPPING, ICON_MAPPING_KIND_MOVING, @@ -475,7 +475,7 @@ function buildSpeedVectorData(ships: ShipFeature[]): SpeedVectorData[] { const sog = Number(ship.sog) || 0; // 투영좌표로 변환 (EPSG:3857 - Web Mercator) - const coordinate = fromLonLat([lng, lat]); + const coordinate = lngLatToMercator([lng, lat]); const projX = coordinate[0]; const projY = coordinate[1]; @@ -491,8 +491,8 @@ function buildSpeedVectorData(ships: ShipFeature[]): SpeedVectorData[] { // 경위도로 변환하여 반환 return { - sourcePosition: toLonLat([projX, projY]), - targetPosition: toLonLat([projX + xAdd, projY + yAdd]), + sourcePosition: mercatorToLngLat([projX, projY]), + targetPosition: mercatorToLngLat([projX + xAdd, projY + yAdd]), color: vectorColor as number[], }; }); @@ -584,12 +584,12 @@ function calDimension( // 6점 폴리곤 (시작점으로 복귀) return [ - toLonLat([leftTopX, leftTopY]), - toLonLat([leftBottomX, leftBottomY]), - toLonLat([rightBottomX, rightBottomY]), - toLonLat([rightTopX, rightTopY]), - toLonLat([centerTopX, centerTopY]), - toLonLat([leftTopX, leftTopY]), + mercatorToLngLat([leftTopX, leftTopY]), + mercatorToLngLat([leftBottomX, leftBottomY]), + mercatorToLngLat([rightBottomX, rightBottomY]), + mercatorToLngLat([rightTopX, rightTopY]), + mercatorToLngLat([centerTopX, centerTopY]), + mercatorToLngLat([leftTopX, leftTopY]), ]; } @@ -625,7 +625,7 @@ function buildDimPolygonData(ships: ShipFeature[]): DimPolygonData[] { const dimD = Number(ship.dimD) || 0; // 투영좌표 변환 - const coordinate = fromLonLat([Number(ship.longitude), Number(ship.latitude)]); + const coordinate = lngLatToMercator([Number(ship.longitude), Number(ship.latitude)]); const projX = coordinate[0]; const projY = coordinate[1]; diff --git a/src/map/measure/useMeasure.ts b/src/map/measure/useMeasure.ts index 508b9054..a110886f 100644 --- a/src/map/measure/useMeasure.ts +++ b/src/map/measure/useMeasure.ts @@ -41,6 +41,12 @@ export default function useMeasure(): void { if (!map || !activeTool) return; + // MapLibre 전환 후 OL 측정 도구 호환 불가 — Session F에서 마이그레이션 + if (typeof map.getCanvas === 'function') { + console.warn('[useMeasure] MapLibre 맵 감지 — OL 측정 도구 비활성화 (Session F에서 마이그레이션)'); + return; + } + // 면적 도구: 도형 선택 전까지 대기 if (activeTool === 'area' && !areaShape) return; diff --git a/src/replay/services/ReplayWebSocketService.ts b/src/replay/services/ReplayWebSocketService.ts index 21af0946..7bd2dd14 100644 --- a/src/replay/services/ReplayWebSocketService.ts +++ b/src/replay/services/ReplayWebSocketService.ts @@ -11,7 +11,6 @@ * @singleton 애플리케이션 전체에서 하나의 인스턴스만 사용 */ import { Client, IMessage, StompSubscription } from '@stomp/stompjs'; -import { transformExtent } from 'ol/proj'; import { ConnectionState, ConnectionStateType, @@ -584,23 +583,24 @@ class ReplayWebSocketService { // ===== 지도 뷰포트 (private) ===== /** - * OpenLayers 맵에서 현재 뷰포트 좌표 추출 - * 참조: mda-react-front/src/tracking/components/ReplayV2.tsx getMapViewport() + * MapLibre 맵에서 현재 뷰포트 좌표 추출 */ private _getMapViewport(): MapViewport | undefined { try { - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- window.__mainMap__은 OL Map 인스턴스 (글로벌 접근) + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- window.__mainMap__은 MapLibre Map 인스턴스 (글로벌 접근) const map = (window as any).__mainMap__; if (!map) { console.warn('[ReplayWS] 맵 인스턴스 없음 (window.__mainMap__)'); return undefined; } - const view = map.getView(); - const extent3857 = view.calculateExtent(map.getSize()); - const [minLon, minLat, maxLon, maxLat] = transformExtent(extent3857, 'EPSG:3857', 'EPSG:4326'); - - return { minLon, maxLon, minLat, maxLat }; + const bounds = map.getBounds(); + return { + minLon: bounds.getWest(), + maxLon: bounds.getEast(), + minLat: bounds.getSouth(), + maxLat: bounds.getNorth(), + }; } catch (error) { console.error('[ReplayWS] 뷰포트 추출 실패:', error); return undefined; @@ -608,14 +608,14 @@ class ReplayWebSocketService { } /** - * 현재 맵 줌 레벨 + * 현재 맵 줌 레벨 (OL 규약: MapLibre zoom + 1) */ private _getMapZoomLevel(): number { try { - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- window.__mainMap__은 OL Map 인스턴스 (글로벌 접근) + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- window.__mainMap__은 MapLibre Map 인스턴스 (글로벌 접근) const map = (window as any).__mainMap__; if (!map) return 10; - return Math.round(map.getView().getZoom()) || 10; + return Math.round(map.getZoom() + 1) || 10; // +1: OL 줌 규약 } catch { return 10; } diff --git a/src/stores/mapStore.ts b/src/stores/mapStore.ts index b9b6c0c8..f7557760 100644 --- a/src/stores/mapStore.ts +++ b/src/stores/mapStore.ts @@ -1,6 +1,5 @@ import { create } from 'zustand'; import { subscribeWithSelector } from 'zustand/middleware'; -import type Map from 'ol/Map'; /** * 배경지도 타입 @@ -78,8 +77,10 @@ interface LayerVisibility { interface MapStoreState { // 지도 인스턴스 - map: Map | null; - setMap: (map: Map | null) => void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- OL→MapLibre 마이그레이션 기간 any 사용 (Session H에서 maplibregl.Map으로 복원) + map: any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + setMap: (map: any) => void; // 배경지도 타입 baseMapType: BaseMapType; @@ -137,7 +138,7 @@ export const useMapStore = create()(subscribeWithSelector((set, g const { map, zoom } = get(); if (map && zoom < 17) { const newZoom = zoom + 1; - map.getView().setZoom(newZoom); + map.zoomTo(newZoom - 1, { duration: 200 }); // -1: OL→MapLibre 줌 규약 set({ zoom: newZoom }); } }, @@ -146,7 +147,7 @@ export const useMapStore = create()(subscribeWithSelector((set, g const { map, zoom } = get(); if (map && zoom > 0) { const newZoom = zoom - 1; - map.getView().setZoom(newZoom); + map.zoomTo(newZoom - 1, { duration: 200 }); // -1: OL→MapLibre 줌 규약 set({ zoom: newZoom }); } }, diff --git a/src/tracking/components/TrackQueryViewer.tsx b/src/tracking/components/TrackQueryViewer.tsx index b106112a..37694554 100644 --- a/src/tracking/components/TrackQueryViewer.tsx +++ b/src/tracking/components/TrackQueryViewer.tsx @@ -29,13 +29,11 @@ import { useTrackHighlight } from '../hooks/useTrackHighlight'; import { TrackQueryTimeline } from './TrackQueryTimeline'; import { useEquipmentFilter } from '../hooks/useEquipmentFilter'; import { shipBatchRenderer } from '../../map/ShipBatchRenderer'; -import { fromLonLat } from 'ol/proj'; import ShipTooltip from '../../components/ship/ShipTooltip'; import './TrackQueryViewer.scss'; import type { Layer } from '@deck.gl/core'; -import type OlMap from 'ol/Map'; /** 일 단위를 밀리초로 변환 */ const DAYS_TO_MS = 24 * 60 * 60 * 1000; @@ -243,29 +241,22 @@ export const TrackQueryViewer = ({ // 줌 레벨 변경 감지 (클러스터링용) - tracks 변경 시 재시도 useEffect(() => { - const mapInstance = (window as unknown as Record).__mainMap__ as OlMap | undefined; + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- window.__mainMap__은 MapLibre Map 인스턴스 (글로벌 접근) + const mapInstance = (window as any).__mainMap__; if (!mapInstance) return; - const view = mapInstance.getView(); - if (!view) return; - - const initialZoom = view.getZoom(); - if (initialZoom !== undefined) { - setZoomLevel(Math.floor(initialZoom)); - } + const initialZoom = mapInstance.getZoom() + 1; // +1: OL 줌 규약 + setZoomLevel(Math.floor(initialZoom)); const handleZoomChange = () => { - const newZoom = view.getZoom(); - if (newZoom !== undefined) { - const flooredZoom = Math.floor(newZoom); - setZoomLevel(prev => (prev !== flooredZoom ? flooredZoom : prev)); - } + const newZoom = Math.floor(mapInstance.getZoom() + 1); + setZoomLevel(prev => (prev !== newZoom ? newZoom : prev)); }; - view.on('change:resolution', handleZoomChange); + mapInstance.on('zoomend', handleZoomChange); return () => { - view.un('change:resolution', handleZoomChange); + mapInstance.off('zoomend', handleZoomChange); }; }, [tracks.length]); @@ -375,7 +366,8 @@ export const TrackQueryViewer = ({ (vesselId: string, e: React.MouseEvent) => { e.preventDefault(); - const mapInstance = (window as unknown as Record).__mainMap__ as OlMap | undefined; + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- window.__mainMap__은 MapLibre Map 인스턴스 (글로벌 접근) + const mapInstance = (window as any).__mainMap__; if (!mapInstance) return; const track = tracks.find(t => t.vesselId === vesselId); @@ -402,9 +394,8 @@ export const TrackQueryViewer = ({ } } - const view = mapInstance.getView(); - view.animate({ - center: fromLonLat([targetLon, targetLat]), + mapInstance.flyTo({ + center: [targetLon, targetLat], duration: 300, }); }, diff --git a/src/utils/projection.ts b/src/utils/projection.ts new file mode 100644 index 00000000..20a366bd --- /dev/null +++ b/src/utils/projection.ts @@ -0,0 +1,33 @@ +/** + * 좌표 투영 변환 유틸리티 + * OL fromLonLat/toLonLat 대체 — 순수 수학 구현 + * + * WGS84 (EPSG:4326) ↔ Web Mercator (EPSG:3857) 변환 + * shipLayer 속도벡터·DIM 폴리곤 계산에서 사용 + */ + +const EARTH_RADIUS = 6378137; // WGS84 반장축 (미터) +const DEG_TO_RAD = Math.PI / 180; +const RAD_TO_DEG = 180 / Math.PI; + +/** + * LngLat (EPSG:4326) → Web Mercator (EPSG:3857) + * OL `fromLonLat()` 동등 + */ +export function lngLatToMercator(lngLat: [number, number]): [number, number] { + const [lng, lat] = lngLat; + const x = lng * DEG_TO_RAD * EARTH_RADIUS; + const y = Math.log(Math.tan(Math.PI / 4 + (lat * DEG_TO_RAD) / 2)) * EARTH_RADIUS; + return [x, y]; +} + +/** + * Web Mercator (EPSG:3857) → LngLat (EPSG:4326) + * OL `toLonLat()` 동등 + */ +export function mercatorToLngLat(mercator: [number, number]): [number, number] { + const [x, y] = mercator; + const lng = (x / EARTH_RADIUS) * RAD_TO_DEG; + const lat = (2 * Math.atan(Math.exp(y / EARTH_RADIUS)) - Math.PI / 2) * RAD_TO_DEG; + return [lng, lat]; +} diff --git a/vite.config.ts b/vite.config.ts index a76b7dc2..66bbca2f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -73,7 +73,7 @@ export default defineConfig(({ mode, command }) => { output: { manualChunks: { vendor: ['react', 'react-dom', 'react-router-dom'], - map: ['ol', 'ol-ext'], + map: ['maplibre-gl'], state: ['zustand'], }, }, diff --git a/yarn.lock b/yarn.lock index fb35684b..a9a04c19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -229,6 +229,14 @@ "@math.gl/web-mercator" "^4.1.0" earcut "^2.2.4" +"@deck.gl/mapbox@^9.2.7": + version "9.2.7" + resolved "https://registry.yarnpkg.com/@deck.gl/mapbox/-/mapbox-9.2.7.tgz#714df011a67ec6acd075db2e7c223e29f9ac82c0" + integrity sha512-kcTMavoM9RqGbDXg78U/DGlR3dCQMR5+9ctc83qy0aNP57zQ62okomnq9DVCfxvcQjYb1uMqAt3HaBespInRcA== + dependencies: + "@luma.gl/constants" "^9.2.6" + "@math.gl/web-mercator" "^4.1.0" + "@deck.gl/mesh-layers@^9.2.6": version "9.2.6" resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-9.2.6.tgz#ad0f2cac13609d7032edd7588a85a3b7105e9369" @@ -757,21 +765,44 @@ "@math.gl/types" "^4.1.0" "@probe.gl/env" "^4.0.8" +"@mapbox/geojson-rewind@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz#591a5d71a9cd1da1a0bf3420b3bea31b0fc7946a" + integrity sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA== + dependencies: + get-stream "^6.0.1" + minimist "^1.2.6" + +"@mapbox/jsonlint-lines-primitives@^2.0.2", "@mapbox/jsonlint-lines-primitives@~2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + integrity sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ== + "@mapbox/martini@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@mapbox/martini/-/martini-0.2.0.tgz#1af70211fbe994abf26e37f1388ca69c02cd43b4" integrity sha512-7hFhtkb0KTLEls+TRw/rWayq5EeHtTaErgm/NskVoXmtgAQu/9D299aeyj6mzAR/6XUnYRp2lU+4IcrYRFjVsQ== +"@mapbox/point-geometry@^1.1.0", "@mapbox/point-geometry@~1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-1.1.0.tgz#3328fb54b3a1273bc619bf0a6baad8de37181749" + integrity sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ== + "@mapbox/point-geometry@~0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" integrity sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ== -"@mapbox/tiny-sdf@^2.0.5": +"@mapbox/tiny-sdf@^2.0.5", "@mapbox/tiny-sdf@^2.0.7": version "2.0.7" resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-2.0.7.tgz#0d67d65a43195003b282764f2297c619736bbc6e" integrity sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug== +"@mapbox/unitbezier@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz#d32deb66c7177e9e9dfc3bbd697083e2e657ff01" + integrity sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw== + "@mapbox/vector-tile@^1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" @@ -779,6 +810,58 @@ dependencies: "@mapbox/point-geometry" "~0.1.0" +"@mapbox/vector-tile@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-2.0.4.tgz#59c5ca80a84c210e61226367b0f9c8fd1737a437" + integrity sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg== + dependencies: + "@mapbox/point-geometry" "~1.1.0" + "@types/geojson" "^7946.0.16" + pbf "^4.0.1" + +"@mapbox/whoots-js@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" + integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== + +"@maplibre/geojson-vt@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@maplibre/geojson-vt/-/geojson-vt-5.0.4.tgz#c5f301a5d227cecf0bf4d1ab9239b8b0b13e78fe" + integrity sha512-KGg9sma45S+stfH9vPCJk1J0lSDLWZgCT9Y8u8qWZJyjFlP8MNP1WGTxIMYJZjDvVT3PDn05kN1C95Sut1HpgQ== + +"@maplibre/maplibre-gl-style-spec@^24.4.1": + version "24.4.1" + resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-24.4.1.tgz#600a1dbb2912831564cc6ba6e96c22cf34ffdc0c" + integrity sha512-UKhA4qv1h30XT768ccSv5NjNCX+dgfoq2qlLVmKejspPcSQTYD4SrVucgqegmYcKcmwf06wcNAa/kRd0NHWbUg== + dependencies: + "@mapbox/jsonlint-lines-primitives" "~2.0.2" + "@mapbox/unitbezier" "^0.0.1" + json-stringify-pretty-compact "^4.0.0" + minimist "^1.2.8" + quickselect "^3.0.0" + rw "^1.3.3" + tinyqueue "^3.0.0" + +"@maplibre/mlt@^1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@maplibre/mlt/-/mlt-1.1.6.tgz#49d91b54e4ae6cd03b19d6c3b342a7e8e2c6246d" + integrity sha512-rgtY3x65lrrfXycLf6/T22ZnjTg5WgIOsptOIoCaMZy4O4UAKTyZlYY0h6v8le721pTptF94U65yMDQkug+URw== + dependencies: + "@mapbox/point-geometry" "^1.1.0" + +"@maplibre/vt-pbf@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@maplibre/vt-pbf/-/vt-pbf-4.2.1.tgz#395d97bd5de68b5efabf0d56c535163bb88f75c7" + integrity sha512-IxZBGq/+9cqf2qdWlFuQ+ZfoMhWpxDUGQZ/poPHOJBvwMUT1GuxLo6HgYTou+xxtsOsjfbcjI8PZaPCtmt97rA== + dependencies: + "@mapbox/point-geometry" "^1.1.0" + "@mapbox/vector-tile" "^2.0.4" + "@maplibre/geojson-vt" "^5.0.4" + "@types/geojson" "^7946.0.16" + "@types/supercluster" "^7.1.3" + pbf "^4.0.1" + supercluster "^8.0.1" + "@math.gl/core@4.1.0", "@math.gl/core@^4.1.0": version "4.1.0" resolved "https://registry.yarnpkg.com/@math.gl/core/-/core-4.1.0.tgz#2f4a1644c6f8fb50aacae57a02f1297f933aefbd" @@ -1077,6 +1160,100 @@ resolved "https://registry.yarnpkg.com/@stomp/stompjs/-/stompjs-7.3.0.tgz#5655b93e086a0be684291424c5bc8c92949b33ee" integrity sha512-nKMLoFfJhrQAqkvvKd1vLq/cVBGCMwPRCD0LqW7UT1fecRx9C3GoKEIR2CYwVuErGeZu8w0kFkl2rlhPlqHVgQ== +"@turf/along@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/along/-/along-7.3.4.tgz#16f8da76ce962b8c63eb5cdb8883cede6a5a5f49" + integrity sha512-PvIoXin0I1t3nRwJz7uqR6fsxDMqdGwJq90qGOeqkNwlZqlF+5o2wKHPwYwi0RXZhLvxRP5qlbNIvV8ADdbWxw== + dependencies: + "@turf/bearing" "7.3.4" + "@turf/destination" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/angle@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/angle/-/angle-7.3.4.tgz#136f9861ea63f2b7c2170a79b57d3c753f774f13" + integrity sha512-235JAfbrNMjHQXQfd/p+fYnlfCHsQsKHda5Eeyc+/jIY0s5mKvhcxgFaOEnigA2q1n+PrVOExs3BViGTKnWhAg== + dependencies: + "@turf/bearing" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/rhumb-bearing" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/area@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/area/-/area-7.3.4.tgz#7506ff1c64e2d9fb25d5e43707075a92770dcca3" + integrity sha512-UEQQFw2XwHpozSBAMEtZI3jDsAad4NnHL/poF7/S6zeDCjEBCkt3MYd6DSGH/cvgcOozxH/ky3/rIVSMZdx4vA== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/bbox-clip@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/bbox-clip/-/bbox-clip-7.3.4.tgz#65e2b5e51aab4c2e150a5741b2260aba762e45c9" + integrity sha512-HCn0q/WPVEE9Dztg7tCvClOPrrh9MoxNUk73byHvcZLBcvziN6F84f/ZbFcbQSh8hgOeVMs/keeqWMqsICcNLg== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/bbox-polygon@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/bbox-polygon/-/bbox-polygon-7.3.4.tgz#f2bf36583d0cca9688ba8f2cb67bbca6bad82bd9" + integrity sha512-XCDYQwCA41Bum3R1xX0Na1nR4ozoe/pCYy5bxqrzyMs87kPJUIfBrD5IWxjnZyLqFpfEpolMHJz5ed1uA2PanQ== + dependencies: + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/bbox@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-7.3.4.tgz#75673871c2d7e086bef085cce7b1daa4bed66aae" + integrity sha512-D5ErVWtfQbEPh11yzI69uxqrcJmbPU/9Y59f1uTapgwAwQHQztDWgsYpnL3ns8r1GmPWLP8sGJLVTIk2TZSiYA== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/bearing@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/bearing/-/bearing-7.3.4.tgz#a6bf6d227daa11eaf484df00740361ab779b59d4" + integrity sha512-zvFjapyFaOrM8nBtAND7f4yb0BJV0jyj6cyoXyTYqLY+3Hn0eHgL0M8lwxDLbTom5KfqYDHDVDQC3+VSfypoEA== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/bezier-spline@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/bezier-spline/-/bezier-spline-7.3.4.tgz#90ce6dd5734103199291c758e88bf17f7eb01d4a" + integrity sha512-+iDUeiBKByIs/6K5WW8pG6IDxrRLJHFLM80zSpzk2xBtgy3mq36NZwwt67Pu7EJAkc9GUXKIm9SkspoKue9aYQ== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/boolean-clockwise@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-clockwise/-/boolean-clockwise-7.3.4.tgz#1a77a96f396baf89d05efd8fe9af3ff01dbc8e79" + integrity sha512-X/O+u/OsoJ99mujhlqviuB7HX0tdJ5931TBjNSseps43XtROVuB5PwBDgwKfu5lY1B4DSGAxbbxJ795RmPnguQ== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + "@turf/boolean-clockwise@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/boolean-clockwise/-/boolean-clockwise-5.1.5.tgz#3302b7dac62c5e291a0789e29af7283387fa9deb" @@ -1085,6 +1262,272 @@ "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" +"@turf/boolean-concave@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-concave/-/boolean-concave-7.3.4.tgz#6d7e3d82b6d52a141ada69d8ce1bac9aae5914c2" + integrity sha512-SHuAzjqaAes6ELDZcN/FKZWCQZsqwYv3gMosoLRFWTwKyBQe8i29e4y6XnXakDr1uklVUeRRcdhZ5oKtX9ABPQ== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/boolean-contains@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-contains/-/boolean-contains-7.3.4.tgz#d5aad7efbb5280e96f708572f9ffd14c026a1107" + integrity sha512-AJMGbtC6HiXgHvq0RNlTfsDB58Qf9Js45MP/APbhGTH4AiLZ8VMDISywVFNd7qN6oppNlDd3xApVR28+ti8bNg== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/boolean-point-on-line" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/line-split" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/boolean-crosses@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-crosses/-/boolean-crosses-7.3.4.tgz#d858d4a9c4bac4e77633eba3cad6c862a86b9c9e" + integrity sha512-v/U3SuGdkexfLTMhho6Vj0OjqPUeYdThxp8zggGJ1VHow27fvLLez0DjUR3AftHjjHM6bRzZoNsu2qUlEe5hjw== + dependencies: + "@turf/boolean-equal" "7.3.4" + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/line-intersect" "7.3.4" + "@turf/polygon-to-line" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/boolean-disjoint@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-disjoint/-/boolean-disjoint-7.3.4.tgz#1887b564ca7899ce9a00dd87d1e7c5e583f459db" + integrity sha512-Dl4O27ygi2NqskGQuvSlDLJYlJ2SPkHb3A9T/v6eAudjlMiKdEY6bMxKUfU5y+Px1WiCZxd+9rXGXJgGC3WiQg== + dependencies: + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/line-intersect" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/polygon-to-line" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/boolean-equal@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-equal/-/boolean-equal-7.3.4.tgz#353530600e4b0861a4e1734a32cb7915d37a49f9" + integrity sha512-AhWqe7D1o0wp3d3QQRSqgWDI8s1JfTFKFe9rU5mrSxYPGlmaQsJC07RCaYfFiGym9lACd1lxBJiPidCbLaPOfw== + dependencies: + "@turf/clean-coords" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + geojson-equality-ts "^1.0.2" + tslib "^2.8.1" + +"@turf/boolean-intersects@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-intersects/-/boolean-intersects-7.3.4.tgz#a8477fa69ea7ca1357690e36586c0ad5ff8ab043" + integrity sha512-sxi41NXkb5hrJgOvpm32hyBLhW8fem0vn2XxR4+jyRg1rM/v3ziF10/VqC9KDZuDNZkt9JjL9B0825Cf7AN6Lg== + dependencies: + "@turf/boolean-disjoint" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/boolean-overlap@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-overlap/-/boolean-overlap-7.3.4.tgz#27d0d62cb3c2755686b84d64f23da7fb5bb70f76" + integrity sha512-Q3dlswIuqffSiMfln7xa36YDnN1TWtERMF/155rzjglm4NTUG/6S+gNsb8s6qpLjc+hN6btCq1ZjxAWurPf8Vg== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/line-intersect" "7.3.4" + "@turf/line-overlap" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + geojson-equality-ts "^1.0.2" + tslib "^2.8.1" + +"@turf/boolean-parallel@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-parallel/-/boolean-parallel-7.3.4.tgz#3b22b3aec4770aebed10055c4b1f5141b5130955" + integrity sha512-sTNMqsUkLPnSJEqc2IZ5ig3nHRoubyOH2HW1LILqOybCJI630FEM9UoYP1pZniF5nwTyCjQWnXA1FxusVILuFQ== + dependencies: + "@turf/clean-coords" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/line-segment" "7.3.4" + "@turf/rhumb-bearing" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/boolean-point-in-polygon@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-7.3.4.tgz#654a940939fecddf1887ca4c95bd5a2f07a42de8" + integrity sha512-v/4hfyY90Vz9cDgs2GwjQf+Lft8o7mNCLJOTz/iv8SHAIgMMX0czEoIaNVOJr7tBqPqwin1CGwsncrkf5C9n8Q== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + point-in-polygon-hao "^1.1.0" + tslib "^2.8.1" + +"@turf/boolean-point-on-line@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-point-on-line/-/boolean-point-on-line-7.3.4.tgz#6a8174fb866ed6cad3b7b223bab9470ddfbb9de4" + integrity sha512-70gm5x6YQOZKcw0b/O4jjMwVWnFj+Zb6TXozLgZFDZShc8pgTQtZku7K+HKZ7Eya+7usHIB4IimZauomOMa+iw== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/boolean-touches@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-touches/-/boolean-touches-7.3.4.tgz#d66685333206aa58ba80146c7dd697ee4327855e" + integrity sha512-XOwhjc0oCWhnBUB+l4drpXcg7mkNXPX3SuSz/Xv7gvLH/yRrBwzVGllzK1AHlGU9BVkGVBJIZGYX7jgTM681NQ== + dependencies: + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/boolean-point-on-line" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/boolean-valid@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-valid/-/boolean-valid-7.3.4.tgz#a2430cb637da6d4fda537b57b992e97a2a14d75e" + integrity sha512-P6M9BtRvzFF2N5g+1/DTIbYGpEbwQ2sv/Pw+uj11P3NYAA9VE8mvrxFYf+CowFdSfY6bY4ejhuqKhrTmAMv7wA== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/boolean-crosses" "7.3.4" + "@turf/boolean-disjoint" "7.3.4" + "@turf/boolean-overlap" "7.3.4" + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/boolean-point-on-line" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/line-intersect" "7.3.4" + "@types/geojson" "^7946.0.10" + geojson-polygon-self-intersections "^1.2.1" + tslib "^2.8.1" + +"@turf/boolean-within@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/boolean-within/-/boolean-within-7.3.4.tgz#c26e308990d3158628cb27e60a015de82571f06c" + integrity sha512-eLgi803gz0KcYkyxnnqnz9Vd6tw2/0eAExe/Rq8sO0dqypaSiomSumxjqu89d/yo24Qz8gW7c0kJ6YihNbMYxA== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/boolean-point-on-line" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/line-split" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/buffer@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/buffer/-/buffer-7.3.4.tgz#d458326ab00bf86b1e2a3109f8b660d487b3ea0e" + integrity sha512-MVOCBDuOl3KGDsh2stW12RmiFaFeSkVjeUbZ+ADUtIVnv+jlFsmjBpFtsEw8s9YQn5g0667QppOshm0FBHA57Q== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/center" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/jsts" "^2.7.1" + "@turf/meta" "7.3.4" + "@turf/projection" "7.3.4" + "@types/geojson" "^7946.0.10" + d3-geo "1.7.1" + +"@turf/center-mean@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/center-mean/-/center-mean-7.3.4.tgz#a949905c2e1fa977685dd57979fde83b52524c30" + integrity sha512-6foVk5HLjlSPr48EI686Eis6/bYrJiHjKQlwY/7YlJc1uDitsIjPw2LjUCGIUZDEd6PdNUgg1+LgI7klXYvW3A== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/center-median@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/center-median/-/center-median-7.3.4.tgz#a42b2e2d3e1b6d128cbca24df88392c7fbc394e5" + integrity sha512-Bz6rDr0plQOGSXgT3X3t941pYd44a5vIY8OEt4Y11H1BsgpmzFc6g7L5mr7FXW/uiYGxOewAfNcVUYUdJf9kMg== + dependencies: + "@turf/center-mean" "7.3.4" + "@turf/centroid" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/center-of-mass@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/center-of-mass/-/center-of-mass-7.3.4.tgz#ef4bc3009aad75a10e194a08908acc44e8c04a5a" + integrity sha512-mOSupDF5qxQTA/kOWYletHcBJQ3S2gVl/IRgrBH/YY9yiFq6UGRpZ0sNcIML4H06u/1DY/jqqG+d1nc/1yIA6Q== + dependencies: + "@turf/centroid" "7.3.4" + "@turf/convex" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/center@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/center/-/center-7.3.4.tgz#e4895ea3348aecbe690fe151f8b216a8be2d8ffc" + integrity sha512-4SsLMDHWthXbyIHsczgFCo4fx+8tC8w2+B5HdEuY+P+cSOOL4T+6QQzd7WWjuN/Y3ndowFssUmwRrvXuwVRxQA== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/centroid@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/centroid/-/centroid-7.3.4.tgz#8c2722075721a04940fa0492287b54fadbca4bb6" + integrity sha512-6c3kyTSKBrmiPMe75UkHw6MgedroZ6eR5usEvdlDhXgA3MudFPXIZkMFmMd1h9XeJ9xFfkmq+HPCdF0cOzvztA== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/circle@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/circle/-/circle-7.3.4.tgz#4cf89cdd17c12855e54cba4158e9c803d9ab1691" + integrity sha512-6ccr5iT51/XONF+pbpkqoRxKX4ZVWLubXb1frGCnClv2suo1UIY9SIlINNctVDupXd2P9PpqZCbrXATrcrokPg== + dependencies: + "@turf/destination" "7.3.4" + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/clean-coords@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/clean-coords/-/clean-coords-7.3.4.tgz#0df35d2e2ef50a829ba5b6edb3a4ac4690792aa6" + integrity sha512-S61aJXLvPN/uZHtjzmJbLv7xhi28Sq3PshCIZSvno4Mo45bvl79Vg4aZskrG05AaSSbipplqfH+MZrkW9Xboeg== + dependencies: + "@turf/boolean-point-on-line" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/clone@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/clone/-/clone-7.3.4.tgz#ae2d9ccd77730181aaa76874308140515e55ddaa" + integrity sha512-pwQ+RyQw986uu7IulY/18NRAebwZZScb084bvVqVkTrllwLSv4oVBqUxmUMiwtp+PNdiRGRFOvNyZqtRsiD+Jw== + dependencies: + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + "@turf/clone@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/clone/-/clone-5.1.5.tgz#253e8d35477181976e33adfab50a0f02a7f0e367" @@ -1092,11 +1535,290 @@ dependencies: "@turf/helpers" "^5.1.5" +"@turf/clusters-dbscan@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/clusters-dbscan/-/clusters-dbscan-7.3.4.tgz#c013bfeb6b3cdd816ff126da88789f9b9877df76" + integrity sha512-RkuXf767Shk0AfY+fh0PASVw8YR4H8zYR7XQrCgWd/bCuh6CXs7rWZ6UTLu/PiA6y6WsIhyAQv4LhNH5kCzpbA== + dependencies: + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + "@types/geokdbush" "^1.1.5" + geokdbush "^2.0.1" + kdbush "^4.0.2" + tslib "^2.8.1" + +"@turf/clusters-kmeans@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/clusters-kmeans/-/clusters-kmeans-7.3.4.tgz#9854f03a48dec68049742b045d2eb6f95f5328ac" + integrity sha512-89mlwhcb+vyZAKX0eBa3LQ8VyIKLayrzJpKGb90sEkIu0hDua9JCE+zlbaPoUAvAqflEiX+poFFuh7pngtsBMg== + dependencies: + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + skmeans "0.9.7" + tslib "^2.8.1" + +"@turf/clusters@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/clusters/-/clusters-7.3.4.tgz#ece710095aaf6e19aa213350351354d3ac08bb4c" + integrity sha512-+zoSyiF0LilXy4Tr0/lC7IgqbTMZZ2wwP3iSrqre58b61pUtdhCnBcjA2r8FkcW7z3GMbGf5XkIWhO+b+vDSsw== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/collect@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/collect/-/collect-7.3.4.tgz#aeafdc4421a18f05fbeaee0b6f010cc189d49c62" + integrity sha512-fG28oDZK4HCXC/AhF0pmHKLtI9DWwdJr/ktuWolrqzA5b1G7eawrXwDu8B5I3sXhdWonNRMcuLbIuz+XQscHKw== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + rbush "^3.0.1" + tslib "^2.8.1" + +"@turf/combine@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/combine/-/combine-7.3.4.tgz#2da684b1fb828bec4fdcb8dd4b403398ebffa0de" + integrity sha512-wNp9ar4FfpTfQXLZWXQ/jUBBoUFOwRN/mmlv5xrhoYFpP/F5SNy7GVDMZXaBfHdUUplfJUPF5hIKQlCUR8+k3A== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/concave@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/concave/-/concave-7.3.4.tgz#cd7792d226193c932645676911730df09872cce0" + integrity sha512-HZa1CV2pv4Xpcoe3t5S3ZW6j9jVbc27exzKwZWF7MlFxSz4BKRirWiME8Fku8nvQcGafpfLc+Lwpma+nGvg06w== + dependencies: + "@turf/clone" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/tin" "7.3.4" + "@types/geojson" "^7946.0.10" + topojson-client "3.x" + topojson-server "3.x" + tslib "^2.8.1" + +"@turf/convex@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/convex/-/convex-7.3.4.tgz#e3bd5dd9d9eeef3de646bb0ce4b5de2a2da1fb31" + integrity sha512-zeNv0fFdOoHuOQB7nl6OLb0DyjvzDvm0e3zlFkph50GF9pEKOmkCSmlniw681aWL2aRBdWZBnON3rRzOS+9C7Q== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + concaveman "^1.2.1" + tslib "^2.8.1" + +"@turf/destination@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/destination/-/destination-7.3.4.tgz#bfd0262be1a70c24a1efed02a391e3a968e1b41a" + integrity sha512-YxoUJwkKmTHiRFQxMQOP0tz8Vy+ga5EXl+C+F/WubjDLwT1AJu5y8CNIjLvWyjPWckj/vZG4u/1js5bx6MLADA== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/difference@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/difference/-/difference-7.3.4.tgz#ef514f8e0141d30f27068695aaf8edd96748b19b" + integrity sha512-kIxizNQrYLO2rtqUIeed0tPycicrXoipy/g9d4mjv91kzBEbwpyojz9zi8U9G1ISBfCEgA7wsViQD0r+8qzxXw== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + polyclip-ts "^0.16.8" + tslib "^2.8.1" + +"@turf/dissolve@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/dissolve/-/dissolve-7.3.4.tgz#40b90e89fcf0946f50463e81e7df678702e5d716" + integrity sha512-xjGY1gQ4icWhDgsW0YfU2KQtij1+ru34AfvtkVMQEgI86O9EwjW2r9Jq5DJY2PMKPbor3kz9yM/RTOiDP7f3Jg== + dependencies: + "@turf/flatten" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + polyclip-ts "^0.16.8" + tslib "^2.8.1" + +"@turf/distance-weight@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/distance-weight/-/distance-weight-7.3.4.tgz#1856259f9ec0ecb9e4f66b621f49ee7cd719e282" + integrity sha512-dVMNEmIluKgn7iQTmzJJOe0UASRNmmSdFX1boAev5MISaW3AvPiURCCOV+lTIeoaQbWRpEAESbAp6JIimXFr8Q== + dependencies: + "@turf/centroid" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/distance@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-7.3.4.tgz#6552ccf9addf7f7d4f74ffaf1686142f8d787f9a" + integrity sha512-9drWgd46uHPPyzgrcRQLgSvdS/SjVlQ6ZIBoRQagS5P2kSjUbcOXHIMeOSPwfxwlKhEtobLyr+IiR2ns1TfF8w== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/ellipse@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/ellipse/-/ellipse-7.3.4.tgz#d8f535355e073c7bb21821d7aca0956d95cd4472" + integrity sha512-SMgbERZl12j7H8YaIofmnf0NwAvdF5Wly4tjI/eUhj/sFOKrKXOS1lvCSBJ6uSV9tFijl3ecGOVOlTpURdZ30g== + dependencies: + "@turf/destination" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/transform-rotate" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/envelope@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/envelope/-/envelope-7.3.4.tgz#0daa18730d6be00de6fc95cb886dcde2a628cede" + integrity sha512-anXSjYMXGAyXT7rpO74VyRI0q/rPAbKE/MYvou+QvG0U/Oa7el0yF4JNNi9wKEAxXg/10aWm9kHp8s2caeLg6A== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/bbox-polygon" "7.3.4" + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/explode@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/explode/-/explode-7.3.4.tgz#c7b6189123c9494026f58a8ea2933df692a9b2be" + integrity sha512-7QWhp3f8jhrWjvArhJ74hXBFHMaiJr/2Y1PzHCWue2/pC5MbbTV0o7peehwrrrJC/1uD6CVb3hlcb77IxtMQkw== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/flatten@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/flatten/-/flatten-7.3.4.tgz#ee74260cd7247a998f6f1576eca56fca7effceae" + integrity sha512-Yt3HCh/qeNaXS4LYhXczFhBfTeaKlTBoxEw1OICb9RT3SiGU0XCxuK7H0W26OLo7XxB0qP7GPs2L3FZbiri6wQ== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/flip@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/flip/-/flip-7.3.4.tgz#08508e40e5ed17368e79f89a74fb134ca1329c80" + integrity sha512-HME+kVMTyvcsYVY6dC6DTvuzq8vvDpw+C7PviEqpuT3KcVlBCoGPAqlWRdyWYOb9MDciOqNxvvJF/okpb/GQcg== + dependencies: + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/geojson-rbush@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/geojson-rbush/-/geojson-rbush-7.3.4.tgz#f03d34c5d1a1ee22760ba353d712c34b06c36fe8" + integrity sha512-aDG/5mMCgKduqBwZ3XpLOdlE2hizV3fM+5dHCWyrBepCQLeM/QRvvpBDCdQKDWKpoIBmrGGYDNiOofnf3QmGhg== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + rbush "^3.0.1" + tslib "^2.8.1" + +"@turf/great-circle@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/great-circle/-/great-circle-7.3.4.tgz#9a827e979e0ec34208eeef4c40f46affc610c29a" + integrity sha512-JvfzWFL9efP+xKtOnKzGvwEIXfaN0CLZoPPxNnWa/cVisLs9FVMlC9PWnuL3/3aqH5VhBHPddmU8ipzNE6KIIA== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + arc "^0.2.0" + tslib "^2.8.1" + +"@turf/helpers@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-7.3.4.tgz#a8c918981599dddcf452421c7b307c5832d05f02" + integrity sha512-U/S5qyqgx3WTvg4twaH0WxF3EixoTCfDsmk98g1E3/5e2YKp7JKYZdz0vivsS5/UZLJeZDEElOSFH4pUgp+l7g== + dependencies: + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + "@turf/helpers@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-5.1.5.tgz#153405227ab933d004a5bb9641a9ed999fcbe0cf" integrity sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw== +"@turf/hex-grid@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/hex-grid/-/hex-grid-7.3.4.tgz#850e4b135550f5890790f58c9c10dbfa5774987c" + integrity sha512-TDCgBykFdsrP3IOOfToiiLpYkbUb3eEEhM9riIqWht0ubKUY61LN7qVs9bxZD83hG6XaDB6uY7SWkxK1zIEopQ== + dependencies: + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/intersect" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/interpolate@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/interpolate/-/interpolate-7.3.4.tgz#ab5b0f59ddea1077ab0b7c3283bd05223e152bab" + integrity sha512-lwYSMbHxsXYEWObv0tyBCjwTLXyfsTvOLn/NFhlsGrNCYEXn8I1VPtLGwuxbSdF3hVRgurn8qftkB1npHrNs6Q== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/centroid" "7.3.4" + "@turf/clone" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/hex-grid" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/point-grid" "7.3.4" + "@turf/square-grid" "7.3.4" + "@turf/triangle-grid" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/intersect@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/intersect/-/intersect-7.3.4.tgz#b01b7e5418e848b3260f6bdfe33a16278ae81f3e" + integrity sha512-VsqMEMeRWWs2mjwI7sTlUgH1cEfugTGhQ0nF8ncHG7YKd9HUUTzIKpn9FJeoguPWIYITcy1ar4yJEOU/hteBVw== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + polyclip-ts "^0.16.8" + tslib "^2.8.1" + +"@turf/invariant@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-7.3.4.tgz#d81f448aa4fdda36047337a688517581e91c12f0" + integrity sha512-88Eo4va4rce9sNZs6XiMJowWkikM3cS2TBhaCKlU+GFHdNf8PFEpiU42VDU8q5tOF6/fu21Rvlke5odgOGW4AQ== + dependencies: + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + "@turf/invariant@^5.1.5": version "5.2.0" resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-5.2.0.tgz#f0150ff7290b38577b73d088b7932c1ee0aa90a7" @@ -1104,6 +1826,203 @@ dependencies: "@turf/helpers" "^5.1.5" +"@turf/isobands@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/isobands/-/isobands-7.3.4.tgz#af29f5fbf55351f8319b489b65ef0f28f3430fdd" + integrity sha512-SFYefwjQdQfF0MV0zfaSwNg9J1wD7mfPP8scGcScKGM3admbwS2A3V8rqPADBfYLD2eCPBDFnySxcl9SHbPung== + dependencies: + "@turf/area" "7.3.4" + "@turf/bbox" "7.3.4" + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/explode" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/isolines@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/isolines/-/isolines-7.3.4.tgz#b82191d3e230c7230534beca6c40804f39915c27" + integrity sha512-UFRIULkIgkZOmrhLxExWvguixbzfoCgVcXIqo2Cp68do4v+nwc3pTM7MTt4DBVFloIdX0Usrn4K44LQ/V05gxg== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/jsts@^2.7.1": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@turf/jsts/-/jsts-2.7.2.tgz#b327aa54ef065cbf1768ad69bd6ae1087385d32b" + integrity sha512-zAezGlwWHPyU0zxwcX2wQY3RkRpwuoBmhhNE9HY9kWhFDkCxZ3aWK5URKwa/SWKJbj9aztO+8vtdiBA28KVJFg== + dependencies: + jsts "2.7.1" + +"@turf/kinks@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/kinks/-/kinks-7.3.4.tgz#f1aa088945978519308a6aafdb8805a0b5eabf5d" + integrity sha512-LZTKELWxvXl0vc9ZxVgi0v07fO9+2FrZOam2B10fz/eGjy3oKNazU5gjggbnc499wEIcJS4hN+VyjQZrmsJAdQ== + dependencies: + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/length@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/length/-/length-7.3.4.tgz#c35aca9695d783c0fdd34b46b5e13119fb2aee13" + integrity sha512-Dg1GnQ/B2go5NIWXt91N4L7XTjIgIWCftBSYIXkrpIM7QGjItzglek0Z5caytvb8ZRWXzZOGs8//+Q5we91WuQ== + dependencies: + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/line-arc@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/line-arc/-/line-arc-7.3.4.tgz#07bd23c779e7e887cff1ca4577d4babfeca56368" + integrity sha512-nqZ+JKjDVIrvREFHgtJIP9Ps4WbWw3eStqdIzAPolrzoXyAZnpIKquyfRTxpJFYUUjDmf+uQ/SFWsPP4SOWAqQ== + dependencies: + "@turf/circle" "7.3.4" + "@turf/destination" "7.3.4" + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/line-chunk@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/line-chunk/-/line-chunk-7.3.4.tgz#23c803e3d81e548016f1dc7c2451aece9e854b7c" + integrity sha512-xWEHR99EpUO5ZPEZhMfa0QvnFZC0W+QLxB1GcJcSeJAQ5ZMXUXY8doKF1Nztk0eppawMprEEO3nQWLvQoR4z2g== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/length" "7.3.4" + "@turf/line-slice-along" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/line-intersect@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/line-intersect/-/line-intersect-7.3.4.tgz#79dc5025aa350a866cbfee932fea9fad04ff48e4" + integrity sha512-XygbTvHa6A+v6l2ZKYtS8AAWxwmrPxKxfBbdH75uED1JvdytSLWYTKGlcU3soxd9sYb4x/g9sDvRIVyU6Lucrg== + dependencies: + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + sweepline-intersections "^1.5.0" + tslib "^2.8.1" + +"@turf/line-offset@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/line-offset/-/line-offset-7.3.4.tgz#6d886135dddafa2f8c8e1157d0864fd58e73f662" + integrity sha512-CSrg3njde9Tx+C0oL+BHUpZYpgD+PEmzp0ldDNis5ZQiTe5tUrwiIyG7A/QXf9eDnGhtV1WhCAycX0Wjged4pg== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/line-overlap@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/line-overlap/-/line-overlap-7.3.4.tgz#e0d49511ae18c1fc31ba172c014bea085598ecde" + integrity sha512-3GBECiwNAQ2MmSwiqAHMweIl+EiePK0Jx4fXxF1KFE+NGCDv/MbGcEYfAbmsTg8mg6oRI9D8fJZzrT44DHpHXA== + dependencies: + "@turf/boolean-point-on-line" "7.3.4" + "@turf/geojson-rbush" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/line-segment" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/nearest-point-on-line" "7.3.4" + "@types/geojson" "^7946.0.10" + fast-deep-equal "^3.1.3" + tslib "^2.8.1" + +"@turf/line-segment@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/line-segment/-/line-segment-7.3.4.tgz#2bd7967553b76e1fcdcbedc5b7d1b7b2325e2dd7" + integrity sha512-UeISzf/JHoWEY5yeoyvKwA5epWcvJMCpCwbIMolvfTC5pp+IVozjHPVCRvRWuzmbmAvetcW0unL5bjqi0ADmuQ== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/line-slice-along@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/line-slice-along/-/line-slice-along-7.3.4.tgz#e454bbaea4dde2436b8d39d6899b8ab6e9ce65fc" + integrity sha512-RT5HydNy8+m9Y3u39USeYZauG2EyMqCYoLnTpWcAxbZGdq9WjIwdzAwYir3d8eJkOzjlR6Khz071VM4Ufqs0Kg== + dependencies: + "@turf/bearing" "7.3.4" + "@turf/destination" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/line-slice@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/line-slice/-/line-slice-7.3.4.tgz#59fc2912f8c75cc1e10596dcb7afd63ca64f4366" + integrity sha512-6Vt4Eptdr2C5T+jtpbo8D4v8b6X7KqYonPPyMB6huv+Kcg3nz4JRI9OQCDCaon9rWvU3ffWwjsjcbJCQS9o0sA== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/nearest-point-on-line" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/line-split@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/line-split/-/line-split-7.3.4.tgz#9f33fcc070605629f152ca20c55595a8c406bddf" + integrity sha512-l1zmCSUnGsiN4gf22Aw91a2VnYs5DZS67FdkYqKgr+wPEAL/gpQgIBBWSTmhwY8zb3NEqty+f/gMEe8EJAWYng== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/geojson-rbush" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/line-intersect" "7.3.4" + "@turf/line-segment" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/nearest-point-on-line" "7.3.4" + "@turf/truncate" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/line-to-polygon@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/line-to-polygon/-/line-to-polygon-7.3.4.tgz#6a92a97f0d914425f56fada225cfbbc4cdecef10" + integrity sha512-vRnDHjzwOroC74/fsJEU+dUeGhiR/B2bG0/HeEWRBplAjmwVPptRBmDGtXKTz8sbA6or17/XtOITp3zTU0lBZw== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/mask@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/mask/-/mask-7.3.4.tgz#0ed4772f42ee16f1f2f00e4d1f609cce40c2a251" + integrity sha512-FJIlSk8m0AiqzNoLSMdYuhDRif6aeOYVdW/WxjEjpUoMalwy2w5MMlZqJB9zxt/xSrMq6lvTWJgZfZfGL2s4ZQ== + dependencies: + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + polyclip-ts "^0.16.8" + tslib "^2.8.1" + +"@turf/meta@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-7.3.4.tgz#8e917d29de9da96a0f95f3f16119ba9abde7dee6" + integrity sha512-tlmw9/Hs1p2n0uoHVm1w3ugw1I6L8jv9YZrcdQa4SH5FX5UY0ATrKeIvfA55FlL//PGuYppJp+eyg/0eb4goqw== + dependencies: + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + "@turf/meta@^5.1.5": version "5.2.0" resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-5.2.0.tgz#3b1ad485ee0c3b0b1775132a32c384d53e4ba53d" @@ -1111,6 +2030,266 @@ dependencies: "@turf/helpers" "^5.1.5" +"@turf/midpoint@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/midpoint/-/midpoint-7.3.4.tgz#e4034c6c85cd8f505153d472576319a17e28e3e7" + integrity sha512-/XAeGvsz8l5HaqcP7TUlexzGfibqXozQgBZ8rH7az6op2Dfm3pL/Z7bKLHoVavM0ccBg0Pt7g6j9NM54kZWdKA== + dependencies: + "@turf/bearing" "7.3.4" + "@turf/destination" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/moran-index@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/moran-index/-/moran-index-7.3.4.tgz#22331153e27d71322a3f6d9c80c1e9a91d01471d" + integrity sha512-SNb16szwEG0OiyNn3z9zvSnk3M3tfwvvN8i//9UIC32APEApI+MRXCl93H/qZkKMhhh/cHA0pF0pjYZwl5z8Ow== + dependencies: + "@turf/distance-weight" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/nearest-neighbor-analysis@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/nearest-neighbor-analysis/-/nearest-neighbor-analysis-7.3.4.tgz#c72b10ea865e0510374db40a8dc77c75d63e831b" + integrity sha512-8EZlDy5poU0t7BDy8KTzOmfiGsAs2kWuB3/kgI4sMdbThKVk2P4hHKuToCSGvqAzwSy3B2qKYM1N6JeVWytu+w== + dependencies: + "@turf/area" "7.3.4" + "@turf/bbox" "7.3.4" + "@turf/bbox-polygon" "7.3.4" + "@turf/centroid" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/nearest-point" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/nearest-point-on-line@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/nearest-point-on-line/-/nearest-point-on-line-7.3.4.tgz#0e6ef812a0deacb0aee15fb924b1246027cd0f61" + integrity sha512-DQrP3lRju83rIXFN68tUEpc7ki/eRwdwBkK2CTT4RAcyCxbcH2NGJPQv8dYiww/Ar77u1WLVn+aINXZH904dWw== + dependencies: + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/nearest-point-to-line@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/nearest-point-to-line/-/nearest-point-to-line-7.3.4.tgz#c3eac23734433b18fd3944a07534207c9e1ad9ea" + integrity sha512-Nzp3ojQt0gDACNYG+oNWymRXAUCey0LzdiSezYtRwdA0/+FQCtuxP8Lbc8FftV10JL8D78/CRlmt7omaXLLXCg== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/point-to-line-distance" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/nearest-point@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/nearest-point/-/nearest-point-7.3.4.tgz#ca80e255df4879d913c6fc2ad13a9f4ca1df4894" + integrity sha512-WfI09f2bX0nKx/jkO7zCt3tUrJulyAlUYQtZHP7lWYMCOmZ6Pq26D6lKWjpfs2it0OHbhlx1XF/UupEUaz830w== + dependencies: + "@turf/clone" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/planepoint@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/planepoint/-/planepoint-7.3.4.tgz#ead27d6c3968624aa729e67301a7cebe87a0e070" + integrity sha512-KAhMAnddbuWIEZuk2bK//g+xTeKn8aV9N2AaE27x6JMJyV/wqvatIuVVqEIXI3SkAFbhiVBpVuarvPYhrJ+fhg== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/point-grid@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/point-grid/-/point-grid-7.3.4.tgz#e9701976d86e881f4d417515149ff90b5ea1db1b" + integrity sha512-9CL3OJ4dEt266+fxYlOQeRFqAY3XtsAuak2Gpk+K8k+Y3yGv8pvyn3QaAQ6P2npbiKt0zfG8Md/+HBAPOMPQ0A== + dependencies: + "@turf/boolean-within" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/point-on-feature@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/point-on-feature/-/point-on-feature-7.3.4.tgz#a03dc04741f636725c1c2595590fe5d2bbd76124" + integrity sha512-tQfIxsJUxZqyO7OeJC25y3DqN9i4fmrAt4TBrPvZcIIwymgN7aMrElJKlg/dfi7JDihKp3h/CkWMjtMQA14Vwg== + dependencies: + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/center" "7.3.4" + "@turf/explode" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/nearest-point" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/point-to-line-distance@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/point-to-line-distance/-/point-to-line-distance-7.3.4.tgz#0044680c4cda4f612cb9555c2819864fc6760bf0" + integrity sha512-IdPAxlAQZj7FCZg+ObyVHlNdqwLL/oxYoQjpxMNJ511gNxokCtEv0aeRZQjYOYIxr9Ss97v3yo3ILJaF9V2kPw== + dependencies: + "@turf/bearing" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/nearest-point-on-line" "7.3.4" + "@turf/projection" "7.3.4" + "@turf/rhumb-bearing" "7.3.4" + "@turf/rhumb-distance" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/point-to-polygon-distance@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/point-to-polygon-distance/-/point-to-polygon-distance-7.3.4.tgz#101d4ea4041263b0a665bcd66a70f85322452f2e" + integrity sha512-VxbkgHyzCkYWSxirqSUqw+lzbYmTf2qFhVZ/T5dprhwyXWcgalpupvgRzmZmjKkgsoJ017vrvCNKZRaCCn+Z7Q== + dependencies: + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/point-to-line-distance" "7.3.4" + "@turf/polygon-to-line" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/points-within-polygon@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/points-within-polygon/-/points-within-polygon-7.3.4.tgz#ba90e024738c6a5a83fb1be5ca1b90b19e3e39e0" + integrity sha512-HfT83Iw99zywDfCp+nJwS+JDzH+GdNug0sut9WDjGEznHKoZyAcOk+hGKL/ja8TeCLx9VsZHOiVCQFm+NTgvgA== + dependencies: + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/polygon-smooth@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/polygon-smooth/-/polygon-smooth-7.3.4.tgz#10b0ebbd4823194550779b075e0fad40aece8cc1" + integrity sha512-AnpaGgNYVvP/dfz10id3AotDrUh9O+4unXCk3es1ff51VrpUhVgH3H+zyTSbVL4zAXN/ejPb8UnKCxDvNOQs4g== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/polygon-tangents@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/polygon-tangents/-/polygon-tangents-7.3.4.tgz#ea515149ed0a133a54ede7d1b7554b5f98913ef7" + integrity sha512-D1IFocXJYF8PUMZ+BmnOstyRrzklqC86FgakYVk9O61F9Ki8LhMGaRfF+6reKMD473KvHvEf1M2EgmGt+OHDRw== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/boolean-within" "7.3.4" + "@turf/explode" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/nearest-point" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/polygon-to-line@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/polygon-to-line/-/polygon-to-line-7.3.4.tgz#76fda6577278aed73126bbc17384bf0f52839bcc" + integrity sha512-xhmOZ5rHZAKLUDLeYKWMsX84ip8CCGOcGLBHtPPYOjdIDHddMV6Sxt5kVgkmlZpK6NEWEmOD6lYR4obxHcHlGA== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/polygonize@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/polygonize/-/polygonize-7.3.4.tgz#22f72bf68ed6c866a3c8af8a2b1d155f5b8edef2" + integrity sha512-kmj05rkJ4tE8LvbQ4GVsL5GOrRiX/F5W4RIdxo8gPGTw1Y5oLG/1vFk6Hg6x63L1WcdNtF0sq6AdEI0G9BXWXA== + dependencies: + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/envelope" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/projection@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/projection/-/projection-7.3.4.tgz#05483cf34e711bf139fc22e236bed2068f1b5461" + integrity sha512-p91zOaLmzoBHzU/2H6Ot1tOhTmAom85n1P7I4Oo0V9xU8hmJXWfNnomLFf/6rnkKDIFZkncLQIBz4iIecZ61sA== + dependencies: + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/quadrat-analysis@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/quadrat-analysis/-/quadrat-analysis-7.3.4.tgz#35e480feaa403cee3c17afb6ba13520722ef0f97" + integrity sha512-Yxqq8wgrDiXIX+s0uOZ2exmYfRwTIcUX8J7j4P+sbyLVbyN8W3AjN2s5ZX21P0aFf3v24FBd2fNWlm5VmMUAdg== + dependencies: + "@turf/area" "7.3.4" + "@turf/bbox" "7.3.4" + "@turf/bbox-polygon" "7.3.4" + "@turf/centroid" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/point-grid" "7.3.4" + "@turf/random" "7.3.4" + "@turf/square-grid" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/random@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/random/-/random-7.3.4.tgz#8d2a075e7c81ae8b0f14a3cfe24a0cb930e49020" + integrity sha512-CXMS5XDoI5x0zc1aCYbn3t603k8hjaFHNsSOvGBW20z68cwP0UwMQQr0KLqFPqI4J1O7dMX+urn8IHH27RXFYg== + dependencies: + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/rectangle-grid@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/rectangle-grid/-/rectangle-grid-7.3.4.tgz#d49ef69d3b6fb4c51a44489a272998a001eb6574" + integrity sha512-qM7vujJ4wndB4MKZlEcnUSawgvs5wXpSEFf4f+LWRIfmGhtv6serzDqFzWcmy8kF8hg5J465PMktRmAFWq/a+w== + dependencies: + "@turf/boolean-intersects" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/rewind@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/rewind/-/rewind-7.3.4.tgz#544d7aaafd2189f523ab2c61f12de294fb61620f" + integrity sha512-4BZ8MHMujl4NAT7XnIs7JoOuDhpR96oDTB0RtqTeIP4onioIedVnw1ZA3Uq08sILGpR0qKLuDsvdz4x9jtbptg== + dependencies: + "@turf/boolean-clockwise" "7.3.4" + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + "@turf/rewind@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/rewind/-/rewind-5.1.5.tgz#9ea3db4a68b73c1fd1dd11f57631b143cfefa1c9" @@ -1122,6 +2301,379 @@ "@turf/invariant" "^5.1.5" "@turf/meta" "^5.1.5" +"@turf/rhumb-bearing@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/rhumb-bearing/-/rhumb-bearing-7.3.4.tgz#777a7e7b865e378c10c3127fd4ee3cefa94103e6" + integrity sha512-tvX1toSo80q0iL0cUMMXpSKsCCfOjRqDGCmOdR6B9shhk6xP1ZM2PLQDr+MFPBFeGyQuyY4CNFkV2+3DF49vYw== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/rhumb-destination@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/rhumb-destination/-/rhumb-destination-7.3.4.tgz#83ff56ba0a03930ca604deb3f2f13f38587071ae" + integrity sha512-6HikEb5nm2A18FQWk6vVLMQkc099I/7c69j47RYM27xQK8J8uBCNk1zLYyMPcZTh24xcNSbZ1iPHDsDOqw6wWQ== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/rhumb-distance@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/rhumb-distance/-/rhumb-distance-7.3.4.tgz#88a6213a384ebf149d07532c33952eeb80ddbc55" + integrity sha512-phwskeijdgYMsR3qDQmytfsg2iZcp3uWK7UFc76wKTEpxozbDGFI4enX5gXvZPpyI1iD7gsktGqHsO33AjnFDA== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/sample@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/sample/-/sample-7.3.4.tgz#b579fc601ffa5c35c2af406524bbc81aa3dcecaa" + integrity sha512-XzAATg09c2XYAXkIBbg8lktSrU1tXNjJYXtbVwF6jLp1q2wTRpwb+mZpTEPAwzZwVF81uR5c0CsdQyr5UHINVw== + dependencies: + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/sector@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/sector/-/sector-7.3.4.tgz#8acb168f15d6611594921680fde73f138e167f68" + integrity sha512-x2tNAXl21HRcF302ghU5ohE/vmmfDcXpQKgoWHyi7o5Q9kDRBwy7kbvr5YxbT3vwW/kAWUDYM7FoXNH42bXgCw== + dependencies: + "@turf/circle" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/line-arc" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/shortest-path@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/shortest-path/-/shortest-path-7.3.4.tgz#6412d17b04b6687b18ddcd94728db1ff1ac7d107" + integrity sha512-xbK/oM+JRL+lJCHkAdZ3QPgoivT40J9WKJ0d1Ddt8LXTpzX2YeJVgcwOZaBPG9ncZUzHfHIWS1rUjc54clnZcg== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/bbox-polygon" "7.3.4" + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/clean-coords" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/transform-scale" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/simplify@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/simplify/-/simplify-7.3.4.tgz#ff854ad444c7374c7ae2b14044bbdd9843ce5241" + integrity sha512-OoSwu3vI0H9P+GzLDaOJIL9v0V8ubeP8wQjM8GeMEZrq6U2uh9JWQnAU+jviT3ODcKF5H+88snpiMik585L0wA== + dependencies: + "@turf/clean-coords" "7.3.4" + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/square-grid@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/square-grid/-/square-grid-7.3.4.tgz#83e67822fc9c340eaebd073c1a42bd20a37fda27" + integrity sha512-MgjlVRklQYFfQm9yJNha9kXothLPliVdeycNdmn4lWLH3SOZe1rqJPB5Z9+dhmJELT3BJraDq3W5ik5taEpKyQ== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/rectangle-grid" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/square@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/square/-/square-7.3.4.tgz#d103eda381914301bbaf5c13214b095fb271977d" + integrity sha512-vJ+NeiEaOVsb8YiUExtyIgvH+ZybthHszl2TASZn5q340ioKHPb2JeHGlbgrB2x8pEMh3MVhoqxAbXDuND/cnw== + dependencies: + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/standard-deviational-ellipse@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-7.3.4.tgz#5aa17d052fe2eba64298d078d6b29c78ea492ab6" + integrity sha512-+BaetOKN8zA2mQCVTcRWMcfidNR3JkjmYj0r5iGRncK0J+pdxIjX2q6sF6yBMOOxMoEMy393P7j07HdBIPbibw== + dependencies: + "@turf/center-mean" "7.3.4" + "@turf/ellipse" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/points-within-polygon" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/tag@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/tag/-/tag-7.3.4.tgz#8ab39b6c01849d943a3d661893ed431e4c287362" + integrity sha512-ienLhLzBLeChtKhbJMmU3/vGg0hWzi6Wh/q0n39W4CmdNb+yAoGQhlYjcCbPOJT4IcdFlWE3OhbP9EmH/xPgfg== + dependencies: + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/tesselate@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/tesselate/-/tesselate-7.3.4.tgz#e1e80b38720b7ea6d94f1998cc0e91865f732b1a" + integrity sha512-NnDgVb5ZchJEhEpq1je2hktS5UhnHMfeeumxZQgnIoMeGILpJtcOL//b/1biBBUVSJ0ZZg5zxiHdQc1PgK2gxA== + dependencies: + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + earcut "^2.2.4" + tslib "^2.8.1" + +"@turf/tin@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/tin/-/tin-7.3.4.tgz#511681dd5b74f500867932ade329a10e6977a531" + integrity sha512-tuegrGlbKPp6Dm8r5SuYDtQ2EVzdXVVxelqI1agnzj9N+l8oTBIKLRxRbBkLsizeVIDnlmVHCQB6cRc3v+u8JQ== + dependencies: + "@turf/helpers" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/transform-rotate@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/transform-rotate/-/transform-rotate-7.3.4.tgz#f1cfb9fa4c90b3488c925ef57611754835c2229b" + integrity sha512-pbUG6QLwyJvvitq4aAq4IQH79X8T0NmEPUGDUEEP69yW7t4+UZjDBAVbCKwpOc8gtsK0K5yvxlZ0e2CdtpNmEw== + dependencies: + "@turf/centroid" "7.3.4" + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/rhumb-bearing" "7.3.4" + "@turf/rhumb-destination" "7.3.4" + "@turf/rhumb-distance" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/transform-scale@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/transform-scale/-/transform-scale-7.3.4.tgz#33039230cefca661376e3f2d7346dcbf535c7fc3" + integrity sha512-7gUIFFHaU3Ewj3rCzIu5Yo7Zjfv4R2ypjh6UWiMJnDavb7RQ8fn0AKKcNMA/vF/yxuncp2l3zoa2gygv4AKM8A== + dependencies: + "@turf/bbox" "7.3.4" + "@turf/center" "7.3.4" + "@turf/centroid" "7.3.4" + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/rhumb-bearing" "7.3.4" + "@turf/rhumb-destination" "7.3.4" + "@turf/rhumb-distance" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/transform-translate@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/transform-translate/-/transform-translate-7.3.4.tgz#96d1d91ab80d7a11c5afbf0d54aa55ca0dcfb103" + integrity sha512-qbSIEueOR8mNB7p4EB88vHvUAyuSBM8zxP68UiiTNV3Gh+OZF2VXTFiu3EFYMTaD9sE6Lxmzvv3fjW8N2q82pw== + dependencies: + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/rhumb-destination" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/triangle-grid@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/triangle-grid/-/triangle-grid-7.3.4.tgz#417f64dd8867e9e5d2d784722a0aad49c5ddb22c" + integrity sha512-0bki10XwYvNcPzDcSs5kUh3niOogdVeFtawJEz5FdlyTAUohbNlC+Vb40K//OqEyTrGII+q1/dE4q+1J6ZCmDA== + dependencies: + "@turf/distance" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/intersect" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/truncate@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/truncate/-/truncate-7.3.4.tgz#1ba37c8ce1a538310b4c99a39da2bef68f16c145" + integrity sha512-VPXdae9+RLLM19FMrJgt7QANBikm7DxPbfp/dXgzE4Ca7v+mJ4T1fYc7gCZDaqOrWMccHKbvv4iSuW7YZWdIIA== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + tslib "^2.8.1" + +"@turf/turf@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/turf/-/turf-7.3.4.tgz#930c771391a439750640c41596e56185f846bd0c" + integrity sha512-uMAKLYt2tWJj8xIepq4vExF1r8fzJviP/5l/elDHuRyauI2mASy/Gox6kSFlrN0t0p8AT4Cs8o//4GuJTXyC+Q== + dependencies: + "@turf/along" "7.3.4" + "@turf/angle" "7.3.4" + "@turf/area" "7.3.4" + "@turf/bbox" "7.3.4" + "@turf/bbox-clip" "7.3.4" + "@turf/bbox-polygon" "7.3.4" + "@turf/bearing" "7.3.4" + "@turf/bezier-spline" "7.3.4" + "@turf/boolean-clockwise" "7.3.4" + "@turf/boolean-concave" "7.3.4" + "@turf/boolean-contains" "7.3.4" + "@turf/boolean-crosses" "7.3.4" + "@turf/boolean-disjoint" "7.3.4" + "@turf/boolean-equal" "7.3.4" + "@turf/boolean-intersects" "7.3.4" + "@turf/boolean-overlap" "7.3.4" + "@turf/boolean-parallel" "7.3.4" + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/boolean-point-on-line" "7.3.4" + "@turf/boolean-touches" "7.3.4" + "@turf/boolean-valid" "7.3.4" + "@turf/boolean-within" "7.3.4" + "@turf/buffer" "7.3.4" + "@turf/center" "7.3.4" + "@turf/center-mean" "7.3.4" + "@turf/center-median" "7.3.4" + "@turf/center-of-mass" "7.3.4" + "@turf/centroid" "7.3.4" + "@turf/circle" "7.3.4" + "@turf/clean-coords" "7.3.4" + "@turf/clone" "7.3.4" + "@turf/clusters" "7.3.4" + "@turf/clusters-dbscan" "7.3.4" + "@turf/clusters-kmeans" "7.3.4" + "@turf/collect" "7.3.4" + "@turf/combine" "7.3.4" + "@turf/concave" "7.3.4" + "@turf/convex" "7.3.4" + "@turf/destination" "7.3.4" + "@turf/difference" "7.3.4" + "@turf/dissolve" "7.3.4" + "@turf/distance" "7.3.4" + "@turf/distance-weight" "7.3.4" + "@turf/ellipse" "7.3.4" + "@turf/envelope" "7.3.4" + "@turf/explode" "7.3.4" + "@turf/flatten" "7.3.4" + "@turf/flip" "7.3.4" + "@turf/geojson-rbush" "7.3.4" + "@turf/great-circle" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/hex-grid" "7.3.4" + "@turf/interpolate" "7.3.4" + "@turf/intersect" "7.3.4" + "@turf/invariant" "7.3.4" + "@turf/isobands" "7.3.4" + "@turf/isolines" "7.3.4" + "@turf/kinks" "7.3.4" + "@turf/length" "7.3.4" + "@turf/line-arc" "7.3.4" + "@turf/line-chunk" "7.3.4" + "@turf/line-intersect" "7.3.4" + "@turf/line-offset" "7.3.4" + "@turf/line-overlap" "7.3.4" + "@turf/line-segment" "7.3.4" + "@turf/line-slice" "7.3.4" + "@turf/line-slice-along" "7.3.4" + "@turf/line-split" "7.3.4" + "@turf/line-to-polygon" "7.3.4" + "@turf/mask" "7.3.4" + "@turf/meta" "7.3.4" + "@turf/midpoint" "7.3.4" + "@turf/moran-index" "7.3.4" + "@turf/nearest-neighbor-analysis" "7.3.4" + "@turf/nearest-point" "7.3.4" + "@turf/nearest-point-on-line" "7.3.4" + "@turf/nearest-point-to-line" "7.3.4" + "@turf/planepoint" "7.3.4" + "@turf/point-grid" "7.3.4" + "@turf/point-on-feature" "7.3.4" + "@turf/point-to-line-distance" "7.3.4" + "@turf/point-to-polygon-distance" "7.3.4" + "@turf/points-within-polygon" "7.3.4" + "@turf/polygon-smooth" "7.3.4" + "@turf/polygon-tangents" "7.3.4" + "@turf/polygon-to-line" "7.3.4" + "@turf/polygonize" "7.3.4" + "@turf/projection" "7.3.4" + "@turf/quadrat-analysis" "7.3.4" + "@turf/random" "7.3.4" + "@turf/rectangle-grid" "7.3.4" + "@turf/rewind" "7.3.4" + "@turf/rhumb-bearing" "7.3.4" + "@turf/rhumb-destination" "7.3.4" + "@turf/rhumb-distance" "7.3.4" + "@turf/sample" "7.3.4" + "@turf/sector" "7.3.4" + "@turf/shortest-path" "7.3.4" + "@turf/simplify" "7.3.4" + "@turf/square" "7.3.4" + "@turf/square-grid" "7.3.4" + "@turf/standard-deviational-ellipse" "7.3.4" + "@turf/tag" "7.3.4" + "@turf/tesselate" "7.3.4" + "@turf/tin" "7.3.4" + "@turf/transform-rotate" "7.3.4" + "@turf/transform-scale" "7.3.4" + "@turf/transform-translate" "7.3.4" + "@turf/triangle-grid" "7.3.4" + "@turf/truncate" "7.3.4" + "@turf/union" "7.3.4" + "@turf/unkink-polygon" "7.3.4" + "@turf/voronoi" "7.3.4" + "@types/geojson" "^7946.0.10" + "@types/kdbush" "^3.0.5" + tslib "^2.8.1" + +"@turf/union@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/union/-/union-7.3.4.tgz#c7f48399e6f3104cdb89b6d7b77a2b2f3a545f23" + integrity sha512-JJYyPMmGcrTa9sPv2ief2QU9Hb//cEAU1zgKu/OfoCMa9a8Imp5QVm9UTAkhGlc+4qm/N/X16iJ+cvVWaxPjkg== + dependencies: + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + polyclip-ts "^0.16.8" + tslib "^2.8.1" + +"@turf/unkink-polygon@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/unkink-polygon/-/unkink-polygon-7.3.4.tgz#5b0a6c2711377e7713572d98fce2608b9f77c8e7" + integrity sha512-dFIqTLAnLL5D3OANPJtRb5OvmOM81GlNCjwgjlLQy0xdpYgKwGdE+gNXjygDrPUUXNc22xnaj3EfAfC3Pq7W4Q== + dependencies: + "@turf/area" "7.3.4" + "@turf/boolean-point-in-polygon" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/meta" "7.3.4" + "@types/geojson" "^7946.0.10" + rbush "^3.0.1" + tslib "^2.8.1" + +"@turf/voronoi@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@turf/voronoi/-/voronoi-7.3.4.tgz#5b457f8fbfb7ffbae01f8a74f29c8c9be01ff1db" + integrity sha512-cwKSiDzDHRnA7yafQ1zOhWxRuMzp+fYFFzadCdByBAG1jAD7UlFwKhS1fjNPBNs67Fl5X3LL5ahCLW5gEdFgmg== + dependencies: + "@turf/clone" "7.3.4" + "@turf/helpers" "7.3.4" + "@turf/invariant" "7.3.4" + "@types/d3-voronoi" "^1.1.12" + "@types/geojson" "^7946.0.10" + d3-voronoi "1.1.2" + tslib "^2.8.1" + "@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -1167,21 +2719,43 @@ resolved "https://registry.yarnpkg.com/@types/crypto-js/-/crypto-js-4.2.2.tgz#771c4a768d94eb5922cc202a3009558204df0cea" integrity sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ== +"@types/d3-voronoi@^1.1.12": + version "1.1.12" + resolved "https://registry.yarnpkg.com/@types/d3-voronoi/-/d3-voronoi-1.1.12.tgz#99d1bbf5438ac222727493bef2283da62ffc0aa3" + integrity sha512-DauBl25PKZZ0WVJr42a6CNvI6efsdzofl9sajqZr2Gf5Gu733WkDdUGiPkUHXiUvYGzNNlFQde2wdZdfQPG+yw== + "@types/estree@1.0.8", "@types/estree@^1.0.6": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== -"@types/geojson@^7946.0.7", "@types/geojson@^7946.0.8": +"@types/geojson@*", "@types/geojson@^7946.0.10", "@types/geojson@^7946.0.14", "@types/geojson@^7946.0.16", "@types/geojson@^7946.0.7", "@types/geojson@^7946.0.8": version "7946.0.16" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.16.tgz#8ebe53d69efada7044454e3305c19017d97ced2a" integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg== +"@types/geokdbush@^1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@types/geokdbush/-/geokdbush-1.1.5.tgz#d71e881e1f595002541843cbd39bbebf2fc993c5" + integrity sha512-jIsYnXY+RQ/YCyBqeEHxYN9mh+7PqKJUJUp84wLfZ7T2kqyVPNaXwZuvf1A2uQUkrvVqEbsG94ff8jH32AlLvA== + dependencies: + "@types/kdbush" "^1" + "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/kdbush@^1": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/kdbush/-/kdbush-1.0.7.tgz#5401ece18756d915bc5cc989a35c9e628d0acf04" + integrity sha512-QM5iB8m/0mnGOjUKshErIZQ0LseyTieRSYc3yaOpmrRM0xbWiOuJUWlduJx+TPNK7/VFMWphUGwx3nus7eT1Wg== + +"@types/kdbush@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/kdbush/-/kdbush-3.0.5.tgz#7c308f18d364ac5623a15b85d7da0a635cf5516e" + integrity sha512-tdJz7jaWFu4nR+8b2B+CdPZ6811ighYylWsu2hpsivapzW058yP0KdfZuNY89IiRe5jbKvBGXN3LQdN2KPXVdQ== + "@types/node@*": version "25.2.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-25.2.0.tgz#015b7d228470c1dcbfc17fe9c63039d216b4d782" @@ -1218,6 +2792,13 @@ dependencies: csstype "^3.2.2" +"@types/supercluster@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/supercluster/-/supercluster-7.1.3.tgz#1a1bc2401b09174d9c9e44124931ec7874a72b27" + integrity sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA== + dependencies: + "@types/geojson" "*" + "@typescript-eslint/eslint-plugin@8.55.0": version "8.55.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.55.0.tgz#086d2ef661507b561f7b17f62d3179d692a0765f" @@ -1360,6 +2941,11 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +arc@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/arc/-/arc-0.2.0.tgz#afce1bffa736c857c3b00acd274040e5303e9339" + integrity sha512-8NFOo126uYKQJyXNSLY/jSklgfLQL+XWAcPXGo876JwEQ8nSOPXWNI3TV2jLZMN8QEw8uksJ1ZwS4npjBca8MA== + argparse@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1406,6 +2992,11 @@ baseline-browser-mapping@^2.9.0: resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz#3e508c43c46d961eb4d7d2e5b8d1dd0f9ee4f488" integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg== +bignumber.js@^9.1.0: + version "9.3.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" + integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== + brace-expansion@^1.1.7: version "1.1.12" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" @@ -1526,11 +3117,26 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@2: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concaveman@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/concaveman/-/concaveman-1.2.1.tgz#47d20b4521125c15fabf453653c2696d9ee41e0b" + integrity sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw== + dependencies: + point-in-polygon "^1.1.0" + rbush "^3.0.1" + robust-predicates "^2.0.4" + tinyqueue "^2.0.3" + convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -1575,6 +3181,23 @@ csstype@^3.2.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== +d3-array@1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + +d3-geo@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.7.1.tgz#44bbc7a218b1fd859f3d8fd7c443ca836569ce99" + integrity sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw== + dependencies: + d3-array "1" + +d3-voronoi@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c" + integrity sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw== + dayjs@^1.11.11: version "1.11.19" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.19.tgz#15dc98e854bb43917f12021806af897c58ae2938" @@ -1628,6 +3251,11 @@ earcut@^2.2.3, earcut@^2.2.4: resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== +earcut@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-3.0.2.tgz#d478a29aaf99acf418151493048aa197d0512248" + integrity sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ== + electron-to-chromium@^1.5.263: version "1.5.286" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz#142be1ab5e1cd5044954db0e5898f60a4960384e" @@ -1900,6 +3528,27 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +geojson-equality-ts@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/geojson-equality-ts/-/geojson-equality-ts-1.0.2.tgz#2aed0b9aca1fedb17212fecbfc42f73020410480" + integrity sha512-h3Ryq+0mCSN/7yLs0eDgrZhvc9af23o/QuC4aTiuuzP/MRCtd6mf5rLsLRY44jX0RPUfM8c4GqERQmlUxPGPoQ== + dependencies: + "@types/geojson" "^7946.0.14" + +geojson-polygon-self-intersections@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/geojson-polygon-self-intersections/-/geojson-polygon-self-intersections-1.2.2.tgz#22abfb6d267390450ec104d5941305e4ed604277" + integrity sha512-6XRNF4CsRHYmR9z5YuIk5f/aOototnDf0dgMqYGcS7y1l57ttt6MAIAxl3rXyas6lq1HEbTuLMh4PgvO+OV42w== + dependencies: + rbush "^2.0.1" + +geokdbush@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/geokdbush/-/geokdbush-2.0.1.tgz#85a4d65f89150f1ad5d8831e01c9b60f2f5a15a2" + integrity sha512-0M8so1Qx6+jJ1xpirpCNrgUsWAzIcQ3LrLmh0KJPBYI3gH7vy70nY5zEEjSp9Tn0nBt6Q2Fh922oL08lfib4Zg== + dependencies: + tinyqueue "^2.0.3" + geotiff@^2.0.7: version "2.1.3" resolved "https://registry.yarnpkg.com/geotiff/-/geotiff-2.1.3.tgz#993f40f2aa6aa65fb1e0451d86dd22ca8e66910c" @@ -1938,7 +3587,12 @@ get-proto@^1.0.1: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" -gl-matrix@^3.0.0, gl-matrix@^3.4.3: +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +gl-matrix@^3.0.0, gl-matrix@^3.4.3, gl-matrix@^3.4.4: version "3.4.4" resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.4.tgz#7789ee4982f62c7a7af447ee488f3bd6b0c77003" integrity sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ== @@ -2126,11 +3780,21 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stringify-pretty-compact@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz#cf4844770bddee3cb89a6170fe4b00eee5dbf1d4" + integrity sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q== + json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsts@2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/jsts/-/jsts-2.7.1.tgz#a921c0cc9eefeef588bd53e952e0a7782d812d52" + integrity sha512-x2wSZHEBK20CY+Wy+BPE7MrFQHW6sIsdaGUMEqmGAio+3gFzQaBYPwLRonUfQf9Ak8pBieqj9tUofX1+WtAEIg== + jszip@^3.1.5: version "3.10.1" resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" @@ -2141,6 +3805,11 @@ jszip@^3.1.5: readable-stream "~2.3.6" setimmediate "^1.0.5" +kdbush@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-4.0.2.tgz#2f7b7246328b4657dd122b6c7f025fbc2c868e39" + integrity sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA== + keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -2212,6 +3881,34 @@ lzo-wasm@^0.0.4: resolved "https://registry.yarnpkg.com/lzo-wasm/-/lzo-wasm-0.0.4.tgz#49152521a0b67a1da3a3e113dd38f150f303230a" integrity sha512-VKlnoJRFrB8SdJhlVKvW5vI1gGwcZ+mvChEXcSX6r2xDNc/Q2FD9esfBmGCuPZdrJ1feO+YcVFd2PTk0c137Gw== +maplibre-gl@^5.18.0: + version "5.18.0" + resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-5.18.0.tgz#0542080eb6e034f22f9750b8786d00b1642ea7e5" + integrity sha512-UtWxPBpHuFvEkM+5FVfcFG9ZKEWZQI6+PZkvLErr8Zs5ux+O7/KQ3JjSUvAfOlMeMgd/77qlHpOw0yHL7JU5cw== + dependencies: + "@mapbox/geojson-rewind" "^0.5.2" + "@mapbox/jsonlint-lines-primitives" "^2.0.2" + "@mapbox/point-geometry" "^1.1.0" + "@mapbox/tiny-sdf" "^2.0.7" + "@mapbox/unitbezier" "^0.0.1" + "@mapbox/vector-tile" "^2.0.4" + "@mapbox/whoots-js" "^3.1.0" + "@maplibre/geojson-vt" "^5.0.4" + "@maplibre/maplibre-gl-style-spec" "^24.4.1" + "@maplibre/mlt" "^1.1.6" + "@maplibre/vt-pbf" "^4.2.1" + "@types/geojson" "^7946.0.16" + "@types/supercluster" "^7.1.3" + earcut "^3.0.2" + gl-matrix "^3.4.4" + kdbush "^4.0.2" + murmurhash-js "^1.0.0" + pbf "^4.0.1" + potpack "^2.1.0" + quickselect "^3.0.0" + supercluster "^8.0.1" + tinyqueue "^3.0.0" + math-intrinsics@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" @@ -2252,6 +3949,11 @@ minimatch@^9.0.5: dependencies: brace-expansion "^2.0.1" +minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + mjolnir.js@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-3.0.0.tgz#2140362331c421501c43be2190479ea9cdbade4b" @@ -2262,6 +3964,11 @@ ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +murmurhash-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw== + nanoid@^3.3.11: version "3.3.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" @@ -2373,6 +4080,13 @@ pbf@^3.2.1: ieee754 "^1.1.12" resolve-protobuf-schema "^2.1.0" +pbf@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pbf/-/pbf-4.0.1.tgz#ad9015e022b235dcdbe05fc468a9acadf483f0d4" + integrity sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA== + dependencies: + resolve-protobuf-schema "^2.1.0" + picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" @@ -2383,6 +4097,26 @@ picomatch@^4.0.3: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== +point-in-polygon-hao@^1.1.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/point-in-polygon-hao/-/point-in-polygon-hao-1.2.4.tgz#8662abdcc84bcca230cc3ecbb0b0ab1a306f1bd6" + integrity sha512-x2pcvXeqhRHlNRdhLs/tgFapAbSSe86wa/eqmj1G6pWftbEs5aVRJhRGM6FYSUERKu0PjekJzMq0gsI2XyiclQ== + dependencies: + robust-predicates "^3.0.2" + +point-in-polygon@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/point-in-polygon/-/point-in-polygon-1.1.0.tgz#b0af2616c01bdee341cbf2894df643387ca03357" + integrity sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw== + +polyclip-ts@^0.16.8: + version "0.16.8" + resolved "https://registry.yarnpkg.com/polyclip-ts/-/polyclip-ts-0.16.8.tgz#503160d05e9d56380533aab0bc2dae835d6da5f9" + integrity sha512-JPtKbDRuPEuAjuTdhR62Gph7Is2BS1Szx69CFOO3g71lpJDFo78k4tFyi+qFOMVPePEzdSKkpGU3NBXPHHjvKQ== + dependencies: + bignumber.js "^9.1.0" + splaytree-ts "^1.0.2" + postcss@^8.5.6: version "8.5.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" @@ -2392,6 +4126,11 @@ postcss@^8.5.6: picocolors "^1.1.1" source-map-js "^1.2.1" +potpack@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/potpack/-/potpack-2.1.0.tgz#fe548e2f9061e9937f17191c1ab6dd98ca30e02f" + integrity sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -2422,11 +4161,28 @@ quick-lru@^6.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-6.1.2.tgz#e9a90524108629be35287d0b864e7ad6ceb3659e" integrity sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ== +quickselect@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-1.1.1.tgz#852e412ce418f237ad5b660d70cffac647ae94c2" + integrity sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ== + quickselect@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== +quickselect@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-3.0.0.tgz#a37fc953867d56f095a20ac71c6d27063d2de603" + integrity sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g== + +rbush@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/rbush/-/rbush-2.0.2.tgz#bb6005c2731b7ba1d5a9a035772927d16a614605" + integrity sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA== + dependencies: + quickselect "^1.0.1" + rbush@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/rbush/-/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf" @@ -2496,6 +4252,16 @@ resolve-protobuf-schema@^2.1.0: dependencies: protocol-buffers-schema "^3.3.1" +robust-predicates@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-2.0.4.tgz#0a2367a93abd99676d075981707f29cfb402248b" + integrity sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg== + +robust-predicates@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" + integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== + rollup@^4.43.0: version "4.57.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.57.1.tgz#947f70baca32db2b9c594267fe9150aa316e5a88" @@ -2530,6 +4296,11 @@ rollup@^4.43.0: "@rollup/rollup-win32-x64-msvc" "4.57.1" fsevents "~2.3.2" +rw@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -2578,6 +4349,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +skmeans@0.9.7: + version "0.9.7" + resolved "https://registry.yarnpkg.com/skmeans/-/skmeans-0.9.7.tgz#72670cebb728508f56e29c0e10d11e623529ce5d" + integrity sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg== + snappyjs@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/snappyjs/-/snappyjs-0.6.1.tgz#9bca9ff8c54b133a9cc84a71d22779e97fc51878" @@ -2588,6 +4364,11 @@ snappyjs@^0.6.1: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== +splaytree-ts@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/splaytree-ts/-/splaytree-ts-1.0.2.tgz#34963704587aff45eaa09c24713f552bbf56e8f0" + integrity sha512-0kGecIZNIReCSiznK3uheYB8sbstLjCZLiwcQwbmLhgHJj2gz6OnSPkVzJQCMnmEz1BQ4gPK59ylhBoEWOhGNA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -2610,6 +4391,13 @@ strnum@^1.1.1: resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== +supercluster@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-8.0.1.tgz#9946ba123538e9e9ab15de472531f604e7372df5" + integrity sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ== + dependencies: + kdbush "^4.0.2" + supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -2617,6 +4405,13 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +sweepline-intersections@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sweepline-intersections/-/sweepline-intersections-1.5.0.tgz#85ab3629a291875926fae0acd508496430d8a647" + integrity sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ== + dependencies: + tinyqueue "^2.0.0" + text-segmentation@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" @@ -2640,11 +4435,40 @@ tinyglobby@^0.2.15: fdir "^6.5.0" picomatch "^4.0.3" +tinyqueue@^2.0.0, tinyqueue@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" + integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== + +tinyqueue@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-3.0.0.tgz#101ea761ccc81f979e29200929e78f1556e3661e" + integrity sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g== + +topojson-client@3.x: + version "3.1.0" + resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" + integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== + dependencies: + commander "2" + +topojson-server@3.x: + version "3.0.1" + resolved "https://registry.yarnpkg.com/topojson-server/-/topojson-server-3.0.1.tgz#d2b3ec095b6732299be76a48406111b3201a34f5" + integrity sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw== + dependencies: + commander "2" + ts-api-utils@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8" integrity sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA== +tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"