diff --git a/client/.gitignore b/client/.gitignore new file mode 100644 index 0000000..3b462cb --- /dev/null +++ b/client/.gitignore @@ -0,0 +1,23 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/client/.npmrc b/client/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/client/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/client/.prettierignore b/client/.prettierignore new file mode 100644 index 0000000..6562bcb --- /dev/null +++ b/client/.prettierignore @@ -0,0 +1,6 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lock +bun.lockb diff --git a/client/.prettierrc b/client/.prettierrc new file mode 100644 index 0000000..7ebb855 --- /dev/null +++ b/client/.prettierrc @@ -0,0 +1,15 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/client/README.md b/client/README.md new file mode 100644 index 0000000..b5b2950 --- /dev/null +++ b/client/README.md @@ -0,0 +1,38 @@ +# sv + +Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npx sv create + +# create a new project in my-app +npx sv create my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/client/bun.lock b/client/bun.lock new file mode 100644 index 0000000..5197b9b --- /dev/null +++ b/client/bun.lock @@ -0,0 +1,847 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "client", + "dependencies": { + "@lucide/svelte": "^0.510.0", + "maplibre-gl": "^5.5.0", + }, + "devDependencies": { + "@eslint/compat": "^1.2.5", + "@eslint/js": "^9.18.0", + "@sveltejs/adapter-auto": "^6.0.0", + "@sveltejs/kit": "^2.16.0", + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "@tailwindcss/vite": "^4.1.6", + "bits-ui": "^1.4.8", + "clsx": "^2.1.1", + "eslint": "^9.18.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-svelte": "^3.0.0", + "globals": "^16.0.0", + "paneforge": "^1.0.0-next.5", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.11", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "tailwind-merge": "^3.3.0", + "tailwind-variants": "^1.0.0", + "tailwindcss": "^4.1.6", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.0.0", + "typescript-eslint": "^8.20.0", + "vaul-svelte": "^1.0.0-next.7", + "vite": "^6.2.6", + }, + }, + }, + "packages": { + "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.7.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], + + "@eslint/compat": ["@eslint/compat@1.2.9", "", { "peerDependencies": { "eslint": "^9.10.0" }, "optionalPeers": ["eslint"] }, "sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA=="], + + "@eslint/config-array": ["@eslint/config-array@0.20.0", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.2.2", "", {}, "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg=="], + + "@eslint/core": ["@eslint/core@0.13.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="], + + "@eslint/js": ["@eslint/js@9.26.0", "", {}, "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.2.8", "", { "dependencies": { "@eslint/core": "^0.13.0", "levn": "^0.4.1" } }, "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA=="], + + "@floating-ui/core": ["@floating-ui/core@1.7.0", "", { "dependencies": { "@floating-ui/utils": "^0.2.9" } }, "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.0", "", { "dependencies": { "@floating-ui/core": "^1.7.0", "@floating-ui/utils": "^0.2.9" } }, "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.9", "", {}, "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="], + + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + + "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + + "@internationalized/date": ["@internationalized/date@3.8.0", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-J51AJ0fEL68hE4CwGPa6E0PO6JDaVLd8aln48xFCSy7CZkZc96dGEGmLs2OEEbBxcsVZtfrqkXJwI2/MSG8yKw=="], + + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + + "@lucide/svelte": ["@lucide/svelte@0.510.0", "", { "peerDependencies": { "svelte": "^5" } }, "sha512-1zj0aj9K+eBK0sMtDQh1HfL2Xv7EY+SemBWFMMmoVN4mZ9Swc3e5cGs20knwdgt46kZnlEI/a29tX//zpl64LA=="], + + "@mapbox/geojson-rewind": ["@mapbox/geojson-rewind@0.5.2", "", { "dependencies": { "get-stream": "^6.0.1", "minimist": "^1.2.6" }, "bin": { "geojson-rewind": "geojson-rewind" } }, "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA=="], + + "@mapbox/jsonlint-lines-primitives": ["@mapbox/jsonlint-lines-primitives@2.0.2", "", {}, "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ=="], + + "@mapbox/point-geometry": ["@mapbox/point-geometry@0.1.0", "", {}, "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ=="], + + "@mapbox/tiny-sdf": ["@mapbox/tiny-sdf@2.0.6", "", {}, "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA=="], + + "@mapbox/unitbezier": ["@mapbox/unitbezier@0.0.1", "", {}, "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw=="], + + "@mapbox/vector-tile": ["@mapbox/vector-tile@1.3.1", "", { "dependencies": { "@mapbox/point-geometry": "~0.1.0" } }, "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw=="], + + "@mapbox/whoots-js": ["@mapbox/whoots-js@3.1.0", "", {}, "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q=="], + + "@maplibre/maplibre-gl-style-spec": ["@maplibre/maplibre-gl-style-spec@23.2.2", "", { "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", "@mapbox/unitbezier": "^0.0.1", "json-stringify-pretty-compact": "^4.0.0", "minimist": "^1.2.8", "quickselect": "^3.0.0", "rw": "^1.3.3", "tinyqueue": "^3.0.0" }, "bin": { "gl-style-migrate": "dist/gl-style-migrate.mjs", "gl-style-validate": "dist/gl-style-validate.mjs", "gl-style-format": "dist/gl-style-format.mjs" } }, "sha512-kLcVlItPCULc20SM6pSVA7u8nST9xmQA8d7utc9j3KB0Tf/xhM4GgCn/QsZcmlbN/wW0ujyomDrvZ3/LbwvAmw=="], + + "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.11.2", "", { "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.3", "eventsource": "^3.0.2", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" } }, "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.40.2", "", { "os": "android", "cpu": "arm" }, "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.40.2", "", { "os": "android", "cpu": "arm64" }, "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.40.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.40.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.40.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.40.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.40.2", "", { "os": "linux", "cpu": "arm" }, "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.40.2", "", { "os": "linux", "cpu": "arm" }, "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.40.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.40.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg=="], + + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw=="], + + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.40.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.40.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.40.2", "", { "os": "linux", "cpu": "x64" }, "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.40.2", "", { "os": "linux", "cpu": "x64" }, "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.40.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.2", "", { "os": "win32", "cpu": "x64" }, "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA=="], + + "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.5", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ=="], + + "@sveltejs/adapter-auto": ["@sveltejs/adapter-auto@6.0.1", "", { "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-mcWud3pYGPWM2Pphdj8G9Qiq24nZ8L4LB7coCUckUEy5Y7wOWGJ/enaZ4AtJTcSm5dNK1rIkBRoqt+ae4zlxcQ=="], + + "@sveltejs/kit": ["@sveltejs/kit@2.21.0", "", { "dependencies": { "@sveltejs/acorn-typescript": "^1.0.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.1", "cookie": "^0.6.0", "devalue": "^5.1.0", "esm-env": "^1.2.2", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", "sirv": "^3.0.0" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0", "svelte": "^4.0.0 || ^5.0.0-next.0", "vite": "^5.0.3 || ^6.0.0" }, "bin": { "svelte-kit": "svelte-kit.js" } }, "sha512-kvu4h9qXduiPk1Q1oqFKDLFGu/7mslEYbVaqpbBcBxjlRJnvNCFwEvEwKt0Mx9TtSi8J77xRelvJobrGlst4nQ=="], + + "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@5.0.3", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", "debug": "^4.4.0", "deepmerge": "^4.3.1", "kleur": "^4.1.5", "magic-string": "^0.30.15", "vitefu": "^1.0.4" }, "peerDependencies": { "svelte": "^5.0.0", "vite": "^6.0.0" } }, "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw=="], + + "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@4.0.1", "", { "dependencies": { "debug": "^4.3.7" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^5.0.0", "svelte": "^5.0.0", "vite": "^6.0.0" } }, "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw=="], + + "@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.1.6", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "lightningcss": "1.29.2", "magic-string": "^0.30.17", "source-map-js": "^1.2.1", "tailwindcss": "4.1.6" } }, "sha512-ed6zQbgmKsjsVvodAS1q1Ld2BolEuxJOSyyNc+vhkjdmfNUDCmQnlXBfQkHrlzNmslxHsQU/bFmzcEbv4xXsLg=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.6", "", { "dependencies": { "detect-libc": "^2.0.4", "tar": "^7.4.3" }, "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.6", "@tailwindcss/oxide-darwin-arm64": "4.1.6", "@tailwindcss/oxide-darwin-x64": "4.1.6", "@tailwindcss/oxide-freebsd-x64": "4.1.6", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.6", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.6", "@tailwindcss/oxide-linux-arm64-musl": "4.1.6", "@tailwindcss/oxide-linux-x64-gnu": "4.1.6", "@tailwindcss/oxide-linux-x64-musl": "4.1.6", "@tailwindcss/oxide-wasm32-wasi": "4.1.6", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.6", "@tailwindcss/oxide-win32-x64-msvc": "4.1.6" } }, "sha512-0bpEBQiGx+227fW4G0fLQ8vuvyy5rsB1YIYNapTq3aRsJ9taF3f5cCaovDjN5pUGKKzcpMrZst/mhNaKAPOHOA=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.6", "", { "os": "android", "cpu": "arm64" }, "sha512-VHwwPiwXtdIvOvqT/0/FLH/pizTVu78FOnI9jQo64kSAikFSZT7K4pjyzoDpSMaveJTGyAKvDjuhxJxKfmvjiQ=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-weINOCcqv1HVBIGptNrk7c6lWgSFFiQMcCpKM4tnVi5x8OY2v1FrV76jwLukfT6pL1hyajc06tyVmZFYXoxvhQ=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-3FzekhHG0ww1zQjQ1lPoq0wPrAIVXAbUkWdWM8u5BnYFZgb9ja5ejBqyTgjpo5mfy0hFOoMnMuVDI+7CXhXZaQ=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-4m5F5lpkBZhVQJq53oe5XgJ+aFYWdrgkMwViHjRsES3KEu2m1udR21B1I77RUqie0ZYNscFzY1v9aDssMBZ/1w=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.6", "", { "os": "linux", "cpu": "arm" }, "sha512-qU0rHnA9P/ZoaDKouU1oGPxPWzDKtIfX7eOGi5jOWJKdxieUJdVV+CxWZOpDWlYTd4N3sFQvcnVLJWJ1cLP5TA=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-jXy3TSTrbfgyd3UxPQeXC3wm8DAgmigzar99Km9Sf6L2OFfn/k+u3VqmpgHQw5QNfCpPe43em6Q7V76Wx7ogIQ=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-8kjivE5xW0qAQ9HX9reVFmZj3t+VmljDLVRJpVBEoTR+3bKMnvC7iLcoSGNIUJGOZy1mLVq7x/gerVg0T+IsYw=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.6", "", { "os": "linux", "cpu": "x64" }, "sha512-A4spQhwnWVpjWDLXnOW9PSinO2PTKJQNRmL/aIl2U/O+RARls8doDfs6R41+DAXK0ccacvRyDpR46aVQJJCoCg=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.6", "", { "os": "linux", "cpu": "x64" }, "sha512-YRee+6ZqdzgiQAHVSLfl3RYmqeeaWVCk796MhXhLQu2kJu2COHBkqlqsqKYx3p8Hmk5pGCQd2jTAoMWWFeyG2A=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.6", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@emnapi/wasi-threads": "^1.0.2", "@napi-rs/wasm-runtime": "^0.2.9", "@tybys/wasm-util": "^0.9.0", "tslib": "^2.8.0" }, "cpu": "none" }, "sha512-qAp4ooTYrBQ5pk5jgg54/U1rCJ/9FLYOkkQ/nTE+bVMseMfB6O7J8zb19YTpWuu4UdfRf5zzOrNKfl6T64MNrQ=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-nqpDWk0Xr8ELO/nfRUDjk1pc9wDJ3ObeDdNMHLaymc4PJBWj11gdPCWZFKSK2AVKjJQC7J2EfmSmf47GN7OuLg=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.6", "", { "os": "win32", "cpu": "x64" }, "sha512-5k9xF33xkfKpo9wCvYcegQ21VwIBU1/qEbYlVukfEIyQbEA47uK8AAwS7NVjNE3vHzcmxMYwd0l6L4pPjjm1rQ=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.1.6", "", { "dependencies": { "@tailwindcss/node": "4.1.6", "@tailwindcss/oxide": "4.1.6", "tailwindcss": "4.1.6" }, "peerDependencies": { "vite": "^5.2.0 || ^6" } }, "sha512-zjtqjDeY1w3g2beYQtrMAf51n5G7o+UwmyOjtsDMP7t6XyoRMOidcoKP32ps7AkNOHIXEOK0bhIC05dj8oJp4w=="], + + "@types/cookie": ["@types/cookie@0.6.0", "", {}, "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="], + + "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], + + "@types/geojson-vt": ["@types/geojson-vt@3.2.5", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/mapbox__point-geometry": ["@types/mapbox__point-geometry@0.1.4", "", {}, "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA=="], + + "@types/mapbox__vector-tile": ["@types/mapbox__vector-tile@1.3.4", "", { "dependencies": { "@types/geojson": "*", "@types/mapbox__point-geometry": "*", "@types/pbf": "*" } }, "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg=="], + + "@types/pbf": ["@types/pbf@3.0.5", "", {}, "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA=="], + + "@types/supercluster": ["@types/supercluster@7.1.3", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.32.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.32.1", "@typescript-eslint/type-utils": "8.32.1", "@typescript-eslint/utils": "8.32.1", "@typescript-eslint/visitor-keys": "8.32.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.32.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.32.1", "@typescript-eslint/types": "8.32.1", "@typescript-eslint/typescript-estree": "8.32.1", "@typescript-eslint/visitor-keys": "8.32.1", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.32.1", "", { "dependencies": { "@typescript-eslint/types": "8.32.1", "@typescript-eslint/visitor-keys": "8.32.1" } }, "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.32.1", "", { "dependencies": { "@typescript-eslint/typescript-estree": "8.32.1", "@typescript-eslint/utils": "8.32.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.32.1", "", {}, "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.32.1", "", { "dependencies": { "@typescript-eslint/types": "8.32.1", "@typescript-eslint/visitor-keys": "8.32.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.32.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.32.1", "@typescript-eslint/types": "8.32.1", "@typescript-eslint/typescript-estree": "8.32.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.32.1", "", { "dependencies": { "@typescript-eslint/types": "8.32.1", "eslint-visitor-keys": "^4.2.0" } }, "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w=="], + + "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], + + "acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "bits-ui": ["bits-ui@1.4.8", "", { "dependencies": { "@floating-ui/core": "^1.6.4", "@floating-ui/dom": "^1.6.7", "@internationalized/date": "^3.5.6", "esm-env": "^1.1.2", "runed": "^0.23.2", "svelte-toolbelt": "^0.7.1", "tabbable": "^6.2.0" }, "peerDependencies": { "svelte": "^5.11.0" } }, "sha512-j34GsdSsJ+ZBl9h/70VkufvrlEgTKQSZvm80eM5VvuhLJWvpfEpn9+k0FVmtDQl9NSPgEVtI9imYhm8nW9Nj/w=="], + + "body-parser": ["body-parser@2.2.0", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.0", "http-errors": "^2.0.0", "iconv-lite": "^0.6.3", "on-finished": "^2.4.1", "qs": "^6.14.0", "raw-body": "^3.0.0", "type-is": "^2.0.0" } }, "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg=="], + + "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "content-disposition": ["content-disposition@1.0.0", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg=="], + + "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + + "cookie": ["cookie@0.6.0", "", {}, "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="], + + "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], + + "cors": ["cors@2.8.5", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + + "devalue": ["devalue@5.1.1", "", {}, "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw=="], + + "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.1", "", {}, "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw=="], + + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + + "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], + + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@9.26.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.0", "@eslint/config-helpers": "^0.2.1", "@eslint/core": "^0.13.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.26.0", "@eslint/plugin-kit": "^0.2.8", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@modelcontextprotocol/sdk": "^1.8.0", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.3.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "zod": "^3.24.2" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ=="], + + "eslint-config-prettier": ["eslint-config-prettier@10.1.5", "", { "peerDependencies": { "eslint": ">=7.0.0" }, "bin": { "eslint-config-prettier": "bin/cli.js" } }, "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw=="], + + "eslint-plugin-svelte": ["eslint-plugin-svelte@3.6.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.1", "@jridgewell/sourcemap-codec": "^1.5.0", "esutils": "^2.0.3", "known-css-properties": "^0.36.0", "postcss": "^8.4.49", "postcss-load-config": "^3.1.4", "postcss-safe-parser": "^7.0.0", "semver": "^7.6.3", "svelte-eslint-parser": "^1.1.1" }, "peerDependencies": { "eslint": "^8.57.1 || ^9.0.0", "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" }, "optionalPeers": ["svelte"] }, "sha512-IIf6Cj6yQuCwL7Qd8bX13BZspz+DQsOkClozMF9EkW20FSxI75Ndd5ZzbviCn32DdXRo9FUWXn+YMIL46qPOOg=="], + + "eslint-scope": ["eslint-scope@8.3.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="], + + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], + + "espree": ["espree@10.3.0", "", { "dependencies": { "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.0" } }, "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg=="], + + "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], + + "esrap": ["esrap@1.4.6", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], + + "eventsource-parser": ["eventsource-parser@3.0.1", "", {}, "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA=="], + + "express": ["express@5.1.0", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.0", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA=="], + + "express-rate-limit": ["express-rate-limit@7.5.0", "", { "peerDependencies": { "express": "^4.11 || 5 || ^5.0.0-beta.1" } }, "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], + + "fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="], + + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "finalhandler": ["finalhandler@2.1.0", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + + "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "geojson-vt": ["geojson-vt@4.0.2", "", {}, "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + + "gl-matrix": ["gl-matrix@3.4.3", "", {}, "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "global-prefix": ["global-prefix@4.0.0", "", { "dependencies": { "ini": "^4.1.3", "kind-of": "^6.0.3", "which": "^4.0.0" } }, "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA=="], + + "globals": ["globals@16.1.0", "", {}, "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ini": ["ini@4.1.3", "", {}, "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg=="], + + "inline-style-parser": ["inline-style-parser@0.2.4", "", {}, "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="], + + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], + + "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], + + "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "json-stringify-pretty-compact": ["json-stringify-pretty-compact@4.0.0", "", {}, "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q=="], + + "kdbush": ["kdbush@4.0.2", "", {}, "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + + "known-css-properties": ["known-css-properties@0.36.0", "", {}, "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA=="], + + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "lightningcss": ["lightningcss@1.29.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.2", "lightningcss-darwin-x64": "1.29.2", "lightningcss-freebsd-x64": "1.29.2", "lightningcss-linux-arm-gnueabihf": "1.29.2", "lightningcss-linux-arm64-gnu": "1.29.2", "lightningcss-linux-arm64-musl": "1.29.2", "lightningcss-linux-x64-gnu": "1.29.2", "lightningcss-linux-x64-musl": "1.29.2", "lightningcss-win32-arm64-msvc": "1.29.2", "lightningcss-win32-x64-msvc": "1.29.2" } }, "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.29.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.29.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.29.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.29.2", "", { "os": "linux", "cpu": "arm" }, "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.29.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.29.2", "", { "os": "win32", "cpu": "x64" }, "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA=="], + + "lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], + + "locate-character": ["locate-character@3.0.0", "", {}, "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], + + "maplibre-gl": ["maplibre-gl@5.5.0", "", { "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", "@mapbox/point-geometry": "^0.1.0", "@mapbox/tiny-sdf": "^2.0.6", "@mapbox/unitbezier": "^0.0.1", "@mapbox/vector-tile": "^1.3.1", "@mapbox/whoots-js": "^3.1.0", "@maplibre/maplibre-gl-style-spec": "^23.2.2", "@types/geojson": "^7946.0.16", "@types/geojson-vt": "3.2.5", "@types/mapbox__point-geometry": "^0.1.4", "@types/mapbox__vector-tile": "^1.3.4", "@types/pbf": "^3.0.5", "@types/supercluster": "^7.1.3", "earcut": "^3.0.1", "geojson-vt": "^4.0.2", "gl-matrix": "^3.4.3", "global-prefix": "^4.0.0", "kdbush": "^4.0.2", "murmurhash-js": "^1.0.0", "pbf": "^3.3.0", "potpack": "^2.0.0", "quickselect": "^3.0.0", "supercluster": "^8.0.1", "tinyqueue": "^3.0.0", "vt-pbf": "^3.1.3" } }, "sha512-p8AOPuzzqn1ZA9gcXxKw0IED715we/2Owa/YUr6PANmgMvNMe/JG+V/C1hRra43Wm62Biz+Aa8AgbOLJimA8tA=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], + + "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "mime-types": ["mime-types@3.0.1", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="], + + "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], + + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "murmurhash-js": ["murmurhash-js@1.0.0", "", {}, "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "paneforge": ["paneforge@1.0.0-next.5", "", { "dependencies": { "runed": "^0.23.4", "svelte-toolbelt": "^0.7.1" }, "peerDependencies": { "svelte": "^5.20.0" } }, "sha512-1ArDM+GMEO+o6pixEAFobhTkWkyxUDdHyw2bKruvQIXBStJmdRP7HoV4jNBZ/2i9UHDzmczxJzA3D2tKa91phw=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-to-regexp": ["path-to-regexp@8.2.0", "", {}, "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ=="], + + "pbf": ["pbf@3.3.0", "", { "dependencies": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" }, "bin": { "pbf": "bin/pbf" } }, "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "pkce-challenge": ["pkce-challenge@5.0.0", "", {}, "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ=="], + + "postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], + + "postcss-load-config": ["postcss-load-config@3.1.4", "", { "dependencies": { "lilconfig": "^2.0.5", "yaml": "^1.10.2" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg=="], + + "postcss-safe-parser": ["postcss-safe-parser@7.0.1", "", { "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A=="], + + "postcss-scss": ["postcss-scss@4.0.9", "", { "peerDependencies": { "postcss": "^8.4.29" } }, "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A=="], + + "postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "potpack": ["potpack@2.0.0", "", {}, "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw=="], + + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], + + "prettier-plugin-svelte": ["prettier-plugin-svelte@3.3.3", "", { "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" } }, "sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw=="], + + "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.6.11", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-import-sort": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-style-order": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-import-sort", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-style-order", "prettier-plugin-svelte"] }, "sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA=="], + + "protocol-buffers-schema": ["protocol-buffers-schema@3.6.0", "", {}, "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw=="], + + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "quickselect": ["quickselect@3.0.0", "", {}, "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g=="], + + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + + "raw-body": ["raw-body@3.0.0", "", { "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.6.3", "unpipe": "1.0.0" } }, "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g=="], + + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "resolve-protobuf-schema": ["resolve-protobuf-schema@2.1.0", "", { "dependencies": { "protocol-buffers-schema": "^3.3.1" } }, "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rollup": ["rollup@4.40.2", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.2", "@rollup/rollup-android-arm64": "4.40.2", "@rollup/rollup-darwin-arm64": "4.40.2", "@rollup/rollup-darwin-x64": "4.40.2", "@rollup/rollup-freebsd-arm64": "4.40.2", "@rollup/rollup-freebsd-x64": "4.40.2", "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", "@rollup/rollup-linux-arm-musleabihf": "4.40.2", "@rollup/rollup-linux-arm64-gnu": "4.40.2", "@rollup/rollup-linux-arm64-musl": "4.40.2", "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", "@rollup/rollup-linux-riscv64-gnu": "4.40.2", "@rollup/rollup-linux-riscv64-musl": "4.40.2", "@rollup/rollup-linux-s390x-gnu": "4.40.2", "@rollup/rollup-linux-x64-gnu": "4.40.2", "@rollup/rollup-linux-x64-musl": "4.40.2", "@rollup/rollup-win32-arm64-msvc": "4.40.2", "@rollup/rollup-win32-ia32-msvc": "4.40.2", "@rollup/rollup-win32-x64-msvc": "4.40.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg=="], + + "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="], + + "rw": ["rw@1.3.3", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="], + + "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "send": ["send@1.2.0", "", { "dependencies": { "debug": "^4.3.5", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.0", "mime-types": "^3.0.1", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.1" } }, "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw=="], + + "serve-static": ["serve-static@2.2.0", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ=="], + + "set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="], + + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "sirv": ["sirv@3.0.1", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "style-to-object": ["style-to-object@1.0.8", "", { "dependencies": { "inline-style-parser": "0.2.4" } }, "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g=="], + + "supercluster": ["supercluster@8.0.1", "", { "dependencies": { "kdbush": "^4.0.2" } }, "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "svelte": ["svelte@5.28.6", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^1.4.6", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-9qqr7mw8YR9PAnxGFfzCK6PUlNGtns7wVavrhnxyf3fpB1mP/Ol55Z2UnIapsSzNNl3k9qw7cZ22PdE8+xT/jQ=="], + + "svelte-check": ["svelte-check@4.1.7", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-1jX4BzXrQJhC/Jt3SqYf6Ntu//vmfc6VWp07JkRfK2nn+22yIblspVUo96gzMkg0Zov8lQicxhxsMzOctwcMQQ=="], + + "svelte-eslint-parser": ["svelte-eslint-parser@1.1.3", "", { "dependencies": { "eslint-scope": "^8.2.0", "eslint-visitor-keys": "^4.0.0", "espree": "^10.0.0", "postcss": "^8.4.49", "postcss-scss": "^4.0.9", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" }, "optionalPeers": ["svelte"] }, "sha512-DUc/z/vk+AFVoxGv54+BOBFqUrmUgNg2gSO2YqrE3OL6ro19/0azPmQj/4wN3s9RxuF5l7G0162q/Ddk4LJhZA=="], + + "svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.23.2", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="], + + "tabbable": ["tabbable@6.2.0", "", {}, "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="], + + "tailwind-merge": ["tailwind-merge@3.3.0", "", {}, "sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ=="], + + "tailwind-variants": ["tailwind-variants@1.0.0", "", { "dependencies": { "tailwind-merge": "3.0.2" }, "peerDependencies": { "tailwindcss": "*" } }, "sha512-2WSbv4ulEEyuBKomOunut65D8UZwxrHoRfYnxGcQNnHqlSCp2+B7Yz2W+yrNDrxRodOXtGD/1oCcKGNBnUqMqA=="], + + "tailwindcss": ["tailwindcss@4.1.6", "", {}, "sha512-j0cGLTreM6u4OWzBeLBpycK0WIh8w7kSwcUsQZoGLHZ7xDTdM69lN64AgoIEEwFi0tnhs4wSykUa5YWxAzgFYg=="], + + "tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="], + + "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], + + "tar": ["tar@7.4.3", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.0.1", "mkdirp": "^3.0.1", "yallist": "^5.0.0" } }, "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw=="], + + "tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], + + "tinyqueue": ["tinyqueue@3.0.0", "", {}, "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + + "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], + + "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "typescript-eslint": ["typescript-eslint@8.32.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.32.1", "@typescript-eslint/parser": "8.32.1", "@typescript-eslint/utils": "8.32.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg=="], + + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + + "vaul-svelte": ["vaul-svelte@1.0.0-next.7", "", { "dependencies": { "runed": "^0.23.2", "svelte-toolbelt": "^0.7.1" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-7zN7Bi3dFQixvvbUJY9uGDe7Ws/dGZeBQR2pXdXmzQiakjrxBvWo0QrmsX3HK+VH+SZOltz378cmgmCS9f9rSg=="], + + "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "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-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], + + "vitefu": ["vitefu@1.0.6", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["vite"] }, "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA=="], + + "vt-pbf": ["vt-pbf@3.1.3", "", { "dependencies": { "@mapbox/point-geometry": "0.1.0", "@mapbox/vector-tile": "^1.3.1", "pbf": "^3.2.1" } }, "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], + + "yaml": ["yaml@1.10.2", "", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "zimmerframe": ["zimmerframe@1.1.2", "", {}, "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w=="], + + "zod": ["zod@3.24.4", "", {}, "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg=="], + + "zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], + + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + + "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.4.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" }, "bundled": true }, "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="], + + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.9", "", { "dependencies": { "@emnapi/core": "^1.4.0", "@emnapi/runtime": "^1.4.0", "@tybys/wasm-util": "^0.9.0" }, "bundled": true }, "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.4", "", {}, "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "global-prefix/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], + + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "tailwind-variants/tailwind-merge": ["tailwind-merge@3.0.2", "", {}, "sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "global-prefix/which/isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], + } +} diff --git a/client/components.json b/client/components.json new file mode 100644 index 0000000..4106aaa --- /dev/null +++ b/client/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://next.shadcn-svelte.com/schema.json", + "style": "default", + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app.css", + "baseColor": "zinc" + }, + "aliases": { + "components": "$lib/components", + "utils": "$lib/utils", + "ui": "$lib/components/ui", + "hooks": "$lib/hooks" + }, + "typescript": true, + "registry": "https://next.shadcn-svelte.com/registry" +} diff --git a/client/eslint.config.js b/client/eslint.config.js new file mode 100644 index 0000000..ef07d32 --- /dev/null +++ b/client/eslint.config.js @@ -0,0 +1,36 @@ +import prettier from 'eslint-config-prettier'; +import js from '@eslint/js'; +import { includeIgnoreFile } from '@eslint/compat'; +import svelte from 'eslint-plugin-svelte'; +import globals from 'globals'; +import { fileURLToPath } from 'node:url'; +import ts from 'typescript-eslint'; +import svelteConfig from './svelte.config.js'; + +const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); + +export default ts.config( + includeIgnoreFile(gitignorePath), + js.configs.recommended, + ...ts.configs.recommended, + ...svelte.configs.recommended, + prettier, + ...svelte.configs.prettier, + { + languageOptions: { + globals: { ...globals.browser, ...globals.node } + }, + rules: { 'no-undef': 'off' } + }, + { + files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], + languageOptions: { + parserOptions: { + projectService: true, + extraFileExtensions: ['.svelte'], + parser: ts.parser, + svelteConfig + } + } + } +); diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..49075fd --- /dev/null +++ b/client/package.json @@ -0,0 +1,48 @@ +{ + "name": "client", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check . && eslint ." + }, + "devDependencies": { + "@eslint/compat": "^1.2.5", + "@eslint/js": "^9.18.0", + "@sveltejs/adapter-auto": "^6.0.0", + "@sveltejs/kit": "^2.16.0", + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "@tailwindcss/vite": "^4.1.6", + "bits-ui": "^1.4.8", + "clsx": "^2.1.1", + "eslint": "^9.18.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-svelte": "^3.0.0", + "globals": "^16.0.0", + "paneforge": "^1.0.0-next.5", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.11", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "tailwind-merge": "^3.3.0", + "tailwind-variants": "^1.0.0", + "tailwindcss": "^4.1.6", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.0.0", + "typescript-eslint": "^8.20.0", + "vaul-svelte": "^1.0.0-next.7", + "vite": "^6.2.6" + }, + "dependencies": { + "@lucide/svelte": "^0.510.0", + "maplibre-gl": "^5.5.0" + } +} diff --git a/client/src/app.css b/client/src/app.css new file mode 100644 index 0000000..d8b13b5 --- /dev/null +++ b/client/src/app.css @@ -0,0 +1,75 @@ +@import 'tailwindcss'; +@import 'maplibre-gl/dist/maplibre-gl.css'; +@config "../tailwind.config.ts"; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + --primary: 240 5.9% 10%; + --primary-foreground: 0 0% 98%; + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + --destructive: 0 72.2% 50.6%; + --destructive-foreground: 0 0% 98%; + --ring: 240 10% 3.9%; + --radius: 0.5rem; + --sidebar-background: 0 0% 98%; + --sidebar-foreground: 240 5.3% 26.1%; + --sidebar-primary: 240 5.9% 10%; + --sidebar-primary-foreground: 0 0% 98%; + --sidebar-accent: 240 4.8% 95.9%; + --sidebar-accent-foreground: 240 5.9% 10%; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8%; + } + + .dark { + --background: 240 10% 3.9%; + --foreground: 0 0% 98%; + --muted: 240 3.7% 15.9%; + --muted-foreground: 240 5% 64.9%; + --popover: 240 10% 3.9%; + --popover-foreground: 0 0% 98%; + --card: 240 10% 3.9%; + --card-foreground: 0 0% 98%; + --border: 240 3.7% 15.9%; + --input: 240 3.7% 15.9%; + --primary: 0 0% 98%; + --primary-foreground: 240 5.9% 10%; + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + --accent: 240 3.7% 15.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --ring: 240 4.9% 83.9%; + --sidebar-background: 240 5.9% 10%; + --sidebar-foreground: 240 4.8% 95.9%; + --sidebar-primary: 224.3 76.3% 48%; + --sidebar-primary-foreground: 0 0% 100%; + --sidebar-accent: 240 3.7% 15.9%; + --sidebar-accent-foreground: 240 4.8% 95.9%; + --sidebar-border: 240 3.7% 15.9%; + --sidebar-ring: 217.2 91.2% 59.8%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/client/src/app.d.ts b/client/src/app.d.ts new file mode 100644 index 0000000..da08e6d --- /dev/null +++ b/client/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/client/src/app.html b/client/src/app.html new file mode 100644 index 0000000..5e6a4be --- /dev/null +++ b/client/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/client/src/lib/Map.svelte b/client/src/lib/Map.svelte new file mode 100644 index 0000000..e30ad2c --- /dev/null +++ b/client/src/lib/Map.svelte @@ -0,0 +1,61 @@ + + +
+
+ {#if map} + +
+ +
+ + +
+ +
+ +
+ {/if} +
+
+
diff --git a/client/src/lib/ToolbarProductSelector.svelte b/client/src/lib/ToolbarProductSelector.svelte new file mode 100644 index 0000000..978bbe1 --- /dev/null +++ b/client/src/lib/ToolbarProductSelector.svelte @@ -0,0 +1,161 @@ + + + + + + + {#if selectedPrimaryLayer !== null} + {#if pickingSiteForCategory} + Select site for {selectedPrimaryLayer}... + {:else if selectedSite} + {selectedSite} - {selectedPrimaryLayer} + {:else} + {selectedPrimaryLayer} + {/if} + {:else if currentlySelectingCategory} + Select data at {selectedSite}... + {:else} + No layer selected + {/if} + + + {#if selectedPrimaryLayer !== null}{:else} +

Click to select data

+ {/if} +
+
+
+ + {#if currentlySelectingCategory && selectedSite} + + Data available at {selectedSite} + + {#each currentlySelectingCategory as data (data.id)} + { + selectedPrimaryLayer = data.id; + }}>{data.layer} + {/each} + + + {/if} + + Radar Source + + + {#each categories as item (item.id)} + {#if item.category} + {#if !item.singlesite} + + {item.category} + + {#each item.children as layer (layer.id)} + { + selectedPrimaryLayer = layer.id; + pickingSiteForCategory = false; + currentlySelectingCategory = null; + selectedSite = null; + if (currentlySelectingFor) { + if (map.getLayer(`select-${currentlySelectingFor}`)) { + map.removeLayer(`select-${currentlySelectingFor}`); + } + } + }} + > + {layer.layer} + + {/each} + + + {:else} + { + if (currentlySelectingFor) { + if (map.getLayer(`select-${currentlySelectingFor}`)) { + map.removeLayer(`select-${currentlySelectingFor}`); + } + } + selectedPrimaryLayer = item.id; + pickingSiteForCategory = true; + currentlySelectingCategory = item.children; + selectedSite = null; + if (!map.getSource(item.id)) { + map.addSource(item.id, { + type: 'geojson', + data: siteListToGeoJson(item.sites) + }); + } + map.addLayer({ + id: `select-${item.id}`, + type: 'symbol', + source: item.id, + layout: { + 'icon-image': 'radar-rect-gray', + 'text-field': ['get', 'icao'], + 'text-size': 13, + 'icon-size': 0.23 + }, + paint: { + 'text-color': '#000000' + } + }); + currentlySelectingFor = item.id; + map.on('click', `select-${item.id}`, (e) => { + if (e && e.features) { + map.flyTo({ + // @ts-expect-error it's fine, shhhh + center: e.features[0].geometry.coordinates, + zoom: 5 + }); + // did we already have a site set? + let alreadyHadSite = selectedSite != null; + pickingSiteForCategory = false; + selectedSite = e.features[0].properties.icao; + if (!alreadyHadSite) { + selectedPrimaryLayer = null; + open = true; + } // preserve the layer the user had if they click while already selected. + } + }); + map.on('mouseenter', `select-${item.id}`, () => { + map.getCanvas().style.cursor = 'pointer'; + }); + map.on('mouseleave', `select-${item.id}`, () => { + map.getCanvas().style.cursor = ''; + }); + }}>{item.category}... + {/if} + {/if} + {/each} + + +
diff --git a/client/src/lib/components/ui/badge/badge.svelte b/client/src/lib/components/ui/badge/badge.svelte new file mode 100644 index 0000000..da26104 --- /dev/null +++ b/client/src/lib/components/ui/badge/badge.svelte @@ -0,0 +1,50 @@ + + + + + + {@render children?.()} + diff --git a/client/src/lib/components/ui/badge/index.ts b/client/src/lib/components/ui/badge/index.ts new file mode 100644 index 0000000..64e0aa9 --- /dev/null +++ b/client/src/lib/components/ui/badge/index.ts @@ -0,0 +1,2 @@ +export { default as Badge } from "./badge.svelte"; +export { badgeVariants, type BadgeVariant } from "./badge.svelte"; diff --git a/client/src/lib/components/ui/button/button.svelte b/client/src/lib/components/ui/button/button.svelte new file mode 100644 index 0000000..22ab2d0 --- /dev/null +++ b/client/src/lib/components/ui/button/button.svelte @@ -0,0 +1,74 @@ + + + + +{#if href} + + {@render children?.()} + +{:else} + +{/if} diff --git a/client/src/lib/components/ui/button/index.ts b/client/src/lib/components/ui/button/index.ts new file mode 100644 index 0000000..fb585d7 --- /dev/null +++ b/client/src/lib/components/ui/button/index.ts @@ -0,0 +1,17 @@ +import Root, { + type ButtonProps, + type ButtonSize, + type ButtonVariant, + buttonVariants, +} from "./button.svelte"; + +export { + Root, + type ButtonProps as Props, + // + Root as Button, + buttonVariants, + type ButtonProps, + type ButtonSize, + type ButtonVariant, +}; diff --git a/client/src/lib/components/ui/checkbox/checkbox.svelte b/client/src/lib/components/ui/checkbox/checkbox.svelte new file mode 100644 index 0000000..2395094 --- /dev/null +++ b/client/src/lib/components/ui/checkbox/checkbox.svelte @@ -0,0 +1,35 @@ + + + + {#snippet children({ checked, indeterminate })} +
+ {#if indeterminate} + + {:else} + + {/if} +
+ {/snippet} +
diff --git a/client/src/lib/components/ui/checkbox/index.ts b/client/src/lib/components/ui/checkbox/index.ts new file mode 100644 index 0000000..6d92d94 --- /dev/null +++ b/client/src/lib/components/ui/checkbox/index.ts @@ -0,0 +1,6 @@ +import Root from "./checkbox.svelte"; +export { + Root, + // + Root as Checkbox, +}; diff --git a/client/src/lib/components/ui/command/command-dialog.svelte b/client/src/lib/components/ui/command/command-dialog.svelte new file mode 100644 index 0000000..be6562b --- /dev/null +++ b/client/src/lib/components/ui/command/command-dialog.svelte @@ -0,0 +1,35 @@ + + + + + + + diff --git a/client/src/lib/components/ui/command/command-empty.svelte b/client/src/lib/components/ui/command/command-empty.svelte new file mode 100644 index 0000000..5d86afe --- /dev/null +++ b/client/src/lib/components/ui/command/command-empty.svelte @@ -0,0 +1,12 @@ + + + diff --git a/client/src/lib/components/ui/command/command-group.svelte b/client/src/lib/components/ui/command/command-group.svelte new file mode 100644 index 0000000..6ddc667 --- /dev/null +++ b/client/src/lib/components/ui/command/command-group.svelte @@ -0,0 +1,31 @@ + + + + {#if heading} + + {heading} + + {/if} + + diff --git a/client/src/lib/components/ui/command/command-input.svelte b/client/src/lib/components/ui/command/command-input.svelte new file mode 100644 index 0000000..f012d04 --- /dev/null +++ b/client/src/lib/components/ui/command/command-input.svelte @@ -0,0 +1,25 @@ + + +
+ + +
diff --git a/client/src/lib/components/ui/command/command-item.svelte b/client/src/lib/components/ui/command/command-item.svelte new file mode 100644 index 0000000..afa84fb --- /dev/null +++ b/client/src/lib/components/ui/command/command-item.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/command/command-link-item.svelte b/client/src/lib/components/ui/command/command-link-item.svelte new file mode 100644 index 0000000..aaaaaca --- /dev/null +++ b/client/src/lib/components/ui/command/command-link-item.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/command/command-list.svelte b/client/src/lib/components/ui/command/command-list.svelte new file mode 100644 index 0000000..4a07321 --- /dev/null +++ b/client/src/lib/components/ui/command/command-list.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/command/command-separator.svelte b/client/src/lib/components/ui/command/command-separator.svelte new file mode 100644 index 0000000..526777b --- /dev/null +++ b/client/src/lib/components/ui/command/command-separator.svelte @@ -0,0 +1,12 @@ + + + diff --git a/client/src/lib/components/ui/command/command-shortcut.svelte b/client/src/lib/components/ui/command/command-shortcut.svelte new file mode 100644 index 0000000..f09693d --- /dev/null +++ b/client/src/lib/components/ui/command/command-shortcut.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/client/src/lib/components/ui/command/command.svelte b/client/src/lib/components/ui/command/command.svelte new file mode 100644 index 0000000..feff690 --- /dev/null +++ b/client/src/lib/components/ui/command/command.svelte @@ -0,0 +1,21 @@ + + + diff --git a/client/src/lib/components/ui/command/index.ts b/client/src/lib/components/ui/command/index.ts new file mode 100644 index 0000000..d3dbade --- /dev/null +++ b/client/src/lib/components/ui/command/index.ts @@ -0,0 +1,40 @@ +import { Command as CommandPrimitive } from "bits-ui"; + +import Root from "./command.svelte"; +import Dialog from "./command-dialog.svelte"; +import Empty from "./command-empty.svelte"; +import Group from "./command-group.svelte"; +import Item from "./command-item.svelte"; +import Input from "./command-input.svelte"; +import List from "./command-list.svelte"; +import Separator from "./command-separator.svelte"; +import Shortcut from "./command-shortcut.svelte"; +import LinkItem from "./command-link-item.svelte"; + +const Loading = CommandPrimitive.Loading; + +export { + Root, + Dialog, + Empty, + Group, + Item, + LinkItem, + Input, + List, + Separator, + Shortcut, + Loading, + // + Root as Command, + Dialog as CommandDialog, + Empty as CommandEmpty, + Group as CommandGroup, + Item as CommandItem, + LinkItem as CommandLinkItem, + Input as CommandInput, + List as CommandList, + Separator as CommandSeparator, + Shortcut as CommandShortcut, + Loading as CommandLoading, +}; diff --git a/client/src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte b/client/src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte new file mode 100644 index 0000000..4d287cf --- /dev/null +++ b/client/src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte @@ -0,0 +1,40 @@ + + + + {#snippet children({ checked, indeterminate })} + + {#if indeterminate} + + {:else} + + {/if} + + {@render childrenProp?.()} + {/snippet} + diff --git a/client/src/lib/components/ui/context-menu/context-menu-content.svelte b/client/src/lib/components/ui/context-menu/context-menu-content.svelte new file mode 100644 index 0000000..0ace06f --- /dev/null +++ b/client/src/lib/components/ui/context-menu/context-menu-content.svelte @@ -0,0 +1,24 @@ + + + + + diff --git a/client/src/lib/components/ui/context-menu/context-menu-group-heading.svelte b/client/src/lib/components/ui/context-menu/context-menu-group-heading.svelte new file mode 100644 index 0000000..7a43228 --- /dev/null +++ b/client/src/lib/components/ui/context-menu/context-menu-group-heading.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/context-menu/context-menu-item.svelte b/client/src/lib/components/ui/context-menu/context-menu-item.svelte new file mode 100644 index 0000000..e8c85c8 --- /dev/null +++ b/client/src/lib/components/ui/context-menu/context-menu-item.svelte @@ -0,0 +1,23 @@ + + + diff --git a/client/src/lib/components/ui/context-menu/context-menu-radio-item.svelte b/client/src/lib/components/ui/context-menu/context-menu-radio-item.svelte new file mode 100644 index 0000000..4070b3a --- /dev/null +++ b/client/src/lib/components/ui/context-menu/context-menu-radio-item.svelte @@ -0,0 +1,30 @@ + + + + {#snippet children({ checked })} + + {#if checked} + + {/if} + + {@render childrenProp?.({ checked })} + {/snippet} + diff --git a/client/src/lib/components/ui/context-menu/context-menu-separator.svelte b/client/src/lib/components/ui/context-menu/context-menu-separator.svelte new file mode 100644 index 0000000..7f17bd0 --- /dev/null +++ b/client/src/lib/components/ui/context-menu/context-menu-separator.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/context-menu/context-menu-shortcut.svelte b/client/src/lib/components/ui/context-menu/context-menu-shortcut.svelte new file mode 100644 index 0000000..f09693d --- /dev/null +++ b/client/src/lib/components/ui/context-menu/context-menu-shortcut.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/client/src/lib/components/ui/context-menu/context-menu-sub-content.svelte b/client/src/lib/components/ui/context-menu/context-menu-sub-content.svelte new file mode 100644 index 0000000..f58eb98 --- /dev/null +++ b/client/src/lib/components/ui/context-menu/context-menu-sub-content.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte b/client/src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte new file mode 100644 index 0000000..8dead06 --- /dev/null +++ b/client/src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte @@ -0,0 +1,28 @@ + + + + {@render children?.()} + + diff --git a/client/src/lib/components/ui/context-menu/index.ts b/client/src/lib/components/ui/context-menu/index.ts new file mode 100644 index 0000000..d1ccf93 --- /dev/null +++ b/client/src/lib/components/ui/context-menu/index.ts @@ -0,0 +1,49 @@ +import { ContextMenu as ContextMenuPrimitive } from "bits-ui"; + +import Item from "./context-menu-item.svelte"; +import GroupHeading from "./context-menu-group-heading.svelte"; +import Content from "./context-menu-content.svelte"; +import Shortcut from "./context-menu-shortcut.svelte"; +import RadioItem from "./context-menu-radio-item.svelte"; +import Separator from "./context-menu-separator.svelte"; +import SubContent from "./context-menu-sub-content.svelte"; +import SubTrigger from "./context-menu-sub-trigger.svelte"; +import CheckboxItem from "./context-menu-checkbox-item.svelte"; + +const Sub = ContextMenuPrimitive.Sub; +const Root = ContextMenuPrimitive.Root; +const Trigger = ContextMenuPrimitive.Trigger; +const Group = ContextMenuPrimitive.Group; +const RadioGroup = ContextMenuPrimitive.RadioGroup; + +export { + Sub, + Root, + Item, + GroupHeading, + Group, + Trigger, + Content, + Shortcut, + Separator, + RadioItem, + SubContent, + SubTrigger, + RadioGroup, + CheckboxItem, + // + Root as ContextMenu, + Sub as ContextMenuSub, + Item as ContextMenuItem, + GroupHeading as ContextMenuGroupHeading, + Group as ContextMenuGroup, + Content as ContextMenuContent, + Trigger as ContextMenuTrigger, + Shortcut as ContextMenuShortcut, + RadioItem as ContextMenuRadioItem, + Separator as ContextMenuSeparator, + RadioGroup as ContextMenuRadioGroup, + SubContent as ContextMenuSubContent, + SubTrigger as ContextMenuSubTrigger, + CheckboxItem as ContextMenuCheckboxItem, +}; diff --git a/client/src/lib/components/ui/dialog/dialog-content.svelte b/client/src/lib/components/ui/dialog/dialog-content.svelte new file mode 100644 index 0000000..c4f81a1 --- /dev/null +++ b/client/src/lib/components/ui/dialog/dialog-content.svelte @@ -0,0 +1,38 @@ + + + + + + {@render children?.()} + + + Close + + + diff --git a/client/src/lib/components/ui/dialog/dialog-description.svelte b/client/src/lib/components/ui/dialog/dialog-description.svelte new file mode 100644 index 0000000..bc048e4 --- /dev/null +++ b/client/src/lib/components/ui/dialog/dialog-description.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/dialog/dialog-footer.svelte b/client/src/lib/components/ui/dialog/dialog-footer.svelte new file mode 100644 index 0000000..91ecaba --- /dev/null +++ b/client/src/lib/components/ui/dialog/dialog-footer.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/client/src/lib/components/ui/dialog/dialog-header.svelte b/client/src/lib/components/ui/dialog/dialog-header.svelte new file mode 100644 index 0000000..8d1abfc --- /dev/null +++ b/client/src/lib/components/ui/dialog/dialog-header.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/client/src/lib/components/ui/dialog/dialog-overlay.svelte b/client/src/lib/components/ui/dialog/dialog-overlay.svelte new file mode 100644 index 0000000..05c30ac --- /dev/null +++ b/client/src/lib/components/ui/dialog/dialog-overlay.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/dialog/dialog-title.svelte b/client/src/lib/components/ui/dialog/dialog-title.svelte new file mode 100644 index 0000000..9cf592c --- /dev/null +++ b/client/src/lib/components/ui/dialog/dialog-title.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/dialog/index.ts b/client/src/lib/components/ui/dialog/index.ts new file mode 100644 index 0000000..3286ab7 --- /dev/null +++ b/client/src/lib/components/ui/dialog/index.ts @@ -0,0 +1,37 @@ +import { Dialog as DialogPrimitive } from "bits-ui"; + +import Title from "./dialog-title.svelte"; +import Footer from "./dialog-footer.svelte"; +import Header from "./dialog-header.svelte"; +import Overlay from "./dialog-overlay.svelte"; +import Content from "./dialog-content.svelte"; +import Description from "./dialog-description.svelte"; + +const Root = DialogPrimitive.Root; +const Trigger = DialogPrimitive.Trigger; +const Close = DialogPrimitive.Close; +const Portal = DialogPrimitive.Portal; + +export { + Root, + Title, + Portal, + Footer, + Header, + Trigger, + Overlay, + Content, + Description, + Close, + // + Root as Dialog, + Title as DialogTitle, + Portal as DialogPortal, + Footer as DialogFooter, + Header as DialogHeader, + Trigger as DialogTrigger, + Overlay as DialogOverlay, + Content as DialogContent, + Description as DialogDescription, + Close as DialogClose, +}; diff --git a/client/src/lib/components/ui/drawer/drawer-content.svelte b/client/src/lib/components/ui/drawer/drawer-content.svelte new file mode 100644 index 0000000..7f70c6d --- /dev/null +++ b/client/src/lib/components/ui/drawer/drawer-content.svelte @@ -0,0 +1,30 @@ + + + + + +
+ {@render children?.()} +
+
diff --git a/client/src/lib/components/ui/drawer/drawer-description.svelte b/client/src/lib/components/ui/drawer/drawer-description.svelte new file mode 100644 index 0000000..0c917d8 --- /dev/null +++ b/client/src/lib/components/ui/drawer/drawer-description.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/drawer/drawer-footer.svelte b/client/src/lib/components/ui/drawer/drawer-footer.svelte new file mode 100644 index 0000000..092940b --- /dev/null +++ b/client/src/lib/components/ui/drawer/drawer-footer.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/client/src/lib/components/ui/drawer/drawer-header.svelte b/client/src/lib/components/ui/drawer/drawer-header.svelte new file mode 100644 index 0000000..d1a1c67 --- /dev/null +++ b/client/src/lib/components/ui/drawer/drawer-header.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/client/src/lib/components/ui/drawer/drawer-nested.svelte b/client/src/lib/components/ui/drawer/drawer-nested.svelte new file mode 100644 index 0000000..834af94 --- /dev/null +++ b/client/src/lib/components/ui/drawer/drawer-nested.svelte @@ -0,0 +1,12 @@ + + + diff --git a/client/src/lib/components/ui/drawer/drawer-overlay.svelte b/client/src/lib/components/ui/drawer/drawer-overlay.svelte new file mode 100644 index 0000000..db6a818 --- /dev/null +++ b/client/src/lib/components/ui/drawer/drawer-overlay.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/drawer/drawer-title.svelte b/client/src/lib/components/ui/drawer/drawer-title.svelte new file mode 100644 index 0000000..4de1f33 --- /dev/null +++ b/client/src/lib/components/ui/drawer/drawer-title.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/drawer/drawer.svelte b/client/src/lib/components/ui/drawer/drawer.svelte new file mode 100644 index 0000000..0cb57ff --- /dev/null +++ b/client/src/lib/components/ui/drawer/drawer.svelte @@ -0,0 +1,12 @@ + + + diff --git a/client/src/lib/components/ui/drawer/index.ts b/client/src/lib/components/ui/drawer/index.ts new file mode 100644 index 0000000..ee69b87 --- /dev/null +++ b/client/src/lib/components/ui/drawer/index.ts @@ -0,0 +1,41 @@ +import { Drawer as DrawerPrimitive } from "vaul-svelte"; + +import Root from "./drawer.svelte"; +import Content from "./drawer-content.svelte"; +import Description from "./drawer-description.svelte"; +import Overlay from "./drawer-overlay.svelte"; +import Footer from "./drawer-footer.svelte"; +import Header from "./drawer-header.svelte"; +import Title from "./drawer-title.svelte"; +import NestedRoot from "./drawer-nested.svelte"; + +const Trigger: typeof DrawerPrimitive.Trigger = DrawerPrimitive.Trigger; +const Portal: typeof DrawerPrimitive.Portal = DrawerPrimitive.Portal; +const Close: typeof DrawerPrimitive.Close = DrawerPrimitive.Close; + +export { + Root, + NestedRoot, + Content, + Description, + Overlay, + Footer, + Header, + Title, + Trigger, + Portal, + Close, + + // + Root as Drawer, + NestedRoot as DrawerNestedRoot, + Content as DrawerContent, + Description as DrawerDescription, + Overlay as DrawerOverlay, + Footer as DrawerFooter, + Header as DrawerHeader, + Title as DrawerTitle, + Trigger as DrawerTrigger, + Portal as DrawerPortal, + Close as DrawerClose, +}; diff --git a/client/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte new file mode 100644 index 0000000..c6d23cf --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte @@ -0,0 +1,40 @@ + + + + {#snippet children({ checked, indeterminate })} + + {#if indeterminate} + + {:else} + + {/if} + + {@render childrenProp?.()} + {/snippet} + diff --git a/client/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte new file mode 100644 index 0000000..8e65c85 --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte @@ -0,0 +1,26 @@ + + + + + diff --git a/client/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte new file mode 100644 index 0000000..84d5cca --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte new file mode 100644 index 0000000..e616c59 --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte @@ -0,0 +1,23 @@ + + + diff --git a/client/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte new file mode 100644 index 0000000..9837d5a --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte @@ -0,0 +1,23 @@ + + +
+ {@render children?.()} +
diff --git a/client/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte new file mode 100644 index 0000000..2298352 --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte @@ -0,0 +1,30 @@ + + + + {#snippet children({ checked })} + + {#if checked} + + {/if} + + {@render childrenProp?.({ checked })} + {/snippet} + diff --git a/client/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte new file mode 100644 index 0000000..32fac4b --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte new file mode 100644 index 0000000..053e2a2 --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/client/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte new file mode 100644 index 0000000..8378bc0 --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte new file mode 100644 index 0000000..e559a6c --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte @@ -0,0 +1,28 @@ + + + + {@render children?.()} + + diff --git a/client/src/lib/components/ui/dropdown-menu/index.ts b/client/src/lib/components/ui/dropdown-menu/index.ts new file mode 100644 index 0000000..40c4502 --- /dev/null +++ b/client/src/lib/components/ui/dropdown-menu/index.ts @@ -0,0 +1,50 @@ +import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; +import CheckboxItem from "./dropdown-menu-checkbox-item.svelte"; +import Content from "./dropdown-menu-content.svelte"; +import GroupHeading from "./dropdown-menu-group-heading.svelte"; +import Item from "./dropdown-menu-item.svelte"; +import Label from "./dropdown-menu-label.svelte"; +import RadioItem from "./dropdown-menu-radio-item.svelte"; +import Separator from "./dropdown-menu-separator.svelte"; +import Shortcut from "./dropdown-menu-shortcut.svelte"; +import SubContent from "./dropdown-menu-sub-content.svelte"; +import SubTrigger from "./dropdown-menu-sub-trigger.svelte"; + +const Sub = DropdownMenuPrimitive.Sub; +const Root = DropdownMenuPrimitive.Root; +const Trigger = DropdownMenuPrimitive.Trigger; +const Group = DropdownMenuPrimitive.Group; +const RadioGroup = DropdownMenuPrimitive.RadioGroup; + +export { + CheckboxItem, + Content, + Root as DropdownMenu, + CheckboxItem as DropdownMenuCheckboxItem, + Content as DropdownMenuContent, + Group as DropdownMenuGroup, + GroupHeading as DropdownMenuGroupHeading, + Item as DropdownMenuItem, + Label as DropdownMenuLabel, + RadioGroup as DropdownMenuRadioGroup, + RadioItem as DropdownMenuRadioItem, + Separator as DropdownMenuSeparator, + Shortcut as DropdownMenuShortcut, + Sub as DropdownMenuSub, + SubContent as DropdownMenuSubContent, + SubTrigger as DropdownMenuSubTrigger, + Trigger as DropdownMenuTrigger, + Group, + GroupHeading, + Item, + Label, + RadioGroup, + RadioItem, + Root, + Separator, + Shortcut, + Sub, + SubContent, + SubTrigger, + Trigger, +}; diff --git a/client/src/lib/components/ui/hover-card/hover-card-content.svelte b/client/src/lib/components/ui/hover-card/hover-card-content.svelte new file mode 100644 index 0000000..99d2a09 --- /dev/null +++ b/client/src/lib/components/ui/hover-card/hover-card-content.svelte @@ -0,0 +1,28 @@ + + + + + diff --git a/client/src/lib/components/ui/hover-card/index.ts b/client/src/lib/components/ui/hover-card/index.ts new file mode 100644 index 0000000..2d0c5c5 --- /dev/null +++ b/client/src/lib/components/ui/hover-card/index.ts @@ -0,0 +1,14 @@ +import { LinkPreview as HoverCardPrimitive } from "bits-ui"; + +import Content from "./hover-card-content.svelte"; +const Root = HoverCardPrimitive.Root; +const Trigger = HoverCardPrimitive.Trigger; + +export { + Root, + Content, + Trigger, + Root as HoverCard, + Content as HoverCardContent, + Trigger as HoverCardTrigger, +}; diff --git a/client/src/lib/components/ui/input/index.ts b/client/src/lib/components/ui/input/index.ts new file mode 100644 index 0000000..f47b6d3 --- /dev/null +++ b/client/src/lib/components/ui/input/index.ts @@ -0,0 +1,7 @@ +import Root from "./input.svelte"; + +export { + Root, + // + Root as Input, +}; diff --git a/client/src/lib/components/ui/input/input.svelte b/client/src/lib/components/ui/input/input.svelte new file mode 100644 index 0000000..13fa116 --- /dev/null +++ b/client/src/lib/components/ui/input/input.svelte @@ -0,0 +1,46 @@ + + +{#if type === "file"} + +{:else} + +{/if} diff --git a/client/src/lib/components/ui/label/index.ts b/client/src/lib/components/ui/label/index.ts new file mode 100644 index 0000000..8bfca0b --- /dev/null +++ b/client/src/lib/components/ui/label/index.ts @@ -0,0 +1,7 @@ +import Root from "./label.svelte"; + +export { + Root, + // + Root as Label, +}; diff --git a/client/src/lib/components/ui/label/label.svelte b/client/src/lib/components/ui/label/label.svelte new file mode 100644 index 0000000..247d23c --- /dev/null +++ b/client/src/lib/components/ui/label/label.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/menubar/index.ts b/client/src/lib/components/ui/menubar/index.ts new file mode 100644 index 0000000..1ea010c --- /dev/null +++ b/client/src/lib/components/ui/menubar/index.ts @@ -0,0 +1,51 @@ +import { Menubar as MenubarPrimitive } from "bits-ui"; +import Root from "./menubar.svelte"; +import CheckboxItem from "./menubar-checkbox-item.svelte"; +import Content from "./menubar-content.svelte"; +import Item from "./menubar-item.svelte"; +import GroupHeading from "./menubar-group-heading.svelte"; +import RadioItem from "./menubar-radio-item.svelte"; +import Separator from "./menubar-separator.svelte"; +import Shortcut from "./menubar-shortcut.svelte"; +import SubContent from "./menubar-sub-content.svelte"; +import SubTrigger from "./menubar-sub-trigger.svelte"; +import Trigger from "./menubar-trigger.svelte"; + +const Menu = MenubarPrimitive.Menu; +const Group = MenubarPrimitive.Group; +const Sub = MenubarPrimitive.Sub; +const RadioGroup = MenubarPrimitive.RadioGroup; + +export { + Root, + CheckboxItem, + Content, + Item, + GroupHeading, + RadioItem, + Separator, + Shortcut, + SubContent, + SubTrigger, + Trigger, + Menu, + Group, + Sub, + RadioGroup, + // + Root as Menubar, + CheckboxItem as MenubarCheckboxItem, + Content as MenubarContent, + Item as MenubarItem, + GroupHeading as MenubarGroupHeading, + RadioItem as MenubarRadioItem, + Separator as MenubarSeparator, + Shortcut as MenubarShortcut, + SubContent as MenubarSubContent, + SubTrigger as MenubarSubTrigger, + Trigger as MenubarTrigger, + Menu as MenubarMenu, + Group as MenubarGroup, + Sub as MenubarSub, + RadioGroup as MenubarRadioGroup, +}; diff --git a/client/src/lib/components/ui/menubar/menubar-checkbox-item.svelte b/client/src/lib/components/ui/menubar/menubar-checkbox-item.svelte new file mode 100644 index 0000000..3291dbd --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar-checkbox-item.svelte @@ -0,0 +1,40 @@ + + + + {#snippet children({ checked, indeterminate })} + + {#if indeterminate} + + {:else} + + {/if} + + {@render childrenProp?.()} + {/snippet} + diff --git a/client/src/lib/components/ui/menubar/menubar-content.svelte b/client/src/lib/components/ui/menubar/menubar-content.svelte new file mode 100644 index 0000000..6930564 --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar-content.svelte @@ -0,0 +1,32 @@ + + + + + diff --git a/client/src/lib/components/ui/menubar/menubar-group-heading.svelte b/client/src/lib/components/ui/menubar/menubar-group-heading.svelte new file mode 100644 index 0000000..4b89729 --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar-group-heading.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/menubar/menubar-item.svelte b/client/src/lib/components/ui/menubar/menubar-item.svelte new file mode 100644 index 0000000..f475761 --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar-item.svelte @@ -0,0 +1,23 @@ + + + diff --git a/client/src/lib/components/ui/menubar/menubar-radio-item.svelte b/client/src/lib/components/ui/menubar/menubar-radio-item.svelte new file mode 100644 index 0000000..2d4f84d --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar-radio-item.svelte @@ -0,0 +1,30 @@ + + + + {#snippet children({ checked })} + + {#if checked} + + {/if} + + {@render childrenProp?.({ checked })} + {/snippet} + diff --git a/client/src/lib/components/ui/menubar/menubar-separator.svelte b/client/src/lib/components/ui/menubar/menubar-separator.svelte new file mode 100644 index 0000000..2a6aa04 --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar-separator.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/menubar/menubar-shortcut.svelte b/client/src/lib/components/ui/menubar/menubar-shortcut.svelte new file mode 100644 index 0000000..b35a95f --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar-shortcut.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/client/src/lib/components/ui/menubar/menubar-sub-content.svelte b/client/src/lib/components/ui/menubar/menubar-sub-content.svelte new file mode 100644 index 0000000..1d68e88 --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar-sub-content.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/menubar/menubar-sub-trigger.svelte b/client/src/lib/components/ui/menubar/menubar-sub-trigger.svelte new file mode 100644 index 0000000..4ce6521 --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar-sub-trigger.svelte @@ -0,0 +1,28 @@ + + + + {@render children?.()} + + diff --git a/client/src/lib/components/ui/menubar/menubar-trigger.svelte b/client/src/lib/components/ui/menubar/menubar-trigger.svelte new file mode 100644 index 0000000..d33965c --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar-trigger.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/menubar/menubar.svelte b/client/src/lib/components/ui/menubar/menubar.svelte new file mode 100644 index 0000000..55c34c6 --- /dev/null +++ b/client/src/lib/components/ui/menubar/menubar.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/popover/index.ts b/client/src/lib/components/ui/popover/index.ts new file mode 100644 index 0000000..63aecf9 --- /dev/null +++ b/client/src/lib/components/ui/popover/index.ts @@ -0,0 +1,17 @@ +import { Popover as PopoverPrimitive } from "bits-ui"; +import Content from "./popover-content.svelte"; +const Root = PopoverPrimitive.Root; +const Trigger = PopoverPrimitive.Trigger; +const Close = PopoverPrimitive.Close; + +export { + Root, + Content, + Trigger, + Close, + // + Root as Popover, + Content as PopoverContent, + Trigger as PopoverTrigger, + Close as PopoverClose, +}; diff --git a/client/src/lib/components/ui/popover/popover-content.svelte b/client/src/lib/components/ui/popover/popover-content.svelte new file mode 100644 index 0000000..d2fbace --- /dev/null +++ b/client/src/lib/components/ui/popover/popover-content.svelte @@ -0,0 +1,28 @@ + + + + + diff --git a/client/src/lib/components/ui/progress/index.ts b/client/src/lib/components/ui/progress/index.ts new file mode 100644 index 0000000..25eee61 --- /dev/null +++ b/client/src/lib/components/ui/progress/index.ts @@ -0,0 +1,7 @@ +import Root from "./progress.svelte"; + +export { + Root, + // + Root as Progress, +}; diff --git a/client/src/lib/components/ui/progress/progress.svelte b/client/src/lib/components/ui/progress/progress.svelte new file mode 100644 index 0000000..5c47770 --- /dev/null +++ b/client/src/lib/components/ui/progress/progress.svelte @@ -0,0 +1,25 @@ + + + +
+
diff --git a/client/src/lib/components/ui/radio-group/index.ts b/client/src/lib/components/ui/radio-group/index.ts new file mode 100644 index 0000000..90b33fe --- /dev/null +++ b/client/src/lib/components/ui/radio-group/index.ts @@ -0,0 +1,10 @@ +import Root from "./radio-group.svelte"; +import Item from "./radio-group-item.svelte"; + +export { + Root, + Item, + // + Root as RadioGroup, + Item as RadioGroupItem, +}; diff --git a/client/src/lib/components/ui/radio-group/radio-group-item.svelte b/client/src/lib/components/ui/radio-group/radio-group-item.svelte new file mode 100644 index 0000000..bab22c0 --- /dev/null +++ b/client/src/lib/components/ui/radio-group/radio-group-item.svelte @@ -0,0 +1,28 @@ + + + + {#snippet children({ checked })} +
+ {#if checked} + + {/if} +
+ {/snippet} +
diff --git a/client/src/lib/components/ui/radio-group/radio-group.svelte b/client/src/lib/components/ui/radio-group/radio-group.svelte new file mode 100644 index 0000000..5180b31 --- /dev/null +++ b/client/src/lib/components/ui/radio-group/radio-group.svelte @@ -0,0 +1,13 @@ + + + diff --git a/client/src/lib/components/ui/resizable/index.ts b/client/src/lib/components/ui/resizable/index.ts new file mode 100644 index 0000000..2e37f11 --- /dev/null +++ b/client/src/lib/components/ui/resizable/index.ts @@ -0,0 +1,13 @@ +import { Pane } from "paneforge"; +import Handle from "./resizable-handle.svelte"; +import PaneGroup from "./resizable-pane-group.svelte"; + +export { + PaneGroup, + Pane, + Handle, + // + PaneGroup as ResizablePaneGroup, + Pane as ResizablePane, + Handle as ResizableHandle, +}; diff --git a/client/src/lib/components/ui/resizable/resizable-handle.svelte b/client/src/lib/components/ui/resizable/resizable-handle.svelte new file mode 100644 index 0000000..cf001f0 --- /dev/null +++ b/client/src/lib/components/ui/resizable/resizable-handle.svelte @@ -0,0 +1,30 @@ + + +div]:rotate-90", + className + )} + {...restProps} +> + {#if withHandle} +
+ +
+ {/if} +
diff --git a/client/src/lib/components/ui/resizable/resizable-pane-group.svelte b/client/src/lib/components/ui/resizable/resizable-pane-group.svelte new file mode 100644 index 0000000..18c690c --- /dev/null +++ b/client/src/lib/components/ui/resizable/resizable-pane-group.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/scroll-area/index.ts b/client/src/lib/components/ui/scroll-area/index.ts new file mode 100644 index 0000000..e86a25b --- /dev/null +++ b/client/src/lib/components/ui/scroll-area/index.ts @@ -0,0 +1,10 @@ +import Scrollbar from "./scroll-area-scrollbar.svelte"; +import Root from "./scroll-area.svelte"; + +export { + Root, + Scrollbar, + //, + Root as ScrollArea, + Scrollbar as ScrollAreaScrollbar, +}; diff --git a/client/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte b/client/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte new file mode 100644 index 0000000..b436056 --- /dev/null +++ b/client/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte @@ -0,0 +1,29 @@ + + + + {@render children?.()} + + diff --git a/client/src/lib/components/ui/scroll-area/scroll-area.svelte b/client/src/lib/components/ui/scroll-area/scroll-area.svelte new file mode 100644 index 0000000..9943f83 --- /dev/null +++ b/client/src/lib/components/ui/scroll-area/scroll-area.svelte @@ -0,0 +1,32 @@ + + + + + {@render children?.()} + + {#if orientation === "vertical" || orientation === "both"} + + {/if} + {#if orientation === "horizontal" || orientation === "both"} + + {/if} + + diff --git a/client/src/lib/components/ui/select/index.ts b/client/src/lib/components/ui/select/index.ts new file mode 100644 index 0000000..f31b8ae --- /dev/null +++ b/client/src/lib/components/ui/select/index.ts @@ -0,0 +1,34 @@ +import { Select as SelectPrimitive } from "bits-ui"; + +import GroupHeading from "./select-group-heading.svelte"; +import Item from "./select-item.svelte"; +import Content from "./select-content.svelte"; +import Trigger from "./select-trigger.svelte"; +import Separator from "./select-separator.svelte"; +import ScrollDownButton from "./select-scroll-down-button.svelte"; +import ScrollUpButton from "./select-scroll-up-button.svelte"; + +const Root = SelectPrimitive.Root; +const Group = SelectPrimitive.Group; + +export { + Root, + Group, + GroupHeading, + Item, + Content, + Trigger, + Separator, + ScrollDownButton, + ScrollUpButton, + // + Root as Select, + Group as SelectGroup, + GroupHeading as SelectGroupHeading, + Item as SelectItem, + Content as SelectContent, + Trigger as SelectTrigger, + Separator as SelectSeparator, + ScrollDownButton as SelectScrollDownButton, + ScrollUpButton as SelectScrollUpButton, +}; diff --git a/client/src/lib/components/ui/select/select-content.svelte b/client/src/lib/components/ui/select/select-content.svelte new file mode 100644 index 0000000..74ee548 --- /dev/null +++ b/client/src/lib/components/ui/select/select-content.svelte @@ -0,0 +1,39 @@ + + + + + + + {@render children?.()} + + + + diff --git a/client/src/lib/components/ui/select/select-group-heading.svelte b/client/src/lib/components/ui/select/select-group-heading.svelte new file mode 100644 index 0000000..7984bef --- /dev/null +++ b/client/src/lib/components/ui/select/select-group-heading.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/select/select-item.svelte b/client/src/lib/components/ui/select/select-item.svelte new file mode 100644 index 0000000..9d7f516 --- /dev/null +++ b/client/src/lib/components/ui/select/select-item.svelte @@ -0,0 +1,37 @@ + + + + {#snippet children({ selected, highlighted })} + + {#if selected} + + {/if} + + {#if childrenProp} + {@render childrenProp({ selected, highlighted })} + {:else} + {label || value} + {/if} + {/snippet} + diff --git a/client/src/lib/components/ui/select/select-scroll-down-button.svelte b/client/src/lib/components/ui/select/select-scroll-down-button.svelte new file mode 100644 index 0000000..c17d5d1 --- /dev/null +++ b/client/src/lib/components/ui/select/select-scroll-down-button.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/client/src/lib/components/ui/select/select-scroll-up-button.svelte b/client/src/lib/components/ui/select/select-scroll-up-button.svelte new file mode 100644 index 0000000..8ba08c0 --- /dev/null +++ b/client/src/lib/components/ui/select/select-scroll-up-button.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/client/src/lib/components/ui/select/select-separator.svelte b/client/src/lib/components/ui/select/select-separator.svelte new file mode 100644 index 0000000..38a3ab0 --- /dev/null +++ b/client/src/lib/components/ui/select/select-separator.svelte @@ -0,0 +1,13 @@ + + + diff --git a/client/src/lib/components/ui/select/select-trigger.svelte b/client/src/lib/components/ui/select/select-trigger.svelte new file mode 100644 index 0000000..ce4e48f --- /dev/null +++ b/client/src/lib/components/ui/select/select-trigger.svelte @@ -0,0 +1,24 @@ + + +span]:line-clamp-1", + className + )} + {...restProps} +> + {@render children?.()} + + diff --git a/client/src/lib/components/ui/separator/index.ts b/client/src/lib/components/ui/separator/index.ts new file mode 100644 index 0000000..82442d2 --- /dev/null +++ b/client/src/lib/components/ui/separator/index.ts @@ -0,0 +1,7 @@ +import Root from "./separator.svelte"; + +export { + Root, + // + Root as Separator, +}; diff --git a/client/src/lib/components/ui/separator/separator.svelte b/client/src/lib/components/ui/separator/separator.svelte new file mode 100644 index 0000000..cd823cc --- /dev/null +++ b/client/src/lib/components/ui/separator/separator.svelte @@ -0,0 +1,22 @@ + + + diff --git a/client/src/lib/components/ui/sheet/index.ts b/client/src/lib/components/ui/sheet/index.ts new file mode 100644 index 0000000..1cf1af1 --- /dev/null +++ b/client/src/lib/components/ui/sheet/index.ts @@ -0,0 +1,36 @@ +import { Dialog as SheetPrimitive } from "bits-ui"; +import Overlay from "./sheet-overlay.svelte"; +import Content from "./sheet-content.svelte"; +import Header from "./sheet-header.svelte"; +import Footer from "./sheet-footer.svelte"; +import Title from "./sheet-title.svelte"; +import Description from "./sheet-description.svelte"; + +const Root = SheetPrimitive.Root; +const Close = SheetPrimitive.Close; +const Trigger = SheetPrimitive.Trigger; +const Portal = SheetPrimitive.Portal; + +export { + Root, + Close, + Trigger, + Portal, + Overlay, + Content, + Header, + Footer, + Title, + Description, + // + Root as Sheet, + Close as SheetClose, + Trigger as SheetTrigger, + Portal as SheetPortal, + Overlay as SheetOverlay, + Content as SheetContent, + Header as SheetHeader, + Footer as SheetFooter, + Title as SheetTitle, + Description as SheetDescription, +}; diff --git a/client/src/lib/components/ui/sheet/sheet-content.svelte b/client/src/lib/components/ui/sheet/sheet-content.svelte new file mode 100644 index 0000000..27a7ba3 --- /dev/null +++ b/client/src/lib/components/ui/sheet/sheet-content.svelte @@ -0,0 +1,53 @@ + + + + + + + + {@render children?.()} + + + Close + + + diff --git a/client/src/lib/components/ui/sheet/sheet-description.svelte b/client/src/lib/components/ui/sheet/sheet-description.svelte new file mode 100644 index 0000000..885e01f --- /dev/null +++ b/client/src/lib/components/ui/sheet/sheet-description.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/sheet/sheet-footer.svelte b/client/src/lib/components/ui/sheet/sheet-footer.svelte new file mode 100644 index 0000000..91ecaba --- /dev/null +++ b/client/src/lib/components/ui/sheet/sheet-footer.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/client/src/lib/components/ui/sheet/sheet-header.svelte b/client/src/lib/components/ui/sheet/sheet-header.svelte new file mode 100644 index 0000000..47ea6be --- /dev/null +++ b/client/src/lib/components/ui/sheet/sheet-header.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/client/src/lib/components/ui/sheet/sheet-overlay.svelte b/client/src/lib/components/ui/sheet/sheet-overlay.svelte new file mode 100644 index 0000000..faa2de1 --- /dev/null +++ b/client/src/lib/components/ui/sheet/sheet-overlay.svelte @@ -0,0 +1,21 @@ + + + diff --git a/client/src/lib/components/ui/sheet/sheet-title.svelte b/client/src/lib/components/ui/sheet/sheet-title.svelte new file mode 100644 index 0000000..25f42fc --- /dev/null +++ b/client/src/lib/components/ui/sheet/sheet-title.svelte @@ -0,0 +1,16 @@ + + + diff --git a/client/src/lib/components/ui/skeleton/index.ts b/client/src/lib/components/ui/skeleton/index.ts new file mode 100644 index 0000000..186db21 --- /dev/null +++ b/client/src/lib/components/ui/skeleton/index.ts @@ -0,0 +1,7 @@ +import Root from "./skeleton.svelte"; + +export { + Root, + // + Root as Skeleton, +}; diff --git a/client/src/lib/components/ui/skeleton/skeleton.svelte b/client/src/lib/components/ui/skeleton/skeleton.svelte new file mode 100644 index 0000000..4089b49 --- /dev/null +++ b/client/src/lib/components/ui/skeleton/skeleton.svelte @@ -0,0 +1,17 @@ + + +
diff --git a/client/src/lib/components/ui/slider/index.ts b/client/src/lib/components/ui/slider/index.ts new file mode 100644 index 0000000..820f209 --- /dev/null +++ b/client/src/lib/components/ui/slider/index.ts @@ -0,0 +1,7 @@ +import Root from "./slider.svelte"; + +export { + Root, + // + Root as Slider, +}; diff --git a/client/src/lib/components/ui/slider/slider.svelte b/client/src/lib/components/ui/slider/slider.svelte new file mode 100644 index 0000000..8b057dd --- /dev/null +++ b/client/src/lib/components/ui/slider/slider.svelte @@ -0,0 +1,44 @@ + + + + + {#snippet children({ thumbs })} + + + + {#each thumbs as thumb (thumb)} + + {/each} + {/snippet} + diff --git a/client/src/lib/components/ui/switch/index.ts b/client/src/lib/components/ui/switch/index.ts new file mode 100644 index 0000000..f5533db --- /dev/null +++ b/client/src/lib/components/ui/switch/index.ts @@ -0,0 +1,7 @@ +import Root from "./switch.svelte"; + +export { + Root, + // + Root as Switch, +}; diff --git a/client/src/lib/components/ui/switch/switch.svelte b/client/src/lib/components/ui/switch/switch.svelte new file mode 100644 index 0000000..66b8b1e --- /dev/null +++ b/client/src/lib/components/ui/switch/switch.svelte @@ -0,0 +1,27 @@ + + + + + diff --git a/client/src/lib/components/ui/tabs/index.ts b/client/src/lib/components/ui/tabs/index.ts new file mode 100644 index 0000000..f1ab372 --- /dev/null +++ b/client/src/lib/components/ui/tabs/index.ts @@ -0,0 +1,18 @@ +import { Tabs as TabsPrimitive } from "bits-ui"; +import Content from "./tabs-content.svelte"; +import List from "./tabs-list.svelte"; +import Trigger from "./tabs-trigger.svelte"; + +const Root = TabsPrimitive.Root; + +export { + Root, + Content, + List, + Trigger, + // + Root as Tabs, + Content as TabsContent, + List as TabsList, + Trigger as TabsTrigger, +}; diff --git a/client/src/lib/components/ui/tabs/tabs-content.svelte b/client/src/lib/components/ui/tabs/tabs-content.svelte new file mode 100644 index 0000000..f1c0515 --- /dev/null +++ b/client/src/lib/components/ui/tabs/tabs-content.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/tabs/tabs-list.svelte b/client/src/lib/components/ui/tabs/tabs-list.svelte new file mode 100644 index 0000000..f03e5fc --- /dev/null +++ b/client/src/lib/components/ui/tabs/tabs-list.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/tabs/tabs-trigger.svelte b/client/src/lib/components/ui/tabs/tabs-trigger.svelte new file mode 100644 index 0000000..f1f5825 --- /dev/null +++ b/client/src/lib/components/ui/tabs/tabs-trigger.svelte @@ -0,0 +1,19 @@ + + + diff --git a/client/src/lib/components/ui/textarea/index.ts b/client/src/lib/components/ui/textarea/index.ts new file mode 100644 index 0000000..ace797a --- /dev/null +++ b/client/src/lib/components/ui/textarea/index.ts @@ -0,0 +1,7 @@ +import Root from "./textarea.svelte"; + +export { + Root, + // + Root as Textarea, +}; diff --git a/client/src/lib/components/ui/textarea/textarea.svelte b/client/src/lib/components/ui/textarea/textarea.svelte new file mode 100644 index 0000000..2616c2c --- /dev/null +++ b/client/src/lib/components/ui/textarea/textarea.svelte @@ -0,0 +1,22 @@ + + + diff --git a/client/src/lib/components/ui/toggle-group/index.ts b/client/src/lib/components/ui/toggle-group/index.ts new file mode 100644 index 0000000..12b14b9 --- /dev/null +++ b/client/src/lib/components/ui/toggle-group/index.ts @@ -0,0 +1,10 @@ +import Root from "./toggle-group.svelte"; +import Item from "./toggle-group-item.svelte"; + +export { + Root, + Item, + // + Root as ToggleGroup, + Item as ToggleGroupItem, +}; diff --git a/client/src/lib/components/ui/toggle-group/toggle-group-item.svelte b/client/src/lib/components/ui/toggle-group/toggle-group-item.svelte new file mode 100644 index 0000000..8143635 --- /dev/null +++ b/client/src/lib/components/ui/toggle-group/toggle-group-item.svelte @@ -0,0 +1,30 @@ + + + diff --git a/client/src/lib/components/ui/toggle-group/toggle-group.svelte b/client/src/lib/components/ui/toggle-group/toggle-group.svelte new file mode 100644 index 0000000..0886005 --- /dev/null +++ b/client/src/lib/components/ui/toggle-group/toggle-group.svelte @@ -0,0 +1,41 @@ + + + + + + diff --git a/client/src/lib/components/ui/toggle/index.ts b/client/src/lib/components/ui/toggle/index.ts new file mode 100644 index 0000000..8cb2936 --- /dev/null +++ b/client/src/lib/components/ui/toggle/index.ts @@ -0,0 +1,13 @@ +import Root from "./toggle.svelte"; +export { + toggleVariants, + type ToggleSize, + type ToggleVariant, + type ToggleVariants, +} from "./toggle.svelte"; + +export { + Root, + // + Root as Toggle, +}; diff --git a/client/src/lib/components/ui/toggle/toggle.svelte b/client/src/lib/components/ui/toggle/toggle.svelte new file mode 100644 index 0000000..b66fa93 --- /dev/null +++ b/client/src/lib/components/ui/toggle/toggle.svelte @@ -0,0 +1,51 @@ + + + + + diff --git a/client/src/lib/components/ui/tooltip/index.ts b/client/src/lib/components/ui/tooltip/index.ts new file mode 100644 index 0000000..e9e1fd7 --- /dev/null +++ b/client/src/lib/components/ui/tooltip/index.ts @@ -0,0 +1,18 @@ +import { Tooltip as TooltipPrimitive } from "bits-ui"; +import Content from "./tooltip-content.svelte"; + +const Root = TooltipPrimitive.Root; +const Trigger = TooltipPrimitive.Trigger; +const Provider = TooltipPrimitive.Provider; + +export { + Root, + Trigger, + Content, + Provider, + // + Root as Tooltip, + Content as TooltipContent, + Trigger as TooltipTrigger, + Provider as TooltipProvider, +}; diff --git a/client/src/lib/components/ui/tooltip/tooltip-content.svelte b/client/src/lib/components/ui/tooltip/tooltip-content.svelte new file mode 100644 index 0000000..68ff232 --- /dev/null +++ b/client/src/lib/components/ui/tooltip/tooltip-content.svelte @@ -0,0 +1,21 @@ + + + diff --git a/client/src/lib/data/sites.ts b/client/src/lib/data/sites.ts new file mode 100644 index 0000000..f2716ea --- /dev/null +++ b/client/src/lib/data/sites.ts @@ -0,0 +1,81 @@ +export interface SiteListing { + sites: Record; +} +export interface Site { + id: string; + name: string; + agency: string; + equipment: string; + city: string; + state: string; + county: string; + elevation: string; + lat: string; + long: string; +} + +export interface GeoJsonSite { + type: 'Feature'; + geometry: { + type: 'Point'; + coordinates: [number, number]; + }; + properties: { + icao: string; + name: string; + city: string; + state: string; + }; +} + +function convertDMSToDeg(dms: string): number { + let negative = false; + if (dms.startsWith('-')) { + dms = dms.replace('-', ''); + negative = true; + } + + const [s_hr, s_min, s_sec] = dms.split(' '); + const [hr, min, sec] = [Number(s_hr), Number(s_min), Number(s_sec)]; + + let deg = hr + min / 60 + sec / 3600; + + if (negative) { + deg *= -1; + } + + return deg; +} + +function siteToGeoJsonFeature(site: Site, icao: string): GeoJsonSite { + return { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: [convertDMSToDeg(site.long), convertDMSToDeg(site.lat)] + }, + properties: { + icao, + name: site.name, + city: site.city, + state: site.state + } + }; +} + +export interface GeoJsonSiteListing { + type: 'FeatureCollection'; + features: GeoJsonSite[]; +} + +export function siteListToGeoJson(list: SiteListing): GeoJsonSiteListing { + const sites = []; + for (const icao of Object.keys(list.sites)) { + sites.push(siteToGeoJsonFeature(list.sites[icao], icao)); + } + + return { + type: 'FeatureCollection', + features: sites + }; +} diff --git a/client/src/lib/data/wsr88d.json b/client/src/lib/data/wsr88d.json new file mode 100644 index 0000000..f99658e --- /dev/null +++ b/client/src/lib/data/wsr88d.json @@ -0,0 +1,1924 @@ +{ + "sites": { + "KABR": { + "id": "ABR", + "name": "ABERDEEN", + "agency": "NWS", + "equipment": "RDA", + "city": "ABERDEEN", + "state": "SD", + "county": "BROWN", + "elevation": "396.85 m (1299.21 ft)", + "lat": "+45 27 21", + "long": "-98 24 48" + }, + "KENX": { + "id": "ENX", + "name": "ALBANY", + "agency": "NWS", + "equipment": "RDA", + "city": "EAST BERNE", + "state": "NY", + "county": "ALBANY", + "elevation": "565 m (1853.67 ft)", + "lat": "+42 35 11.6", + "long": "-74 03 50.7" + }, + "KABX": { + "id": "ABX", + "name": "ALBUQUERQUE", + "agency": "NWS", + "equipment": "RDA", + "city": "ALBUQUERQUE", + "state": "NM", + "county": "BERNALILLO", + "elevation": "1789.18 m (5869.42 ft)", + "lat": "+35 08 59", + "long": "-106 49 26" + }, + "KFDR": { + "id": "FDR", + "name": "ALTUS AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "FREDERICK", + "state": "OK", + "county": "TILLMAN", + "elevation": "386.18 m (1266.4 ft)", + "lat": "+34 21 43.9", + "long": "-98 58 36" + }, + "KAMA": { + "id": "AMA", + "name": "AMARILLO", + "agency": "NWS", + "equipment": "RDA", + "city": "AMARILLO", + "state": "TX", + "county": "POTTER", + "elevation": "1104 m (3622.05 ft)", + "lat": "+35 14 00", + "long": "-101 42 33.4" + }, + "PAHG": { + "id": "AHG", + "name": "KENAI FAA (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "KENAI", + "state": "AK", + "county": "N/A", + "elevation": "73.76 m (239.5 ft)", + "lat": "+60 43 33.29", + "long": "-151 21 05.28" + }, + "PGUA": { + "id": "UAM", + "name": "ANDERSEN AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "ANDERSEN AFB", + "state": "GU", + "county": "N/A", + "elevation": "83 m (272.31 ft)", + "lat": "+13 27 21", + "long": "+144 48 40" + }, + "KFFC": { + "id": "FFC", + "name": "ATLANTA", + "agency": "NWS", + "equipment": "RDA", + "city": "PEACHTREE CITY", + "state": "GA", + "county": "FAYETTE", + "elevation": "261.52 m (856.3 ft)", + "lat": "+33 21 48.78", + "long": "-84 33 57.42" + }, + "KEWX": { + "id": "EWX", + "name": "AUSTIN/SAN ANTONIO", + "agency": "NWS", + "equipment": "RDA", + "city": "NEW BRAUNFELS", + "state": "TX", + "county": "COMAL", + "elevation": "204 m (669.29 ft)", + "lat": "+29 42 14.6", + "long": "-98 01 43" + }, + "KBBX": { + "id": "BBX", + "name": "BEALE AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "OROVILLE", + "state": "CA", + "county": "BUTTE", + "elevation": "52.73 m (170.6 ft)", + "lat": "+39 29 44.3", + "long": "-121 37 53.8" + }, + "PABC": { + "id": "ABC", + "name": "BETHEL FAA (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "BETHEL", + "state": "AK", + "county": "N/A", + "elevation": "49.07 m (160.76 ft)", + "lat": "+60 47 31", + "long": "-161 52 35" + }, + "KBLX": { + "id": "BLX", + "name": "BILLINGS", + "agency": "NWS", + "equipment": "RDA", + "city": "BILLINGS", + "state": "MT", + "county": "YELLOWSTONE", + "elevation": "1109 m (3638.45 ft)", + "lat": "+45 51 13.6", + "long": "-108 36 24.5" + }, + "KBGM": { + "id": "BGM", + "name": "BINGHAMTON", + "agency": "NWS", + "equipment": "RDA", + "city": "BINGHAMTON", + "state": "NY", + "county": "BROOME", + "elevation": "489.51 m (1604.33 ft)", + "lat": "+42 11 58.9", + "long": "-75 59 05" + }, + "KBMX": { + "id": "BMX", + "name": "BIRMINGHAM", + "agency": "NWS", + "equipment": "RDA", + "city": "ALABASTER", + "state": "AL", + "county": "SHELBY", + "elevation": "196.6 m (643.04 ft)", + "lat": "+33 10 20.7", + "long": "-86 46 12.6" + }, + "KBIS": { + "id": "BIS", + "name": "BISMARCK", + "agency": "NWS", + "equipment": "RDA", + "city": "BISMARCK", + "state": "ND", + "county": "BURLEIGH", + "elevation": "505.36 m (1656.82 ft)", + "lat": "+46 46 15", + "long": "-100 45 38" + }, + "KCBX": { + "id": "CBX", + "name": "BOISE", + "agency": "NWS", + "equipment": "RDA", + "city": "BOISE", + "state": "ID", + "county": "ADA", + "elevation": "942 m (3090.55 ft)", + "lat": "+43 29 24.78", + "long": "-116 14 09.72" + }, + "KBOX": { + "id": "BOX", + "name": "BOSTON", + "agency": "NWS", + "equipment": "RDA", + "city": "TAUNTON", + "state": "MA", + "county": "BRISTOL", + "elevation": "35.97 m (114.83 ft)", + "lat": "+41 57 20.8", + "long": "-71 08 12.7" + }, + "KOKX": { + "id": "OKX", + "name": "BROOKHAVEN", + "agency": "NWS", + "equipment": "RDA", + "city": "UPTON", + "state": "NY", + "county": "SUFFOLK", + "elevation": "25.91 m (82.02 ft)", + "lat": "+40 51 55.9", + "long": "-72 51 50.1" + }, + "KBRO": { + "id": "BRO", + "name": "BROWNSVILLE", + "agency": "NWS", + "equipment": "RDA", + "city": "BROWNSVILLE", + "state": "TX", + "county": "CAMERON", + "elevation": "7.01 m (22.97 ft)", + "lat": "+25 54 57.6", + "long": "-97 25 08.28" + }, + "KBUF": { + "id": "BUF", + "name": "BUFFALO", + "agency": "NWS", + "equipment": "RDA", + "city": "BUFFALO", + "state": "NY", + "county": "ERIE", + "elevation": "211.23 m (692.26 ft)", + "lat": "+42 56 55.64", + "long": "-78 44 12.41" + }, + "KCXX": { + "id": "CXX", + "name": "BURLINGTON", + "agency": "NWS", + "equipment": "RDA", + "city": "COLCHESTER", + "state": "VT", + "county": "CHITTENDEN", + "elevation": "96.62 m (314.96 ft)", + "lat": "+44 30 39.6", + "long": "-73 09 59.15" + }, + "RKSG": { + "id": "KSGR4", + "name": "CAMP HUMPHREYS", + "agency": "AFWA", + "equipment": "RDA", + "city": "CAMP HUMPHREYS", + "state": "KO", + "county": "N/A", + "elevation": "439 m (1440.29 ft)", + "lat": "+37 12 27.25", + "long": "+127 17 08.02" + }, + "KFDX": { + "id": "FDX", + "name": "CANNON AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "FIELD", + "state": "NM", + "county": "CURRY", + "elevation": "1417.32 m (4648.95 ft)", + "lat": "+34 38 03", + "long": "-103 37 08" + }, + "KCBW": { + "id": "CBW", + "name": "CARIBOU", + "agency": "NWS", + "equipment": "RDA", + "city": "HOULTON", + "state": "ME", + "county": "AROOSTOOK", + "elevation": "227.38 m (744.75 ft)", + "lat": "+46 02 21.30", + "long": "-67 48 23.15" + }, + "KICX": { + "id": "ICX", + "name": "CEDAR CITY (RDA 1)", + "agency": "NWS", + "equipment": "RDA", + "city": "CEDAR CITY", + "state": "UT", + "county": "IRON", + "elevation": "3244 m (10643.04 ft)", + "lat": "+37 35 27.78", + "long": "-112 51 43.86" + }, + "KCLX": { + "id": "CLX", + "name": "CHARLESTON, SC", + "agency": "NWS", + "equipment": "RDA", + "city": "GRAYS", + "state": "SC", + "county": "BEAUFORT", + "elevation": "35 m (114.83 ft)", + "lat": "+32 39 19.9", + "long": "-81 02 31.9" + }, + "KRLX": { + "id": "RLX", + "name": "CHARLESTON, WV", + "agency": "NWS", + "equipment": "RDA", + "city": "CHARLESTON", + "state": "WV", + "county": "KANAWHA", + "elevation": "335 m (1099.08 ft)", + "lat": "+38 18 40", + "long": "-81 43 22" + }, + "KCYS": { + "id": "CYS", + "name": "CHEYENNE", + "agency": "NWS", + "equipment": "RDA", + "city": "CHEYENNE", + "state": "WY", + "county": "LARAMIE", + "elevation": "1867.81 m (6125.33 ft)", + "lat": "+41 09 06.91", + "long": "-104 48 21.71" + }, + "KLOT": { + "id": "LOT", + "name": "CHICAGO", + "agency": "NWS", + "equipment": "RDA", + "city": "ROMEOVILLE", + "state": "IL", + "county": "WILL", + "elevation": "202.08 m (662.73 ft)", + "lat": "+41 36 16", + "long": "-88 05 04" + }, + "KILN": { + "id": "ILN", + "name": "CINCINNATI", + "agency": "NWS", + "equipment": "RDA", + "city": "WILMINGTON", + "state": "OH", + "county": "CLINTON", + "elevation": "321.87 m (1053.15 ft)", + "lat": "+39 25 13.74", + "long": "-83 49 17.22" + }, + "KCLE": { + "id": "CLE", + "name": "CLEVELAND", + "agency": "NWS", + "equipment": "RDA", + "city": "CLEVELAND", + "state": "OH", + "county": "CUYAHOGA", + "elevation": "232.56 m (761.15 ft)", + "lat": "+41 24 47.58", + "long": "-81 51 35.52" + }, + "KCAE": { + "id": "CAE", + "name": "COLUMBIA", + "agency": "NWS", + "equipment": "RDA", + "city": "WEST COLUMBIA", + "state": "SC", + "county": "LEXINGTON", + "elevation": "70.41 m (229.66 ft)", + "lat": "+33 56 55.4", + "long": "-81 07 05.8" + }, + "KGWX": { + "id": "GWX", + "name": "COLUMBUS AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "GREENWOOD SPRINGS", + "state": "MS", + "county": "MONROE", + "elevation": "155 m (508.53 ft)", + "lat": "+33 53 48.9", + "long": "-88 19 45.1" + }, + "KCRP": { + "id": "CRP", + "name": "CORPUS CHRISTI", + "agency": "NWS", + "equipment": "RDA", + "city": "CORPUS CHRISTI", + "state": "TX", + "county": "NUECES", + "elevation": "13.72 m (42.65 ft)", + "lat": "+27 47 02.46", + "long": "-97 30 40.5" + }, + "KFWS": { + "id": "FWS", + "name": "DALLAS/FT WORTH", + "agency": "NWS", + "equipment": "RDA", + "city": "FORT WORTH", + "state": "TX", + "county": "TARRANT", + "elevation": "212 m (695.54 ft)", + "lat": "+32 34 22.8", + "long": "-97 18 11.34" + }, + "KFTG": { + "id": "FTG", + "name": "DENVER", + "agency": "NWS", + "equipment": "RDA", + "city": "FRONT RANGE AP", + "state": "CO", + "county": "ARAPAHOE", + "elevation": "1675.49 m (5495.41 ft)", + "lat": "+39 47 11.9", + "long": "-104 32 44.9" + }, + "KDMX": { + "id": "DMX", + "name": "DES MOINES", + "agency": "NWS", + "equipment": "RDA", + "city": "JOHNSTON", + "state": "IA", + "county": "POLK", + "elevation": "299.01 m (980.97 ft)", + "lat": "+41 43 52.32", + "long": "-93 43 22.33" + }, + "KDTX": { + "id": "DTX", + "name": "DETROIT", + "agency": "NWS", + "equipment": "RDA", + "city": "WHITE LAKE", + "state": "MI", + "county": "OAKLAND", + "elevation": "336 m (1102.36 ft)", + "lat": "+42 42 00", + "long": "-83 28 18" + }, + "KDDC": { + "id": "DDC", + "name": "DODGE CITY", + "agency": "NWS", + "equipment": "RDA", + "city": "DODGE CITY", + "state": "KS", + "county": "FORD", + "elevation": "789.43 m (2588.58 ft)", + "lat": "+37 45 39", + "long": "-99 58 08" + }, + "KDOX": { + "id": "DOX", + "name": "DOVER AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "ELLENDALE STATE FOREST", + "state": "DE", + "county": "SUSSEX", + "elevation": "15.24 m (49.21 ft)", + "lat": "+38 49 32.76", + "long": "-75 26 24.42" + }, + "KDLH": { + "id": "DLH", + "name": "DULUTH", + "agency": "NWS", + "equipment": "RDA", + "city": "DULUTH", + "state": "MN", + "county": "ST LOUIS", + "elevation": "435.25 m (1427.17 ft)", + "lat": "+46 50 13", + "long": "-92 12 35" + }, + "KDYX": { + "id": "DYX", + "name": "DYESS AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "MORAN", + "state": "TX", + "county": "SHACKELFORD", + "elevation": "462.38 m (1515.75 ft)", + "lat": "+32 32 18.6", + "long": "-99 15 15.6" + }, + "KEYX": { + "id": "EYX", + "name": "EDWARDS AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "BORON", + "state": "CA", + "county": "SAN BERNADINO", + "elevation": "846 m (2775.59 ft)", + "lat": "+35 05 52.26", + "long": "-117 33 38.7" + }, + "KEVX": { + "id": "EVX", + "name": "EGLIN AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "RED BAY", + "state": "FL", + "county": "WALTON", + "elevation": "42.67 m (137.8 ft)", + "lat": "+30 33 54.12", + "long": "-85 55 18" + }, + "KEPZ": { + "id": "EPZ", + "name": "EL PASO", + "agency": "NWS", + "equipment": "RDA", + "city": "SANTA TERESA", + "state": "NM", + "county": "DONA ANA", + "elevation": "1250.9 m (4101.05 ft)", + "lat": "+31 52 23", + "long": "-106 41 52.8" + }, + "KLRX": { + "id": "LRX", + "name": "ELKO (RDA 1)", + "agency": "NWS", + "equipment": "RDA", + "city": "ELKO", + "state": "NV", + "county": "LANDER", + "elevation": "2067 m (6781.5 ft)", + "lat": "+40 44 22.38", + "long": "-116 48 09.72" + }, + "KBHX": { + "id": "BHX", + "name": "EUREKA (BUNKER HILL)", + "agency": "NWS", + "equipment": "RDA", + "city": "EUREKA", + "state": "CA", + "county": "HUMBOLDT", + "elevation": "732.13 m (2401.57 ft)", + "lat": "+40 29 54.9", + "long": "-124 17 31.8" + }, + "PAPD": { + "id": "APD", + "name": "FAIRBANKS FAA (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "FAIRBANKS", + "state": "AK", + "county": "N/A", + "elevation": "790.35 m (2591.86 ft)", + "lat": "+65 02 06.41", + "long": "-147 30 05.15" + }, + "KMVX": { + "id": "MVX", + "name": "FARGO/GRAND FORKS", + "agency": "NWS", + "equipment": "RDA", + "city": "GRAND FORKS", + "state": "ND", + "county": "TRAILL", + "elevation": "300.53 m (984.25 ft)", + "lat": "+47 31 40", + "long": "-97 19 32" + }, + "KFSX": { + "id": "FSX", + "name": "FLAGSTAFF (RDA 1)", + "agency": "NWS", + "equipment": "RDA", + "city": "FLAGSTAFF", + "state": "AZ", + "county": "COCONINO", + "elevation": "2260.7 m (7414.7 ft)", + "lat": "+34 34 27.6", + "long": "-111 11 54.4" + }, + "KHPX": { + "id": "HPX", + "name": "FT CAMPBELL", + "agency": "AFWA", + "equipment": "RDA", + "city": "TRENTON", + "state": "KY", + "county": "TODD", + "elevation": "172 m (564.3 ft)", + "lat": "+36 44 13.1", + "long": "-87 17 08.1" + }, + "KTYX": { + "id": "TYX", + "name": "FT DRUM", + "agency": "AFWA", + "equipment": "RDA", + "city": "MONTAGUE", + "state": "NY", + "county": "LEWIS", + "elevation": "562.66 m (1843.83 ft)", + "lat": "+43 45 20.5", + "long": "-75 40 47.5" + }, + "KGRK": { + "id": "GRK", + "name": "FT CAVAZOS", + "agency": "AFWA", + "equipment": "RDA", + "city": "GRANGER", + "state": "TX", + "county": "BELL", + "elevation": "163.98 m (534.78 ft)", + "lat": "+30 43 18.6", + "long": "-97 22 58.6" + }, + "KPOE": { + "id": "POE", + "name": "FT JOHNSON", + "agency": "AFWA", + "equipment": "RDA", + "city": "FT POLK", + "state": "LA", + "county": "VERNON", + "elevation": "124.36 m (406.82 ft)", + "lat": "+31 09 19", + "long": "-92 58 34" + }, + "KEOX": { + "id": "EOX", + "name": "FT NOVOSEL", + "agency": "AFWA", + "equipment": "RDA", + "city": "ECHO", + "state": "AL", + "county": "DALE", + "elevation": "144 m (472.44 ft)", + "lat": "+31 27 38", + "long": "-85 27 33.8" + }, + "KGGW": { + "id": "GGW", + "name": "GLASGOW", + "agency": "NWS", + "equipment": "RDA", + "city": "GLASGOW", + "state": "MT", + "county": "VALLEY", + "elevation": "702 m (2303.15 ft)", + "lat": "+48 12 22.9", + "long": "-106 37 28.9" + }, + "KGLD": { + "id": "GLD", + "name": "GOODLAND", + "agency": "NWS", + "equipment": "RDA", + "city": "GOODLAND", + "state": "KS", + "county": "SHERMAN", + "elevation": "1112.82 m (3648.29 ft)", + "lat": "+39 22 01", + "long": "-101 42 01" + }, + "KUEX": { + "id": "UEX", + "name": "GRAND ISLAND", + "agency": "NWS", + "equipment": "RDA", + "city": "BLUE HILL", + "state": "NE", + "county": "WEBSTER", + "elevation": "602.28 m (1975.07 ft)", + "lat": "+40 19 15", + "long": "-98 26 31" + }, + "KGJX": { + "id": "GJX", + "name": "GRAND JUNCTION (RDA 1)", + "agency": "NWS", + "equipment": "RDA", + "city": "GRAND JUNCTION", + "state": "CO", + "county": "MESA", + "elevation": "3059 m (10036.09 ft)", + "lat": "+39 03 43.81", + "long": "-108 12 49.54" + }, + "KGRR": { + "id": "GRR", + "name": "GRAND RAPIDS", + "agency": "NWS", + "equipment": "RDA", + "city": "GRAND RAPIDS", + "state": "MI", + "county": "KENT", + "elevation": "237.13 m (777.56 ft)", + "lat": "+42 53 38", + "long": "-85 32 41.6" + }, + "KTFX": { + "id": "TFX", + "name": "GREAT FALLS", + "agency": "NWS", + "equipment": "RDA", + "city": "GREAT FALLS", + "state": "MT", + "county": "CASCADE", + "elevation": "1140 m (3740.16 ft)", + "lat": "+47 27 34.5", + "long": "-111 23 07.2" + }, + "KGRB": { + "id": "GRB", + "name": "GREEN BAY", + "agency": "NWS", + "equipment": "RDA", + "city": "GREEN BAY", + "state": "WI", + "county": "BROWN", + "elevation": "216 m (708.66 ft)", + "lat": "+44 29 55.08", + "long": "-88 06 40" + }, + "KGSP": { + "id": "GSP", + "name": "GREER", + "agency": "NWS", + "equipment": "RDA", + "city": "GREER", + "state": "SC", + "county": "SPARTANBURG", + "elevation": "291 m (954.72 ft)", + "lat": "+34 52 59.9", + "long": "-82 13 11.4" + }, + "KHDX": { + "id": "HDX", + "name": "HOLLOMAN AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "RUIDOSO", + "state": "NM", + "county": "DONA ANA", + "elevation": "1286.87 m (4219.16 ft)", + "lat": "+33 04 37.2", + "long": "-106 07 12.12" + }, + "KHGX": { + "id": "HGX", + "name": "HOUSTON", + "agency": "NWS", + "equipment": "RDA", + "city": "DICKINSON", + "state": "TX", + "county": "GALVESTON", + "elevation": "5.49 m (16.4 ft)", + "lat": "+29 28 18.84", + "long": "-95 04 43.44" + }, + "KIND": { + "id": "IND", + "name": "INDIANAPOLIS", + "agency": "NWS", + "equipment": "RDA", + "city": "INDIANAPOLIS", + "state": "IN", + "county": "MARION", + "elevation": "240.79 m (787.4 ft)", + "lat": "+39 42 27", + "long": "-86 16 49" + }, + "KJKL": { + "id": "JKL", + "name": "JACKSON, KY", + "agency": "NWS", + "equipment": "RDA", + "city": "JACKSON", + "state": "KY", + "county": "BREATHITT", + "elevation": "415.75 m (1361.55 ft)", + "lat": "+37 35 27", + "long": "-83 18 47" + }, + "KJAX": { + "id": "JAX", + "name": "JACKSONVILLE", + "agency": "NWS", + "equipment": "RDA", + "city": "JACKSONVILLE", + "state": "FL", + "county": "DUVAL", + "elevation": "19 m (62.34 ft)", + "lat": "+30 29 04.68", + "long": "-81 42 06.84" + }, + "RODN": { + "id": "ODNR5", + "name": "KADENA AB", + "agency": "AFWA", + "equipment": "RDA", + "city": "KADENA AB", + "state": "JA", + "county": "N/A", + "elevation": "91 m (298.56 ft)", + "lat": "+26 18 28.08", + "long": "+127 54 12.49" + }, + "PHKM": { + "id": "HKM", + "name": "KAMUELA/KOHALA APT (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "KAMUELA", + "state": "HI", + "county": "HAWAII", + "elevation": "1174 m (3851.71 ft)", + "lat": "+20 07 31", + "long": "-155 46 40" + }, + "KBYX": { + "id": "BYX", + "name": "KEY WEST", + "agency": "NWS", + "equipment": "RDA", + "city": "BOCA CHICA KEY", + "state": "FL", + "county": "MONROE", + "elevation": "2.44 m (6.56 ft)", + "lat": "+24 35 51", + "long": "-81 42 11.4" + }, + "PAKC": { + "id": "AKC", + "name": "KING SALMON FAA (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "KING SALMON", + "state": "AK", + "county": "N/A", + "elevation": "19.2 m (62.34 ft)", + "lat": "+58 40 46", + "long": "-156 37 46" + }, + "KMRX": { + "id": "MRX", + "name": "KNOXVILLE", + "agency": "NWS", + "equipment": "RDA", + "city": "MORRISTOWN", + "state": "TN", + "county": "HAMBLEN", + "elevation": "407.52 m (1335.3 ft)", + "lat": "+36 10 07", + "long": "-83 24 07" + }, + "RKJK": { + "id": "KJKR4", + "name": "KUNSAN AB", + "agency": "AFWA", + "equipment": "RDA", + "city": "KUNSAN AB", + "state": "KO", + "county": "N/A", + "elevation": "23.77 m (75.46 ft)", + "lat": "+35 55 27", + "long": "+126 37 20" + }, + "KARX": { + "id": "ARX", + "name": "LA CROSSE", + "agency": "NWS", + "equipment": "RDA", + "city": "LA CROSSE", + "state": "WI", + "county": "LA CROSSE", + "elevation": "388.92 m (1272.97 ft)", + "lat": "+43 49 22", + "long": "-91 11 28" + }, + "KLCH": { + "id": "LCH", + "name": "LAKE CHARLES", + "agency": "NWS", + "equipment": "RDA", + "city": "LAKE CHARLES", + "state": "LA", + "county": "CALCASIEU", + "elevation": "17 m (55.77 ft)", + "lat": "+30 07 31.1", + "long": "-93 12 57.2" + }, + "KESX": { + "id": "ESX", + "name": "LAS VEGAS", + "agency": "NWS", + "equipment": "RDA", + "city": "LAS VEGAS", + "state": "NV", + "county": "CLARK", + "elevation": "1483.46 m (4865.49 ft)", + "lat": "+35 42 04.86", + "long": "-114 53 29.94" + }, + "KDFX": { + "id": "DFX", + "name": "LAUGHLIN AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "BRACKETVILLE", + "state": "TX", + "county": "KINNEY", + "elevation": "344.73 m (1128.61 ft)", + "lat": "+29 16 23.3", + "long": "-100 16 49.2" + }, + "KILX": { + "id": "ILX", + "name": "LINCOLN", + "agency": "NWS", + "equipment": "RDA", + "city": "LINCOLN", + "state": "IL", + "county": "LOGAN", + "elevation": "188 m (616.8 ft)", + "lat": "+40 09 01.8", + "long": "-89 20 12.45" + }, + "KLZK": { + "id": "LZK", + "name": "LITTLE ROCK", + "agency": "NWS", + "equipment": "RDA", + "city": "NORTH LITTLE ROCK", + "state": "AR", + "county": "PULASKI", + "elevation": "173.13 m (567.59 ft)", + "lat": "+34 50 11.4", + "long": "-92 15 43.9" + }, + "KVTX": { + "id": "VTX", + "name": "LOS ANGELES", + "agency": "NWS", + "equipment": "RDA", + "city": "LOS ANGELES", + "state": "CA", + "county": "VENTURA", + "elevation": "830.88 m (2723.1 ft)", + "lat": "+34 24 43.26", + "long": "-119 10 43.5" + }, + "KLVX": { + "id": "LVX", + "name": "LOUISVILLE", + "agency": "NWS", + "equipment": "RDA", + "city": "FORT KNOX", + "state": "KY", + "county": "HARDIN", + "elevation": "219.15 m (718.5 ft)", + "lat": "+37 58 31", + "long": "-85 56 38" + }, + "KLBB": { + "id": "LBB", + "name": "LUBBOCK", + "agency": "NWS", + "equipment": "RDA", + "city": "LUBBOCK", + "state": "TX", + "county": "LUBBOCK", + "elevation": "1005 m (3297.24 ft)", + "lat": "+33 39 14.9", + "long": "-101 48 51" + }, + "KMQT": { + "id": "MQT", + "name": "MARQUETTE", + "agency": "NWS", + "equipment": "RDA", + "city": "NEGAUNEE", + "state": "MI", + "county": "MARQUETTE", + "elevation": "430.07 m (1410.76 ft)", + "lat": "+46 31 52", + "long": "-87 32 54" + }, + "KMXX": { + "id": "MXX", + "name": "MAXWELL AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "CARRVILLE", + "state": "AL", + "county": "MACON", + "elevation": "136 m (446.19 ft)", + "lat": "+32 32 11.94", + "long": "-85 47 23.1" + }, + "KMAX": { + "id": "MAX", + "name": "MEDFORD (RDA 1)", + "agency": "NWS", + "equipment": "RDA", + "city": "MEDFORD", + "state": "OR", + "county": "JACKSON", + "elevation": "2289.96 m (7509.84 ft)", + "lat": "+42 04 52.21", + "long": "-122 43 02.53" + }, + "KMLB": { + "id": "MLB", + "name": "MELBOURNE", + "agency": "NWS", + "equipment": "RDA", + "city": "MELBOURNE", + "state": "FL", + "county": "BREVARD", + "elevation": "10.67 m (32.81 ft)", + "lat": "+28 06 47.5", + "long": "-80 39 14.7" + }, + "KNQA": { + "id": "NQA", + "name": "MEMPHIS", + "agency": "NWS", + "equipment": "RDA", + "city": "MILLINGTON", + "state": "TN", + "county": "SHELBY", + "elevation": "103 m (337.93 ft)", + "lat": "+35 20 41", + "long": "-89 52 24" + }, + "KAMX": { + "id": "AMX", + "name": "MIAMI", + "agency": "NWS", + "equipment": "RDA", + "city": "MIAMI", + "state": "FL", + "county": "DADE", + "elevation": "4.27 m (13.12 ft)", + "lat": "+25 36 39.9", + "long": "-80 24 45.6" + }, + "PAIH": { + "id": "AIH", + "name": "MIDDLETON ISLAND (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "MIDDLETON ISLAND", + "state": "AK", + "county": "N/A", + "elevation": "20.42 m (65.62 ft)", + "lat": "+59 27 38.76", + "long": "-146 18 12.41" + }, + "KMAF": { + "id": "MAF", + "name": "MIDLAND/ODESSA", + "agency": "NWS", + "equipment": "RDA", + "city": "MIDLAND", + "state": "TX", + "county": "MIDLAND", + "elevation": "883 m (2896.98 ft)", + "lat": "+31 56 36.46", + "long": "-102 11 21.3" + }, + "KMKX": { + "id": "MKX", + "name": "MILWAUKEE", + "agency": "NWS", + "equipment": "RDA", + "city": "DOUSMAN", + "state": "WI", + "county": "WAUKESHA", + "elevation": "292 m (958.01 ft)", + "lat": "+42 58 04.44", + "long": "-88 33 02.4" + }, + "KMPX": { + "id": "MPX", + "name": "MINNEAPOLIS", + "agency": "NWS", + "equipment": "RDA", + "city": "CHANHASSEN", + "state": "MN", + "county": "CARVER", + "elevation": "301 m (987.53 ft)", + "lat": "+44 50 56", + "long": "-93 33 55.9" + }, + "KMBX": { + "id": "MBX", + "name": "MINOT AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "DEERING", + "state": "ND", + "county": "MCHENRY", + "elevation": "455.07 m (1492.78 ft)", + "lat": "+48 23 35", + "long": "-100 51 52" + }, + "KMSX": { + "id": "MSX", + "name": "MISSOULA (RDA 1)", + "agency": "NWS", + "equipment": "RDA", + "city": "MISSOULA", + "state": "MT", + "county": "MISSOULA", + "elevation": "2417 m (7929.79 ft)", + "lat": "+47 02 27.6", + "long": "-113 59 10.4" + }, + "KMOB": { + "id": "MOB", + "name": "MOBILE", + "agency": "NWS", + "equipment": "RDA", + "city": "MOBILE", + "state": "AL", + "county": "MOBILE", + "elevation": "63.4 m (206.69 ft)", + "lat": "+30 40 46", + "long": "-88 14 24" + }, + "PHMO": { + "id": "HMO", + "name": "MOLOKAI FAA (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "MOLOKAI", + "state": "HI", + "county": "MOLOKAI", + "elevation": "415.44 m (1361.55 ft)", + "lat": "+21 07 58", + "long": "-157 10 49" + }, + "KVAX": { + "id": "VAX", + "name": "MOODY AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "SOUTH STOCKTON", + "state": "GA", + "county": "LANIER", + "elevation": "66 m (216.54 ft)", + "lat": "+30 53 25", + "long": "-83 00 06.5" + }, + "KMHX": { + "id": "MHX", + "name": "MOREHEAD CITY", + "agency": "NWS", + "equipment": "RDA", + "city": "NEWPORT", + "state": "NC", + "county": "CARTERET", + "elevation": "9.45 m (29.53 ft)", + "lat": "+34 46 33.27", + "long": "-76 52 34.28" + }, + "KOHX": { + "id": "OHX", + "name": "NASHVILLE", + "agency": "NWS", + "equipment": "RDA", + "city": "OLD HICKORY", + "state": "TN", + "county": "WILSON", + "elevation": "176.48 m (577.43 ft)", + "lat": "+36 14 50", + "long": "-86 33 45" + }, + "KAPX": { + "id": "APX", + "name": "NCL MICHIGAN", + "agency": "NWS", + "equipment": "RDA", + "city": "GAYLORD", + "state": "MI", + "county": "OTSEGO", + "elevation": "446.23 m (1463.25 ft)", + "lat": "+44 54 22.86", + "long": "-84 43 10.32" + }, + "PAEC": { + "id": "AEC", + "name": "NOME FAA (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "NOME", + "state": "AK", + "county": "N/A", + "elevation": "17.68 m (55.77 ft)", + "lat": "+64 30 41", + "long": "-165 17 42" + }, + "KAKQ": { + "id": "AKQ", + "name": "NORFOLK", + "agency": "NWS", + "equipment": "RDA", + "city": "WAKEFIELD", + "state": "VA", + "county": "SUSSEX", + "elevation": "48 m (157.48 ft)", + "lat": "+36 59 02.58", + "long": "-77 00 26.5" + }, + "KTLX": { + "id": "TLX", + "name": "NORMAN", + "agency": "NWS", + "equipment": "RDA", + "city": "OKLAHOMA CITY", + "state": "OK", + "county": "CLEVELAND", + "elevation": "369.72 m (1210.63 ft)", + "lat": "+35 20 00.10", + "long": "-97 16 39.94" + }, + "KLNX": { + "id": "LNX", + "name": "NORTH PLATTE", + "agency": "NWS", + "equipment": "RDA", + "city": "NORTH PLATTE", + "state": "NE", + "county": "LOGAN", + "elevation": "919 m (3015.09 ft)", + "lat": "+41 57 28.6", + "long": "-100 34 34.4" + }, + "KHTX": { + "id": "HTX", + "name": "NORTHEAST ALABAMA", + "agency": "NWS", + "equipment": "RDA", + "city": "HYTOP", + "state": "AL", + "county": "JACKSON", + "elevation": "537.06 m (1761.81 ft)", + "lat": "+34 55 50", + "long": "-86 05 01" + }, + "KIWX": { + "id": "IWX", + "name": "NORTHERN INDIANA", + "agency": "NWS", + "equipment": "RDA", + "city": "NORTH WEBSTER", + "state": "IN", + "county": "KOSCIUSKO", + "elevation": "292.3 m (958.01 ft)", + "lat": "+41 21 31", + "long": "-85 42 00" + }, + "KOUN": { + "id": "NORO2", + "name": "NSSL", + "agency": "NWS", + "equipment": "RDA", + "city": "NORMAN", + "state": "OK", + "county": "CLEVELAND", + "elevation": "370 m (1213.91 ft)", + "lat": "+35 14 09.81", + "long": "-97 27 44.46" + }, + "KOAX": { + "id": "OAX", + "name": "OMAHA", + "agency": "NWS", + "equipment": "RDA", + "city": "VALLEY", + "state": "NE", + "county": "DOUGLAS", + "elevation": "349.91 m (1145.01 ft)", + "lat": "+41 19 13.33", + "long": "-96 22 00.55" + }, + "KPAH": { + "id": "PAH", + "name": "PADUCAH", + "agency": "NWS", + "equipment": "RDA", + "city": "PADUCAH", + "state": "KY", + "county": "MCCRACKEN", + "elevation": "119.48 m (390.42 ft)", + "lat": "+37 04 06", + "long": "-88 46 19" + }, + "KPDT": { + "id": "PDT", + "name": "PENDLETON", + "agency": "NWS", + "equipment": "RDA", + "city": "PENDLETON", + "state": "OR", + "county": "UMATILLA", + "elevation": "461.77 m (1512.47 ft)", + "lat": "+45 41 26.34", + "long": "-118 51 10.55" + }, + "KDIX": { + "id": "DIX", + "name": "PHILADELPHIA", + "agency": "NWS", + "equipment": "RDA", + "city": "FORT DIX", + "state": "NJ", + "county": "BURLINGTON", + "elevation": "45.42 m (147.64 ft)", + "lat": "+39 56 49.52", + "long": "-74 24 38.63" + }, + "KIWA": { + "id": "IWA", + "name": "PHOENIX", + "agency": "NWS", + "equipment": "RDA", + "city": "PHOENIX", + "state": "AZ", + "county": "MARICOPA", + "elevation": "415 m (1361.55 ft)", + "lat": "+33 17 21.24", + "long": "-111 40 11.7" + }, + "KPBZ": { + "id": "PBZ", + "name": "PITTSBURGH", + "agency": "NWS", + "equipment": "RDA", + "city": "CORAOPOLIS", + "state": "PA", + "county": "ALLEGHENY", + "elevation": "361.19 m (1184.38 ft)", + "lat": "+40 31 54.18", + "long": "-80 13 04.68" + }, + "KEAX": { + "id": "EAX", + "name": "PLEASANT HILL", + "agency": "NWS", + "equipment": "RDA", + "city": "PLEASANT HILL", + "state": "MO", + "county": "CASS", + "elevation": "303.28 m (994.09 ft)", + "lat": "+38 48 36.9", + "long": "-94 15 52.1" + }, + "KSFX": { + "id": "SFX", + "name": "POCATELLO", + "agency": "NWS", + "equipment": "RDA", + "city": "SPRINGFIELD", + "state": "ID", + "county": "BINGHAM", + "elevation": "1363.68 m (4471.78 ft)", + "lat": "+43 06 20.16", + "long": "-112 41 10.08" + }, + "KGYX": { + "id": "GYX", + "name": "PORTLAND, ME", + "agency": "NWS", + "equipment": "RDA", + "city": "GRAY", + "state": "ME", + "county": "CUMBERLAND", + "elevation": "124.66 m (406.82 ft)", + "lat": "+43 53 28.7", + "long": "-70 15 22.9" + }, + "KRTX": { + "id": "RTX", + "name": "PORTLAND, OR", + "agency": "NWS", + "equipment": "RDA", + "city": "PORTLAND", + "state": "OR", + "county": "WASHINGTON", + "elevation": "492 m (1614.17 ft)", + "lat": "+45 42 54.14", + "long": "-122 57 54" + }, + "KPUX": { + "id": "PUX", + "name": "PUEBLO", + "agency": "NWS", + "equipment": "RDA", + "city": "PUEBLO", + "state": "CO", + "county": "PUEBLO", + "elevation": "1615 m (5298.56 ft)", + "lat": "+38 27 34.38", + "long": "-104 10 52.86" + }, + "KDVN": { + "id": "DVN", + "name": "QUAD CITIES", + "agency": "NWS", + "equipment": "RDA", + "city": "DAVENPORT", + "state": "IA", + "county": "SCOTT", + "elevation": "229.82 m (751.31 ft)", + "lat": "+41 36 42", + "long": "-90 34 51" + }, + "KRAX": { + "id": "RAX", + "name": "RALEIGH/DURHAM", + "agency": "NWS", + "equipment": "RDA", + "city": "CLAYTON", + "state": "NC", + "county": "WAKE", + "elevation": "106.07 m (347.77 ft)", + "lat": "+35 39 55.87", + "long": "-78 29 23.10" + }, + "KUDX": { + "id": "UDX", + "name": "RAPID CITY", + "agency": "NWS", + "equipment": "RDA", + "city": "NEW UNDERWOOD", + "state": "SD", + "county": "PENNINGTON", + "elevation": "939 m (3080.71 ft)", + "lat": "+44 07 29", + "long": "-102 49 48" + }, + "KRGX": { + "id": "RGX", + "name": "RENO (RDA 1)", + "agency": "NWS", + "equipment": "RDA", + "city": "NIXON", + "state": "NV", + "county": "WASHOE", + "elevation": "2529.54 m (8297.24 ft)", + "lat": "+39 45 14.6", + "long": "-119 27 43.3" + }, + "KRIW": { + "id": "RIW", + "name": "RIVERTON/LANDER", + "agency": "NWS", + "equipment": "RDA", + "city": "RIVERTON", + "state": "WY", + "county": "FREMONT", + "elevation": "1697.13 m (5567.59 ft)", + "lat": "+43 03 57.92", + "long": "-108 28 38.28" + }, + "KFCX": { + "id": "FCX", + "name": "ROANOKE", + "agency": "NWS", + "equipment": "RDA", + "city": "ROANOKE", + "state": "VA", + "county": "FLOYD", + "elevation": "874.17 m (2867.45 ft)", + "lat": "+37 01 27.84", + "long": "-80 16 26.29" + }, + "KJGX": { + "id": "JGX", + "name": "ROBINS AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "JEFFERSONVILLE", + "state": "GA", + "county": "TWIGGS", + "elevation": "158.8 m (518.37 ft)", + "lat": "+32 40 32.46", + "long": "-83 21 03" + }, + "KDAX": { + "id": "DAX", + "name": "SACRAMENTO", + "agency": "NWS", + "equipment": "RDA", + "city": "DAVIS", + "state": "CA", + "county": "YOLO", + "elevation": "9.14 m (29.53 ft)", + "lat": "+38 30 04", + "long": "-121 40 40.2" + }, + "KMTX": { + "id": "MTX", + "name": "SALT LAKE CITY (RDA 1)", + "agency": "NWS", + "equipment": "RDA", + "city": "SALT LAKE CITY", + "state": "UT", + "county": "SALT LAKE", + "elevation": "1975 m (6479.66 ft)", + "lat": "+41 15 46", + "long": "-112 26 52" + }, + "KSJT": { + "id": "SJT", + "name": "SAN ANGELO", + "agency": "NWS", + "equipment": "RDA", + "city": "SAN ANGELO", + "state": "TX", + "county": "TOM GREEN", + "elevation": "576.07 m (1889.76 ft)", + "lat": "+31 22 16.6", + "long": "-100 29 33" + }, + "KNKX": { + "id": "NKX", + "name": "SAN DIEGO", + "agency": "NWS", + "equipment": "RDA", + "city": "SAN DIEGO", + "state": "CA", + "county": "SAN DIEGO", + "elevation": "291.08 m (954.72 ft)", + "lat": "+32 55 08.46", + "long": "-117 02 30.48" + }, + "KMUX": { + "id": "MUX", + "name": "SAN FRANCISCO", + "agency": "NWS", + "equipment": "RDA", + "city": "LOS GATOS", + "state": "CA", + "county": "SANTA CLARA", + "elevation": "1057.35 m (3467.85 ft)", + "lat": "+37 09 18.8", + "long": "-121 53 54.4" + }, + "KHNX": { + "id": "HNX", + "name": "SAN JOAQUIN VALY", + "agency": "NWS", + "equipment": "RDA", + "city": "HANFORD", + "state": "CA", + "county": "KINGS", + "elevation": "74.07 m (242.78 ft)", + "lat": "+36 18 51.05", + "long": "-119 37 55.7" + }, + "TJUA": { + "id": "JUA", + "name": "SAN JUAN FAA (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "SAN JUAN", + "state": "PR", + "county": "N/A", + "elevation": "867 m (2844.49 ft)", + "lat": "+18 06 56.4", + "long": "-66 04 41.4" + }, + "KSOX": { + "id": "SOX", + "name": "SANTA ANA MTS", + "agency": "NWS", + "equipment": "RDA", + "city": "SANTA ANA MOUNTAINS", + "state": "CA", + "county": "ORANGE", + "elevation": "927 m (3041.34 ft)", + "lat": "+33 49 03.84", + "long": "-117 38 09.6" + }, + "KATX": { + "id": "ATX", + "name": "SEATTLE", + "agency": "NWS", + "equipment": "RDA", + "city": "EVERETT", + "state": "WA", + "county": "ISLAND", + "elevation": "161 m (528.22 ft)", + "lat": "+48 11 40.6", + "long": "-122 29 44.5" + }, + "KSHV": { + "id": "SHV", + "name": "SHREVEPORT", + "agency": "NWS", + "equipment": "RDA", + "city": "SHREVEPORT", + "state": "LA", + "county": "CADDO", + "elevation": "83.21 m (272.31 ft)", + "lat": "+32 27 03", + "long": "-93 50 28.5" + }, + "KFSD": { + "id": "FSD", + "name": "SIOUX FALLS", + "agency": "NWS", + "equipment": "RDA", + "city": "SIOUX FALLS", + "state": "SD", + "county": "MINNEHAHA", + "elevation": "435.86 m (1427.17 ft)", + "lat": "+43 35 16", + "long": "-96 43 46" + }, + "PACG": { + "id": "ACG", + "name": "SITKA FAA (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "BIORKA ISLAND", + "state": "AK", + "county": "N/A", + "elevation": "63.09 m (206.69 ft)", + "lat": "+56 51 10", + "long": "-135 31 45" + }, + "PHKI": { + "id": "HKI", + "name": "SOUTH KAUAI FAA (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "SOUTH KAUAI", + "state": "HI", + "county": "KAUAI", + "elevation": "69 m (226.38 ft)", + "lat": "+21 53 38", + "long": "-159 33 09" + }, + "PHWA": { + "id": "HWA", + "name": "SOUTH SHORE FAA (RDA 1)", + "agency": "FAA", + "equipment": "RDA", + "city": "NAALEHU", + "state": "HI", + "county": "HAWAII", + "elevation": "420.62 m (1377.95 ft)", + "lat": "+19 05 42", + "long": "-155 34 08" + }, + "KOTX": { + "id": "OTX", + "name": "SPOKANE", + "agency": "NWS", + "equipment": "RDA", + "city": "SPOKANE", + "state": "WA", + "county": "SPOKANE", + "elevation": "726.64 m (2381.89 ft)", + "lat": "+47 40 49.5", + "long": "-117 37 36.4" + }, + "KSGF": { + "id": "SGF", + "name": "SPRINGFIELD", + "agency": "NWS", + "equipment": "RDA", + "city": "SPRINGFIELD", + "state": "MO", + "county": "GREENE", + "elevation": "389.53 m (1276.25 ft)", + "lat": "+37 14 06.86", + "long": "-93 24 01.51" + }, + "KLSX": { + "id": "LSX", + "name": "ST LOUIS", + "agency": "NWS", + "equipment": "RDA", + "city": "WELDON SPRING", + "state": "MO", + "county": "ST CHARLES", + "elevation": "185.32 m (606.96 ft)", + "lat": "+38 41 55", + "long": "-90 40 58" + }, + "KCCX": { + "id": "CCX", + "name": "STATE COLLEGE", + "agency": "NWS", + "equipment": "RDA", + "city": "STATE COLLEGE", + "state": "PA", + "county": "CENTRE", + "elevation": "733.04 m (2404.86 ft)", + "lat": "+40 55 23.4", + "long": "-78 00 13.4" + }, + "KLWX": { + "id": "LWX", + "name": "STERLING", + "agency": "NWS", + "equipment": "RDA", + "city": "STERLING", + "state": "VA", + "county": "LOUDOUN", + "elevation": "88.54 m (288.71 ft)", + "lat": "+38 58 34", + "long": "-77 29 15" + }, + "KTLH": { + "id": "TLH", + "name": "TALLAHASSEE", + "agency": "NWS", + "equipment": "RDA", + "city": "TALLAHASSEE", + "state": "FL", + "county": "LEON", + "elevation": "19.2 m (62.34 ft)", + "lat": "+30 23 51.3", + "long": "-84 19 44.2" + }, + "KTBW": { + "id": "TBW", + "name": "TAMPA", + "agency": "NWS", + "equipment": "RDA", + "city": "RUSKIN", + "state": "FL", + "county": "HILLSBOROUGH", + "elevation": "12.5 m (39.37 ft)", + "lat": "+27 42 19.8", + "long": "-82 24 06.4" + }, + "KTWX": { + "id": "TWX", + "name": "TOPEKA", + "agency": "NWS", + "equipment": "RDA", + "city": "TOPEKA", + "state": "KS", + "county": "WABAUNSEE", + "elevation": "416.66 m (1364.83 ft)", + "lat": "+38 59 49.02", + "long": "-96 13 57.18" + }, + "KEMX": { + "id": "EMX", + "name": "TUCSON", + "agency": "NWS", + "equipment": "RDA", + "city": "TUCSON", + "state": "AZ", + "county": "PIMA", + "elevation": "1586.48 m (5203.41 ft)", + "lat": "+31 53 37.14", + "long": "-110 37 48.9" + }, + "KINX": { + "id": "INX", + "name": "TULSA", + "agency": "NWS", + "equipment": "RDA", + "city": "INOLA", + "state": "OK", + "county": "ROGERS", + "elevation": "203.61 m (666.01 ft)", + "lat": "+36 10 30.47", + "long": "-95 33 50.98" + }, + "KVNX": { + "id": "VNX", + "name": "VANCE AFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "CHEROKEE", + "state": "OK", + "county": "ALFALFA", + "elevation": "368.81 m (1207.35 ft)", + "lat": "+36 44 26.22", + "long": "-98 07 39.78" + }, + "KVBX": { + "id": "VBX", + "name": "VANDENBERG SFB", + "agency": "AFWA", + "equipment": "RDA", + "city": "ORCUTT", + "state": "CA", + "county": "SANTA BARBARA", + "elevation": "383 m (1256.56 ft)", + "lat": "+34 50 18.78", + "long": "-120 23 52.50" + }, + "KSRX": { + "id": "SRX", + "name": "WESTERN ARKANSAS", + "agency": "NWS", + "equipment": "RDA", + "city": "CHAFFEE RIDGE", + "state": "AR", + "county": "SEBASTIAN", + "elevation": "200 m (656.17 ft)", + "lat": "+35 17 25.5", + "long": "-94 21 42.8" + }, + "KICT": { + "id": "ICT", + "name": "WICHITA", + "agency": "NWS", + "equipment": "RDA", + "city": "WICHITA", + "state": "KS", + "county": "SEDGWICK", + "elevation": "406.91 m (1332.02 ft)", + "lat": "+37 39 16", + "long": "-97 26 35" + }, + "KLTX": { + "id": "LTX", + "name": "WILMINGTON", + "agency": "NWS", + "equipment": "RDA", + "city": "SHALLOTTE", + "state": "NC", + "county": "BRUNSWICK", + "elevation": "19.51 m (62.34 ft)", + "lat": "+33 59 20.94", + "long": "-78 25 44.79" + }, + "KYUX": { + "id": "YUX", + "name": "YUMA (RDA 1)", + "agency": "NWS", + "equipment": "RDA", + "city": "YUMA", + "state": "AZ", + "county": "PIMA", + "elevation": "53.04 m (173.88 ft)", + "lat": "+32 29 43.01", + "long": "-114 39 24.16" + }, + "KVWX": { + "id": "VWX", + "name": "EVANSVILLE, IN", + "agency": "NWS", + "equipment": "RDA", + "city": "OWENSVILLE", + "state": "IN", + "county": "GIBSON", + "elevation": "155.75 m (508.53 ft)", + "lat": "+38 15 36.9", + "long": "-87 43 28.3" + }, + "KDGX": { + "id": "DGX", + "name": "JACKSON/BRANDON, MS", + "agency": "NWS", + "equipment": "RDA", + "city": "BRANDON", + "state": "MS", + "county": "RANKIN", + "elevation": "150.92 m (492.13 ft)", + "lat": "+32 16 47.8", + "long": "-89 59 04" + }, + "KLGX": { + "id": "LGX", + "name": "LANGLEY HILL (NW WASHINGTON)", + "agency": "NWS", + "equipment": "RDA", + "city": "LANGLEY HILL", + "state": "WA", + "county": "GRAYS HARBOR", + "elevation": "76.8 m (249.34 ft)", + "lat": "+47 07 01", + "long": "-124 06 24" + }, + "KHDC": { + "id": "HDC", + "name": "HAMMOND", + "agency": "NWS", + "equipment": "RDA", + "city": "HAMMOND", + "state": "LA", + "county": "TANGIPAHOA", + "elevation": "13 m (42.65 ft)", + "lat": "+30 31 9.5", + "long": "-90 24 26.5" + } + } +} diff --git a/client/src/lib/index.ts b/client/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/client/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/client/src/lib/layerList.ts b/client/src/lib/layerList.ts new file mode 100644 index 0000000..56d24f9 --- /dev/null +++ b/client/src/lib/layerList.ts @@ -0,0 +1,27 @@ +import type { SiteListing } from './data/sites'; + +export type LayerList = Category[]; +export type Category = + | { + id: string; + category: string; + singlesite: false; + children: PrimaryLayer[]; + } + | { + id: string; + category: string; + singlesite: true; + sites: SiteListing; + children: PrimaryLayer[]; + }; + +export type PrimaryLayer = { + id: string; + layer: string; +} & PrimaryLayerSource; + +export type PrimaryLayerSource = { + type: 'raster'; + tileUrl: string; +}; diff --git a/client/src/lib/utils.ts b/client/src/lib/utils.ts new file mode 100644 index 0000000..ac680b3 --- /dev/null +++ b/client/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/client/src/routes/+layout.svelte b/client/src/routes/+layout.svelte new file mode 100644 index 0000000..697cf5a --- /dev/null +++ b/client/src/routes/+layout.svelte @@ -0,0 +1,10 @@ + + + +{@render children()} + \ No newline at end of file diff --git a/client/src/routes/+page.server.ts b/client/src/routes/+page.server.ts new file mode 100644 index 0000000..a4d201f --- /dev/null +++ b/client/src/routes/+page.server.ts @@ -0,0 +1,55 @@ +import type { PageServerLoad } from './$types'; +import wsr88dsites from '$lib/data/wsr88d.json'; +import type { LayerList } from '$lib/layerList'; + +export const load: PageServerLoad = () => { + const layers: LayerList = [ + { + id: '01JV7H1X1GPP6CD4HPZZEXVDWS', + category: 'US-CONUS/National', + singlesite: false, + children: [ + { + id: '01JV7H238Y1YQW95C3NZA19HF2', + layer: 'Composite Reflectivity', + type: 'raster', + tileUrl: + 'https://tiler.weather.ax/grib2/noaa_mrms_composite_reflectivity_qcd_CONUS/{z}/{x}/{y}.png' + }, + { + id: '01JV7RZJ7W9KZBJ34CG7YSS0PZ', + layer: 'Differential Reflectivity', + type: 'raster', + tileUrl: + 'https://tiler.weather.ax/grib2/noaa_mrms_composite_reflectivity_rhohv_CONUS/{z}/{x}/{y}.png' + } + ] + }, + { + id: '01JV7H29HTF3K0B8BBE3BCNMXX', + category: 'US-Singlesite', + singlesite: true, + sites: wsr88dsites, + children: [ + { + id: '01JV7RV67A96V2FECTDB6A0DFG', + layer: 'Super Resolution Base Reflectivity (Tilt 1)', + type: 'raster', + tileUrl: + 'https://tiler.weather.ax/grib2/noaa_mrms_composite_reflectivity_qcd/{z}/{x}/{y}.png' + }, + { + id: '01JV7SEN0GFB76NR843B1GFW5N', + layer: 'Super Resolution Base Velocity (Tilt 1)', + type: 'raster', + tileUrl: + 'https://tiler.weather.ax/grib2/noaa_mrms_composite_reflectivity_qcd/{z}/{x}/{y}.png' + } + ] + } + ]; + + return { + layers + }; +}; diff --git a/client/src/routes/+page.svelte b/client/src/routes/+page.svelte new file mode 100644 index 0000000..bdc90a1 --- /dev/null +++ b/client/src/routes/+page.svelte @@ -0,0 +1,10 @@ + + +
+ +
diff --git a/client/static/favicon.png b/client/static/favicon.png new file mode 100644 index 0000000..825b9e6 Binary files /dev/null and b/client/static/favicon.png differ diff --git a/client/static/radar-rect-gray.svg b/client/static/radar-rect-gray.svg new file mode 100644 index 0000000..307a44c --- /dev/null +++ b/client/static/radar-rect-gray.svg @@ -0,0 +1,3 @@ + + + diff --git a/client/svelte.config.js b/client/svelte.config.js new file mode 100644 index 0000000..1295460 --- /dev/null +++ b/client/svelte.config.js @@ -0,0 +1,18 @@ +import adapter from '@sveltejs/adapter-auto'; +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + // Consult https://svelte.dev/docs/kit/integrations + // for more information about preprocessors + preprocess: vitePreprocess(), + + kit: { + // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. + // If your environment is not supported, or you settled on a specific environment, switch out the adapter. + // See https://svelte.dev/docs/kit/adapters for more information about adapters. + adapter: adapter() + } +}; + +export default config; diff --git a/client/tailwind.config.ts b/client/tailwind.config.ts new file mode 100644 index 0000000..d91ff63 --- /dev/null +++ b/client/tailwind.config.ts @@ -0,0 +1,96 @@ +import { fontFamily } from "tailwindcss/defaultTheme"; +import type { Config } from "tailwindcss"; +import tailwindcssAnimate from "tailwindcss-animate"; + +const config: Config = { + darkMode: ["class"], + content: ["./src/**/*.{html,js,svelte,ts}"], + safelist: ["dark"], + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px" + } + }, + extend: { + colors: { + border: "hsl(var(--border) / )", + input: "hsl(var(--input) / )", + ring: "hsl(var(--ring) / )", + background: "hsl(var(--background) / )", + foreground: "hsl(var(--foreground) / )", + primary: { + DEFAULT: "hsl(var(--primary) / )", + foreground: "hsl(var(--primary-foreground) / )" + }, + secondary: { + DEFAULT: "hsl(var(--secondary) / )", + foreground: "hsl(var(--secondary-foreground) / )" + }, + destructive: { + DEFAULT: "hsl(var(--destructive) / )", + foreground: "hsl(var(--destructive-foreground) / )" + }, + muted: { + DEFAULT: "hsl(var(--muted) / )", + foreground: "hsl(var(--muted-foreground) / )" + }, + accent: { + DEFAULT: "hsl(var(--accent) / )", + foreground: "hsl(var(--accent-foreground) / )" + }, + popover: { + DEFAULT: "hsl(var(--popover) / )", + foreground: "hsl(var(--popover-foreground) / )" + }, + card: { + DEFAULT: "hsl(var(--card) / )", + foreground: "hsl(var(--card-foreground) / )" + }, + sidebar: { + DEFAULT: "hsl(var(--sidebar-background))", + foreground: "hsl(var(--sidebar-foreground))", + primary: "hsl(var(--sidebar-primary))", + "primary-foreground": "hsl(var(--sidebar-primary-foreground))", + accent: "hsl(var(--sidebar-accent))", + "accent-foreground": "hsl(var(--sidebar-accent-foreground))", + border: "hsl(var(--sidebar-border))", + ring: "hsl(var(--sidebar-ring))", + }, + }, + borderRadius: { + xl: "calc(var(--radius) + 4px)", + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)" + }, + fontFamily: { + sans: [...fontFamily.sans] + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--bits-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--bits-accordion-content-height)" }, + to: { height: "0" }, + }, + "caret-blink": { + "0%,70%,100%": { opacity: "1" }, + "20%,50%": { opacity: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + "caret-blink": "caret-blink 1.25s ease-out infinite", + }, + }, + }, + plugins: [tailwindcssAnimate], +}; + +export default config; diff --git a/client/tsconfig.json b/client/tsconfig.json new file mode 100644 index 0000000..0b2d886 --- /dev/null +++ b/client/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler" + } + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} diff --git a/client/vite.config.ts b/client/vite.config.ts new file mode 100644 index 0000000..2d35c4f --- /dev/null +++ b/client/vite.config.ts @@ -0,0 +1,7 @@ +import tailwindcss from '@tailwindcss/vite'; +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [tailwindcss(), sveltekit()] +});