diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 335829b..38263f4 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -35,7 +35,12 @@ "Bash(chmod:*)", "Bash(\"/Users/treyt/Desktop/code/SportsTime/SportsTime/Assets.xcassets/AppIcon-monochrome.appiconset/Contents.json\" << 'EOF'\n{\n \"images\" : [\n {\n \"filename\" : \"icon.png\",\n \"idiom\" : \"universal\",\n \"platform\" : \"ios\",\n \"size\" : \"1024x1024\"\n }\n ],\n \"info\" : {\n \"author\" : \"xcode\",\n \"version\" : 1\n }\n}\nEOF)", "Bash(\"/Users/treyt/Desktop/code/SportsTime/SportsTime/Assets.xcassets/AppIcon-sunset.appiconset/Contents.json\" << 'EOF'\n{\n \"images\" : [\n {\n \"filename\" : \"icon.png\",\n \"idiom\" : \"universal\",\n \"platform\" : \"ios\",\n \"size\" : \"1024x1024\"\n }\n ],\n \"info\" : {\n \"author\" : \"xcode\",\n \"version\" : 1\n }\n}\nEOF)", - "Bash(\"/Users/treyt/Desktop/code/SportsTime/SportsTime/Assets.xcassets/AppIcon-midnight.appiconset/Contents.json\" << 'EOF'\n{\n \"images\" : [\n {\n \"filename\" : \"icon.png\",\n \"idiom\" : \"universal\",\n \"platform\" : \"ios\",\n \"size\" : \"1024x1024\"\n }\n ],\n \"info\" : {\n \"author\" : \"xcode\",\n \"version\" : 1\n }\n}\nEOF)" + "Bash(\"/Users/treyt/Desktop/code/SportsTime/SportsTime/Assets.xcassets/AppIcon-midnight.appiconset/Contents.json\" << 'EOF'\n{\n \"images\" : [\n {\n \"filename\" : \"icon.png\",\n \"idiom\" : \"universal\",\n \"platform\" : \"ios\",\n \"size\" : \"1024x1024\"\n }\n ],\n \"info\" : {\n \"author\" : \"xcode\",\n \"version\" : 1\n }\n}\nEOF)", + "Bash(wc:*)", + "Bash(echo:*)", + "Bash(ffprobe:*)", + "WebFetch(domain:www.cbssports.com)", + "WebFetch(domain:www.mlb.com)" ] } } diff --git a/marketing-videos/.env.example b/marketing-videos/.env.example deleted file mode 100644 index f758062..0000000 --- a/marketing-videos/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -# Get your Mapbox token at https://console.mapbox.com/account/access-tokens/ -REMOTION_MAPBOX_TOKEN=pk.your-mapbox-access-token diff --git a/marketing-videos/.gitignore b/marketing-videos/.gitignore deleted file mode 100644 index 97a46b3..0000000 --- a/marketing-videos/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Dependencies -node_modules/ - -# Build output -dist/ -out/ - -# Remotion cache -.remotion/ - -# Environment -.env -.env.local - -# OS files -.DS_Store diff --git a/marketing-videos/package-lock.json b/marketing-videos/package-lock.json deleted file mode 100644 index 00030de..0000000 --- a/marketing-videos/package-lock.json +++ /dev/null @@ -1,5280 +0,0 @@ -{ - "name": "sportstime-marketing-videos", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "sportstime-marketing-videos", - "version": "1.0.0", - "dependencies": { - "@remotion/cli": "^4.0.410", - "@remotion/transitions": "^4.0.410", - "@turf/turf": "^7.3.2", - "@types/mapbox-gl": "^3.4.1", - "@types/react": "^19.2.9", - "@types/react-dom": "^19.2.3", - "mapbox-gl": "^3.18.1", - "react": "^19.2.4", - "react-dom": "^19.2.4", - "remotion": "^4.0.410", - "typescript": "^5.9.3" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", - "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", - "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", - "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", - "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", - "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", - "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", - "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", - "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", - "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", - "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", - "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", - "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", - "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", - "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", - "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", - "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", - "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", - "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", - "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", - "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", - "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", - "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", - "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", - "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", - "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@mapbox/jsonlint-lines-primitives": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", - "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@mapbox/mapbox-gl-supported": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-3.0.0.tgz", - "integrity": "sha512-2XghOwu16ZwPJLOFVuIOaLbN0iKMn867evzXFyf0P22dqugezfJwLmdanAgU25ITvz1TvOfVP4jsDImlDJzcWg==", - "license": "BSD-3-Clause" - }, - "node_modules/@mapbox/point-geometry": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-1.1.0.tgz", - "integrity": "sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==", - "license": "ISC" - }, - "node_modules/@mapbox/tiny-sdf": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.7.tgz", - "integrity": "sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==", - "license": "BSD-2-Clause" - }, - "node_modules/@mapbox/unitbezier": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", - "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", - "license": "BSD-2-Clause" - }, - "node_modules/@mapbox/vector-tile": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-2.0.4.tgz", - "integrity": "sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg==", - "license": "BSD-3-Clause", - "dependencies": { - "@mapbox/point-geometry": "~1.1.0", - "@types/geojson": "^7946.0.16", - "pbf": "^4.0.1" - } - }, - "node_modules/@mapbox/whoots-js": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", - "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", - "license": "ISC", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@remotion/bundler": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.410.tgz", - "integrity": "sha512-JuNF/wmwirL4saSAYPIdPKvh3rIfHa3qVRWZMdq2EmPxVWfEP9IPS4kMGYardsisWjbQbZXeW3jv1O9SUtZBEw==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@remotion/media-parser": "4.0.410", - "@remotion/studio": "4.0.410", - "@remotion/studio-shared": "4.0.410", - "css-loader": "5.2.7", - "esbuild": "0.25.0", - "react-refresh": "0.9.0", - "remotion": "4.0.410", - "source-map": "0.7.3", - "style-loader": "4.0.0", - "webpack": "5.96.1" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@remotion/cli": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/cli/-/cli-4.0.410.tgz", - "integrity": "sha512-2wler/J9yq0CILLHANnJijglMPA6NBXmbKMHtzS+DgP9RR7lrBrwtxU6C6H2oxy/PQMtui0KgtBrJ9vhh/4SHQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@remotion/bundler": "4.0.410", - "@remotion/media-utils": "4.0.410", - "@remotion/player": "4.0.410", - "@remotion/renderer": "4.0.410", - "@remotion/studio": "4.0.410", - "@remotion/studio-server": "4.0.410", - "@remotion/studio-shared": "4.0.410", - "dotenv": "9.0.2", - "minimist": "1.2.6", - "prompts": "2.4.2", - "remotion": "4.0.410" - }, - "bin": { - "remotion": "remotion-cli.js", - "remotionb": "remotionb-cli.js", - "remotiond": "remotiond-cli.js" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@remotion/compositor-darwin-arm64": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-arm64/-/compositor-darwin-arm64-4.0.410.tgz", - "integrity": "sha512-RgabM1QSTHgIo+RLaFzEpkTQY6IB2GWg0N09QlDUvofWP5XCGyt7yfU/CkeJ0pHTyhb3HmzVumBB4aYEgHFEBw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@remotion/compositor-darwin-x64": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/compositor-darwin-x64/-/compositor-darwin-x64-4.0.410.tgz", - "integrity": "sha512-wj5MAtx2mwBeMkM93BQDth1VmubrxiT1N8pUHZkgywmFy10yyc+JTBOW9eDQdsMLKK7ssRW/ATxNhaCNcv+eug==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@remotion/compositor-linux-arm64-gnu": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-gnu/-/compositor-linux-arm64-gnu-4.0.410.tgz", - "integrity": "sha512-v+2CQaBNlfFiZmlvoH+BUXtnI60g3aFik03WD6KQO03Knows0m7KIWjaSto2hu9oX4pSL18nU/7CYPC/nMXN6Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@remotion/compositor-linux-arm64-musl": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-arm64-musl/-/compositor-linux-arm64-musl-4.0.410.tgz", - "integrity": "sha512-PVm99n1udo9GW6uGpukzGpeo1KzOr/jvbvok8kzykXIMByT6/dFQz2nf2bg2KLT0G15iaAcx2ySGAxKhPdcFVA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@remotion/compositor-linux-x64-gnu": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-gnu/-/compositor-linux-x64-gnu-4.0.410.tgz", - "integrity": "sha512-0q4HHEqRZHX0Tv2mYqNW4nTn7fo5g4deHJRqufj308KztFYaBzFuw1wgbejfBh0Wk6JGEViFaBSmfaYNg2DZKg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@remotion/compositor-linux-x64-musl": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/compositor-linux-x64-musl/-/compositor-linux-x64-musl-4.0.410.tgz", - "integrity": "sha512-VPlz/IZ1co4IxgDFIyyQ8g45JNZghj2hVD2uyWFPO1B+5JX7nJwlrIT5pstcd9X2BZhpXYEIsWUCZ3qACUDzPg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@remotion/compositor-win32-x64-msvc": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/compositor-win32-x64-msvc/-/compositor-win32-x64-msvc-4.0.410.tgz", - "integrity": "sha512-ELKZigwUi63RMFWM7key7zC6VCCsYEGhvxj7NL2wLDzqXXb7ifp0rA1cFLyGJ2VJNPY5H8mKhoF+4cfenNcUag==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@remotion/licensing": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/licensing/-/licensing-4.0.410.tgz", - "integrity": "sha512-Rnu/FabQFLfT+CKPbFMFrqcs7yA0C+QZAGv2to5lZfFk9CjZ+mEyx4Ek4afr4Nv9+bVPQ9mU7FF2fTHyglZTIg==", - "license": "MIT" - }, - "node_modules/@remotion/media-parser": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/media-parser/-/media-parser-4.0.410.tgz", - "integrity": "sha512-rfmFy5ZnE+TOvqXRgROI4t9lODlKLzGDdstN+0yB/84eRj1hLAIqeGROtbfohFO+X20WFRtNTS7HAs6318fOmg==", - "license": "Remotion License https://remotion.dev/license" - }, - "node_modules/@remotion/media-utils": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/media-utils/-/media-utils-4.0.410.tgz", - "integrity": "sha512-jrgB3QFgLhELbVq+XNQoYraA4ofCIVaJron2KShSBdPNbkRTg2w0wCjA2gLFTdBacLSGS9N7I4Ft/qA1tpz96w==", - "license": "MIT", - "dependencies": { - "@remotion/media-parser": "4.0.410", - "@remotion/webcodecs": "4.0.410", - "mediabunny": "1.29.0", - "remotion": "4.0.410" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@remotion/paths": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/paths/-/paths-4.0.410.tgz", - "integrity": "sha512-NNIw3/in4Lbnmf9dfmwQwWC73BQTj/7dQQXfjnJP8PSESmljfcOKRxd169oL6Ch7rdRa4ivxkShTU2Y/rRsSKw==", - "license": "MIT" - }, - "node_modules/@remotion/player": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/player/-/player-4.0.410.tgz", - "integrity": "sha512-G8hATP2rdyU/jHm1MYd0jHslIyP3Vawv3mZn1HpBCtlmVH8AVK2ZmLzVYCVTeNhnYHv95SGwGlEowqiIJeM/Kw==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "remotion": "4.0.410" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@remotion/renderer": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/renderer/-/renderer-4.0.410.tgz", - "integrity": "sha512-Fbj7f0nh9qClW5QNbrUzxn3QEb0Xvi8llUl8OStxArJRYGsx0UhLP5FeA53p4fU+zNzU4Vje4jtyIihnNKLYng==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@remotion/licensing": "4.0.410", - "@remotion/streaming": "4.0.410", - "execa": "5.1.1", - "extract-zip": "2.0.1", - "remotion": "4.0.410", - "source-map": "^0.8.0-beta.0", - "ws": "8.17.1" - }, - "optionalDependencies": { - "@remotion/compositor-darwin-arm64": "4.0.410", - "@remotion/compositor-darwin-x64": "4.0.410", - "@remotion/compositor-linux-arm64-gnu": "4.0.410", - "@remotion/compositor-linux-arm64-musl": "4.0.410", - "@remotion/compositor-linux-x64-gnu": "4.0.410", - "@remotion/compositor-linux-x64-musl": "4.0.410", - "@remotion/compositor-win32-x64-msvc": "4.0.410" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@remotion/renderer/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "deprecated": "The work that was done in this beta branch won't be included in future versions", - "license": "BSD-3-Clause", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@remotion/shapes": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/shapes/-/shapes-4.0.410.tgz", - "integrity": "sha512-q6z74KqunjuIhuNghocrxK0inJSj/Zhx8G9Bm8C74++0QHTQWbfNmtOTVZlmbSXxDhbX/MST+/lpkFoh3KXMVQ==", - "license": "MIT", - "dependencies": { - "@remotion/paths": "4.0.410" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@remotion/streaming": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/streaming/-/streaming-4.0.410.tgz", - "integrity": "sha512-Ku+0h6ZNZn7W/U4tKk03PwONdZIXAMOvVWF0oVDo2ZBR5XQGLLEL3MsL6ECKIvDn90DmjkxUY2yT89IWrCXDYA==", - "license": "MIT" - }, - "node_modules/@remotion/studio": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/studio/-/studio-4.0.410.tgz", - "integrity": "sha512-WjAJg6vUZppEmk3PM1q4aueMel915+uTJY/nqcM98Py+wjRcLQP9SzL387o9OiuXEupvfqeLz1L3+ZG1gWf9+Q==", - "license": "MIT", - "dependencies": { - "@remotion/media-utils": "4.0.410", - "@remotion/player": "4.0.410", - "@remotion/renderer": "4.0.410", - "@remotion/studio-shared": "4.0.410", - "@remotion/web-renderer": "4.0.410", - "@remotion/zod-types": "4.0.410", - "mediabunny": "1.29.0", - "memfs": "3.4.3", - "open": "^8.4.2", - "remotion": "4.0.410", - "semver": "7.5.3", - "source-map": "0.7.3", - "zod": "3.22.3" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@remotion/studio-server": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/studio-server/-/studio-server-4.0.410.tgz", - "integrity": "sha512-5uFR9UBySL17K5xvDY2H9lkpl43QpNrYgOvcTmZo83bT7UOT+GrHcTH1C29SVg3U0KN+BEXesgwondILzBG8lQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "7.24.1", - "@remotion/bundler": "4.0.410", - "@remotion/renderer": "4.0.410", - "@remotion/studio-shared": "4.0.410", - "memfs": "3.4.3", - "open": "^8.4.2", - "recast": "0.23.11", - "remotion": "4.0.410", - "semver": "7.5.3", - "source-map": "0.7.3" - } - }, - "node_modules/@remotion/studio-shared": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/studio-shared/-/studio-shared-4.0.410.tgz", - "integrity": "sha512-dJKj2rY9snqIlmbbGEEGpy3Mv+mhvpKk0YemNZH5J0Rd5CMHphUEuSF9goar79Ox5vSkOtyE9hTlfYvgy9pb1Q==", - "license": "MIT", - "dependencies": { - "remotion": "4.0.410" - } - }, - "node_modules/@remotion/transitions": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/transitions/-/transitions-4.0.410.tgz", - "integrity": "sha512-hGiB3eI9N1xjtPQtrUl0629bFShnodauZQ0y9H+8LdSG4mdk+WtDQhwkCx0TUEaN809Cm4Eg7mDTFOIRzqWeEQ==", - "license": "UNLICENSED", - "dependencies": { - "@remotion/paths": "4.0.410", - "@remotion/shapes": "4.0.410", - "remotion": "4.0.410" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@remotion/web-renderer": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/web-renderer/-/web-renderer-4.0.410.tgz", - "integrity": "sha512-rELpiy7MwwD6iHuNgP+lPhlYWkWomyo4Y5gyd9FjeBVVIvElKlGWUVMse99yks/3Ezjhykq5St1kUyDlX6Gwhg==", - "license": "UNLICENSED", - "dependencies": { - "@remotion/licensing": "4.0.410", - "mediabunny": "1.29.0", - "remotion": "4.0.410" - }, - "peerDependencies": { - "react": ">=18.0.0", - "react-dom": ">=18.0.0" - } - }, - "node_modules/@remotion/webcodecs": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/webcodecs/-/webcodecs-4.0.410.tgz", - "integrity": "sha512-VNIq6Q6pWFE/PQ+ye1S/EUJvWeYTp2QK375mBA+8GdsEd64c0z6/MsfXIpmI3y/QZRtJlygsWcxqyiIGDduHXg==", - "license": "Remotion License (See https://remotion.dev/docs/webcodecs#license)", - "dependencies": { - "@remotion/media-parser": "4.0.410" - } - }, - "node_modules/@remotion/zod-types": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/@remotion/zod-types/-/zod-types-4.0.410.tgz", - "integrity": "sha512-fqwCocF8kOUrhSSaPMendFTHPOGaRkGP+h2rk/9pthBcJf9Yema9842cBLTr+O7pnINP10W/e7Ewo2N9c9qSEw==", - "license": "MIT", - "dependencies": { - "remotion": "4.0.410" - }, - "peerDependencies": { - "zod": "3.22.3" - } - }, - "node_modules/@turf/along": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/along/-/along-7.3.2.tgz", - "integrity": "sha512-TJhhZ0FTh59BsByH2iMNH7SikhcLzRkompRIb3FYLH5P7JSl/B9zkFlikSZRMBsB1DAU4/GftFw4PlTVmJ/0Qw==", - "license": "MIT", - "dependencies": { - "@turf/bearing": "7.3.2", - "@turf/destination": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/angle": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/angle/-/angle-7.3.2.tgz", - "integrity": "sha512-xnf9A8hoKsBT7fgi+f68yMbc0ZRZBfFvUHkGt5TlKGb9wmqnR4aluH9ncVaO9AsJZdeEJgJ5AdNAMNGVsaJjpw==", - "license": "MIT", - "dependencies": { - "@turf/bearing": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/rhumb-bearing": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/area": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.3.2.tgz", - "integrity": "sha512-d7IuEjAO3TSX5aVeL5WXrtCZCwxUAUOD4+LZ+VjoEe2THmYKdUknCPbH6rdhMBzLyZNuSVRmpRD/QfpCnLqoZg==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.3.2.tgz", - "integrity": "sha512-iohGIDVqi8Ck7VQY2Emp490BShWKixG8wkVPQ7qO4fXRqJwrWO7ntU9XPB+r0qs6Y8kaSd+nDnvG3VFfKDb+Vg==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox-clip": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/bbox-clip/-/bbox-clip-7.3.2.tgz", - "integrity": "sha512-IEn1MM7MqvHV80bw4QS/a6oyYsTsiK+xkwdPtRtPViyS3weXu7iPC3cucdN/kw3M9I+oM294RgFANPxj9YhViA==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox-polygon": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/bbox-polygon/-/bbox-polygon-7.3.2.tgz", - "integrity": "sha512-ofCbDrMlpqPbsRmXeCKfeKl3tV7q+6v/D3/zAx9C2flTFc6PoWPM05HPj5W+dDejpchm6p7MnNXmVR2k3Uw8sA==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bearing": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-7.3.2.tgz", - "integrity": "sha512-Gh6GLcR3oeORPvGuDkp5jS774KQkZEVMmmYjYFod8akZNhALlM82hHHWpeqI2M/GsmhIdeMw1qNDzY3n8i+7dA==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bezier-spline": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/bezier-spline/-/bezier-spline-7.3.2.tgz", - "integrity": "sha512-mT5M2D3YGsF/IerMMY3ZHRznpKE5BfPI0ZJ7sIGlXWP02wLMO6WMlB0rn8tl3wZzKU98KQHysxtCU7nsApePew==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-clockwise": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-7.3.2.tgz", - "integrity": "sha512-inP5x6XjOCFOQ/Ugzf2XR1fpn0WiIOKQJGVwF6/YJiTe9R0QlzB1c8uhDpZ/aKvHx1Hl1Wn/aO6E7J8Ckos9pw==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-concave": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-concave/-/boolean-concave-7.3.2.tgz", - "integrity": "sha512-WD0ZaCy8Uq1qt+MOpmjqQdcATdZrFhg85iGvwzDOq+m17+/bFrzivmMUJZxN+vlqtF1CTiWAQfw199jeu2AMsw==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-contains": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-7.3.2.tgz", - "integrity": "sha512-UO+n7bANXk3eWJsukrig4wGA6V1WcYlDtlhvfhmpygXGlWl8+Ta7+L6ybm5Mal3U6zUmZ8gyVOq4rDhCLz+4Vw==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/boolean-point-on-line": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/line-split": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-crosses": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-crosses/-/boolean-crosses-7.3.2.tgz", - "integrity": "sha512-qr2k+3YUnOoVI+9epznpTNE+pslr9nbjn/jGlq6uANhF4jviL5862E8SR4YHSrF0Vg2CguSPY8V4Lqo4qZhXQg==", - "license": "MIT", - "dependencies": { - "@turf/boolean-equal": "7.3.2", - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/line-intersect": "7.3.2", - "@turf/polygon-to-line": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-disjoint": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-disjoint/-/boolean-disjoint-7.3.2.tgz", - "integrity": "sha512-8cz3fAWldktvCEmIwMvzEq0q7JnICJPZeQ/xPm+XccGbRcGHQZOFI3wZCemQh6akRowWfQ8PgQu2OeJXJbvIuA==", - "license": "MIT", - "dependencies": { - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/line-intersect": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/polygon-to-line": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-equal": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-equal/-/boolean-equal-7.3.2.tgz", - "integrity": "sha512-ttve2ghdgkKHVI1gPwKj+XIyPirawhiUZKciLwIIaVgVrihiehpk4OY5Rn4kMWbvYzQTAKDUTfSXVM6fzQFeYA==", - "license": "MIT", - "dependencies": { - "@turf/clean-coords": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "geojson-equality-ts": "^1.0.2", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-intersects": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-intersects/-/boolean-intersects-7.3.2.tgz", - "integrity": "sha512-ucNeh2pq0nzcwSHBIfv3Sq6K/ANNf01ZtSQsR/ASzvsUi3LEG6KtTI49xVkz7n4Chl/LkWscDqqKpAq0t04xYA==", - "license": "MIT", - "dependencies": { - "@turf/boolean-disjoint": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-overlap": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-7.3.2.tgz", - "integrity": "sha512-xzy/wpf2OpIhyZ80aWU9UtT87w7iQtAPOCyb5szfBcX2L+m4Ii5pVx53yZbKFct16i/zObc4W6gI9N5oHyOBkg==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/line-intersect": "7.3.2", - "@turf/line-overlap": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "geojson-equality-ts": "^1.0.2", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-parallel": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-parallel/-/boolean-parallel-7.3.2.tgz", - "integrity": "sha512-UKVx53/kQeDO4LbMD6ZvWuUf6ju+UCYLGTOKaKkKHHd9xAb0Oond9rHHoNpDcO27mvvyzo6epcJRzLX/KPcuyg==", - "license": "MIT", - "dependencies": { - "@turf/clean-coords": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/line-segment": "7.3.2", - "@turf/rhumb-bearing": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-point-in-polygon": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-7.3.2.tgz", - "integrity": "sha512-PAfPDQ0TW1+VLgZ7tReTSyZ/X41AW7/nMRQxVpY+h/aG7JomZJ779lojnODT4dWCn3IMTA3xD2dDDfVYBAQMYg==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "point-in-polygon-hao": "^1.1.0", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-point-on-line": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-7.3.2.tgz", - "integrity": "sha512-1hDfbdBgX9qpMmCnBqeNgRC3Bl/hlNGR42SvGmejXCjaZmheP+V8pXWJgF0WDxAzYkb7opqS8Vta4+EymUU5GQ==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-touches": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-touches/-/boolean-touches-7.3.2.tgz", - "integrity": "sha512-6MJA7sLMEogX6XutIB0AgmNZj0jchl1h1Y3Q4JrQON3Ci0GOsBLMe5U2D6k4+7aN6dN6jHFESNkZZEoAsfmDZw==", - "license": "MIT", - "dependencies": { - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/boolean-point-on-line": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-valid": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-valid/-/boolean-valid-7.3.2.tgz", - "integrity": "sha512-0QYO49YM1CJufjR1p58zHffiNUzEEwz7WQJu/a0kzQBQNm5+sYVdyL/PiFuDoEr34WdsAGjSFvFS8h5PB3IG1A==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/boolean-crosses": "7.3.2", - "@turf/boolean-disjoint": "7.3.2", - "@turf/boolean-overlap": "7.3.2", - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/boolean-point-on-line": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/line-intersect": "7.3.2", - "@types/geojson": "^7946.0.10", - "geojson-polygon-self-intersections": "^1.2.1", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-within": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/boolean-within/-/boolean-within-7.3.2.tgz", - "integrity": "sha512-OiYCW/ic35lsG5yV5mw4QRHwnUqyfjmRwfqiGbbfXH1M2N/O7NeDhEuZ7xjJrVHpSMzBux02JCJzd8F8I+NnxA==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/boolean-point-on-line": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/line-split": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/buffer": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/buffer/-/buffer-7.3.2.tgz", - "integrity": "sha512-yd6y83T6E4oImfcgwJDagoJw9EGsxbENiA6RqBIQ9Wckrq1oNeKKVG/CDlXkvbyDIAtmz/t5Z99zqTFWZ/bxvg==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/center": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/jsts": "^2.7.1", - "@turf/meta": "7.3.2", - "@turf/projection": "7.3.2", - "@types/geojson": "^7946.0.10", - "d3-geo": "1.7.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/center/-/center-7.3.2.tgz", - "integrity": "sha512-QOAdTaJStVkSx0a3pJ03UWZqIGzgh3gCZisNp/3PcTSZmf5I/KAmZh5IxUGb5+9J6l6zHRPRaDeWVTGWXexR2A==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center-mean": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/center-mean/-/center-mean-7.3.2.tgz", - "integrity": "sha512-PODjapRQfJ558+BYnS4rjbZdpWzt8rIZ6KqO4Ms7iMraqHNi31G0dgJAUBNeblJ7C68ydCtT6peEFTuinFCOew==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center-median": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/center-median/-/center-median-7.3.2.tgz", - "integrity": "sha512-ML+RRGVxedQ8zvRn5fx0scebmoMcCbZCgnuxeeAHpJfrNu3yRInE9QjZPq4jA3Y+Lq2YMQgKaG4bk14U7OCy5w==", - "license": "MIT", - "dependencies": { - "@turf/center-mean": "7.3.2", - "@turf/centroid": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center-of-mass": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/center-of-mass/-/center-of-mass-7.3.2.tgz", - "integrity": "sha512-qAhmuqnjK+iHMyjpXVpIxW560mba2Ofe0rLn9NyEJl++58nUVnirTibW7Wq5O/z6axYdeAtulci0TLB9TSJpYQ==", - "license": "MIT", - "dependencies": { - "@turf/centroid": "7.3.2", - "@turf/convex": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/centroid": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.3.2.tgz", - "integrity": "sha512-zWlX/t7goUx+FqCYzyscO7muXPSADb5nTGXWAbRR51P3Zsdx24P5tJshJhrHwIb3OR9a+YE4ig568Clex6tc2g==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/circle": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/circle/-/circle-7.3.2.tgz", - "integrity": "sha512-LeVWEacd9PZEgnmUA1ICZ9VabAXXJFbiX6AOWXs/AW0yNhTlrjRwZUOKOQxfde/kc/R8MAoELnKHEEAEEfnPng==", - "license": "MIT", - "dependencies": { - "@turf/destination": "7.3.2", - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clean-coords": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/clean-coords/-/clean-coords-7.3.2.tgz", - "integrity": "sha512-O7gnwgUkFbvjnCmq4dyECkYshcXZNqP8pE+DQNC26xG86+qeBlrPU8DjR7aumcK8MezC9tYqw0vb350/sKYBVQ==", - "license": "MIT", - "dependencies": { - "@turf/boolean-point-on-line": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clone": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-7.3.2.tgz", - "integrity": "sha512-ET6EqfEbDq4EsvyhC5Fwyg5hkkRGcHUM7v63sqbLtz4bY2cSAZ1gGcgmBQdztSXQyKqSsFkIXpp1amfrLATNOQ==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clusters": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/clusters/-/clusters-7.3.2.tgz", - "integrity": "sha512-9JB6BKhXSCJy8QUHLI9X7DlF5Re6bUGxE5r4XLuzsWrsP8xmKFQEUaCCwCV6HgZsqGdMlTlPYEws2CIlQQFDng==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clusters-dbscan": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/clusters-dbscan/-/clusters-dbscan-7.3.2.tgz", - "integrity": "sha512-g6gnzeoDmwwf/GSkf+c0svMpFPgjRcJAEifQig73Q5gNPOrhcHoA8gsRe1PxJrVgkYytB2QWYlZXfkQQG3BmCg==", - "license": "MIT", - "dependencies": { - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "@types/geokdbush": "^1.1.5", - "geokdbush": "^2.0.1", - "kdbush": "^4.0.2", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clusters-kmeans": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/clusters-kmeans/-/clusters-kmeans-7.3.2.tgz", - "integrity": "sha512-ww3TCLQ74LVUJ2LThegEUnEXY0x8ENXx0Fab+kDanLVV+urhPA9wsLNnJOKo7Pb9GEE2fRRD0Nn9R0LbCq5Z1w==", - "license": "MIT", - "dependencies": { - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "skmeans": "0.9.7", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/collect": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/collect/-/collect-7.3.2.tgz", - "integrity": "sha512-s87HClxFFGOmptlCUr+ZhyxVcK6m0jrWE4vJwp8ENw/NSApv+EdjDqJvdptVoKidN1XujovzV+weGLYBul9xCw==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "rbush": "^3.0.1", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/combine": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/combine/-/combine-7.3.2.tgz", - "integrity": "sha512-mZwxnMrniYcvf1lBmSf01qTlJflVEWqGiM37rjPcQw3nj0M8cfOUqcGNRllGGK9GNL8zbyING7DKDntAbheeWg==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/concave": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/concave/-/concave-7.3.2.tgz", - "integrity": "sha512-eOqdc85xpG8vCTdyFk8wxzOmoaBW0IFMwSF0pRdfE3g0G6UeZniIfu3zYf6TDsWeemkGqdHtWlySDfi/EscuEw==", - "license": "MIT", - "dependencies": { - "@turf/clone": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/tin": "7.3.2", - "@types/geojson": "^7946.0.10", - "topojson-client": "3.x", - "topojson-server": "3.x", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/convex": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/convex/-/convex-7.3.2.tgz", - "integrity": "sha512-RMgqVueFH5RHKB15Iyhi3K0nuXQeDKIYYyLiMpUTjnXfoRaebiFghP2FKqLFYKG8xgTrHg6ntAAWD+zPrk9IXg==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "concaveman": "^1.2.1", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/destination": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-7.3.2.tgz", - "integrity": "sha512-qG8fbgroIe8v8H+xncwQZSUgrhvRhfsEskEezbKDyTYC10UNhOonCNQNJyfm16Bx8Dz0FcEoaJOYkTGrfaf+PA==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/difference": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-7.3.2.tgz", - "integrity": "sha512-7EGHIlKRhhfDah2VxSz7wdRV2lrfhAjCDQh7LeVWG0sMCjL86Lkdqgz7YbH3ytVJYjCBLYlfYD2rLEMT+I1WyA==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "polyclip-ts": "^0.16.8", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/dissolve": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/dissolve/-/dissolve-7.3.2.tgz", - "integrity": "sha512-zGCjbloNZrrNUarndErhfWzE9SvVzxvWP+wF6bHI+I2HjZ4s4PeC91I4JMCzCeGxSrw/1cSS1rutPuUNz9YsRA==", - "license": "MIT", - "dependencies": { - "@turf/flatten": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "polyclip-ts": "^0.16.8", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/distance": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-7.3.2.tgz", - "integrity": "sha512-aY2HQDZpu/doKRUTEcBKdV2olNOD1x0wKR6ujzC+D1EZLKWOEmTJRR+6OjzB+xuv5zZbhFPe9f0MXEuNDxzwfQ==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/distance-weight": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/distance-weight/-/distance-weight-7.3.2.tgz", - "integrity": "sha512-7zCe8+PYFjX6LRiaLEbJ1QtJVw7ETN1UJuntJqYrf6n/V9Ixm0YaqsIQP4OiMoVtWLt5ZqutFkFjDex5cv8IkQ==", - "license": "MIT", - "dependencies": { - "@turf/centroid": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/ellipse": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/ellipse/-/ellipse-7.3.2.tgz", - "integrity": "sha512-ZFxSeG2yKTxwG2gbQuwUYVF31wIAxDYSDp3/PQtbWlsY/wMLLv4z+JE7Kc4mHSkkEyJxbfSOJHf0AASuPBrtkA==", - "license": "MIT", - "dependencies": { - "@turf/destination": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/transform-rotate": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/envelope": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/envelope/-/envelope-7.3.2.tgz", - "integrity": "sha512-KLHih8M22XPRH212AiXT/parTto7EVG/CPINGAeaKQLhudKk2veQv5Cxs5o0/rNO7W5RXM8qL77GX+W9H9OpaQ==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/bbox-polygon": "7.3.2", - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/explode": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/explode/-/explode-7.3.2.tgz", - "integrity": "sha512-qLskLlqfbsSFkCL4KqGP7t4HQ/5oYrVtNp00xBxMq1y/9hszdKjQO3qtaf3eGVosFVyQc1lff0KsdhTYOHKZ8g==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/flatten": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/flatten/-/flatten-7.3.2.tgz", - "integrity": "sha512-HKFnrcMDaymgvyibNql1KtLOSUXj/5clo61ybtdch+tI1o9fE5/XyAj5ZcRSAfa7Gslbk2zs2LkBKnUa6+YRng==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/flip": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/flip/-/flip-7.3.2.tgz", - "integrity": "sha512-yK+vVKqyGOHfIrIWJ5NMMebKUru4tezvqMSaZ6k6iwEG5H4zALT7Fh2+hnCQ6rQmKpyp31D0mitwZcYa0+WAOA==", - "license": "MIT", - "dependencies": { - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/geojson-rbush": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/geojson-rbush/-/geojson-rbush-7.3.2.tgz", - "integrity": "sha512-0cUSyLotPClSzPvD7XM88qlaRMkfZJJuwUE/p8rhpvGk53SjVexMjltohkOFd0QFmayCovrT81OSgGcqt91zYA==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "rbush": "^3.0.1", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/great-circle": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/great-circle/-/great-circle-7.3.2.tgz", - "integrity": "sha512-rsngBQ1unAKk8g8rqw2+Q/X4pzhvnf9ayVFXykEay9IILU6nTJDC/dOk1JzGQE2BiYKer1n2SyCGNdTtca8NvA==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "arc": "^0.2.0", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/helpers": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.2.tgz", - "integrity": "sha512-5HFN42rgWjSobdTMxbuq+ZdXPcqp1IbMgFYULTLCplEQM3dXhsyRFe7DCss4Eiw12iW3q6Z5UeTNVfITsE5lgA==", - "license": "MIT", - "dependencies": { - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/hex-grid": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/hex-grid/-/hex-grid-7.3.2.tgz", - "integrity": "sha512-GJYeQh7I2W+UIsgMcImvZzMvWQKaVp3I+nk7pfFZDSR2PgQrw3gdrZMHFuJ55fr+dHNqkTLD6PO30yCpAIJV6w==", - "license": "MIT", - "dependencies": { - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/intersect": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/interpolate": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/interpolate/-/interpolate-7.3.2.tgz", - "integrity": "sha512-3EZ+EjB8BsKI7PjYNoCyhG39iN2i5yDBNYjsNiD5CsI5iTlBTA5alNs5fnpW1UFnS3mlVDDLOpN2k0PwoOJnuQ==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/centroid": "7.3.2", - "@turf/clone": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/hex-grid": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/point-grid": "7.3.2", - "@turf/square-grid": "7.3.2", - "@turf/triangle-grid": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/intersect": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-7.3.2.tgz", - "integrity": "sha512-+bWr3Ir5APW0NgghN3z+1OQzLPSjSDIP94Vk5Um41GZYq9drb7z/0gnfDZoeflAETvANgC/vW8+E5m4LK4SNEA==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "polyclip-ts": "^0.16.8", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/invariant": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.2.tgz", - "integrity": "sha512-brGmL1EFhZH/YNXhq6S+8sPWBEnmvEyxMWJO8bUNOFZyWHYiRTwxQHZM+An1blkbQ77PiEzsdNAspZqE1j7YKA==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/isobands": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/isobands/-/isobands-7.3.2.tgz", - "integrity": "sha512-MXS4DHf+3ZAqNavrE335a6J3V1pKVaElpImT9YESo/5Zxoh4FbCTmFGpcemt63miW8t1zmb+pJWPWi0WfD4C/Q==", - "license": "MIT", - "dependencies": { - "@turf/area": "7.3.2", - "@turf/bbox": "7.3.2", - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/explode": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/isolines": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/isolines/-/isolines-7.3.2.tgz", - "integrity": "sha512-XemxSjU5n4z93MsKB68vQaIb23d57IsLtgc6opu4XHhumkdHewEti120eBu/F3h4t8ErEUKi6TlMqbe916kRJg==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/jsts": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@turf/jsts/-/jsts-2.7.2.tgz", - "integrity": "sha512-zAezGlwWHPyU0zxwcX2wQY3RkRpwuoBmhhNE9HY9kWhFDkCxZ3aWK5URKwa/SWKJbj9aztO+8vtdiBA28KVJFg==", - "license": "(EDL-1.0 OR EPL-1.0)", - "dependencies": { - "jsts": "2.7.1" - } - }, - "node_modules/@turf/kinks": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/kinks/-/kinks-7.3.2.tgz", - "integrity": "sha512-n7PH9CFavxetH9/hHEyODYuNmjW2B/CE0M9Ua4h5XroV711KvGJtlxk09uASMcl5aO9EAv+ksiHx6FE10Mzdjg==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/length": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/length/-/length-7.3.2.tgz", - "integrity": "sha512-dqWRY90A/8yqhDMlJ7ye1NT9pCnsBpmvKTFpEDtAgJjj/fXzYy1MZOKLRRN7fZIBQpLJMTEdLb6yjcEIwZjX8A==", - "license": "MIT", - "dependencies": { - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-arc": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/line-arc/-/line-arc-7.3.2.tgz", - "integrity": "sha512-ef5GNdObflXAeRzwxXdYuKoa/r54tbjXjXA+L5+PsTvdgmz362VnX20y+WBw+eUmyOIpOH9BCH/UDRtRxfERCA==", - "license": "MIT", - "dependencies": { - "@turf/circle": "7.3.2", - "@turf/destination": "7.3.2", - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-chunk": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/line-chunk/-/line-chunk-7.3.2.tgz", - "integrity": "sha512-gbubViceL2cI7NighaL4nJfKEMdXZA3kYgKp6ovUJ5Dc5Kvu6jYnXhMEVW4beAifaWZMaXjIGqh0aLZq7DgAwQ==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/length": "7.3.2", - "@turf/line-slice-along": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-intersect": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-7.3.2.tgz", - "integrity": "sha512-qsMUml7MI/x1iLcQzCuD/LlAxQUfMDR6PoVwQ32fGF7dCqfdMkKWoMz4Qn5WyPCeSyW8BchuAjWp5FnVtOeLeg==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "sweepline-intersections": "^1.5.0", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-offset": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/line-offset/-/line-offset-7.3.2.tgz", - "integrity": "sha512-N+Gd9a50DusSxwid/k1+k/o2cePp+Z3AvdL/Ycs188ms4e8Y+xSkYJGKcTOqAAGpdcno225p1leRSZArNRqc7Q==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-overlap": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-7.3.2.tgz", - "integrity": "sha512-oao5Zbs21bX5prTrxdjgjYEc9bBfBDv4dkRqDaFk1pzNyx9zD2uXlifaPaSjo/GFJ5OEfTews8r3nSUXzFN+yA==", - "license": "MIT", - "dependencies": { - "@turf/boolean-point-on-line": "7.3.2", - "@turf/geojson-rbush": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/line-segment": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/nearest-point-on-line": "7.3.2", - "@types/geojson": "^7946.0.10", - "fast-deep-equal": "^3.1.3", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-segment": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-7.3.2.tgz", - "integrity": "sha512-Dx1yQ31fMm3PqYWo5S/5/zlcMaCV02G2alW5FSnJCu9Yc1/sBMxjjuVpF92roOV+XRE9zl50DThATikQB8+roA==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-slice": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/line-slice/-/line-slice-7.3.2.tgz", - "integrity": "sha512-GDDw626PfrCbqcFxm0tF9upxPGzPW9Ddkf+xP+TJdeF64xnGb88uMn12XoH4V+OpBQhshJ7dqOa0M3GNrPQdvQ==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/nearest-point-on-line": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-slice-along": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/line-slice-along/-/line-slice-along-7.3.2.tgz", - "integrity": "sha512-MFbbiA+sVkqziDF3dqhZ9AqeNPx9Gcyc3AaZm9Za/pRNLDDmkprm6gEFPEvXLPhaRfbDmFJpMc1+4Hr9/INOuw==", - "license": "MIT", - "dependencies": { - "@turf/bearing": "7.3.2", - "@turf/destination": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-split": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/line-split/-/line-split-7.3.2.tgz", - "integrity": "sha512-AvOa7+nr+xZFjMzGDNgbCvhILGeD4Tm1kBLGs6wznl9Rs4XeTKmMLIsTa7ggZJcjBs1BBIjjbBW+4UicZQF6Nw==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/geojson-rbush": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/line-intersect": "7.3.2", - "@turf/line-segment": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/nearest-point-on-line": "7.3.2", - "@turf/truncate": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-to-polygon": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/line-to-polygon/-/line-to-polygon-7.3.2.tgz", - "integrity": "sha512-rsj9Uv5xr3SRiHCZlmvSWKmAF7ihgcYNGQ1KacHe9lYuzlzHFhy9DoxjcecPPrKTxc7f+G7OiTh72GdkAuUEGA==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/mask": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/mask/-/mask-7.3.2.tgz", - "integrity": "sha512-cAPQhn7Eq+rFeQycLjL/4SNgbhXR2YKxaU10y/wM4tWtdhSFhNyUa/GBu2nBWpuXgatXHnYQ4LXuwhHeowRUMQ==", - "license": "MIT", - "dependencies": { - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "polyclip-ts": "^0.16.8", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/meta": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.2.tgz", - "integrity": "sha512-FIcIY+ZsAe9QV4fHciTXeuRz2TKIVaEjivkl4vMFCibdj7FUkWDofqOncbIre1xPrgktQeh20ZrmD+p0kf3n4Q==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/midpoint": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/midpoint/-/midpoint-7.3.2.tgz", - "integrity": "sha512-ZyJZ/qR7yA7+jmzcP7T7xH2B3vDu1MhnfDLk1CSr7S/oh5fA3GKCfcaJtyURu8H3e+JF66ZDMRkhR1aNK7li/A==", - "license": "MIT", - "dependencies": { - "@turf/bearing": "7.3.2", - "@turf/destination": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/moran-index": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/moran-index/-/moran-index-7.3.2.tgz", - "integrity": "sha512-KPaBjeRfJ6YVShDz8Z4djVmOfFVqpqGXGUU/JvnnkGf/slgE//vYS9PYlNK9wsXlWamwauZvLu0zHTsY5hNclA==", - "license": "MIT", - "dependencies": { - "@turf/distance-weight": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-neighbor-analysis": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/nearest-neighbor-analysis/-/nearest-neighbor-analysis-7.3.2.tgz", - "integrity": "sha512-TzC/DiKVW649AAD9VCagXtJ26GaYgk5uaeOB8LMf1771o2BiBHCshiYqzl22hl8A02gWIEn/kTdo2O2SiwYivQ==", - "license": "MIT", - "dependencies": { - "@turf/area": "7.3.2", - "@turf/bbox": "7.3.2", - "@turf/bbox-polygon": "7.3.2", - "@turf/centroid": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/nearest-point": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-point": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/nearest-point/-/nearest-point-7.3.2.tgz", - "integrity": "sha512-+uMmQVYldH/g8WL4B7k2UtZ7AwSO5IMpt56dLxd/e2dvyFL/dPcoR4gJQP/aBQ/NkjmGw5LDAjePk4vAunO34A==", - "license": "MIT", - "dependencies": { - "@turf/clone": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-point-on-line": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-7.3.2.tgz", - "integrity": "sha512-IfI7SkasMLdULb+gPOtdZtTSTkuS06dlKEUX4lPOC94jJA2vjaCDIRxejRRzGLY0EQ4uben9I8PQEp7cwVuERA==", - "license": "MIT", - "dependencies": { - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-point-to-line": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-to-line/-/nearest-point-to-line-7.3.2.tgz", - "integrity": "sha512-u0gzD4cG+vg7nxVcXZRYj8cKiB8ipnmXhG0tbfWnv7KmGKo9bdCJ+8z2EtOiGmkjF6N38JDx/MBw5JxyO2cBGw==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/point-to-line-distance": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/planepoint": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/planepoint/-/planepoint-7.3.2.tgz", - "integrity": "sha512-PKkzHNSiTEzhllwede6eX8fBwO278Hs+tXWseDCqOVa30lXax2yce7600HWpgx6LHMIkiW86QFeMnMH1rmr2sQ==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/point-grid": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/point-grid/-/point-grid-7.3.2.tgz", - "integrity": "sha512-kLV5Dg0bLLw1EUp7pZduKnlk7bZV9++0SDnOVxv3P6b1prLY13p1bFQ7z2LG05efJNzwUv4g63ZVs5yYGB0T6w==", - "license": "MIT", - "dependencies": { - "@turf/boolean-within": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/point-on-feature": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/point-on-feature/-/point-on-feature-7.3.2.tgz", - "integrity": "sha512-dtP/Ky95SPJUvzvM2Wy81jNiT/8YurpuJPq86jbixseS3ILv1EoVENPozzK0vpEHtgn3K6fC9vjFuF18rTda0A==", - "license": "MIT", - "dependencies": { - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/center": "7.3.2", - "@turf/explode": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/nearest-point": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/point-to-line-distance": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/point-to-line-distance/-/point-to-line-distance-7.3.2.tgz", - "integrity": "sha512-fDJ0SJw++Wx6YrRHya5fY7LCAmGctabKmFuCpzACr3R7+d35wnJw9qv1QvXfjmaP4PBOAy3yKEABFh0oPS7RpQ==", - "license": "MIT", - "dependencies": { - "@turf/bearing": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/nearest-point-on-line": "7.3.2", - "@turf/projection": "7.3.2", - "@turf/rhumb-bearing": "7.3.2", - "@turf/rhumb-distance": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/point-to-polygon-distance": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/point-to-polygon-distance/-/point-to-polygon-distance-7.3.2.tgz", - "integrity": "sha512-JH/dtlXWGFpMV8Du9jOPZMCydsAlPBqb1mAHpjLhkLuorJ0qhQX7A3qXRxgDfSqerkiWfqGUuL4D5OFu8ou10w==", - "license": "MIT", - "dependencies": { - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/point-to-line-distance": "7.3.2", - "@turf/polygon-to-line": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/points-within-polygon": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/points-within-polygon/-/points-within-polygon-7.3.2.tgz", - "integrity": "sha512-s4F4Hc8YGidnrlkpujHtZMBW+b7vZG3a1dkb5NpBSB+PDD9uM6QFcYpdmVo7HZGBUiXszVdl9VCQOewljZz+sw==", - "license": "MIT", - "dependencies": { - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygon-smooth": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/polygon-smooth/-/polygon-smooth-7.3.2.tgz", - "integrity": "sha512-SNuOTV0uTwcIIxl3FcT3j058A/jW08YdhLYqA4gwNml4vs+3uFY23YYSCw6ru2iM2BrRjI5wkIQIPngRTAzq2g==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygon-tangents": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/polygon-tangents/-/polygon-tangents-7.3.2.tgz", - "integrity": "sha512-wrW9343kREDt/8tkxK/A766t7M1wQMKbflGb81kXzt2pRlEoiiN7YdVTFj6Lt5/dH/2KtUHgqBVTJn5vENy2gg==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/boolean-within": "7.3.2", - "@turf/explode": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/nearest-point": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygon-to-line": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/polygon-to-line/-/polygon-to-line-7.3.2.tgz", - "integrity": "sha512-/C8On+ddnMi1z2r5ZLbGyXb+gCM4d4CpAKx3f80kyReM2IxwN6F0t6y1PPXYx4eR2P49fhiEcQJ9m0kCwQBAzw==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygonize": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/polygonize/-/polygonize-7.3.2.tgz", - "integrity": "sha512-FJeyX3BL5ycYB6oK4Rncu40j65JatUGy2M+Zp0kFnLvUB3Wcyfr/IhPzN3uw62AtHkGTrwwdMaeR4QOUHiw2bA==", - "license": "MIT", - "dependencies": { - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/envelope": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/projection": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/projection/-/projection-7.3.2.tgz", - "integrity": "sha512-9DQRW2aqcfa0RoeFmkkhP6FgLZzc94owa2no6ORvvY4uOXFArOWYuDQWIAmPpHrnMJ2MbwiRsRkduyaVEuUcpw==", - "license": "MIT", - "dependencies": { - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/quadrat-analysis": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/quadrat-analysis/-/quadrat-analysis-7.3.2.tgz", - "integrity": "sha512-ioSBQqqZ5S6lOnc77sH1oFt1mzzBrzAnLHjiKjjkSQMeJQnmvb1J5C5yI2nHrQX7y2C/WHw+cBYYXhGMB0YCUg==", - "license": "MIT", - "dependencies": { - "@turf/area": "7.3.2", - "@turf/bbox": "7.3.2", - "@turf/bbox-polygon": "7.3.2", - "@turf/centroid": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/point-grid": "7.3.2", - "@turf/random": "7.3.2", - "@turf/square-grid": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/random": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/random/-/random-7.3.2.tgz", - "integrity": "sha512-9sx6MD3FcM/5VVuG0cN8E3W8bkR48IR4COpHg/PltC6TRAIG5UpxKgUfg97XQUOSjmK57HxxKx+c0u9/LVwhRw==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rectangle-grid": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/rectangle-grid/-/rectangle-grid-7.3.2.tgz", - "integrity": "sha512-L0RyaRh+NZC3esv1iv/iFZH2J/q0TeUtGFuI/ayKkDcLScd3YHV79sz9ssBZ0Mx1nSvwSO2Mq+KMqWb8K2iexA==", - "license": "MIT", - "dependencies": { - "@turf/boolean-intersects": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rewind": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-7.3.2.tgz", - "integrity": "sha512-oQart/WgiaifmYerUMSXFWx/L2ATKsOp/AhqJWwrnXQQb1WLgyP0IJe47Soe2RJufngeHrM9tkN8ydpfyDWSug==", - "license": "MIT", - "dependencies": { - "@turf/boolean-clockwise": "7.3.2", - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rhumb-bearing": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/rhumb-bearing/-/rhumb-bearing-7.3.2.tgz", - "integrity": "sha512-RoiZ9ZihgjKI8G2QUmikxEe9Z7+yL1m+1notOQ2eEMZ3+9rlhxKkLAfTZyioSlTsV3ovQmr2k30TKGL4CMQzWw==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rhumb-destination": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/rhumb-destination/-/rhumb-destination-7.3.2.tgz", - "integrity": "sha512-i43WHFzugO6D8aBk/jli0XL3GGI21JmPJRd1odz4HSxfbjjZe+WOf+amwouGFuDCkE73/odXn5ohx4iA1F3MSQ==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rhumb-distance": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/rhumb-distance/-/rhumb-distance-7.3.2.tgz", - "integrity": "sha512-8ZZ8EGeZREnWCk5a6pNFazSBxIqRCdPLAGPukCTpJONN3kke4Y3ftw7/Cd4rjX6tnkE2qT/I+vo67weqSuC5pg==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/sample": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/sample/-/sample-7.3.2.tgz", - "integrity": "sha512-DFYCB6Ge/5fUTVugZxXoZf3WMmzELJnh6m8Iuny1Zdte3fq+KeApeIE1TKhDXW8XWcb+WBEoFM9g3fp27ACTXw==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/sector": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/sector/-/sector-7.3.2.tgz", - "integrity": "sha512-kDHoJeu4cRacT86AGUXWk7Dykh+KzVTz44ysoNz8np6NW7lJuz+Ebun1JEp/T1F5W7A7faNIzh4JgRa3FInVcg==", - "license": "MIT", - "dependencies": { - "@turf/circle": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/line-arc": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/shortest-path": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/shortest-path/-/shortest-path-7.3.2.tgz", - "integrity": "sha512-in0osvuR5km2aePfYGXY5o0dBpp7zdYoFtBflydxPzRlYnsfbbTPFazq3o4aUqp7fJeqVu/idwWuVrwX3XzHcw==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/bbox-polygon": "7.3.2", - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/clean-coords": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/transform-scale": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/simplify": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/simplify/-/simplify-7.3.2.tgz", - "integrity": "sha512-SclJBS2S/0fn7EiWr/vHzXcvj3JmfMbqjx2ITPEKALOvsOm6sufMJeA/PoAh2Mj3QMKTfxrWw8RKVxP/ZHc+zQ==", - "license": "MIT", - "dependencies": { - "@turf/clean-coords": "7.3.2", - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/square": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/square/-/square-7.3.2.tgz", - "integrity": "sha512-hOk8+C1kUCMrWnEHStF1jAliufQtRPWfhIIzbueGokWw6LXCNA/+n9jdiLMXmDh0XJYGpgD5NbZuLvGyclrcyg==", - "license": "MIT", - "dependencies": { - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/square-grid": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/square-grid/-/square-grid-7.3.2.tgz", - "integrity": "sha512-uHF/ZJIZimxWSgm5oJ4NXxE8vLV7y0iuYyuDTVFuxY2p1942vUEEefRKc8yEqOFhPECzJwluu9bCrThDOv2fSg==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/rectangle-grid": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/standard-deviational-ellipse": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-7.3.2.tgz", - "integrity": "sha512-z/ffwauVLvma6bP9uCDbyPZ5DJU7PSjT5O63o4DrXxzh7Vy8MuwevHZDaELCe7RNyHT0W2wKe+QOg/SDECkqyA==", - "license": "MIT", - "dependencies": { - "@turf/center-mean": "7.3.2", - "@turf/ellipse": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/points-within-polygon": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/tag": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/tag/-/tag-7.3.2.tgz", - "integrity": "sha512-H6hHsmVAHa46ip/iyaDxrQzR49k6fE580LFJvuA2uyBSOyVb35iql2hJ8I7VWcnnxNV9gkCksouK18ao//6HQg==", - "license": "MIT", - "dependencies": { - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/tesselate": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/tesselate/-/tesselate-7.3.2.tgz", - "integrity": "sha512-oF2JNQ1ZH7ZkYG6buvavohgZ4aGjh0uTt6ljqMbAM3LyqSDeswHSwRBDLsRD12cv/cqDlylkxOdIaAKbLKLG3w==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "earcut": "^2.2.4", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/tin": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/tin/-/tin-7.3.2.tgz", - "integrity": "sha512-KTOTF3aCO8Fb/0afOdgthDzX6zqU7u+K3P5p0FKgxXEZVWG5tJAw8Ha0ldx/l0aL2n9aFcaYt9hh6WJQ7jI2pA==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/transform-rotate": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/transform-rotate/-/transform-rotate-7.3.2.tgz", - "integrity": "sha512-e50qc5JG/lryhYa1/z6KBS0EIiHUXZte+3ZHJXlNq4HjpoY6M0/sAZprRkRqmNbo4UN2PS7HNRKnDSNA6swofA==", - "license": "MIT", - "dependencies": { - "@turf/centroid": "7.3.2", - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/rhumb-bearing": "7.3.2", - "@turf/rhumb-destination": "7.3.2", - "@turf/rhumb-distance": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/transform-scale": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/transform-scale/-/transform-scale-7.3.2.tgz", - "integrity": "sha512-n9T4p825kbZRnXIazo/Gnf5W+5l58G6eztAbrnxME2HpXVXm7f/GXIF3XBYDKHt9/NVjUu9in6hcNGi343qYQA==", - "license": "MIT", - "dependencies": { - "@turf/bbox": "7.3.2", - "@turf/center": "7.3.2", - "@turf/centroid": "7.3.2", - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/rhumb-bearing": "7.3.2", - "@turf/rhumb-destination": "7.3.2", - "@turf/rhumb-distance": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/transform-translate": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/transform-translate/-/transform-translate-7.3.2.tgz", - "integrity": "sha512-M8NmB5eRzPFdCfaC8aPAFhrukbrus+l22EEp6lysj9NzpPhxaiTupPuV3HsSkYfdJVV5nVO4mfSGLxz01UZ4Bg==", - "license": "MIT", - "dependencies": { - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/rhumb-destination": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/triangle-grid": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/triangle-grid/-/triangle-grid-7.3.2.tgz", - "integrity": "sha512-PggDgmWKvYoS1L8ouJQDsjzsqxA8AJq+t0WcrK5zHFTA36ZXyeDNs0vVvfkkHTVO2vORPH+A/pjST7LP6C8Jig==", - "license": "MIT", - "dependencies": { - "@turf/distance": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/intersect": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/truncate": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/truncate/-/truncate-7.3.2.tgz", - "integrity": "sha512-JXbezhuzBCWpgIAVhndV3cAdXR2CYXhlOC48bOO4Kf944YQUXO9VGELdIP5ygpsCaOpebTKf8f7wHQziO5hBNQ==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/turf": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/turf/-/turf-7.3.2.tgz", - "integrity": "sha512-OPXj44z3Z27LTdhHfDffmkSFAGToZJlzfLaktixACsOhRcb+mSylpFeNV3sSrvWf0G/bS1FsWz83MXRacd+jdA==", - "license": "MIT", - "dependencies": { - "@turf/along": "7.3.2", - "@turf/angle": "7.3.2", - "@turf/area": "7.3.2", - "@turf/bbox": "7.3.2", - "@turf/bbox-clip": "7.3.2", - "@turf/bbox-polygon": "7.3.2", - "@turf/bearing": "7.3.2", - "@turf/bezier-spline": "7.3.2", - "@turf/boolean-clockwise": "7.3.2", - "@turf/boolean-concave": "7.3.2", - "@turf/boolean-contains": "7.3.2", - "@turf/boolean-crosses": "7.3.2", - "@turf/boolean-disjoint": "7.3.2", - "@turf/boolean-equal": "7.3.2", - "@turf/boolean-intersects": "7.3.2", - "@turf/boolean-overlap": "7.3.2", - "@turf/boolean-parallel": "7.3.2", - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/boolean-point-on-line": "7.3.2", - "@turf/boolean-touches": "7.3.2", - "@turf/boolean-valid": "7.3.2", - "@turf/boolean-within": "7.3.2", - "@turf/buffer": "7.3.2", - "@turf/center": "7.3.2", - "@turf/center-mean": "7.3.2", - "@turf/center-median": "7.3.2", - "@turf/center-of-mass": "7.3.2", - "@turf/centroid": "7.3.2", - "@turf/circle": "7.3.2", - "@turf/clean-coords": "7.3.2", - "@turf/clone": "7.3.2", - "@turf/clusters": "7.3.2", - "@turf/clusters-dbscan": "7.3.2", - "@turf/clusters-kmeans": "7.3.2", - "@turf/collect": "7.3.2", - "@turf/combine": "7.3.2", - "@turf/concave": "7.3.2", - "@turf/convex": "7.3.2", - "@turf/destination": "7.3.2", - "@turf/difference": "7.3.2", - "@turf/dissolve": "7.3.2", - "@turf/distance": "7.3.2", - "@turf/distance-weight": "7.3.2", - "@turf/ellipse": "7.3.2", - "@turf/envelope": "7.3.2", - "@turf/explode": "7.3.2", - "@turf/flatten": "7.3.2", - "@turf/flip": "7.3.2", - "@turf/geojson-rbush": "7.3.2", - "@turf/great-circle": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/hex-grid": "7.3.2", - "@turf/interpolate": "7.3.2", - "@turf/intersect": "7.3.2", - "@turf/invariant": "7.3.2", - "@turf/isobands": "7.3.2", - "@turf/isolines": "7.3.2", - "@turf/kinks": "7.3.2", - "@turf/length": "7.3.2", - "@turf/line-arc": "7.3.2", - "@turf/line-chunk": "7.3.2", - "@turf/line-intersect": "7.3.2", - "@turf/line-offset": "7.3.2", - "@turf/line-overlap": "7.3.2", - "@turf/line-segment": "7.3.2", - "@turf/line-slice": "7.3.2", - "@turf/line-slice-along": "7.3.2", - "@turf/line-split": "7.3.2", - "@turf/line-to-polygon": "7.3.2", - "@turf/mask": "7.3.2", - "@turf/meta": "7.3.2", - "@turf/midpoint": "7.3.2", - "@turf/moran-index": "7.3.2", - "@turf/nearest-neighbor-analysis": "7.3.2", - "@turf/nearest-point": "7.3.2", - "@turf/nearest-point-on-line": "7.3.2", - "@turf/nearest-point-to-line": "7.3.2", - "@turf/planepoint": "7.3.2", - "@turf/point-grid": "7.3.2", - "@turf/point-on-feature": "7.3.2", - "@turf/point-to-line-distance": "7.3.2", - "@turf/point-to-polygon-distance": "7.3.2", - "@turf/points-within-polygon": "7.3.2", - "@turf/polygon-smooth": "7.3.2", - "@turf/polygon-tangents": "7.3.2", - "@turf/polygon-to-line": "7.3.2", - "@turf/polygonize": "7.3.2", - "@turf/projection": "7.3.2", - "@turf/quadrat-analysis": "7.3.2", - "@turf/random": "7.3.2", - "@turf/rectangle-grid": "7.3.2", - "@turf/rewind": "7.3.2", - "@turf/rhumb-bearing": "7.3.2", - "@turf/rhumb-destination": "7.3.2", - "@turf/rhumb-distance": "7.3.2", - "@turf/sample": "7.3.2", - "@turf/sector": "7.3.2", - "@turf/shortest-path": "7.3.2", - "@turf/simplify": "7.3.2", - "@turf/square": "7.3.2", - "@turf/square-grid": "7.3.2", - "@turf/standard-deviational-ellipse": "7.3.2", - "@turf/tag": "7.3.2", - "@turf/tesselate": "7.3.2", - "@turf/tin": "7.3.2", - "@turf/transform-rotate": "7.3.2", - "@turf/transform-scale": "7.3.2", - "@turf/transform-translate": "7.3.2", - "@turf/triangle-grid": "7.3.2", - "@turf/truncate": "7.3.2", - "@turf/union": "7.3.2", - "@turf/unkink-polygon": "7.3.2", - "@turf/voronoi": "7.3.2", - "@types/geojson": "^7946.0.10", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/union": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-7.3.2.tgz", - "integrity": "sha512-farmJGdWwaof5m0NHRR0PZ23WyMAIbFuofePQ+BJmJchJTwEV2Ez2zKqPl2q5ZXaYhVNCWo+bYN2umOBIFjDig==", - "license": "MIT", - "dependencies": { - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "polyclip-ts": "^0.16.8", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/unkink-polygon": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/unkink-polygon/-/unkink-polygon-7.3.2.tgz", - "integrity": "sha512-mf2XJnxp9DEXAy50t9/XgitJ/Y+wtaMZJ55gOshKMawXVmDWjJ9IYTHZffqkPLOQFWI1+xFE2wlMBY67TFUL1A==", - "license": "MIT", - "dependencies": { - "@turf/area": "7.3.2", - "@turf/boolean-point-in-polygon": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/meta": "7.3.2", - "@types/geojson": "^7946.0.10", - "rbush": "^3.0.1", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/voronoi": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@turf/voronoi/-/voronoi-7.3.2.tgz", - "integrity": "sha512-Gq7eeZ6/yneS3IEcXutXr69Np/kzxEloAcvWyX5FbCfuGvJiNhHUdIkkkFJD72O1mZSoIsYBab8ThpbfdoEzRg==", - "license": "MIT", - "dependencies": { - "@turf/clone": "7.3.2", - "@turf/helpers": "7.3.2", - "@turf/invariant": "7.3.2", - "@types/d3-voronoi": "^1.1.12", - "@types/geojson": "^7946.0.10", - "d3-voronoi": "1.1.2", - "tslib": "^2.8.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@types/d3-voronoi": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.12.tgz", - "integrity": "sha512-DauBl25PKZZ0WVJr42a6CNvI6efsdzofl9sajqZr2Gf5Gu733WkDdUGiPkUHXiUvYGzNNlFQde2wdZdfQPG+yw==", - "license": "MIT" - }, - "node_modules/@types/dom-mediacapture-transform": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@types/dom-mediacapture-transform/-/dom-mediacapture-transform-0.1.11.tgz", - "integrity": "sha512-Y2p+nGf1bF2XMttBnsVPHUWzRRZzqUoJAKmiP10b5umnO6DDrWI0BrGDJy1pOHoOULVmGSfFNkQrAlC5dcj6nQ==", - "license": "MIT", - "dependencies": { - "@types/dom-webcodecs": "*" - } - }, - "node_modules/@types/dom-webcodecs": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@types/dom-webcodecs/-/dom-webcodecs-0.1.13.tgz", - "integrity": "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ==", - "license": "MIT" - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@types/geojson": { - "version": "7946.0.16", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", - "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", - "license": "MIT" - }, - "node_modules/@types/geojson-vt": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", - "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", - "license": "MIT", - "dependencies": { - "@types/geojson": "*" - } - }, - "node_modules/@types/geokdbush": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@types/geokdbush/-/geokdbush-1.1.5.tgz", - "integrity": "sha512-jIsYnXY+RQ/YCyBqeEHxYN9mh+7PqKJUJUp84wLfZ7T2kqyVPNaXwZuvf1A2uQUkrvVqEbsG94ff8jH32AlLvA==", - "license": "MIT", - "dependencies": { - "@types/kdbush": "^1" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/kdbush": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/kdbush/-/kdbush-1.0.7.tgz", - "integrity": "sha512-QM5iB8m/0mnGOjUKshErIZQ0LseyTieRSYc3yaOpmrRM0xbWiOuJUWlduJx+TPNK7/VFMWphUGwx3nus7eT1Wg==", - "license": "MIT" - }, - "node_modules/@types/mapbox__point-geometry": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", - "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", - "license": "MIT" - }, - "node_modules/@types/mapbox-gl": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@types/mapbox-gl/-/mapbox-gl-3.4.1.tgz", - "integrity": "sha512-NsGKKtgW93B+UaLPti6B7NwlxYlES5DpV5Gzj9F75rK5ALKsqSk15CiEHbOnTr09RGbr6ZYiCdI+59NNNcAImg==", - "license": "MIT", - "dependencies": { - "@types/geojson": "*" - } - }, - "node_modules/@types/node": { - "version": "25.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz", - "integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/pbf": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", - "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.2.9", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.9.tgz", - "integrity": "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==", - "license": "MIT", - "peer": true, - "dependencies": { - "csstype": "^3.2.2" - } - }, - "node_modules/@types/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "^19.2.0" - } - }, - "node_modules/@types/supercluster": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", - "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", - "license": "MIT", - "dependencies": { - "@types/geojson": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "peer": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/arc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/arc/-/arc-0.2.0.tgz", - "integrity": "sha512-8NFOo126uYKQJyXNSLY/jSklgfLQL+XWAcPXGo876JwEQ8nSOPXWNI3TV2jLZMN8QEw8uksJ1ZwS4npjBca8MA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.18", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.18.tgz", - "integrity": "sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==", - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/bignumber.js": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001766", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", - "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/cheap-ruler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cheap-ruler/-/cheap-ruler-4.0.0.tgz", - "integrity": "sha512-0BJa8f4t141BYKQyn9NSQt1PguFQXMXwZiA5shfoaBYHAb2fFk2RAX+tiWMoQU+Agtzt3mdt0JtuyshAXqZ+Vw==", - "license": "ISC" - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/concaveman": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/concaveman/-/concaveman-1.2.1.tgz", - "integrity": "sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==", - "license": "ISC", - "dependencies": { - "point-in-polygon": "^1.1.0", - "rbush": "^3.0.1", - "robust-predicates": "^2.0.4", - "tinyqueue": "^2.0.3" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/csscolorparser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", - "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==", - "license": "MIT" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-geo": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.7.1.tgz", - "integrity": "sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-array": "1" - } - }, - "node_modules/d3-voronoi": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", - "integrity": "sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw==", - "license": "BSD-3-Clause" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", - "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=10" - } - }, - "node_modules/earcut": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", - "license": "ISC" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.279", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.279.tgz", - "integrity": "sha512-0bblUU5UNdOt5G7XqGiJtpZMONma6WAfq9vsFmtn9x1+joAObr6x1chfqyxFSDCAFwFhCQDrqeAr6MYdpwJ9Hg==", - "license": "ISC" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.4", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", - "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", - "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.0", - "@esbuild/android-arm": "0.25.0", - "@esbuild/android-arm64": "0.25.0", - "@esbuild/android-x64": "0.25.0", - "@esbuild/darwin-arm64": "0.25.0", - "@esbuild/darwin-x64": "0.25.0", - "@esbuild/freebsd-arm64": "0.25.0", - "@esbuild/freebsd-x64": "0.25.0", - "@esbuild/linux-arm": "0.25.0", - "@esbuild/linux-arm64": "0.25.0", - "@esbuild/linux-ia32": "0.25.0", - "@esbuild/linux-loong64": "0.25.0", - "@esbuild/linux-mips64el": "0.25.0", - "@esbuild/linux-ppc64": "0.25.0", - "@esbuild/linux-riscv64": "0.25.0", - "@esbuild/linux-s390x": "0.25.0", - "@esbuild/linux-x64": "0.25.0", - "@esbuild/netbsd-arm64": "0.25.0", - "@esbuild/netbsd-x64": "0.25.0", - "@esbuild/openbsd-arm64": "0.25.0", - "@esbuild/openbsd-x64": "0.25.0", - "@esbuild/sunos-x64": "0.25.0", - "@esbuild/win32-arm64": "0.25.0", - "@esbuild/win32-ia32": "0.25.0", - "@esbuild/win32-x64": "0.25.0" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "license": "Unlicense" - }, - "node_modules/geojson-equality-ts": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/geojson-equality-ts/-/geojson-equality-ts-1.0.2.tgz", - "integrity": "sha512-h3Ryq+0mCSN/7yLs0eDgrZhvc9af23o/QuC4aTiuuzP/MRCtd6mf5rLsLRY44jX0RPUfM8c4GqERQmlUxPGPoQ==", - "license": "MIT", - "dependencies": { - "@types/geojson": "^7946.0.14" - } - }, - "node_modules/geojson-polygon-self-intersections": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/geojson-polygon-self-intersections/-/geojson-polygon-self-intersections-1.2.2.tgz", - "integrity": "sha512-6XRNF4CsRHYmR9z5YuIk5f/aOototnDf0dgMqYGcS7y1l57ttt6MAIAxl3rXyas6lq1HEbTuLMh4PgvO+OV42w==", - "license": "MIT", - "dependencies": { - "rbush": "^2.0.1" - } - }, - "node_modules/geojson-polygon-self-intersections/node_modules/quickselect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", - "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==", - "license": "ISC" - }, - "node_modules/geojson-polygon-self-intersections/node_modules/rbush": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", - "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", - "license": "MIT", - "dependencies": { - "quickselect": "^1.0.1" - } - }, - "node_modules/geojson-vt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", - "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==", - "license": "ISC" - }, - "node_modules/geokdbush": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/geokdbush/-/geokdbush-2.0.1.tgz", - "integrity": "sha512-0M8so1Qx6+jJ1xpirpCNrgUsWAzIcQ3LrLmh0KJPBYI3gH7vy70nY5zEEjSp9Tn0nBt6Q2Fh922oL08lfib4Zg==", - "license": "ISC", - "dependencies": { - "tinyqueue": "^2.0.3" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gl-matrix": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz", - "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==", - "license": "MIT" - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/grid-index": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", - "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==", - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsts": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/jsts/-/jsts-2.7.1.tgz", - "integrity": "sha512-x2wSZHEBK20CY+Wy+BPE7MrFQHW6sIsdaGUMEqmGAio+3gFzQaBYPwLRonUfQf9Ak8pBieqj9tUofX1+WtAEIg==", - "license": "(EDL-1.0 OR EPL-1.0)", - "engines": { - "node": ">= 12" - } - }, - "node_modules/kdbush": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", - "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", - "license": "ISC" - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", - "license": "MIT", - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mapbox-gl": { - "version": "3.18.1", - "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-3.18.1.tgz", - "integrity": "sha512-Izc8dee2zkmb6Pn9hXFbVioPRLXJz1OFUcrvri69MhFACPU4bhLyVmhEsD9AyW1qOAP0Yvhzm60v63xdMIHPPw==", - "license": "SEE LICENSE IN LICENSE.txt", - "workspaces": [ - "src/style-spec", - "test/build/vite", - "test/build/webpack", - "test/build/typings" - ], - "dependencies": { - "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/mapbox-gl-supported": "^3.0.0", - "@mapbox/point-geometry": "^1.1.0", - "@mapbox/tiny-sdf": "^2.0.6", - "@mapbox/unitbezier": "^0.0.1", - "@mapbox/vector-tile": "^2.0.4", - "@mapbox/whoots-js": "^3.1.0", - "@types/geojson": "^7946.0.16", - "@types/geojson-vt": "^3.2.5", - "@types/mapbox__point-geometry": "^0.1.4", - "@types/pbf": "^3.0.5", - "@types/supercluster": "^7.1.3", - "cheap-ruler": "^4.0.0", - "csscolorparser": "~1.0.3", - "earcut": "^3.0.1", - "geojson-vt": "^4.0.2", - "gl-matrix": "^3.4.4", - "grid-index": "^1.1.0", - "kdbush": "^4.0.2", - "martinez-polygon-clipping": "^0.8.1", - "murmurhash-js": "^1.0.0", - "pbf": "^4.0.1", - "potpack": "^2.0.0", - "quickselect": "^3.0.0", - "supercluster": "^8.0.1", - "tinyqueue": "^3.0.0" - } - }, - "node_modules/mapbox-gl/node_modules/earcut": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz", - "integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==", - "license": "ISC" - }, - "node_modules/mapbox-gl/node_modules/tinyqueue": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", - "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", - "license": "ISC" - }, - "node_modules/martinez-polygon-clipping": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.8.1.tgz", - "integrity": "sha512-9PLLMzMPI6ihHox4Ns6LpVBLpRc7sbhULybZ/wyaY8sY3ECNe2+hxm1hA2/9bEEpRrdpjoeduBuZLg2aq1cSIQ==", - "license": "MIT", - "dependencies": { - "robust-predicates": "^2.0.4", - "splaytree": "^0.1.4", - "tinyqueue": "3.0.0" - } - }, - "node_modules/martinez-polygon-clipping/node_modules/tinyqueue": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", - "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", - "license": "ISC" - }, - "node_modules/mediabunny": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.29.0.tgz", - "integrity": "sha512-18B8w/rhO/ph/AFsIXvzZg8RaSQZ+ZYfJ99MZlTjDmlgCT58jV3azrnWQ/OSquYDi8q0xmn64mnfTEHgww3+zw==", - "license": "MPL-2.0", - "workspaces": [ - "packages/*" - ], - "dependencies": { - "@types/dom-mediacapture-transform": "^0.1.11", - "@types/dom-webcodecs": "0.1.13" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/Vanilagy" - } - }, - "node_modules/memfs": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.3.tgz", - "integrity": "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/murmurhash-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", - "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "license": "MIT" - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pbf": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-4.0.1.tgz", - "integrity": "sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==", - "license": "BSD-3-Clause", - "dependencies": { - "resolve-protobuf-schema": "^2.1.0" - }, - "bin": { - "pbf": "bin/pbf" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/point-in-polygon": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", - "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==", - "license": "MIT" - }, - "node_modules/point-in-polygon-hao": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/point-in-polygon-hao/-/point-in-polygon-hao-1.2.4.tgz", - "integrity": "sha512-x2pcvXeqhRHlNRdhLs/tgFapAbSSe86wa/eqmj1G6pWftbEs5aVRJhRGM6FYSUERKu0PjekJzMq0gsI2XyiclQ==", - "license": "MIT", - "dependencies": { - "robust-predicates": "^3.0.2" - } - }, - "node_modules/point-in-polygon-hao/node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", - "license": "Unlicense" - }, - "node_modules/polyclip-ts": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/polyclip-ts/-/polyclip-ts-0.16.8.tgz", - "integrity": "sha512-JPtKbDRuPEuAjuTdhR62Gph7Is2BS1Szx69CFOO3g71lpJDFo78k4tFyi+qFOMVPePEzdSKkpGU3NBXPHHjvKQ==", - "license": "MIT", - "dependencies": { - "bignumber.js": "^9.1.0", - "splaytree-ts": "^1.0.2" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", - "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/potpack": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz", - "integrity": "sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==", - "license": "ISC" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/protocol-buffers-schema": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/quickselect": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", - "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", - "license": "ISC" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", - "license": "MIT", - "dependencies": { - "quickselect": "^2.0.0" - } - }, - "node_modules/rbush/node_modules/quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", - "license": "ISC" - }, - "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.4" - } - }, - "node_modules/react-refresh": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", - "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/recast": { - "version": "0.23.11", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", - "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", - "license": "MIT", - "dependencies": { - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tiny-invariant": "^1.3.3", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recast/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remotion": { - "version": "4.0.410", - "resolved": "https://registry.npmjs.org/remotion/-/remotion-4.0.410.tgz", - "integrity": "sha512-qk1IRV3hSm67Bgt3yIgrNmuAE5XJRIft3t40gGbkV+H98Ob0NYHBtkJBjlkz0I1ysC7eTP6iOkPUHLDzUA1D3Q==", - "license": "SEE LICENSE IN LICENSE.md", - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", - "license": "MIT", - "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } - }, - "node_modules/robust-predicates": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", - "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==", - "license": "Unlicense" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT" - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT" - }, - "node_modules/skmeans": { - "version": "0.9.7", - "resolved": "https://registry.npmjs.org/skmeans/-/skmeans-0.9.7.tgz", - "integrity": "sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg==", - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/splaytree": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", - "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==", - "license": "MIT" - }, - "node_modules/splaytree-ts": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/splaytree-ts/-/splaytree-ts-1.0.2.tgz", - "integrity": "sha512-0kGecIZNIReCSiznK3uheYB8sbstLjCZLiwcQwbmLhgHJj2gz6OnSPkVzJQCMnmEz1BQ4gPK59ylhBoEWOhGNA==", - "license": "BDS-3-Clause" - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/style-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", - "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", - "license": "MIT", - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.27.0" - } - }, - "node_modules/supercluster": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", - "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", - "license": "ISC", - "dependencies": { - "kdbush": "^4.0.2" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/sweepline-intersections": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sweepline-intersections/-/sweepline-intersections-1.5.0.tgz", - "integrity": "sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ==", - "license": "MIT", - "dependencies": { - "tinyqueue": "^2.0.0" - } - }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser": { - "version": "5.46.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", - "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.16", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", - "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" - }, - "node_modules/tinyqueue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", - "license": "ISC" - }, - "node_modules/topojson-client": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", - "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", - "license": "ISC", - "dependencies": { - "commander": "2" - }, - "bin": { - "topo2geo": "bin/topo2geo", - "topomerge": "bin/topomerge", - "topoquantize": "bin/topoquantize" - } - }, - "node_modules/topojson-server": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/topojson-server/-/topojson-server-3.0.1.tgz", - "integrity": "sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==", - "license": "ISC", - "dependencies": { - "commander": "2" - }, - "bin": { - "geo2topo": "bin/geo2topo" - } - }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "license": "MIT", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT" - }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/watchpack": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", - "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "license": "BSD-2-Clause" - }, - "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "license": "MIT", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/zod": { - "version": "3.22.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz", - "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/marketing-videos/package.json b/marketing-videos/package.json deleted file mode 100644 index ab6176e..0000000 --- a/marketing-videos/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "sportstime-marketing-videos", - "version": "1.0.0", - "description": "Marketing videos for SportsTime app", - "scripts": { - "start": "remotion studio", - "build": "remotion render", - "render:route": "remotion render TheRoute out/the-route.mp4 --gl=angle --concurrency=1", - "render:checklist": "remotion render TheChecklist out/the-checklist.mp4", - "render:bucketlist": "remotion render TheBucketList out/the-bucket-list.mp4", - "render:squad": "remotion render TheSquad out/the-squad.mp4", - "render:handoff": "remotion render TheHandoff out/the-handoff.mp4", - "render:fantest": "remotion render TheFanTest out/the-fan-test.mp4", - "render:groupchat": "remotion render TheGroupChat out/the-group-chat.mp4", - "render:all-originals": "npm run render:route && npm run render:checklist && npm run render:bucketlist && npm run render:squad && npm run render:handoff && npm run render:fantest && npm run render:groupchat", - "render:V03-H01": "remotion render V03-H01 out/week1/V03-H01.mp4", - "render:V10-H01": "remotion render V10-H01 out/week1/V10-H01.mp4", - "render:V03-H02": "remotion render V03-H02 out/week1/V03-H02.mp4", - "render:V10-H02": "remotion render V10-H02 out/week1/V10-H02.mp4", - "render:V03-H03": "remotion render V03-H03 out/week1/V03-H03.mp4", - "render:V17-H01": "remotion render V17-H01 out/week1/V17-H01.mp4", - "render:V17-H02": "remotion render V17-H02 out/week1/V17-H02.mp4", - "render:V06-H01": "remotion render V06-H01 out/week1/V06-H01.mp4", - "render:V08-H01": "remotion render V08-H01 out/week1/V08-H01.mp4", - "render:V05-LA-01": "remotion render V05-LA-01 out/week1/V05-LA-01.mp4", - "render:V05-NY-01": "remotion render V05-NY-01 out/week1/V05-NY-01.mp4", - "render:V05-TX-01": "remotion render V05-TX-01 out/week1/V05-TX-01.mp4", - "render:V05-CA-01": "remotion render V05-CA-01 out/week1/V05-CA-01.mp4", - "render:V08-LA-01": "remotion render V08-LA-01 out/week1/V08-LA-01.mp4", - "render:V04-H01": "remotion render V04-H01 out/week1/V04-H01.mp4", - "render:V20-H01": "remotion render V20-H01 out/week1/V20-H01.mp4", - "render:V14-H01": "remotion render V14-H01 out/week1/V14-H01.mp4", - "render:V04-H02": "remotion render V04-H02 out/week1/V04-H02.mp4", - "render:V02-H01": "remotion render V02-H01 out/week1/V02-H01.mp4", - "render:V19-H01": "remotion render V19-H01 out/week1/V19-H01.mp4", - "render:week1": "bash scripts/render-week1.sh", - "render:all": "npm run render:all-originals && npm run render:week1" - }, - "type": "module", - "dependencies": { - "@remotion/cli": "^4.0.410", - "@remotion/transitions": "^4.0.410", - "@turf/turf": "^7.3.2", - "@types/mapbox-gl": "^3.4.1", - "@types/react": "^19.2.9", - "@types/react-dom": "^19.2.3", - "mapbox-gl": "^3.18.1", - "react": "^19.2.4", - "react-dom": "^19.2.4", - "remotion": "^4.0.410", - "typescript": "^5.9.3" - } -} diff --git a/marketing-videos/public/ASSET_README.md b/marketing-videos/public/ASSET_README.md deleted file mode 100644 index 5f4c64a..0000000 --- a/marketing-videos/public/ASSET_README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Asset Placeholder Directory - -Replace these placeholders with real assets before rendering final videos. - -## Screen Recordings (`screenrecs/`) -Record these on-device using the SportsTime app: - -| File | Description | Screen to Record | -|------|-------------|-----------------| -| `date_range.mp4` | Picking dates in trip wizard | Trip Wizard → Date Range step | -| `follow_team.mp4` | Following a team flow | Trip Wizard → Follow Team mode | -| `by_games.mp4` | Browsing by games | Trip Wizard → By Games mode | -| `route_generated.mp4` | Route result appearing | Trip Detail → after planning | -| `poll_create.mp4` | Creating a group poll | Trip Options → Share/Poll | -| `tracker.mp4` | Stadium tracker/bucket list | Profile → Stadium Tracker | - -**Recording tips:** -- Use iPhone screen recording (Settings → Control Center) -- Portrait orientation, 1080x1920 native -- 5-10 seconds per clip -- Clean, smooth taps (no fumbling) - -## Overlays (`overlays/`) - -| File | Description | -|------|-------------| -| `imessage_bg.png` | iMessage background texture (optional) | -| `chat_bubbles.png` | Chat bubble overlay (optional) | -| `vote_bubbles.png` | Vote notification overlay (optional) | - -## B-Roll (`broll/`) - -| File | Description | Source | -|------|-------------|--------| -| `highway.mp4` | Highway driving footage | Stock/Pexels | -| `city.mp4` | City skyline/aerial | Stock/Pexels | -| `stadium.mp4` | Stadium exterior | Stock/Pexels | - -**Note:** B-roll is optional. Videos render with placeholder scenes when assets are missing. diff --git a/marketing-videos/public/broll/.gitkeep b/marketing-videos/public/broll/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/marketing-videos/public/overlays/.gitkeep b/marketing-videos/public/overlays/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/marketing-videos/public/screenrecs/.gitkeep b/marketing-videos/public/screenrecs/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/marketing-videos/remotion.config.ts b/marketing-videos/remotion.config.ts deleted file mode 100644 index e8d4dba..0000000 --- a/marketing-videos/remotion.config.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Config } from "@remotion/cli/config"; - -Config.setVideoImageFormat("jpeg"); -Config.setOverwriteOutput(true); diff --git a/marketing-videos/scripts/render-week1.sh b/marketing-videos/scripts/render-week1.sh deleted file mode 100755 index 1de4f77..0000000 --- a/marketing-videos/scripts/render-week1.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env bash -# -# Batch render all 20 Week 1 Reels videos. -# Usage: bash scripts/render-week1.sh [--concurrency N] -# -# Options: -# --concurrency N Number of parallel renders (default: 2) -# --ids ID1,ID2 Comma-separated list of specific IDs to render -# -set -euo pipefail - -CONCURRENCY=${1:-2} -OUT_DIR="out/week1" -mkdir -p "$OUT_DIR" - -IDS=( - V03-H01 - V10-H01 - V03-H02 - V10-H02 - V03-H03 - V17-H01 - V17-H02 - V06-H01 - V08-H01 - V05-LA-01 - V05-NY-01 - V05-TX-01 - V05-CA-01 - V08-LA-01 - V04-H01 - V20-H01 - V14-H01 - V04-H02 - V02-H01 - V19-H01 -) - -# Parse optional --ids flag -if [[ "${1:-}" == "--ids" ]]; then - IFS=',' read -ra IDS <<< "${2:-}" - shift 2 -fi - -TOTAL=${#IDS[@]} -DONE=0 -FAILED=0 - -echo "" -echo "=== SportsTime Week 1 Batch Render ===" -echo " Videos: $TOTAL" -echo " Output: $OUT_DIR/" -echo " Concurrency: $CONCURRENCY" -echo "" - -render_one() { - local id=$1 - local out="$OUT_DIR/${id}.mp4" - echo "[START] $id → $out" - if npx remotion render "$id" "$out" --log=error 2>&1; then - echo "[DONE] $id ✓" - return 0 - else - echo "[FAIL] $id ✗" - return 1 - fi -} - -export -f render_one -export OUT_DIR - -# Run renders with controlled concurrency using xargs -printf '%s\n' "${IDS[@]}" | xargs -P "$CONCURRENCY" -I {} bash -c 'render_one "$@"' _ {} - -echo "" -echo "=== Render Complete ===" -echo " Output: $OUT_DIR/" -ls -lh "$OUT_DIR"/*.mp4 2>/dev/null || echo " (no .mp4 files found - check errors above)" diff --git a/marketing-videos/src/Root.tsx b/marketing-videos/src/Root.tsx deleted file mode 100644 index db7eb5f..0000000 --- a/marketing-videos/src/Root.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import React from "react"; -import { Composition, Folder } from "remotion"; - -import { TheRoute } from "./videos/TheRoute"; -import { TheChecklist } from "./videos/TheChecklist"; -import { TheBucketList } from "./videos/TheBucketList"; -import { TheSquad } from "./videos/TheSquad"; -import { TheHandoff } from "./videos/TheHandoff"; -import { TheFanTest } from "./videos/TheFanTest"; -import { TheGroupChat } from "./videos/TheGroupChat"; -import { StadiumCountFlex } from "./videos/StadiumCountFlex"; -import { GroupChatChaos } from "./videos/GroupChatChaos"; -import { LocalCityRoute } from "./videos/LocalCityRoute"; -import { SpreadsheetEra } from "./videos/SpreadsheetEra"; -import { AwayGameTake } from "./videos/AwayGameTake"; - -import { VideoFromConfig } from "./engine"; -import type { VideoConfig } from "./engine"; -import week1Configs from "./configs/week1.json"; - -/** - * Wrapper component that receives config via defaultProps. - * Avoids inline arrow functions in Composition component prop. - */ -const ConfigVideo: React.FC<{ config: VideoConfig }> = ({ config }) => { - return ; -}; - -/** - * SportsTime Marketing Videos - * - * All videos are portrait format (1080x1920) at 30fps - * Designed for App Store, YouTube, Instagram, and TikTok - */ -export const RemotionRoot: React.FC = () => { - const FPS = 30; - const WIDTH = 1080; - const HEIGHT = 1920; - - const configs = week1Configs as VideoConfig[]; - - return ( - <> - {/* Original hand-crafted marketing videos */} - - {/* Video 1: The Route - Map animation showcasing trip planning */} - - - {/* Video 2: The Checklist - Wizard walkthrough */} - - - {/* Video 3: The Bucket List - Stadium progress tracking */} - - - {/* Video 4: The Squad - Group polling feature */} - - - {/* Video 5: The Handoff - PDF export showcase */} - - - {/* Video 6: The Fan Test - Viral identity challenge */} - - - {/* Video 7: The Group Chat - Viral group chat chaos */} - - - - {/* Hand-crafted TikTok/Reels - unique visual identity per video */} - - - - - - - - - {/* Week 1: 20 config-driven TikTok/Reels videos */} - - {configs.map((config) => ( - - ))} - - - ); -}; diff --git a/marketing-videos/src/components/shared/AppScreenshot.tsx b/marketing-videos/src/components/shared/AppScreenshot.tsx deleted file mode 100644 index ae1325f..0000000 --- a/marketing-videos/src/components/shared/AppScreenshot.tsx +++ /dev/null @@ -1,185 +0,0 @@ -import React from "react"; -import { - AbsoluteFill, - useCurrentFrame, - useVideoConfig, - spring, - interpolate, - Img, - staticFile, -} from "remotion"; -import { theme } from "./theme"; - -type AppScreenshotProps = { - src?: string; - delay?: number; - scale?: number; - showDeviceFrame?: boolean; - children?: React.ReactNode; -}; - -export const AppScreenshot: React.FC = ({ - src, - delay = 0, - scale = 0.85, - showDeviceFrame = true, - children, -}) => { - const frame = useCurrentFrame(); - const { fps, width, height } = useVideoConfig(); - - const delayFrames = delay * fps; - - const progress = spring({ - frame: frame - delayFrames, - fps, - config: theme.animation.smooth, - }); - - const opacity = interpolate( - frame - delayFrames, - [0, fps * 0.3], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - const scaleValue = interpolate(progress, [0, 1], [0.9, 1]) * scale; - - if (frame < delayFrames) { - return null; - } - - const phoneWidth = width * 0.75; - const phoneHeight = height * 0.8; - const cornerRadius = 60; - const bezelWidth = 12; - - return ( -
- {showDeviceFrame ? ( -
- {/* Dynamic Island */} -
- - {/* Screen content */} -
- {src ? ( - - ) : ( - children - )} -
- - {/* Home indicator */} -
-
- ) : ( -
- {src ? ( - - ) : ( - children - )} -
- )} -
- ); -}; - -// Mock screen content components -type MockScreenProps = { - children: React.ReactNode; -}; - -export const MockScreen: React.FC = ({ children }) => { - return ( - - {children} - - ); -}; diff --git a/marketing-videos/src/components/shared/Background.tsx b/marketing-videos/src/components/shared/Background.tsx deleted file mode 100644 index 75b1cf9..0000000 --- a/marketing-videos/src/components/shared/Background.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React from "react"; -import { AbsoluteFill, useCurrentFrame, interpolate } from "remotion"; -import { theme } from "./theme"; - -type GradientBackgroundProps = { - animate?: boolean; -}; - -export const GradientBackground: React.FC = ({ - animate = false, -}) => { - const frame = useCurrentFrame(); - - const gradientAngle = animate - ? interpolate(frame, [0, 300], [180, 200], { extrapolateRight: "clamp" }) - : 180; - - return ( - - ); -}; - -// Subtle grid pattern background -export const GridBackground: React.FC = () => { - return ( - -
- - ); -}; - -// Radial glow background -type GlowBackgroundProps = { - color?: string; - intensity?: number; -}; - -export const GlowBackground: React.FC = ({ - color = theme.colors.accent, - intensity = 0.15, -}) => { - return ( - -
- - ); -}; diff --git a/marketing-videos/src/components/shared/FilmGrain.tsx b/marketing-videos/src/components/shared/FilmGrain.tsx deleted file mode 100644 index 6d8b93e..0000000 --- a/marketing-videos/src/components/shared/FilmGrain.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from "react"; -import { AbsoluteFill, useCurrentFrame } from "remotion"; - -/** - * Subtle film grain overlay that makes videos feel organic/real. - * Uses deterministic noise per frame for reproducible renders. - */ -export const FilmGrain: React.FC<{ opacity?: number }> = ({ - opacity = 0.04, -}) => { - const frame = useCurrentFrame(); - // Shift the noise pattern each frame using a CSS trick - const offsetX = ((frame * 73) % 200) - 100; - const offsetY = ((frame * 47) % 200) - 100; - - return ( - - - - - - - - - ); -}; diff --git a/marketing-videos/src/components/shared/LogoEndcard.tsx b/marketing-videos/src/components/shared/LogoEndcard.tsx deleted file mode 100644 index 9bd237b..0000000 --- a/marketing-videos/src/components/shared/LogoEndcard.tsx +++ /dev/null @@ -1,203 +0,0 @@ -import React from "react"; -import { - AbsoluteFill, - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "./theme"; - -type LogoEndcardProps = { - tagline?: string; - showAppStoreBadge?: boolean; -}; - -export const LogoEndcard: React.FC = ({ - tagline, - showAppStoreBadge = false, -}) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - // Logo entrance with slight bounce - const logoScale = spring({ - frame, - fps, - config: { damping: 15, stiffness: 100 }, - }); - - const logoOpacity = interpolate(frame, [0, fps * 0.3], [0, 1], { - extrapolateRight: "clamp", - }); - - // Tagline entrance (delayed) - const taglineProgress = spring({ - frame, - fps, - delay: fps * 0.4, - config: theme.animation.smooth, - }); - - const taglineOpacity = interpolate( - frame, - [fps * 0.4, fps * 0.6], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - const taglineY = interpolate(taglineProgress, [0, 1], [20, 0]); - - // App Store badge entrance (delayed further) - const badgeProgress = spring({ - frame, - fps, - delay: fps * 0.7, - config: theme.animation.smooth, - }); - - const badgeOpacity = interpolate( - frame, - [fps * 0.7, fps * 0.9], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - return ( - - {/* App Icon */} -
- {/* Icon placeholder - rounded square with gradient */} -
- {/* Simple stadium icon representation */} - - - - - - -
- - {/* Wordmark */} -
- SportsTime -
-
- - {/* Tagline */} - {tagline && ( -
- {tagline} -
- )} - - {/* App Store Badge */} - {showAppStoreBadge && ( -
-
- - - - - Download on the App Store - -
-
- )} -
- ); -}; diff --git a/marketing-videos/src/components/shared/TapIndicator.tsx b/marketing-videos/src/components/shared/TapIndicator.tsx deleted file mode 100644 index af27559..0000000 --- a/marketing-videos/src/components/shared/TapIndicator.tsx +++ /dev/null @@ -1,173 +0,0 @@ -import React from "react"; -import { - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "./theme"; - -type TapIndicatorProps = { - x: number; - y: number; - delay?: number; - showRipple?: boolean; -}; - -export const TapIndicator: React.FC = ({ - x, - y, - delay = 0, - showRipple = true, -}) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - const delayFrames = delay * fps; - const localFrame = frame - delayFrames; - - if (localFrame < 0) { - return null; - } - - // Finger appears - const fingerProgress = spring({ - frame: localFrame, - fps, - config: theme.animation.smooth, - }); - - // Finger presses down - const pressProgress = spring({ - frame: localFrame - fps * 0.2, - fps, - config: { damping: 30, stiffness: 300 }, - }); - - const fingerScale = interpolate(fingerProgress, [0, 1], [0.5, 1]); - const fingerOpacity = interpolate(fingerProgress, [0, 1], [0, 1]); - const pressScale = interpolate(pressProgress, [0, 1], [1, 0.9]); - - // Ripple effect - const rippleProgress = interpolate( - localFrame, - [fps * 0.25, fps * 0.7], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - const rippleScale = interpolate(rippleProgress, [0, 1], [0.5, 2]); - const rippleOpacity = interpolate(rippleProgress, [0, 0.3, 1], [0, 0.5, 0]); - - return ( -
- {/* Ripple */} - {showRipple && rippleProgress > 0 && ( -
- )} - - {/* Finger circle */} -
-
- ); -}; - -// Swipe indicator for tutorial-style animations -type SwipeIndicatorProps = { - startX: number; - startY: number; - endX: number; - endY: number; - delay?: number; - duration?: number; -}; - -export const SwipeIndicator: React.FC = ({ - startX, - startY, - endX, - endY, - delay = 0, - duration = 0.8, -}) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - const delayFrames = delay * fps; - const durationFrames = duration * fps; - const localFrame = frame - delayFrames; - - if (localFrame < 0 || localFrame > durationFrames + fps * 0.3) { - return null; - } - - const progress = interpolate( - localFrame, - [0, durationFrames], - [0, 1], - { extrapolateRight: "clamp" } - ); - - const x = interpolate(progress, [0, 1], [startX, endX]); - const y = interpolate(progress, [0, 1], [startY, endY]); - - const opacity = interpolate( - localFrame, - [0, fps * 0.1, durationFrames, durationFrames + fps * 0.2], - [0, 1, 1, 0], - { extrapolateRight: "clamp" } - ); - - return ( -
-
-
- ); -}; diff --git a/marketing-videos/src/components/shared/TextReveal.tsx b/marketing-videos/src/components/shared/TextReveal.tsx deleted file mode 100644 index 218eb29..0000000 --- a/marketing-videos/src/components/shared/TextReveal.tsx +++ /dev/null @@ -1,188 +0,0 @@ -import React from "react"; -import { - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "./theme"; - -type TextRevealProps = { - text: string; - fontSize?: number; - color?: string; - fontWeight?: number; - textAlign?: "left" | "center" | "right"; - delay?: number; - style?: React.CSSProperties; -}; - -export const TextReveal: React.FC = ({ - text, - fontSize = theme.fontSizes.title, - color = theme.colors.text, - fontWeight = 700, - textAlign = "center", - delay = 0, - style = {}, -}) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - const delayFrames = delay * fps; - - // Spring for smooth entrance - const progress = spring({ - frame: frame - delayFrames, - fps, - config: theme.animation.smooth, - }); - - const opacity = interpolate( - frame - delayFrames, - [0, fps * 0.3], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - const translateY = interpolate(progress, [0, 1], [30, 0]); - - if (frame < delayFrames) { - return null; - } - - return ( -
- {text} -
- ); -}; - -// Multi-line version with staggered reveal -type TextRevealMultilineProps = { - lines: string[]; - fontSize?: number; - color?: string; - fontWeight?: number; - textAlign?: "left" | "center" | "right"; - staggerDelay?: number; - startDelay?: number; - lineHeight?: number; -}; - -export const TextRevealMultiline: React.FC = ({ - lines, - fontSize = theme.fontSizes.title, - color = theme.colors.text, - fontWeight = 700, - textAlign = "center", - staggerDelay = 0.1, - startDelay = 0, - lineHeight = 1.3, -}) => { - return ( -
- {lines.map((line, index) => ( - - ))} -
- ); -}; - -// Highlight style text (with background) -type HighlightTextProps = { - text: string; - fontSize?: number; - delay?: number; -}; - -export const HighlightText: React.FC = ({ - text, - fontSize = theme.fontSizes.subtitle, - delay = 0, -}) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - const delayFrames = delay * fps; - - const progress = spring({ - frame: frame - delayFrames, - fps, - config: theme.animation.snappy, - }); - - const scaleX = interpolate(progress, [0, 1], [0, 1]); - const textOpacity = interpolate( - frame - delayFrames, - [fps * 0.15, fps * 0.3], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - if (frame < delayFrames) { - return null; - } - - return ( -
- {/* Background highlight */} -
- {/* Text */} - - {text} - -
- ); -}; diff --git a/marketing-videos/src/components/shared/TikTokCaption.tsx b/marketing-videos/src/components/shared/TikTokCaption.tsx deleted file mode 100644 index be31f20..0000000 --- a/marketing-videos/src/components/shared/TikTokCaption.tsx +++ /dev/null @@ -1,306 +0,0 @@ -import React from "react"; -import { - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "./theme"; - -/** - * TikTok-native kinetic caption system. - * - * Unlike generic subtitle overlays, each style mimics real TikTok - * caption patterns: punch zooms, word pops, highlight boxes, etc. - */ - -type CaptionEntry = { - text: string; - startSec: number; - endSec: number; - style?: "punch" | "highlight" | "stack" | "whisper" | "shake"; -}; - -type TikTokCaptionProps = { - captions: CaptionEntry[]; - /** Vertical position from bottom (px) */ - bottomOffset?: number; -}; - -export const TikTokCaption: React.FC = ({ - captions, - bottomOffset = 280, -}) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - const currentSec = frame / fps; - const active = captions.find( - (c) => currentSec >= c.startSec && currentSec < c.endSec - ); - - if (!active) return null; - - const startFrame = active.startSec * fps; - const endFrame = active.endSec * fps; - const localFrame = frame - startFrame; - const style = active.style || "punch"; - - const exitOpacity = interpolate( - frame, - [endFrame - 4, endFrame], - [1, 0], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - return ( -
- {style === "punch" && ( - - )} - {style === "highlight" && ( - - )} - {style === "stack" && ( - - )} - {style === "whisper" && ( - - )} - {style === "shake" && ( - - )} -
- ); -}; - -/** Punch zoom in - text scales from big to normal with impact */ -const PunchCaption: React.FC<{ - text: string; - localFrame: number; - fps: number; -}> = ({ text, localFrame, fps }) => { - const prog = spring({ - frame: localFrame, - fps, - config: { damping: 10, stiffness: 280 }, - }); - - const scale = interpolate(prog, [0, 1], [1.8, 1]); - const opacity = interpolate(prog, [0, 0.3], [0, 1], { - extrapolateRight: "clamp", - }); - - return ( - - {text} - - ); -}; - -/** Highlight box - text with colored background box that wipes in */ -const HighlightCaption: React.FC<{ - text: string; - localFrame: number; - fps: number; -}> = ({ text, localFrame, fps }) => { - const boxProg = spring({ - frame: localFrame, - fps, - config: { damping: 15, stiffness: 200 }, - }); - const textProg = spring({ - frame: localFrame - 3, - fps, - config: { damping: 20, stiffness: 180 }, - }); - - return ( -
-
- - {text} - -
- ); -}; - -/** Stack - words stack vertically, each popping in */ -const StackCaption: React.FC<{ - text: string; - localFrame: number; - fps: number; -}> = ({ text, localFrame, fps }) => { - const words = text.split(" "); - return ( -
- {words.map((word, i) => { - const delay = i * 2; - const prog = spring({ - frame: localFrame - delay, - fps, - config: { damping: 12, stiffness: 250 }, - }); - return ( - - {word} - - ); - })} -
- ); -}; - -/** Whisper - small italic text that fades in gently */ -const WhisperCaption: React.FC<{ - text: string; - localFrame: number; - fps: number; -}> = ({ text, localFrame, fps }) => { - const opacity = interpolate(localFrame, [0, fps * 0.3], [0, 1], { - extrapolateRight: "clamp", - }); - - return ( - - {text} - - ); -}; - -/** Shake - text shakes briefly on entrance then settles */ -const ShakeCaption: React.FC<{ - text: string; - localFrame: number; - fps: number; -}> = ({ text, localFrame, fps }) => { - const prog = spring({ - frame: localFrame, - fps, - config: { damping: 8, stiffness: 300 }, - }); - - // Shake offsets that decay over ~5 frames - const shakeIntensity = interpolate(localFrame, [0, 5], [8, 0], { - extrapolateRight: "clamp", - }); - const OFFSETS = [ - { x: -1, y: 1 }, - { x: 1, y: -1 }, - { x: -1, y: -1 }, - { x: 1, y: 1 }, - { x: 0, y: -1 }, - ]; - const offset = OFFSETS[localFrame % OFFSETS.length]; - const sx = offset.x * shakeIntensity; - const sy = offset.y * shakeIntensity; - - return ( - - {text} - - ); -}; - -export type { CaptionEntry }; diff --git a/marketing-videos/src/components/shared/index.ts b/marketing-videos/src/components/shared/index.ts deleted file mode 100644 index 6763d89..0000000 --- a/marketing-videos/src/components/shared/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { theme } from "./theme"; -export { LogoEndcard } from "./LogoEndcard"; -export { TextReveal, TextRevealMultiline, HighlightText } from "./TextReveal"; -export { TapIndicator, SwipeIndicator } from "./TapIndicator"; -export { AppScreenshot, MockScreen } from "./AppScreenshot"; -export { GradientBackground, GridBackground, GlowBackground } from "./Background"; -export { FilmGrain } from "./FilmGrain"; -export { TikTokCaption } from "./TikTokCaption"; -export type { CaptionEntry } from "./TikTokCaption"; diff --git a/marketing-videos/src/components/shared/theme.ts b/marketing-videos/src/components/shared/theme.ts deleted file mode 100644 index 847fa99..0000000 --- a/marketing-videos/src/components/shared/theme.ts +++ /dev/null @@ -1,47 +0,0 @@ -// SportsTime Marketing Video Theme -export const theme = { - colors: { - background: "#0A0A0A", - backgroundGradientStart: "#0A0A0A", - backgroundGradientEnd: "#1A1A2E", - accent: "#FF6B35", - accentDark: "#E55A25", - secondary: "#4ECDC4", - secondaryDark: "#3DBDB5", - text: "#FFFFFF", - textSecondary: "#B0B0B0", - textMuted: "#6B6B6B", - success: "#4CAF50", - gold: "#FFD700", - mapLine: "#FF6B35", - mapMarker: "#4ECDC4", - }, - fonts: { - display: "SF Pro Display, -apple-system, BlinkMacSystemFont, sans-serif", - text: "SF Pro Text, -apple-system, BlinkMacSystemFont, sans-serif", - }, - fontSizes: { - hero: 72, - headline: 56, - title: 48, - subtitle: 36, - body: 28, - caption: 20, - }, - spacing: { - xs: 8, - sm: 16, - md: 24, - lg: 40, - xl: 64, - xxl: 96, - }, - animation: { - smooth: { damping: 200 }, - snappy: { damping: 20, stiffness: 200 }, - bouncy: { damping: 8 }, - heavy: { damping: 15, stiffness: 80, mass: 2 }, - }, -} as const; - -export type Theme = typeof theme; diff --git a/marketing-videos/src/configs/week1.json b/marketing-videos/src/configs/week1.json deleted file mode 100644 index e806429..0000000 --- a/marketing-videos/src/configs/week1.json +++ /dev/null @@ -1,430 +0,0 @@ -[ - { - "id": "V03-H01", - "base": "V03", - "hook": "NOBODY planned it. So I made a poll.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "CHAT", "durationSec": 3.0, "props": { "overlayText": "Every group chat ever" } }, - { "type": "SCREENREC", "durationSec": 3.0, "props": { "assetKey": "screenrecs/route-generated.mp4", "caption": "Built the trip in 20 sec" } }, - { "type": "MAP", "durationSec": 2.5, "props": { "cities": [{ "name": "Dallas", "x": 45, "y": 55 }, { "name": "Houston", "x": 50, "y": 70 }, { "name": "San Antonio", "x": 38, "y": 72 }] } }, - { "type": "POLL", "durationSec": 2.5, "props": { "question": "Which trip?", "options": [{ "label": "Texas Triangle", "votes": 4, "emoji": "🤠" }, { "label": "East Coast", "votes": 2, "emoji": "🗽" }] } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Nobody was planning it", "startSec": 0.3, "endSec": 2.3, "emphasis": "bold" }, - { "text": "So I opened SportsTime", "startSec": 2.8, "endSec": 4.8, "emphasis": "normal" }, - { "text": "Built a route in 20 seconds", "startSec": 5.3, "endSec": 7.5, "emphasis": "highlight" }, - { "text": "Dropped the poll", "startSec": 8.0, "endSec": 9.8, "emphasis": "normal" }, - { "text": "Trip booked by lunch", "startSec": 10.3, "endSec": 12.0, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Nobody plans it. So I did.", - "targetLengthSec": 15, - "assets": { "screenrec": ["route-generated"], "overlay": ["chat-bubbles", "vote-bubbles"] } - }, - { - "id": "V10-H01", - "base": "V10", - "hook": "If your group chat needs 200 messages… use this.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "CHAT", "durationSec": 3.0, "props": { "overlayText": "200 messages later…", "groupName": "Trip Planning 🏈", "groupSize": 5 } }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/route-generated.mp4", "caption": "One app. One route." } }, - { "type": "POLL", "durationSec": 2.5, "props": { "question": "Dallas or Houston first?", "options": [{ "label": "Dallas first", "votes": 3, "emoji": "⭐" }, { "label": "Houston first", "votes": 2, "emoji": "🚀" }] } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Your group chat after someone says 'trip'", "startSec": 0.3, "endSec": 2.3, "emphasis": "normal" }, - { "text": "200 messages… zero plans", "startSec": 2.8, "endSec": 4.8, "emphasis": "bold" }, - { "text": "Or just use this", "startSec": 5.3, "endSec": 7.0, "emphasis": "highlight" }, - { "text": "Route built. Poll sent.", "startSec": 7.5, "endSec": 9.5, "emphasis": "normal" }, - { "text": "Trip decided in 3 minutes", "startSec": 10.0, "endSec": 12.0, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Two hundred messages or one app. Your call.", - "targetLengthSec": 13 - }, - { - "id": "V03-H02", - "base": "V03", - "hook": "Every sports trip starts with 'we should do this' 🤡", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5, "props": { "emoji": "🤡" } }, - { "type": "CHAT", "durationSec": 3.0, "props": { "overlayText": "The cycle continues…", "messages": [{ "sender": "Jake", "text": "We should do a baseball trip", "isMe": false, "delaySec": 0.2 }, { "sender": "Mike", "text": "Bro YES", "isMe": false, "delaySec": 0.5 }, { "sender": "Sam", "text": "When?", "isMe": false, "delaySec": 0.8 }, { "sender": "Jake", "text": "Idk someone plan it", "isMe": false, "delaySec": 1.2 }, { "sender": "You", "text": "Fine. I'll do it.", "isMe": true, "delaySec": 1.7 }] } }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/date-range.mp4", "caption": "Picked dates + sports" } }, - { "type": "POLL", "durationSec": 2.5, "props": { "question": "Which route?", "options": [{ "label": "LA → SD", "votes": 3, "emoji": "🌴" }, { "label": "NY → BOS", "votes": 2, "emoji": "🗽" }, { "label": "CHI → DET", "votes": 1, "emoji": "🌊" }] } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Every. Single. Time.", "startSec": 0.3, "endSec": 2.3, "emphasis": "bold" }, - { "text": "'Someone plan it'", "startSec": 2.8, "endSec": 4.5, "emphasis": "normal" }, - { "text": "Fine. I opened SportsTime.", "startSec": 5.0, "endSec": 7.0, "emphasis": "highlight" }, - { "text": "3 options. 1 poll.", "startSec": 7.5, "endSec": 9.5, "emphasis": "normal" }, - { "text": "Trip planned in 2 min", "startSec": 10.0, "endSec": 12.0, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Every trip starts the same way. End it different.", - "targetLengthSec": 13 - }, - { - "id": "V10-H02", - "base": "V10", - "hook": "3 trip options. 1 vote. Done.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.0 }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/route-generated.mp4", "caption": "Generated 3 routes" } }, - { "type": "POLL", "durationSec": 3.0, "props": { "question": "Pick our trip", "options": [{ "label": "Texas Triangle 🤠", "votes": 4, "emoji": "🤠" }, { "label": "Cali Coast 🌴", "votes": 3, "emoji": "🌴" }, { "label": "Northeast 🗽", "votes": 1, "emoji": "🗽" }] } }, - { "type": "CHAT", "durationSec": 2.5, "props": { "overlayText": "Group chat: decided", "messages": [{ "sender": "Jake", "text": "Texas it is!!", "isMe": false, "delaySec": 0.2 }, { "sender": "Mike", "text": "LETS GO 🤠", "isMe": false, "delaySec": 0.5 }, { "sender": "You", "text": "Booked ✅", "isMe": true, "delaySec": 0.9 }] } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "3 trip options", "startSec": 0.3, "endSec": 1.8, "emphasis": "bold" }, - { "text": "Generated in seconds", "startSec": 2.3, "endSec": 4.3, "emphasis": "normal" }, - { "text": "1 vote to decide", "startSec": 5.0, "endSec": 7.0, "emphasis": "highlight" }, - { "text": "Done. Trip booked.", "startSec": 7.5, "endSec": 9.5, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Three options. One vote. Done.", - "targetLengthSec": 13 - }, - { - "id": "V03-H03", - "base": "V03", - "hook": "All talk → I shipped the itinerary.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "CHAT", "durationSec": 2.5, "props": { "overlayText": "3 months of 'we should'", "messages": [{ "sender": "Jake", "text": "We should do a trip", "isMe": false, "delaySec": 0.15 }, { "sender": "Mike", "text": "For sure", "isMe": false, "delaySec": 0.4 }, { "sender": "Sam", "text": "Down", "isMe": false, "delaySec": 0.6 }] } }, - { "type": "SCREENREC", "durationSec": 3.0, "props": { "assetKey": "screenrecs/route-generated.mp4", "caption": "So I just did it" } }, - { "type": "MAP", "durationSec": 2.5, "props": { "cities": [{ "name": "Chicago", "x": 55, "y": 35 }, { "name": "Milwaukee", "x": 54, "y": 30 }, { "name": "Detroit", "x": 62, "y": 33 }] } }, - { "type": "POLL", "durationSec": 2.5, "props": { "question": "We going?", "options": [{ "label": "YES 🔥", "votes": 4, "emoji": "🔥" }, { "label": "Can't make it", "votes": 0, "emoji": "😢" }] } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "3 months of all talk", "startSec": 0.3, "endSec": 2.3, "emphasis": "normal" }, - { "text": "'We should do a trip' — nobody moves", "startSec": 2.8, "endSec": 4.8, "emphasis": "bold" }, - { "text": "So I opened SportsTime", "startSec": 5.3, "endSec": 7.0, "emphasis": "highlight" }, - { "text": "Built the route, mapped the games", "startSec": 7.5, "endSec": 9.5, "emphasis": "normal" }, - { "text": "Shipped the itinerary", "startSec": 10.0, "endSec": 12.0, "emphasis": "bold" }, - { "text": "4-0 vote. We're going.", "startSec": 12.5, "endSec": 14.0, "emphasis": "highlight" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "All talk. Until I shipped the itinerary.", - "targetLengthSec": 15 - }, - { - "id": "V17-H01", - "base": "V17", - "hook": "The spreadsheet era is over.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/date-range.mp4", "caption": "Pick dates → pick sports" } }, - { "type": "TEXTPUNCH", "durationSec": 2.0, "props": { "text": "No spreadsheet needed.", "variant": "slam" } }, - { "type": "SCREENREC", "durationSec": 3.0, "props": { "assetKey": "screenrecs/route-generated.mp4", "caption": "Route + games auto-matched" } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Stop planning trips in spreadsheets", "startSec": 0.3, "endSec": 2.3, "emphasis": "bold" }, - { "text": "Pick your dates and sports", "startSec": 2.8, "endSec": 4.8, "emphasis": "normal" }, - { "text": "No spreadsheet needed", "startSec": 5.5, "endSec": 7.5, "emphasis": "highlight" }, - { "text": "Route + games auto-matched", "startSec": 8.0, "endSec": 10.5, "emphasis": "normal" }, - { "text": "Done in 20 seconds", "startSec": 11.0, "endSec": 12.5, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Spreadsheets are over. This is how you plan now.", - "targetLengthSec": 13 - }, - { - "id": "V17-H02", - "base": "V17", - "hook": "I used to waste 2 hours. Now it's 20 seconds.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "TEXTPUNCH", "durationSec": 2.0, "props": { "text": "2 hours → 20 seconds", "variant": "split" } }, - { "type": "SCREENREC", "durationSec": 4.0, "props": { "assetKey": "screenrecs/by-games.mp4", "caption": "The whole flow" } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Planning a sports trip used to take hours", "startSec": 0.3, "endSec": 2.3, "emphasis": "normal" }, - { "text": "2 hours → 20 seconds", "startSec": 2.8, "endSec": 4.5, "emphasis": "highlight" }, - { "text": "Pick sports. Pick dates. Get a route.", "startSec": 5.0, "endSec": 7.5, "emphasis": "normal" }, - { "text": "That's literally it", "startSec": 8.0, "endSec": 9.5, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Two hours of Googling or twenty seconds. You pick.", - "targetLengthSec": 12 - }, - { - "id": "V06-H01", - "base": "V06", - "hook": "Plan a multi-game weekend in 3 taps.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.0 }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/date-range.mp4", "caption": "Tap 1: Dates" } }, - { "type": "TEXTPUNCH", "durationSec": 1.5, "props": { "text": "3 taps. Multiple games.", "variant": "slam" } }, - { "type": "SCREENREC", "durationSec": 3.0, "props": { "assetKey": "screenrecs/route-generated.mp4", "caption": "Tap 3: Route" } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Multi-game weekend?", "startSec": 0.3, "endSec": 1.8, "emphasis": "bold" }, - { "text": "Tap 1: Pick your dates", "startSec": 2.3, "endSec": 4.0, "emphasis": "normal" }, - { "text": "Tap 2: Pick your sports", "startSec": 4.3, "endSec": 5.5, "emphasis": "normal" }, - { "text": "Tap 3: Route generated", "startSec": 6.0, "endSec": 8.0, "emphasis": "highlight" }, - { "text": "That easy", "startSec": 8.5, "endSec": 10.0, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Three taps. Multi-game weekend. Planned.", - "targetLengthSec": 12 - }, - { - "id": "V08-H01", - "base": "V08", - "hook": "Already driving? Add games without chaos.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "SCREENREC", "durationSec": 4.0, "props": { "assetKey": "screenrecs/follow-team.mp4", "caption": "Add a game stop mid-drive" } }, - { "type": "MAP", "durationSec": 3.0, "props": { "caption": "Rerouted", "cities": [{ "name": "Start", "x": 30, "y": 40 }, { "name": "Game Stop", "x": 50, "y": 50 }, { "name": "Destination", "x": 70, "y": 40 }] } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Already on the road?", "startSec": 0.3, "endSec": 2.3, "emphasis": "bold" }, - { "text": "Add a game stop without the chaos", "startSec": 2.8, "endSec": 5.0, "emphasis": "normal" }, - { "text": "Route adjusts automatically", "startSec": 5.5, "endSec": 7.5, "emphasis": "highlight" }, - { "text": "Detour = more games", "startSec": 8.0, "endSec": 10.0, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Mid-drive game stop. No chaos.", - "targetLengthSec": 13 - }, - { - "id": "V05-LA-01", - "base": "V05", - "hook": "LA this weekend? Here's a REAL 2-game run.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "MAP", "durationSec": 3.5, "props": { "caption": "LA → Anaheim", "cities": [{ "name": "Dodger Stadium", "x": 40, "y": 45 }, { "name": "Angel Stadium", "x": 55, "y": 60 }] } }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/route-generated.mp4", "caption": "Full weekend itinerary" } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "LA this weekend?", "startSec": 0.3, "endSec": 2.0, "emphasis": "bold" }, - { "text": "Dodgers Friday → Angels Saturday", "startSec": 2.5, "endSec": 4.5, "emphasis": "normal" }, - { "text": "30 min drive between stadiums", "startSec": 5.0, "endSec": 7.0, "emphasis": "highlight" }, - { "text": "2-game weekend locked", "startSec": 7.5, "endSec": 9.5, "emphasis": "normal" }, - { "text": "SportsTime planned it all", "startSec": 10.0, "endSec": 11.5, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "LA two-game weekend. Planned in seconds.", - "targetLengthSec": 13 - }, - { - "id": "V05-NY-01", - "base": "V05", - "hook": "NYC this weekend? You can hit 2 games.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "MAP", "durationSec": 3.5, "props": { "caption": "NYC → Jersey", "cities": [{ "name": "Yankee Stadium", "x": 48, "y": 35 }, { "name": "MetLife Stadium", "x": 42, "y": 42 }] } }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/route-generated.mp4", "caption": "Weekend mapped out" } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "NYC this weekend?", "startSec": 0.3, "endSec": 2.0, "emphasis": "bold" }, - { "text": "Yankees Saturday → Giants Sunday", "startSec": 2.5, "endSec": 4.5, "emphasis": "normal" }, - { "text": "Both games. One weekend.", "startSec": 5.0, "endSec": 7.0, "emphasis": "highlight" }, - { "text": "Route optimized automatically", "startSec": 7.5, "endSec": 9.5, "emphasis": "normal" }, - { "text": "That's the move", "startSec": 10.0, "endSec": 11.5, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "NYC two-gamer. Hit both without the hassle.", - "targetLengthSec": 13 - }, - { - "id": "V05-TX-01", - "base": "V05", - "hook": "Texas road trip? Dallas → Houston + games.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "MAP", "durationSec": 3.5, "props": { "caption": "Texas Triangle", "cities": [{ "name": "Dallas", "x": 45, "y": 38 }, { "name": "Austin", "x": 42, "y": 58 }, { "name": "Houston", "x": 55, "y": 60 }] } }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/route-generated.mp4", "caption": "3 cities. 4 games." } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Texas road trip?", "startSec": 0.3, "endSec": 2.0, "emphasis": "bold" }, - { "text": "Dallas → Austin → Houston", "startSec": 2.5, "endSec": 4.5, "emphasis": "normal" }, - { "text": "4 games along the route", "startSec": 5.0, "endSec": 7.0, "emphasis": "highlight" }, - { "text": "Cowboys. Longhorns. Astros. Rockets.", "startSec": 7.5, "endSec": 9.5, "emphasis": "normal" }, - { "text": "All planned in one app", "startSec": 10.0, "endSec": 11.5, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Texas Triangle. Four games. One route.", - "targetLengthSec": 13 - }, - { - "id": "V05-CA-01", - "base": "V05", - "hook": "California weekend? SF → Sac → Bay games.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "MAP", "durationSec": 3.5, "props": { "caption": "NorCal Run", "cities": [{ "name": "San Francisco", "x": 20, "y": 42 }, { "name": "Sacramento", "x": 30, "y": 35 }, { "name": "Oakland", "x": 22, "y": 44 }] } }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/route-generated.mp4", "caption": "Bay Area weekend" } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "California this weekend?", "startSec": 0.3, "endSec": 2.0, "emphasis": "bold" }, - { "text": "SF → Sacramento → back to the Bay", "startSec": 2.5, "endSec": 4.5, "emphasis": "normal" }, - { "text": "Warriors. Kings. Giants.", "startSec": 5.0, "endSec": 7.0, "emphasis": "highlight" }, - { "text": "3 games in one weekend", "startSec": 7.5, "endSec": 9.5, "emphasis": "normal" }, - { "text": "Route mapped automatically", "startSec": 10.0, "endSec": 11.5, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "NorCal three-game run. SportsTime planned it.", - "targetLengthSec": 13 - }, - { - "id": "V08-LA-01", - "base": "V08", - "hook": "LA → San Diego drive? Add a game stop.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/follow-team.mp4", "caption": "Found a game on the way" } }, - { "type": "MAP", "durationSec": 3.5, "props": { "caption": "LA → Anaheim → San Diego", "cities": [{ "name": "LA", "x": 25, "y": 35 }, { "name": "Anaheim", "x": 35, "y": 48 }, { "name": "San Diego", "x": 30, "y": 70 }] } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Driving LA to San Diego?", "startSec": 0.3, "endSec": 2.3, "emphasis": "bold" }, - { "text": "There's a game on the way", "startSec": 2.8, "endSec": 4.8, "emphasis": "normal" }, - { "text": "Angels game in Anaheim = perfect pit stop", "startSec": 5.3, "endSec": 7.5, "emphasis": "highlight" }, - { "text": "Then Padres in SD", "startSec": 8.0, "endSec": 9.5, "emphasis": "normal" }, - { "text": "2 games. 1 drive.", "startSec": 10.0, "endSec": 11.5, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "LA to San Diego. Two games along the way.", - "targetLengthSec": 13 - }, - { - "id": "V04-H01", - "base": "V04", - "hook": "My friend: 4 stadiums. Me: 27.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "FLEX", "durationSec": 3.5, "props": { "stadiumCount": 27, "totalStadiums": 120, "caption": "And counting" } }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/tracker.mp4", "caption": "Track every stadium" } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "My friend: 4 stadiums", "startSec": 0.3, "endSec": 1.5, "emphasis": "normal" }, - { "text": "Me: 27 and counting", "startSec": 1.8, "endSec": 3.5, "emphasis": "highlight" }, - { "text": "Every stadium tracked", "startSec": 4.0, "endSec": 6.0, "emphasis": "normal" }, - { "text": "MLB. NFL. NBA. NHL.", "startSec": 6.5, "endSec": 8.0, "emphasis": "bold" }, - { "text": "What's your count?", "startSec": 8.5, "endSec": 10.0, "emphasis": "normal" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Four stadiums? That's cute.", - "targetLengthSec": 13 - }, - { - "id": "V20-H01", - "base": "V20", - "hook": "No tracking = no bucket list.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "FLEX", "durationSec": 3.5, "props": { "stadiumCount": 15, "totalStadiums": 120, "caption": "Start tracking" } }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/tracker.mp4", "caption": "Every visit logged" } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "You've been to how many stadiums?", "startSec": 0.3, "endSec": 2.0, "emphasis": "normal" }, - { "text": "But you're not tracking them?", "startSec": 2.3, "endSec": 4.0, "emphasis": "bold" }, - { "text": "Start your stadium bucket list", "startSec": 4.5, "endSec": 6.5, "emphasis": "highlight" }, - { "text": "Every visit. Every league.", "startSec": 7.0, "endSec": 9.0, "emphasis": "normal" }, - { "text": "How many can you hit?", "startSec": 9.5, "endSec": 11.0, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "If you're not tracking, it doesn't count.", - "targetLengthSec": 13 - }, - { - "id": "V14-H01", - "base": "V14", - "hook": "Trying to hit every stadium before 35.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "FLEX", "durationSec": 3.5, "props": { "stadiumCount": 42, "totalStadiums": 120, "caption": "42 down, 78 to go" } }, - { "type": "MAP", "durationSec": 3.5, "props": { "caption": "Next trip: Midwest", "cities": [{ "name": "Chicago", "x": 55, "y": 35 }, { "name": "Milwaukee", "x": 53, "y": 30 }, { "name": "Minneapolis", "x": 45, "y": 22 }, { "name": "Kansas City", "x": 42, "y": 45 }] } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Every stadium before 35", "startSec": 0.3, "endSec": 2.3, "emphasis": "bold" }, - { "text": "42 down. 78 to go.", "startSec": 2.8, "endSec": 4.5, "emphasis": "normal" }, - { "text": "Planning the next run", "startSec": 5.0, "endSec": 7.0, "emphasis": "highlight" }, - { "text": "Midwest loop: 4 new stadiums", "startSec": 7.5, "endSec": 9.5, "emphasis": "normal" }, - { "text": "The bucket list is real", "startSec": 10.0, "endSec": 11.5, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Every stadium before thirty-five. Clock's ticking.", - "targetLengthSec": 13 - }, - { - "id": "V04-H02", - "base": "V04", - "hook": "Drop your stadium count. I'll wait.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5, "props": { "emoji": "👀" } }, - { "type": "FLEX", "durationSec": 3.5, "props": { "stadiumCount": 31, "totalStadiums": 120, "caption": "What's yours?" } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Drop your stadium count", "startSec": 0.3, "endSec": 1.8, "emphasis": "bold" }, - { "text": "I'll wait 👀", "startSec": 2.0, "endSec": 3.5, "emphasis": "normal" }, - { "text": "Mine: 31 across 4 leagues", "startSec": 3.8, "endSec": 5.5, "emphasis": "highlight" }, - { "text": "Track yours", "startSec": 5.8, "endSec": 7.0, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Drop your count. I'll wait.", - "targetLengthSec": 12 - }, - { - "id": "V02-H01", - "base": "V02", - "hook": "If you've never done an away-game trip…", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/follow-team.mp4", "caption": "Follow your team on the road" } }, - { "type": "MAP", "durationSec": 3.5, "props": { "caption": "Away game route", "cities": [{ "name": "Home", "x": 35, "y": 40 }, { "name": "Away Game 1", "x": 55, "y": 35 }, { "name": "Away Game 2", "x": 70, "y": 42 }] } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Never done an away-game trip?", "startSec": 0.3, "endSec": 2.3, "emphasis": "bold" }, - { "text": "Follow your team on the road", "startSec": 2.8, "endSec": 4.8, "emphasis": "normal" }, - { "text": "SportsTime finds the games + builds the route", "startSec": 5.3, "endSec": 7.5, "emphasis": "highlight" }, - { "text": "New city. Your team. Road trip.", "startSec": 8.0, "endSec": 10.0, "emphasis": "normal" }, - { "text": "Start with one trip", "startSec": 10.5, "endSec": 11.5, "emphasis": "bold" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "If you've never done an away game trip, start here.", - "targetLengthSec": 13 - }, - { - "id": "V19-H01", - "base": "V19", - "hook": "Hot take: away games are the real fandom.", - "scenes": [ - { "type": "HOOK", "durationSec": 2.5 }, - { "type": "TEXTPUNCH", "durationSec": 2.0, "props": { "text": "Home games are easy mode.", "variant": "slam" } }, - { "type": "SCREENREC", "durationSec": 3.5, "props": { "assetKey": "screenrecs/follow-team.mp4", "caption": "Follow your team anywhere" } }, - { "type": "MAP", "durationSec": 3.0, "props": { "caption": "Away game road trip", "cities": [{ "name": "Your City", "x": 30, "y": 45 }, { "name": "Rival City", "x": 60, "y": 35 }, { "name": "Another Stop", "x": 75, "y": 50 }] } }, - { "type": "CTA", "durationSec": 2.0 } - ], - "captions": [ - { "text": "Hot take incoming 🔥", "startSec": 0.3, "endSec": 2.0, "emphasis": "bold" }, - { "text": "Home games are easy mode", "startSec": 2.5, "endSec": 4.3, "emphasis": "highlight" }, - { "text": "Real fans follow the team on the road", "startSec": 4.8, "endSec": 6.8, "emphasis": "normal" }, - { "text": "Plan the away game trip", "startSec": 7.3, "endSec": 9.0, "emphasis": "normal" }, - { "text": "Route + games + drive times", "startSec": 9.5, "endSec": 11.0, "emphasis": "bold" }, - { "text": "Prove you're a real one", "startSec": 11.5, "endSec": 13.0, "emphasis": "highlight" } - ], - "cta": "Search SportsTime on the App Store", - "vo": "Away games are the real fandom. Prove it.", - "targetLengthSec": 15 - } -] diff --git a/marketing-videos/src/engine/VideoFromConfig.tsx b/marketing-videos/src/engine/VideoFromConfig.tsx deleted file mode 100644 index 1a10873..0000000 --- a/marketing-videos/src/engine/VideoFromConfig.tsx +++ /dev/null @@ -1,180 +0,0 @@ -import React from "react"; -import { AbsoluteFill, useVideoConfig } from "remotion"; -import { TransitionSeries, linearTiming } from "@remotion/transitions"; -import { fade } from "@remotion/transitions/fade"; -import { slide } from "@remotion/transitions/slide"; - -import type { VideoConfig, SceneConfig } from "./types"; -import { - HookCard, - ChatScene, - ScreenRecScene, - MapScene, - PollScene, - FlexScene, - TextPunchScene, - CTAEndCard, - KineticCaption, -} from "./scenes"; - -type VideoFromConfigProps = { - config: VideoConfig; -}; - -/** - * Config-driven video renderer. - * - * Reads a VideoConfig and renders each scene in order using TransitionSeries. - * Kinetic captions overlay on top of all scenes. - */ -export const VideoFromConfig: React.FC = ({ config }) => { - const { fps } = useVideoConfig(); - const TRANSITION_FRAMES = 8; // Snappy transitions for TikTok pace - - const renderScene = (scene: SceneConfig, index: number) => { - const props = scene.props || {}; - - switch (scene.type) { - case "HOOK": - return ; - - case "CHAT": - return ( - - ); - - case "SCREENREC": - return ( - - ); - - case "MAP": - return ( - - ); - - case "POLL": - return ( - - ); - - case "FLEX": - return ( - - ); - - case "TEXTPUNCH": - return ( - - ); - - case "CTA": - return ( - - ); - - default: - return ( - - - Unknown scene: {scene.type} - - - ); - } - }; - - // Choose transition type based on scene pair - const getTransition = (fromType: SceneConfig["type"], toType: SceneConfig["type"]) => { - // Slide in for screen recordings (feels like opening an app) - if (toType === "SCREENREC") { - return slide({ direction: "from-right" }); - } - // Slide for map reveals - if (toType === "MAP") { - return slide({ direction: "from-bottom" }); - } - // Default: fade - return fade(); - }; - - const scenes = config.scenes; - const numTransitions = scenes.length - 1; - - return ( - - {/* Scene layer with transitions */} - - {scenes.map((scene, index) => { - const durationFrames = Math.round(scene.durationSec * fps); - const elements: React.ReactNode[] = []; - - elements.push( - - {renderScene(scene, index)} - - ); - - // Add transition between scenes (not after the last one) - if (index < numTransitions) { - const nextScene = scenes[index + 1]; - elements.push( - - ); - } - - return elements; - })} - - - {/* Caption overlay on top of everything */} - {config.captions.length > 0 && ( - - )} - - ); -}; diff --git a/marketing-videos/src/engine/index.ts b/marketing-videos/src/engine/index.ts deleted file mode 100644 index e2c7aa5..0000000 --- a/marketing-videos/src/engine/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { VideoFromConfig } from "./VideoFromConfig"; -export type { - VideoConfig, - SceneConfig, - SceneType, - CaptionLine, - Week1Configs, -} from "./types"; -export { ASSET_KEYS } from "./types"; diff --git a/marketing-videos/src/engine/scenes/CTAEndCard.tsx b/marketing-videos/src/engine/scenes/CTAEndCard.tsx deleted file mode 100644 index 40aa1dc..0000000 --- a/marketing-videos/src/engine/scenes/CTAEndCard.tsx +++ /dev/null @@ -1,273 +0,0 @@ -import React from "react"; -import { - AbsoluteFill, - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "../../components/shared/theme"; - -type CTAEndCardProps = { - /** CTA text line (should include "Search SportsTime") */ - ctaText?: string; - /** Optional tagline above CTA */ - tagline?: string; -}; - -export const CTAEndCard: React.FC = ({ - ctaText = "Search SportsTime on the App Store", - tagline, -}) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - // --- App icon animation (scale + bounce) --- - const iconSpring = spring({ - frame, - fps, - config: { damping: 15, stiffness: 100 }, - }); - - const iconScale = interpolate(iconSpring, [0, 1], [0.3, 1]); - const iconOpacity = interpolate(iconSpring, [0, 1], [0, 1]); - - // --- Wordmark fades in with the icon --- - const wordmarkOpacity = interpolate(iconSpring, [0, 1], [0, 1]); - - // --- Tagline animation (0.4s delay) --- - const taglineDelay = Math.round(0.4 * fps); - const taglineSpring = spring({ - frame: frame - taglineDelay, - fps, - config: theme.animation.snappy, - }); - const taglineOpacity = interpolate(taglineSpring, [0, 1], [0, 1]); - const taglineTranslateY = interpolate(taglineSpring, [0, 1], [20, 0]); - - // --- Search bar animation (0.5s delay) --- - const searchBarDelay = Math.round(0.5 * fps); - const searchBarSpring = spring({ - frame: frame - searchBarDelay, - fps, - config: theme.animation.snappy, - }); - const searchBarOpacity = interpolate(searchBarSpring, [0, 1], [0, 1]); - const searchBarTranslateY = interpolate(searchBarSpring, [0, 1], [30, 0]); - - // --- Pulse/glow on search bar border (breathing orange glow) --- - const pulseSpeed = 1.5; // seconds per cycle - const pulseCycle = (frame / fps) * (1 / pulseSpeed) * Math.PI * 2; - const pulseIntensity = (Math.sin(pulseCycle) + 1) / 2; // 0 to 1 - const glowAlpha = interpolate(pulseIntensity, [0, 1], [0.1, 0.5]); - const borderAlpha = interpolate(pulseIntensity, [0, 1], [0.2, 0.5]); - - // --- "Available on the App Store" text (0.7s delay) --- - const availableDelay = Math.round(0.7 * fps); - const availableSpring = spring({ - frame: frame - availableDelay, - fps, - config: theme.animation.smooth, - }); - const availableOpacity = interpolate(availableSpring, [0, 1], [0, 1]); - - return ( - - {/* Background gradient */} - - - {/* Center content: icon + wordmark + tagline */} - - {/* App icon */} -
- {/* Simple stadium SVG icon: ellipse base + arch + flag */} - - {/* Stadium base ellipse */} - - {/* Stadium arch */} - - {/* Flag pole */} - - {/* Flag */} - - -
- - {/* "SportsTime" wordmark */} -
- SportsTime -
- - {/* Tagline (optional) */} - {tagline && ( -
- {tagline} -
- )} -
- - {/* CTA search bar - positioned near bottom */} -
- {/* Search bar container */} -
- {/* Search icon (magnifying glass SVG) */} - - - - - - {/* CTA text */} - - {ctaText} - -
- - {/* "Available on the App Store" text below search bar */} -
- Available on the App Store -
-
-
- ); -}; diff --git a/marketing-videos/src/engine/scenes/ChatScene.tsx b/marketing-videos/src/engine/scenes/ChatScene.tsx deleted file mode 100644 index 1088a01..0000000 --- a/marketing-videos/src/engine/scenes/ChatScene.tsx +++ /dev/null @@ -1,423 +0,0 @@ -import React from "react"; -import { - AbsoluteFill, - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "../../components/shared/theme"; - -type ChatMessage = { - sender: string; - text: string; - isMe: boolean; - delaySec: number; -}; - -type ChatSceneProps = { - /** Group name shown in header */ - groupName?: string; - /** Number of people in group */ - groupSize?: number; - /** Messages to display */ - messages?: ChatMessage[]; - /** Overlay caption text shown at top */ - overlayText?: string; -}; - -const DEFAULT_MESSAGES: ChatMessage[] = [ - { sender: "Jake", text: "We should do a baseball trip", isMe: false, delaySec: 0.15 }, - { sender: "Mike", text: "I'm down", isMe: false, delaySec: 0.5 }, - { sender: "Sam", text: "Same", isMe: false, delaySec: 0.75 }, - { sender: "You", text: "Let's goooo", isMe: true, delaySec: 1.0 }, - { sender: "Jake", text: "When tho", isMe: false, delaySec: 1.4 }, - { sender: "Mike", text: "idk lol", isMe: false, delaySec: 1.7 }, - { sender: "Sam", text: "Maybe June?", isMe: false, delaySec: 2.0 }, - { sender: "Jake", text: "Or July", isMe: false, delaySec: 2.25 }, -]; - -const SENDER_COLORS = ["#34C759", "#FF9500", "#AF52DE", "#FF2D55"]; - -/** - * Assigns a stable color to each unique sender name (excluding "me" messages). - */ -const buildSenderColorMap = (messages: ChatMessage[]): Record => { - const map: Record = {}; - let colorIndex = 0; - for (const msg of messages) { - if (!msg.isMe && !(msg.sender in map)) { - map[msg.sender] = SENDER_COLORS[colorIndex % SENDER_COLORS.length]; - colorIndex++; - } - } - return map; -}; - -/** - * Typing indicator with 3 bouncing dots. - */ -const TypingIndicator: React.FC<{ frame: number; fps: number }> = ({ frame, fps }) => { - const dots = [0, 1, 2]; - // Each dot bounces on a ~0.6s cycle, staggered by ~0.15s - const cycleDuration = 0.6 * fps; - - return ( -
-
- {dots.map((i) => { - const stagger = i * 0.15 * fps; - const cycleFrame = (frame + stagger) % cycleDuration; - const bounceProgress = Math.sin((cycleFrame / cycleDuration) * Math.PI); - const translateY = interpolate(bounceProgress, [0, 1], [0, -8]); - - return ( -
- ); - })} -
-
- ); -}; - -export const ChatScene: React.FC = ({ - groupName = "The Boys", - groupSize = 4, - messages = DEFAULT_MESSAGES, - overlayText, -}) => { - const frame = useCurrentFrame(); - const { fps, durationInFrames } = useVideoConfig(); - - const senderColorMap = buildSenderColorMap(messages); - - // Subtle zoom-in over the full scene duration - const chatZoom = interpolate(frame, [0, durationInFrames], [1.0, 1.04], { - extrapolateRight: "clamp", - }); - - // Determine when the last message appears to show typing indicator after - const lastMessageDelaySec = messages.length > 0 - ? Math.max(...messages.map((m) => m.delaySec)) - : 0; - const typingStartFrame = (lastMessageDelaySec + 0.4) * fps; - - const typingProgress = spring({ - frame: frame - typingStartFrame, - fps, - config: { damping: 14, stiffness: 200 }, - }); - const typingScale = interpolate(typingProgress, [0, 1], [0.3, 1]); - const typingOpacity = interpolate(typingProgress, [0, 1], [0, 1]); - - // Overlay text animation (springs in at 0.3s) - const overlayDelay = 0.3 * fps; - const overlayProgress = spring({ - frame: frame - overlayDelay, - fps, - config: { damping: 14, stiffness: 180 }, - }); - const overlayOpacity = interpolate( - frame - overlayDelay, - [0, 0.2 * fps], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" }, - ); - const overlayScale = interpolate(overlayProgress, [0, 1], [0.85, 1]); - - return ( - - {/* Zoomable chat container */} -
- {/* Status bar */} -
- - 9:41 - -
- {/* Signal bars */} -
- {[6, 8, 10, 12].map((h, i) => ( -
- ))} -
- {/* Battery icon */} -
-
-
-
-
-
- - {/* Chat header */} -
- {/* Group avatar with gradient */} -
- - {groupSize} - -
-
-
- {groupName} -
-
- {groupSize} people -
-
-
- - {/* Messages */} -
- {messages.map((msg, index) => { - const msgDelayFrames = msg.delaySec * fps; - const msgProgress = spring({ - frame: frame - msgDelayFrames, - fps, - config: { damping: 14, stiffness: 200 }, - }); - const msgScale = interpolate(msgProgress, [0, 1], [0.3, 1]); - const msgOpacity = interpolate(msgProgress, [0, 1], [0, 1]); - - if (frame < msgDelayFrames) return null; - - const senderColor = msg.isMe ? "#007AFF" : (senderColorMap[msg.sender] || SENDER_COLORS[0]); - - return ( -
- {/* Sender name (only for non-"me" messages) */} - {!msg.isMe && ( - - {msg.sender} - - )} - {/* Message bubble */} -
- - {msg.text} - -
-
- ); - })} - - {/* Typing indicator (appears after last message) */} - {frame >= typingStartFrame && ( -
- -
- )} -
-
- - {/* Overlay text pill badge */} - {overlayText && ( -
-
- - {overlayText} - -
-
- )} - - ); -}; diff --git a/marketing-videos/src/engine/scenes/FlexScene.tsx b/marketing-videos/src/engine/scenes/FlexScene.tsx deleted file mode 100644 index 3ef1f8e..0000000 --- a/marketing-videos/src/engine/scenes/FlexScene.tsx +++ /dev/null @@ -1,346 +0,0 @@ -import React from "react"; -import { - AbsoluteFill, - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "../../components/shared/theme"; -import { GradientBackground } from "../../components/shared/Background"; - -type FlexSceneProps = { - /** Number of stadiums visited */ - stadiumCount?: number; - /** Total stadiums possible */ - totalStadiums?: number; - /** Caption text */ - caption?: string; - /** League labels to show */ - leagues?: string[]; -}; - -export const FlexScene: React.FC = ({ - stadiumCount = 27, - totalStadiums = 120, - caption, - leagues = ["MLB", "NFL", "NBA", "NHL"], -}) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - // --- Stadium icon dots (arc above counter) --- - const totalDots = 8; - const visitedDots = Math.round( - (stadiumCount / totalStadiums) * totalDots - ); - - const dotsAppearFrame = Math.round(0.2 * fps); - const dotsOpacity = interpolate( - frame, - [dotsAppearFrame, dotsAppearFrame + Math.round(0.3 * fps)], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - // --- Counter animation --- - // Count up over ~1.5s - const countDuration = Math.round(1.5 * fps); - const rawCount = interpolate(frame, [0, countDuration], [0, stadiumCount], { - extrapolateLeft: "clamp", - extrapolateRight: "clamp", - }); - const displayCount = Math.round(rawCount); - - // Counter scale spring - const counterScaleProgress = spring({ - frame, - fps, - config: theme.animation.bouncy, - }); - const counterScale = interpolate( - counterScaleProgress, - [0, 1], - [0.5, 1] - ); - - // --- Progress bar --- - // Starts animating after counter reaches target - const progressBarDelay = countDuration + Math.round(0.1 * fps); - const progressBarProgress = spring({ - frame: frame - progressBarDelay, - fps, - config: theme.animation.smooth, - }); - const progressBarWidth = interpolate( - progressBarProgress, - [0, 1], - [0, (stadiumCount / totalStadiums) * 100] - ); - - // --- League badges --- - // Spring in staggered, starting 0.3s after progress bar delay - const badgesBaseDelay = progressBarDelay + Math.round(0.3 * fps); - const badgeStaggerFrames = Math.round(0.1 * fps); - - // --- Caption animation --- - const captionDelay = Math.round(0.15 * fps); - const captionProgress = spring({ - frame: frame - captionDelay, - fps, - config: theme.animation.smooth, - }); - const captionOpacity = interpolate( - frame - captionDelay, - [0, Math.round(fps * 0.25)], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - const captionTranslateY = interpolate(captionProgress, [0, 1], [-30, 0]); - - return ( - - {/* Background */} - - - {/* Subtle gold radial glow behind counter */} - -
- - - {/* Caption badge at top */} - {caption && ( - -
- - {caption} - -
-
- )} - - {/* Main content */} - -
- {/* Stadium icon dots arc */} -
- {Array.from({ length: totalDots }).map((_, i) => { - // Arrange in a subtle arc - const angle = - Math.PI + ((i / (totalDots - 1)) * Math.PI); - const arcWidth = 180; - const arcHeight = 30; - const cx = 200 + Math.cos(angle) * arcWidth; - const cy = 50 + Math.sin(angle) * arcHeight; - const isVisited = i < visitedDots; - - return ( -
- ); - })} -
- - {/* Large counter number */} -
- - {displayCount} - -
- - {/* "/ totalStadiums stadiums" subtitle */} - - / {totalStadiums} stadiums - - - {/* Progress bar */} -
-
-
- - {/* League badges row */} -
- {leagues.map((league, index) => { - const badgeDelay = badgesBaseDelay + index * badgeStaggerFrames; - const badgeProgress = spring({ - frame: frame - badgeDelay, - fps, - config: theme.animation.snappy, - }); - const badgeScale = interpolate( - badgeProgress, - [0, 1], - [0.3, 1] - ); - const badgeOpacity = interpolate( - badgeProgress, - [0, 1], - [0, 1] - ); - - return ( -
- - {league} - -
- ); - })} -
-
- - - ); -}; diff --git a/marketing-videos/src/engine/scenes/HookCard.tsx b/marketing-videos/src/engine/scenes/HookCard.tsx deleted file mode 100644 index 9a0fce6..0000000 --- a/marketing-videos/src/engine/scenes/HookCard.tsx +++ /dev/null @@ -1,180 +0,0 @@ -import React from "react"; -import { - AbsoluteFill, - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "../../components/shared/theme"; -import { GradientBackground } from "../../components/shared/Background"; - -type HookCardProps = { - hookText: string; - /** Optional emoji shown above the hook text */ - emoji?: string; -}; - -export const HookCard: React.FC = ({ hookText, emoji }) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - const words = hookText.split(/\s+/); - const staggerFrames = Math.round(0.06 * fps); - - // Calculate when the last word finishes appearing (for the underline timing) - const lastWordStartFrame = (words.length - 1) * staggerFrames; - - // Emoji spring - appears at frame 3 - const emojiProgress = spring({ - frame: frame - 3, - fps, - config: theme.animation.bouncy, - }); - - const emojiScale = interpolate(emojiProgress, [0, 1], [0.3, 2]); - const emojiOpacity = interpolate(emojiProgress, [0, 1], [0, 1]); - - // Underline wipe - starts after all words have appeared, with a small buffer - const underlineDelay = lastWordStartFrame + Math.round(fps * 0.3); - const underlineProgress = spring({ - frame: frame - underlineDelay, - fps, - config: theme.animation.snappy, - }); - const underlineScaleX = interpolate(underlineProgress, [0, 1], [0, 1]); - - return ( - - {/* Dark gradient background */} - - - {/* Radial orange glow behind text */} - -
- - - {/* Main content container */} - -
- {/* Optional emoji */} - {emoji && ( -
- {emoji} -
- )} - - {/* Hook text with word-by-word reveal */} -
- {words.map((word, index) => { - const wordDelay = index * staggerFrames; - - const wordProgress = spring({ - frame: frame - wordDelay, - fps, - config: theme.animation.snappy, - }); - - const wordOpacity = interpolate( - frame - wordDelay, - [0, Math.round(fps * 0.15)], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - const wordScale = interpolate( - wordProgress, - [0, 1], - [0.7, 1.0] - ); - - const wordTranslateY = interpolate( - wordProgress, - [0, 1], - [40, 0] - ); - - return ( - - {word} - - ); - })} -
- - {/* Orange underline wipe */} -
0 ? 1 : 0, - }} - /> -
- - - ); -}; diff --git a/marketing-videos/src/engine/scenes/KineticCaption.tsx b/marketing-videos/src/engine/scenes/KineticCaption.tsx deleted file mode 100644 index ebf5b5e..0000000 --- a/marketing-videos/src/engine/scenes/KineticCaption.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React from "react"; -import { - AbsoluteFill, - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "../../components/shared/theme"; -import type { CaptionLine } from "../types"; - -type KineticCaptionProps = { - captions: CaptionLine[]; -}; - -/** - * Kinetic caption overlay that renders on top of all scenes. - * Captions appear/disappear based on their startSec/endSec timing. - * Each caption pops in with a spring and has bold/highlight styling options. - */ -export const KineticCaption: React.FC = ({ captions }) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - // Find the currently active caption - const currentSec = frame / fps; - const activeCaptions = captions.filter( - (c) => currentSec >= c.startSec && currentSec < c.endSec - ); - - if (activeCaptions.length === 0) return null; - - const caption = activeCaptions[activeCaptions.length - 1]; - const captionStartFrame = caption.startSec * fps; - const captionEndFrame = caption.endSec * fps; - const localFrame = frame - captionStartFrame; - - // Entrance spring - const enterProgress = spring({ - frame: localFrame, - fps, - config: { damping: 14, stiffness: 200 }, - }); - - const scale = interpolate(enterProgress, [0, 1], [0.7, 1]); - const enterOpacity = interpolate(enterProgress, [0, 1], [0, 1]); - - // Exit fade (last 5 frames before endSec) - const exitOpacity = interpolate( - frame, - [captionEndFrame - 5, captionEndFrame], - [1, 0], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - const opacity = Math.min(enterOpacity, exitOpacity); - - const isHighlight = caption.emphasis === "highlight"; - const isBold = caption.emphasis === "bold" || isHighlight; - - return ( - -
- - {caption.text} - -
-
- ); -}; diff --git a/marketing-videos/src/engine/scenes/MapScene.tsx b/marketing-videos/src/engine/scenes/MapScene.tsx deleted file mode 100644 index b616569..0000000 --- a/marketing-videos/src/engine/scenes/MapScene.tsx +++ /dev/null @@ -1,402 +0,0 @@ -import React from "react"; -import { - AbsoluteFill, - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "../../components/shared/theme"; - -type MapCity = { - name: string; - x: number; // percentage position 0-100 - y: number; // percentage position 0-100 -}; - -type MapSceneProps = { - /** Cities to show on the map */ - cities?: MapCity[]; - /** Caption text at top */ - caption?: string; - /** Route line color override */ - routeColor?: string; -}; - -const DEFAULT_CITIES: MapCity[] = [ - { name: "Dallas", x: 45, y: 55 }, - { name: "Houston", x: 50, y: 70 }, - { name: "San Antonio", x: 40, y: 72 }, -]; - -export const MapScene: React.FC = ({ - cities = DEFAULT_CITIES, - caption, - routeColor = theme.colors.mapLine, -}) => { - const frame = useCurrentFrame(); - const { fps, width, height } = useVideoConfig(); - - // Map area: center 80% of screen - const mapLeft = width * 0.1; - const mapTop = height * 0.1; - const mapWidth = width * 0.8; - const mapHeight = height * 0.8; - - // Convert percentage coords to pixel coords within the map area - const points = cities.map((city) => ({ - name: city.name, - px: mapLeft + (city.x / 100) * mapWidth, - py: mapTop + (city.y / 100) * mapHeight, - })); - - // Timing: each segment takes ~0.5s to draw, staggered - const segmentDurationFrames = Math.round(0.5 * fps); - - // Calculate total path length and per-segment lengths - const segmentLengths: number[] = []; - let totalPathLength = 0; - for (let i = 1; i < points.length; i++) { - const dx = points[i].px - points[i - 1].px; - const dy = points[i].py - points[i - 1].py; - const len = Math.sqrt(dx * dx + dy * dy); - segmentLengths.push(len); - totalPathLength += len; - } - - // Build the SVG path d attribute (straight lines between cities) - const pathD = points - .map((p, i) => `${i === 0 ? "M" : "L"} ${p.px} ${p.py}`) - .join(" "); - - // Calculate cumulative lengths for each segment start - const cumulativeLengths: number[] = [0]; - for (let i = 0; i < segmentLengths.length; i++) { - cumulativeLengths.push(cumulativeLengths[i] + segmentLengths[i]); - } - - // Route draw animation: each segment draws over segmentDurationFrames, staggered - const getSegmentDrawProgress = (segmentIndex: number): number => { - const segmentStartFrame = segmentIndex * segmentDurationFrames; - return interpolate( - frame, - [segmentStartFrame, segmentStartFrame + segmentDurationFrames], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - }; - - // Calculate overall drawn length for strokeDashoffset - let drawnLength = 0; - for (let i = 0; i < segmentLengths.length; i++) { - const segProgress = getSegmentDrawProgress(i); - drawnLength += segmentLengths[i] * segProgress; - } - - const strokeDashoffset = totalPathLength - drawnLength; - - // Determine when each city's route segment completes (for marker appearance) - // City 0 appears when route starts drawing (frame ~0) - // City i appears when segment i-1 finishes drawing - const getCityAppearFrame = (cityIndex: number): number => { - if (cityIndex === 0) return 0; - return cityIndex * segmentDurationFrames; - }; - - // Traveling dot: appears after entire route is drawn, moves along path - const routeCompleteFrame = - (points.length - 1) * segmentDurationFrames; - const travelDotDelay = routeCompleteFrame + Math.round(fps * 0.3); - const travelDotDuration = Math.round(fps * 1.5); - - const travelDotProgress = interpolate( - frame, - [travelDotDelay, travelDotDelay + travelDotDuration], - [0, 1], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - // Calculate traveling dot position along the path - const travelDistance = travelDotProgress * totalPathLength; - let travelDotX = points[0].px; - let travelDotY = points[0].py; - - if (travelDotProgress > 0) { - let accumulated = 0; - for (let i = 0; i < segmentLengths.length; i++) { - if (accumulated + segmentLengths[i] >= travelDistance) { - const segFraction = - (travelDistance - accumulated) / segmentLengths[i]; - travelDotX = - points[i].px + (points[i + 1].px - points[i].px) * segFraction; - travelDotY = - points[i].py + (points[i + 1].py - points[i].py) * segFraction; - break; - } - accumulated += segmentLengths[i]; - } - } - - const travelDotOpacity = interpolate( - travelDotProgress, - [0, 0.02, 0.98, 1], - [0, 1, 1, 0], - { extrapolateLeft: "clamp", extrapolateRight: "clamp" } - ); - - // Caption animation - const captionProgress = caption - ? spring({ - frame: frame - 5, - fps, - config: theme.animation.snappy, - }) - : 0; - const captionOpacity = interpolate(captionProgress, [0, 1], [0, 1]); - const captionTranslateY = interpolate(captionProgress, [0, 1], [-30, 0]); - - // Pulse animation for markers (repeating) - const pulseFrame = frame % Math.round(fps * 1.5); - const pulseScale = interpolate( - pulseFrame, - [0, Math.round(fps * 1.5)], - [1, 2.5], - { extrapolateRight: "clamp" } - ); - const pulseOpacity = interpolate( - pulseFrame, - [0, Math.round(fps * 1.5)], - [0.6, 0], - { extrapolateRight: "clamp" } - ); - - return ( - - {/* Subtle dark grid pattern */} - - - {/* SVG map layer */} - - - - - - - - - - - - {/* Route glow (blurred duplicate path) */} - - - {/* Route line (dashed, animated) */} - - - {/* City markers */} - {points.map((point, index) => { - const appearFrame = getCityAppearFrame(index); - - const markerSpring = spring({ - frame: frame - appearFrame, - fps, - config: theme.animation.bouncy, - }); - - const markerScale = interpolate( - markerSpring, - [0, 1], - [0, 1] - ); - - const markerOpacity = interpolate( - markerSpring, - [0, 0.3], - [0, 1], - { extrapolateRight: "clamp" } - ); - - // Label appears slightly after the marker - const labelDelay = appearFrame + Math.round(fps * 0.15); - const labelSpring = spring({ - frame: frame - labelDelay, - fps, - config: theme.animation.snappy, - }); - - const labelOpacity = interpolate( - labelSpring, - [0, 1], - [0, 1] - ); - const labelTranslateY = interpolate( - labelSpring, - [0, 1], - [10, 0] - ); - - // Only show pulse after marker is fully visible - const showPulse = markerSpring > 0.95; - - return ( - - {/* Pulse ring (repeating, expanding, fading) */} - {showPulse && ( - - )} - - {/* Outer ring */} - - - {/* Inner dot */} - - - {/* City name label */} - - {point.name} - - - ); - })} - - {/* Traveling dot along the route */} - {travelDotProgress > 0 && travelDotProgress < 1 && ( - <> - {/* Glow behind traveling dot */} - - {/* Traveling dot */} - - - )} - - - {/* Caption pill badge at top */} - {caption && ( -
-
- - {caption} - -
-
- )} -
- ); -}; diff --git a/marketing-videos/src/engine/scenes/PollScene.tsx b/marketing-videos/src/engine/scenes/PollScene.tsx deleted file mode 100644 index 9d1802f..0000000 --- a/marketing-videos/src/engine/scenes/PollScene.tsx +++ /dev/null @@ -1,408 +0,0 @@ -import React from "react"; -import { - AbsoluteFill, - useCurrentFrame, - useVideoConfig, - spring, - interpolate, -} from "remotion"; -import { theme } from "../../components/shared/theme"; -import { GradientBackground } from "../../components/shared/Background"; - -type PollOption = { - label: string; - votes: number; - emoji?: string; -}; - -type PollSceneProps = { - /** Poll question */ - question?: string; - /** Poll options with vote counts */ - options?: PollOption[]; - /** Caption text at top */ - caption?: string; -}; - -const DEFAULT_QUESTION = "Which trip are we doing?"; -const DEFAULT_OPTIONS: PollOption[] = [ - { label: "Dallas \u2192 Houston", votes: 3, emoji: "\uD83E\uDD20" }, - { label: "NYC \u2192 Boston", votes: 2, emoji: "\uD83D\uDDFD" }, - { label: "LA \u2192 San Diego", votes: 1, emoji: "\uD83C\uDF34" }, -]; - -const VOTER_NAMES = ["Jake", "Mike", "Sam", "Alex", "Chris"]; - -const FILL_COLORS = [ - theme.colors.accent, - "#FF8F5E", - "#FFB088", -]; - -const getFillColor = (index: number): string => { - if (index < FILL_COLORS.length) return FILL_COLORS[index]; - return FILL_COLORS[FILL_COLORS.length - 1]; -}; - -export const PollScene: React.FC = ({ - question = DEFAULT_QUESTION, - options = DEFAULT_OPTIONS, - caption, -}) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); - - const maxVotes = Math.max(...options.map((o) => o.votes)); - - // Card entrance - slides up and fades in - const cardEntrance = spring({ - frame, - fps, - config: theme.animation.snappy, - }); - const cardTranslateY = interpolate(cardEntrance, [0, 1], [80, 0]); - const cardOpacity = interpolate(cardEntrance, [0, 1], [0, 1]); - - // Caption entrance - const captionEntrance = spring({ - frame: frame - 3, - fps, - config: theme.animation.snappy, - }); - const captionOpacity = interpolate(captionEntrance, [0, 1], [0, 1]); - const captionTranslateY = interpolate(captionEntrance, [0, 1], [-20, 0]); - - // Question text entrance - const questionEntrance = spring({ - frame: frame - Math.round(fps * 0.15), - fps, - config: theme.animation.snappy, - }); - const questionOpacity = interpolate(questionEntrance, [0, 1], [0, 1]); - - // Bar fill delay base (after card is in) - const barStartFrame = Math.round(fps * 0.4); - - // Calculate when all bars are done filling for the "Poll sent" badge - const lastBarStartFrame = barStartFrame + (options.length - 1) * Math.round(fps * 0.2); - const barFillDuration = Math.round(fps * 0.5); - const allBarsDoneFrame = lastBarStartFrame + barFillDuration + Math.round(fps * 0.3); - - // "Poll sent" badge - const pollSentEntrance = spring({ - frame: frame - allBarsDoneFrame, - fps, - config: theme.animation.snappy, - }); - const pollSentOpacity = interpolate(pollSentEntrance, [0, 1], [0, 1]); - const pollSentScale = interpolate(pollSentEntrance, [0, 1], [0.5, 1]); - - return ( - - - - {/* Caption at top */} - {caption && ( -
-
- {caption} -
-
- )} - - {/* Poll card centered vertically */} - -
- {/* Question */} -
- {question} -
- - {/* Options */} -
- {options.map((option, index) => { - const staggerDelay = barStartFrame + index * Math.round(fps * 0.2); - - const fillProgress = spring({ - frame: frame - staggerDelay, - fps, - config: { damping: 30, stiffness: 120 }, - }); - - const fillWidth = interpolate( - fillProgress, - [0, 1], - [0, (option.votes / maxVotes) * 100] - ); - - // Vote count fades in after bar fills - const voteCountDelay = staggerDelay + Math.round(fps * 0.3); - const voteCountEntrance = spring({ - frame: frame - voteCountDelay, - fps, - config: theme.animation.snappy, - }); - const voteCountOpacity = interpolate( - voteCountEntrance, - [0, 1], - [0, 1] - ); - - const isWinner = option.votes === maxVotes; - const fillColor = getFillColor(index); - - return ( -
0.8 - ? `0 0 24px ${fillColor}40` - : "none", - }} - > - {/* Fill bar */} -
- - {/* Label and emoji */} -
-
- {option.emoji && ( - {option.emoji} - )} - - {option.label} - -
- - {/* Vote count */} - - {option.votes} {option.votes === 1 ? "vote" : "votes"} - -
-
- ); - })} -
-
- - {/* "Poll sent" badge below the card */} -
-
- {"\u2713"} - - Poll sent - -
-
- - - {/* Vote notification pills - bottom right */} -
- {VOTER_NAMES.map((name, index) => { - const notifStartFrame = - barStartFrame + index * Math.round(fps * 0.3); - const notifEndFrame = notifStartFrame + Math.round(fps * 1.0); - - const enterProgress = spring({ - frame: frame - notifStartFrame, - fps, - config: theme.animation.snappy, - }); - - const exitProgress = spring({ - frame: frame - notifEndFrame, - fps, - config: theme.animation.smooth, - }); - - const notifOpacity = interpolate( - enterProgress, - [0, 1], - [0, 1] - ) * interpolate(exitProgress, [0, 1], [1, 0]); - - const notifTranslateX = interpolate( - enterProgress, - [0, 1], - [60, 0] - ); - - const notifScale = interpolate(enterProgress, [0, 1], [0.7, 1]); - - if (notifOpacity <= 0.01) return null; - - return ( -
- {name} voted! -
- ); - })} -
- - ); -}; diff --git a/marketing-videos/src/engine/scenes/ScreenRecScene.tsx b/marketing-videos/src/engine/scenes/ScreenRecScene.tsx deleted file mode 100644 index 6fb824d..0000000 --- a/marketing-videos/src/engine/scenes/ScreenRecScene.tsx +++ /dev/null @@ -1,318 +0,0 @@ -import React, { useState } from "react"; -import { - AbsoluteFill, - useCurrentFrame, - useVideoConfig, - spring, - interpolate, - Video, - staticFile, -} from "remotion"; -import { theme } from "../../components/shared/theme"; -import { GradientBackground } from "../../components/shared/Background"; - -type ScreenRecSceneProps = { - /** Asset key for the screen recording, e.g. "screenrecs/date_range.mp4" */ - assetKey?: string; - /** Caption text overlay at top */ - caption?: string; - /** Whether to show the phone device frame */ - showFrame?: boolean; - /** Scale of the phone (default 0.85) */ - phoneScale?: number; - /** Optional start time offset in seconds for the video */ - videoStartSec?: number; -}; - -const Placeholder: React.FC = () => ( -
- {/* Play icon triangle */} -
- - Screen Recording - -
-); - -const ScreenVideo: React.FC<{ - assetKey: string; - startFromFrame: number; -}> = ({ assetKey, startFromFrame }) => { - const [hasError, setHasError] = useState(false); - - if (hasError) { - return ; - } - - try { - const src = staticFile(assetKey); - return ( -