From 4edb44424638a8204d1ca09e9ed1c400c937d077 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Mon, 30 Mar 2026 00:17:04 +0200 Subject: [PATCH] feat(web): add proper favicon and logo use the official git-bug logo (ladybug with git branches): - copy logo-alpha-flat-bg.svg as favicon and header logo - copy favicon.ico from the old webui for legacy browser support - import logo as React component via vite-plugin-svgr in the Header - add theme-color meta tag and apple-touch-icon - replace Lucide Bug icon with the real logo in the header Co-Authored-By: Claude Opus 4.6 (1M context) --- webui2/index.html | 5 +- webui2/package.json | 1 + webui2/pnpm-lock.yaml | 194 ++++++++++++++++++++++++ webui2/public/favicon.ico | Bin 0 -> 32988 bytes webui2/public/favicon.svg | 16 ++ webui2/src/assets/logo.svg | 16 ++ webui2/src/components/layout/Header.tsx | 5 +- webui2/src/vite-env.d.ts | 1 + webui2/vite.config.ts | 2 + 9 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 webui2/public/favicon.ico create mode 100644 webui2/public/favicon.svg create mode 100644 webui2/src/assets/logo.svg diff --git a/webui2/index.html b/webui2/index.html index 2557eff81159ac1123800343f2eba2245a2631b6..a4e90096c9897376a43961bb58066d249db8f5e4 100644 --- a/webui2/index.html +++ b/webui2/index.html @@ -2,8 +2,11 @@ - + + + + git-bug diff --git a/webui2/package.json b/webui2/package.json index 9578439a4c3d131b00d3a68e7e742fbc7571e40a..cb335e0d1c1c9b15e4dabbd0386aeb6e176cb695 100644 --- a/webui2/package.json +++ b/webui2/package.json @@ -58,6 +58,7 @@ "tailwindcss": "^4.2.2", "typescript": "^6.0.2", "vite": "^8.0.3", + "vite-plugin-svgr": "^5.0.0", "vite-tsconfig-paths": "^6.1.1" }, "packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319" diff --git a/webui2/pnpm-lock.yaml b/webui2/pnpm-lock.yaml index b1b37af11b6836e1a846734eef338ea82b9d7836..6bf2a839105a0fd366e3043cd5d042db35bab0cd 100644 --- a/webui2/pnpm-lock.yaml +++ b/webui2/pnpm-lock.yaml @@ -132,6 +132,9 @@ importers: vite: specifier: ^8.0.3 version: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite-plugin-svgr: + specifier: ^5.0.0 + version: 5.0.0(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) vite-tsconfig-paths: specifier: ^6.1.1 version: 6.1.1(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) @@ -1927,10 +1930,87 @@ packages: '@rolldown/pluginutils@1.0.0-rc.7': resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-svg-dynamic-title@8.0.0': + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-svg-em-dimensions@8.0.0': + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-transform-react-native-svg@8.1.0': + resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-transform-svg-component@8.0.0': + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-preset@8.1.0': + resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/core@8.1.0': + resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} + engines: {node: '>=14'} + + '@svgr/hast-util-to-babel-ast@8.0.0': + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} + engines: {node: '>=14'} + + '@svgr/plugin-jsx@8.1.0': + resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + '@tailwindcss/node@4.2.2': resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} @@ -2276,6 +2356,10 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + caniuse-lite@1.0.30001781: resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} @@ -2475,6 +2559,10 @@ packages: resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -2511,6 +2599,9 @@ packages: estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} @@ -3480,6 +3571,9 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + swap-case@2.0.2: resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} @@ -3654,6 +3748,11 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-plugin-svgr@5.0.0: + resolution: {integrity: sha512-CZFWDtbWSLnF6C+uv8u7E5Ao6UVQYBpJrS6212XsEod/Lm4ErhOoFc01/po4ie5hqvMCr5KYrlMrSGQQEtMtBg==} + peerDependencies: + vite: '>=3.0.0' + vite-tsconfig-paths@6.1.1: resolution: {integrity: sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==} peerDependencies: @@ -5549,8 +5648,84 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.7': {} + '@rollup/pluginutils@5.3.0': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.4 + '@sindresorhus/is@4.6.0': {} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-preset@8.1.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0) + + '@svgr/core@8.1.0(typescript@6.0.2)': + dependencies: + '@babel/core': 7.29.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + camelcase: 6.3.0 + cosmiconfig: 8.3.6(typescript@6.0.2) + snake-case: 3.0.4 + transitivePeerDependencies: + - supports-color + - typescript + + '@svgr/hast-util-to-babel-ast@8.0.0': + dependencies: + '@babel/types': 7.29.0 + entities: 4.5.0 + + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.2))': + dependencies: + '@babel/core': 7.29.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + '@svgr/core': 8.1.0(typescript@6.0.2) + '@svgr/hast-util-to-babel-ast': 8.0.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + '@tailwindcss/node@4.2.2': dependencies: '@jridgewell/remapping': 2.3.5 @@ -5871,6 +6046,8 @@ snapshots: pascal-case: 3.1.2 tslib: 2.8.1 + camelcase@6.3.0: {} + caniuse-lite@1.0.30001781: {} capital-case@1.0.4: @@ -6065,6 +6242,8 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.2 + entities@4.5.0: {} + entities@6.0.1: {} env-paths@2.2.1: {} @@ -6112,6 +6291,8 @@ snapshots: estree-util-is-identifier-name@3.0.0: {} + estree-walker@2.0.2: {} + eventemitter3@5.0.4: {} extend@3.0.2: {} @@ -7440,6 +7621,8 @@ snapshots: dependencies: has-flag: 4.0.0 + svg-parser@2.0.4: {} + swap-case@2.0.2: dependencies: tslib: 2.8.1 @@ -7606,6 +7789,17 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 + vite-plugin-svgr@5.0.0(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + '@rollup/pluginutils': 5.3.0 + '@svgr/core': 8.1.0(typescript@6.0.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.2)) + vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - rollup + - supports-color + - typescript + vite-tsconfig-paths@6.1.1(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: debug: 4.4.3 diff --git a/webui2/public/favicon.ico b/webui2/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..88783392bff8d4ebb486422e2015aa9aaab3ce96 GIT binary patch literal 32988 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 literal 0 HcmV?d00001 diff --git a/webui2/public/favicon.svg b/webui2/public/favicon.svg new file mode 100644 index 0000000000000000000000000000000000000000..b3ea7514998672bc9cac5acbbfca036542e4de40 --- /dev/null +++ b/webui2/public/favicon.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/webui2/src/assets/logo.svg b/webui2/src/assets/logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..b3ea7514998672bc9cac5acbbfca036542e4de40 --- /dev/null +++ b/webui2/src/assets/logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/webui2/src/components/layout/Header.tsx b/webui2/src/components/layout/Header.tsx index f66883bebef51086ae4871882deb0789419ef420..4bfc0f89a2f37b6039420b4fd59ca14ec60835e7 100644 --- a/webui2/src/components/layout/Header.tsx +++ b/webui2/src/components/layout/Header.tsx @@ -7,8 +7,9 @@ // action when logged in. import { Link, useParams, useRouterState } from "@tanstack/react-router"; -import { Bug, Plus, Sun, Moon, LogIn, LogOut } from "lucide-react"; +import { Plus, Sun, Moon, LogIn, LogOut } from "lucide-react"; +import Logo from "@/assets/logo.svg?react"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Button } from "@/components/ui/button"; import { ButtonLink } from "@/components/ui/button-link"; @@ -48,7 +49,7 @@ export function Header() {
{/* Logo always goes to the repo picker root */} - + git-bug diff --git a/webui2/src/vite-env.d.ts b/webui2/src/vite-env.d.ts index 11f02fe2a0061d6e6e1f271b21da95423b448b32..b1f45c7866694dbf083c82024b97603ad1df0606 100644 --- a/webui2/src/vite-env.d.ts +++ b/webui2/src/vite-env.d.ts @@ -1 +1,2 @@ /// +/// diff --git a/webui2/vite.config.ts b/webui2/vite.config.ts index b76b5074aae409fa399fc384b2b9a43a855e386c..95bcfbe91794bb3b4121fabdd4815c618399a997 100644 --- a/webui2/vite.config.ts +++ b/webui2/vite.config.ts @@ -2,6 +2,7 @@ import tailwindcss from "@tailwindcss/vite"; import { tanstackRouter } from "@tanstack/router-plugin/vite"; import react from "@vitejs/plugin-react"; import { defineConfig } from "vite"; +import svgr from "vite-plugin-svgr"; import tsconfigPaths from "vite-tsconfig-paths"; // The Go backend URL. Run: git-bug webui --port 3000 @@ -11,6 +12,7 @@ export default defineConfig({ plugins: [ tanstackRouter({ target: "react", autoCodeSplitting: true }), tsconfigPaths(), + svgr(), tailwindcss(), react(), ],