mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-22 19:47:47 +01:00
tgui core 5.5.10 (#18878)
This commit is contained in:
+1
-1
@@ -17,7 +17,7 @@ export RUST_G_VERSION=4.2.0
|
||||
export NODE_VERSION_LTS=22.14.0
|
||||
|
||||
# Bun version
|
||||
export BUN_VERSION=1.3.3
|
||||
export BUN_VERSION=1.3.4
|
||||
|
||||
# SpacemanDMM git tag
|
||||
export SPACEMAN_DMM_VERSION=suite-1.11
|
||||
|
||||
+57
-45
@@ -6,15 +6,15 @@
|
||||
"name": "tgui-workspace",
|
||||
"devDependencies": {
|
||||
"@happy-dom/global-registrator": "^17.6.3",
|
||||
"@rspack/cli": "^1.6.6",
|
||||
"@rspack/core": "^1.6.6",
|
||||
"@types/bun": "^1.3.3",
|
||||
"@rspack/cli": "^1.6.7",
|
||||
"@rspack/core": "^1.6.7",
|
||||
"@types/bun": "^1.3.4",
|
||||
"@types/react": "^19.2.7",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/webpack-env": "^1.18.8",
|
||||
"@types/wicg-file-system-access": "^2023.10.7",
|
||||
"css-loader": "^7.1.2",
|
||||
"sass-embedded": "^1.93.3",
|
||||
"sass-embedded": "^1.95.1",
|
||||
"sass-loader": "^16.0.6",
|
||||
"typescript": "^5.9.3",
|
||||
},
|
||||
@@ -40,7 +40,7 @@
|
||||
"dependencies": {
|
||||
"common": "workspace:*",
|
||||
"dateformat": "^5.0.3",
|
||||
"dompurify": "^3.3.0",
|
||||
"dompurify": "^3.3.1",
|
||||
"es-toolkit": "^1.42.0",
|
||||
"highlight.js": "^11.11.1",
|
||||
"js-yaml": "^4.1.1",
|
||||
@@ -49,7 +49,7 @@
|
||||
"marked-smartypants": "^1.1.11",
|
||||
"react": "^19.2.1",
|
||||
"react-dom": "^19.2.1",
|
||||
"tgui-core": "^5.4.1",
|
||||
"tgui-core": "^5.5.10",
|
||||
"tgui-dev-server": "workspace:*",
|
||||
},
|
||||
},
|
||||
@@ -67,12 +67,12 @@
|
||||
"version": "6.0.0",
|
||||
"dependencies": {
|
||||
"common": "workspace:*",
|
||||
"dompurify": "^3.3.0",
|
||||
"dompurify": "^3.3.1",
|
||||
"es-toolkit": "^1.42.0",
|
||||
"react": "^19.2.1",
|
||||
"react-dom": "^19.2.1",
|
||||
"tgui": "workspace:*",
|
||||
"tgui-core": "^5.4.1",
|
||||
"tgui-core": "^5.5.10",
|
||||
"tgui-dev-server": "workspace:*",
|
||||
},
|
||||
},
|
||||
@@ -84,7 +84,7 @@
|
||||
"react": "^19.2.1",
|
||||
"react-dom": "^19.2.1",
|
||||
"tgui": "workspace:*",
|
||||
"tgui-core": "^5.4.1",
|
||||
"tgui-core": "^5.5.10",
|
||||
},
|
||||
},
|
||||
"packages/tgui-setup": {
|
||||
@@ -201,31 +201,31 @@
|
||||
|
||||
"@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="],
|
||||
|
||||
"@rspack/binding": ["@rspack/binding@1.6.6", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.6.6", "@rspack/binding-darwin-x64": "1.6.6", "@rspack/binding-linux-arm64-gnu": "1.6.6", "@rspack/binding-linux-arm64-musl": "1.6.6", "@rspack/binding-linux-x64-gnu": "1.6.6", "@rspack/binding-linux-x64-musl": "1.6.6", "@rspack/binding-wasm32-wasi": "1.6.6", "@rspack/binding-win32-arm64-msvc": "1.6.6", "@rspack/binding-win32-ia32-msvc": "1.6.6", "@rspack/binding-win32-x64-msvc": "1.6.6" } }, "sha512-noiV+qhyBTVpvG2M4bnOwKk2Ynl6G47Wf7wpCjPCFr87qr3txNwTTnhkEJEU59yj+VvIhbRD2rf5+9TLoT0Wxg=="],
|
||||
"@rspack/binding": ["@rspack/binding@1.6.7", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.6.7", "@rspack/binding-darwin-x64": "1.6.7", "@rspack/binding-linux-arm64-gnu": "1.6.7", "@rspack/binding-linux-arm64-musl": "1.6.7", "@rspack/binding-linux-x64-gnu": "1.6.7", "@rspack/binding-linux-x64-musl": "1.6.7", "@rspack/binding-wasm32-wasi": "1.6.7", "@rspack/binding-win32-arm64-msvc": "1.6.7", "@rspack/binding-win32-ia32-msvc": "1.6.7", "@rspack/binding-win32-x64-msvc": "1.6.7" } }, "sha512-7ICabuBN3gHc6PPN52+m1kruz3ogiJjg1C0gSWdLRk18m/4jlcM2aAy6wfXjgODJdB0Yh2ro/lIpBbj+AYWUGA=="],
|
||||
|
||||
"@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@1.6.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vGVDP0rlWa2w/gLba/sncVfkCah0HmhdmK5vGj/7sSX0iViwQneA2xjxDHyCNSQrvfq9GJmj4Kmdq/9tGh0KuA=="],
|
||||
"@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@1.6.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QiIAP8JTAtht0j8/xZZEQTJRB9e+KrOm9c7JJm73CewVg55rDWRrwopiVfBNlTu1coem1ztUHJYdQhg2uXfqww=="],
|
||||
|
||||
"@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@1.6.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-IcdEG2kOmbPPO70Zl7gDnowDjK7d7C1hWew2vU7dPltr2t1JalRIMnS051lhiur0ULkSxV3cW1zXqv0Oi8AnOg=="],
|
||||
"@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@1.6.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-DpQRxxTXkMMNPmBXeJBaAB8HmWKxH2IfvHv7vU+kBhJ3xdPtXU4/xBv1W3biluoNRG11gc1WLIgjzeGgaLCxmw=="],
|
||||
|
||||
"@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@1.6.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-rIguCCtlTcwoFlwheDiUgdImk27spuCRn43zGJogARpM/ZYRFKIuSwFDGUtJT2g0TSLUAHUhWAUqC36NwvrbMQ=="],
|
||||
"@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@1.6.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-211/XoBiooGGgUo/NxNpsrzGUXtH1d7g/4+UTtjYtfc8QHwu7ZMHcsqg0wss53fXzn/yyxd0DZ56vBHq52BiFw=="],
|
||||
|
||||
"@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@1.6.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-x6X6Gr0fUw6qrJGxZt3Rb6oIX+jd9pdcyp0VbtofcLaqGVQbzustYsYnuLATPOys0q4J/4kWnmEhkjLJHwkhpQ=="],
|
||||
"@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@1.6.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-0WnqAWz3WPDsXGvOOA++or7cHpoidVsH3FlqNaAfRu6ni6n7ig/s0/jKUB+C5FtXOgmGjAGkZHfFgNHsvZ0FWw=="],
|
||||
|
||||
"@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@1.6.6", "", { "os": "linux", "cpu": "x64" }, "sha512-gSlVdASszWHosQKn+nzYOInBijdQboUnmNMGgW9/PijVg3433IvQjzviUuJFno8CMGgrACV9yw+ZFDuK0J57VA=="],
|
||||
"@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@1.6.7", "", { "os": "linux", "cpu": "x64" }, "sha512-iMrE0Q4IuYpkE0MjpaOVaUDYbQFiCRI9D3EPoXzlXJj4kJSdNheODpHTBVRlWt8Xp7UAoWuIFXCvKFKcSMm3aQ=="],
|
||||
|
||||
"@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@1.6.6", "", { "os": "linux", "cpu": "x64" }, "sha512-TZaqVkh7memsTK/hxkOBrbpdzbmBUMea1YnYt++7QjMgco1kWFvAQ+YhAWtIaOaEg8s6C07Lt0Zp8izM2Dja0g=="],
|
||||
"@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@1.6.7", "", { "os": "linux", "cpu": "x64" }, "sha512-e7gKFxpdEQwYGk7lTC/hukTgNtaoAstBXehnZNk4k3kuU6+86WDrkn18Cd949iNqfIPtIG/wIsFNGbkHsH69hQ=="],
|
||||
|
||||
"@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@1.6.6", "", { "dependencies": { "@napi-rs/wasm-runtime": "1.0.7" }, "cpu": "none" }, "sha512-W4mWdlLnYrbUaktyHOGNfATblxMTbgF7CBfDw8PhbDtjd2l8e/TnaHgIDkwITHXAOMEF/QEKfo9FtusbcQJNKw=="],
|
||||
"@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@1.6.7", "", { "dependencies": { "@napi-rs/wasm-runtime": "1.0.7" }, "cpu": "none" }, "sha512-yx88EFdE9RP3hh7VhjjW6uc6wGU0KcpOcZp8T8E/a+X8L98fX0aVrtM1IDbndhmdluIMqGbfJNap2+QqOCY9Mw=="],
|
||||
|
||||
"@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@1.6.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-cw5OgxqoDwjoZlk0L3vGEwcjPZsOVFYLwr2ssiC05rsTbhBwxj8coLpAJdvUvbf6C2TTmCB7iPe2sPq1KWD37g=="],
|
||||
"@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@1.6.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-vgxVYpFK8P5ulSXQQA+EbX78R/SUU+WIf0JIY+LoUoP89gZOsise/lKAJMAybzpeTJ1t0ndLchFznDYnzq+l4Q=="],
|
||||
|
||||
"@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@1.6.6", "", { "os": "win32", "cpu": "ia32" }, "sha512-M4ruR+VZ59iy+mPjy6FQPT27cOgeytf3wFBrt7e0suKeNLYGxrNyI9YhgpCTY++SMJsAMgRLGDHoI3ZgWulw1Q=="],
|
||||
"@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@1.6.7", "", { "os": "win32", "cpu": "ia32" }, "sha512-bV5RTW0Va0UQKJm9HWLt7fWNBPaBBBxCJOA2pJT3nGGm6CCXKnZSyEiVbFUk4jI/uiwBfqenlLkzaGoMRbeDhA=="],
|
||||
|
||||
"@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@1.6.6", "", { "os": "win32", "cpu": "x64" }, "sha512-q5QTvdhPUh+CA93cQG5zWKRIHMIWPzw+ftFDEwBw52zYdvNAoLniqD8o5Mi8CT0pndhulXgR5aw0Sjd3eMah+A=="],
|
||||
"@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@1.6.7", "", { "os": "win32", "cpu": "x64" }, "sha512-8xlbuJQtYktlBjZupOHlO8FeZqSIhsV3ih7xBSiOYar6LI6uQzA7XiO3I5kaPSDirBMMMKv1Z4rKCxWx10a3TQ=="],
|
||||
|
||||
"@rspack/cli": ["@rspack/cli@1.6.6", "", { "dependencies": { "@discoveryjs/json-ext": "^0.5.7", "@rspack/dev-server": "~1.1.4", "exit-hook": "^4.0.0", "webpack-bundle-analyzer": "4.10.2" }, "peerDependencies": { "@rspack/core": "^1.0.0-alpha || ^1.x" }, "bin": { "rspack": "bin/rspack.js" } }, "sha512-CzKPQ00Ym1jEzU1i7Wem2JWbNGX4hnndnBi5f3FMM8gEUUD+SQQVm8fYeMlFIMbHIpYan+x+nxcnjxT5hiQ4kA=="],
|
||||
"@rspack/cli": ["@rspack/cli@1.6.7", "", { "dependencies": { "@discoveryjs/json-ext": "^0.5.7", "@rspack/dev-server": "~1.1.4", "exit-hook": "^4.0.0", "webpack-bundle-analyzer": "4.10.2" }, "peerDependencies": { "@rspack/core": "^1.0.0-alpha || ^1.x" }, "bin": { "rspack": "bin/rspack.js" } }, "sha512-lWU4Gfw3HIysXnBuN1Ta43BeQHewoHd3MAzRlxmEYsUPxau26h6oTpL5WnLsT/Eh4G7XqnW1NJ8COujnn9EGfg=="],
|
||||
|
||||
"@rspack/core": ["@rspack/core@1.6.6", "", { "dependencies": { "@module-federation/runtime-tools": "0.21.6", "@rspack/binding": "1.6.6", "@rspack/lite-tapable": "1.1.0" }, "peerDependencies": { "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@swc/helpers"] }, "sha512-2mR+2YBydlgZ7Q0Rpd6bCC3MBnV9TS0x857K0zIhbDj4BQOqaWVy1n7fx/B3MrS8TR0QCuzKfyDAjNz+XTyJVQ=="],
|
||||
"@rspack/core": ["@rspack/core@1.6.7", "", { "dependencies": { "@module-federation/runtime-tools": "0.21.6", "@rspack/binding": "1.6.7", "@rspack/lite-tapable": "1.1.0" }, "peerDependencies": { "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@swc/helpers"] }, "sha512-tkd4nSzTf+pDa9OAE4INi/JEa93HNszjWy5C9+trf4ZCXLLHsHxHQFbzoreuz4Vv2PlCWajgvAdiPMV1vGIkuw=="],
|
||||
|
||||
"@rspack/dev-server": ["@rspack/dev-server@1.1.4", "", { "dependencies": { "chokidar": "^3.6.0", "http-proxy-middleware": "^2.0.9", "p-retry": "^6.2.0", "webpack-dev-server": "5.2.2", "ws": "^8.18.0" }, "peerDependencies": { "@rspack/core": "*" } }, "sha512-kGHYX2jYf3ZiHwVl0aUEPBOBEIG1aWleCDCAi+Jg32KUu3qr/zDUpCEd0wPuHfLEgk0X0xAEYCS6JMO7nBStNQ=="],
|
||||
|
||||
@@ -239,7 +239,7 @@
|
||||
|
||||
"@types/bonjour": ["@types/bonjour@3.5.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ=="],
|
||||
|
||||
"@types/bun": ["@types/bun@1.3.3", "", { "dependencies": { "bun-types": "1.3.3" } }, "sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g=="],
|
||||
"@types/bun": ["@types/bun@1.3.4", "", { "dependencies": { "bun-types": "1.3.4" } }, "sha512-EEPTKXHP+zKGPkhRLv+HI0UEX8/o+65hqARxLy8Ov5rIxMBPNTjeZww00CIihrIQGEQBYg+0roO5qOnS/7boGA=="],
|
||||
|
||||
"@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="],
|
||||
|
||||
@@ -359,7 +359,7 @@
|
||||
|
||||
"bufferstreams": ["bufferstreams@4.0.0", "", { "dependencies": { "readable-stream": "^3.4.0", "yerror": "^8.0.0" } }, "sha512-azX778/2VQ9K2uiYprSUKLgK2K6lR1KtJycJDsMg7u0+Cc994A9HyGaUKb01e/T+M8jse057429iKXurCaT35g=="],
|
||||
|
||||
"bun-types": ["bun-types@1.3.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ=="],
|
||||
"bun-types": ["bun-types@1.3.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-5ua817+BZPZOlNaRgGBpZJOSAQ9RQ17pkwPD0yR7CfJg+r8DgIILByFifDTa+IPDDxzf5VNhtNlcKqFzDgJvlQ=="],
|
||||
|
||||
"bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="],
|
||||
|
||||
@@ -471,7 +471,7 @@
|
||||
|
||||
"domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="],
|
||||
|
||||
"dompurify": ["dompurify@3.3.0", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ=="],
|
||||
"dompurify": ["dompurify@3.3.1", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q=="],
|
||||
|
||||
"domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="],
|
||||
|
||||
@@ -877,43 +877,43 @@
|
||||
|
||||
"sass": ["sass@1.93.3", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg=="],
|
||||
|
||||
"sass-embedded": ["sass-embedded@1.93.3", "", { "dependencies": { "@bufbuild/protobuf": "^2.5.0", "buffer-builder": "^0.2.0", "colorjs.io": "^0.5.0", "immutable": "^5.0.2", "rxjs": "^7.4.0", "supports-color": "^8.1.1", "sync-child-process": "^1.0.2", "varint": "^6.0.0" }, "optionalDependencies": { "sass-embedded-all-unknown": "1.93.3", "sass-embedded-android-arm": "1.93.3", "sass-embedded-android-arm64": "1.93.3", "sass-embedded-android-riscv64": "1.93.3", "sass-embedded-android-x64": "1.93.3", "sass-embedded-darwin-arm64": "1.93.3", "sass-embedded-darwin-x64": "1.93.3", "sass-embedded-linux-arm": "1.93.3", "sass-embedded-linux-arm64": "1.93.3", "sass-embedded-linux-musl-arm": "1.93.3", "sass-embedded-linux-musl-arm64": "1.93.3", "sass-embedded-linux-musl-riscv64": "1.93.3", "sass-embedded-linux-musl-x64": "1.93.3", "sass-embedded-linux-riscv64": "1.93.3", "sass-embedded-linux-x64": "1.93.3", "sass-embedded-unknown-all": "1.93.3", "sass-embedded-win32-arm64": "1.93.3", "sass-embedded-win32-x64": "1.93.3" }, "bin": { "sass": "dist/bin/sass.js" } }, "sha512-+VUy01yfDqNmIVMd/LLKl2TTtY0ovZN0rTonh+FhKr65mFwIYgU9WzgIZKS7U9/SPCQvWTsTGx9jyt+qRm/XFw=="],
|
||||
"sass-embedded": ["sass-embedded@1.95.1", "", { "dependencies": { "@bufbuild/protobuf": "^2.5.0", "buffer-builder": "^0.2.0", "colorjs.io": "^0.5.0", "immutable": "^5.0.2", "rxjs": "^7.4.0", "supports-color": "^8.1.1", "sync-child-process": "^1.0.2", "varint": "^6.0.0" }, "optionalDependencies": { "sass-embedded-all-unknown": "1.95.1", "sass-embedded-android-arm": "1.95.1", "sass-embedded-android-arm64": "1.95.1", "sass-embedded-android-riscv64": "1.95.1", "sass-embedded-android-x64": "1.95.1", "sass-embedded-darwin-arm64": "1.95.1", "sass-embedded-darwin-x64": "1.95.1", "sass-embedded-linux-arm": "1.95.1", "sass-embedded-linux-arm64": "1.95.1", "sass-embedded-linux-musl-arm": "1.95.1", "sass-embedded-linux-musl-arm64": "1.95.1", "sass-embedded-linux-musl-riscv64": "1.95.1", "sass-embedded-linux-musl-x64": "1.95.1", "sass-embedded-linux-riscv64": "1.95.1", "sass-embedded-linux-x64": "1.95.1", "sass-embedded-unknown-all": "1.95.1", "sass-embedded-win32-arm64": "1.95.1", "sass-embedded-win32-x64": "1.95.1" }, "bin": { "sass": "dist/bin/sass.js" } }, "sha512-l086+s40Z0qP7ckj4T+rI/7tZcwAfcKCG9ah9A808yINWOxZFv0kO0u/UHhR4G9Aimeyax/JNvqh8RE7z1wngg=="],
|
||||
|
||||
"sass-embedded-all-unknown": ["sass-embedded-all-unknown@1.93.3", "", { "dependencies": { "sass": "1.93.3" }, "cpu": [ "!arm", "!x64", "!arm64", ] }, "sha512-3okGgnE41eg+CPLtAPletu6nQ4N0ij7AeW+Sl5Km4j29XcmqZQeFwYjHe1AlKTEgLi/UAONk1O8i8/lupeKMbw=="],
|
||||
"sass-embedded-all-unknown": ["sass-embedded-all-unknown@1.95.1", "", { "dependencies": { "sass": "1.95.1" }, "cpu": [ "!arm", "!x64", "!arm64", ] }, "sha512-ObGM3xSHEK2fu89GusvAdk1hId3D1R03CyQ6/AVTFSrcBFav1a3aWUmBWtImzf5LsVzliRnlAPPS6+rT/Ghb1A=="],
|
||||
|
||||
"sass-embedded-android-arm": ["sass-embedded-android-arm@1.93.3", "", { "os": "android", "cpu": "arm" }, "sha512-8xOw9bywfOD6Wv24BgCmgjkk6tMrsOTTHcb28KDxeJtFtoxiUyMbxo0vChpPAfp2Hyg2tFFKS60s0s4JYk+Raw=="],
|
||||
"sass-embedded-android-arm": ["sass-embedded-android-arm@1.95.1", "", { "os": "android", "cpu": "arm" }, "sha512-siaN1TVEjhBP4QJ5UlDBRhyKmMbFhbdcyHj0B4hIuNcinuVprP6tH1NT0NkHvkXh2egBmTvjzZgJ1ySsCB32JA=="],
|
||||
|
||||
"sass-embedded-android-arm64": ["sass-embedded-android-arm64@1.93.3", "", { "os": "android", "cpu": "arm64" }, "sha512-uqUl3Kt1IqdGVAcAdbmC+NwuUJy8tM+2ZnB7/zrt6WxWVShVCRdFnWR9LT8HJr7eJN7AU8kSXxaVX/gedanPsg=="],
|
||||
"sass-embedded-android-arm64": ["sass-embedded-android-arm64@1.95.1", "", { "os": "android", "cpu": "arm64" }, "sha512-E+3vZXhUOVHFiSITH2g53/ynxTG4zz8vTVrXGAKkZQwSe6aCO22uc1Pah23F3jOrDNF/YLrsyp82T/CIIczK3w=="],
|
||||
|
||||
"sass-embedded-android-riscv64": ["sass-embedded-android-riscv64@1.93.3", "", { "os": "android", "cpu": "none" }, "sha512-2jNJDmo+3qLocjWqYbXiBDnfgwrUeZgZFHJIwAefU7Fn66Ot7rsXl+XPwlokaCbTpj7eMFIqsRAZ/uDueXNCJg=="],
|
||||
"sass-embedded-android-riscv64": ["sass-embedded-android-riscv64@1.95.1", "", { "os": "android", "cpu": "none" }, "sha512-UcPcr5JXVtInD+/XE+2DhwPsALUdRAHyippnnAP6MtdaT3+AnqqvzSVy9Gb6SKyeqEk4YxPmIlQpZCVODDT4eA=="],
|
||||
|
||||
"sass-embedded-android-x64": ["sass-embedded-android-x64@1.93.3", "", { "os": "android", "cpu": "x64" }, "sha512-y0RoAU6ZenQFcjM9PjQd3cRqRTjqwSbtWLL/p68y2oFyh0QGN0+LQ826fc0ZvU/AbqCsAizkqjzOn6cRZJxTTQ=="],
|
||||
"sass-embedded-android-x64": ["sass-embedded-android-x64@1.95.1", "", { "os": "android", "cpu": "x64" }, "sha512-sW/TO+B0Wq9VDTa7YiO74DW4iF9jEYds+9yslaHtc69r/Ch+Zj+ZB6HeJysfmen91zn5CLJDGrnTSrIk+/COfQ=="],
|
||||
|
||||
"sass-embedded-darwin-arm64": ["sass-embedded-darwin-arm64@1.93.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-7zb/hpdMOdKteK17BOyyypemglVURd1Hdz6QGsggy60aUFfptTLQftLRg8r/xh1RbQAUKWFbYTNaM47J9yPxYg=="],
|
||||
"sass-embedded-darwin-arm64": ["sass-embedded-darwin-arm64@1.95.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-SWTCwszlBzjin35T2OiGZSDRbC/sqg5Mjepih18lelELrz14eB9LcFTZeiqDfdnwx6qQqPWj2VufCpExr8jElA=="],
|
||||
|
||||
"sass-embedded-darwin-x64": ["sass-embedded-darwin-x64@1.93.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ek1Vp8ZDQEe327Lz0b7h3hjvWH3u9XjJiQzveq74RPpJQ2q6d9LfWpjiRRohM4qK6o4XOHw1X10OMWPXJtdtWg=="],
|
||||
"sass-embedded-darwin-x64": ["sass-embedded-darwin-x64@1.95.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-0GZEgkE1e8E2h97lUtwgZbKHrJYmRE/KhWQBHv6ZueAto8DJcAFNFrIQiQoRJjraE6QTaw6ahSvc1YJ7gL4OQA=="],
|
||||
|
||||
"sass-embedded-linux-arm": ["sass-embedded-linux-arm@1.93.3", "", { "os": "linux", "cpu": "arm" }, "sha512-yeiv2y+dp8B4wNpd3+JsHYD0mvpXSfov7IGyQ1tMIR40qv+ROkRqYiqQvAOXf76Qwh4Y9OaYZtLpnsPjfeq6mA=="],
|
||||
"sass-embedded-linux-arm": ["sass-embedded-linux-arm@1.95.1", "", { "os": "linux", "cpu": "arm" }, "sha512-zUAm/rztm5Uyy+DSs408VJg404siVgUuZyqId4tFwkPNC5WRKu25Z8bFMriyGaE4YfEqbNwFV07C16mJoGeVOA=="],
|
||||
|
||||
"sass-embedded-linux-arm64": ["sass-embedded-linux-arm64@1.93.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-RBrHWgfd8Dd8w4fbmdRVXRrhh8oBAPyeWDTKAWw8ZEmuXfVl4ytjDuyxaVilh6rR1xTRTNpbaA/YWApBlLrrNw=="],
|
||||
"sass-embedded-linux-arm64": ["sass-embedded-linux-arm64@1.95.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-MQxa+qVX7Os2rMpJ/AvhWup+1cS0JieQgCfi9cz1Zckn4zaUhg35+m2FQhfKvzv4afeW5bubTMOQeTRMQujbXw=="],
|
||||
|
||||
"sass-embedded-linux-musl-arm": ["sass-embedded-linux-musl-arm@1.93.3", "", { "os": "linux", "cpu": "arm" }, "sha512-fU0fwAwbp7sBE3h5DVU5UPzvaLg7a4yONfFWkkcCp6ZrOiPuGRHXXYriWQ0TUnWy4wE+svsVuWhwWgvlb/tkKg=="],
|
||||
"sass-embedded-linux-musl-arm": ["sass-embedded-linux-musl-arm@1.95.1", "", { "os": "linux", "cpu": "arm" }, "sha512-gNdaGmM3nZ0jkFNmyXWyNlXZPdaMP+7n5Mk3yGFGShqRt/6T/bHh5SkyNnU2ZdP1z7R9poPItJhULrZJ42ETeA=="],
|
||||
|
||||
"sass-embedded-linux-musl-arm64": ["sass-embedded-linux-musl-arm64@1.93.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-PS829l+eUng+9W4PFclXGb4uA2+965NHV3/Sa5U7qTywjeeUUYTZg70dJHSqvhrBEfCc2XJABeW3adLJbyQYkw=="],
|
||||
"sass-embedded-linux-musl-arm64": ["sass-embedded-linux-musl-arm64@1.95.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-8lD5vHGzBjBRCMIr9CXCyjmy8Q1q+H4ygcYCIm/aPNYhrm9uPOzJfs8hv9kDRgRAASFkcPGlFw8tDH4QqiJ5wg=="],
|
||||
|
||||
"sass-embedded-linux-musl-riscv64": ["sass-embedded-linux-musl-riscv64@1.93.3", "", { "os": "linux", "cpu": "none" }, "sha512-cK1oBY+FWQquaIGEeQ5H74KTO8cWsSWwXb/WaildOO9U6wmUypTgUYKQ0o5o/29nZbWWlM1PHuwVYTSnT23Jjg=="],
|
||||
"sass-embedded-linux-musl-riscv64": ["sass-embedded-linux-musl-riscv64@1.95.1", "", { "os": "linux", "cpu": "none" }, "sha512-WjKfHxnFc/jOL5QtmgYuiWCc4616V15DkpE+7z41JWEawRXku6w++w7AR+Zx/jbz93FZ/AsZp27IS3XUt80u3Q=="],
|
||||
|
||||
"sass-embedded-linux-musl-x64": ["sass-embedded-linux-musl-x64@1.93.3", "", { "os": "linux", "cpu": "x64" }, "sha512-A7wkrsHu2/I4Zpa0NMuPGkWDVV7QGGytxGyUq3opSXgAexHo/vBPlGoDXoRlSdex0cV+aTMRPjoGIfdmNlHwyg=="],
|
||||
"sass-embedded-linux-musl-x64": ["sass-embedded-linux-musl-x64@1.95.1", "", { "os": "linux", "cpu": "x64" }, "sha512-3U6994SRUUmC8mPvSG/vNLUo2ZcGv3jHuPoBywTbJhGQI8gq0hef1MY8TU5mvtj9DhQYlah6MYktM4YrOQgqcQ=="],
|
||||
|
||||
"sass-embedded-linux-riscv64": ["sass-embedded-linux-riscv64@1.93.3", "", { "os": "linux", "cpu": "none" }, "sha512-vWkW1+HTF5qcaHa6hO80gx/QfB6GGjJUP0xLbnAoY4pwEnw5ulGv6RM8qYr8IDhWfVt/KH+lhJ2ZFxnJareisQ=="],
|
||||
"sass-embedded-linux-riscv64": ["sass-embedded-linux-riscv64@1.95.1", "", { "os": "linux", "cpu": "none" }, "sha512-CJ0tEEQnfpJEMCQrdubLsmuVc/c66EgaCAO0ZgSJ/KpxBKF3O1lHN6e1UErRf6VO0rh8ExAOh75po12Vu849Og=="],
|
||||
|
||||
"sass-embedded-linux-x64": ["sass-embedded-linux-x64@1.93.3", "", { "os": "linux", "cpu": "x64" }, "sha512-k6uFxs+e5jSuk1Y0niCwuq42F9ZC5UEP7P+RIOurIm8w/5QFa0+YqeW+BPWEW5M1FqVOsNZH3qGn4ahqvAEjPA=="],
|
||||
"sass-embedded-linux-x64": ["sass-embedded-linux-x64@1.95.1", "", { "os": "linux", "cpu": "x64" }, "sha512-nGnzrEpZZOsGOwrRVyX4t15M8ijZWhc4e4lLpOqaPm+lv23HFncfY05WxU5bRj0KAknrkeTM2IX/6veP2aeUdA=="],
|
||||
|
||||
"sass-embedded-unknown-all": ["sass-embedded-unknown-all@1.93.3", "", { "dependencies": { "sass": "1.93.3" }, "os": [ "!linux", "!win32", "!darwin", "!android", ] }, "sha512-o5wj2rLpXH0C+GJKt/VpWp6AnMsCCbfFmnMAttcrsa+U3yrs/guhZ3x55KAqqUsE8F47e3frbsDL+1OuQM5DAA=="],
|
||||
"sass-embedded-unknown-all": ["sass-embedded-unknown-all@1.95.1", "", { "dependencies": { "sass": "1.95.1" }, "os": [ "!linux", "!win32", "!darwin", "!android", ] }, "sha512-bhywAcadVQoCotD4gVmyMBi2SENPvyLFPrXf33VK5mY487Nf/g5SgGCUuGmfTsbns4NBwbwR7PA/1fnJmeMtdA=="],
|
||||
|
||||
"sass-embedded-win32-arm64": ["sass-embedded-win32-arm64@1.93.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-0dOfT9moy9YmBolodwYYXtLwNr4jL4HQC9rBfv6mVrD7ud8ue2kDbn+GVzj1hEJxvEexVSmDCf7MHUTLcGs9xQ=="],
|
||||
"sass-embedded-win32-arm64": ["sass-embedded-win32-arm64@1.95.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-RWWODCthWdMVODoq98lyIk9R56mgGJ4TFUjD9LSCe7fAYD/tiTkUabE4AUzkZqknQSYr0n0Q2uy7POSDIKvhVg=="],
|
||||
|
||||
"sass-embedded-win32-x64": ["sass-embedded-win32-x64@1.93.3", "", { "os": "win32", "cpu": "x64" }, "sha512-wHFVfxiS9hU/sNk7KReD+lJWRp3R0SLQEX4zfOnRP2zlvI2X4IQR5aZr9GNcuMP6TmNpX0nQPZTegS8+h9RrEg=="],
|
||||
"sass-embedded-win32-x64": ["sass-embedded-win32-x64@1.95.1", "", { "os": "win32", "cpu": "x64" }, "sha512-jotHgOQnCb1XdjK0fhsyuhsfox7Y5EkrOc4h2caEpRcNCnsPTBZHqhuc8Lnw8HbKIhwKYkqWhexkjgz62MShhg=="],
|
||||
|
||||
"sass-loader": ["sass-loader@16.0.6", "", { "dependencies": { "neo-async": "^2.6.2" }, "peerDependencies": { "@rspack/core": "0.x || 1.x", "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "sass": "^1.3.0", "sass-embedded": "*", "webpack": "^5.0.0" }, "optionalPeers": ["@rspack/core", "node-sass", "sass", "sass-embedded", "webpack"] }, "sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA=="],
|
||||
|
||||
@@ -1021,7 +1021,7 @@
|
||||
|
||||
"tgui": ["tgui@workspace:packages/tgui"],
|
||||
|
||||
"tgui-core": ["tgui-core@5.4.1", "", { "dependencies": { "@floating-ui/react": "^0.27.16", "@nozbe/microfuzz": "^1.0.0" }, "peerDependencies": { "react": "^19.1.0", "react-dom": "^19.1.0" } }, "sha512-L897NbtiR/ORAP3XdVDiJPoLH+vsKGPE4Miq92pvtJ5RaojT5eBPq9GVMQwgCv5g812bGuCn83ntvBoVM8/TRA=="],
|
||||
"tgui-core": ["tgui-core@5.5.10", "", { "dependencies": { "@floating-ui/react": "^0.27.16", "@nozbe/microfuzz": "^1.0.0" }, "peerDependencies": { "react": "^19.1.0", "react-dom": "^19.1.0" } }, "sha512-/LrZOS9BXSGItzNWzqGpQSo+5BmXQiydbc95+vJGpO/44bW9PqZ2/AnyvP6JCSbBhHT/PQSGVJscJcBnqB+eiA=="],
|
||||
|
||||
"tgui-dev-server": ["tgui-dev-server@workspace:packages/tgui-dev-server"],
|
||||
|
||||
@@ -1199,6 +1199,10 @@
|
||||
|
||||
"sass/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
|
||||
|
||||
"sass-embedded-all-unknown/sass": ["sass@1.95.1", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-uPoDh5NIEZV4Dp5GBodkmNY9tSQfXY02pmCcUo+FR1P+x953HGkpw+vV28D4IqYB6f8webZtwoSaZaiPtpTeMg=="],
|
||||
|
||||
"sass-embedded-unknown-all/sass": ["sass@1.95.1", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-uPoDh5NIEZV4Dp5GBodkmNY9tSQfXY02pmCcUo+FR1P+x953HGkpw+vV28D4IqYB6f8webZtwoSaZaiPtpTeMg=="],
|
||||
|
||||
"send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="],
|
||||
|
||||
"send/http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="],
|
||||
@@ -1263,6 +1267,10 @@
|
||||
|
||||
"node-gyp/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
|
||||
|
||||
"sass-embedded-all-unknown/sass/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
|
||||
|
||||
"sass-embedded-unknown-all/sass/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
|
||||
|
||||
"sass/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
||||
|
||||
"send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="],
|
||||
@@ -1295,6 +1303,10 @@
|
||||
|
||||
"node-gyp/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
|
||||
|
||||
"sass-embedded-all-unknown/sass/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
||||
|
||||
"sass-embedded-unknown-all/sass/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
||||
|
||||
"serve-static/send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="],
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -16,15 +16,15 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@happy-dom/global-registrator": "^17.6.3",
|
||||
"@rspack/cli": "^1.6.6",
|
||||
"@rspack/core": "^1.6.6",
|
||||
"@types/bun": "^1.3.3",
|
||||
"@rspack/cli": "^1.6.7",
|
||||
"@rspack/core": "^1.6.7",
|
||||
"@types/bun": "^1.3.4",
|
||||
"@types/react": "^19.2.7",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/webpack-env": "^1.18.8",
|
||||
"@types/wicg-file-system-access": "^2023.10.7",
|
||||
"css-loader": "^7.1.2",
|
||||
"sass-embedded": "^1.93.3",
|
||||
"sass-embedded": "^1.95.1",
|
||||
"sass-loader": "^16.0.6",
|
||||
"typescript": "^5.9.3"
|
||||
}
|
||||
|
||||
@@ -1,252 +1,3 @@
|
||||
/*
|
||||
* MIT License
|
||||
* https://github.com/omgovich/react-colorful/
|
||||
*
|
||||
* Copyright (c) 2020 Vlad Shilov <omgovich@ya.ru>
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
const round = (number: number, digits = 0, base = 10 ** digits): number => {
|
||||
return Math.round(base * number) / base;
|
||||
};
|
||||
export interface RgbColor {
|
||||
r: number;
|
||||
g: number;
|
||||
b: number;
|
||||
}
|
||||
export interface RgbaColor extends RgbColor {
|
||||
a: number;
|
||||
}
|
||||
export interface HslColor {
|
||||
h: number;
|
||||
s: number;
|
||||
l: number;
|
||||
}
|
||||
export interface HslaColor extends HslColor {
|
||||
a: number;
|
||||
}
|
||||
export interface HsvColor {
|
||||
h: number;
|
||||
s: number;
|
||||
v: number;
|
||||
}
|
||||
export interface HsvaColor extends HsvColor {
|
||||
a: number;
|
||||
}
|
||||
export type ObjectColor =
|
||||
| RgbColor
|
||||
| HslColor
|
||||
| HsvColor
|
||||
| RgbaColor
|
||||
| HslaColor
|
||||
| HsvaColor;
|
||||
export type AnyColor = string | ObjectColor;
|
||||
/**
|
||||
* Valid CSS <angle> units.
|
||||
* https://developer.mozilla.org/en-US/docs/Web/CSS/angle
|
||||
*/
|
||||
const angleUnits: Record<string, number> = {
|
||||
grad: 360 / 400,
|
||||
turn: 360,
|
||||
rad: 360 / (Math.PI * 2),
|
||||
};
|
||||
export const hexToHsva = (hex: string): HsvaColor => rgbaToHsva(hexToRgba(hex));
|
||||
export const hexToRgba = (hex: string): RgbaColor => {
|
||||
if (hex[0] === '#') hex = hex.substring(1);
|
||||
if (hex.length < 6) {
|
||||
return {
|
||||
r: parseInt(hex[0] + hex[0], 16),
|
||||
g: parseInt(hex[1] + hex[1], 16),
|
||||
b: parseInt(hex[2] + hex[2], 16),
|
||||
a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1,
|
||||
};
|
||||
}
|
||||
return {
|
||||
r: parseInt(hex.substring(0, 2), 16),
|
||||
g: parseInt(hex.substring(2, 4), 16),
|
||||
b: parseInt(hex.substring(4, 6), 16),
|
||||
a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1,
|
||||
};
|
||||
};
|
||||
export const parseHue = (value: string, unit = 'deg'): number => {
|
||||
return Number(value) * (angleUnits[unit] || 1);
|
||||
};
|
||||
export const hslaStringToHsva = (hslString: string): HsvaColor => {
|
||||
const matcher =
|
||||
/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
||||
const match = matcher.exec(hslString);
|
||||
if (!match) return { h: 0, s: 0, v: 0, a: 1 };
|
||||
return hslaToHsva({
|
||||
h: parseHue(match[1], match[2]),
|
||||
s: Number(match[3]),
|
||||
l: Number(match[4]),
|
||||
a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),
|
||||
});
|
||||
};
|
||||
export const hslStringToHsva = hslaStringToHsva;
|
||||
export const hslaToHsva = ({ h, s, l, a }: HslaColor): HsvaColor => {
|
||||
s *= (l < 50 ? l : 100 - l) / 100;
|
||||
return {
|
||||
h: h,
|
||||
s: s > 0 ? ((2 * s) / (l + s)) * 100 : 0,
|
||||
v: l + s,
|
||||
a,
|
||||
};
|
||||
};
|
||||
export const hsvaToHex = (hsva: HsvaColor): string =>
|
||||
rgbaToHex(hsvaToRgba(hsva));
|
||||
export const hsvaToHsla = ({ h, s, v, a }: HsvaColor): HslaColor => {
|
||||
const hh = ((200 - s) * v) / 100;
|
||||
return {
|
||||
h: round(h),
|
||||
s: round(
|
||||
hh > 0 && hh < 200
|
||||
? ((s * v) / 100 / (hh <= 100 ? hh : 200 - hh)) * 100
|
||||
: 0,
|
||||
),
|
||||
l: round(hh / 2),
|
||||
a: round(a, 2),
|
||||
};
|
||||
};
|
||||
export const hsvaToHslString = (hsva: HsvaColor): string => {
|
||||
const { h, s, l } = hsvaToHsla(hsva);
|
||||
return `hsl(${h}, ${s}%, ${l}%)`;
|
||||
};
|
||||
export const hsvaToHsvString = (hsva: HsvaColor): string => {
|
||||
const { h, s, v } = roundHsva(hsva);
|
||||
return `hsv(${h}, ${s}%, ${v}%)`;
|
||||
};
|
||||
export const hsvaToHsvaString = (hsva: HsvaColor): string => {
|
||||
const { h, s, v, a } = roundHsva(hsva);
|
||||
return `hsva(${h}, ${s}%, ${v}%, ${a})`;
|
||||
};
|
||||
export const hsvaToHslaString = (hsva: HsvaColor): string => {
|
||||
const { h, s, l, a } = hsvaToHsla(hsva);
|
||||
return `hsla(${h}, ${s}%, ${l}%, ${a})`;
|
||||
};
|
||||
export const hsvaToRgba = ({ h, s, v, a }: HsvaColor): RgbaColor => {
|
||||
h = (h / 360) * 6;
|
||||
s = s / 100;
|
||||
v = v / 100;
|
||||
const hh = Math.floor(h),
|
||||
b = v * (1 - s),
|
||||
c = v * (1 - (h - hh) * s),
|
||||
d = v * (1 - (1 - h + hh) * s),
|
||||
module = hh % 6;
|
||||
return {
|
||||
r: [v, c, b, b, d, v][module] * 255,
|
||||
g: [d, v, v, c, b, b][module] * 255,
|
||||
b: [b, b, d, v, v, c][module] * 255,
|
||||
a: round(a, 2),
|
||||
};
|
||||
};
|
||||
export const hsvaToRgbString = (hsva: HsvaColor): string => {
|
||||
const { r, g, b } = hsvaToRgba(hsva);
|
||||
return `rgb(${round(r)}, ${round(g)}, ${round(b)})`;
|
||||
};
|
||||
export const hsvaToRgbaString = (hsva: HsvaColor): string => {
|
||||
const { r, g, b, a } = hsvaToRgba(hsva);
|
||||
return `rgba(${round(r)}, ${round(g)}, ${round(b)}, ${round(a, 2)})`;
|
||||
};
|
||||
export const hsvaStringToHsva = (hsvString: string): HsvaColor => {
|
||||
const matcher =
|
||||
/hsva?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
||||
const match = matcher.exec(hsvString);
|
||||
if (!match) return { h: 0, s: 0, v: 0, a: 1 };
|
||||
return roundHsva({
|
||||
h: parseHue(match[1], match[2]),
|
||||
s: Number(match[3]),
|
||||
v: Number(match[4]),
|
||||
a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),
|
||||
});
|
||||
};
|
||||
export const hsvStringToHsva = hsvaStringToHsva;
|
||||
export const rgbaStringToHsva = (rgbaString: string): HsvaColor => {
|
||||
const matcher =
|
||||
/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
||||
const match = matcher.exec(rgbaString);
|
||||
if (!match) return { h: 0, s: 0, v: 0, a: 1 };
|
||||
return rgbaToHsva({
|
||||
r: Number(match[1]) / (match[2] ? 100 / 255 : 1),
|
||||
g: Number(match[3]) / (match[4] ? 100 / 255 : 1),
|
||||
b: Number(match[5]) / (match[6] ? 100 / 255 : 1),
|
||||
a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? 100 : 1),
|
||||
});
|
||||
};
|
||||
export const rgbStringToHsva = rgbaStringToHsva;
|
||||
const format = (number: number) => {
|
||||
const hex = number.toString(16);
|
||||
return hex.length < 2 ? `0${hex}` : hex;
|
||||
};
|
||||
export const rgbaToHex = ({ r, g, b, a }: RgbaColor): string => {
|
||||
const alphaHex = a < 1 ? format(round(a * 255)) : '';
|
||||
return `#${format(round(r))}${format(round(g))}${format(round(b))}${alphaHex}`;
|
||||
};
|
||||
export const rgbaToHsva = ({ r, g, b, a }: RgbaColor): HsvaColor => {
|
||||
const max = Math.max(r, g, b);
|
||||
const delta = max - Math.min(r, g, b);
|
||||
// prettier-ignore
|
||||
const hh = delta
|
||||
? max === r
|
||||
? (g - b) / delta
|
||||
: max === g
|
||||
? 2 + (b - r) / delta
|
||||
: 4 + (r - g) / delta
|
||||
: 0;
|
||||
return {
|
||||
h: 60 * (hh < 0 ? hh + 6 : hh),
|
||||
s: max ? (delta / max) * 100 : 0,
|
||||
v: (max / 255) * 100,
|
||||
a,
|
||||
};
|
||||
};
|
||||
export const roundHsva = (hsva: HsvaColor): HsvaColor => ({
|
||||
h: round(hsva.h),
|
||||
s: round(hsva.s),
|
||||
v: round(hsva.v),
|
||||
a: round(hsva.a, 2),
|
||||
});
|
||||
export const rgbaToRgb = ({ r, g, b }: RgbaColor): RgbColor => ({ r, g, b });
|
||||
export const hslaToHsl = ({ h, s, l }: HslaColor): HslColor => ({ h, s, l });
|
||||
export const hsvaToHsv = (hsva: HsvaColor): HsvColor => {
|
||||
const { h, s, v } = roundHsva(hsva);
|
||||
return { h, s, v };
|
||||
};
|
||||
const hexMatcher = /^#?([0-9A-F]{3,8})$/i;
|
||||
export const validHex = (value: string, alpha?: boolean): boolean => {
|
||||
const match = hexMatcher.exec(value);
|
||||
const length = match ? match[1].length : 0;
|
||||
return (
|
||||
length === 3 || // '#rgb' format
|
||||
length === 6 || // '#rrggbb' format
|
||||
(!!alpha && length === 4) || // '#rgba' format
|
||||
(!!alpha && length === 8) // '#rrggbbaa' format
|
||||
);
|
||||
};
|
||||
// Source for the following luminance and contrast calculation code: https://blog.cristiana.tech/calculating-color-contrast-in-typescript-using-web-content-accessibility-guidelines-wcag
|
||||
export const luminance = (rgb: RgbColor): number => {
|
||||
const [r, g, b] = [rgb.r, rgb.g, rgb.b].map((v) => {
|
||||
v /= 255;
|
||||
return v <= 0.03928 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4;
|
||||
});
|
||||
return r * 0.2126 + g * 0.7152 + b * 0.0722;
|
||||
};
|
||||
export const contrast = (
|
||||
foreground: RgbColor,
|
||||
background: RgbColor,
|
||||
): number => {
|
||||
const foreground_luminance = luminance(foreground);
|
||||
const background_luminance = luminance(background);
|
||||
return background_luminance < foreground_luminance
|
||||
? (background_luminance + 0.05) / (foreground_luminance + 0.05)
|
||||
: (foreground_luminance + 0.05) / (background_luminance + 0.05);
|
||||
};
|
||||
|
||||
export const colorList = [
|
||||
['003366', '336699', '3366CC', '003399', '000099', '0000CC', '000066'],
|
||||
[
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
"version": "6.0.0",
|
||||
"dependencies": {
|
||||
"common": "workspace:*",
|
||||
"dompurify": "^3.3.0",
|
||||
"dompurify": "^3.3.1",
|
||||
"es-toolkit": "^1.42.0",
|
||||
"react": "^19.2.1",
|
||||
"react-dom": "^19.2.1",
|
||||
"tgui": "workspace:*",
|
||||
"tgui-core": "^5.4.1",
|
||||
"tgui-core": "^5.5.10",
|
||||
"tgui-dev-server": "workspace:*"
|
||||
},
|
||||
"private": true
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"react": "^19.2.1",
|
||||
"react-dom": "^19.2.1",
|
||||
"tgui": "workspace:*",
|
||||
"tgui-core": "^5.4.1"
|
||||
"tgui-core": "^5.5.10"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
|
||||
@@ -1,143 +0,0 @@
|
||||
/**
|
||||
* MIT License
|
||||
* https://github.com/omgovich/react-colorful/
|
||||
*
|
||||
* Copyright (c) 2020 Vlad Shilov <omgovich@ya.ru>
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
import React, {
|
||||
Component,
|
||||
createRef,
|
||||
type ReactNode,
|
||||
type RefObject,
|
||||
} from 'react';
|
||||
import { isArrow, KEY } from 'tgui-core/keys';
|
||||
import { clamp } from 'tgui-core/math';
|
||||
|
||||
export interface Interaction {
|
||||
left: number;
|
||||
top: number;
|
||||
}
|
||||
|
||||
// Finds the proper window object to fix iframe embedding issues
|
||||
const getParentWindow = (node?: HTMLDivElement | null): Window => {
|
||||
return node?.ownerDocument.defaultView || window;
|
||||
};
|
||||
|
||||
// Returns a relative position of the pointer inside the node's bounding box
|
||||
const getRelativePosition = (
|
||||
node: HTMLDivElement,
|
||||
event: MouseEvent,
|
||||
): Interaction => {
|
||||
const rect = node.getBoundingClientRect();
|
||||
const parentWindow = getParentWindow(node);
|
||||
|
||||
const offsetX = event.pageX - (rect.left + parentWindow.scrollX);
|
||||
const offsetY = event.pageY - (rect.top + parentWindow.scrollY);
|
||||
|
||||
return {
|
||||
left: clamp(offsetX / rect.width, 0, 1),
|
||||
top: clamp(offsetY / rect.height, 0, 1),
|
||||
};
|
||||
};
|
||||
|
||||
export interface InteractiveProps {
|
||||
onMove: (interaction: Interaction) => void;
|
||||
onKey: (offset: Interaction) => void;
|
||||
children: ReactNode;
|
||||
style?: React.CSSProperties;
|
||||
}
|
||||
|
||||
export class Interactive extends Component<InteractiveProps> {
|
||||
containerRef: RefObject<HTMLDivElement | null>;
|
||||
|
||||
constructor(props: InteractiveProps) {
|
||||
super(props);
|
||||
this.containerRef = createRef();
|
||||
}
|
||||
|
||||
handleMoveStart = (event: React.MouseEvent<HTMLDivElement>) => {
|
||||
const el = this.containerRef?.current;
|
||||
if (!el) return;
|
||||
|
||||
// Prevent text selection
|
||||
event.preventDefault();
|
||||
el.focus();
|
||||
this.props.onMove(getRelativePosition(el, event.nativeEvent));
|
||||
this.toggleDocumentEvents(true);
|
||||
};
|
||||
|
||||
handleMove = (event: MouseEvent) => {
|
||||
event.preventDefault();
|
||||
|
||||
const isDown = event.buttons > 0;
|
||||
|
||||
if (isDown && this.containerRef?.current) {
|
||||
this.props.onMove(getRelativePosition(this.containerRef.current, event));
|
||||
} else {
|
||||
this.toggleDocumentEvents(false);
|
||||
}
|
||||
};
|
||||
|
||||
handleMoveEnd = () => {
|
||||
this.toggleDocumentEvents(false);
|
||||
};
|
||||
|
||||
handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {
|
||||
const pressedKey = event.key;
|
||||
|
||||
if (!isArrow(pressedKey)) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
this.props.onKey({
|
||||
left:
|
||||
pressedKey === KEY.Right ? 0.05 : pressedKey === KEY.Left ? -0.05 : 0,
|
||||
top: pressedKey === KEY.Down ? 0.05 : pressedKey === KEY.Up ? -0.05 : 0,
|
||||
});
|
||||
};
|
||||
|
||||
toggleDocumentEvents(state?: boolean) {
|
||||
const el = this.containerRef?.current;
|
||||
const parentWindow = getParentWindow(el);
|
||||
|
||||
const toggleEvent = state
|
||||
? parentWindow.addEventListener
|
||||
: parentWindow.removeEventListener;
|
||||
toggleEvent('mousemove', this.handleMove);
|
||||
toggleEvent('mouseup', this.handleMoveEnd);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.toggleDocumentEvents(true);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.toggleDocumentEvents(false);
|
||||
}
|
||||
|
||||
render() {
|
||||
const { style, children, ...rest } = this.props;
|
||||
return (
|
||||
<div
|
||||
{...rest}
|
||||
style={style}
|
||||
ref={this.containerRef}
|
||||
onMouseDown={this.handleMoveStart}
|
||||
className="react-colorful__interactive"
|
||||
onKeyDown={this.handleKeyDown}
|
||||
tabIndex={0}
|
||||
role="slider"
|
||||
>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
/**
|
||||
* MIT License
|
||||
* https://github.com/omgovich/react-colorful/
|
||||
*
|
||||
* Copyright (c) 2020 Vlad Shilov <omgovich@ya.ru>
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
import type React from 'react';
|
||||
import { classes } from 'tgui-core/react';
|
||||
|
||||
interface PointerProps {
|
||||
className?: string;
|
||||
top?: number;
|
||||
left: number;
|
||||
color: string;
|
||||
}
|
||||
|
||||
export const Pointer: React.FC<PointerProps> = ({
|
||||
className,
|
||||
color,
|
||||
left,
|
||||
top = 0.5,
|
||||
}) => {
|
||||
const nodeClassName = classes(['react-colorful__pointer', className]);
|
||||
|
||||
const style = {
|
||||
top: `${top * 100}%`,
|
||||
left: `${left * 100}%`,
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={nodeClassName} style={style}>
|
||||
<div
|
||||
className="react-colorful__pointer-fill"
|
||||
style={{ backgroundColor: color }}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -4,6 +4,4 @@
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
export { Interactive } from './Interactive';
|
||||
export { NanoMap } from './NanoMap';
|
||||
export { Pointer } from './Pointer';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { type HsvaColor, hexToHsva, hsvaToHex } from 'common/colorpicker';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { type HsvaColor, hexToHsva, hsvaToHex } from 'tgui-core/color';
|
||||
import { Box, Floating } from 'tgui-core/components';
|
||||
import { ColorSelector } from '../../ColorPickerModal';
|
||||
|
||||
|
||||
@@ -4,8 +4,18 @@
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
import { colorList } from 'common/colorpicker';
|
||||
import React, {
|
||||
useCallback,
|
||||
useEffect,
|
||||
useEffectEvent,
|
||||
useMemo,
|
||||
useRef,
|
||||
useState,
|
||||
} from 'react';
|
||||
import { useBackend } from 'tgui/backend';
|
||||
import { Window } from 'tgui/layouts';
|
||||
import {
|
||||
colorList,
|
||||
type HsvaColor,
|
||||
hexToHsva,
|
||||
hsvaToHex,
|
||||
@@ -13,24 +23,16 @@ import {
|
||||
hsvaToRgba,
|
||||
rgbaToHsva,
|
||||
validHex,
|
||||
} from 'common/colorpicker';
|
||||
import React, {
|
||||
useCallback,
|
||||
useEffect,
|
||||
useEffectEvent,
|
||||
useMemo,
|
||||
useState,
|
||||
} from 'react';
|
||||
import { useBackend } from 'tgui/backend';
|
||||
import { Pointer } from 'tgui/components';
|
||||
import { type Interaction, Interactive } from 'tgui/components/Interactive';
|
||||
import { Window } from 'tgui/layouts';
|
||||
} from 'tgui-core/color';
|
||||
import {
|
||||
Autofocus,
|
||||
Box,
|
||||
Button,
|
||||
Input,
|
||||
type Interaction,
|
||||
Interactive,
|
||||
NumberInput,
|
||||
Pointer,
|
||||
Section,
|
||||
Stack,
|
||||
Tooltip,
|
||||
@@ -668,6 +670,7 @@ const SaturationValue: React.FC<SaturationValueProps> = React.memo(
|
||||
}),
|
||||
[hsva.h],
|
||||
);
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
return (
|
||||
<div className="react-colorful__saturation_value" style={containerStyle}>
|
||||
@@ -678,6 +681,7 @@ const SaturationValue: React.FC<SaturationValueProps> = React.memo(
|
||||
aria-valuetext={`Saturation ${Math.round(
|
||||
hsva.s,
|
||||
)}%, Brightness ${Math.round(hsva.v)}%`}
|
||||
containerRef={containerRef}
|
||||
>
|
||||
<Pointer
|
||||
className="react-colorful__saturation_value-pointer"
|
||||
@@ -705,12 +709,14 @@ const Hue: React.FC<HueProps> = React.memo(({ className, hue, onChange }) => {
|
||||
const handleKey = (offset: Interaction) => {
|
||||
onChange({ h: clamp(hue + offset.left * 360, 0, 360) });
|
||||
};
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
const nodeClassName = classes(['react-colorful__hue', className]);
|
||||
|
||||
return (
|
||||
<div className={nodeClassName}>
|
||||
<Interactive
|
||||
containerRef={containerRef}
|
||||
onMove={handleMove}
|
||||
onKey={handleKey}
|
||||
aria-label="Hue"
|
||||
@@ -756,10 +762,12 @@ const Saturation: React.FC<SaturationProps> = React.memo(
|
||||
})}, ${hsvaToHslString({ h: color.h, s: 100, v: color.v, a: 1 })})`,
|
||||
[color],
|
||||
);
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
return (
|
||||
<div className={nodeClassName}>
|
||||
<Interactive
|
||||
containerRef={containerRef}
|
||||
style={{ background }}
|
||||
onMove={handleMove}
|
||||
onKey={handleKey}
|
||||
@@ -814,10 +822,12 @@ const Value: React.FC<ValueProps> = React.memo(
|
||||
})}, ${hsvaToHslString({ h: color.h, s: color.s, v: 100, a: 1 })})`,
|
||||
[color],
|
||||
);
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
return (
|
||||
<div className={nodeClassName}>
|
||||
<Interactive
|
||||
containerRef={containerRef}
|
||||
style={{
|
||||
background,
|
||||
}}
|
||||
@@ -872,10 +882,12 @@ const RGBSlider: React.FC<RGBSliderProps> = React.memo(
|
||||
};
|
||||
|
||||
const selected = channels[target];
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
return (
|
||||
<div className={nodeClassName}>
|
||||
<Interactive
|
||||
containerRef={containerRef}
|
||||
onMove={handleMove}
|
||||
onKey={handleKey}
|
||||
aria-valuenow={rgb[target]}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"dependencies": {
|
||||
"common": "workspace:*",
|
||||
"dateformat": "^5.0.3",
|
||||
"dompurify": "^3.3.0",
|
||||
"dompurify": "^3.3.1",
|
||||
"es-toolkit": "^1.42.0",
|
||||
"highlight.js": "^11.11.1",
|
||||
"js-yaml": "^4.1.1",
|
||||
@@ -13,7 +13,7 @@
|
||||
"marked-smartypants": "^1.1.11",
|
||||
"react": "^19.2.1",
|
||||
"react-dom": "^19.2.1",
|
||||
"tgui-core": "^5.4.1",
|
||||
"tgui-core": "^5.5.10",
|
||||
"tgui-dev-server": "workspace:*"
|
||||
},
|
||||
"private": true
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
},
|
||||
},
|
||||
"packages": {
|
||||
"@types/bun": ["@types/bun@1.3.3", "", { "dependencies": { "bun-types": "1.3.3" } }, "sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g=="],
|
||||
"@types/bun": ["@types/bun@1.3.4", "", { "dependencies": { "bun-types": "1.3.4" } }, "sha512-EEPTKXHP+zKGPkhRLv+HI0UEX8/o+65hqARxLy8Ov5rIxMBPNTjeZww00CIihrIQGEQBYg+0roO5qOnS/7boGA=="],
|
||||
|
||||
"@types/node": ["@types/node@22.15.29", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ=="],
|
||||
|
||||
"bun-types": ["bun-types@1.3.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ=="],
|
||||
"bun-types": ["bun-types@1.3.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-5ua817+BZPZOlNaRgGBpZJOSAQ9RQ17pkwPD0yR7CfJg+r8DgIILByFifDTa+IPDDxzf5VNhtNlcKqFzDgJvlQ=="],
|
||||
|
||||
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
|
||||
}
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"devDependencies": {
|
||||
"@types/bun": "^1.3.3"
|
||||
"@types/bun": "^1.3.4"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user