mirror of
https://github.com/lukaszraczylo/traefik-llmgateway.git
synced 2026-10-12 04:54:45 +00:00
Add a circular key-icon badge and a small "LLM Gateway" wordmark, so the screen reads as this product's door and not a generic prompt. Restructure the dense security paragraph into a short description plus a three-item muted checklist. Each claim keeps its original strength: the key stays in this tab's session storage, the browser never writes it to disk, and requests go only to this page's own /admin/api/* routes. Add a show/hide toggle for the key input. It reuses the ghost icon-button composition SearchInput.vue already uses for its clear button. Autofocus the input on mount. Disable submit while the trimmed input is empty. Add a brief shake on the key input when auth.error is set. The animation respects prefers-reduced-motion and lives in a scoped <style> block local to this file — the first one in webui/src/components, added because no Tailwind-core or tw-animate-css keyframe reads as "rejected". Extend the header in App.vue with a GitHub repository link, per an operator scope addition mid-task: an icon-only ghost button that opens github.com/lukaszraczylo/traefik-llmgateway in a new tab. The link sits in App.vue's header, above the gate/dashboard switch, so it renders on every screen including the auth gate. Installs @fortawesome/free-brands-svg-icons, pinned like the other fontawesome packages, for the faGithub icon. auth.submit() semantics, dashboard.refresh() timing, and the backend stay unchanged.
42 lines
1.1 KiB
JSON
42 lines
1.1 KiB
JSON
{
|
|
"name": "webui",
|
|
"private": true,
|
|
"version": "0.0.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vue-tsc -b && vite build",
|
|
"preview": "vite preview",
|
|
"test": "vitest run"
|
|
},
|
|
"dependencies": {
|
|
"@fortawesome/fontawesome-svg-core": "^7.3.1",
|
|
"@fortawesome/free-brands-svg-icons": "^7.3.1",
|
|
"@fortawesome/free-solid-svg-icons": "^7.3.1",
|
|
"@fortawesome/vue-fontawesome": "^3.3.3",
|
|
"@tanstack/vue-table": "^8.21.3",
|
|
"@vueuse/core": "^14.4.0",
|
|
"chart.js": "^4.5.1",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"pinia": "^4.0.3",
|
|
"reka-ui": "^2.10.3",
|
|
"shadcn-vue": "^2.8.2",
|
|
"tailwind-merge": "^3.6.0",
|
|
"tw-animate-css": "^1.4.0",
|
|
"vue": "^3.5.40",
|
|
"vue-chartjs": "^5.3.4"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/vite": "^4.3.3",
|
|
"@types/node": "^24.13.3",
|
|
"@vitejs/plugin-vue": "^6.0.8",
|
|
"@vue/tsconfig": "^0.9.1",
|
|
"tailwindcss": "^4.3.3",
|
|
"typescript": "~6.0.2",
|
|
"vite": "^8.2.0",
|
|
"vitest": "^4.1.11",
|
|
"vue-tsc": "^3.3.8"
|
|
}
|
|
}
|