Unfollow tool for Bluesky

merge newlook

+1339 -4
package-lock.json
···
"solid-js": "^1.8.11"
},
"devDependencies": {
+
"@tailwindcss/forms": "^0.5.7",
+
"autoprefixer": "^10.4.19",
+
"postcss": "^8.4.39",
"solid-devtools": "^0.29.2",
+
"tailwindcss": "^3.4.6",
"typescript": "^5.3.3",
"vite": "^5.0.11",
"vite-plugin-solid": "^2.8.2"
+
}
+
},
+
"node_modules/@alloc/quick-lru": {
+
"version": "5.2.0",
+
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+
"dev": true,
+
"engines": {
+
"node": ">=10"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@ampproject/remapping": {
···
"node": ">=12"
}
},
+
"node_modules/@isaacs/cliui": {
+
"version": "8.0.2",
+
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+
"dev": true,
+
"dependencies": {
+
"string-width": "^5.1.2",
+
"string-width-cjs": "npm:string-width@^4.2.0",
+
"strip-ansi": "^7.0.1",
+
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+
"wrap-ansi": "^8.1.0",
+
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+
},
+
"engines": {
+
"node": ">=12"
+
}
+
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
···
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+
"node_modules/@nodelib/fs.scandir": {
+
"version": "2.1.5",
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+
"dev": true,
+
"dependencies": {
+
"@nodelib/fs.stat": "2.0.5",
+
"run-parallel": "^1.1.9"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/@nodelib/fs.stat": {
+
"version": "2.0.5",
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+
"dev": true,
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/@nodelib/fs.walk": {
+
"version": "1.2.8",
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+
"dev": true,
+
"dependencies": {
+
"@nodelib/fs.scandir": "2.1.5",
+
"fastq": "^1.6.0"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
"node_modules/@nothing-but/utils": {
"version": "0.12.1",
"resolved": "https://registry.npmjs.org/@nothing-but/utils/-/utils-0.12.1.tgz",
"integrity": "sha512-1qZU1Q5El0IjE7JT/ucvJNzdr2hL3W8Rm27xNf1p6gb3Nw8pGnZmxp6/GEW9h+I1k1cICxXNq25hBwknTQ7yhg==",
"dev": true
+
},
+
"node_modules/@pkgjs/parseargs": {
+
"version": "0.11.0",
+
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+
"dev": true,
+
"optional": true,
+
"engines": {
+
"node": ">=14"
+
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.18.0",
···
"solid-js": "^1.6.12"
},
+
"node_modules/@tailwindcss/forms": {
+
"version": "0.5.7",
+
"resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz",
+
"integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==",
+
"dev": true,
+
"dependencies": {
+
"mini-svg-data-uri": "^1.2.3"
+
},
+
"peerDependencies": {
+
"tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
+
}
+
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
···
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
},
+
"node_modules/ansi-regex": {
+
"version": "6.0.1",
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+
"dev": true,
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
+
}
+
},
"node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
···
"node": ">=4"
},
+
"node_modules/any-promise": {
+
"version": "1.3.0",
+
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+
"dev": true
+
},
+
"node_modules/anymatch": {
+
"version": "3.1.3",
+
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+
"dev": true,
+
"dependencies": {
+
"normalize-path": "^3.0.0",
+
"picomatch": "^2.0.4"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/arg": {
+
"version": "5.0.2",
+
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+
"dev": true
+
},
+
"node_modules/autoprefixer": {
+
"version": "10.4.19",
+
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
+
"integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
+
"dev": true,
+
"funding": [
+
{
+
"type": "opencollective",
+
"url": "https://opencollective.com/postcss/"
+
},
+
{
+
"type": "tidelift",
+
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
+
},
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/ai"
+
}
+
],
+
"dependencies": {
+
"browserslist": "^4.23.0",
+
"caniuse-lite": "^1.0.30001599",
+
"fraction.js": "^4.3.7",
+
"normalize-range": "^0.1.2",
+
"picocolors": "^1.0.0",
+
"postcss-value-parser": "^4.2.0"
+
},
+
"bin": {
+
"autoprefixer": "bin/autoprefixer"
+
},
+
"engines": {
+
"node": "^10 || ^12 || >=14"
+
},
+
"peerDependencies": {
+
"postcss": "^8.1.0"
+
}
+
},
"node_modules/babel-plugin-jsx-dom-expressions": {
"version": "0.37.21",
"resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.37.21.tgz",
···
"@babel/core": "^7.0.0"
},
+
"node_modules/balanced-match": {
+
"version": "1.0.2",
+
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+
"dev": true
+
},
+
"node_modules/binary-extensions": {
+
"version": "2.3.0",
+
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/brace-expansion": {
+
"version": "2.0.1",
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+
"dev": true,
+
"dependencies": {
+
"balanced-match": "^1.0.0"
+
}
+
},
+
"node_modules/braces": {
+
"version": "3.0.3",
+
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+
"dev": true,
+
"dependencies": {
+
"fill-range": "^7.1.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
"node_modules/browserslist": {
"version": "4.23.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
···
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
},
+
"node_modules/camelcase-css": {
+
"version": "2.0.1",
+
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+
"dev": true,
+
"engines": {
+
"node": ">= 6"
+
}
+
},
"node_modules/caniuse-lite": {
"version": "1.0.30001623",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001623.tgz",
···
"node": ">=4"
},
+
"node_modules/chokidar": {
+
"version": "3.6.0",
+
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+
"dev": true,
+
"dependencies": {
+
"anymatch": "~3.1.2",
+
"braces": "~3.0.2",
+
"glob-parent": "~5.1.2",
+
"is-binary-path": "~2.1.0",
+
"is-glob": "~4.0.1",
+
"normalize-path": "~3.0.0",
+
"readdirp": "~3.6.0"
+
},
+
"engines": {
+
"node": ">= 8.10.0"
+
},
+
"funding": {
+
"url": "https://paulmillr.com/funding/"
+
},
+
"optionalDependencies": {
+
"fsevents": "~2.3.2"
+
}
+
},
+
"node_modules/chokidar/node_modules/glob-parent": {
+
"version": "5.1.2",
+
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+
"dev": true,
+
"dependencies": {
+
"is-glob": "^4.0.1"
+
},
+
"engines": {
+
"node": ">= 6"
+
}
+
},
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
···
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true
},
+
"node_modules/commander": {
+
"version": "4.1.1",
+
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+
"dev": true,
+
"engines": {
+
"node": ">= 6"
+
}
+
},
"node_modules/convert-source-map": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
},
+
"node_modules/cross-spawn": {
+
"version": "7.0.3",
+
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+
"dev": true,
+
"dependencies": {
+
"path-key": "^3.1.0",
+
"shebang-command": "^2.0.0",
+
"which": "^2.0.1"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"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==",
+
"dev": true,
+
"bin": {
+
"cssesc": "bin/cssesc"
+
},
+
"engines": {
+
"node": ">=4"
+
}
+
},
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
···
},
+
"node_modules/didyoumean": {
+
"version": "1.2.2",
+
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+
"dev": true
+
},
+
"node_modules/dlv": {
+
"version": "1.1.3",
+
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+
"dev": true
+
},
+
"node_modules/eastasianwidth": {
+
"version": "0.2.0",
+
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+
"dev": true
+
},
"node_modules/electron-to-chromium": {
"version": "1.4.783",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.783.tgz",
"integrity": "sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ==",
+
"dev": true
+
},
+
"node_modules/emoji-regex": {
+
"version": "9.2.2",
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"dev": true
},
"node_modules/esbuild": {
···
"node": ">=0.8.0"
},
+
"node_modules/fast-glob": {
+
"version": "3.3.2",
+
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+
"dev": true,
+
"dependencies": {
+
"@nodelib/fs.stat": "^2.0.2",
+
"@nodelib/fs.walk": "^1.2.3",
+
"glob-parent": "^5.1.2",
+
"merge2": "^1.3.0",
+
"micromatch": "^4.0.4"
+
},
+
"engines": {
+
"node": ">=8.6.0"
+
}
+
},
+
"node_modules/fast-glob/node_modules/glob-parent": {
+
"version": "5.1.2",
+
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+
"dev": true,
+
"dependencies": {
+
"is-glob": "^4.0.1"
+
},
+
"engines": {
+
"node": ">= 6"
+
}
+
},
+
"node_modules/fastq": {
+
"version": "1.17.1",
+
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+
"integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+
"dev": true,
+
"dependencies": {
+
"reusify": "^1.0.4"
+
}
+
},
+
"node_modules/fill-range": {
+
"version": "7.1.1",
+
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+
"dev": true,
+
"dependencies": {
+
"to-regex-range": "^5.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/foreground-child": {
+
"version": "3.2.1",
+
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
+
"integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
+
"dev": true,
+
"dependencies": {
+
"cross-spawn": "^7.0.0",
+
"signal-exit": "^4.0.1"
+
},
+
"engines": {
+
"node": ">=14"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
+
"node_modules/fraction.js": {
+
"version": "4.3.7",
+
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+
"integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+
"dev": true,
+
"engines": {
+
"node": "*"
+
},
+
"funding": {
+
"type": "patreon",
+
"url": "https://github.com/sponsors/rawify"
+
}
+
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
···
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
},
+
"node_modules/function-bind": {
+
"version": "1.1.2",
+
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+
"dev": true,
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
···
"node": ">=6.9.0"
},
+
"node_modules/glob": {
+
"version": "10.4.5",
+
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+
"dev": true,
+
"dependencies": {
+
"foreground-child": "^3.1.0",
+
"jackspeak": "^3.1.2",
+
"minimatch": "^9.0.4",
+
"minipass": "^7.1.2",
+
"package-json-from-dist": "^1.0.0",
+
"path-scurry": "^1.11.1"
+
},
+
"bin": {
+
"glob": "dist/esm/bin.mjs"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
+
"node_modules/glob-parent": {
+
"version": "6.0.2",
+
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+
"dev": true,
+
"dependencies": {
+
"is-glob": "^4.0.3"
+
},
+
"engines": {
+
"node": ">=10.13.0"
+
}
+
},
"node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
···
"node": ">=4"
},
+
"node_modules/hasown": {
+
"version": "2.0.2",
+
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+
"dev": true,
+
"dependencies": {
+
"function-bind": "^1.1.2"
+
},
+
"engines": {
+
"node": ">= 0.4"
+
}
+
},
"node_modules/html-entities": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
"integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==",
"dev": true
+
},
+
"node_modules/is-binary-path": {
+
"version": "2.1.0",
+
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+
"dev": true,
+
"dependencies": {
+
"binary-extensions": "^2.0.0"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/is-core-module": {
+
"version": "2.15.0",
+
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
+
"integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+
"dev": true,
+
"dependencies": {
+
"hasown": "^2.0.2"
+
},
+
"engines": {
+
"node": ">= 0.4"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/is-extglob": {
+
"version": "2.1.1",
+
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/is-fullwidth-code-point": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/is-glob": {
+
"version": "4.0.3",
+
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+
"dev": true,
+
"dependencies": {
+
"is-extglob": "^2.1.1"
+
},
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/is-number": {
+
"version": "7.0.0",
+
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.12.0"
+
}
},
"node_modules/is-what": {
"version": "4.1.16",
···
"url": "https://github.com/sponsors/mesqueeb"
},
+
"node_modules/isexe": {
+
"version": "2.0.0",
+
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+
"dev": true
+
},
"node_modules/iso-datestring-validator": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz",
"integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="
},
+
"node_modules/jackspeak": {
+
"version": "3.4.3",
+
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+
"dev": true,
+
"dependencies": {
+
"@isaacs/cliui": "^8.0.2"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
},
+
"optionalDependencies": {
+
"@pkgjs/parseargs": "^0.11.0"
+
}
+
},
+
"node_modules/jiti": {
+
"version": "1.21.6",
+
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+
"integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
+
"dev": true,
+
"bin": {
+
"jiti": "bin/jiti.js"
+
}
+
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
···
"node": ">=6"
},
+
"node_modules/lilconfig": {
+
"version": "2.1.0",
+
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=10"
+
}
+
},
+
"node_modules/lines-and-columns": {
+
"version": "1.2.4",
+
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+
"dev": true
+
},
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
···
"url": "https://github.com/sponsors/mesqueeb"
},
+
"node_modules/merge2": {
+
"version": "1.4.1",
+
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+
"dev": true,
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/micromatch": {
+
"version": "4.0.7",
+
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+
"integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+
"dev": true,
+
"dependencies": {
+
"braces": "^3.0.3",
+
"picomatch": "^2.3.1"
+
},
+
"engines": {
+
"node": ">=8.6"
+
}
+
},
+
"node_modules/mini-svg-data-uri": {
+
"version": "1.4.4",
+
"resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+
"integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+
"dev": true,
+
"bin": {
+
"mini-svg-data-uri": "cli.js"
+
}
+
},
+
"node_modules/minimatch": {
+
"version": "9.0.5",
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+
"dev": true,
+
"dependencies": {
+
"brace-expansion": "^2.0.1"
+
},
+
"engines": {
+
"node": ">=16 || 14 >=14.17"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
+
"node_modules/minipass": {
+
"version": "7.1.2",
+
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+
"dev": true,
+
"engines": {
+
"node": ">=16 || 14 >=14.17"
+
}
+
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
···
"resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz",
"integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="
},
+
"node_modules/mz": {
+
"version": "2.7.0",
+
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+
"dev": true,
+
"dependencies": {
+
"any-promise": "^1.0.0",
+
"object-assign": "^4.0.1",
+
"thenify-all": "^1.0.0"
+
}
+
},
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
···
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
"dev": true
},
+
"node_modules/normalize-path": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/normalize-range": {
+
"version": "0.1.2",
+
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+
"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/object-assign": {
+
"version": "4.1.1",
+
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/object-hash": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+
"dev": true,
+
"engines": {
+
"node": ">= 6"
+
}
+
},
+
"node_modules/package-json-from-dist": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+
"integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+
"dev": true
+
},
+
"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==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/path-parse": {
+
"version": "1.0.7",
+
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+
"dev": true
+
},
+
"node_modules/path-scurry": {
+
"version": "1.11.1",
+
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+
"dev": true,
+
"dependencies": {
+
"lru-cache": "^10.2.0",
+
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+
},
+
"engines": {
+
"node": ">=16 || 14 >=14.18"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
+
"node_modules/path-scurry/node_modules/lru-cache": {
+
"version": "10.4.3",
+
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+
"dev": true
+
},
"node_modules/picocolors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
"integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
"dev": true
},
+
"node_modules/picomatch": {
+
"version": "2.3.1",
+
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+
"dev": true,
+
"engines": {
+
"node": ">=8.6"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/jonschlinkert"
+
}
+
},
+
"node_modules/pify": {
+
"version": "2.3.0",
+
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/pirates": {
+
"version": "4.0.6",
+
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+
"dev": true,
+
"engines": {
+
"node": ">= 6"
+
}
+
},
"node_modules/postcss": {
-
"version": "8.4.38",
-
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
-
"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+
"version": "8.4.39",
+
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
+
"integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
"dev": true,
"funding": [
···
],
"dependencies": {
"nanoid": "^3.3.7",
-
"picocolors": "^1.0.0",
+
"picocolors": "^1.0.1",
"source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
},
+
"node_modules/postcss-import": {
+
"version": "15.1.0",
+
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+
"dev": true,
+
"dependencies": {
+
"postcss-value-parser": "^4.0.0",
+
"read-cache": "^1.0.0",
+
"resolve": "^1.1.7"
+
},
+
"engines": {
+
"node": ">=14.0.0"
+
},
+
"peerDependencies": {
+
"postcss": "^8.0.0"
+
}
+
},
+
"node_modules/postcss-js": {
+
"version": "4.0.1",
+
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+
"dev": true,
+
"dependencies": {
+
"camelcase-css": "^2.0.1"
+
},
+
"engines": {
+
"node": "^12 || ^14 || >= 16"
+
},
+
"funding": {
+
"type": "opencollective",
+
"url": "https://opencollective.com/postcss/"
+
},
+
"peerDependencies": {
+
"postcss": "^8.4.21"
+
}
+
},
+
"node_modules/postcss-load-config": {
+
"version": "4.0.2",
+
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+
"integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+
"dev": true,
+
"funding": [
+
{
+
"type": "opencollective",
+
"url": "https://opencollective.com/postcss/"
+
},
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/ai"
+
}
+
],
+
"dependencies": {
+
"lilconfig": "^3.0.0",
+
"yaml": "^2.3.4"
+
},
+
"engines": {
+
"node": ">= 14"
+
},
+
"peerDependencies": {
+
"postcss": ">=8.0.9",
+
"ts-node": ">=9.0.0"
+
},
+
"peerDependenciesMeta": {
+
"postcss": {
+
"optional": true
+
},
+
"ts-node": {
+
"optional": true
+
}
+
}
+
},
+
"node_modules/postcss-load-config/node_modules/lilconfig": {
+
"version": "3.1.2",
+
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
+
"integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
+
"dev": true,
+
"engines": {
+
"node": ">=14"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/antonk52"
+
}
+
},
+
"node_modules/postcss-nested": {
+
"version": "6.2.0",
+
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+
"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+
"dev": true,
+
"funding": [
+
{
+
"type": "opencollective",
+
"url": "https://opencollective.com/postcss/"
+
},
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/ai"
+
}
+
],
+
"dependencies": {
+
"postcss-selector-parser": "^6.1.1"
+
},
+
"engines": {
+
"node": ">=12.0"
+
},
+
"peerDependencies": {
+
"postcss": "^8.2.14"
+
}
+
},
+
"node_modules/postcss-selector-parser": {
+
"version": "6.1.1",
+
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+
"integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+
"dev": true,
+
"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==",
+
"dev": true
+
},
+
"node_modules/queue-microtask": {
+
"version": "1.2.3",
+
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+
"dev": true,
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
]
+
},
+
"node_modules/read-cache": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+
"dev": true,
+
"dependencies": {
+
"pify": "^2.3.0"
+
}
+
},
+
"node_modules/readdirp": {
+
"version": "3.6.0",
+
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+
"dev": true,
+
"dependencies": {
+
"picomatch": "^2.2.1"
+
},
+
"engines": {
+
"node": ">=8.10.0"
+
}
+
},
+
"node_modules/resolve": {
+
"version": "1.22.8",
+
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+
"dev": true,
+
"dependencies": {
+
"is-core-module": "^2.13.0",
+
"path-parse": "^1.0.7",
+
"supports-preserve-symlinks-flag": "^1.0.0"
+
},
+
"bin": {
+
"resolve": "bin/resolve"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/reusify": {
+
"version": "1.0.4",
+
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+
"dev": true,
+
"engines": {
+
"iojs": ">=1.0.0",
+
"node": ">=0.10.0"
+
}
+
},
"node_modules/rollup": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
···
"fsevents": "~2.3.2"
},
+
"node_modules/run-parallel": {
+
"version": "1.2.0",
+
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+
"dev": true,
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
],
+
"dependencies": {
+
"queue-microtask": "^1.2.2"
+
}
+
},
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
···
"seroval": "^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==",
+
"dev": true,
+
"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==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/signal-exit": {
+
"version": "4.1.0",
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+
"dev": true,
+
"engines": {
+
"node": ">=14"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
"node_modules/solid-devtools": {
"version": "0.29.3",
"resolved": "https://registry.npmjs.org/solid-devtools/-/solid-devtools-0.29.3.tgz",
···
"node": ">=0.10.0"
},
+
"node_modules/string-width": {
+
"version": "5.1.2",
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+
"dev": true,
+
"dependencies": {
+
"eastasianwidth": "^0.2.0",
+
"emoji-regex": "^9.2.2",
+
"strip-ansi": "^7.0.1"
+
},
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/string-width-cjs": {
+
"name": "string-width",
+
"version": "4.2.3",
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+
"dev": true,
+
"dependencies": {
+
"emoji-regex": "^8.0.0",
+
"is-fullwidth-code-point": "^3.0.0",
+
"strip-ansi": "^6.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/string-width-cjs/node_modules/ansi-regex": {
+
"version": "5.0.1",
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/string-width-cjs/node_modules/emoji-regex": {
+
"version": "8.0.0",
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+
"dev": true
+
},
+
"node_modules/string-width-cjs/node_modules/strip-ansi": {
+
"version": "6.0.1",
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+
"dev": true,
+
"dependencies": {
+
"ansi-regex": "^5.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/strip-ansi": {
+
"version": "7.1.0",
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+
"dev": true,
+
"dependencies": {
+
"ansi-regex": "^6.0.1"
+
},
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
+
}
+
},
+
"node_modules/strip-ansi-cjs": {
+
"name": "strip-ansi",
+
"version": "6.0.1",
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+
"dev": true,
+
"dependencies": {
+
"ansi-regex": "^5.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+
"version": "5.0.1",
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/sucrase": {
+
"version": "3.35.0",
+
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+
"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+
"dev": true,
+
"dependencies": {
+
"@jridgewell/gen-mapping": "^0.3.2",
+
"commander": "^4.0.0",
+
"glob": "^10.3.10",
+
"lines-and-columns": "^1.1.6",
+
"mz": "^2.7.0",
+
"pirates": "^4.0.1",
+
"ts-interface-checker": "^0.1.9"
+
},
+
"bin": {
+
"sucrase": "bin/sucrase",
+
"sucrase-node": "bin/sucrase-node"
+
},
+
"engines": {
+
"node": ">=16 || 14 >=14.17"
+
}
+
},
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
···
"node": ">=4"
},
+
"node_modules/supports-preserve-symlinks-flag": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+
"dev": true,
+
"engines": {
+
"node": ">= 0.4"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/tailwindcss": {
+
"version": "3.4.6",
+
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.6.tgz",
+
"integrity": "sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==",
+
"dev": true,
+
"dependencies": {
+
"@alloc/quick-lru": "^5.2.0",
+
"arg": "^5.0.2",
+
"chokidar": "^3.5.3",
+
"didyoumean": "^1.2.2",
+
"dlv": "^1.1.3",
+
"fast-glob": "^3.3.0",
+
"glob-parent": "^6.0.2",
+
"is-glob": "^4.0.3",
+
"jiti": "^1.21.0",
+
"lilconfig": "^2.1.0",
+
"micromatch": "^4.0.5",
+
"normalize-path": "^3.0.0",
+
"object-hash": "^3.0.0",
+
"picocolors": "^1.0.0",
+
"postcss": "^8.4.23",
+
"postcss-import": "^15.1.0",
+
"postcss-js": "^4.0.1",
+
"postcss-load-config": "^4.0.1",
+
"postcss-nested": "^6.0.1",
+
"postcss-selector-parser": "^6.0.11",
+
"resolve": "^1.22.2",
+
"sucrase": "^3.32.0"
+
},
+
"bin": {
+
"tailwind": "lib/cli.js",
+
"tailwindcss": "lib/cli.js"
+
},
+
"engines": {
+
"node": ">=14.0.0"
+
}
+
},
+
"node_modules/thenify": {
+
"version": "3.3.1",
+
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+
"dev": true,
+
"dependencies": {
+
"any-promise": "^1.0.0"
+
}
+
},
+
"node_modules/thenify-all": {
+
"version": "1.6.0",
+
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+
"dev": true,
+
"dependencies": {
+
"thenify": ">= 3.1.0 < 4"
+
},
+
"engines": {
+
"node": ">=0.8"
+
}
+
},
"node_modules/tlds": {
"version": "1.252.0",
"resolved": "https://registry.npmjs.org/tlds/-/tlds-1.252.0.tgz",
···
"node": ">=4"
},
+
"node_modules/to-regex-range": {
+
"version": "5.0.1",
+
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+
"dev": true,
+
"dependencies": {
+
"is-number": "^7.0.0"
+
},
+
"engines": {
+
"node": ">=8.0"
+
}
+
},
+
"node_modules/ts-interface-checker": {
+
"version": "0.1.13",
+
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+
"dev": true
+
},
"node_modules/typescript": {
"version": "5.4.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
···
"peerDependencies": {
"browserslist": ">= 4.21.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==",
+
"dev": true
},
"node_modules/validate-html-nesting": {
"version": "1.2.2",
···
},
+
"node_modules/which": {
+
"version": "2.0.2",
+
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+
"dev": true,
+
"dependencies": {
+
"isexe": "^2.0.0"
+
},
+
"bin": {
+
"node-which": "bin/node-which"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/wrap-ansi": {
+
"version": "8.1.0",
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+
"dev": true,
+
"dependencies": {
+
"ansi-styles": "^6.1.0",
+
"string-width": "^5.0.1",
+
"strip-ansi": "^7.0.1"
+
},
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+
}
+
},
+
"node_modules/wrap-ansi-cjs": {
+
"name": "wrap-ansi",
+
"version": "7.0.0",
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+
"dev": true,
+
"dependencies": {
+
"ansi-styles": "^4.0.0",
+
"string-width": "^4.1.0",
+
"strip-ansi": "^6.0.0"
+
},
+
"engines": {
+
"node": ">=10"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+
}
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+
"version": "5.0.1",
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+
"version": "4.3.0",
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+
"dev": true,
+
"dependencies": {
+
"color-convert": "^2.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+
}
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/color-convert": {
+
"version": "2.0.1",
+
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+
"dev": true,
+
"dependencies": {
+
"color-name": "~1.1.4"
+
},
+
"engines": {
+
"node": ">=7.0.0"
+
}
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/color-name": {
+
"version": "1.1.4",
+
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+
"dev": true
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+
"version": "8.0.0",
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+
"dev": true
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
+
"version": "4.2.3",
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+
"dev": true,
+
"dependencies": {
+
"emoji-regex": "^8.0.0",
+
"is-fullwidth-code-point": "^3.0.0",
+
"strip-ansi": "^6.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+
"version": "6.0.1",
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+
"dev": true,
+
"dependencies": {
+
"ansi-regex": "^5.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/wrap-ansi/node_modules/ansi-styles": {
+
"version": "6.2.1",
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+
"dev": true,
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+
}
+
},
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
+
},
+
"node_modules/yaml": {
+
"version": "2.4.5",
+
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz",
+
"integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==",
+
"dev": true,
+
"bin": {
+
"yaml": "bin.mjs"
+
},
+
"engines": {
+
"node": ">= 14"
+
}
},
"node_modules/zod": {
"version": "3.23.8",
+4
package.json
···
},
"license": "0BSD",
"devDependencies": {
+
"@tailwindcss/forms": "^0.5.7",
+
"autoprefixer": "^10.4.19",
+
"postcss": "^8.4.39",
"solid-devtools": "^0.29.2",
+
"tailwindcss": "^3.4.6",
"typescript": "^5.3.3",
"vite": "^5.0.11",
"vite-plugin-solid": "^2.8.2"
+6
postcss.config.js
···
+
export default {
+
plugins: {
+
tailwindcss: {},
+
autoprefixer: {},
+
},
+
}
-37
src/App.module.css
···
-
.App {
-
text-align: center;
-
}
-
-
.header {
-
background-color: #282c34;
-
min-height: 100vh;
-
display: flex;
-
flex-direction: column;
-
align-items: center;
-
justify-content: center;
-
font-size: calc(10px + 2vmin);
-
color: white;
-
}
-
-
.link {
-
color: #b318f0;
-
}
-
-
input {
-
margin: 5px;
-
font-size: 125%;
-
}
-
-
label {
-
margin-right: 10px;
-
}
-
-
button {
-
margin: 15px;
-
margin-top: 20px;
-
font-size: 125%;
-
}
-
-
.Warning {
-
margin-bottom: 10px;
-
}
+309 -139
src/App.tsx
···
-
import { createSignal, For, Show, type Component } from "solid-js";
+
import {
+
createSignal,
+
For,
+
Switch,
+
Match,
+
Show,
+
type Component,
+
} from "solid-js";
import { createStore } from "solid-js/store";
-
import styles from "./App.module.css";
import { BskyAgent } from "@atproto/api";
-
type Form = {
-
handle: string;
-
password: string;
-
blockedby: boolean;
-
deleted: boolean;
-
deactivated: boolean;
-
suspended: boolean;
-
};
-
-
let [notices, setNotices] = createSignal<string[]>([], { equals: false });
-
let [progress, setProgress] = createSignal(0);
-
let [followCount, setFollowCount] = createSignal(0);
-
let followRecords: Record<
-
string,
-
{ handle: string; uri: string; toBeDeleted: boolean }
-
> = {};
-
-
const fetchFollows = async (agent: any) => {
-
const PAGE_LIMIT = 100;
-
const fetchPage = async (cursor?: any) => {
-
return await agent.com.atproto.repo.listRecords({
-
repo: agent.session.did,
-
collection: "app.bsky.graph.follow",
-
limit: PAGE_LIMIT,
-
cursor: cursor,
-
});
-
};
-
-
let res = await fetchPage();
-
let follows = res.data.records;
-
-
while (res.data.cursor && res.data.records.length >= PAGE_LIMIT) {
-
res = await fetchPage(res.data.cursor);
-
follows = follows.concat(res.data.records);
-
}
+
enum RepoStatus {
+
BLOCKEDBY,
+
DELETED,
+
DEACTIVATED,
+
SUSPENDED,
+
}
-
return follows;
+
type FollowRecord = {
+
did: string;
+
handle: string;
+
uri: string;
+
status: RepoStatus;
+
toBeDeleted: boolean;
};
-
function updateNotices(newNotice: string) {
-
let tmp: string[] = notices();
-
tmp.push(newNotice);
-
setNotices(tmp);
-
}
+
let [followRecords, setFollowRecords] = createStore<FollowRecord[]>([]);
+
let [notice, setNotice] = createSignal("");
+
let agent: BskyAgent;
const resolveHandle = async (handle: string) => {
const agent = new BskyAgent({
service: "https://public.api.bsky.app",
});
-
const res = await agent.com.atproto.identity.resolveHandle({
-
handle: handle,
-
});
-
-
return res.data.did;
+
try {
+
const res = await agent.com.atproto.identity.resolveHandle({
+
handle: handle,
+
});
+
return res.data.did;
+
} catch (e: any) {
+
setNotice(e.message);
+
}
};
const fetchServiceEndpoint = async (handle: string) => {
const did = await resolveHandle(handle);
+
if (!did) return;
const res = await fetch(
did.startsWith("did:web")
···
});
};
-
const unfollowBsky = async (form: Form, preview: boolean) => {
-
setNotices([]);
-
-
const serviceURL = await fetchServiceEndpoint(form.handle);
+
const loginBsky = async (handle: string, password: string) => {
+
const serviceURL = await fetchServiceEndpoint(handle);
-
const agent = new BskyAgent({
+
agent = new BskyAgent({
service: serviceURL,
});
try {
await agent.login({
-
identifier: form.handle,
-
password: form.password,
+
identifier: handle,
+
password: password,
});
} catch (e: any) {
-
updateNotices(e.message);
-
return;
+
setNotice(e.message);
}
+
};
-
if (Object.keys(followRecords).length == 0 || preview) {
-
if (preview) followRecords = {};
+
const Follows: Component = () => {
+
function selectRecords(status: RepoStatus, toBeDeleted: boolean) {
+
followRecords.forEach((record, index) => {
+
if (record.status == status)
+
setFollowRecords(index, "toBeDeleted", toBeDeleted);
+
});
+
}
await fetchFollows(agent).then((follows) =>
follows.forEach((record: any) => {
···
}
}
setProgress(progress() + 1);
+
=======
+
const Follows: Component = () => {
+
function selectRecords(status: RepoStatus, toBeDeleted: boolean) {
+
followRecords.forEach((record, index) => {
+
if (record.status == status)
+
setFollowRecords(index, "toBeDeleted", toBeDeleted);
+
>>>>>>> newlook
});
}
-
if (!preview) {
-
setFollowCount(0);
+
return (
+
<div class="mt-3">
+
<Show when={followRecords.length}>
+
<div class="flex flex-row flex-wrap gap-x-5 gap-y-2">
+
<div class="flex h-6 items-center">
+
<input
+
type="checkbox"
+
id="deleted"
+
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600"
+
onChange={(e) =>
+
selectRecords(RepoStatus.DELETED, e.currentTarget.checked)
+
}
+
/>
+
<label for="deleted" class="ml-2">
+
Deleted
+
</label>
+
</div>
+
<div class="flex h-6 items-center">
+
<input
+
type="checkbox"
+
id="deactivated"
+
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600"
+
onChange={(e) =>
+
selectRecords(RepoStatus.DEACTIVATED, e.currentTarget.checked)
+
}
+
/>
+
<label for="deactivated" class="ml-2">
+
Deactivated
+
</label>
+
</div>
+
<div class="flex h-6 items-center">
+
<input
+
type="checkbox"
+
id="suspended"
+
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600"
+
onChange={(e) =>
+
selectRecords(RepoStatus.SUSPENDED, e.currentTarget.checked)
+
}
+
/>
+
<label for="suspended" class="ml-2">
+
Suspended
+
</label>
+
</div>
+
<div class="flex h-6 items-center">
+
<input
+
type="checkbox"
+
id="blockedby"
+
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600"
+
onChange={(e) =>
+
selectRecords(RepoStatus.BLOCKEDBY, e.currentTarget.checked)
+
}
+
/>
+
<label for="blockedby" class="ml-2">
+
Blocked By
+
</label>
+
</div>
+
</div>
+
</Show>
+
<div class="mt-5">
+
<For each={followRecords}>
+
{(record, index) => (
+
<div class="flex flex-row items-center border-b mb-2 pb-2">
+
<div class="mr-4">
+
<input
+
type="checkbox"
+
id={"record" + index()}
+
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600"
+
checked={record.toBeDeleted}
+
onChange={(e) =>
+
setFollowRecords(
+
index(),
+
"toBeDeleted",
+
e.currentTarget.checked,
+
)
+
}
+
/>
+
</div>
+
<div>
+
<label for={"record" + index()}>
+
<div>@{record.handle} </div>
+
<div> {record.did} </div>
+
<div>
+
<Switch>
+
<Match when={record.status == RepoStatus.DELETED}>
+
Deleted
+
</Match>
+
<Match when={record.status == RepoStatus.DEACTIVATED}>
+
Deactivated
+
</Match>
+
<Match when={record.status == RepoStatus.BLOCKEDBY}>
+
Blocked by
+
</Match>
+
<Match when={record.status == RepoStatus.SUSPENDED}>
+
Suspended
+
</Match>
+
</Switch>
+
</div>
+
</label>
+
</div>
+
</div>
+
)}
+
</For>
+
</div>
+
</div>
+
);
+
};
-
const unfollowCount = Object.values(followRecords).filter(
-
(record) => record.toBeDeleted,
-
).length;
+
const Form: Component = () => {
+
const [handle, setHandle] = createSignal("");
+
const [password, setPassword] = createSignal("");
+
const [progress, setProgress] = createSignal(0);
+
const [followCount, setFollowCount] = createSignal(0);
-
const writes = Object.values(followRecords)
+
const fetchHiddenAccounts = async (handle: string, password: string) => {
+
const fetchFollows = async (agent: any) => {
+
const PAGE_LIMIT = 100;
+
const fetchPage = async (cursor?: any) => {
+
return await agent.com.atproto.repo.listRecords({
+
repo: agent.session.did,
+
collection: "app.bsky.graph.follow",
+
limit: PAGE_LIMIT,
+
cursor: cursor,
+
});
+
};
+
+
let res = await fetchPage();
+
let follows = res.data.records;
+
+
while (res.data.cursor && res.data.records.length >= PAGE_LIMIT) {
+
res = await fetchPage(res.data.cursor);
+
follows = follows.concat(res.data.records);
+
}
+
+
return follows;
+
};
+
+
setNotice("Logging in...");
+
await loginBsky(handle, password);
+
if (!agent) return;
+
setNotice("");
+
+
await fetchFollows(agent).then((follows) =>
+
follows.forEach(async (record: any) => {
+
setFollowCount(follows.length);
+
+
try {
+
const res = await agent.getProfile({ actor: record.value.subject });
+
if (res.data.viewer?.blockedBy) {
+
setFollowRecords(followRecords.length, {
+
did: record.value.subject,
+
handle: res.data.handle,
+
uri: record.uri,
+
status: RepoStatus.BLOCKEDBY,
+
toBeDeleted: false,
+
});
+
}
+
} catch (e: any) {
+
const res = await fetch(
+
record.value.subject.startsWith("did:web")
+
? "https://" +
+
record.value.subject.split(":")[2] +
+
"/.well-known/did.json"
+
: "https://plc.directory/" + record.value.subject,
+
);
+
+
let status;
+
if (e.message.includes("not found")) {
+
status = RepoStatus.DELETED;
+
} else if (e.message.includes("deactivated")) {
+
status = RepoStatus.DEACTIVATED;
+
} else if (e.message.includes("suspended")) {
+
status = RepoStatus.SUSPENDED;
+
}
+
+
const handle = await res.json().then((doc) => {
+
for (const alias of doc.alsoKnownAs) {
+
if (alias.includes("at://")) {
+
return alias.split("//")[1];
+
}
+
}
+
});
+
+
setFollowRecords(followRecords.length, {
+
did: record.value.subject,
+
handle: handle,
+
uri: record.uri,
+
status: status,
+
toBeDeleted: false,
+
});
+
}
+
setProgress(progress() + 1);
+
}),
+
);
+
};
+
+
const unfollow = async () => {
+
const writes = followRecords
.filter((record) => record.toBeDeleted)
.map((record) => {
return {
···
}
}
-
setNotices([`Unfollowed ${unfollowCount} accounts.`]);
-
followRecords = {};
-
}
-
};
-
-
const UnfollowForm: Component = () => {
-
const [formStore, setFormStore] = createStore<Form>({
-
handle: "",
-
password: "",
-
blockedby: true,
-
deleted: true,
-
deactivated: false,
-
suspended: false,
-
});
+
setFollowRecords([]);
+
setProgress(0);
+
setFollowCount(0);
+
setNotice(`Unfollowed ${writes.length} accounts`);
+
};
return (
-
<div>
-
<div>
+
<div class="flex flex-col items-center">
+
<div class="flex flex-col items-center">
<input
type="text"
placeholder="Handle"
-
onInput={(e) => setFormStore("handle", e.currentTarget.value)}
+
class="rounded-md py-1 pl-2 pr-2 mb-3 ring-1 ring-inset ring-gray-300"
+
onInput={(e) => setHandle(e.currentTarget.value)}
/>
-
</div>
-
<div>
<input
type="password"
placeholder="App Password"
-
onInput={(e) => setFormStore("password", e.currentTarget.value)}
-
/>
-
</div>
-
<div>
-
<input
-
type="checkbox"
-
id="blockedby"
-
checked
-
onChange={(e) => setFormStore("blockedby", e.currentTarget.checked)}
-
/>
-
<label for="blockedby">Blocked By</label>
-
<input
-
type="checkbox"
-
id="deleted"
-
onChange={(e) => setFormStore("deleted", e.currentTarget.checked)}
-
checked
-
/>
-
<label for="deleted">Deleted</label>
-
<input
-
type="checkbox"
-
id="deactivated"
-
onChange={(e) => setFormStore("deactivated", e.currentTarget.checked)}
-
/>
-
<label for="deactivated">Deactivated</label>
-
<input
-
type="checkbox"
-
id="suspended"
-
onChange={(e) => setFormStore("suspended", e.currentTarget.checked)}
+
class="rounded-md py-1 pl-2 pr-2 mb-5 ring-1 ring-inset ring-gray-300"
+
onInput={(e) => setPassword(e.currentTarget.value)}
/>
-
<label for="suspended">Suspended</label>
+
<div>
+
<Show when={!followRecords.length}>
+
<button
+
type="button"
+
onclick={() => fetchHiddenAccounts(handle(), password())}
+
class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
+
>
+
Preview
+
</button>
+
</Show>
+
<Show when={followRecords.length}>
+
<button
+
type="button"
+
onclick={() => unfollow()}
+
class="bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded"
+
>
+
Confirm
+
</button>
+
</Show>
+
</div>
</div>
-
<button type="button" onclick={() => unfollowBsky(formStore, true)}>
-
Preview
-
</button>
-
<button type="button" onclick={() => unfollowBsky(formStore, false)}>
-
Unfollow
-
</button>
+
<Show when={notice()}>
+
<div class="m-3">{notice()}</div>
+
</Show>
+
<Show when={followCount()}>
+
<div class="m-3">
+
Progress: {progress()}/{followCount()}
+
</div>
+
</Show>
</div>
);
};
const App: Component = () => {
return (
-
<div class={styles.App}>
-
<h1>cleanfollow-bsky</h1>
-
<div class={styles.Warning}>
-
<p>Unfollows all blocked by, deleted, and deactivated accounts</p>
-
<a href="https://github.com/notjuliet/cleanfollow-bsky">Source Code</a>
-
</div>
-
<UnfollowForm />
-
<Show when={followCount()}>
+
<div class="flex flex-col items-center m-5">
+
<h1 class="text-2xl mb-5">cleanfollow-bsky</h1>
+
<div class="mb-5 text-center">
+
<p>
+
Unfollows blocked by, deleted, suspended, and deactivated accounts
+
</p>
<div>
-
Progress: {progress()}/{followCount()}
+
<a
+
class="text-blue-600 hover:underline"
+
href="https://github.com/notjuliet/cleanfollow-bsky"
+
>
+
Source Code
+
</a>
</div>
-
<br />
-
</Show>
-
<div>
-
<For each={notices()}>
-
{(item) => (
-
<span>
-
{item}
-
<br />
-
</span>
-
)}
-
</For>
+
<div>
+
<a
+
class="text-blue-600 hover:underline"
+
href="https://bsky.app/profile/juliet.renahlee.com"
+
>
+
Bluesky
+
</a>
+
</div>
</div>
+
<Form />
+
<Follows />
</div>
);
};
+3 -13
src/index.css
···
-
body {
-
margin: 0;
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
-
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
-
sans-serif;
-
-webkit-font-smoothing: antialiased;
-
-moz-osx-font-smoothing: grayscale;
-
}
-
-
code {
-
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
-
monospace;
-
}
+
@tailwind base;
+
@tailwind components;
+
@tailwind utilities;
+1 -9
src/index.tsx
···
import "./index.css";
import App from "./App";
-
const root = document.getElementById("root");
-
-
if (import.meta.env.DEV && !(root instanceof HTMLElement)) {
-
throw new Error(
-
"Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?",
-
);
-
}
-
-
render(() => <App />, root!);
+
render(() => <App />, document.getElementById("root") as HTMLElement);
+13
tailwind.config.js
···
+
const plugin = require("tailwindcss/plugin");
+
+
module.exports = {
+
content: [
+
"./index.html",
+
"./src/**/*.{js,ts,jsx,tsx,css,md,mdx,html,json,scss}",
+
],
+
darkMode: "class",
+
theme: {
+
extends: {},
+
},
+
plugins: [require("@tailwindcss/forms")],
+
};