3x-ui/frontend
MHSanaei ff4ad24f61
fix(frontend): match legacy wave layout + recolor for dark mode
The wave SVG had inline fill="#c7ebe2" (mint) on the bottom wave, so
in dark/ultra-dark mode it rendered as a pale-white blob against the
dark page. Stripped the inline fills, drove them off CSS variables
that swap with .is-dark / .is-ultra:

  light:      green tints + #c7ebe2 (mint) on the bottom wave
  dark:       #222d42 across all four waves
  ultra-dark: #0f2d32

The wave was also positioned wrong — anchored to the top 200px of
the viewport with absolute positioning. Restored the legacy layout:
  - .waves-header is fixed to the top of the viewport with z-index -1
    so the form floats over it
  - .waves-inner-header pushes the wave SVG down to ~50vh with a
    50vh-tall solid block of the page color
  - .waves SVG itself is 15vh tall, sitting at the bottom of that block

Net effect: top half is solid-colored, then a wavy edge transitions
into the rest of the page, with the form centered on top — matching
the legacy panel exactly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-08 12:08:32 +02:00
..
src fix(frontend): match legacy wave layout + recolor for dark mode 2026-05-08 12:08:32 +02:00
.gitignore build(frontend): Phase 2 — scaffold Vite + Vue 3 + AD-Vue 4 2026-05-08 10:36:03 +02:00
index.html build(frontend): Phase 2 — scaffold Vite + Vue 3 + AD-Vue 4 2026-05-08 10:36:03 +02:00
login.html feat(frontend): Phase 5a — theme system + Vite 8 + vue-i18n 11 2026-05-08 11:11:06 +02:00
package-lock.json feat(frontend): Phase 5a — theme system + Vite 8 + vue-i18n 11 2026-05-08 11:11:06 +02:00
package.json feat(frontend): Phase 5a — theme system + Vite 8 + vue-i18n 11 2026-05-08 11:11:06 +02:00
README.md build(frontend): Phase 2 — scaffold Vite + Vue 3 + AD-Vue 4 2026-05-08 10:36:03 +02:00
vite.config.js fix(frontend): real dark mode + silence dev proxy ECONNREFUSED noise 2026-05-08 11:59:02 +02:00

3x-ui frontend

Vue 3 + Ant Design Vue 4 + Vite. Builds into ../web/dist/, which the Go binary will embed via embed.FS once the migration reaches the page handlers (Phase 4+).

This directory exists alongside the legacy web/html/ Vue 2 templates during the migration. Pages will move over one at a time on the vue3-migration branch.

Dev

cd frontend
npm install
npm run dev

The dev server runs on http://localhost:5173/ and proxies API calls to the Go panel at http://localhost:2053/ — start the Go panel first (go run main.go), then start Vite.

Production build

npm run build

Outputs to ../web/dist/. The Go binary picks it up at compile time via embed.FS.

Where things live

  • src/main.js — app entrypoint (createApp, install Antd, mount)
  • src/App.vue — root component (currently a smoke-test placeholder)
  • vite.config.js — build + dev-server config
  • index.html — Vite HTML template

Adding new pages

For each legacy page being migrated, add an entry to vite.config.js rollupOptions.input. Each entry produces its own HTML file in web/dist/, which the Go panel route handler will serve.