Compare commits
23 Commits
340eae7c5a
...
renovate/c
| Author | SHA1 | Date | |
|---|---|---|---|
| 1d6510bbad | |||
| a68ad22e66 | |||
| 3f21f0ae8a | |||
| f71b2a99d6 | |||
| 2ae49eeda8 | |||
|
|
3f45c7ae3e | ||
|
|
35d4bf7d7f | ||
| 1da0fbfce1 | |||
| de39e4fa94 | |||
|
|
76ac4317f3 | ||
|
|
1b1f88cf76 | ||
|
|
64a564b6cc | ||
| 4ad043db82 | |||
|
|
4d22f8e46a | ||
| da1149eb23 | |||
|
|
b0408a8929 | ||
|
|
afabfc957b | ||
| 8688604e13 | |||
|
|
999fff8ddc | ||
|
|
eefb4481ec | ||
|
|
26bc15c15b | ||
| d6ec4e9e46 | |||
| 9f9e62858d |
@@ -1,4 +1,4 @@
|
|||||||
FROM oven/bun:1.2.23@sha256:6ebf306367da43ad75c4d5119563e24de9b66372929ad4fa31546be053a16f74 AS bun
|
FROM oven/bun:1.3.0@sha256:00cccad6e9c66bbacc250851f689168606aaea551ac473e908bbcf00a5645025 AS bun
|
||||||
FROM node:22.20.0-trixie-slim@sha256:535ba2ed7dcf0dec29b0af4cac2b87ccdd935880212d4b9537e767b078ce1ca3
|
FROM node:22.20.0-trixie-slim@sha256:535ba2ed7dcf0dec29b0af4cac2b87ccdd935880212d4b9537e767b078ce1ca3
|
||||||
COPY --from=bun /usr/local/bin/bun \
|
COPY --from=bun /usr/local/bin/bun \
|
||||||
/usr/local/bin/bunx \
|
/usr/local/bin/bunx \
|
||||||
|
|||||||
103
bun.lock
@@ -5,7 +5,7 @@
|
|||||||
"name": "website",
|
"name": "website",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "^2.2.4",
|
"@biomejs/biome": "^2.2.4",
|
||||||
"@effect/language-service": "^0.42.0",
|
"@effect/language-service": "^0.45.0",
|
||||||
"@types/bun": "^1.2.23",
|
"@types/bun": "^1.2.23",
|
||||||
"npm-check-updates": "^19.0.0",
|
"npm-check-updates": "^19.0.0",
|
||||||
"npm-sort": "^0.0.4",
|
"npm-sort": "^0.0.4",
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
"@effect/platform-bun": "^0.81.0",
|
"@effect/platform-bun": "^0.81.0",
|
||||||
"@effect/platform-node": "^0.98.0",
|
"@effect/platform-node": "^0.98.0",
|
||||||
"@effect/rpc": "^0.71.0",
|
"@effect/rpc": "^0.71.0",
|
||||||
"@opentelemetry/exporter-trace-otlp-http": "^0.205.0",
|
"@opentelemetry/exporter-trace-otlp-http": "^0.206.0",
|
||||||
"@opentelemetry/sdk-metrics": "^2.1.0",
|
"@opentelemetry/sdk-metrics": "^2.1.0",
|
||||||
"@opentelemetry/sdk-trace-base": "^2.1.0",
|
"@opentelemetry/sdk-trace-base": "^2.1.0",
|
||||||
"@opentelemetry/sdk-trace-node": "^2.1.0",
|
"@opentelemetry/sdk-trace-node": "^2.1.0",
|
||||||
@@ -51,15 +51,22 @@
|
|||||||
"@effect/platform-browser": "^0.72.0",
|
"@effect/platform-browser": "^0.72.0",
|
||||||
"@effect/rpc": "^0.71.0",
|
"@effect/rpc": "^0.71.0",
|
||||||
"@fontsource/work-sans": "^5.2.8",
|
"@fontsource/work-sans": "^5.2.8",
|
||||||
|
"@radix-ui/react-slot": "^1.2.3",
|
||||||
|
"@radix-ui/react-tooltip": "^1.2.8",
|
||||||
"@tanstack/react-router": "^1.131.48",
|
"@tanstack/react-router": "^1.131.48",
|
||||||
"@website/common": "workspace:*",
|
"@website/common": "workspace:*",
|
||||||
"class-variance-authority": "^0.7.1",
|
"class-variance-authority": "^0.7.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"effect": "^3.17.13",
|
"effect": "^3.17.13",
|
||||||
"effect-fc": "^0.1.3",
|
"effect-fc": "^0.1.3",
|
||||||
"lucide-react": "^0.544.0",
|
"i18next": "^25.6.0",
|
||||||
|
"i18next-browser-languagedetector": "^8.2.0",
|
||||||
|
"lucide-react": "^0.546.0",
|
||||||
"react": "^19.1.1",
|
"react": "^19.1.1",
|
||||||
"react-dom": "^19.1.1",
|
"react-dom": "^19.1.1",
|
||||||
|
"react-i18next": "^16.0.1",
|
||||||
|
"react-icons": "^5.5.0",
|
||||||
|
"react-shadow": "^20.6.0",
|
||||||
"tailwind-merge": "^3.3.1",
|
"tailwind-merge": "^3.3.1",
|
||||||
"tailwindcss": "^4.1.13",
|
"tailwindcss": "^4.1.13",
|
||||||
},
|
},
|
||||||
@@ -132,6 +139,8 @@
|
|||||||
|
|
||||||
"@babel/preset-typescript": ["@babel/preset-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ=="],
|
"@babel/preset-typescript": ["@babel/preset-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ=="],
|
||||||
|
|
||||||
|
"@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="],
|
||||||
|
|
||||||
"@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="],
|
"@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="],
|
||||||
|
|
||||||
"@babel/traverse": ["@babel/traverse@7.28.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", "@babel/types": "^7.28.4", "debug": "^4.3.1" } }, "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ=="],
|
"@babel/traverse": ["@babel/traverse@7.28.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", "@babel/types": "^7.28.4", "debug": "^4.3.1" } }, "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ=="],
|
||||||
@@ -160,7 +169,7 @@
|
|||||||
|
|
||||||
"@effect/experimental": ["@effect/experimental@0.56.0", "", { "dependencies": { "uuid": "^11.0.3" }, "peerDependencies": { "@effect/platform": "^0.92.0", "effect": "^3.18.0", "ioredis": "^5", "lmdb": "^3" }, "optionalPeers": ["ioredis", "lmdb"] }, "sha512-ZT9wTUVyDptzdkW4Tfvz5fNzygW9vt5jWcFmKI9SlhZMu9unVJgsBhxWCNYCyfPnxw3n/Z6SEKsqgt8iKQc4MA=="],
|
"@effect/experimental": ["@effect/experimental@0.56.0", "", { "dependencies": { "uuid": "^11.0.3" }, "peerDependencies": { "@effect/platform": "^0.92.0", "effect": "^3.18.0", "ioredis": "^5", "lmdb": "^3" }, "optionalPeers": ["ioredis", "lmdb"] }, "sha512-ZT9wTUVyDptzdkW4Tfvz5fNzygW9vt5jWcFmKI9SlhZMu9unVJgsBhxWCNYCyfPnxw3n/Z6SEKsqgt8iKQc4MA=="],
|
||||||
|
|
||||||
"@effect/language-service": ["@effect/language-service@0.42.0", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-a5naAdmFxrp6T6IsKNTbsoPJXgn2/WXcjzHHrvq7O/MCCWWiJepSVeJiD8rhb8YsWhiNXnvV5/MzOtljwWHY7w=="],
|
"@effect/language-service": ["@effect/language-service@0.45.1", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-SEZ9TaVCpRKYumTQJPApg3os9O94bN2lCYQLgZbyK/xD+NSfYPPJZQ+6T5LkpcNgW8BRk1ACI7S1W2/noxm7Qg=="],
|
||||||
|
|
||||||
"@effect/opentelemetry": ["@effect/opentelemetry@0.58.0", "", { "peerDependencies": { "@effect/platform": "^0.92.0", "@opentelemetry/api": "^1.9", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/sdk-logs": "^0.203.0", "@opentelemetry/sdk-metrics": "^2.0.0", "@opentelemetry/sdk-trace-base": "^2.0.0", "@opentelemetry/sdk-trace-node": "^2.0.0", "@opentelemetry/sdk-trace-web": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.33.0", "effect": "^3.18.0" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/resources", "@opentelemetry/sdk-logs", "@opentelemetry/sdk-metrics", "@opentelemetry/sdk-trace-base", "@opentelemetry/sdk-trace-node", "@opentelemetry/sdk-trace-web"] }, "sha512-NKCk64lf2VbrTxpxWUgqWxk02j49u5sh2HD8YK0UPDOi62vmc12aBqdhEyPp+kpdZiw8VI8ZALkgYRG1tH08SQ=="],
|
"@effect/opentelemetry": ["@effect/opentelemetry@0.58.0", "", { "peerDependencies": { "@effect/platform": "^0.92.0", "@opentelemetry/api": "^1.9", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/sdk-logs": "^0.203.0", "@opentelemetry/sdk-metrics": "^2.0.0", "@opentelemetry/sdk-trace-base": "^2.0.0", "@opentelemetry/sdk-trace-node": "^2.0.0", "@opentelemetry/sdk-trace-web": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.33.0", "effect": "^3.18.0" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/resources", "@opentelemetry/sdk-logs", "@opentelemetry/sdk-metrics", "@opentelemetry/sdk-trace-base", "@opentelemetry/sdk-trace-node", "@opentelemetry/sdk-trace-web"] }, "sha512-NKCk64lf2VbrTxpxWUgqWxk02j49u5sh2HD8YK0UPDOi62vmc12aBqdhEyPp+kpdZiw8VI8ZALkgYRG1tH08SQ=="],
|
||||||
|
|
||||||
@@ -250,6 +259,14 @@
|
|||||||
|
|
||||||
"@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.0", "", { "dependencies": { "@eslint/core": "^0.16.0", "levn": "^0.4.1" } }, "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A=="],
|
"@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.0", "", { "dependencies": { "@eslint/core": "^0.16.0", "levn": "^0.4.1" } }, "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A=="],
|
||||||
|
|
||||||
|
"@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="],
|
||||||
|
|
||||||
|
"@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="],
|
||||||
|
|
||||||
|
"@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw=="],
|
||||||
|
|
||||||
|
"@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="],
|
||||||
|
|
||||||
"@fontsource/work-sans": ["@fontsource/work-sans@5.2.8", "", {}, "sha512-6LaHjVVgts+rnrcqvEkP2+iUB/jw1oDSYsGO0+TltAhnWki9Hnf/UGpgMQh2jcm0GEH8VqCPnq4PpmHLFzxXtQ=="],
|
"@fontsource/work-sans": ["@fontsource/work-sans@5.2.8", "", {}, "sha512-6LaHjVVgts+rnrcqvEkP2+iUB/jw1oDSYsGO0+TltAhnWki9Hnf/UGpgMQh2jcm0GEH8VqCPnq4PpmHLFzxXtQ=="],
|
||||||
|
|
||||||
"@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="],
|
"@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="],
|
||||||
@@ -298,11 +315,11 @@
|
|||||||
|
|
||||||
"@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="],
|
"@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="],
|
||||||
|
|
||||||
"@opentelemetry/exporter-trace-otlp-http": ["@opentelemetry/exporter-trace-otlp-http@0.205.0", "", { "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/otlp-exporter-base": "0.205.0", "@opentelemetry/otlp-transformer": "0.205.0", "@opentelemetry/resources": "2.1.0", "@opentelemetry/sdk-trace-base": "2.1.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-vr2bwwPCSc9u7rbKc74jR+DXFvyMFQo9o5zs+H/fgbK672Whw/1izUKVf+xfWOdJOvuwTnfWxy+VAY+4TSo74Q=="],
|
"@opentelemetry/exporter-trace-otlp-http": ["@opentelemetry/exporter-trace-otlp-http@0.206.0", "", { "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/otlp-exporter-base": "0.206.0", "@opentelemetry/otlp-transformer": "0.206.0", "@opentelemetry/resources": "2.1.0", "@opentelemetry/sdk-trace-base": "2.1.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-xiEhJZxE9yDb13FVW4XaF7J56boLv1NALOGEVu3F8jMC24iZmX5TSVRJCNGLWyy1Xb3N27Yu31kdSsmEBCnxyw=="],
|
||||||
|
|
||||||
"@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.205.0", "", { "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/otlp-transformer": "0.205.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-2MN0C1IiKyo34M6NZzD6P9Nv9Dfuz3OJ3rkZwzFmF6xzjDfqqCTatc9v1EpNfaP55iDOCLHFyYNCgs61FFgtUQ=="],
|
"@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.206.0", "", { "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/otlp-transformer": "0.206.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Rv54oSNKMHYS5hv+H5EGksfBUtvPQWFTK+Dk6MjJun9tOijCsFJrhRFvAqg5d67TWSMn+ZQYRKIeXh5oLVrpAQ=="],
|
||||||
|
|
||||||
"@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.205.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.205.0", "@opentelemetry/core": "2.1.0", "@opentelemetry/resources": "2.1.0", "@opentelemetry/sdk-logs": "0.205.0", "@opentelemetry/sdk-metrics": "2.1.0", "@opentelemetry/sdk-trace-base": "2.1.0", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-KmObgqPtk9k/XTlWPJHdMbGCylRAmMJNXIRh6VYJmvlRDMfe+DonH41G7eenG8t4FXn3fxOGh14o/WiMRR6vPg=="],
|
"@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.206.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.206.0", "@opentelemetry/core": "2.1.0", "@opentelemetry/resources": "2.1.0", "@opentelemetry/sdk-logs": "0.206.0", "@opentelemetry/sdk-metrics": "2.1.0", "@opentelemetry/sdk-trace-base": "2.1.0", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Li2Cik1WnmNbU2mmTnw7DxvRiXhMcnAuTfAclP8y/zy7h5+GrLDpTZ+Z0XUs+Q3MLkb/h3ry4uFrC/z+2a6X7g=="],
|
||||||
|
|
||||||
"@opentelemetry/resources": ["@opentelemetry/resources@2.1.0", "", { "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw=="],
|
"@opentelemetry/resources": ["@opentelemetry/resources@2.1.0", "", { "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw=="],
|
||||||
|
|
||||||
@@ -366,6 +383,48 @@
|
|||||||
|
|
||||||
"@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="],
|
"@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="],
|
||||||
|
|
||||||
|
"@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.8", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.8", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.1", "", { "dependencies": { "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ=="],
|
||||||
|
|
||||||
|
"@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="],
|
||||||
|
|
||||||
|
"@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="],
|
||||||
|
|
||||||
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.38", "", {}, "sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw=="],
|
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.38", "", {}, "sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw=="],
|
||||||
|
|
||||||
"@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@16.0.2", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-tCtHJ2BlhSoK4cCs25NMXfV7EALKr0jyasmqVCq3y9cBrKdmJhtsy1iTz36Xhk/O+pDJbzawxF4K6ZblqCnITQ=="],
|
"@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@16.0.2", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-tCtHJ2BlhSoK4cCs25NMXfV7EALKr0jyasmqVCq3y9cBrKdmJhtsy1iTz36Xhk/O+pDJbzawxF4K6ZblqCnITQ=="],
|
||||||
@@ -678,6 +737,14 @@
|
|||||||
|
|
||||||
"hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="],
|
"hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="],
|
||||||
|
|
||||||
|
"html-parse-stringify": ["html-parse-stringify@3.0.1", "", { "dependencies": { "void-elements": "3.1.0" } }, "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg=="],
|
||||||
|
|
||||||
|
"humps": ["humps@2.0.1", "", {}, "sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g=="],
|
||||||
|
|
||||||
|
"i18next": ["i18next@25.6.0", "", { "dependencies": { "@babel/runtime": "^7.27.6" }, "peerDependencies": { "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-tTn8fLrwBYtnclpL5aPXK/tAYBLWVvoHM1zdfXoRNLcI+RvtMsoZRV98ePlaW3khHYKuNh/Q65W/+NVFUeIwVw=="],
|
||||||
|
|
||||||
|
"i18next-browser-languagedetector": ["i18next-browser-languagedetector@8.2.0", "", { "dependencies": { "@babel/runtime": "^7.23.2" } }, "sha512-P+3zEKLnOF0qmiesW383vsLdtQVyKtCNA9cjSoKCppTKPQVfKd2W8hbVo5ZhNJKDqeM7BOcvNoKJOjpHh4Js9g=="],
|
||||||
|
|
||||||
"ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
|
"ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
|
||||||
|
|
||||||
"import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
|
"import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
|
||||||
@@ -748,9 +815,11 @@
|
|||||||
|
|
||||||
"long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="],
|
"long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="],
|
||||||
|
|
||||||
|
"loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
|
||||||
|
|
||||||
"lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
|
"lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
|
||||||
|
|
||||||
"lucide-react": ["lucide-react@0.544.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw=="],
|
"lucide-react": ["lucide-react@0.546.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Z94u6fKT43lKeYHiVyvyR8fT7pwCzDu7RyMPpTvh054+xahSgj4HFQ+NmflvzdXsoAjYGdCguGaFKYuvq0ThCQ=="],
|
||||||
|
|
||||||
"magic-string": ["magic-string@0.30.19", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw=="],
|
"magic-string": ["magic-string@0.30.19", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw=="],
|
||||||
|
|
||||||
@@ -790,6 +859,8 @@
|
|||||||
|
|
||||||
"npm-sort": ["npm-sort@0.0.4", "", { "bin": { "npm-sort": "./index.js" } }, "sha512-S5Id/3Jvr7Cf/QnWjRteprngERCBhhEFOM+wMhUrAYP060/HUBC1aL5GoXS3xITlgacJCWaSmP4HQaAt91nNYQ=="],
|
"npm-sort": ["npm-sort@0.0.4", "", { "bin": { "npm-sort": "./index.js" } }, "sha512-S5Id/3Jvr7Cf/QnWjRteprngERCBhhEFOM+wMhUrAYP060/HUBC1aL5GoXS3xITlgacJCWaSmP4HQaAt91nNYQ=="],
|
||||||
|
|
||||||
|
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
|
||||||
|
|
||||||
"optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
|
"optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
|
||||||
|
|
||||||
"p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
|
"p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
|
||||||
@@ -816,6 +887,8 @@
|
|||||||
|
|
||||||
"prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="],
|
"prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="],
|
||||||
|
|
||||||
|
"prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="],
|
||||||
|
|
||||||
"protobufjs": ["protobufjs@7.5.4", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg=="],
|
"protobufjs": ["protobufjs@7.5.4", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg=="],
|
||||||
|
|
||||||
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
|
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
|
||||||
@@ -828,8 +901,16 @@
|
|||||||
|
|
||||||
"react-dom": ["react-dom@19.2.0", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.0" } }, "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ=="],
|
"react-dom": ["react-dom@19.2.0", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.0" } }, "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ=="],
|
||||||
|
|
||||||
|
"react-i18next": ["react-i18next@16.0.1", "", { "dependencies": { "@babel/runtime": "^7.27.6", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { "i18next": ">= 25.5.2", "react": ">= 16.8.0", "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-0S//bpYEkCPjzuVmxDf9Z6+Y+ArNvpAUk7eDL4qNCZXjDh6Z9j6MZ+NThU7kMCOsmYmDCun3GYEwkiOjjZo9Ug=="],
|
||||||
|
|
||||||
|
"react-icons": ["react-icons@5.5.0", "", { "peerDependencies": { "react": "*" } }, "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw=="],
|
||||||
|
|
||||||
|
"react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="],
|
||||||
|
|
||||||
"react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="],
|
"react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="],
|
||||||
|
|
||||||
|
"react-shadow": ["react-shadow@20.6.0", "", { "dependencies": { "humps": "^2.0.1" }, "peerDependencies": { "prop-types": "^15.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-kY+w4OMNZ8Nj9YI9eiTgvvJ/wYO7XyX1D/LYhvwQZv5vw69iCiDtGB0BX/2U8gLUuZAMN+x/7rHJKqHh8wXFHQ=="],
|
||||||
|
|
||||||
"readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
|
"readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
|
||||||
|
|
||||||
"recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="],
|
"recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="],
|
||||||
@@ -932,6 +1013,8 @@
|
|||||||
|
|
||||||
"vite": ["vite@7.1.9", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg=="],
|
"vite": ["vite@7.1.9", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg=="],
|
||||||
|
|
||||||
|
"void-elements": ["void-elements@3.1.0", "", {}, "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w=="],
|
||||||
|
|
||||||
"webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="],
|
"webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="],
|
||||||
|
|
||||||
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
|
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
|
||||||
@@ -956,6 +1039,10 @@
|
|||||||
|
|
||||||
"@eslint/eslintrc/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
|
"@eslint/eslintrc/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
|
||||||
|
|
||||||
|
"@opentelemetry/otlp-transformer/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.206.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-yIVDu9jX//nV5wSMLZLdHdb1SKHIMj9k+wQVFtln5Flcgdldz9BkHtavvExQiJqBZg2OpEEJEZmzQazYztdz2A=="],
|
||||||
|
|
||||||
|
"@opentelemetry/otlp-transformer/@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.206.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.206.0", "@opentelemetry/core": "2.1.0", "@opentelemetry/resources": "2.1.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-SQ2yTmqe4Mw9RI3a/glVkfjWPsXh6LySvnljXubiZq4zu+UP8NMJt2j82ZsYb+KpD7Eu+/41/7qlJnjdeVjz7Q=="],
|
||||||
|
|
||||||
"@parcel/watcher/detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="],
|
"@parcel/watcher/detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.5.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg=="],
|
"@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.5.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg=="],
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ x-env-base: &env-base
|
|||||||
services:
|
services:
|
||||||
server:
|
server:
|
||||||
<<: *service-base
|
<<: *service-base
|
||||||
image: oven/bun:1.2.23@sha256:6ebf306367da43ad75c4d5119563e24de9b66372929ad4fa31546be053a16f74
|
image: oven/bun:1.3.0@sha256:00cccad6e9c66bbacc250851f689168606aaea551ac473e908bbcf00a5645025
|
||||||
volumes:
|
volumes:
|
||||||
- *volume-app
|
- *volume-app
|
||||||
working_dir: /app/packages/server
|
working_dir: /app/packages/server
|
||||||
@@ -22,7 +22,7 @@ services:
|
|||||||
|
|
||||||
cli:
|
cli:
|
||||||
<<: *service-base
|
<<: *service-base
|
||||||
image: oven/bun:1.2.23@sha256:6ebf306367da43ad75c4d5119563e24de9b66372929ad4fa31546be053a16f74
|
image: oven/bun:1.3.0@sha256:00cccad6e9c66bbacc250851f689168606aaea551ac473e908bbcf00a5645025
|
||||||
volumes:
|
volumes:
|
||||||
- *volume-app
|
- *volume-app
|
||||||
working_dir: /app
|
working_dir: /app
|
||||||
@@ -48,7 +48,7 @@ services:
|
|||||||
|
|
||||||
tempo:
|
tempo:
|
||||||
<<: *service-base
|
<<: *service-base
|
||||||
image: grafana/tempo:latest@sha256:692853614cc344c15f5695d3a950fcca326dd7bcffa544fe36b8d978e90a146b
|
image: grafana/tempo:latest@sha256:8b1447438058ca1307ecf55689ed3da944037cc8918664701b95fa18cdaa1b2c
|
||||||
command: [-config.file=/etc/tempo.yaml]
|
command: [-config.file=/etc/tempo.yaml]
|
||||||
volumes:
|
volumes:
|
||||||
- ./telemetry/tempo.yaml:/etc/tempo.yaml
|
- ./telemetry/tempo.yaml:/etc/tempo.yaml
|
||||||
@@ -56,7 +56,7 @@ services:
|
|||||||
stop_signal: SIGKILL
|
stop_signal: SIGKILL
|
||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
image: prom/prometheus:v3.6.0@sha256:76947e7ef22f8a698fc638f706685909be425dbe09bd7a2cd7aca849f79b5f64
|
image: prom/prometheus:v3.7.1@sha256:ff7e389acbe064a4823212a500393d40a28a8f362e4b05cbf6742a9a3ef736b2
|
||||||
command:
|
command:
|
||||||
- --config.file=/etc/prometheus.yaml
|
- --config.file=/etc/prometheus.yaml
|
||||||
- --web.enable-remote-write-receiver
|
- --web.enable-remote-write-receiver
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "^2.2.4",
|
"@biomejs/biome": "^2.2.4",
|
||||||
"@effect/language-service": "^0.42.0",
|
"@effect/language-service": "^0.45.0",
|
||||||
"@types/bun": "^1.2.23",
|
"@types/bun": "^1.2.23",
|
||||||
"npm-check-updates": "^19.0.0",
|
"npm-check-updates": "^19.0.0",
|
||||||
"npm-sort": "^0.0.4",
|
"npm-sort": "^0.0.4",
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
"@effect/platform-bun": "^0.81.0",
|
"@effect/platform-bun": "^0.81.0",
|
||||||
"@effect/platform-node": "^0.98.0",
|
"@effect/platform-node": "^0.98.0",
|
||||||
"@effect/rpc": "^0.71.0",
|
"@effect/rpc": "^0.71.0",
|
||||||
"@opentelemetry/exporter-trace-otlp-http": "^0.205.0",
|
"@opentelemetry/exporter-trace-otlp-http": "^0.206.0",
|
||||||
"@opentelemetry/sdk-metrics": "^2.1.0",
|
"@opentelemetry/sdk-metrics": "^2.1.0",
|
||||||
"@opentelemetry/sdk-trace-base": "^2.1.0",
|
"@opentelemetry/sdk-trace-base": "^2.1.0",
|
||||||
"@opentelemetry/sdk-trace-node": "^2.1.0",
|
"@opentelemetry/sdk-trace-node": "^2.1.0",
|
||||||
|
|||||||
@@ -18,15 +18,22 @@
|
|||||||
"@effect/platform-browser": "^0.72.0",
|
"@effect/platform-browser": "^0.72.0",
|
||||||
"@effect/rpc": "^0.71.0",
|
"@effect/rpc": "^0.71.0",
|
||||||
"@fontsource/work-sans": "^5.2.8",
|
"@fontsource/work-sans": "^5.2.8",
|
||||||
|
"@radix-ui/react-slot": "^1.2.3",
|
||||||
|
"@radix-ui/react-tooltip": "^1.2.8",
|
||||||
"@tanstack/react-router": "^1.131.48",
|
"@tanstack/react-router": "^1.131.48",
|
||||||
"@website/common": "workspace:*",
|
"@website/common": "workspace:*",
|
||||||
"class-variance-authority": "^0.7.1",
|
"class-variance-authority": "^0.7.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"effect": "^3.17.13",
|
"effect": "^3.17.13",
|
||||||
"effect-fc": "^0.1.3",
|
"effect-fc": "^0.1.3",
|
||||||
"lucide-react": "^0.544.0",
|
"i18next": "^25.6.0",
|
||||||
|
"i18next-browser-languagedetector": "^8.2.0",
|
||||||
|
"lucide-react": "^0.546.0",
|
||||||
"react": "^19.1.1",
|
"react": "^19.1.1",
|
||||||
"react-dom": "^19.1.1",
|
"react-dom": "^19.1.1",
|
||||||
|
"react-i18next": "^16.0.1",
|
||||||
|
"react-icons": "^5.5.0",
|
||||||
|
"react-shadow": "^20.6.0",
|
||||||
"tailwind-merge": "^3.3.1",
|
"tailwind-merge": "^3.3.1",
|
||||||
"tailwindcss": "^4.1.13"
|
"tailwindcss": "^4.1.13"
|
||||||
},
|
},
|
||||||
|
|||||||
18
packages/webapp/public/98.css/.editorconfig
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# https://editorconfig.org
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
max_line_length = 80
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
max_line_length = 0
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[COMMIT_EDITMSG]
|
||||||
|
max_line_length = 0
|
||||||
23
packages/webapp/public/98.css/.github/workflows/npm-publish.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
|
||||||
|
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
|
||||||
|
|
||||||
|
name: Publish to NPM
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish-npm:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
node-version: 16
|
||||||
|
registry-url: https://registry.npmjs.org/
|
||||||
|
- run: npm ci
|
||||||
|
- run: npm run release
|
||||||
|
env:
|
||||||
|
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
|
||||||
7
packages/webapp/public/98.css/LICENSE
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Copyright 2020 Jordan Scales
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
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.
|
||||||
76
packages/webapp/public/98.css/README.md
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
## 98.css
|
||||||
|
|
||||||
|
[](http://npm.im/98.css)
|
||||||
|
[](https://unpkg.com/98.css)
|
||||||
|
|
||||||
|
A design system for building faithful recreations of old UIs.
|
||||||
|
|
||||||
|
<img alt="a screenshot of a window with the title 'My First VB4 Program' and two buttons OK and Cancel, styled like a Windows 98 dialog" src="https://github.com/jdan/98.css/blob/main/docs/window.png?raw=true" height="133"> <img alt="a magnified view showing pixel-perfect borders on a scrollbar and button element" src="https://github.com/jdan/98.css/blob/main/docs/zoom.png?raw=true?raw=true" height="133">
|
||||||
|
|
||||||
|
98.css is a CSS file that takes semantic HTML and makes it look pretty. It does not ship with any JavaScript, so it is compatible with your frontend framework of choice.
|
||||||
|
|
||||||
|
Be sure to check out [XP.css](https://botoxparty.github.io/XP.css/) and [7.css](https://khang-nd.github.io/7.css/) as well.
|
||||||
|
|
||||||
|
### Installation / Usage
|
||||||
|
|
||||||
|
The easiest way to use 98.css is to import it from [unpkg](https://unpkg.com/).
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>98.css example</title>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="stylesheet" href="https://unpkg.com/98.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="window" style="margin: 32px; width: 250px">
|
||||||
|
<div class="title-bar">
|
||||||
|
<div class="title-bar-text">
|
||||||
|
My First VB4 Program
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="window-body">
|
||||||
|
<p>Hello, world!</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, you can grab 98.css for [the releases page](https://github.com/jdan/98.css/releases) or [npm](https://www.npmjs.com/package/98.css).
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install 98.css
|
||||||
|
```
|
||||||
|
|
||||||
|
Here is an example of [98.css being used with React](https://codesandbox.io/s/objective-chandrasekhar-t5t6h?file=/src/index.js), and [an example with vanilla JavaScript](https://codesandbox.io/s/late-sound-miqho?file=/index.html).
|
||||||
|
|
||||||
|
Refer to the [documentation page](https://jdan.github.io/98.css/) for specific instructions on this library's components.
|
||||||
|
|
||||||
|
### Developing
|
||||||
|
|
||||||
|
First, run `npm install`.
|
||||||
|
|
||||||
|
[`style.css`](https://github.com/jdan/98.css/blob/main/style.css) is where everything happens.
|
||||||
|
|
||||||
|
You can use `npm start` to start a development environment that will watch for file changes and rebuild 98.css, reloading your browser in the process.
|
||||||
|
|
||||||
|
You can run a build manually with `npm run build`. This will write to the `dist/` directory.
|
||||||
|
|
||||||
|
### Issues, Contributing, etc.
|
||||||
|
|
||||||
|
Refer to [the GitHub issues page](https://github.com/jdan/98.css/issues) to see bugs in my CSS or report new ones. I'd really like to see your pull requests (especially those new to open-source!) and will happily provide code review. 98.css is a fun, silly project and I'd like to make it a fun place to build your open-source muscle.
|
||||||
|
|
||||||
|
Thank you for checking my little project out, I hope it brought you some joy today. Consider [starring/following along on GitHub](https://github.com/jdan/98.css/stargazers) and maybe subscribing to more fun things on [my twitter](https://twitter.com/jdan). 👋
|
||||||
|
|
||||||
|
### Publishing
|
||||||
|
|
||||||
|
Building the docs site: `npm run deploy:docs`
|
||||||
|
|
||||||
|
Publishing to npm: `npm run release`
|
||||||
|
|
||||||
|
### License
|
||||||
|
|
||||||
|
[MIT](https://github.com/jdan/98.css/blob/main/LICENSE)
|
||||||
81
packages/webapp/public/98.css/build.js
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
const dedent = require("dedent");
|
||||||
|
const ejs = require("ejs");
|
||||||
|
const fs = require("fs");
|
||||||
|
const glob = require("glob");
|
||||||
|
const hljs = require("highlight.js");
|
||||||
|
const mkdirp = require("mkdirp");
|
||||||
|
const path = require("path");
|
||||||
|
const postcss = require("postcss");
|
||||||
|
|
||||||
|
const { homepage, version } = require("./package.json");
|
||||||
|
|
||||||
|
function buildCSS() {
|
||||||
|
const input =
|
||||||
|
`/*! 98.css v${version} - ${homepage} */\n` + fs.readFileSync("style.css");
|
||||||
|
|
||||||
|
return postcss()
|
||||||
|
.use(require("postcss-inline-svg"))
|
||||||
|
.use(require("postcss-css-variables"))
|
||||||
|
.use(require("postcss-calc"))
|
||||||
|
.use(require("postcss-copy")({ dest: "dist", template: "[name].[ext]" }))
|
||||||
|
.use(require("cssnano"))
|
||||||
|
.process(input, {
|
||||||
|
from: "style.css",
|
||||||
|
to: "dist/98.css",
|
||||||
|
map: { inline: false },
|
||||||
|
})
|
||||||
|
.then((result) => {
|
||||||
|
mkdirp.sync("dist");
|
||||||
|
fs.writeFileSync("dist/98.css", result.css);
|
||||||
|
fs.writeFileSync("dist/98.css.map", result.map.toString());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildDocs() {
|
||||||
|
let id = 0;
|
||||||
|
function getNewId() {
|
||||||
|
return ++id;
|
||||||
|
}
|
||||||
|
function getCurrentId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
const template = fs.readFileSync("docs/index.html.ejs", "utf-8");
|
||||||
|
function example(code) {
|
||||||
|
const magicBrackets = /\[\[(.*)\]\]/g;
|
||||||
|
const dedented = dedent(code);
|
||||||
|
const inline = dedented.replace(magicBrackets, "$1");
|
||||||
|
const escaped = hljs.highlight("html", dedented.replace(magicBrackets, ""))
|
||||||
|
.value;
|
||||||
|
|
||||||
|
return `<div class="example">
|
||||||
|
${inline}
|
||||||
|
<details>
|
||||||
|
<summary>Show code</summary>
|
||||||
|
<pre><code>${escaped}</code></pre>
|
||||||
|
</details>
|
||||||
|
</div>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
glob("docs/*", (err, files) => {
|
||||||
|
if (!err) {
|
||||||
|
files.forEach((srcFile) =>
|
||||||
|
fs.copyFileSync(srcFile, path.join("dist", path.basename(srcFile)))
|
||||||
|
);
|
||||||
|
} else throw "error globbing dist directory.";
|
||||||
|
});
|
||||||
|
fs.writeFileSync(
|
||||||
|
path.join(__dirname, "/dist/index.html"),
|
||||||
|
ejs.render(template, { getNewId, getCurrentId, example })
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function build() {
|
||||||
|
buildCSS()
|
||||||
|
.then(buildDocs)
|
||||||
|
.catch((err) => console.log(err));
|
||||||
|
}
|
||||||
|
module.exports = build;
|
||||||
|
|
||||||
|
build();
|
||||||
152
packages/webapp/public/98.css/docs/docs.css
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
background: #c0c0c0;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
width: 65rem;
|
||||||
|
margin-left: 240px;
|
||||||
|
margin-bottom: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside {
|
||||||
|
width: 200px;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
padding: 8px;
|
||||||
|
display: flex;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside .tree-view {
|
||||||
|
width: 100%;
|
||||||
|
/* TODO: Move scrollbar into the recessed region? */
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin: 12px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: 0;
|
||||||
|
border: none;
|
||||||
|
width: 400px;
|
||||||
|
height: 1px;
|
||||||
|
opacity: 0.5;
|
||||||
|
background: linear-gradient(
|
||||||
|
to right,
|
||||||
|
red 20%,
|
||||||
|
yellow 20%,
|
||||||
|
yellow 36%,
|
||||||
|
green 36%,
|
||||||
|
green 60%,
|
||||||
|
blue 60%,
|
||||||
|
blue 100%
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 1.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3,
|
||||||
|
h4 {
|
||||||
|
/* Swap the margin for a top-padding so linking to this section
|
||||||
|
results in a better scroll position */
|
||||||
|
padding-top: 20px;
|
||||||
|
margin-top: 0;
|
||||||
|
display: block;
|
||||||
|
flex: 0 0 180px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
max-width: 50rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.component {
|
||||||
|
display: flex;
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin: 0 0 20px;
|
||||||
|
padding: 20px;
|
||||||
|
background: #dfdfdf;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote footer {
|
||||||
|
margin: 12px 0 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example {
|
||||||
|
margin: 16px 0;
|
||||||
|
padding: 12px 24px;
|
||||||
|
border-left: 1px solid #808080;
|
||||||
|
}
|
||||||
|
|
||||||
|
details {
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
user-select: none;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
details[open] summary {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.focused {
|
||||||
|
outline: 1px dotted #000000;
|
||||||
|
outline-offset: -4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.active {
|
||||||
|
box-shadow: inset -1px -1px #ffffff, inset 1px 1px #0a0a0a,
|
||||||
|
inset -2px -2px #dfdfdf, inset 2px 2px #808080;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
aside {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3,
|
||||||
|
h4 {
|
||||||
|
flex: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.component {
|
||||||
|
display: block;
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
packages/webapp/public/98.css/docs/icon.png
Normal file
|
After Width: | Height: | Size: 209 B |
1129
packages/webapp/public/98.css/docs/index.html.ejs
Normal file
67
packages/webapp/public/98.css/docs/vs.css
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Visual Studio-like style based on original C# coloring by Jason Diamond <jason@diamond.name>
|
||||||
|
|
||||||
|
*/
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 0.5em;
|
||||||
|
background: white;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote,
|
||||||
|
.hljs-variable {
|
||||||
|
color: #008000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-tag {
|
||||||
|
color: #00f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-attribute,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-template-tag,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #a31515;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-selector-attr,
|
||||||
|
.hljs-selector-pseudo,
|
||||||
|
.hljs-meta {
|
||||||
|
color: #2b91af;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-doctag {
|
||||||
|
color: #808080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attr {
|
||||||
|
color: #f00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-link {
|
||||||
|
color: #00b0e8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
BIN
packages/webapp/public/98.css/docs/window.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
packages/webapp/public/98.css/docs/zoom.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
packages/webapp/public/98.css/fonts/converted/ms_sans_serif.woff
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
The FontStruction “MS Sans Serif Bold”
|
||||||
|
(https://fontstruct.com/fontstructions/show/1384862) by “lou” is licensed
|
||||||
|
under a Creative Commons Attribution Share Alike license
|
||||||
|
(http://creativecommons.org/licenses/by-sa/3.0/).
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
The font file in this archive was created using Fontstruct the free, online
|
||||||
|
font-building tool.
|
||||||
|
This font was created by “lou”.
|
||||||
|
This font has a homepage where this archive and other versions may be found:
|
||||||
|
https://fontstruct.com/fontstructions/show/1384862
|
||||||
|
|
||||||
|
Try Fontstruct at http://fontstruct.com
|
||||||
|
It’s easy and it’s fun.
|
||||||
|
|
||||||
|
NOTE FOR FLASH USERS: Fontstruct fonts (fontstructions) are optimized for Flash.
|
||||||
|
If the font in this archive is a pixel font, it is best displayed at a font-size
|
||||||
|
of 11.
|
||||||
|
|
||||||
|
Fontstruct is sponsored by FontShop.
|
||||||
|
Visit them at https://fontshop.com
|
||||||
|
FontShop is the original independent font retailer. We’ve been around since
|
||||||
|
the dawn of digital type. Whether you need the right font or need to create the
|
||||||
|
right font from scratch, let our 26 years of experience work for you.
|
||||||
|
|
||||||
|
Fontstruct is copyright ©2017 Rob Meek
|
||||||
|
|
||||||
|
LEGAL NOTICE:
|
||||||
|
In using this font you must comply with the licensing terms described in the
|
||||||
|
file “license.txt” included with this archive.
|
||||||
|
If you redistribute the font file in this archive, it must be accompanied by all
|
||||||
|
the other files from this archive, including this one.
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
The FontStruction “MS Sans Serif”
|
||||||
|
(https://fontstruct.com/fontstructions/show/1384746) by “lou” is licensed
|
||||||
|
under a Creative Commons Attribution Share Alike license
|
||||||
|
(http://creativecommons.org/licenses/by-sa/3.0/).
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
The font file in this archive was created using Fontstruct the free, online
|
||||||
|
font-building tool.
|
||||||
|
This font was created by “lou”.
|
||||||
|
This font has a homepage where this archive and other versions may be found:
|
||||||
|
https://fontstruct.com/fontstructions/show/1384746
|
||||||
|
|
||||||
|
Try Fontstruct at http://fontstruct.com
|
||||||
|
It’s easy and it’s fun.
|
||||||
|
|
||||||
|
NOTE FOR FLASH USERS: Fontstruct fonts (fontstructions) are optimized for Flash.
|
||||||
|
If the font in this archive is a pixel font, it is best displayed at a font-size
|
||||||
|
of 11.
|
||||||
|
|
||||||
|
Fontstruct is sponsored by FontShop.
|
||||||
|
Visit them at https://fontshop.com
|
||||||
|
FontShop is the original independent font retailer. We’ve been around since
|
||||||
|
the dawn of digital type. Whether you need the right font or need to create the
|
||||||
|
right font from scratch, let our 26 years of experience work for you.
|
||||||
|
|
||||||
|
Fontstruct is copyright ©2017 Rob Meek
|
||||||
|
|
||||||
|
LEGAL NOTICE:
|
||||||
|
In using this font you must comply with the licensing terms described in the
|
||||||
|
file “license.txt” included with this archive.
|
||||||
|
If you redistribute the font file in this archive, it must be accompanied by all
|
||||||
|
the other files from this archive, including this one.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H15H16V17H15H0V16V1V0ZM1 16H15V1H1V16Z" fill="#808080"/>
|
||||||
|
<rect x="1" y="1" width="14" height="15" fill="#C0C0C0"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 7H5V8H6V9H7V10H8V11H9V10H10V9H11V8H12V7Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 381 B |
8
packages/webapp/public/98.css/icon/button-down.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 0H0V1V16H1V1H15V0Z" fill="#DFDFDF"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 1H1V15H2V2H14V1H2Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 17H15H0V16H15V0H16V17Z" fill="black"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 1H14V15H1V16H14H15V1Z" fill="#808080"/>
|
||||||
|
<rect x="2" y="2" width="12" height="13" fill="#C0C0C0"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 6H4V7H5V8H6V9H7V10H8V9H9V8H10V7H11V6Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 630 B |
8
packages/webapp/public/98.css/icon/button-left.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 0H0V1V16H1V1H15V0Z" fill="#DFDFDF"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 1H1V15H2V2H14V1H2Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 17H15H0V16H15V0H16V17Z" fill="black"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 1H14V15H1V16H14H15V1Z" fill="#808080"/>
|
||||||
|
<rect x="2" y="2" width="12" height="13" fill="#C0C0C0"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 4H8V5H7V6H6V7H5V8H6V9H7V10H8V11H9V4Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 628 B |
8
packages/webapp/public/98.css/icon/button-right.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 0H0V1V16H1V1H15V0Z" fill="#DFDFDF"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 1H1V15H2V2H14V1H2Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 17H15H0V16H15V0H16V17Z" fill="black"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 1H14V15H1V16H14H15V1Z" fill="#808080"/>
|
||||||
|
<rect x="2" y="2" width="12" height="13" fill="#C0C0C0"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 4H6V11H7V10H8V9H9V8H10V7H9V6H8V5H7V4Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 629 B |
8
packages/webapp/public/98.css/icon/button-up.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 0H0V1V16H1V1H15V0Z" fill="#DFDFDF"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 1H1V15H2V2H14V1H2Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 17H15H0V16H15V0H16V17Z" fill="black"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 1H14V15H1V16H14H15V1Z" fill="#808080"/>
|
||||||
|
<rect x="2" y="2" width="12" height="13" fill="#C0C0C0"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 6H7V7H6V8H5V9H4V10H11V9H10V8H9V7H8V6Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 629 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="7" height="7" viewBox="0 0 7 7" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 0H6V1H5V2H4V3H3V4H2V3H1V2H0V5H1V6H2V7H3V6H4V5H5V4H6V3H7V0Z" fill="#808080"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 228 B |
3
packages/webapp/public/98.css/icon/checkmark.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="7" height="7" viewBox="0 0 7 7" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 0H6V1H5V2H4V3H3V4H2V3H1V2H0V5H1V6H2V7H3V6H4V5H5V4H6V3H7V0Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 226 B |
3
packages/webapp/public/98.css/icon/close.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="8" height="7" viewBox="0 0 8 7" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H1H2V1H3V2H4H5V1H6V0H7H8V1H7V2H6V3H5V4H6V5H7V6H8V7H7H6V6H5V5H4H3V6H2V7H1H0V6H1V5H2V4H3V3H2V2H1V1H0V0Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 270 B |
4
packages/webapp/public/98.css/icon/groupbox-border.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="5" height="5" viewBox="0 0 5 5" fill="grey" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H5V5H0V2H2V3H3V2H0" fill="white" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H4V4H0V1H1V3H3V1H0" fill="#808080" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 279 B |
8
packages/webapp/public/98.css/icon/help.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg width="6" height="9" viewBox="0 0 6 9" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect y="1" width="2" height="2" fill="black"/>
|
||||||
|
<rect x="1" width="4" height="1" fill="black"/>
|
||||||
|
<rect x="4" y="1" width="2" height="2" fill="black"/>
|
||||||
|
<rect x="3" y="3" width="2" height="1" fill="black"/>
|
||||||
|
<rect x="2" y="4" width="2" height="2" fill="black"/>
|
||||||
|
<rect x="2" y="7" width="2" height="2" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 411 B |
@@ -0,0 +1,6 @@
|
|||||||
|
<svg width="11" height="21" viewBox="0 0 11 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V16H2V18H4V20H5V19H3V17H1V1H10V0Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 1V16H2V17H3V18H4V19H6V18H7V17H8V16H9V1Z" fill="#C0C7C8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 1H10V16H8V18H6V20H5V19H7V17H9Z" fill="#87888F"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 0H11V16H9V18H7V20H5V21H6V19H8V17H10Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 523 B |
@@ -0,0 +1,6 @@
|
|||||||
|
<svg width="11" height="21" viewBox="0 0 11 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V20H1V1H10V0Z" fill="white"/>
|
||||||
|
<rect x="1" y="1" width="8" height="18" fill="#C0C7C8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 1H10V20H1V19H9Z" fill="#87888F"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 0H11V21H0V20H10Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 415 B |
4
packages/webapp/public/98.css/icon/maximize-disabled.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 1H1V3V9V10H2H9H10V9V3V1ZM9 3H2V9H9V3Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 0H0V2V8V9H1H8H9V8V2V0ZM8 2H1V8H8V2Z" fill="#808080"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 319 B |
3
packages/webapp/public/98.css/icon/maximize.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="9" height="9" viewBox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 0H0V2V8V9H1H8H9V8V2V0ZM8 2H1V8H8V2Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 203 B |
3
packages/webapp/public/98.css/icon/minimize.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="6" height="2" viewBox="0 0 6 2" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect width="6" height="2" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 141 B |
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 0H4V1H2V2H1V4H0V8H1V10H2V8H1V4H2V2H4V1H8V2H10V1H8V0Z" fill="#808080"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 1H4V2H2V3V4H1V8H2V9H3V8H2V4H3V3H4V2H8V3H10V2H8V1Z" fill="black"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 3H10V4H9V3ZM10 8V4H11V8H10ZM8 10V9H9V8H10V9V10H8ZM4 10V11H8V10H4ZM4 10V9H2V10H4Z" fill="#DFDFDF"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 2H10V4H11V8H10V10H8V11H4V10H2V11H4V12H8V11H10V10H11V8H12V4H11V2Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2H8V3H9V4H10V8H9V9H8V10H4V9H3V8H2V4H3V3H4V2Z" fill="#C0C0C0"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 744 B |
8
packages/webapp/public/98.css/icon/radio-border.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 0H4V1H2V2H1V4H0V8H1V10H2V8H1V4H2V2H4V1H8V2H10V1H8V0Z" fill="#808080"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 1H4V2H2V3V4H1V8H2V9H3V8H2V4H3V3H4V2H8V3H10V2H8V1Z" fill="black"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 3H10V4H9V3ZM10 8V4H11V8H10ZM8 10V9H9V8H10V9V10H8ZM4 10V11H8V10H4ZM4 10V9H2V10H4Z" fill="#DFDFDF"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 2H10V4H11V8H10V10H8V11H4V10H2V11H4V12H8V11H10V10H11V8H12V4H11V2Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2H8V3H9V4H10V8H9V9H8V10H4V9H3V8H2V4H3V3H4V2Z" fill="white"/>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 743 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="4" height="4" viewBox="0 0 4 4" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 0H1V1H0V2V3H1V4H3V3H4V2V1H3V0Z" fill="#808080"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 200 B |
3
packages/webapp/public/98.css/icon/radio-dot.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="4" height="4" viewBox="0 0 4 4" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 0H1V1H0V2V3H1V4H3V3H4V2V1H3V0Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 198 B |
10
packages/webapp/public/98.css/icon/restore.svg
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="8" height="9" viewBox="0 0 8 9" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect x="2" width="6" height="2" fill="black"/>
|
||||||
|
<rect x="7" y="2" width="1" height="4" fill="black"/>
|
||||||
|
<rect x="2" y="2" width="1" height="1" fill="black"/>
|
||||||
|
<rect x="6" y="5" width="1" height="1" fill="black"/>
|
||||||
|
<rect y="3" width="6" height="2" fill="black"/>
|
||||||
|
<rect x="5" y="5" width="1" height="4" fill="black"/>
|
||||||
|
<rect y="5" width="1" height="4" fill="black"/>
|
||||||
|
<rect x="1" y="8" width="4" height="1" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 513 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="2" height="2" viewBox="0 0 2 2" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 0H0V1H1V2H2V1H1V0Z" fill="#C0C0C0"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 0H1V1H0V2H1V1H2V0Z" fill="white"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 275 B |
10
packages/webapp/public/98.css/icon/sunken-panel-border.svg
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="5" height="5" viewBox="0 0 5 5" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect width="4" height="1" x="0" y="0" fill="#808080"/>
|
||||||
|
<rect width="1" height="4" x="0" y="0" fill="#808080"/>
|
||||||
|
<rect width="2" height="1" x="1" y="1" fill="#0a0a0a"/>
|
||||||
|
<rect width="1" height="2" x="1" y="1" fill="#0a0a0a"/>
|
||||||
|
<rect width="5" height="1" x="0" y="4" fill="#fff"/>
|
||||||
|
<rect width="1" height="5" x="4" y="0" fill="#fff"/>
|
||||||
|
<rect width="1" height="3" x="3" y="1" fill="#dfdfdf"/>
|
||||||
|
<rect width="3" height="1" x="1" y="3" fill="#dfdfdf"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 545 B |
4
packages/webapp/public/98.css/now.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"public": true
|
||||||
|
}
|
||||||
45
packages/webapp/public/98.css/package.json
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"name": "98.css",
|
||||||
|
"version": "0.1.21",
|
||||||
|
"description": "A design system for building faithful recreations of old UIs",
|
||||||
|
"main": "dist/98.css",
|
||||||
|
"directories": {
|
||||||
|
"doc": "docs"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "node build.js",
|
||||||
|
"deploy:docs": "npm run build && gh-pages -d dist",
|
||||||
|
"release": "npm run build && npm publish"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/jdan/98.css.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"css",
|
||||||
|
"windows98"
|
||||||
|
],
|
||||||
|
"author": "Jordan Scales <scalesjordan@gmail.com>",
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/jdan/98.css/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/jdan/98.css",
|
||||||
|
"devDependencies": {
|
||||||
|
"chokidar": "^3.3.1",
|
||||||
|
"cssnano": "^7.0.0",
|
||||||
|
"dedent": "^0.7.0",
|
||||||
|
"ejs": "^3.0.2",
|
||||||
|
"gh-pages": "^2.2.0",
|
||||||
|
"glob": "^7.1.6",
|
||||||
|
"highlight.js": "^10.4.1",
|
||||||
|
"live-server": "^1.2.1",
|
||||||
|
"mkdirp": "^1.0.4",
|
||||||
|
"postcss": "^8.2.12",
|
||||||
|
"postcss-calc": "^7.0.2",
|
||||||
|
"postcss-copy": "^7.1.0",
|
||||||
|
"postcss-css-variables": "^0.19.0",
|
||||||
|
"postcss-inline": "^1.2.0",
|
||||||
|
"postcss-inline-svg": "^4.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
16
packages/webapp/public/98.css/server.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
const chokidar = require("chokidar");
|
||||||
|
const build = require("./build");
|
||||||
|
|
||||||
|
chokidar
|
||||||
|
.watch(["style.css", "build.js", "docs", "fonts", "icon"], {
|
||||||
|
usePolling: true,
|
||||||
|
})
|
||||||
|
.on("change", (file) => {
|
||||||
|
console.log(
|
||||||
|
`[${new Date().toLocaleTimeString()}] ${file} changed -- rebuilding...`
|
||||||
|
);
|
||||||
|
build();
|
||||||
|
});
|
||||||
|
|
||||||
|
var liveServer = require("live-server");
|
||||||
|
liveServer.start({ port: 3000, root: "dist" });
|
||||||
994
packages/webapp/public/98.css/style.css
Normal file
@@ -0,0 +1,994 @@
|
|||||||
|
/**
|
||||||
|
* 98.css
|
||||||
|
* Copyright (c) 2020 Jordan Scales <thatjdanisso.cool>
|
||||||
|
* https://github.com/jdan/98.css/blob/main/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
:root {
|
||||||
|
/* Color */
|
||||||
|
--text-color: #222222;
|
||||||
|
--surface: #c0c0c0;
|
||||||
|
--button-highlight: #ffffff;
|
||||||
|
--button-face: #dfdfdf;
|
||||||
|
--button-shadow: #808080;
|
||||||
|
--window-frame: #0a0a0a;
|
||||||
|
--dialog-blue: #000080;
|
||||||
|
--dialog-blue-light: #1084d0;
|
||||||
|
--dialog-gray: #808080;
|
||||||
|
--dialog-gray-light: #b5b5b5;
|
||||||
|
--link-blue: #0000ff;
|
||||||
|
|
||||||
|
/* Spacing */
|
||||||
|
--element-spacing: 8px;
|
||||||
|
--grouped-button-spacing: 4px;
|
||||||
|
--grouped-element-spacing: 6px;
|
||||||
|
--radio-width: 12px;
|
||||||
|
--checkbox-width: 13px;
|
||||||
|
--radio-label-spacing: 6px;
|
||||||
|
--range-track-height: 4px;
|
||||||
|
--range-spacing: 10px;
|
||||||
|
|
||||||
|
/* Some detailed computations for radio buttons and checkboxes */
|
||||||
|
--radio-total-width-precalc: var(--radio-width) + var(--radio-label-spacing);
|
||||||
|
--radio-total-width: calc(var(--radio-total-width-precalc));
|
||||||
|
--radio-left: calc(-1 * var(--radio-total-width-precalc));
|
||||||
|
--radio-dot-width: 4px;
|
||||||
|
--radio-dot-top: calc(var(--radio-width) / 2 - var(--radio-dot-width) / 2);
|
||||||
|
--radio-dot-left: calc(
|
||||||
|
-1 * (var(--radio-total-width-precalc)) + var(--radio-width) / 2 - var(
|
||||||
|
--radio-dot-width
|
||||||
|
) / 2
|
||||||
|
);
|
||||||
|
|
||||||
|
--checkbox-total-width-precalc: var(--checkbox-width) +
|
||||||
|
var(--radio-label-spacing);
|
||||||
|
--checkbox-total-width: calc(var(--checkbox-total-width-precalc));
|
||||||
|
--checkbox-left: calc(-1 * var(--checkbox-total-width-precalc));
|
||||||
|
--checkmark-width: 7px;
|
||||||
|
--checkmark-left: 3px;
|
||||||
|
|
||||||
|
/* Borders */
|
||||||
|
--border-width: 1px;
|
||||||
|
--border-raised-outer: inset -1px -1px var(--window-frame),
|
||||||
|
inset 1px 1px var(--button-highlight);
|
||||||
|
--border-raised-inner: inset -2px -2px var(--button-shadow),
|
||||||
|
inset 2px 2px var(--button-face);
|
||||||
|
--border-sunken-outer: inset -1px -1px var(--button-highlight),
|
||||||
|
inset 1px 1px var(--window-frame);
|
||||||
|
--border-sunken-inner: inset -2px -2px var(--button-face),
|
||||||
|
inset 2px 2px var(--button-shadow);
|
||||||
|
--default-button-border-raised-outer: inset -2px -2px var(--window-frame), inset 1px 1px var(--window-frame);
|
||||||
|
--default-button-border-raised-inner: inset 2px 2px var(--button-highlight), inset -3px -3px var(--button-shadow), inset 3px 3px var(--button-face);
|
||||||
|
--default-button-border-sunken-outer: inset 2px 2px var(--window-frame), inset -1px -1px var(--window-frame);
|
||||||
|
--default-button-border-sunken-inner: inset -2px -2px var(--button-highlight), inset 3px 3px var(--button-shadow), inset -3px -3px var(--button-face);
|
||||||
|
|
||||||
|
|
||||||
|
/* Window borders flip button-face and button-highlight */
|
||||||
|
--border-window-outer: inset -1px -1px var(--window-frame),
|
||||||
|
inset 1px 1px var(--button-face);
|
||||||
|
--border-window-inner: inset -2px -2px var(--button-shadow),
|
||||||
|
inset 2px 2px var(--button-highlight);
|
||||||
|
|
||||||
|
/* Field borders (checkbox, input, etc) flip window-frame and button-shadow */
|
||||||
|
--border-field: inset -1px -1px var(--button-highlight),
|
||||||
|
inset 1px 1px var(--button-shadow), inset -2px -2px var(--button-face),
|
||||||
|
inset 2px 2px var(--window-frame);
|
||||||
|
--border-status-field: inset -1px -1px var(--button-face), inset 1px 1px var(--button-shadow);
|
||||||
|
|
||||||
|
/* Tabs */
|
||||||
|
--border-tab: inset -1px 0 var(--window-frame),
|
||||||
|
inset 1px 1px var(--button-face),
|
||||||
|
inset -2px 0 var(--button-shadow),
|
||||||
|
inset 2px 2px var(--button-highlight)
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Pixelated MS Sans Serif";
|
||||||
|
src: url("fonts/converted/ms_sans_serif.woff") format("woff");
|
||||||
|
src: url("fonts/converted/ms_sans_serif.woff2") format("woff2");
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Pixelated MS Sans Serif";
|
||||||
|
src: url("fonts/converted/ms_sans_serif_bold.woff") format("woff");
|
||||||
|
src: url("fonts/converted/ms_sans_serif_bold.woff2") format("woff2");
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: Arial;
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
label,
|
||||||
|
input,
|
||||||
|
legend,
|
||||||
|
textarea,
|
||||||
|
select,
|
||||||
|
option,
|
||||||
|
table,
|
||||||
|
ul.tree-view,
|
||||||
|
.window,
|
||||||
|
.title-bar,
|
||||||
|
li[role=tab] {
|
||||||
|
font-family: "Pixelated MS Sans Serif", Arial;
|
||||||
|
-webkit-font-smoothing: none;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
u {
|
||||||
|
text-decoration: none;
|
||||||
|
border-bottom: 0.5px solid #222222;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input[type="submit"],
|
||||||
|
input[type="reset"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: none;
|
||||||
|
color: transparent;
|
||||||
|
text-shadow: 0 0 var(--text-color);
|
||||||
|
background: var(--surface);
|
||||||
|
box-shadow: var(--border-raised-outer), var(--border-raised-inner);
|
||||||
|
border-radius: 0;
|
||||||
|
|
||||||
|
min-width: 75px;
|
||||||
|
min-height: 23px;
|
||||||
|
padding: 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.default,
|
||||||
|
input[type="submit"].default,
|
||||||
|
input[type="reset"].default {
|
||||||
|
box-shadow: var(--default-button-border-raised-outer), var(--default-button-border-raised-inner);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vertical-bar {
|
||||||
|
width: 4px;
|
||||||
|
height: 20px;
|
||||||
|
background: #c0c0c0;
|
||||||
|
box-shadow: var(--border-raised-outer), var(--border-raised-inner);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:not(:disabled):active,
|
||||||
|
input[type="submit"]:not(:disabled):active,
|
||||||
|
input[type="reset"]:not(:disabled):active {
|
||||||
|
box-shadow: var(--border-sunken-outer), var(--border-sunken-inner);
|
||||||
|
text-shadow: 1px 1px var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
button.default:not(:disabled):active,
|
||||||
|
input[type="submit"].default:not(:disabled):active,
|
||||||
|
input[type="reset"].default:not(:disabled):active {
|
||||||
|
box-shadow: var(--default-button-border-sunken-outer), var(--default-button-border-sunken-inner);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (not(hover)) {
|
||||||
|
button:not(:disabled):hover,
|
||||||
|
input[type="submit"]:not(:disabled):hover,
|
||||||
|
input[type="reset"]:not(:disabled):hover {
|
||||||
|
box-shadow: var(--border-sunken-outer), var(--border-sunken-inner);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus,
|
||||||
|
input[type="submit"]:focus,
|
||||||
|
input[type="reset"]:focus {
|
||||||
|
outline: 1px dotted #000000;
|
||||||
|
outline-offset: -4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
input[type="submit"]::-moz-focus-inner,
|
||||||
|
input[type="reset"]::-moz-focus-inner {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
:disabled,
|
||||||
|
:disabled + label,
|
||||||
|
input[readonly],
|
||||||
|
input[readonly] + label {
|
||||||
|
color: var(--button-shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:disabled,
|
||||||
|
input[type="submit"]:disabled,
|
||||||
|
input[type="reset"]:disabled,
|
||||||
|
:disabled + label {
|
||||||
|
text-shadow: 1px 1px 0 var(--button-highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
.window {
|
||||||
|
box-shadow: var(--border-window-outer), var(--border-window-inner);
|
||||||
|
background: var(--surface);
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar {
|
||||||
|
background: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
var(--dialog-blue),
|
||||||
|
var(--dialog-blue-light)
|
||||||
|
);
|
||||||
|
padding: 3px 2px 3px 3px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar.inactive {
|
||||||
|
background: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
var(--dialog-gray),
|
||||||
|
var(--dialog-gray-light)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-text {
|
||||||
|
font-weight: bold;
|
||||||
|
color: white;
|
||||||
|
letter-spacing: 0;
|
||||||
|
margin-right: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-controls {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-controls button {
|
||||||
|
padding: 0;
|
||||||
|
display: block;
|
||||||
|
min-width: 16px;
|
||||||
|
min-height: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-controls button:active {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-controls button:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-controls button[aria-label="Minimize"],
|
||||||
|
.title-bar-controls button[aria-label].minimize {
|
||||||
|
background-image: svg-load("./icon/minimize.svg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: bottom 3px left 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-controls button[aria-label="Maximize"],
|
||||||
|
.title-bar-controls button[aria-label].maximize {
|
||||||
|
background-image: svg-load("./icon/maximize.svg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: top 2px left 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-controls button[aria-label="Maximize"]:disabled,
|
||||||
|
.title-bar-controls button[aria-label].maximize:disabled {
|
||||||
|
background-image: svg-load("./icon/maximize-disabled.svg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: top 2px left 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-controls button[aria-label="Restore"],
|
||||||
|
.title-bar-controls button[aria-label].restore {
|
||||||
|
background-image: svg-load("./icon/restore.svg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: top 2px left 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-controls button[aria-label="Help"],
|
||||||
|
.title-bar-controls button[aria-label].help {
|
||||||
|
background-image: svg-load("./icon/help.svg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: top 2px left 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-bar-controls button[aria-label="Close"],
|
||||||
|
.title-bar-controls button[aria-label].close {
|
||||||
|
margin-left: 2px;
|
||||||
|
background-image: svg-load("./icon/close.svg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: top 3px left 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-bar {
|
||||||
|
margin: 0px 1px;
|
||||||
|
display: flex;
|
||||||
|
gap: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-bar-field {
|
||||||
|
box-shadow: var(--border-status-field);
|
||||||
|
flex-grow: 1;
|
||||||
|
padding: 2px 3px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.window-body {
|
||||||
|
margin: var(--element-spacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border-image: svg-load("./icon/groupbox-border.svg") 2;
|
||||||
|
padding: calc(2 * var(--border-width) + var(--element-spacing));
|
||||||
|
padding-block-start: var(--element-spacing);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
background: var(--surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class^="field-row"] + [class^="field-row"] {
|
||||||
|
margin-top: var(--grouped-element-spacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-row > * + * {
|
||||||
|
margin-left: var(--grouped-element-spacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-row-stacked {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-row-stacked * + * {
|
||||||
|
margin-top: var(--grouped-element-spacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
appearance: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
margin: 0;
|
||||||
|
background: 0;
|
||||||
|
position: fixed;
|
||||||
|
opacity: 0;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"] + label,
|
||||||
|
input[type="checkbox"] + label {
|
||||||
|
line-height: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"] + label {
|
||||||
|
position: relative;
|
||||||
|
margin-left: var(--radio-total-width);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"] + label::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: calc(-1 * (var(--radio-total-width-precalc)));
|
||||||
|
display: inline-block;
|
||||||
|
width: var(--radio-width);
|
||||||
|
height: var(--radio-width);
|
||||||
|
margin-right: var(--radio-label-spacing);
|
||||||
|
background: svg-load("./icon/radio-border.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"]:active + label::before {
|
||||||
|
background: svg-load("./icon/radio-border-disabled.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"]:checked + label::after {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
width: var(--radio-dot-width);
|
||||||
|
height: var(--radio-dot-width);
|
||||||
|
top: var(--radio-dot-top);
|
||||||
|
left: var(--radio-dot-left);
|
||||||
|
position: absolute;
|
||||||
|
background: svg-load("./icon/radio-dot.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"]:focus + label,
|
||||||
|
input[type="checkbox"]:focus + label {
|
||||||
|
outline: 1px dotted #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"][disabled] + label::before {
|
||||||
|
background: svg-load("./icon/radio-border-disabled.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"][disabled]:checked + label::after {
|
||||||
|
background: svg-load("./icon/radio-dot-disabled.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"] + label {
|
||||||
|
position: relative;
|
||||||
|
margin-left: var(--checkbox-total-width);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"] + label::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
left: calc(-1 * (var(--checkbox-total-width-precalc)));
|
||||||
|
display: inline-block;
|
||||||
|
width: var(--checkbox-width);
|
||||||
|
height: var(--checkbox-width);
|
||||||
|
background: var(--button-highlight);
|
||||||
|
box-shadow: var(--border-field);
|
||||||
|
margin-right: var(--radio-label-spacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"]:active + label::before {
|
||||||
|
background: var(--surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"]:checked + label::after {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
width: var(--checkmark-width);
|
||||||
|
height: var(--checkmark-width);
|
||||||
|
position: absolute;
|
||||||
|
left: calc(
|
||||||
|
-1 * (var(--checkbox-total-width-precalc)) + var(--checkmark-left)
|
||||||
|
);
|
||||||
|
background: svg-load("./icon/checkmark.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"][disabled] + label::before {
|
||||||
|
background: var(--surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"][disabled]:checked + label::after {
|
||||||
|
background: svg-load("./icon/checkmark-disabled.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="password"],
|
||||||
|
input[type="email"],
|
||||||
|
input[type="url"],
|
||||||
|
input[type="tel"],
|
||||||
|
input[type="number"],
|
||||||
|
input[type="search"],
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
padding: 3px 4px;
|
||||||
|
border: none;
|
||||||
|
box-shadow: var(--border-field);
|
||||||
|
background-color: var(--button-highlight);
|
||||||
|
box-sizing: border-box;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="password"],
|
||||||
|
input[type="email"],
|
||||||
|
input[type="url"],
|
||||||
|
input[type="tel"],
|
||||||
|
input[type="search"],
|
||||||
|
select {
|
||||||
|
height: 21px;
|
||||||
|
}
|
||||||
|
input[type="number"] {
|
||||||
|
/* need this 1 pixel to fit the spinner controls in box */
|
||||||
|
height: 22px;
|
||||||
|
}
|
||||||
|
/* clears the ‘X’ from Internet Explorer */
|
||||||
|
input[type=search]::-ms-clear { display: none; width : 0; height: 0; }
|
||||||
|
input[type=search]::-ms-reveal { display: none; width : 0; height: 0; }
|
||||||
|
/* clears the ‘X’ from Chrome */
|
||||||
|
input[type="search"]::-webkit-search-decoration,
|
||||||
|
input[type="search"]::-webkit-search-cancel-button,
|
||||||
|
input[type="search"]::-webkit-search-results-button,
|
||||||
|
input[type="search"]::-webkit-search-results-decoration { display: none; }
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="password"],
|
||||||
|
input[type="email"],
|
||||||
|
input[type="url"],
|
||||||
|
input[type="tel"],
|
||||||
|
input[type="number"],
|
||||||
|
input[type="search"] {
|
||||||
|
/* For some reason descenders are getting cut off without this */
|
||||||
|
line-height: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="email"]:disabled,
|
||||||
|
input[type="url"]:disabled,
|
||||||
|
input[type="tel"]:disabled,
|
||||||
|
input[type="password"]:disabled,
|
||||||
|
input[type="text"]:disabled,
|
||||||
|
input[type="number"]:disabled,
|
||||||
|
input[type="search"]:disabled,
|
||||||
|
input[type="email"]:read-only,
|
||||||
|
input[type="url"]:read-only,
|
||||||
|
input[type="tel"]:read-only,
|
||||||
|
input[type="password"]:read-only,
|
||||||
|
input[type="text"]:read-only,
|
||||||
|
input[type="number"]:read-only,
|
||||||
|
input[type="search"]:read-only,
|
||||||
|
textarea:disabled {
|
||||||
|
background-color: var(--surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
appearance: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
position: relative;
|
||||||
|
padding-right: 32px;
|
||||||
|
background-image: svg-load("./icon/button-down.svg");
|
||||||
|
background-position: top 2px right 2px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
select:focus,
|
||||||
|
input[type="text"]:focus,
|
||||||
|
input[type="password"]:focus,
|
||||||
|
input[type="email"]:focus,
|
||||||
|
input[type="url"]:focus,
|
||||||
|
input[type="tel"]:focus,
|
||||||
|
input[type="number"]:focus,
|
||||||
|
input[type="search"]:focus,
|
||||||
|
textarea:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="range"] {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
width: 100%;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="range"]:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="range"]::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
height: 21px;
|
||||||
|
width: 11px;
|
||||||
|
background: svg-load("./icon/indicator-horizontal.svg");
|
||||||
|
transform: translateY(-8px);
|
||||||
|
box-shadow: none;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="range"].has-box-indicator::-webkit-slider-thumb {
|
||||||
|
background: svg-load("./icon/indicator-rectangle-horizontal.svg");
|
||||||
|
transform: translateY(-10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="range"]::-moz-range-thumb {
|
||||||
|
height: 21px;
|
||||||
|
width: 11px;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
background: svg-load("./icon/indicator-horizontal.svg");
|
||||||
|
transform: translateY(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="range"].has-box-indicator::-moz-range-thumb {
|
||||||
|
background: svg-load("./icon/indicator-rectangle-horizontal.svg");
|
||||||
|
transform: translateY(0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="range"]::-webkit-slider-runnable-track {
|
||||||
|
width: 100%;
|
||||||
|
height: 2px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: black;
|
||||||
|
border-right: 1px solid grey;
|
||||||
|
border-bottom: 1px solid grey;
|
||||||
|
box-shadow: 1px 0 0 white, 1px 1px 0 white, 0 1px 0 white, -1px 0 0 darkgrey,
|
||||||
|
-1px -1px 0 darkgrey, 0 -1px 0 darkgrey, -1px 1px 0 white, 1px -1px darkgrey;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="range"]::-moz-range-track {
|
||||||
|
width: 100%;
|
||||||
|
height: 2px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: black;
|
||||||
|
border-right: 1px solid grey;
|
||||||
|
border-bottom: 1px solid grey;
|
||||||
|
box-shadow: 1px 0 0 white, 1px 1px 0 white, 0 1px 0 white, -1px 0 0 darkgrey,
|
||||||
|
-1px -1px 0 darkgrey, 0 -1px 0 darkgrey, -1px 1px 0 white, 1px -1px darkgrey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-vertical {
|
||||||
|
display: inline-block;
|
||||||
|
width: 4px;
|
||||||
|
height: 150px;
|
||||||
|
transform: translateY(50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-vertical > input[type="range"] {
|
||||||
|
width: 150px;
|
||||||
|
height: 4px;
|
||||||
|
margin: 0 calc(var(--grouped-element-spacing) + var(--range-spacing)) 0
|
||||||
|
var(--range-spacing);
|
||||||
|
transform-origin: left;
|
||||||
|
transform: rotate(270deg) translateX(calc(-50% + var(--element-spacing)));
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-vertical > input[type="range"]::-webkit-slider-runnable-track {
|
||||||
|
border-left: 1px solid grey;
|
||||||
|
border-right: 0;
|
||||||
|
border-bottom: 1px solid grey;
|
||||||
|
box-shadow: -1px 0 0 white, -1px 1px 0 white, 0 1px 0 white, 1px 0 0 darkgrey,
|
||||||
|
1px -1px 0 darkgrey, 0 -1px 0 darkgrey, 1px 1px 0 white, -1px -1px darkgrey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-vertical > input[type="range"]::-moz-range-track {
|
||||||
|
border-left: 1px solid grey;
|
||||||
|
border-right: 0;
|
||||||
|
border-bottom: 1px solid grey;
|
||||||
|
box-shadow: -1px 0 0 white, -1px 1px 0 white, 0 1px 0 white, 1px 0 0 darkgrey,
|
||||||
|
1px -1px 0 darkgrey, 0 -1px 0 darkgrey, 1px 1px 0 white, -1px -1px darkgrey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-vertical > input[type="range"]::-webkit-slider-thumb {
|
||||||
|
transform: translateY(-8px) scaleX(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-vertical > input[type="range"].has-box-indicator::-webkit-slider-thumb {
|
||||||
|
transform: translateY(-10px) scaleX(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-vertical > input[type="range"]::-moz-range-thumb {
|
||||||
|
transform: translateY(2px) scaleX(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-vertical > input[type="range"].has-box-indicator::-moz-range-thumb {
|
||||||
|
transform: translateY(0px) scaleX(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
select:focus {
|
||||||
|
color: var(--button-highlight);
|
||||||
|
background-color: var(--dialog-blue);
|
||||||
|
}
|
||||||
|
select:focus option {
|
||||||
|
color: #000;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
select:active {
|
||||||
|
background-image: svg-load("./icon/button-down-active.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--link-blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
a:focus {
|
||||||
|
outline: 1px dotted var(--link-blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view {
|
||||||
|
display: block;
|
||||||
|
background: var(--button-highlight);
|
||||||
|
box-shadow: var(--border-field);
|
||||||
|
padding: 6px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view li {
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view a:focus {
|
||||||
|
background-color: var(--dialog-blue);
|
||||||
|
color: var(--button-highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view ul,
|
||||||
|
ul.tree-view li {
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view ul {
|
||||||
|
margin-left: 16px;
|
||||||
|
padding-left: 16px;
|
||||||
|
/* Goes down too far */
|
||||||
|
border-left: 1px dotted #808080;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view ul > li {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.tree-view ul > li::before {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
left: -16px;
|
||||||
|
top: 6px;
|
||||||
|
width: 12px;
|
||||||
|
border-bottom: 1px dotted #808080;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cover the bottom of the left dotted border */
|
||||||
|
ul.tree-view ul > li:last-child::after {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
left: -20px;
|
||||||
|
top: 7px;
|
||||||
|
bottom: 0px;
|
||||||
|
width: 8px;
|
||||||
|
background: var(--button-highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view details {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view details[open] summary {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view ul details > summary:before {
|
||||||
|
margin-left: -22px;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view details > summary:before {
|
||||||
|
text-align: center;
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
content: "+";
|
||||||
|
border: 1px solid #808080;
|
||||||
|
width: 8px;
|
||||||
|
height: 9px;
|
||||||
|
line-height: 8px;
|
||||||
|
margin-right: 5px;
|
||||||
|
padding-left: 1px;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view details[open] > summary:before {
|
||||||
|
content: "-";
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tree-view details > summary::marker,
|
||||||
|
ul.tree-view details > summary::-webkit-details-marker {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
display: block;
|
||||||
|
background: var(--button-highlight);
|
||||||
|
box-shadow: var(--border-field);
|
||||||
|
padding: 12px 8px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
code,
|
||||||
|
code * {
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary:focus {
|
||||||
|
outline: 1px dotted #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 16px;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar:horizontal {
|
||||||
|
height: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-corner {
|
||||||
|
background: var(--button-face);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
background-image: svg-load("./icon/scrollbar-background.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background-color: var(--button-face);
|
||||||
|
box-shadow: var(--border-raised-outer), var(--border-raised-inner);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-button:horizontal:start:decrement,
|
||||||
|
::-webkit-scrollbar-button:horizontal:end:increment,
|
||||||
|
::-webkit-scrollbar-button:vertical:start:decrement,
|
||||||
|
::-webkit-scrollbar-button:vertical:end:increment {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-button:vertical:start {
|
||||||
|
height: 17px;
|
||||||
|
background-image: svg-load("./icon/button-up.svg");
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-button:vertical:end {
|
||||||
|
height: 17px;
|
||||||
|
background-image: svg-load("./icon/button-down.svg");
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-button:horizontal:start {
|
||||||
|
width: 16px;
|
||||||
|
background-image: svg-load("./icon/button-left.svg");
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-button:horizontal:end {
|
||||||
|
width: 16px;
|
||||||
|
background-image: svg-load("./icon/button-right.svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.window[role=tabpanel] {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu[role=tablist] {
|
||||||
|
position: relative;
|
||||||
|
margin: 0 0 -2px 0;
|
||||||
|
text-indent: 0;
|
||||||
|
list-style-type: none;
|
||||||
|
display: flex;
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu[role=tablist] > li {
|
||||||
|
border-top-left-radius: 3px;
|
||||||
|
border-top-right-radius: 3px;
|
||||||
|
box-shadow: var(--border-tab);
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu[role=tablist] > li[aria-selected=true] {
|
||||||
|
padding-bottom: 2px;
|
||||||
|
margin-top: -2px;
|
||||||
|
background-color: var(--surface);
|
||||||
|
position: relative;
|
||||||
|
z-index: 8;
|
||||||
|
margin-left: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu[role=tablist] > li > a {
|
||||||
|
display: block;
|
||||||
|
color: #222;
|
||||||
|
margin: 6px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
menu[role=tablist] > li[aria-selected=true] > a:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
menu[role=tablist] > li > a:focus {
|
||||||
|
outline: 1px dotted #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu[role=tablist].multirows > li {
|
||||||
|
flex-grow: 1;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.sunken-panel {
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 2px groove transparent;
|
||||||
|
border-image: svg-load("./icon/sunken-panel-border.svg") 2;
|
||||||
|
overflow: auto;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
position: relative;
|
||||||
|
text-align: left;
|
||||||
|
white-space: nowrap;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
table > thead > tr > * {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
height: 17px;
|
||||||
|
box-shadow: var(--border-raised-outer), var(--border-raised-inner);
|
||||||
|
background: var(--surface);
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 0 var(--grouped-element-spacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
table.interactive > tbody > tr {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
table > tbody > tr.highlighted {
|
||||||
|
color: #fff;
|
||||||
|
background-color: var(--dialog-blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
table > tbody > tr > * {
|
||||||
|
padding: 0 var(--grouped-element-spacing);
|
||||||
|
height: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress-indicator {
|
||||||
|
height: 32px;
|
||||||
|
position: relative;
|
||||||
|
box-shadow: var(--border-sunken-inner);
|
||||||
|
padding: 4px 4px;
|
||||||
|
border: none;
|
||||||
|
box-sizing: border-box;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.progress-indicator > .progress-indicator-bar {
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
background-color: var(--dialog-blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress-indicator.segmented > .progress-indicator-bar {
|
||||||
|
width: 100%;
|
||||||
|
background-color: transparent; /* resets the background color which is set to blue in the non-segmented selector */
|
||||||
|
background-image: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
var(--dialog-blue) 0 16px,
|
||||||
|
transparent 0 2px
|
||||||
|
);
|
||||||
|
background-repeat: repeat;
|
||||||
|
background-size: 18px 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-border {
|
||||||
|
background: var(--button-highlight);
|
||||||
|
box-shadow: var(--border-field);
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-border-disabled {
|
||||||
|
background: var(--surface);
|
||||||
|
box-shadow: var(--border-field);
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-field-border {
|
||||||
|
background: var(--surface);
|
||||||
|
box-shadow: var(--border-status-field);
|
||||||
|
padding: 1px;
|
||||||
|
}
|
||||||
10
packages/webapp/src/@types/i18next.d.ts
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import type { defaultNS, resources } from "@/i18n"
|
||||||
|
|
||||||
|
|
||||||
|
declare module "i18next" {
|
||||||
|
interface CustomTypeOptions {
|
||||||
|
enableSelector: true
|
||||||
|
defaultNS: typeof defaultNS
|
||||||
|
resources: typeof resources["en"]
|
||||||
|
}
|
||||||
|
}
|
||||||
56
packages/webapp/src/components/ui/button.tsx
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
import { Slot } from "@radix-ui/react-slot"
|
||||||
|
import { cva, type VariantProps } from "class-variance-authority"
|
||||||
|
|
||||||
|
import type * as React from "react"
|
||||||
|
|
||||||
|
import { cn } from "@/lib/utils"
|
||||||
|
|
||||||
|
const buttonVariants = cva(
|
||||||
|
"inline-flex items-center justify-center whitespace-nowrap rounded-base text-sm font-base ring-offset-white transition-all gap-2 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
|
||||||
|
{
|
||||||
|
variants: {
|
||||||
|
variant: {
|
||||||
|
default:
|
||||||
|
"text-main-foreground bg-main border-2 border-border shadow-shadow hover:translate-x-boxShadowX hover:translate-y-boxShadowY hover:shadow-none",
|
||||||
|
noShadow: "text-main-foreground bg-main border-2 border-border",
|
||||||
|
neutral:
|
||||||
|
"bg-secondary-background text-foreground border-2 border-border shadow-shadow hover:translate-x-boxShadowX hover:translate-y-boxShadowY hover:shadow-none",
|
||||||
|
reverse:
|
||||||
|
"text-main-foreground bg-main border-2 border-border hover:translate-x-reverseBoxShadowX hover:translate-y-reverseBoxShadowY hover:shadow-shadow",
|
||||||
|
},
|
||||||
|
size: {
|
||||||
|
default: "h-10 px-4 py-2",
|
||||||
|
sm: "h-9 px-3",
|
||||||
|
lg: "h-11 px-8",
|
||||||
|
icon: "size-10",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
defaultVariants: {
|
||||||
|
variant: "default",
|
||||||
|
size: "default",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
function Button({
|
||||||
|
className,
|
||||||
|
variant,
|
||||||
|
size,
|
||||||
|
asChild = false,
|
||||||
|
...props
|
||||||
|
}: React.ComponentProps<"button"> &
|
||||||
|
VariantProps<typeof buttonVariants> & {
|
||||||
|
asChild?: boolean
|
||||||
|
}) {
|
||||||
|
const Comp = asChild ? Slot : "button"
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Comp
|
||||||
|
data-slot="button"
|
||||||
|
className={cn(buttonVariants({ variant, size, className }))}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export { Button, buttonVariants }
|
||||||
50
packages/webapp/src/components/ui/tooltip.tsx
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import * as TooltipPrimitive from "@radix-ui/react-tooltip"
|
||||||
|
|
||||||
|
import type * as React from "react"
|
||||||
|
|
||||||
|
import { cn } from "@/lib/utils"
|
||||||
|
|
||||||
|
function TooltipProvider({
|
||||||
|
delayDuration = 0,
|
||||||
|
...props
|
||||||
|
}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
|
||||||
|
return (
|
||||||
|
<TooltipPrimitive.Provider
|
||||||
|
data-slot="tooltip-provider"
|
||||||
|
delayDuration={delayDuration}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
function Tooltip({
|
||||||
|
...props
|
||||||
|
}: React.ComponentProps<typeof TooltipPrimitive.Root>) {
|
||||||
|
return <TooltipPrimitive.Root data-slot="tooltip" {...props} />
|
||||||
|
}
|
||||||
|
|
||||||
|
function TooltipTrigger({
|
||||||
|
...props
|
||||||
|
}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
|
||||||
|
return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />
|
||||||
|
}
|
||||||
|
|
||||||
|
function TooltipContent({
|
||||||
|
className,
|
||||||
|
sideOffset = 4,
|
||||||
|
...props
|
||||||
|
}: React.ComponentProps<typeof TooltipPrimitive.Content>) {
|
||||||
|
return (
|
||||||
|
<TooltipPrimitive.Content
|
||||||
|
data-slot="tooltip-content"
|
||||||
|
sideOffset={sideOffset}
|
||||||
|
className={cn(
|
||||||
|
"fade-in-0 zoom-in-95 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 origin-(--radix-tooltip-content-transform-origin) animate-in overflow-hidden rounded-base border-2 border-border bg-main px-3 py-1.5 font-base text-main-foreground text-sm data-[state=closed]:animate-out",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
|
||||||
14
packages/webapp/src/i18n/en.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export const en = {
|
||||||
|
common: {},
|
||||||
|
|
||||||
|
nav: {
|
||||||
|
gitRepos: {
|
||||||
|
title: "Git Repos",
|
||||||
|
tooltip: "All the public repositories on my Git server",
|
||||||
|
},
|
||||||
|
sourceCode: {
|
||||||
|
title: "Source code",
|
||||||
|
tooltip: "Source code for this website",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
16
packages/webapp/src/i18n/fr.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import type { en } from "./en"
|
||||||
|
|
||||||
|
|
||||||
|
export const fr = {
|
||||||
|
common: {},
|
||||||
|
nav: {
|
||||||
|
gitRepos: {
|
||||||
|
title: "Dépôts Git",
|
||||||
|
tooltip: "Tous les dépôts publics de mon serveur Git",
|
||||||
|
},
|
||||||
|
sourceCode: {
|
||||||
|
title: "Code source",
|
||||||
|
tooltip: "Code source de ce site",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} satisfies typeof en
|
||||||
24
packages/webapp/src/i18n/index.ts
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import i18n from "i18next"
|
||||||
|
import LanguageDetector from "i18next-browser-languagedetector"
|
||||||
|
import { initReactI18next } from "react-i18next"
|
||||||
|
import { en } from "./en"
|
||||||
|
import { fr } from "./fr"
|
||||||
|
|
||||||
|
|
||||||
|
export const defaultNS = "common"
|
||||||
|
export const resources = { en, fr } as const
|
||||||
|
|
||||||
|
await i18n
|
||||||
|
.use(initReactI18next)
|
||||||
|
.use(LanguageDetector)
|
||||||
|
.init({
|
||||||
|
fallbackLng: "en",
|
||||||
|
supportedLngs: ["en", "fr"],
|
||||||
|
defaultNS,
|
||||||
|
resources,
|
||||||
|
interpolation: {
|
||||||
|
escapeValue: false
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
export { i18n }
|
||||||
@@ -3,86 +3,22 @@
|
|||||||
@import "tw-animate-css";
|
@import "tw-animate-css";
|
||||||
@import "@fontsource/work-sans";
|
@import "@fontsource/work-sans";
|
||||||
|
|
||||||
@custom-variant dark (&:is(.dark *));
|
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--background: oklch(1 0 0);
|
--background: hsl(220 23% 95%);
|
||||||
--secondary-background: oklch(100% 0 0);
|
--secondary-background: oklch(100% 0 0);
|
||||||
--foreground: oklch(0.145 0 0);
|
--foreground: oklch(0% 0 0);
|
||||||
--main-foreground: oklch(0% 0 0);
|
--main-foreground: oklch(0% 0 0);
|
||||||
--main: oklch(72.27% 0.1894 50.19);
|
--main: hsl(220 23% 95%);
|
||||||
--border: oklch(0.922 0 0);
|
--border: oklch(0% 0 0);
|
||||||
--ring: oklch(0.708 0 0);
|
--ring: oklch(0% 0 0);
|
||||||
--overlay: oklch(0% 0 0 / 0.8);
|
--overlay: oklch(0% 0 0 / 0.8);
|
||||||
--shadow: 4px 4px 0px 0px var(--border);
|
--shadow: 4px 4px 0px 0px var(--border);
|
||||||
--chart-1: oklch(0.646 0.222 41.116);
|
--chart-1: #FF7A05;
|
||||||
--chart-2: oklch(0.6 0.118 184.704);
|
--chart-2: #0099FF;
|
||||||
--chart-3: oklch(0.398 0.07 227.392);
|
--chart-3: #FFBF00;
|
||||||
--chart-4: oklch(0.828 0.189 84.429);
|
--chart-4: #00D696;
|
||||||
--chart-5: oklch(0.769 0.188 70.08);
|
--chart-5: #7A83FF;
|
||||||
--chart-active-dot: #000;
|
--chart-active-dot: #000;
|
||||||
--radius: 0.625rem;
|
|
||||||
--card: oklch(1 0 0);
|
|
||||||
--card-foreground: oklch(0.145 0 0);
|
|
||||||
--popover: oklch(1 0 0);
|
|
||||||
--popover-foreground: oklch(0.145 0 0);
|
|
||||||
--primary: oklch(0.205 0 0);
|
|
||||||
--primary-foreground: oklch(0.985 0 0);
|
|
||||||
--secondary: oklch(0.97 0 0);
|
|
||||||
--secondary-foreground: oklch(0.205 0 0);
|
|
||||||
--muted: oklch(0.97 0 0);
|
|
||||||
--muted-foreground: oklch(0.556 0 0);
|
|
||||||
--accent: oklch(0.97 0 0);
|
|
||||||
--accent-foreground: oklch(0.205 0 0);
|
|
||||||
--destructive: oklch(0.577 0.245 27.325);
|
|
||||||
--input: oklch(0.922 0 0);
|
|
||||||
--sidebar: oklch(0.985 0 0);
|
|
||||||
--sidebar-foreground: oklch(0.145 0 0);
|
|
||||||
--sidebar-primary: oklch(0.205 0 0);
|
|
||||||
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
||||||
--sidebar-accent: oklch(0.97 0 0);
|
|
||||||
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
||||||
--sidebar-border: oklch(0.922 0 0);
|
|
||||||
--sidebar-ring: oklch(0.708 0 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark {
|
|
||||||
--background: oklch(0.145 0 0);
|
|
||||||
--secondary-background: oklch(23.93% 0 0);
|
|
||||||
--foreground: oklch(0.985 0 0);
|
|
||||||
--main-foreground: oklch(0% 0 0);
|
|
||||||
--main: oklch(67.56% 0.1796 49.61);
|
|
||||||
--border: oklch(1 0 0 / 10%);
|
|
||||||
--ring: oklch(0.556 0 0);
|
|
||||||
--shadow: 4px 4px 0px 0px var(--border);
|
|
||||||
--chart-1: oklch(0.488 0.243 264.376);
|
|
||||||
--chart-2: oklch(0.696 0.17 162.48);
|
|
||||||
--chart-3: oklch(0.769 0.188 70.08);
|
|
||||||
--chart-4: oklch(0.627 0.265 303.9);
|
|
||||||
--chart-5: oklch(0.645 0.246 16.439);
|
|
||||||
--chart-active-dot: #fff;
|
|
||||||
--card: oklch(0.205 0 0);
|
|
||||||
--card-foreground: oklch(0.985 0 0);
|
|
||||||
--popover: oklch(0.205 0 0);
|
|
||||||
--popover-foreground: oklch(0.985 0 0);
|
|
||||||
--primary: oklch(0.922 0 0);
|
|
||||||
--primary-foreground: oklch(0.205 0 0);
|
|
||||||
--secondary: oklch(0.269 0 0);
|
|
||||||
--secondary-foreground: oklch(0.985 0 0);
|
|
||||||
--muted: oklch(0.269 0 0);
|
|
||||||
--muted-foreground: oklch(0.708 0 0);
|
|
||||||
--accent: oklch(0.269 0 0);
|
|
||||||
--accent-foreground: oklch(0.985 0 0);
|
|
||||||
--destructive: oklch(0.704 0.191 22.216);
|
|
||||||
--input: oklch(1 0 0 / 15%);
|
|
||||||
--sidebar: oklch(0.205 0 0);
|
|
||||||
--sidebar-foreground: oklch(0.985 0 0);
|
|
||||||
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
||||||
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
||||||
--sidebar-accent: oklch(0.269 0 0);
|
|
||||||
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
||||||
--sidebar-border: oklch(1 0 0 / 10%);
|
|
||||||
--sidebar-ring: oklch(0.556 0 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@theme inline {
|
@theme inline {
|
||||||
@@ -108,53 +44,15 @@
|
|||||||
--shadow-shadow: var(--shadow);
|
--shadow-shadow: var(--shadow);
|
||||||
--font-weight-base: 500;
|
--font-weight-base: 500;
|
||||||
--font-weight-heading: 700;
|
--font-weight-heading: 700;
|
||||||
--color-sidebar-ring: var(--sidebar-ring);
|
|
||||||
--color-sidebar-border: var(--sidebar-border);
|
|
||||||
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
||||||
--color-sidebar-accent: var(--sidebar-accent);
|
|
||||||
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
||||||
--color-sidebar-primary: var(--sidebar-primary);
|
|
||||||
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
||||||
--color-sidebar: var(--sidebar);
|
|
||||||
--color-input: var(--input);
|
|
||||||
--color-destructive: var(--destructive);
|
|
||||||
--color-accent-foreground: var(--accent-foreground);
|
|
||||||
--color-accent: var(--accent);
|
|
||||||
--color-muted-foreground: var(--muted-foreground);
|
|
||||||
--color-muted: var(--muted);
|
|
||||||
--color-secondary-foreground: var(--secondary-foreground);
|
|
||||||
--color-secondary: var(--secondary);
|
|
||||||
--color-primary-foreground: var(--primary-foreground);
|
|
||||||
--color-primary: var(--primary);
|
|
||||||
--color-popover-foreground: var(--popover-foreground);
|
|
||||||
--color-popover: var(--popover);
|
|
||||||
--color-card-foreground: var(--card-foreground);
|
|
||||||
--color-card: var(--card);
|
|
||||||
--radius-sm: calc(var(--radius) - 4px);
|
|
||||||
--radius-md: calc(var(--radius) - 2px);
|
|
||||||
--radius-lg: var(--radius);
|
|
||||||
--radius-xl: calc(var(--radius) + 4px);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@layer base {
|
@layer base {
|
||||||
body {
|
body {
|
||||||
@apply text-foreground font-base bg-background;
|
@apply text-foreground font-base bg-background;
|
||||||
|
font-family: "Work Sans", sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6{
|
h1, h2, h3, h4, h5, h6{
|
||||||
@apply font-heading;
|
@apply font-heading;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@layer base {
|
|
||||||
* {
|
|
||||||
@apply border-border outline-ring/50;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
@apply bg-background text-foreground;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
font-family: "Work Sans", sans-serif;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { clsx, type ClassValue } from "clsx"
|
import { type ClassValue, clsx } from "clsx"
|
||||||
import { twMerge } from "tailwind-merge"
|
import { twMerge } from "tailwind-merge"
|
||||||
|
|
||||||
export function cn(...inputs: ClassValue[]) {
|
export function cn(...inputs: ClassValue[]) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { createRouter, RouterProvider } from "@tanstack/react-router"
|
import { createRouter, RouterProvider } from "@tanstack/react-router"
|
||||||
import { StrictMode } from "react"
|
import { StrictMode } from "react"
|
||||||
import { createRoot } from "react-dom/client"
|
import { createRoot } from "react-dom/client"
|
||||||
|
import "./i18n"
|
||||||
import "./index.css"
|
import "./index.css"
|
||||||
import { routeTree } from "./routeTree.gen"
|
import { routeTree } from "./routeTree.gen"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
import { createRootRoute, Outlet } from "@tanstack/react-router"
|
import { createRootRoute, Outlet } from "@tanstack/react-router"
|
||||||
import { TanStackRouterDevtools } from "@tanstack/react-router-devtools"
|
import { TanStackRouterDevtools } from "@tanstack/react-router-devtools"
|
||||||
|
import { useTranslation } from "react-i18next"
|
||||||
|
import { DiGit } from "react-icons/di"
|
||||||
|
import { FaCode } from "react-icons/fa"
|
||||||
|
import root from "react-shadow"
|
||||||
|
import { Button } from "@/components/ui/button"
|
||||||
import { Card, CardContent } from "@/components/ui/card"
|
import { Card, CardContent } from "@/components/ui/card"
|
||||||
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"
|
||||||
|
|
||||||
|
|
||||||
export const Route = createRootRoute({
|
export const Route = createRootRoute({
|
||||||
@@ -8,7 +14,78 @@ export const Route = createRootRoute({
|
|||||||
})
|
})
|
||||||
|
|
||||||
function RootComponent() {
|
function RootComponent() {
|
||||||
|
const { t, i18n } = useTranslation()
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
|
<div className="flex flex-row items-center justify-center gap-2 p-2">
|
||||||
|
<Button
|
||||||
|
variant={i18n.language !== "en" ? "default" : "noShadow"}
|
||||||
|
onClick={() => i18n.changeLanguage("en")}
|
||||||
|
>
|
||||||
|
🇬🇧 English
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
variant={i18n.language !== "fr" ? "default" : "noShadow"}
|
||||||
|
onClick={() => i18n.changeLanguage("fr")}
|
||||||
|
>
|
||||||
|
🇫🇷 Français
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="container mt-20 mr-auto ml-auto">
|
||||||
|
<div className="mr-auto ml-auto flex w-fit flex-row items-start justify-around gap-10">
|
||||||
|
<root.div>
|
||||||
|
<link rel="stylesheet" href="/98.css/dist/98.css" />
|
||||||
|
|
||||||
|
<div className="window" style={{ width: 300 }}>
|
||||||
|
<div className="title-bar">
|
||||||
|
<div className="title-bar-text">Julien Valverde</div>
|
||||||
|
</div>
|
||||||
|
<div className="window-body">
|
||||||
|
<p>There's so much room for activities!</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</root.div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h1>Ingénieur Full Stack • Entrepreneur</h1>
|
||||||
|
|
||||||
|
<p className="mt-2">
|
||||||
|
I am passionate about integrating functionality and design in applications to create intuitive, user-friendly experiences.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div className="flex w-fit flex-row items-center justify-center gap-2 mt-4">
|
||||||
|
<TooltipProvider>
|
||||||
|
<Tooltip>
|
||||||
|
<TooltipTrigger asChild>
|
||||||
|
<Button asChild>
|
||||||
|
<a href="https://git.valverde.cloud"><DiGit /> {t($ => $.gitRepos.title, { ns: "nav" })}</a>
|
||||||
|
</Button>
|
||||||
|
</TooltipTrigger>
|
||||||
|
|
||||||
|
<TooltipContent><p>{t($ => $.gitRepos.tooltip, { ns: "nav" })}</p></TooltipContent>
|
||||||
|
</Tooltip>
|
||||||
|
</TooltipProvider>
|
||||||
|
|
||||||
|
<TooltipProvider>
|
||||||
|
<Tooltip>
|
||||||
|
<TooltipTrigger asChild>
|
||||||
|
<Button asChild>
|
||||||
|
<a href="https://git.valverde.cloud/thilawyn/website"><FaCode /> {t($ => $.sourceCode.title, { ns: "nav" })}</a>
|
||||||
|
</Button>
|
||||||
|
</TooltipTrigger>
|
||||||
|
|
||||||
|
<TooltipContent><p>{t($ => $.sourceCode.tooltip, { ns: "nav" })}</p></TooltipContent>
|
||||||
|
</Tooltip>
|
||||||
|
</TooltipProvider>
|
||||||
|
|
||||||
|
<Button>Resumé</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className="mx-auto w-[750px] max-w-full px-5 pt-28 pb-10 text-foreground">
|
<div className="mx-auto w-[750px] max-w-full px-5 pt-28 pb-10 text-foreground">
|
||||||
<Card>
|
<Card>
|
||||||
<CardContent>
|
<CardContent>
|
||||||
|
|||||||