From d00b48a197076342ae92d2525d3c94fdd179f448 Mon Sep 17 00:00:00 2001 From: Matteo Rosati Date: Sat, 24 Jan 2026 22:20:26 +0100 Subject: [PATCH] login page --- .gitignore | 2 + bun.lock | 185 ++++++++++++- login.html | 14 + package-lock.json | 654 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 9 +- server.ts | 34 +++ src/constants.ts | 2 - src/login.ts | 14 + src/main.ts | 85 ++++-- vite.config.ts | 39 ++- 10 files changed, 997 insertions(+), 41 deletions(-) create mode 100644 login.html create mode 100644 server.ts create mode 100644 src/login.ts diff --git a/.gitignore b/.gitignore index 9d33b47..2abaf89 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ node_modules/ dist/ + +.env diff --git a/bun.lock b/bun.lock index 347074c..9aa952a 100644 --- a/bun.lock +++ b/bun.lock @@ -6,16 +6,23 @@ "dependencies": { "@fontsource-variable/jetbrains-mono": "^5.2.8", "@maptiler/leaflet-maptilersdk": "^4.1.1", + "@turf/area": "^7.3.2", + "@turf/helpers": "^7.3.2", + "@types/bun": "^1.3.6", "@types/jquery": "^3.5.33", + "@types/turf": "^3.5.32", + "hono": "^4.11.5", "jquery": "^4.0.0", "lucide": "^0.563.0", "modern-normalize": "^3.0.1", "netlify-cli": "^23.13.5", + "turf": "^3.0.14", "vite": "^7.3.1", }, "devDependencies": { "@types/node": "^25.0.10", "typescript": "^5.9.3", + "vite-plugin-full-reload": "^1.2.0", }, }, }, @@ -470,6 +477,14 @@ "@tsconfig/node16": ["@tsconfig/node16@1.0.4", "", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="], + "@turf/area": ["@turf/area@7.3.2", "", { "dependencies": { "@turf/helpers": "7.3.2", "@turf/meta": "7.3.2", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-d7IuEjAO3TSX5aVeL5WXrtCZCwxUAUOD4+LZ+VjoEe2THmYKdUknCPbH6rdhMBzLyZNuSVRmpRD/QfpCnLqoZg=="], + + "@turf/helpers": ["@turf/helpers@7.3.2", "", { "dependencies": { "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-5HFN42rgWjSobdTMxbuq+ZdXPcqp1IbMgFYULTLCplEQM3dXhsyRFe7DCss4Eiw12iW3q6Z5UeTNVfITsE5lgA=="], + + "@turf/meta": ["@turf/meta@7.3.2", "", { "dependencies": { "@turf/helpers": "7.3.2", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-FIcIY+ZsAe9QV4fHciTXeuRz2TKIVaEjivkl4vMFCibdj7FUkWDofqOncbIre1xPrgktQeh20ZrmD+p0kf3n4Q=="], + + "@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="], + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], @@ -496,6 +511,8 @@ "@types/triple-beam": ["@types/triple-beam@1.3.5", "", {}, "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw=="], + "@types/turf": ["@types/turf@3.5.32", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-2Rtv0EIG7Tx1CC2ASzCPw63ugCwrqJCFqNL/Gk9QYE5iIyd+0/S/TlPTgQ+qeQC8NCEn/TncUeZp+aM9cg68rg=="], + "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.53.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.53.1", "@typescript-eslint/types": "^8.53.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog=="], @@ -558,6 +575,8 @@ "acorn-walk": ["acorn-walk@8.3.4", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="], + "affine-hull": ["affine-hull@1.0.0", "", { "dependencies": { "robust-orientation": "^1.1.3" } }, "sha512-3QNG6+vFAwJvSZHsJYDJ/mt1Cxx9n5ffA+1Ohmj7udw0JuRgUVIXK0P9N9pCMuEdS3jCNt8GFX5q2fChq+GO3Q=="], + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], @@ -622,6 +641,8 @@ "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], + "bit-twiddle": ["bit-twiddle@1.0.2", "", {}, "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA=="], + "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], "body-parser": ["body-parser@1.20.4", "", { "dependencies": { "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "~1.2.0", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", "qs": "~6.14.0", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" } }, "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA=="], @@ -642,6 +663,8 @@ "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], + "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], "byline": ["byline@5.0.0", "", {}, "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q=="], @@ -722,6 +745,8 @@ "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + "convex-hull": ["convex-hull@1.0.3", "", { "dependencies": { "affine-hull": "^1.0.0", "incremental-convex-hull": "^1.0.1", "monotone-convex-hull-2d": "^1.0.1" } }, "sha512-24rZAoh81t41GHPLAxcsokgjH9XNoVqU2OiSi8iMHUn6HUURfiefcEWAPt1AfwZjBBWTKadOm1xUcUMnfFukhQ=="], + "cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], "cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], @@ -826,7 +851,7 @@ "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - "earcut": ["earcut@3.0.2", "", {}, "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ=="], + "earcut": ["earcut@2.2.4", "", {}, "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="], "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], @@ -992,6 +1017,12 @@ "fuzzy": ["fuzzy@0.1.3", "", {}, "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w=="], + "geojson-area": ["geojson-area@0.2.1", "", { "dependencies": { "wgs84": "0.0.0" } }, "sha512-I+cht30/CFFObh8GgEa/1o9Kd7RwQTHmotYp3ToyCpxxDFNcuX5SlErKkvoy3otnrsWzODN8yscSTGOAkQ3tKQ=="], + + "geojson-normalize": ["geojson-normalize@0.0.0", "", {}, "sha512-h/ldgc7C2DrYDIn+F/o+AgZLxmeC+O4q3wvGwiuBjTTRnhxvxaGz6cE6cRTeMH89jIJM3BiP+R6Yiht7f3PBuA=="], + + "geojson-random": ["geojson-random@0.2.2", "", { "bin": { "geojson-random": "geojson-random" } }, "sha512-/vZQ14mjKPG3LJ7bpyXsJ0aoz8NzvwpwwP//uBgbzIu2BCFd4uRagp1QvY3RAzRQsHOHyVh33dbYUYws7vOCkg=="], + "geojson-vt": ["geojson-vt@4.0.2", "", {}, "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A=="], "get-amd-module-type": ["get-amd-module-type@6.0.1", "", { "dependencies": { "ast-module-types": "^6.0.1", "node-source-walk": "^7.0.1" } }, "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ=="], @@ -1042,6 +1073,8 @@ "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hono": ["hono@4.11.5", "", {}, "sha512-WemPi9/WfyMwZs+ZUXdiwcCh9Y+m7L+8vki9MzDw3jJ+W9Lc+12HGsd368Qc1vZi1xwW8BWMMsnK5efYKPdt4g=="], + "hosted-git-info": ["hosted-git-info@8.1.0", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw=="], "hot-shots": ["hot-shots@11.4.0", "", { "optionalDependencies": { "unix-dgram": "2.x" } }, "sha512-IoyXi0eBFLbaARl6IjQxNzxqNxH3h1XX026PP5uru/RwVVLOt9Qr9f87GW+4L/sj7sNyMGzmIsh++0z5ibkP5w=="], @@ -1076,6 +1109,8 @@ "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + "incremental-convex-hull": ["incremental-convex-hull@1.0.1", "", { "dependencies": { "robust-orientation": "^1.1.2", "simplicial-complex": "^1.0.0" } }, "sha512-mKRJDXtzo1R9LxCuB1TdwZXHaPaIEldoGPsXy2jrJc/kufyqp8y/VAQQxThSxM2aroLoh6uObexPk1ASJ7FB7Q=="], + "indent-string": ["indent-string@5.0.0", "", {}, "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg=="], "index-to-position": ["index-to-position@1.2.0", "", {}, "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw=="], @@ -1170,6 +1205,8 @@ "jsonwebtoken": ["jsonwebtoken@9.0.3", "", { "dependencies": { "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" } }, "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g=="], + "jsts": ["jsts@1.1.2", "", {}, "sha512-4qWAI9gR72HcGWCl7bej9/2dCM6Nv6dh5Zn1G+wzJYW9wsFL/2bPA3kdR8IAPObmF4gb56l5EGlXxErmB+9GOw=="], + "junk": ["junk@4.0.1", "", {}, "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ=="], "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="], @@ -1308,6 +1345,8 @@ "module-details-from-path": ["module-details-from-path@1.0.4", "", {}, "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w=="], + "monotone-convex-hull-2d": ["monotone-convex-hull-2d@1.0.1", "", { "dependencies": { "robust-orientation": "^1.1.3" } }, "sha512-ixQ3qdXTVHvR7eAoOjKY8kGxl9YjOFtzi7qOjwmFFPfBqZHVOjUFOBy/Dk9dusamRSPJe9ggyfSypRbs0Bl8BA=="], + "move-file": ["move-file@3.1.0", "", { "dependencies": { "path-exists": "^5.0.0" } }, "sha512-4aE3U7CCBWgrQlQDMq8da4woBWDGHioJFiOZ8Ie6Yq2uwYQ9V2kGhTz4x3u6Wc+OU17nw0yc3rJ/lQ4jIiPe3A=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -1448,7 +1487,7 @@ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "picoquery": ["picoquery@2.5.0", "", {}, "sha512-j1kgOFxtaCyoFCkpoYG2Oj3OdGakadO7HZ7o5CqyRazlmBekKhbDoUnNnXASE07xSY4nDImWZkrZv7toSxMi/g=="], @@ -1564,6 +1603,14 @@ "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], + "robust-orientation": ["robust-orientation@1.2.1", "", { "dependencies": { "robust-scale": "^1.0.2", "robust-subtract": "^1.0.0", "robust-sum": "^1.0.0", "two-product": "^1.0.2" } }, "sha512-FuTptgKwY6iNuU15nrIJDLjXzCChWB+T4AvksRtwPS/WZ3HuP1CElCm1t+OBfgQKfWbtZIawip+61k7+buRKAg=="], + + "robust-scale": ["robust-scale@1.0.2", "", { "dependencies": { "two-product": "^1.0.2", "two-sum": "^1.0.0" } }, "sha512-jBR91a/vomMAzazwpsPTPeuTPPmWBacwA+WYGNKcRGSh6xweuQ2ZbjRZ4v792/bZOhRKXRiQH0F48AvuajY0tQ=="], + + "robust-subtract": ["robust-subtract@1.0.0", "", {}, "sha512-xhKUno+Rl+trmxAIVwjQMiVdpF5llxytozXJOdoT4eTIqmqsndQqFb1A0oiW3sZGlhMRhOi6pAD4MF1YYW6o/A=="], + + "robust-sum": ["robust-sum@1.0.0", "", {}, "sha512-AvLExwpaqUqD1uwLU6MwzzfRdaI6VEZsyvQ3IAQ0ZJ08v1H+DTyqskrf2ZJyh0BDduFVLN7H04Zmc+qTiahhAw=="], + "rollup": ["rollup@4.56.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.56.0", "@rollup/rollup-android-arm64": "4.56.0", "@rollup/rollup-darwin-arm64": "4.56.0", "@rollup/rollup-darwin-x64": "4.56.0", "@rollup/rollup-freebsd-arm64": "4.56.0", "@rollup/rollup-freebsd-x64": "4.56.0", "@rollup/rollup-linux-arm-gnueabihf": "4.56.0", "@rollup/rollup-linux-arm-musleabihf": "4.56.0", "@rollup/rollup-linux-arm64-gnu": "4.56.0", "@rollup/rollup-linux-arm64-musl": "4.56.0", "@rollup/rollup-linux-loong64-gnu": "4.56.0", "@rollup/rollup-linux-loong64-musl": "4.56.0", "@rollup/rollup-linux-ppc64-gnu": "4.56.0", "@rollup/rollup-linux-ppc64-musl": "4.56.0", "@rollup/rollup-linux-riscv64-gnu": "4.56.0", "@rollup/rollup-linux-riscv64-musl": "4.56.0", "@rollup/rollup-linux-s390x-gnu": "4.56.0", "@rollup/rollup-linux-x64-gnu": "4.56.0", "@rollup/rollup-linux-x64-musl": "4.56.0", "@rollup/rollup-openbsd-x64": "4.56.0", "@rollup/rollup-openharmony-arm64": "4.56.0", "@rollup/rollup-win32-arm64-msvc": "4.56.0", "@rollup/rollup-win32-ia32-msvc": "4.56.0", "@rollup/rollup-win32-x64-gnu": "4.56.0", "@rollup/rollup-win32-x64-msvc": "4.56.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg=="], "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], @@ -1620,6 +1667,10 @@ "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + "simplicial-complex": ["simplicial-complex@1.0.0", "", { "dependencies": { "bit-twiddle": "^1.0.0", "union-find": "^1.0.0" } }, "sha512-mHauIKSOy3GquM5VnYEiu7eP5y4A8BiaN9ezUUgyYFz1k68PqDYcyaH3kenp2cyvWZE96QKE3nrxYw65Allqiw=="], + + "simplify-js": ["simplify-js@1.2.4", "", {}, "sha512-vITfSlwt7h/oyrU42R83mtzFpwYk3+mkH9bOHqq/Qw6n8rtR7aE3NZQ5fbcyCUVVmuMJR6ynsAhOfK2qoah8Jg=="], + "slash": ["slash@5.1.0", "", {}, "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="], "slashes": ["slashes@3.0.12", "", {}, "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA=="], @@ -1744,6 +1795,110 @@ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "turf": ["turf@3.0.14", "", { "dependencies": { "turf-along": "^3.0.12", "turf-area": "^3.0.12", "turf-bbox": "^3.0.12", "turf-bbox-polygon": "^3.0.12", "turf-bearing": "^3.0.12", "turf-bezier": "^3.0.12", "turf-buffer": "^3.0.12", "turf-center": "^3.0.12", "turf-centroid": "^3.0.12", "turf-circle": "^3.0.12", "turf-collect": "^3.0.12", "turf-combine": "^3.0.12", "turf-concave": "^3.0.12", "turf-convex": "^3.0.12", "turf-destination": "^3.0.12", "turf-difference": "^3.0.12", "turf-distance": "^3.0.12", "turf-envelope": "^3.0.12", "turf-explode": "^3.0.12", "turf-flip": "^3.0.12", "turf-helpers": "^3.0.12", "turf-hex-grid": "^3.0.12", "turf-inside": "^3.0.12", "turf-intersect": "^3.0.12", "turf-isolines": "^3.0.12", "turf-kinks": "^3.0.12", "turf-line-distance": "^3.0.12", "turf-line-slice": "^3.0.12", "turf-meta": "^3.0.12", "turf-midpoint": "^3.0.12", "turf-nearest": "^3.0.12", "turf-planepoint": "^3.0.12", "turf-point-grid": "^3.0.12", "turf-point-on-line": "^3.0.12", "turf-point-on-surface": "^3.0.12", "turf-random": "^3.0.12", "turf-sample": "^3.0.12", "turf-simplify": "^3.0.12", "turf-square": "^3.0.12", "turf-square-grid": "^3.0.12", "turf-tag": "^3.0.12", "turf-tesselate": "^3.0.12", "turf-tin": "^3.0.12", "turf-triangle-grid": "^3.0.12", "turf-union": "^3.0.12", "turf-within": "^3.0.12" } }, "sha512-YKaS5wvijcTkGr1p6YQXh2xHWojhC6PMPo8pUFqphgJhq4DCtRBDc0UfbfbS/SD3ozzRFcGDrO3jrQqNBi3VAw=="], + + "turf-along": ["turf-along@3.0.12", "", { "dependencies": { "turf-bearing": "^3.0.12", "turf-destination": "^3.0.12", "turf-distance": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-9wHa3LiqsdEExCuPgw8O5fJzqeL4lf8srBBfjGid2Tjh2nwuqgkcFZxzbnLE0Y8oFh60iNJUdccGuJSTJ3YGyg=="], + + "turf-area": ["turf-area@3.0.12", "", { "dependencies": { "geojson-area": "^0.2.1" } }, "sha512-62Rc1UD8b1yv+AkfhjQ6LSvzxnuJi+jj6q4EkginZxPMJh8HACyQkeNy6VI9WucUULXzoPs8IqeqNwltpMpZVw=="], + + "turf-bbox": ["turf-bbox@3.0.12", "", { "dependencies": { "turf-meta": "^3.0.12" } }, "sha512-ztNkTvRQ3ezArAQB2ZLLtJur9BiuWkwVv5u+aviC+3y0/mU5ITuoArOTUs4kLU+gNOjdpPwD0Ea/gqBR0lh2hw=="], + + "turf-bbox-polygon": ["turf-bbox-polygon@3.0.12", "", { "dependencies": { "turf-helpers": "^3.0.12" } }, "sha512-9wuTI5eFBBe0bXNK8c5wk/zHbSne28KmUQVX66QhTRvUc34v+NUIzn4bzi3rZXpJvLSLyPVltPnYfn+YsuCkAQ=="], + + "turf-bearing": ["turf-bearing@3.0.12", "", { "dependencies": { "turf-invariant": "^3.0.12" } }, "sha512-oWAFtgpQwR78xWZn53BzdwHhd4uT5OtuvwEgzFkZWSa6kp+UpdJ39lDAcvdR0H8dCszuGB4KguaGCZLG+iyUvg=="], + + "turf-bezier": ["turf-bezier@3.0.12", "", { "dependencies": { "turf-helpers": "^3.0.12" } }, "sha512-8B4frrRtir9VJ6DTgGG5e81f7faPBnxTR2uJzWGd3bQkUaOBBX7rLQTBTBv1iFZVTU07QnWYgznm3c06FrtX2w=="], + + "turf-buffer": ["turf-buffer@3.0.12", "", { "dependencies": { "geojson-normalize": "0.0.0", "jsts": "1.1.2", "turf-combine": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-2wy66sAd0EXX13ql2KeA1bFOtecqDCWmaayLueEaM7HOxY6i/VvroDIHZrFzuwPAa/4ZwMZPaTPiFQ6kh7VSGw=="], + + "turf-center": ["turf-center@3.0.12", "", { "dependencies": { "turf-bbox": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-H2okrDla22kawwXsPvazV09mHr26/51sKONL52HTBeqiD2sK0WWRQkpdLfJdia0FT47wVk9mBiLXsKeIzDUi7Q=="], + + "turf-centroid": ["turf-centroid@3.0.12", "", { "dependencies": { "turf-helpers": "^3.0.12", "turf-meta": "^3.0.12" } }, "sha512-OuH8ZZjnxiNETZ8vZkb+dC6C+fit+LdRBolLGDQzBKDLXV2z1nQX2+w/qTNKV9XP5ZZLeEpJPmP0z1MDSz+YRA=="], + + "turf-circle": ["turf-circle@3.0.12", "", { "dependencies": { "turf-destination": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-dOGg9yQXA21SpgI1qjU+Kgq0esvBU+ZTqoM5A2fWmoa0458YUoB85hnbxFtnmsFB3qXDsrW9RBuC4kyNCcn9KQ=="], + + "turf-collect": ["turf-collect@3.0.12", "", { "dependencies": { "turf-inside": "^3.0.12" } }, "sha512-V36Hz03VmMXn0BUAZNY+w1bpCX6Ks2JzfvHdiWHh5MccziroaKOfOeC1odJcXSDrhoR14/0oSC4tHDKJslbcPA=="], + + "turf-combine": ["turf-combine@3.0.12", "", { "dependencies": { "turf-meta": "^3.0.12" } }, "sha512-j99I2ydmO4AzQQqzh+DBbxRr+a//DNbXJFcvBSy88G7vlKByPzr0ONVDNcvS/a1JRTl11C2vfrWxRtHwwmzzDg=="], + + "turf-concave": ["turf-concave@3.0.12", "", { "dependencies": { "turf-distance": "^3.0.12", "turf-meta": "^3.0.12", "turf-tin": "^3.0.12", "turf-union": "^3.0.12" } }, "sha512-0KQfAk1f7TRUtuNbIDsRcbi4ONMhtrQg0Y/uY/QM5wVIKMj5T5ZuSApqEfs4cDXcfWu//hwe2bgHJzu1GlUn4w=="], + + "turf-convex": ["turf-convex@3.0.12", "", { "dependencies": { "convex-hull": "^1.0.3", "turf-helpers": "^3.0.12", "turf-meta": "^3.0.12" } }, "sha512-xfwhxDQKygFsdbEK8503/N+B4JZZB6i58lE39DTMcf97xCCLyv7zxGlalsKU4j+qywV3nbO6yhKHScv4t6t5bg=="], + + "turf-destination": ["turf-destination@3.0.12", "", { "dependencies": { "turf-helpers": "^3.0.12", "turf-invariant": "^3.0.12" } }, "sha512-nXKJfH5qv+eoNbw5ggLZNsUokgmaHnGD8Woauc8+7C36JRPSEm1Y3wcjAdJX0VadJJdL8AjNP65QOiWOLdVe1Q=="], + + "turf-difference": ["turf-difference@3.0.12", "", { "dependencies": { "jsts": "1.1.2", "turf-helpers": "^3.0.12" } }, "sha512-YRMUspic52qdwZZxuVp0LB2QG39q4Ps5ZTfZq+QIGsqdKK7FxvbJTxsb/a+n4xHe/K4zCcWo/AXUw1pOFLrNbA=="], + + "turf-distance": ["turf-distance@3.0.12", "", { "dependencies": { "turf-helpers": "^3.0.12", "turf-invariant": "^3.0.12" } }, "sha512-dy2TguSbcCKJK7ZPwCZuG9+mK2DBKZ4g0wlmbKa7iGPFG18X1nPWJRzUkmNF3kdUe9K6+7SViTnbH6xQYCNpiw=="], + + "turf-envelope": ["turf-envelope@3.0.12", "", { "dependencies": { "turf-bbox": "^3.0.12", "turf-bbox-polygon": "^3.0.12" } }, "sha512-2ahLojIP000MUhk7JC/ILASwiP074sFD5nc1HTYyHRhqkb8ukwFMHrR3haEmQdf7sJE3nexBELY9PMGyTQmBiQ=="], + + "turf-explode": ["turf-explode@3.0.12", "", { "dependencies": { "turf-helpers": "^3.0.12", "turf-meta": "^3.0.12" } }, "sha512-cBUdQl2RBbu5YdL+mBNOcou8OlHLF6F9s6Rwz4EuOOGG0Urs0NE2CmascINB1+TgbxJozb29ZKNXezgwhwnrpg=="], + + "turf-flip": ["turf-flip@3.0.12", "", { "dependencies": { "turf-meta": "^3.0.12" } }, "sha512-SV/DI8I/dczRlqBMcAZyyQq1rlkrFZigFUKhtDIBqEJJvqKy70kDxbHrAkJdeAZ20caflkaTV2K40x4UTUpNgg=="], + + "turf-grid": ["turf-grid@1.0.1", "", { "dependencies": { "turf-point": "^2.0.0" } }, "sha512-T2jHZ2HOgvkZZQjMmtl9lexeY6Xk1POF6wbYE7aYLjBO43MQqYNEFDf3JQ1gJymrYEaNy7yDSDYDyiYSsK6sQw=="], + + "turf-helpers": ["turf-helpers@3.0.12", "", {}, "sha512-e0Oic1RVdTq3PAd5XlPgdtE3eZlN4kSd+Sr4iwayeeBRCMns60j9t6helyHxvbjLLy1uP28IiNfnm30BF+YThw=="], + + "turf-hex-grid": ["turf-hex-grid@3.0.12", "", { "dependencies": { "turf-distance": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-3O580ujUHbAEi8vk38uyxvIQN3yjyeQEJtJppB2sYO7zcNORIcao68DlXQW29nSy1pUAYCbNkghDcumNL3A58A=="], + + "turf-inside": ["turf-inside@3.0.12", "", { "dependencies": { "turf-invariant": "^3.0.12" } }, "sha512-QjRDeSgDwf1hIEATsYgbYMB1GnnfwEqjapskOIojICeUBfKA+NMExjaBtMc2V1SY5jNqja6tVPH+ek0d+WO7Vg=="], + + "turf-intersect": ["turf-intersect@3.0.12", "", { "dependencies": { "jsts": "1.1.2" } }, "sha512-eXDksaYFakN6BFcfiyqgH1PDizfkfhPUU2Axd+I5zjVEHgECplK+z8LYA/RqvQ59aWQ2MfNRqxwW12T07c4gMw=="], + + "turf-invariant": ["turf-invariant@3.0.12", "", {}, "sha512-6BAyAupdij6X8gTlpGHCG/zpqXXaTi7kjMAbQrepTpnPhIEQJtlGsiZCQu4EckCZS5Rzj5/b8Xw4gaxNpadihw=="], + + "turf-isolines": ["turf-isolines@3.0.12", "", { "dependencies": { "turf-bbox": "^3.0.12", "turf-grid": "1.0.1", "turf-helpers": "^3.0.12", "turf-inside": "^3.0.12", "turf-planepoint": "^3.0.12", "turf-square": "^3.0.12", "turf-tin": "^3.0.12" } }, "sha512-b4TY6fKYWvToxiYjYTiURUlljls8jG1oKFaBulu5pz0q6rxmpxkCGOA8t9AXQkNXzHBrDE+vjXashMtYEN9Tsw=="], + + "turf-kinks": ["turf-kinks@3.0.12", "", { "dependencies": { "turf-helpers": "^3.0.12" } }, "sha512-gzLqDKPqq9rSWIPy6NDZMspDqk1wvP1sg+jaSqdKnW3mPTDn32IbHLxihjGzZoaW0YlIZmnrZlVBLqId6kCZ5w=="], + + "turf-line-distance": ["turf-line-distance@3.0.12", "", { "dependencies": { "turf-distance": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-HzrxOEKdUgl1vdqIBLmaA99B0cg3+41kamQ650wn26BFUdMrrtkt+x2FT3Y7DifYTNljQ2fblbylqtMAAS0jag=="], + + "turf-line-slice": ["turf-line-slice@3.0.12", "", { "dependencies": { "turf-bearing": "^3.0.12", "turf-destination": "^3.0.12", "turf-distance": "^3.0.12", "turf-helpers": "^3.0.12", "turf-point-on-line": "^3.0.12" } }, "sha512-1ecV3DCTRkv2azoaN/ZFcKxLBrw3l4SRSP/dVAk1Gwn83vBYJ9XtjmUiMLE2WbzTzuzuDxLb6fMvyGyteXBUeg=="], + + "turf-meta": ["turf-meta@3.0.12", "", {}, "sha512-B3YSKMpWGx1WYE8IM62pzOA0kqjrGjd/ZkSyrD5WXnrrpPfAUl0yBoZCJYL5IQcOwLqfd5xZt3HJnNH9cFiG7A=="], + + "turf-midpoint": ["turf-midpoint@3.0.12", "", { "dependencies": { "turf-bearing": "^3.0.12", "turf-destination": "^3.0.12", "turf-distance": "^3.0.12", "turf-invariant": "^3.0.12" } }, "sha512-Q1fZWQzc4SSF09hY+tJvgnDGBmVqTgBkIzOg0I0hy+ti0b9bSJ5P3+KY6wkVcC+zgDa8jzp8GZETijAV4WUAqw=="], + + "turf-nearest": ["turf-nearest@3.0.12", "", { "dependencies": { "turf-distance": "^3.0.12" } }, "sha512-4jyHgtpxVSM2LXh+lz4z47lketEXMKlcIpCJplHFpT1ZddIUoKvT6RJDhTUN8a+mohE8HAPgvcUA53vmjxxNEg=="], + + "turf-planepoint": ["turf-planepoint@3.0.12", "", {}, "sha512-2okyqSAjC00QWEyr1vi04Vgug6OaYfBRtvtzHs16IxBN5xhAuwtCnUICb/1ugbOgCiBFV6TzIle/vA0EUVuRxQ=="], + + "turf-point": ["turf-point@2.0.1", "", { "dependencies": { "minimist": "^1.1.0" }, "bin": { "turf-point": "bin/point.js" } }, "sha512-DkzYiE8Gc7G6XNW3FsBEwKAMz7jVZ/cw+PqLLkiSR1bde0vRZumF26UDQrspyQNih/oShQ0i4mSfa/dw3tqzsA=="], + + "turf-point-grid": ["turf-point-grid@3.0.12", "", { "dependencies": { "turf-distance": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-5keUPz8j0VWilANaX3bP1evAm/u1u8v10HfUjtoenvWAC5dTGMUVCskgFqX9XitwmsPtaFiCuakM8s3HQzydSQ=="], + + "turf-point-on-line": ["turf-point-on-line@3.0.12", "", { "dependencies": { "turf-bearing": "^3.0.12", "turf-destination": "^3.0.12", "turf-distance": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-0+gqSE3pK//ylzQZoc+tLpLUa1/14vvqbMvteFu2bl9NP6oudzZqTWoY9dBfyD9rLQtFOCf/IdkIk+IIwTn1cg=="], + + "turf-point-on-surface": ["turf-point-on-surface@3.0.12", "", { "dependencies": { "turf-center": "^3.0.12", "turf-distance": "^3.0.12", "turf-explode": "^3.0.12", "turf-helpers": "^3.0.12", "turf-inside": "^3.0.12" } }, "sha512-8/CXalHx672E2gR5FIZlazrx2Gj8HJW9JHb7UF/SH2CGDt/DUQKynz3/rn2fj4PyGtXGG7JoS/XuBwEdH99gAw=="], + + "turf-random": ["turf-random@3.0.12", "", { "dependencies": { "geojson-random": "^0.2.2" } }, "sha512-y0bRhHUfTQJBdEigLpS0+y8ReagylBlAgSKhCanMkw2WtQBj4y5MNOT+dgwX6iOCiWrzCsgPvDm/2hRxdYzmTQ=="], + + "turf-sample": ["turf-sample@3.0.12", "", { "dependencies": { "turf-helpers": "^3.0.12" } }, "sha512-aDwiE4kjSHt60hYdIhCFQp7xTauIPUVufbfJSVR2+Xrq6KdK8IPIkUAjDKNIo7iSetEsK9uHNHCFTTvW1emGMQ=="], + + "turf-simplify": ["turf-simplify@3.0.12", "", { "dependencies": { "simplify-js": "^1.2.1" } }, "sha512-g+kLtFhZaQD+OZwcl2KZ8RVWGQdsCJBT3/ZQiP6K8RYdD3d3QbruKIQdLgEZhK0lL0/EUCgzQz3/mhpxTA3RMw=="], + + "turf-square": ["turf-square@3.0.12", "", { "dependencies": { "turf-distance": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-jBxMU+9ZO8WAEwFBC2AsBpwV/vmqdBFn73ONEYDb8n+LiOAMbwsDM+75pxg6kt5l3ugQJGbgfxVucVl3SUTJaQ=="], + + "turf-square-grid": ["turf-square-grid@3.0.12", "", { "dependencies": { "turf-distance": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-L8Bd3/YNYMqIYqWJDmGMJ7itSO7VMrbU1Vubt1f+GOHGnNcf789YXe1poNa6VdONw7spuRlgbQA94VMI5vzZUQ=="], + + "turf-tag": ["turf-tag@3.0.12", "", { "dependencies": { "turf-inside": "^3.0.12" } }, "sha512-tNC7FkAMdFjePrqZqjrxE5IXGdkrZcBjWbRmCSwy0DMKhLgPuXfWNACXt4FFC5dgQ3jc3NbDvfsML6gs1es1zA=="], + + "turf-tesselate": ["turf-tesselate@3.0.12", "", { "dependencies": { "earcut": "^2.0.0", "turf-helpers": "^3.0.12" } }, "sha512-LWalgrdZGqXoqxkqlD/uV7xpIbuhNJviLw1ANdiST6F6laz8qoi8C2hfHIyzcQB7T/0LeWsuWzHtJ1MotYhpuA=="], + + "turf-tin": ["turf-tin@3.0.12", "", { "dependencies": { "turf-helpers": "^3.0.12" } }, "sha512-uqadTFrAE3pdVzAQN5CMGzZZtZMrirjRYL2iJRaHAXy9lDaVT+TlDe9gt+8SIwiPI1hVHq9NHHrEn6Cyn+xXxg=="], + + "turf-triangle-grid": ["turf-triangle-grid@3.0.12", "", { "dependencies": { "turf-distance": "^3.0.12", "turf-helpers": "^3.0.12" } }, "sha512-hL17vUzp85YoQeqRs4zIKEZloLGt8DWie39j2EK1S8I030L2A60aznZzagnxgo2JnReS25tDSRA4JdrorrECOw=="], + + "turf-union": ["turf-union@3.0.12", "", { "dependencies": { "jsts": "1.1.2" } }, "sha512-9R3/SccBa6Qpqn1CYUU1n7gv1E1f+pNiLZmf1tEqPq0QQQE8jY3B03YrsIBK1bP6RI8N6wx/2hfX7h9LgFQvmw=="], + + "turf-within": ["turf-within@3.0.12", "", { "dependencies": { "turf-helpers": "^3.0.12", "turf-inside": "^3.0.12" } }, "sha512-RgVeZ8LBZjcUSX8OvVW/nk2hJ1Vp+RPD+axOWaRf+zMbIiiBBAxmE8FxJSm6EINUuOR8zkvWIt+pyeltRYtG8A=="], + + "two-product": ["two-product@1.0.2", "", {}, "sha512-vOyrqmeYvzjToVM08iU52OFocWT6eB/I5LUWYnxeAPGXAhAxXYU/Yr/R2uY5/5n4bvJQL9AQulIuxpIsMoT8XQ=="], + + "two-sum": ["two-sum@1.0.0", "", {}, "sha512-phP48e8AawgsNUjEY2WvoIWqdie8PoiDZGxTDv70LDr01uX5wLEQbOgSP7Z/B6+SW5oLtbe8qaYX2fKJs3CGTw=="], + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], @@ -1764,6 +1919,8 @@ "unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="], + "union-find": ["union-find@1.0.2", "", {}, "sha512-wFA9bMD/40k7ZcpKVXfu6X1qD3ri5ryO8HUsuA1RnxPCQl66Mu6DgkxyR+XNnd+osD0aLENixcJVFj+uf+O4gw=="], + "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], "unix-dgram": ["unix-dgram@2.0.7", "", { "dependencies": { "bindings": "^1.5.0", "nan": "^2.20.0" } }, "sha512-pWaQorcdxEUBFIKjCqqIlQaOoNVmchyoaNAJ/1LwyyfK2XSxcBhgJNiSE8ZRhR0xkNGyk4xInt1G03QPoKXY5A=="], @@ -1800,12 +1957,16 @@ "vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "vite-plugin-full-reload": ["vite-plugin-full-reload@1.2.0", "", { "dependencies": { "picocolors": "^1.0.0", "picomatch": "^2.3.1" } }, "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA=="], + "wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="], "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "wgs84": ["wgs84@0.0.0", "", {}, "sha512-ANHlY4Rb5kHw40D0NJ6moaVfOCMrp9Gpd1R/AIQYg2ko4/jzcJ+TVXYYF6kXJqQwITvEZP4yEthjM7U6rYlljQ=="], + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], "when-exit": ["when-exit@2.1.5", "", {}, "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg=="], @@ -1912,12 +2073,20 @@ "@opentelemetry/sdk-trace-node/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "@parcel/watcher/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "@parcel/watcher-wasm/napi-wasm": ["napi-wasm@1.1.3", "", { "bundled": true }, "sha512-h/4nMGsHjZDCYmQVNODIrYACVJ+I9KItbG+0si6W/jSjdA9JbWDoU4LLeMXVcEQGHjttI2tuXqDrbGF7qkUHHg=="], + "@parcel/watcher-wasm/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], + "@rollup/pluginutils/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "@typescript-eslint/typescript-estree/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "@vercel/nft/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "@vue/compiler-core/entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], "@whatwg-node/fetch/urlpattern-polyfill": ["urlpattern-polyfill@10.1.0", "", {}, "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw=="], @@ -1932,8 +2101,6 @@ "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "archiver/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], "archiver-utils/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], @@ -1988,6 +2155,8 @@ "fast-json-stringify/fast-uri": ["fast-uri@2.4.0", "", {}, "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA=="], + "fdir/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], @@ -2040,9 +2209,9 @@ "make-dir/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], - "merge-options/is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], + "maplibre-gl/earcut": ["earcut@3.0.2", "", {}, "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ=="], - "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "merge-options/is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], "multiparty/http-errors": ["http-errors@1.8.1", "", { "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.1" } }, "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g=="], @@ -2098,6 +2267,8 @@ "svgo/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + "tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "unbzip2-stream/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], "unixify/normalize-path": ["normalize-path@2.1.1", "", { "dependencies": { "remove-trailing-separator": "^1.0.1" } }, "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w=="], @@ -2106,6 +2277,8 @@ "untun/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "vite/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], "windows-release/execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="], diff --git a/login.html b/login.html new file mode 100644 index 0000000..38d6620 --- /dev/null +++ b/login.html @@ -0,0 +1,14 @@ + + + + +

