diff --git a/eslint-suppressions.json b/eslint-suppressions.json index 78b270677..91fd2af7f 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -849,11 +849,6 @@ "count": 4 } }, - "src/views/standalone/monitoring/PingLatencyMonitorView.vue": { - "@typescript-eslint/no-explicit-any": { - "count": 1 - } - }, "src/views/standalone/monitoring/RealTimeMonitoringView.vue": { "@typescript-eslint/no-explicit-any": { "count": 1 diff --git a/package.json b/package.json index a9175354d..74582a7db 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "preview": "vite preview", "build-only": "vite build", "type-check": "vue-tsc --build", - "lint": "eslint . --max-warnings 1229", + "lint": "eslint . --max-warnings 60", "lint-fix": "npm run lint -- --fix", "format": "prettier --list-different src/", "format-fix": "prettier --write src/", diff --git a/src/assets/main.css b/src/assets/main.css index d0f376184..77901e083 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -146,7 +146,7 @@ } @utility text-primary-neutral { - @apply text-gray-600 dark:text-gray-50; + @apply text-gray-900 dark:text-gray-50; } @utility text-secondary { @@ -154,7 +154,7 @@ } @utility text-secondary-neutral { - @apply dark:text-gray-200; + @apply text-gray-700 dark:text-gray-200; } @utility text-tertiary-neutral { diff --git a/src/components/charts/TimeLineChart.vue b/src/components/charts/TimeLineChart.vue index 3a7fefd54..b5f52e0c1 100644 --- a/src/components/charts/TimeLineChart.vue +++ b/src/components/charts/TimeLineChart.vue @@ -125,11 +125,16 @@ const defaultOptions: any = { } const allOptions = computed(() => { - return merge(typeof props.options === 'object' ? props.options : {}, defaultOptions) + const customOptions = props.options && typeof props.options === 'object' ? props.options : {} + return merge({}, defaultOptions, customOptions) }) const chartData: any = computed(() => { - return { labels: props.labels, datasets: props.datasets } + // Deep-clone to strip Vue readonly proxies before handing data to Chart.js. + // Chart.js internally mutates dataset objects (attaches _meta, controllers, etc.) + // and Vue will block those mutations with "target is readonly" warnings if the + // objects are still wrapped in a shallowReadonly prop proxy. + return JSON.parse(JSON.stringify({ labels: props.labels, datasets: props.datasets })) }) const chartStyle = computed(() => { diff --git a/src/components/standalone/SideMenu.vue b/src/components/standalone/SideMenu.vue index 98584f1b7..0f05a14fb 100644 --- a/src/components/standalone/SideMenu.vue +++ b/src/components/standalone/SideMenu.vue @@ -51,6 +51,10 @@ const navigation: Ref = ref([ { name: 'standalone.ping_latency_monitor.title', to: 'monitoring/ping-latency-monitor' + }, + { + name: 'standalone.metrics.title', + to: 'monitoring/metrics' } ] }, diff --git a/src/components/standalone/firewall/PortForwardTable.vue b/src/components/standalone/firewall/PortForwardTable.vue index 796c1cf5d..1851d0b71 100644 --- a/src/components/standalone/firewall/PortForwardTable.vue +++ b/src/components/standalone/firewall/PortForwardTable.vue @@ -133,7 +133,7 @@ function getCellClasses(item: PortForward) {
- +