Files
pnokerandClaude Code 3fb43c4239 feat(web): unify three-terminal control density and close audit defects
Land the v7 three-terminal UX decision: drop the width/pointer-based
44px touch enlargement so one 32px density holds across desktop,
tablet, and mobile, and rebuild entity pages on a responsive record
list (ResponsiveRecordList + EntityMobileCard + per-entity mobile
summaries). Tighten the nginx security headers (CSP frame-ancestors
'none', X-Frame-Options DENY) to match the static e2e server.

Complete the dc3-web audit remediation, including the remaining LOW
items from docs/dc3-web-low-defects-handoff.md: streaming-safe
message loads in the agentic store, mock menu reparent cycle
rejection, paged-list page clamping, fetch/axios mock request
normalization, per-table attribute catalogs, post-flush alarm
watchers, rowKey-agnostic delete state, localized card text
fallbacks, and e2e-server port fail-fast.

Gate: vue-tsc, eslint, vitest 687 passed, responsive e2e 64 passed.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-07 19:33:17 +08:00

107 lines
3.4 KiB
JSON

{
"name": "iot-dc3-web",
"version": "2026.5.22",
"private": true,
"author": "pnoker",
"description": "IoT DC3 Industrial AI IoT Platform frontend — Vue 3 + TypeScript + Element Plus",
"license": "AGPL-3.0-or-later",
"homepage": "https://github.com/pnoker/iot-dc3",
"repository": {
"type": "git",
"url": "https://github.com/pnoker/iot-dc3.git"
},
"keywords": [
"iot",
"dc3",
"web",
"vue3",
"typescript",
"element-plus"
],
"engines": {
"node": ">=22.0.0"
},
"packageManager": "pnpm@12.3.4",
"type": "module",
"scripts": {
"dev": "vite --host --mode dev",
"dev:mock": "vite --host --mode mock",
"dev:prod": "vite --host --mode production",
"serve:e2e": "vite build --mode dev && node scripts/testing/e2e-server.mjs",
"serve:e2e:mock": "vite build --mode mock && node scripts/testing/e2e-server.mjs",
"build": "vite build",
"build:mock": "vite build --mode mock",
"preview": "vite preview",
"check": "vue-tsc --noEmit --skipLibCheck",
"type-check": "pnpm run check",
"lint": "eslint . --fix",
"lint:check": "eslint .",
"test": "vitest run",
"test:unit": "vitest run tests/unit",
"test:api": "vitest run tests/api",
"test:component": "vitest run tests/component",
"test:views": "vitest run tests/views",
"test:guard": "vitest run tests/guardrails",
"test:impact": "node scripts/testing/changed-test-plan.mjs",
"test:ci": "vitest run --coverage",
"test:coverage": "vitest run --coverage",
"test:e2e": "playwright test",
"test:e2e:responsive": "E2E_SERVER_MODE=mock playwright test tests/e2e/specs/responsive.spec.ts",
"test:e2e:headed": "E2E_HEADLESS=false playwright test",
"test:e2e:ui": "playwright test --ui",
"test:e2e:sweep": "node tests/e2e/browser-sweep.mjs",
"test:e2e:sweep:headed": "E2E_HEADLESS=false node tests/e2e/browser-sweep.mjs",
"test:all": "pnpm run test && pnpm run test:e2e",
"prepare": "cd .. && git config core.hooksPath .husky/_",
"clean": "rimraf dist"
},
"dependencies": {
"@antv/g2": "^5.4.8",
"@antv/g6": "^5.1.1",
"@element-plus/icons-vue": "^2.3.2",
"axios": "^1.20.0",
"dayjs": "^1.11.23",
"dompurify": "^3.4.14",
"element-plus": "^2.14.5",
"marked": "^18.0.11",
"nprogress": "^0.2.0",
"pinia": "^4.0.3",
"vue": "^3.5.42",
"vue-element-plus-x": "^2.0.3",
"vue-i18n": "^11.4.10",
"vue-router": "^5.3.1"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@playwright/test": "^1.63.0",
"@types/node": "^26.4.1",
"@types/nprogress": "^0.2.3",
"@typescript-eslint/eslint-plugin": "^8.69.0",
"@typescript-eslint/parser": "^8.69.0",
"@vitejs/plugin-vue": "^6.0.8",
"@vitest/coverage-v8": "^5.0.0",
"@vue/eslint-config-typescript": "^14.9.0",
"@vue/test-utils": "^2.5.0",
"eslint": "^10.10.0",
"eslint-plugin-vue": "^10.11.0",
"globals": "^17.12.0",
"happy-dom": "^20.14.0",
"jsdom": "^30.0.1",
"lint-staged": "^17.5.0",
"playwright": "^1.63.0",
"sass": "^1.104.0",
"typescript": "~6.0.3",
"unplugin-auto-import": "^21.1.0",
"unplugin-vue-components": "^32.1.0",
"vite": "^8.2.2",
"vitest": "^5.0.0",
"vue-eslint-parser": "^10.4.1",
"vue-tsc": "^3.3.11"
},
"lint-staged": {
"*.{vue,js,mjs,cjs,ts,jsx,tsx}": [
"eslint --fix --config eslint.config.mjs"
]
}
}