LOGIN

+
+
+
+ +
+ + + + diff --git a/package-lock.json b/package-lock.json index c220346..33c5d3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,16 +7,23 @@ "dependencies": { "@fontsource-variable/jetbrains-mono": "^5.2.8", "@maptiler/leaflet-maptilersdk": "^4.1.1", + "@turf/area": "^7.3.2", + "@turf/helpers": "^7.3.2", + "@types/bun": "^1.3.6", "@types/jquery": "^3.5.33", + "@types/turf": "^3.5.32", + "hono": "^4.11.5", "jquery": "^4.0.0", "lucide": "^0.563.0", "modern-normalize": "^3.0.1", "netlify-cli": "^23.13.5", + "turf": "^3.0.14", "vite": "^7.3.1" }, "devDependencies": { "@types/node": "^25.0.10", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vite-plugin-full-reload": "^1.2.0" } }, "node_modules/@babel/code-frame": { @@ -2546,6 +2553,49 @@ "version": "1.0.4", "license": "MIT" }, + "node_modules/@turf/area": { + "version": "7.3.2", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.2", + "@turf/meta": "7.3.2", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/helpers": { + "version": "7.3.2", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/meta": { + "version": "7.3.2", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.2", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@types/bun": { + "version": "1.3.6", + "license": "MIT", + "dependencies": { + "bun-types": "1.3.6" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "license": "MIT" @@ -2588,8 +2638,6 @@ }, "node_modules/@types/node": { "version": "25.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz", - "integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==", "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -2618,6 +2666,13 @@ "version": "1.3.5", "license": "MIT" }, + "node_modules/@types/turf": { + "version": "3.5.32", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/yauzl": { "version": "2.10.3", "license": "MIT", @@ -3070,6 +3125,13 @@ "node": ">=0.4.0" } }, + "node_modules/affine-hull": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "robust-orientation": "^1.1.3" + } + }, "node_modules/agent-base": { "version": "7.1.4", "license": "MIT", @@ -3473,6 +3535,10 @@ "file-uri-to-path": "1.0.0" } }, + "node_modules/bit-twiddle": { + "version": "1.0.2", + "license": "MIT" + }, "node_modules/bl": { "version": "4.1.0", "license": "MIT", @@ -3657,6 +3723,13 @@ "version": "1.1.2", "license": "MIT" }, + "node_modules/bun-types": { + "version": "1.3.6", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/bundle-name": { "version": "4.1.0", "license": "MIT", @@ -4226,6 +4299,15 @@ "node": ">= 0.6" } }, + "node_modules/convex-hull": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "affine-hull": "^1.0.0", + "incremental-convex-hull": "^1.0.1", + "monotone-convex-hull-2d": "^1.0.1" + } + }, "node_modules/cookie": { "version": "1.0.2", "license": "MIT", @@ -4794,7 +4876,7 @@ } }, "node_modules/earcut": { - "version": "3.0.2", + "version": "2.2.4", "license": "ISC" }, "node_modules/eastasianwidth": { @@ -5699,6 +5781,24 @@ "node": ">= 0.6.0" } }, + "node_modules/geojson-area": { + "version": "0.2.1", + "license": "BSD-2-Clause", + "dependencies": { + "wgs84": "0.0.0" + } + }, + "node_modules/geojson-normalize": { + "version": "0.0.0", + "license": "ISC" + }, + "node_modules/geojson-random": { + "version": "0.2.2", + "license": "ISC", + "bin": { + "geojson-random": "geojson-random" + } + }, "node_modules/geojson-vt": { "version": "4.0.2", "license": "ISC" @@ -5986,6 +6086,13 @@ "node": ">= 0.4" } }, + "node_modules/hono": { + "version": "4.11.5", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/hosted-git-info": { "version": "8.1.0", "license": "ISC", @@ -6193,6 +6300,14 @@ "node": ">=0.8.19" } }, + "node_modules/incremental-convex-hull": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "robust-orientation": "^1.1.2", + "simplicial-complex": "^1.0.0" + } + }, "node_modules/indent-string": { "version": "5.0.0", "license": "MIT", @@ -6855,6 +6970,13 @@ "npm": ">=6" } }, + "node_modules/jsts": { + "version": "1.1.2", + "license": "(EDL-1.0 OR EPL-1.0)", + "engines": { + "node": ">= 4" + } + }, "node_modules/junk": { "version": "4.0.1", "license": "MIT", @@ -7395,6 +7517,10 @@ "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" } }, + "node_modules/maplibre-gl/node_modules/earcut": { + "version": "3.0.2", + "license": "ISC" + }, "node_modules/maplibre-gl/node_modules/pbf": { "version": "4.0.1", "license": "BSD-3-Clause", @@ -7644,6 +7770,13 @@ "version": "1.0.4", "license": "MIT" }, + "node_modules/monotone-convex-hull-2d": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "robust-orientation": "^1.1.3" + } + }, "node_modules/move-file": { "version": "3.1.0", "license": "MIT", @@ -9180,6 +9313,32 @@ "version": "1.4.1", "license": "MIT" }, + "node_modules/robust-orientation": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "robust-scale": "^1.0.2", + "robust-subtract": "^1.0.0", + "robust-sum": "^1.0.0", + "two-product": "^1.0.2" + } + }, + "node_modules/robust-scale": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "two-product": "^1.0.2", + "two-sum": "^1.0.0" + } + }, + "node_modules/robust-subtract": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/robust-sum": { + "version": "1.0.0", + "license": "MIT" + }, "node_modules/rollup": { "version": "4.56.0", "license": "MIT", @@ -9558,6 +9717,18 @@ "version": "3.0.7", "license": "ISC" }, + "node_modules/simplicial-complex": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "bit-twiddle": "^1.0.0", + "union-find": "^1.0.0" + } + }, + "node_modules/simplify-js": { + "version": "1.2.4", + "license": "BSD-2-Clause" + }, "node_modules/slash": { "version": "5.1.0", "license": "MIT", @@ -10189,6 +10360,447 @@ "version": "2.8.1", "license": "0BSD" }, + "node_modules/turf": { + "version": "3.0.14", + "license": "MIT", + "dependencies": { + "turf-along": "^3.0.12", + "turf-area": "^3.0.12", + "turf-bbox": "^3.0.12", + "turf-bbox-polygon": "^3.0.12", + "turf-bearing": "^3.0.12", + "turf-bezier": "^3.0.12", + "turf-buffer": "^3.0.12", + "turf-center": "^3.0.12", + "turf-centroid": "^3.0.12", + "turf-circle": "^3.0.12", + "turf-collect": "^3.0.12", + "turf-combine": "^3.0.12", + "turf-concave": "^3.0.12", + "turf-convex": "^3.0.12", + "turf-destination": "^3.0.12", + "turf-difference": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-envelope": "^3.0.12", + "turf-explode": "^3.0.12", + "turf-flip": "^3.0.12", + "turf-helpers": "^3.0.12", + "turf-hex-grid": "^3.0.12", + "turf-inside": "^3.0.12", + "turf-intersect": "^3.0.12", + "turf-isolines": "^3.0.12", + "turf-kinks": "^3.0.12", + "turf-line-distance": "^3.0.12", + "turf-line-slice": "^3.0.12", + "turf-meta": "^3.0.12", + "turf-midpoint": "^3.0.12", + "turf-nearest": "^3.0.12", + "turf-planepoint": "^3.0.12", + "turf-point-grid": "^3.0.12", + "turf-point-on-line": "^3.0.12", + "turf-point-on-surface": "^3.0.12", + "turf-random": "^3.0.12", + "turf-sample": "^3.0.12", + "turf-simplify": "^3.0.12", + "turf-square": "^3.0.12", + "turf-square-grid": "^3.0.12", + "turf-tag": "^3.0.12", + "turf-tesselate": "^3.0.12", + "turf-tin": "^3.0.12", + "turf-triangle-grid": "^3.0.12", + "turf-union": "^3.0.12", + "turf-within": "^3.0.12" + } + }, + "node_modules/turf-along": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-bearing": "^3.0.12", + "turf-destination": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-area": { + "version": "3.0.12", + "license": "ISC", + "dependencies": { + "geojson-area": "^0.2.1" + } + }, + "node_modules/turf-bbox": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-bbox-polygon": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-bearing": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-invariant": "^3.0.12" + } + }, + "node_modules/turf-bezier": { + "version": "3.0.12", + "license": "ISC", + "dependencies": { + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-buffer": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "geojson-normalize": "0.0.0", + "jsts": "1.1.2", + "turf-combine": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-center": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-bbox": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-centroid": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-helpers": "^3.0.12", + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-circle": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-destination": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-collect": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-inside": "^3.0.12" + } + }, + "node_modules/turf-combine": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-concave": { + "version": "3.0.12", + "license": "ISC", + "dependencies": { + "turf-distance": "^3.0.12", + "turf-meta": "^3.0.12", + "turf-tin": "^3.0.12", + "turf-union": "^3.0.12" + } + }, + "node_modules/turf-convex": { + "version": "3.0.12", + "license": "ISC", + "dependencies": { + "convex-hull": "^1.0.3", + "turf-helpers": "^3.0.12", + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-destination": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-helpers": "^3.0.12", + "turf-invariant": "^3.0.12" + } + }, + "node_modules/turf-difference": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "jsts": "1.1.2", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-distance": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-helpers": "^3.0.12", + "turf-invariant": "^3.0.12" + } + }, + "node_modules/turf-envelope": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-bbox": "^3.0.12", + "turf-bbox-polygon": "^3.0.12" + } + }, + "node_modules/turf-explode": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-helpers": "^3.0.12", + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-flip": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-grid": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "turf-point": "^2.0.0" + } + }, + "node_modules/turf-helpers": { + "version": "3.0.12", + "license": "MIT" + }, + "node_modules/turf-hex-grid": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-inside": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-invariant": "^3.0.12" + } + }, + "node_modules/turf-intersect": { + "version": "3.0.12", + "license": "ISC", + "dependencies": { + "jsts": "1.1.2" + } + }, + "node_modules/turf-invariant": { + "version": "3.0.12", + "license": "ISC" + }, + "node_modules/turf-isolines": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-bbox": "^3.0.12", + "turf-grid": "1.0.1", + "turf-helpers": "^3.0.12", + "turf-inside": "^3.0.12", + "turf-planepoint": "^3.0.12", + "turf-square": "^3.0.12", + "turf-tin": "^3.0.12" + } + }, + "node_modules/turf-kinks": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-line-distance": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-line-slice": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-bearing": "^3.0.12", + "turf-destination": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12", + "turf-point-on-line": "^3.0.12" + } + }, + "node_modules/turf-meta": { + "version": "3.0.12", + "license": "ISC" + }, + "node_modules/turf-midpoint": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-bearing": "^3.0.12", + "turf-destination": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-invariant": "^3.0.12" + } + }, + "node_modules/turf-nearest": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-distance": "^3.0.12" + } + }, + "node_modules/turf-planepoint": { + "version": "3.0.12", + "license": "MIT" + }, + "node_modules/turf-point": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "minimist": "^1.1.0" + }, + "bin": { + "turf-point": "bin/point.js" + } + }, + "node_modules/turf-point-grid": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-point-on-line": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-bearing": "^3.0.12", + "turf-destination": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-point-on-surface": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-center": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-explode": "^3.0.12", + "turf-helpers": "^3.0.12", + "turf-inside": "^3.0.12" + } + }, + "node_modules/turf-random": { + "version": "3.0.12", + "license": "ISC", + "dependencies": { + "geojson-random": "^0.2.2" + } + }, + "node_modules/turf-sample": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-simplify": { + "version": "3.0.12", + "license": "ISC", + "dependencies": { + "simplify-js": "^1.2.1" + } + }, + "node_modules/turf-square": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-square-grid": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-tag": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-inside": "^3.0.12" + } + }, + "node_modules/turf-tesselate": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "earcut": "^2.0.0", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-tin": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-triangle-grid": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-union": { + "version": "3.0.12", + "license": "ISC", + "dependencies": { + "jsts": "1.1.2" + } + }, + "node_modules/turf-within": { + "version": "3.0.12", + "license": "MIT", + "dependencies": { + "turf-helpers": "^3.0.12", + "turf-inside": "^3.0.12" + } + }, + "node_modules/two-product": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/two-sum": { + "version": "1.0.0", + "license": "MIT" + }, "node_modules/type-fest": { "version": "4.41.0", "license": "(MIT OR CC0-1.0)", @@ -10212,8 +10824,6 @@ }, "node_modules/typescript": { "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -10292,6 +10902,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/union-find": { + "version": "1.0.2", + "license": "MIT" + }, "node_modules/universal-user-agent": { "version": "7.0.3", "license": "ISC" @@ -10626,6 +11240,30 @@ } } }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/vite-plugin-full-reload/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "license": "MIT", @@ -10644,6 +11282,10 @@ "version": "3.0.1", "license": "BSD-2-Clause" }, + "node_modules/wgs84": { + "version": "0.0.0", + "license": "BSD-2-Clause" + }, "node_modules/whatwg-url": { "version": "5.0.0", "license": "MIT", diff --git a/package.json b/package.json index e36f7c9..862318c 100644 --- a/package.json +++ b/package.json @@ -2,15 +2,22 @@ "dependencies": { "@fontsource-variable/jetbrains-mono": "^5.2.8", "@maptiler/leaflet-maptilersdk": "^4.1.1", + "@turf/area": "^7.3.2", + "@turf/helpers": "^7.3.2", + "@types/bun": "^1.3.6", "@types/jquery": "^3.5.33", + "@types/turf": "^3.5.32", + "hono": "^4.11.5", "jquery": "^4.0.0", "lucide": "^0.563.0", "modern-normalize": "^3.0.1", "netlify-cli": "^23.13.5", + "turf": "^3.0.14", "vite": "^7.3.1" }, "devDependencies": { "@types/node": "^25.0.10", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vite-plugin-full-reload": "^1.2.0" } } diff --git a/server.ts b/server.ts new file mode 100644 index 0000000..acd670a --- /dev/null +++ b/server.ts @@ -0,0 +1,34 @@ +import { Hono } from "hono"; +import { upgradeWebSocket, websocket } from "hono/bun"; + +const app = new Hono(); + +app.get("/", async (c) => { + return c.json({ + message: "ok", + }); +}); + +app.get( + "/ws", + upgradeWebSocket((c) => { + return { + onOpen(event, ws) { + console.log("Server: Connection opened"); + ws.send("Hello!"); + }, + onClose: () => { + console.log("Server: Connection closed"); + }, + onMessage: (ev) => { + console.log(ev.data); + }, + }; + }), +); + +export default { + port: Bun.env.SERVER_PORT, + fetch: app.fetch, + websocket, +}; diff --git a/src/constants.ts b/src/constants.ts index 7dbdf72..7565406 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,3 +1 @@ -export const MAP_STYLE = "019be805-c88e-7c8b-9850-bc704d72e604"; -export const API_KEY = "8nmgHEIZQiIgqQj3RZNa"; export const INITIAL_ZOOM = 17; diff --git a/src/login.ts b/src/login.ts new file mode 100644 index 0000000..4fcd0fb --- /dev/null +++ b/src/login.ts @@ -0,0 +1,14 @@ +// STYLES +// import "modern-normalize/modern-normalize.css"; +// import "@fontsource-variable/jetbrains-mono"; +import "@/main.css"; +// import "@maptiler/sdk/dist/maptiler-sdk.css"; + +// LIBRARIES +// import $ from "jquery"; +// import { FilterSpecification, Map, config } from "@maptiler/sdk"; +// import { createIcons, Locate, LocateFixed } from "lucide"; +// import area from "@turf/area"; +// import { polygon } from "@turf/helpers"; + +console.log("login"); diff --git a/src/main.ts b/src/main.ts index e196b85..717c239 100644 --- a/src/main.ts +++ b/src/main.ts @@ -8,12 +8,17 @@ import "@maptiler/sdk/dist/maptiler-sdk.css"; import $ from "jquery"; import { FilterSpecification, Map, config } from "@maptiler/sdk"; import { createIcons, Locate, LocateFixed } from "lucide"; +import area from "@turf/area"; +import { polygon } from "@turf/helpers"; // PROJECT import { LAYERS } from "@/layers"; -import { API_KEY, MAP_STYLE } from "@/constants"; import { panToCurrentLocation } from "@/utilities/geo"; +// ENV +const API_KEY = import.meta.env.VITE_MAPTILER_API_KEY || ""; +const MAP_STYLE = import.meta.env.VITE_MAPTILER_STYLE; + createIcons({ icons: { Locate, @@ -21,13 +26,29 @@ createIcons({ }, }); +// TODO +// WEBSOCKET TBD!! +// const ws = new WebSocket(`ws://${import.meta.env.VITE_SERVER_URL}/ws`); +// ws.onopen = () => { +// console.log("opened"); +// }; +// ws.onmessage = (ev) => { +// console.log("il server dice"); +// console.log(ev.data); +// }; + config.apiKey = API_KEY; +interface SelectedFeature { + id: number; + area: number; +} + const $info = $("#layer"); const $lnglat = $("#lnglat"); const $selected = $("#selected"); -let selected: Array = []; +let selected: Array = []; const map = new Map({ container: "map", @@ -54,10 +75,7 @@ map.on("load", () => { map.addLayer(LAYERS.BUILDING_SELECT); map.addLayer(LAYERS.ROAD_HIGHLIGHT); - // console.log(map.getLayer("road_network")?.source); - // console.log(map.getLayer("road_network")?.sourceLayer); - // console.log(map.getLayer("road_network")?.paint); - + // Handle map hover. map.on("mousemove", (e) => { // Prende le features solo di questi livelli const features = map.queryRenderedFeatures(e.point, { @@ -65,7 +83,7 @@ map.on("load", () => { }); // Aggiorna latitudine e longitudine nel container al mouse over. - $lnglat.html(`${e.lngLat.lng} ${e.lngLat.lat}`); + $lnglat.html(`${e.lngLat.lng}
${e.lngLat.lat}`); if (features && features.length > 0) { // Prendo l'ID della top level feature in hover @@ -87,6 +105,7 @@ map.on("load", () => { } }); + // Handle map click. map.on("click", (e) => { const features = map.queryRenderedFeatures(e.point, { layers: ["building_matteo"], @@ -94,17 +113,45 @@ map.on("load", () => { if (features && features.length > 0) { const clicked = features[0]; - const clickedId = clicked.id; + const clickedId: number = + typeof clicked.id == "string" ? parseInt(clicked.id) : clicked.id || 0; + let clickedArea: number = 0.0; - if (!selected.includes(clickedId)) { - selected.push(clickedId); - } else { - selected.splice(selected.indexOf(clickedId), 1); + // TODO + // WEBSOCKET TBD! + // ws.send( + // JSON.stringify({ + // clicked: clickedId, + // }), + // ); + + // Calculate the area of the selected. + if ( + clicked.geometry.type == "Polygon" && + clicked.geometry.coordinates.length > 0 + ) { + let clickedCoords = clicked.geometry.coordinates[0]; + let clickedPolygon = polygon([clickedCoords]); + clickedArea = Math.trunc(area(clickedPolygon)); } + // Handle "selected list" with deletion. + const i = selected.findIndex((u) => u.id == clickedId); + if (i !== -1) { + selected.splice(i, 1); + } else { + selected.push({ + id: clickedId, + area: clickedArea, + }); + } + + // Update the "selected" list. const selectedList = $("
    "); - selected.forEach((id) => { - selectedList.append(`
  • ${id}
  • `); + selected.forEach((feature) => { + selectedList.append( + `
  • ${feature.id} (${feature.area} m2)
  • `, + ); }); $selected.empty().append(selectedList); @@ -112,9 +159,17 @@ map.on("load", () => { $selected.append("
    None
    "); } + // Sets the selected layer. if (clickedId) { map.setFilter(LAYERS.BUILDING_HIGHLIGHT.id, layerFilterEq()); - map.setFilter(LAYERS.BUILDING_SELECT.id, layerFilterIn(selected)); + map.setFilter( + LAYERS.BUILDING_SELECT.id, + layerFilterIn( + selected.map((s) => { + return s.id; + }), + ), + ); map.getCanvas().style.cursor = "pointer"; } } else { diff --git a/vite.config.ts b/vite.config.ts index 665993c..105b67f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,29 +1,46 @@ -import { defineConfig } from 'vite'; -import path from 'path'; +import { defineConfig } from "vite"; +import path from "path"; +import { resolve } from "path"; +import FullReload from "vite-plugin-full-reload"; export default defineConfig({ + plugins: [ + FullReload(["*.html"], { delay: 200 }), + ], + server: { + watch: { + usePolling: true, + }, + hmr: { + overlay: true, + }, + }, resolve: { alias: { - '@': path.resolve(__dirname, './src'), + "@": path.resolve(__dirname, "./src"), lucide: "lucide/dist/esm/lucide/src/lucide.js", }, }, build: { chunkSizeWarningLimit: 1600, rollupOptions: { + input: { + main: resolve(__dirname, "index.html"), + login: resolve(__dirname, "login.html"), + }, output: { manualChunks(id) { - if (id.includes('node_modules')) { - if (id.includes('maptiler')) { - return 'maptiler'; + if (id.includes("node_modules")) { + if (id.includes("maptiler")) { + return "maptiler"; } - if (id.includes('maplibre-gl')) { - return 'maplibre'; + if (id.includes("maplibre-gl")) { + return "maplibre"; } - if (id.includes('jquery')) { - return 'jquery'; + if (id.includes("jquery")) { + return "jquery"; } - return 'vendor'; + return "vendor"; } }, },