diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5be76db..5e3650e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -46,7 +46,7 @@ importers: version: 5.2.2 vite: specifier: ^5.0.12 - version: 5.0.12(@types/node@18.17.12) + version: 5.0.12(@types/node@18.17.12)(less@4.2.0) src/client: dependencies: @@ -56,6 +56,12 @@ importers: '@ant-design/icons': specifier: ^5.2.6 version: 5.2.6(react-dom@18.2.0)(react@18.2.0) + '@antv/l7': + specifier: ^2.20.14 + version: 2.20.14 + '@antv/larkmap': + specifier: ^1.4.13 + version: 1.4.13(@antv/l7@2.20.14)(react-dom@18.2.0)(react@18.2.0) '@loadable/component': specifier: ^5.16.3 version: 5.16.3(react@18.2.0) @@ -180,6 +186,9 @@ importers: autoprefixer: specifier: ^10.4.16 version: 10.4.16(postcss@8.4.33) + less: + specifier: ^4.2.0 + version: 4.2.0 postcss: specifier: ^8.4.31 version: 8.4.33 @@ -188,10 +197,10 @@ importers: version: 3.3.5(ts-node@10.9.1) vite: specifier: ^5.0.12 - version: 5.0.12(@types/node@18.17.12) + version: 5.0.12(@types/node@18.17.12)(less@4.2.0) vitest: specifier: ^1.2.1 - version: 1.2.1(@types/node@18.17.12) + version: 1.2.1(@types/node@18.17.12)(less@4.2.0) src/server: dependencies: @@ -396,10 +405,10 @@ importers: version: 3.3.5(ts-node@10.9.1) vite: specifier: ^5.0.12 - version: 5.0.12(@types/node@18.17.12) + version: 5.0.12(@types/node@18.17.12)(less@4.2.0) vitest: specifier: ^1.2.1 - version: 1.2.1(@types/node@18.17.12) + version: 1.2.1(@types/node@18.17.12)(less@4.2.0) src/shared: dependencies: @@ -1188,6 +1197,23 @@ packages: supercluster: 7.1.5 dev: false + /@antv/l7-composite-layers@0.16.4(@antv/l7@2.20.14): + resolution: {integrity: sha512-LgFLPfcNHXmQHUXxRlVGQevSRXCNHXjS7h6rrCcXOKJNNvGOn5bilqKHFHqxoareAXy8WTg+gKKcxUdObNcZUg==} + peerDependencies: + '@antv/l7': ^2.11.5 + dependencies: + '@antv/event-emitter': 0.1.3 + '@antv/l7': 2.20.14 + '@antv/scale': 0.4.15 + '@antv/util': 2.0.17 + '@turf/bbox': 6.5.0 + '@turf/bbox-polygon': 6.5.0 + '@turf/transform-scale': 6.5.0 + kdbush: 3.0.0 + lodash-es: 4.17.21 + reselect: 4.1.8 + dev: false + /@antv/l7-core@2.20.14: resolution: {integrity: sha512-5hRFYjaCAWyFQIzPg3jeqACCk0ChhQ5HZt+TKazwQmvsG4jWjZ2iPqngcR1ugSe/iaJP1RZV2mjoZaEvH+6C4Q==} dependencies: @@ -1207,6 +1233,21 @@ packages: viewport-mercator-project: 6.2.3 dev: false + /@antv/l7-draw@3.1.1(@antv/l7@2.20.14): + resolution: {integrity: sha512-nqbuR+t1dwVkbRMvLBkbiuXoBq38/6S97QjWG2JLAtmg8RENYE5/pDiCO/wLTgi4g/4krkZ3THTtbEBMkG8T/Q==} + peerDependencies: + '@antv/l7': ^2.8.35 + dependencies: + '@antv/l7': 2.20.14 + '@turf/turf': 6.5.0 + eventemitter3: 4.0.7 + lodash: 4.17.21 + mousetrap: 1.6.5 + next-tick: 1.1.0 + react: 17.0.2 + tippy.js: 6.3.7 + dev: false + /@antv/l7-layers@2.20.14: resolution: {integrity: sha512-k5VrBN7kwZ178C2Tn645/0xeNcUOFyGs19AqHs+xZr+qA5E1MIXCRcIBPP79wqRpaTD0p0CAJsCvYOrppwVpnA==} dependencies: @@ -1366,6 +1407,27 @@ packages: topojson-client: 3.1.0 dev: false + /@antv/larkmap@1.4.13(@antv/l7@2.20.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-EzILTeBZRHB/rOgdfwIr/W9GRqmpSx5TTRYYD13UBVHd+9HXFse/P18LQ1XPURUHNcMClMIeEv5mC7ZiQeH/AQ==} + peerDependencies: + '@antv/l7': ^2.11.0 + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@antv/event-emitter': 0.1.3 + '@antv/l7': 2.20.14 + '@antv/l7-composite-layers': 0.16.4(@antv/l7@2.20.14) + '@antv/l7-draw': 3.1.1(@antv/l7@2.20.14) + ahooks: 3.7.9(react@18.2.0) + classnames: 2.5.1 + color: 4.2.3 + lodash-es: 4.17.21 + md5: 2.3.0 + rc-select: 14.11.0(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@antv/layout@0.1.31: resolution: {integrity: sha512-iz9i19dOJGiZr5xBWI5sfG+2K3QVMNAGOBrbjWKH2RGLvGpf2TSFySidhz0siDrcQA46cDsjLmGstezQdgeGzA==} dependencies: @@ -1429,6 +1491,14 @@ packages: tslib: 2.6.2 dev: false + /@antv/scale@0.4.15: + resolution: {integrity: sha512-b3b2U1L55fcJg0fB/BloVvcngPo/QxhosWgjn6JmYLVLezxDYMO+zdQou8hxpsLMUVhH15NqRDcM/1n4U6G04g==} + dependencies: + '@antv/util': 2.0.17 + color-string: 1.9.1 + fecha: 4.2.3 + dev: false + /@antv/util@2.0.17: resolution: {integrity: sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==} dependencies: @@ -6007,6 +6077,10 @@ packages: /@polka/url@1.0.0-next.24: resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} + /@popperjs/core@2.11.8: + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + dev: false + /@prisma/client@4.16.2(prisma@5.4.2): resolution: {integrity: sha512-qCoEyxv1ZrQ4bKy39GnylE8Zq31IRmm8bNhNbZx7bF2cU5aiCCnSa93J2imF88MBjn7J9eUQneNxUQVJdl/rPQ==} engines: {node: '>=14.17'} @@ -6874,6 +6948,39 @@ packages: /@tsconfig/node16@1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + /@turf/along@6.5.0: + resolution: {integrity: sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw==} + dependencies: + '@turf/bearing': 6.5.0 + '@turf/destination': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/angle@6.5.0: + resolution: {integrity: sha512-4pXMbWhFofJJAOvTMCns6N4C8CMd5Ih4O2jSAG9b3dDHakj3O4yN1+Zbm+NUei+eVEZ9gFeVp9svE3aMDenIkw==} + dependencies: + '@turf/bearing': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/rhumb-bearing': 6.5.0 + dev: false + + /@turf/area@6.5.0: + resolution: {integrity: sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/bbox-clip@6.5.0: + resolution: {integrity: sha512-F6PaIRF8WMp8EmgU/Ke5B1Y6/pia14UAYB5TiBC668w5rVVjy5L8rTm/m2lEkkDMHlzoP9vNY4pxpNthE7rLcQ==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + /@turf/bbox-polygon@6.5.0: resolution: {integrity: sha512-+/r0NyL1lOG3zKZmmf6L8ommU07HliP4dgYToMoTxqzsWzyLjaj/OzgQ8rBmv703WJX+aS6yCmLuIhYqyufyuw==} dependencies: @@ -6887,28 +6994,645 @@ packages: '@turf/meta': 6.5.0 dev: false + /@turf/bearing@6.5.0: + resolution: {integrity: sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/bezier-spline@6.5.0: + resolution: {integrity: sha512-vokPaurTd4PF96rRgGVm6zYYC5r1u98ZsG+wZEv9y3kJTuJRX/O3xIY2QnTGTdbVmAJN1ouOsD0RoZYaVoXORQ==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/boolean-clockwise@6.5.0: + resolution: {integrity: sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/boolean-contains@6.5.0: + resolution: {integrity: sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/boolean-point-on-line': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/boolean-crosses@6.5.0: + resolution: {integrity: sha512-gvshbTPhAHporTlQwBJqyfW+2yV8q/mOTxG6PzRVl6ARsqNoqYQWkd4MLug7OmAqVyBzLK3201uAeBjxbGw0Ng==} + dependencies: + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/line-intersect': 6.5.0 + '@turf/polygon-to-line': 6.5.0 + dev: false + + /@turf/boolean-disjoint@6.5.0: + resolution: {integrity: sha512-rZ2ozlrRLIAGo2bjQ/ZUu4oZ/+ZjGvLkN5CKXSKBcu6xFO6k2bgqeM8a1836tAW+Pqp/ZFsTA5fZHsJZvP2D5g==} + dependencies: + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/line-intersect': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/polygon-to-line': 6.5.0 + dev: false + + /@turf/boolean-equal@6.5.0: + resolution: {integrity: sha512-cY0M3yoLC26mhAnjv1gyYNQjn7wxIXmL2hBmI/qs8g5uKuC2hRWi13ydufE3k4x0aNRjFGlg41fjoYLwaVF+9Q==} + dependencies: + '@turf/clean-coords': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + geojson-equality: 0.1.6 + dev: false + + /@turf/boolean-intersects@6.5.0: + resolution: {integrity: sha512-nIxkizjRdjKCYFQMnml6cjPsDOBCThrt+nkqtSEcxkKMhAQj5OO7o2CecioNTaX8EayqwMGVKcsz27oP4mKPTw==} + dependencies: + '@turf/boolean-disjoint': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/boolean-overlap@6.5.0: + resolution: {integrity: sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/line-intersect': 6.5.0 + '@turf/line-overlap': 6.5.0 + '@turf/meta': 6.5.0 + geojson-equality: 0.1.6 + dev: false + + /@turf/boolean-parallel@6.5.0: + resolution: {integrity: sha512-aSHJsr1nq9e5TthZGZ9CZYeXklJyRgR5kCLm5X4urz7+MotMOp/LsGOsvKvK9NeUl9+8OUmfMn8EFTT8LkcvIQ==} + dependencies: + '@turf/clean-coords': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/line-segment': 6.5.0 + '@turf/rhumb-bearing': 6.5.0 + dev: false + + /@turf/boolean-point-in-polygon@6.5.0: + resolution: {integrity: sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/boolean-point-on-line@6.5.0: + resolution: {integrity: sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/boolean-within@6.5.0: + resolution: {integrity: sha512-YQB3oU18Inx35C/LU930D36RAVe7LDXk1kWsQ8mLmuqYn9YdPsDQTMTkLJMhoQ8EbN7QTdy333xRQ4MYgToteQ==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/boolean-point-on-line': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/buffer@6.5.0: + resolution: {integrity: sha512-qeX4N6+PPWbKqp1AVkBVWFerGjMYMUyencwfnkCesoznU6qvfugFHNAngNqIBVnJjZ5n8IFyOf+akcxnrt9sNg==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/center': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/projection': 6.5.0 + d3-geo: 1.7.1 + turf-jsts: 1.2.3 + dev: false + + /@turf/center-mean@6.5.0: + resolution: {integrity: sha512-AAX6f4bVn12pTVrMUiB9KrnV94BgeBKpyg3YpfnEbBpkN/znfVhL8dG8IxMAxAoSZ61Zt9WLY34HfENveuOZ7Q==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/center-median@6.5.0: + resolution: {integrity: sha512-dT8Ndu5CiZkPrj15PBvslpuf01ky41DEYEPxS01LOxp5HOUHXp1oJxsPxvc+i/wK4BwccPNzU1vzJ0S4emd1KQ==} + dependencies: + '@turf/center-mean': 6.5.0 + '@turf/centroid': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/center-of-mass@6.5.0: + resolution: {integrity: sha512-EWrriU6LraOfPN7m1jZi+1NLTKNkuIsGLZc2+Y8zbGruvUW+QV7K0nhf7iZWutlxHXTBqEXHbKue/o79IumAsQ==} + dependencies: + '@turf/centroid': 6.5.0 + '@turf/convex': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/center@6.5.0: + resolution: {integrity: sha512-T8KtMTfSATWcAX088rEDKjyvQCBkUsLnK/Txb6/8WUXIeOZyHu42G7MkdkHRoHtwieLdduDdmPLFyTdG5/e7ZQ==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/helpers': 6.5.0 + dev: false + + /@turf/centroid@6.5.0: + resolution: {integrity: sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/circle@6.5.0: + resolution: {integrity: sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A==} + dependencies: + '@turf/destination': 6.5.0 + '@turf/helpers': 6.5.0 + dev: false + + /@turf/clean-coords@6.5.0: + resolution: {integrity: sha512-EMX7gyZz0WTH/ET7xV8MyrExywfm9qUi0/MY89yNffzGIEHuFfqwhcCqZ8O00rZIPZHUTxpmsxQSTfzJJA1CPw==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + /@turf/clone@6.5.0: resolution: {integrity: sha512-mzVtTFj/QycXOn6ig+annKrM6ZlimreKYz6f/GSERytOpgzodbQyOgkfwru100O1KQhhjSudKK4DsQ0oyi9cTw==} dependencies: '@turf/helpers': 6.5.0 dev: false + /@turf/clusters-dbscan@6.5.0: + resolution: {integrity: sha512-SxZEE4kADU9DqLRiT53QZBBhu8EP9skviSyl+FGj08Y01xfICM/RR9ACUdM0aEQimhpu+ZpRVcUK+2jtiCGrYQ==} + dependencies: + '@turf/clone': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + density-clustering: 1.3.0 + dev: false + + /@turf/clusters-kmeans@6.5.0: + resolution: {integrity: sha512-DwacD5+YO8kwDPKaXwT9DV46tMBVNsbi1IzdajZu1JDSWoN7yc7N9Qt88oi+p30583O0UPVkAK+A10WAQv4mUw==} + dependencies: + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + skmeans: 0.9.7 + dev: false + + /@turf/clusters@6.5.0: + resolution: {integrity: sha512-Y6gfnTJzQ1hdLfCsyd5zApNbfLIxYEpmDibHUqR5z03Lpe02pa78JtgrgUNt1seeO/aJ4TG1NLN8V5gOrHk04g==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/collect@6.5.0: + resolution: {integrity: sha512-4dN/T6LNnRg099m97BJeOcTA5fSI8cu87Ydgfibewd2KQwBexO69AnjEFqfPX3Wj+Zvisj1uAVIZbPmSSrZkjg==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/helpers': 6.5.0 + rbush: 2.0.2 + dev: false + + /@turf/combine@6.5.0: + resolution: {integrity: sha512-Q8EIC4OtAcHiJB3C4R+FpB4LANiT90t17uOd851qkM2/o6m39bfN5Mv0PWqMZIHWrrosZqRqoY9dJnzz/rJxYQ==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/concave@6.5.0: + resolution: {integrity: sha512-I/sUmUC8TC5h/E2vPwxVht+nRt+TnXIPRoztDFvS8/Y0+cBDple9inLSo9nnPXMXidrBlGXZ9vQx/BjZUJgsRQ==} + dependencies: + '@turf/clone': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/tin': 6.5.0 + topojson-client: 3.1.0 + topojson-server: 3.0.1 + dev: false + + /@turf/convex@6.5.0: + resolution: {integrity: sha512-x7ZwC5z7PJB0SBwNh7JCeCNx7Iu+QSrH7fYgK0RhhNop13TqUlvHMirMLRgf2db1DqUetrAO2qHJeIuasquUWg==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + concaveman: 1.2.1 + dev: false + + /@turf/destination@6.5.0: + resolution: {integrity: sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/difference@6.5.0: + resolution: {integrity: sha512-l8iR5uJqvI+5Fs6leNbhPY5t/a3vipUF/3AeVLpwPQcgmedNXyheYuy07PcMGH5Jdpi5gItOiTqwiU/bUH4b3A==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + polygon-clipping: 0.15.7 + dev: false + + /@turf/dissolve@6.5.0: + resolution: {integrity: sha512-WBVbpm9zLTp0Bl9CE35NomTaOL1c4TQCtEoO43YaAhNEWJOOIhZMFJyr8mbvYruKl817KinT3x7aYjjCMjTAsQ==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + polygon-clipping: 0.15.7 + dev: false + + /@turf/distance-weight@6.5.0: + resolution: {integrity: sha512-a8qBKkgVNvPKBfZfEJZnC3DV7dfIsC3UIdpRci/iap/wZLH41EmS90nM+BokAJflUHYy8PqE44wySGWHN1FXrQ==} + dependencies: + '@turf/centroid': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/distance@6.5.0: + resolution: {integrity: sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/ellipse@6.5.0: + resolution: {integrity: sha512-kuXtwFviw/JqnyJXF1mrR/cb496zDTSbGKtSiolWMNImYzGGkbsAsFTjwJYgD7+4FixHjp0uQPzo70KDf3AIBw==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/rhumb-destination': 6.5.0 + '@turf/transform-rotate': 6.5.0 + dev: false + + /@turf/envelope@6.5.0: + resolution: {integrity: sha512-9Z+FnBWvOGOU4X+fMZxYFs1HjFlkKqsddLuMknRaqcJd6t+NIv5DWvPtDL8ATD2GEExYDiFLwMdckfr1yqJgHA==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/bbox-polygon': 6.5.0 + '@turf/helpers': 6.5.0 + dev: false + + /@turf/explode@6.5.0: + resolution: {integrity: sha512-6cSvMrnHm2qAsace6pw9cDmK2buAlw8+tjeJVXMfMyY+w7ZUi1rprWMsY92J7s2Dar63Bv09n56/1V7+tcj52Q==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/flatten@6.5.0: + resolution: {integrity: sha512-IBZVwoNLVNT6U/bcUUllubgElzpMsNoCw8tLqBw6dfYg9ObGmpEjf9BIYLr7a2Yn5ZR4l7YIj2T7kD5uJjZADQ==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/flip@6.5.0: + resolution: {integrity: sha512-oyikJFNjt2LmIXQqgOGLvt70RgE2lyzPMloYWM7OR5oIFGRiBvqVD2hA6MNw6JewIm30fWZ8DQJw1NHXJTJPbg==} + dependencies: + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/great-circle@6.5.0: + resolution: {integrity: sha512-7ovyi3HaKOXdFyN7yy1yOMa8IyOvV46RC1QOQTT+RYUN8ke10eyqExwBpL9RFUPvlpoTzoYbM/+lWPogQlFncg==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + /@turf/helpers@6.5.0: resolution: {integrity: sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==} dev: false + /@turf/hex-grid@6.5.0: + resolution: {integrity: sha512-Ln3tc2tgZT8etDOldgc6e741Smg1CsMKAz1/Mlel+MEL5Ynv2mhx3m0q4J9IB1F3a4MNjDeVvm8drAaf9SF33g==} + dependencies: + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/intersect': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/interpolate@6.5.0: + resolution: {integrity: sha512-LSH5fMeiGyuDZ4WrDJNgh81d2DnNDUVJtuFryJFup8PV8jbs46lQGfI3r1DJ2p1IlEJIz3pmAZYeTfMMoeeohw==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/centroid': 6.5.0 + '@turf/clone': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/hex-grid': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/point-grid': 6.5.0 + '@turf/square-grid': 6.5.0 + '@turf/triangle-grid': 6.5.0 + dev: false + + /@turf/intersect@6.5.0: + resolution: {integrity: sha512-2legGJeKrfFkzntcd4GouPugoqPUjexPZnOvfez+3SfIMrHvulw8qV8u7pfVyn2Yqs53yoVCEjS5sEpvQ5YRQg==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + polygon-clipping: 0.15.7 + dev: false + /@turf/invariant@6.5.0: resolution: {integrity: sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==} dependencies: '@turf/helpers': 6.5.0 dev: false + /@turf/isobands@6.5.0: + resolution: {integrity: sha512-4h6sjBPhRwMVuFaVBv70YB7eGz+iw0bhPRnp+8JBdX1UPJSXhoi/ZF2rACemRUr0HkdVB/a1r9gC32vn5IAEkw==} + dependencies: + '@turf/area': 6.5.0 + '@turf/bbox': 6.5.0 + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/explode': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + object-assign: 4.1.1 + dev: false + + /@turf/isolines@6.5.0: + resolution: {integrity: sha512-6ElhiLCopxWlv4tPoxiCzASWt/jMRvmp6mRYrpzOm3EUl75OhHKa/Pu6Y9nWtCMmVC/RcWtiiweUocbPLZLm0A==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + object-assign: 4.1.1 + dev: false + + /@turf/kinks@6.5.0: + resolution: {integrity: sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ==} + dependencies: + '@turf/helpers': 6.5.0 + dev: false + + /@turf/length@6.5.0: + resolution: {integrity: sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig==} + dependencies: + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/line-arc@6.5.0: + resolution: {integrity: sha512-I6c+V6mIyEwbtg9P9zSFF89T7QPe1DPTG3MJJ6Cm1MrAY0MdejwQKOpsvNl8LDU2ekHOlz2kHpPVR7VJsoMllA==} + dependencies: + '@turf/circle': 6.5.0 + '@turf/destination': 6.5.0 + '@turf/helpers': 6.5.0 + dev: false + + /@turf/line-chunk@6.5.0: + resolution: {integrity: sha512-i1FGE6YJaaYa+IJesTfyRRQZP31QouS+wh/pa6O3CC0q4T7LtHigyBSYjrbjSLfn2EVPYGlPCMFEqNWCOkC6zg==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/length': 6.5.0 + '@turf/line-slice-along': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/line-intersect@6.5.0: + resolution: {integrity: sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/line-segment': 6.5.0 + '@turf/meta': 6.5.0 + geojson-rbush: 3.2.0 + dev: false + + /@turf/line-offset@6.5.0: + resolution: {integrity: sha512-CEXZbKgyz8r72qRvPchK0dxqsq8IQBdH275FE6o4MrBkzMcoZsfSjghtXzKaz9vvro+HfIXal0sTk2mqV1lQTw==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/line-overlap@6.5.0: + resolution: {integrity: sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ==} + dependencies: + '@turf/boolean-point-on-line': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/line-segment': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/nearest-point-on-line': 6.5.0 + deep-equal: 1.1.2 + geojson-rbush: 3.2.0 + dev: false + + /@turf/line-segment@6.5.0: + resolution: {integrity: sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/line-slice-along@6.5.0: + resolution: {integrity: sha512-KHJRU6KpHrAj+BTgTNqby6VCTnDzG6a1sJx/I3hNvqMBLvWVA2IrkR9L9DtsQsVY63IBwVdQDqiwCuZLDQh4Ng==} + dependencies: + '@turf/bearing': 6.5.0 + '@turf/destination': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + dev: false + + /@turf/line-slice@6.5.0: + resolution: {integrity: sha512-vDqJxve9tBHhOaVVFXqVjF5qDzGtKWviyjbyi2QnSnxyFAmLlLnBfMX8TLQCAf2GxHibB95RO5FBE6I2KVPRuw==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/nearest-point-on-line': 6.5.0 + dev: false + + /@turf/line-split@6.5.0: + resolution: {integrity: sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/line-intersect': 6.5.0 + '@turf/line-segment': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/nearest-point-on-line': 6.5.0 + '@turf/square': 6.5.0 + '@turf/truncate': 6.5.0 + geojson-rbush: 3.2.0 + dev: false + + /@turf/line-to-polygon@6.5.0: + resolution: {integrity: sha512-qYBuRCJJL8Gx27OwCD1TMijM/9XjRgXH/m/TyuND4OXedBpIWlK5VbTIO2gJ8OCfznBBddpjiObLBrkuxTpN4Q==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/mask@6.5.0: + resolution: {integrity: sha512-RQha4aU8LpBrmrkH8CPaaoAfk0Egj5OuXtv6HuCQnHeGNOQt3TQVibTA3Sh4iduq4EPxnZfDjgsOeKtrCA19lg==} + dependencies: + '@turf/helpers': 6.5.0 + polygon-clipping: 0.15.7 + dev: false + /@turf/meta@6.5.0: resolution: {integrity: sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==} dependencies: '@turf/helpers': 6.5.0 dev: false + /@turf/midpoint@6.5.0: + resolution: {integrity: sha512-MyTzV44IwmVI6ec9fB2OgZ53JGNlgOpaYl9ArKoF49rXpL84F9rNATndbe0+MQIhdkw8IlzA6xVP4lZzfMNVCw==} + dependencies: + '@turf/bearing': 6.5.0 + '@turf/destination': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + dev: false + + /@turf/moran-index@6.5.0: + resolution: {integrity: sha512-ItsnhrU2XYtTtTudrM8so4afBCYWNaB0Mfy28NZwLjB5jWuAsvyV+YW+J88+neK/ougKMTawkmjQqodNJaBeLQ==} + dependencies: + '@turf/distance-weight': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/nearest-point-on-line@6.5.0: + resolution: {integrity: sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==} + dependencies: + '@turf/bearing': 6.5.0 + '@turf/destination': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/line-intersect': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/nearest-point-to-line@6.5.0: + resolution: {integrity: sha512-PXV7cN0BVzUZdjj6oeb/ESnzXSfWmEMrsfZSDRgqyZ9ytdiIj/eRsnOXLR13LkTdXVOJYDBuf7xt1mLhM4p6+Q==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/point-to-line-distance': 6.5.0 + object-assign: 4.1.1 + dev: false + + /@turf/nearest-point@6.5.0: + resolution: {integrity: sha512-fguV09QxilZv/p94s8SMsXILIAMiaXI5PATq9d7YWijLxWUj6Q/r43kxyoi78Zmwwh1Zfqz9w+bCYUAxZ5+euA==} + dependencies: + '@turf/clone': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/planepoint@6.5.0: + resolution: {integrity: sha512-R3AahA6DUvtFbka1kcJHqZ7DMHmPXDEQpbU5WaglNn7NaCQg9HB0XM0ZfqWcd5u92YXV+Gg8QhC8x5XojfcM4Q==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/point-grid@6.5.0: + resolution: {integrity: sha512-Iq38lFokNNtQJnOj/RBKmyt6dlof0yhaHEDELaWHuECm1lIZLY3ZbVMwbs+nXkwTAHjKfS/OtMheUBkw+ee49w==} + dependencies: + '@turf/boolean-within': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/point-on-feature@6.5.0: + resolution: {integrity: sha512-bDpuIlvugJhfcF/0awAQ+QI6Om1Y1FFYE8Y/YdxGRongivix850dTeXCo0mDylFdWFPGDo7Mmh9Vo4VxNwW/TA==} + dependencies: + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/center': 6.5.0 + '@turf/explode': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/nearest-point': 6.5.0 + dev: false + + /@turf/point-to-line-distance@6.5.0: + resolution: {integrity: sha512-opHVQ4vjUhNBly1bob6RWy+F+hsZDH9SA0UW36pIRzfpu27qipU18xup0XXEePfY6+wvhF6yL/WgCO2IbrLqEA==} + dependencies: + '@turf/bearing': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/projection': 6.5.0 + '@turf/rhumb-bearing': 6.5.0 + '@turf/rhumb-distance': 6.5.0 + dev: false + + /@turf/points-within-polygon@6.5.0: + resolution: {integrity: sha512-YyuheKqjliDsBDt3Ho73QVZk1VXX1+zIA2gwWvuz8bR1HXOkcuwk/1J76HuFMOQI3WK78wyAi+xbkx268PkQzQ==} + dependencies: + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/polygon-smooth@6.5.0: + resolution: {integrity: sha512-LO/X/5hfh/Rk4EfkDBpLlVwt3i6IXdtQccDT9rMjXEP32tRgy0VMFmdkNaXoGlSSKf/1mGqLl4y4wHd86DqKbg==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/polygon-tangents@6.5.0: + resolution: {integrity: sha512-sB4/IUqJMYRQH9jVBwqS/XDitkEfbyqRy+EH/cMRJURTg78eHunvJ708x5r6umXsbiUyQU4eqgPzEylWEQiunw==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/boolean-within': 6.5.0 + '@turf/explode': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/nearest-point': 6.5.0 + dev: false + /@turf/polygon-to-line@6.5.0: resolution: {integrity: sha512-5p4n/ij97EIttAq+ewSnKt0ruvuM+LIDzuczSzuHTpq4oS7Oq8yqg5TQ4nzMVuK41r/tALCk7nAoBuw3Su4Gcw==} dependencies: @@ -6916,6 +7640,318 @@ packages: '@turf/invariant': 6.5.0 dev: false + /@turf/polygonize@6.5.0: + resolution: {integrity: sha512-a/3GzHRaCyzg7tVYHo43QUChCspa99oK4yPqooVIwTC61npFzdrmnywMv0S+WZjHZwK37BrFJGFrZGf6ocmY5w==} + dependencies: + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/envelope': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/projection@6.5.0: + resolution: {integrity: sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg==} + dependencies: + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/random@6.5.0: + resolution: {integrity: sha512-8Q25gQ/XbA7HJAe+eXp4UhcXM9aOOJFaxZ02+XSNwMvY8gtWSCBLVqRcW4OhqilgZ8PeuQDWgBxeo+BIqqFWFQ==} + dependencies: + '@turf/helpers': 6.5.0 + dev: false + + /@turf/rectangle-grid@6.5.0: + resolution: {integrity: sha512-yQZ/1vbW68O2KsSB3OZYK+72aWz/Adnf7m2CMKcC+aq6TwjxZjAvlbCOsNUnMAuldRUVN1ph6RXMG4e9KEvKvg==} + dependencies: + '@turf/boolean-intersects': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + dev: false + + /@turf/rewind@6.5.0: + resolution: {integrity: sha512-IoUAMcHWotBWYwSYuYypw/LlqZmO+wcBpn8ysrBNbazkFNkLf3btSDZMkKJO/bvOzl55imr/Xj4fi3DdsLsbzQ==} + dependencies: + '@turf/boolean-clockwise': 6.5.0 + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/rhumb-bearing@6.5.0: + resolution: {integrity: sha512-jMyqiMRK4hzREjQmnLXmkJ+VTNTx1ii8vuqRwJPcTlKbNWfjDz/5JqJlb5NaFDcdMpftWovkW5GevfnuzHnOYA==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/rhumb-destination@6.5.0: + resolution: {integrity: sha512-RHNP1Oy+7xTTdRrTt375jOZeHceFbjwohPHlr9Hf68VdHHPMAWgAKqiX2YgSWDcvECVmiGaBKWus1Df+N7eE4Q==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/rhumb-distance@6.5.0: + resolution: {integrity: sha512-oKp8KFE8E4huC2Z1a1KNcFwjVOqa99isxNOwfo4g3SUABQ6NezjKDDrnvC4yI5YZ3/huDjULLBvhed45xdCrzg==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/sample@6.5.0: + resolution: {integrity: sha512-kSdCwY7el15xQjnXYW520heKUrHwRvnzx8ka4eYxX9NFeOxaFITLW2G7UtXb6LJK8mmPXI8Aexv23F2ERqzGFg==} + dependencies: + '@turf/helpers': 6.5.0 + dev: false + + /@turf/sector@6.5.0: + resolution: {integrity: sha512-cYUOkgCTWqa23SOJBqxoFAc/yGCUsPRdn/ovbRTn1zNTm/Spmk6hVB84LCKOgHqvSF25i0d2kWqpZDzLDdAPbw==} + dependencies: + '@turf/circle': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/line-arc': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/shortest-path@6.5.0: + resolution: {integrity: sha512-4de5+G7+P4hgSoPwn+SO9QSi9HY5NEV/xRJ+cmoFVRwv2CDsuOPDheHKeuIAhKyeKDvPvPt04XYWbac4insJMg==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/bbox-polygon': 6.5.0 + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/clean-coords': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/transform-scale': 6.5.0 + dev: false + + /@turf/simplify@6.5.0: + resolution: {integrity: sha512-USas3QqffPHUY184dwQdP8qsvcVH/PWBYdXY5am7YTBACaQOMAlf6AKJs9FT8jiO6fQpxfgxuEtwmox+pBtlOg==} + dependencies: + '@turf/clean-coords': 6.5.0 + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/square-grid@6.5.0: + resolution: {integrity: sha512-mlR0ayUdA+L4c9h7p4k3pX6gPWHNGuZkt2c5II1TJRmhLkW2557d6b/Vjfd1z9OVaajb1HinIs1FMSAPXuuUrA==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/rectangle-grid': 6.5.0 + dev: false + + /@turf/square@6.5.0: + resolution: {integrity: sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ==} + dependencies: + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + dev: false + + /@turf/standard-deviational-ellipse@6.5.0: + resolution: {integrity: sha512-02CAlz8POvGPFK2BKK8uHGUk/LXb0MK459JVjKxLC2yJYieOBTqEbjP0qaWhiBhGzIxSMaqe8WxZ0KvqdnstHA==} + dependencies: + '@turf/center-mean': 6.5.0 + '@turf/ellipse': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/points-within-polygon': 6.5.0 + dev: false + + /@turf/tag@6.5.0: + resolution: {integrity: sha512-XwlBvrOV38CQsrNfrxvBaAPBQgXMljeU0DV8ExOyGM7/hvuGHJw3y8kKnQ4lmEQcmcrycjDQhP7JqoRv8vFssg==} + dependencies: + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/tesselate@6.5.0: + resolution: {integrity: sha512-M1HXuyZFCfEIIKkglh/r5L9H3c5QTEsnMBoZOFQiRnGPGmJWcaBissGb7mTFX2+DKE7FNWXh4TDnZlaLABB0dQ==} + dependencies: + '@turf/helpers': 6.5.0 + earcut: 2.2.4 + dev: false + + /@turf/tin@6.5.0: + resolution: {integrity: sha512-YLYikRzKisfwj7+F+Tmyy/LE3d2H7D4kajajIfc9mlik2+esG7IolsX/+oUz1biguDYsG0DUA8kVYXDkobukfg==} + dependencies: + '@turf/helpers': 6.5.0 + dev: false + + /@turf/transform-rotate@6.5.0: + resolution: {integrity: sha512-A2Ip1v4246ZmpssxpcL0hhiVBEf4L8lGnSPWTgSv5bWBEoya2fa/0SnFX9xJgP40rMP+ZzRaCN37vLHbv1Guag==} + dependencies: + '@turf/centroid': 6.5.0 + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/rhumb-bearing': 6.5.0 + '@turf/rhumb-destination': 6.5.0 + '@turf/rhumb-distance': 6.5.0 + dev: false + + /@turf/transform-scale@6.5.0: + resolution: {integrity: sha512-VsATGXC9rYM8qTjbQJ/P7BswKWXHdnSJ35JlV4OsZyHBMxJQHftvmZJsFbOqVtQnIQIzf2OAly6rfzVV9QLr7g==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/center': 6.5.0 + '@turf/centroid': 6.5.0 + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/rhumb-bearing': 6.5.0 + '@turf/rhumb-destination': 6.5.0 + '@turf/rhumb-distance': 6.5.0 + dev: false + + /@turf/transform-translate@6.5.0: + resolution: {integrity: sha512-NABLw5VdtJt/9vSstChp93pc6oel4qXEos56RBMsPlYB8hzNTEKYtC146XJvyF4twJeeYS8RVe1u7KhoFwEM5w==} + dependencies: + '@turf/clone': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/rhumb-destination': 6.5.0 + dev: false + + /@turf/triangle-grid@6.5.0: + resolution: {integrity: sha512-2jToUSAS1R1htq4TyLQYPTIsoy6wg3e3BQXjm2rANzw4wPQCXGOxrur1Fy9RtzwqwljlC7DF4tg0OnWr8RjmfA==} + dependencies: + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/intersect': 6.5.0 + dev: false + + /@turf/truncate@6.5.0: + resolution: {integrity: sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + dev: false + + /@turf/turf@6.5.0: + resolution: {integrity: sha512-ipMCPnhu59bh92MNt8+pr1VZQhHVuTMHklciQURo54heoxRzt1neNYZOBR6jdL+hNsbDGAECMuIpAutX+a3Y+w==} + dependencies: + '@turf/along': 6.5.0 + '@turf/angle': 6.5.0 + '@turf/area': 6.5.0 + '@turf/bbox': 6.5.0 + '@turf/bbox-clip': 6.5.0 + '@turf/bbox-polygon': 6.5.0 + '@turf/bearing': 6.5.0 + '@turf/bezier-spline': 6.5.0 + '@turf/boolean-clockwise': 6.5.0 + '@turf/boolean-contains': 6.5.0 + '@turf/boolean-crosses': 6.5.0 + '@turf/boolean-disjoint': 6.5.0 + '@turf/boolean-equal': 6.5.0 + '@turf/boolean-intersects': 6.5.0 + '@turf/boolean-overlap': 6.5.0 + '@turf/boolean-parallel': 6.5.0 + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/boolean-point-on-line': 6.5.0 + '@turf/boolean-within': 6.5.0 + '@turf/buffer': 6.5.0 + '@turf/center': 6.5.0 + '@turf/center-mean': 6.5.0 + '@turf/center-median': 6.5.0 + '@turf/center-of-mass': 6.5.0 + '@turf/centroid': 6.5.0 + '@turf/circle': 6.5.0 + '@turf/clean-coords': 6.5.0 + '@turf/clone': 6.5.0 + '@turf/clusters': 6.5.0 + '@turf/clusters-dbscan': 6.5.0 + '@turf/clusters-kmeans': 6.5.0 + '@turf/collect': 6.5.0 + '@turf/combine': 6.5.0 + '@turf/concave': 6.5.0 + '@turf/convex': 6.5.0 + '@turf/destination': 6.5.0 + '@turf/difference': 6.5.0 + '@turf/dissolve': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/distance-weight': 6.5.0 + '@turf/ellipse': 6.5.0 + '@turf/envelope': 6.5.0 + '@turf/explode': 6.5.0 + '@turf/flatten': 6.5.0 + '@turf/flip': 6.5.0 + '@turf/great-circle': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/hex-grid': 6.5.0 + '@turf/interpolate': 6.5.0 + '@turf/intersect': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/isobands': 6.5.0 + '@turf/isolines': 6.5.0 + '@turf/kinks': 6.5.0 + '@turf/length': 6.5.0 + '@turf/line-arc': 6.5.0 + '@turf/line-chunk': 6.5.0 + '@turf/line-intersect': 6.5.0 + '@turf/line-offset': 6.5.0 + '@turf/line-overlap': 6.5.0 + '@turf/line-segment': 6.5.0 + '@turf/line-slice': 6.5.0 + '@turf/line-slice-along': 6.5.0 + '@turf/line-split': 6.5.0 + '@turf/line-to-polygon': 6.5.0 + '@turf/mask': 6.5.0 + '@turf/meta': 6.5.0 + '@turf/midpoint': 6.5.0 + '@turf/moran-index': 6.5.0 + '@turf/nearest-point': 6.5.0 + '@turf/nearest-point-on-line': 6.5.0 + '@turf/nearest-point-to-line': 6.5.0 + '@turf/planepoint': 6.5.0 + '@turf/point-grid': 6.5.0 + '@turf/point-on-feature': 6.5.0 + '@turf/point-to-line-distance': 6.5.0 + '@turf/points-within-polygon': 6.5.0 + '@turf/polygon-smooth': 6.5.0 + '@turf/polygon-tangents': 6.5.0 + '@turf/polygon-to-line': 6.5.0 + '@turf/polygonize': 6.5.0 + '@turf/projection': 6.5.0 + '@turf/random': 6.5.0 + '@turf/rewind': 6.5.0 + '@turf/rhumb-bearing': 6.5.0 + '@turf/rhumb-destination': 6.5.0 + '@turf/rhumb-distance': 6.5.0 + '@turf/sample': 6.5.0 + '@turf/sector': 6.5.0 + '@turf/shortest-path': 6.5.0 + '@turf/simplify': 6.5.0 + '@turf/square': 6.5.0 + '@turf/square-grid': 6.5.0 + '@turf/standard-deviational-ellipse': 6.5.0 + '@turf/tag': 6.5.0 + '@turf/tesselate': 6.5.0 + '@turf/tin': 6.5.0 + '@turf/transform-rotate': 6.5.0 + '@turf/transform-scale': 6.5.0 + '@turf/transform-translate': 6.5.0 + '@turf/triangle-grid': 6.5.0 + '@turf/truncate': 6.5.0 + '@turf/union': 6.5.0 + '@turf/unkink-polygon': 6.5.0 + '@turf/voronoi': 6.5.0 + dev: false + /@turf/union@6.5.0: resolution: {integrity: sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw==} dependencies: @@ -6924,6 +7960,24 @@ packages: polygon-clipping: 0.15.7 dev: false + /@turf/unkink-polygon@6.5.0: + resolution: {integrity: sha512-8QswkzC0UqKmN1DT6HpA9upfa1HdAA5n6bbuzHy8NJOX8oVizVAqfEPY0wqqTgboDjmBR4yyImsdPGUl3gZ8JQ==} + dependencies: + '@turf/area': 6.5.0 + '@turf/boolean-point-in-polygon': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + rbush: 2.0.2 + dev: false + + /@turf/voronoi@6.5.0: + resolution: {integrity: sha512-C/xUsywYX+7h1UyNqnydHXiun4UPjK88VDghtoRypR9cLlb7qozkiLRphQxxsCM0KxyxpVPHBVQXdAL3+Yurow==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + d3-voronoi: 1.1.2 + dev: false + /@types/acorn@4.0.6: resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} dependencies: @@ -7056,6 +8110,10 @@ packages: resolution: {integrity: sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==} dev: false + /@types/geojson@7946.0.8: + resolution: {integrity: sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==} + dev: false + /@types/hast@2.3.9: resolution: {integrity: sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw==} dependencies: @@ -7448,7 +8506,7 @@ packages: '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.23.7) '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.23.7) react-refresh: 0.14.0 - vite: 5.0.12(@types/node@18.17.12) + vite: 5.0.12(@types/node@18.17.12)(less@4.2.0) transitivePeerDependencies: - supports-color dev: true @@ -7677,6 +8735,23 @@ packages: clean-stack: 2.2.0 indent-string: 4.0.0 + /ahooks@3.7.9(react@18.2.0): + resolution: {integrity: sha512-1nuCnaBe/DvZD2QAZVGLLmu0vDi6jxbiAP3Ghkj6Ocqk9YSXI6ydwo2x5I3lXowZyM8MNJDnHFvIo0vJS1CuFw==} + engines: {node: '>=8.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.23.8 + dayjs: 1.11.10 + intersection-observer: 0.12.2 + js-cookie: 2.2.1 + lodash-es: 4.17.21 + react: 18.2.0 + resize-observer-polyfill: 1.5.1 + screenfull: 5.2.0 + tslib: 2.6.2 + dev: false + /ajv-formats@2.1.1(ajv@8.12.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -8743,6 +9818,10 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true + /charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + dev: false + /charset@1.0.1: resolution: {integrity: sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==} engines: {node: '>=4.0.0'} @@ -9010,6 +10089,14 @@ packages: color-string: 1.9.1 dev: false + /color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: false + /colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} @@ -9141,6 +10228,15 @@ packages: typedarray: 0.0.6 dev: true + /concaveman@1.2.1: + resolution: {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 + dev: false + /concurrently@8.2.2: resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} engines: {node: ^14.13.0 || >=16.0.0} @@ -9375,6 +10471,12 @@ packages: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} dev: false + /copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + dependencies: + is-what: 3.14.1 + dev: true + /copy-text-to-clipboard@3.2.0: resolution: {integrity: sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==} engines: {node: '>=12'} @@ -9527,6 +10629,10 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + dev: false + /crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} dev: false @@ -9781,6 +10887,12 @@ packages: resolution: {integrity: sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==} dev: false + /d3-geo@1.7.1: + resolution: {integrity: sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==} + dependencies: + d3-array: 1.2.4 + dev: false + /d3-hexbin@0.2.2: resolution: {integrity: sha512-KS3fUT2ReD4RlGCjvCEm1RgMtp2NFZumdMu4DBzQK8AZv3fXRM6Xm8I4fSU07UXvH4xxg03NwWKWdvxfS/yc4w==} dev: false @@ -9835,6 +10947,10 @@ packages: resolution: {integrity: sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==} dev: false + /d3-voronoi@1.1.2: + resolution: {integrity: sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw==} + dev: false + /dagre-compound@0.0.11(dagre@0.8.5): resolution: {integrity: sha512-UrSgRP9LtOZCYb9e5doolZXpc7xayyszgyOs7uakTK4n4KsLegLVTRRtq01GpQd/iZjYw5fWMapx9ed+c80MAQ==} engines: {node: '>=6.0.0'} @@ -10049,6 +11165,10 @@ packages: engines: {node: '>=0.4.0'} dev: false + /density-clustering@1.3.0: + resolution: {integrity: sha512-icpmBubVTwLnsaor9qH/4tG5+7+f61VcqMN3V3pm9sxxSCt2Jcs0zWOgwZW9ARJYaKD3FumIgHiMOcIMRRAzFQ==} + dev: false + /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -10553,6 +11673,15 @@ packages: engines: {node: '>=6'} dev: true + /errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + requiresBuild: true + dependencies: + prr: 1.0.1 + dev: true + optional: true + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -11411,6 +12540,22 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + /geojson-equality@0.1.6: + resolution: {integrity: sha512-TqG8YbqizP3EfwP5Uw4aLu6pKkg6JQK9uq/XZ1lXQntvTHD1BBKJWhNpJ2M0ax6TuWMP3oyx6Oq7FCIfznrgpQ==} + dependencies: + deep-equal: 1.1.2 + dev: false + + /geojson-rbush@3.2.0: + resolution: {integrity: sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==} + dependencies: + '@turf/bbox': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + '@types/geojson': 7946.0.8 + rbush: 3.0.1 + dev: false + /geojson-vt@3.2.1: resolution: {integrity: sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==} dev: false @@ -12295,7 +13440,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - dev: false /icss-utils@5.1.0(postcss@8.4.33): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} @@ -12323,6 +13467,14 @@ packages: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} + /image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /image-size@1.1.1: resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} engines: {node: '>=16.x'} @@ -12437,6 +13589,10 @@ packages: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} + /intersection-observer@0.12.2: + resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} + dev: false + /invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: @@ -12815,6 +13971,10 @@ packages: dependencies: call-bind: 1.0.2 + /is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + dev: true + /is-whitespace-character@1.0.4: resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} dev: false @@ -13175,6 +14335,24 @@ packages: readable-stream: 2.3.8 dev: true + /less@4.2.0: + resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.6.2 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.3.1 + source-map: 0.6.1 + dev: true + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -13436,6 +14614,16 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + pify: 4.0.1 + semver: 5.7.2 + dev: true + optional: true + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -13545,6 +14733,14 @@ packages: tiny-lru: 11.2.5 dev: false + /md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + dev: false + /mdast-squeeze-paragraphs@4.0.0: resolution: {integrity: sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==} dependencies: @@ -14552,6 +15748,17 @@ packages: resolution: {integrity: sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==} dev: false + /needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + engines: {node: '>= 4.4.x'} + hasBin: true + requiresBuild: true + dependencies: + iconv-lite: 0.6.3 + sax: 1.3.0 + dev: true + optional: true + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -14575,6 +15782,10 @@ packages: type-fest: 2.19.0 dev: true + /next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + dev: false + /no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: @@ -15181,6 +16392,11 @@ packages: engines: {node: '>=18'} dev: false + /parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + dev: true + /parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} @@ -15381,6 +16597,12 @@ packages: engines: {node: '>=0.10.0'} dev: true + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + optional: true + /ping@0.4.4: resolution: {integrity: sha512-56ZMC0j7SCsMMLdOoUg12VZCfj/+ZO+yfOSjaNCRrmZZr6GLbN2X/Ui56T15dI8NhiHckaw5X2pvyfAomanwqQ==} engines: {node: '>=4.0.0'} @@ -15418,6 +16640,10 @@ packages: dependencies: find-up: 3.0.0 + /point-in-polygon@1.1.0: + resolution: {integrity: sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==} + dev: false + /polygon-clipping@0.15.7: resolution: {integrity: sha512-nhfdr83ECBg6xtqOAJab1tbksbBAOMUltN60bU+llHVOL0e5Onm1WpAXXWXVB39L8AJFssoIhEVuy/S90MmotA==} dependencies: @@ -16181,6 +17407,11 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + /prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: true + optional: true + /pstree.remy@1.1.8: resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} dev: true @@ -16296,6 +17527,10 @@ packages: engines: {node: '>=10'} dev: true + /quickselect@1.1.1: + resolution: {integrity: sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==} + dev: false + /quickselect@2.0.0: resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} dev: false @@ -16326,6 +17561,18 @@ packages: iconv-lite: 0.4.24 unpipe: 1.0.0 + /rbush@2.0.2: + resolution: {integrity: sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==} + dependencies: + quickselect: 1.1.1 + dev: false + + /rbush@3.0.1: + resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} + dependencies: + quickselect: 2.0.0 + dev: false + /rc-align@4.0.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==} peerDependencies: @@ -18431,6 +19678,10 @@ packages: dependencies: glob: 7.2.3 + /robust-predicates@2.0.4: + resolution: {integrity: sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==} + dev: false + /robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: false @@ -18906,6 +20157,10 @@ packages: unicode-emoji-modifier-base: 1.0.0 dev: true + /skmeans@0.9.7: + resolution: {integrity: sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg==} + dev: false + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -19788,6 +21043,12 @@ packages: engines: {node: '>=14.0.0'} dev: true + /tippy.js@6.3.7: + resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + dependencies: + '@popperjs/core': 2.11.8 + dev: false + /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} @@ -19837,6 +21098,13 @@ packages: commander: 2.20.3 dev: false + /topojson-server@3.0.1: + resolution: {integrity: sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==} + hasBin: true + dependencies: + commander: 2.20.3 + dev: false + /toposort@2.0.2: resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} dev: false @@ -19999,6 +21267,10 @@ packages: safe-buffer: 5.2.1 dev: false + /turf-jsts@1.2.3: + resolution: {integrity: sha512-Ja03QIJlPuHt4IQ2FfGex4F4JAr8m3jpaHbFbQrgwr7s7L6U8ocrHiF3J1+wf9jzhGKxvDeaCAnGDot8OjGFyA==} + dev: false + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -20696,7 +21968,7 @@ packages: picocolors: 1.0.0 dev: false - /vite-node@1.2.1(@types/node@18.17.12): + /vite-node@1.2.1(@types/node@18.17.12)(less@4.2.0): resolution: {integrity: sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -20705,7 +21977,7 @@ packages: debug: 4.3.4(supports-color@5.5.0) pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.0.12(@types/node@18.17.12) + vite: 5.0.12(@types/node@18.17.12)(less@4.2.0) transitivePeerDependencies: - '@types/node' - less @@ -20717,7 +21989,7 @@ packages: - terser dev: true - /vite@5.0.12(@types/node@18.17.12): + /vite@5.0.12(@types/node@18.17.12)(less@4.2.0): resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -20747,13 +22019,14 @@ packages: dependencies: '@types/node': 18.17.12 esbuild: 0.19.11 + less: 4.2.0 postcss: 8.4.33 rollup: 4.9.5 optionalDependencies: fsevents: 2.3.3 dev: true - /vitest@1.2.1(@types/node@18.17.12): + /vitest@1.2.1(@types/node@18.17.12)(less@4.2.0): resolution: {integrity: sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -20797,8 +22070,8 @@ packages: strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.8.1 - vite: 5.0.12(@types/node@18.17.12) - vite-node: 1.2.1(@types/node@18.17.12) + vite: 5.0.12(@types/node@18.17.12)(less@4.2.0) + vite-node: 1.2.1(@types/node@18.17.12)(less@4.2.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less diff --git a/src/client/components/website/WebsiteVisitorMap.tsx b/src/client/components/website/WebsiteVisitorMap.tsx new file mode 100644 index 0000000..e5f899f --- /dev/null +++ b/src/client/components/website/WebsiteVisitorMap.tsx @@ -0,0 +1,95 @@ +import type { LarkMapProps, PointLayerProps } from '@antv/larkmap'; +import { FullscreenControl, LarkMap, PointLayer } from '@antv/larkmap'; +import React from 'react'; +import { useSettingsStore } from '../../store/settings'; +import { useGlobalConfig } from '../../hooks/useConfig'; +import { trpc } from '../../api/trpc'; +import { useCurrentWorkspaceId } from '../../store/user'; +import { useGlobalRangeDate } from '../../hooks/useGlobalRangeDate'; + +const layerOptions: Omit = { + autoFit: true, + shape: 'circle', + size: 5, + blend: 'additive', + color: { + field: 'count', + value: [ + 'rgb(102,37,6)', + 'rgb(153,52,4)', + 'rgb(204,76,2)', + 'rgb(236,112,20)', + 'rgb(254,153,41)', + 'rgb(254,196,79)', + 'rgb(254,227,145)', + ], + }, +}; + +function useMapConfig(mapType: 'Mapbox' | 'Gaode' = 'Mapbox'): LarkMapProps { + const { amapToken, mapboxToken } = useGlobalConfig(); + const colorScheme = useSettingsStore((state) => state.colorScheme); + + const baseOption: LarkMapProps['mapOptions'] = { + center: [120.210792, 30.246026], + zoom: 0, + }; + + if (mapType === 'Gaode') { + return { + mapType: 'Gaode', + mapOptions: { + ...baseOption, + style: + colorScheme === 'light' + ? 'amap://styles/light' + : 'amap://styles/dark', + token: amapToken, + }, + logoVisible: false, + }; + } else { + return { + mapType: 'Mapbox', + mapOptions: { + ...baseOption, + style: colorScheme === 'light' ? 'light' : 'dark', + token: mapboxToken, + }, + logoVisible: false, + }; + } +} + +interface WebsiteVisitorMapProps { + websiteId: string; +} +export const WebsiteVisitorMap: React.FC = React.memo( + (props) => { + const config = useMapConfig(); + const workspaceId = useCurrentWorkspaceId(); + const { startDate, endDate } = useGlobalRangeDate(); + const startAt = startDate.valueOf(); + const endAt = endDate.valueOf(); + + const { data } = trpc.website.geoStats.useQuery({ + workspaceId, + websiteId: props.websiteId, + startAt, + endAt, + }); + + const source: PointLayerProps['source'] = { + data: data ?? [], + parser: { type: 'json', x: 'longitude', y: 'latitude' }, + }; + + return ( + + + + + ); + } +); +WebsiteVisitorMap.displayName = 'WebsiteVisitorMap'; diff --git a/src/client/package.json b/src/client/package.json index f2aa074..5b18f3d 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -14,6 +14,8 @@ "dependencies": { "@ant-design/charts": "^1.4.2", "@ant-design/icons": "^5.2.6", + "@antv/l7": "^2.20.14", + "@antv/larkmap": "^1.4.13", "@loadable/component": "^5.16.3", "@monaco-editor/react": "^4.6.0", "@tanstack/react-query": "4.33.0", @@ -57,6 +59,7 @@ "@types/uuid": "^9.0.7", "@vitejs/plugin-react": "^4.0.4", "autoprefixer": "^10.4.16", + "less": "^4.2.0", "postcss": "^8.4.31", "tailwindcss": "^3.3.5", "vite": "^5.0.12", diff --git a/src/client/pages/Website/Map.tsx b/src/client/pages/Website/Map.tsx new file mode 100644 index 0000000..003b9ab --- /dev/null +++ b/src/client/pages/Website/Map.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import { useParams } from 'react-router'; +import { trpc } from '../../api/trpc'; +import { ErrorTip } from '../../components/ErrorTip'; +import { Loading } from '../../components/Loading'; +import { NotFoundTip } from '../../components/NotFoundTip'; +import { useCurrentWorkspaceId } from '../../store/user'; +import { WebsiteVisitorMap } from '../../components/website/WebsiteVisitorMap'; +import { DateFilter } from '../../components/DateFilter'; + +export const WebsiteVisitorMapPage: React.FC = React.memo(() => { + const { websiteId } = useParams(); + const workspaceId = useCurrentWorkspaceId(); + const { data: website, isLoading } = trpc.website.info.useQuery({ + workspaceId, + websiteId: websiteId!, + }); + + if (!websiteId) { + return ; + } + + if (isLoading) { + return ; + } + + if (!website) { + return ; + } + + return ( +
+
+ +
+ +
+ ); +}); +WebsiteVisitorMapPage.displayName = 'WebsiteVisitorMapPage'; diff --git a/src/client/pages/Website/index.tsx b/src/client/pages/Website/index.tsx index a769dd5..ddc99c1 100644 --- a/src/client/pages/Website/index.tsx +++ b/src/client/pages/Website/index.tsx @@ -2,6 +2,7 @@ import React from 'react'; import { Route, Routes } from 'react-router'; import { WebsiteList } from '../../components/website/WebsiteList'; import { WebsiteDetail } from './Detail'; +import { WebsiteVisitorMapPage } from './Map'; export const WebsitePage: React.FC = React.memo(() => { return ( @@ -9,6 +10,7 @@ export const WebsitePage: React.FC = React.memo(() => { } /> } /> + } /> ); diff --git a/src/server/trpc/routers/global.ts b/src/server/trpc/routers/global.ts index 41a02a8..f12a409 100644 --- a/src/server/trpc/routers/global.ts +++ b/src/server/trpc/routers/global.ts @@ -17,12 +17,16 @@ export const globalRouter = router({ z.object({ allowRegister: z.boolean(), websiteId: z.string().optional(), + amapToken: z.string().optional(), + mapboxToken: z.string().optional(), }) ) .query(async ({ input }) => { return { allowRegister: checkEnvTrusty(process.env.ALLOW_REGISTER), websiteId: process.env.WEBSITE_ID, + amapToken: process.env.AMAP_TOKEN, + mapboxToken: process.env.MAPBOX_TOKEN, }; }), }); diff --git a/src/server/trpc/routers/website.ts b/src/server/trpc/routers/website.ts index 1590509..700d112 100644 --- a/src/server/trpc/routers/website.ts +++ b/src/server/trpc/routers/website.ts @@ -187,6 +187,58 @@ export const websiteRouter = router({ return websiteStatsSchema.parse(stats); }), + geoStats: workspaceProcedure + .meta( + buildWebsiteOpenapi({ + method: 'GET', + path: '/geoStats', + }) + ) + .input( + z.object({ + websiteId: z.string(), + startAt: z.number(), + endAt: z.number(), + }) + ) + .output( + z.array( + z.object({ + longitude: z.number(), + latitude: z.number(), + count: z.number(), + }) + ) + ) + .query(async ({ input }) => { + const { websiteId, startAt, endAt } = input; + + const res = await prisma.websiteSession.groupBy({ + by: ['longitude', 'latitude'], + where: { + websiteId, + longitude: { not: null }, + latitude: { not: null }, + createdAt: { + gt: new Date(startAt), + lte: new Date(endAt), + }, + }, + _count: { + _all: true, + }, + }); + + return res + .filter((item) => item.longitude !== null && item.latitude !== null) + .map((item) => { + return { + longitude: item.longitude!, + latitude: item.latitude!, + count: item._count._all, + }; + }); + }), metrics: workspaceProcedure .meta( buildWebsiteOpenapi({