Files
pnokerandClaude Code 1cda1b959e fix(web): split ToolCard footer space by content, not 50/50
The footer's two clusters both carried flex: 1 1 280px, which starved
wider button rows (device = Add + Import + Search + Reset) and wrapped
the last button even when the whole footer row still had room. The
button cluster now takes exactly what its buttons need (flex 0 1 auto,
nowrap — a truly narrow viewport scrolls the row horizontally instead,
same pattern as the segmented filters above) and the pager cluster
stretches over the rest.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-20 10:04:37 +08:00
..

DC3 Web

dc3-web is the Vue and TypeScript management frontend for IoT DC3. It communicates with the backend exclusively through dc3-gateway.

Prerequisites

  • Node.js 22 or newer, as declared by engines in package.json.
  • Corepack enabled.
  • The pnpm version declared by packageManager in package.json.
corepack enable
pnpm install

Use pnpm only. Do not generate npm or Yarn lockfiles. When changing the package-manager version, keep package.json and the Dockerfile toolchain pin aligned.

Develop

pnpm dev

The development server uses the port and API proxy configured by vite.config.ts and src/config/env/. Its defaults are http://localhost:8080 for the UI and http://localhost:8000 for the gateway. The UI can start without the backend, but login and data requests require a running gateway and center services.

Build and verify

pnpm check
pnpm lint:check
pnpm test:guard
pnpm test:ci
pnpm build

Run focused suites with pnpm test:unit, pnpm test:api, pnpm test:component, or pnpm test:views. Browser workflows use pnpm test:e2e; see tests/README.md for the test layers and fixture policy.

Project conventions

  • Vite environment files live under src/config/env/ and use the APP_ prefix.
  • Java 64-bit IDs are represented as strings. The backend emits identifiers as JSON strings on the HTTP contract, so standard JSON parsing is sufficient.
  • Type-only imports must use import type because verbatimModuleSyntax is enabled.
  • API wrapper names mirror backend cardinality: getXxx for one result and listXxx for collections/pages/maps.
  • Every router-guard branch must settle navigation.

Repository-wide architecture, commit, and verification rules are in ../AGENTS.md.