@nbreak/ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +34 -0
- package/README.md +3 -0
- package/dist/cjs/index.cjs +1753 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/ui.css +474 -0
- package/dist/esm/index.js +1735 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/ui.css +474 -0
- package/package.json +36 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["DsText","DsLineChart","DsBarChart","DsPieChart","DsBorderTech","DsCounter","DsRing","DsSparkLine","DsDigitalClock","DsRankList"],"sources":["../../src/components/DsText.vue","../../src/components/DsLineChart.vue","../../src/components/DsBarChart.vue","../../src/components/DsPieChart.vue","../../src/components/DsBorderTech.vue","../../src/components/DsCounter.vue","../../src/components/DsRing.vue","../../src/components/DsSparkLine.vue","../../src/components/DsDigitalClock.vue","../../src/components/DsRankList.vue","../../src/index.js"],"sourcesContent":["<template>\n <div\n class=\"ds-text\"\n :style=\"{\n color: color,\n fontSize: fontSize + 'px',\n fontWeight: fontWeight,\n textAlign: textAlign,\n padding: padding + 'px',\n }\"\n >\n {{ content }}\n </div>\n</template>\n\n<script setup>\ndefineProps({\n content: { type: String, default: '文本内容' },\n color: { type: String, default: '#ffffff' },\n fontSize: { type: Number, default: 16 },\n fontWeight: { type: [String, Number], default: 400 },\n textAlign: { type: String, default: 'left' },\n padding: { type: Number, default: 8 },\n});\n</script>\n\n<style scoped>\n.ds-text {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n overflow: hidden;\n word-break: break-word;\n}\n</style>\n","<template>\n <div ref=\"chartRef\" class=\"ds-line-chart\"></div>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted, watch, shallowRef } from 'vue';\n\nconst props = defineProps({\n data: { type: Array, default: () => [] },\n color: { type: String, default: '#1890ff' },\n showLegend: { type: Boolean, default: true },\n smooth: { type: Boolean, default: false },\n areaStyle: { type: Boolean, default: false },\n xAxisTitle: { type: String, default: '' },\n yAxisTitle: { type: String, default: '' },\n});\n\nconst chartRef = ref(null);\nconst chartInstance = shallowRef(null);\n\nasync function getEcharts() {\n const echarts = await import('echarts');\n return echarts;\n}\n\nasync function initChart() {\n if (!chartRef.value) return;\n const echarts = await getEcharts();\n if (chartInstance.value) {\n chartInstance.value.dispose();\n }\n chartInstance.value = echarts.init(chartRef.value);\n renderChart();\n}\n\nfunction renderChart() {\n if (!chartInstance.value) return;\n const series = Array.isArray(props.data) && props.data.length > 0 && props.data[0]?.series\n ? props.data[0].series\n : [{ name: '默认', data: props.data }];\n\n chartInstance.value.setOption({\n color: [props.color],\n legend: { show: props.showLegend, textStyle: { color: '#fff' } },\n tooltip: { trigger: 'axis' },\n grid: { left: '8%', right: '8%', top: '10%', bottom: '8%' },\n xAxis: {\n type: 'category',\n name: props.xAxisTitle,\n data: series[0]?.data?.map((_, i) => i + 1) || [],\n axisLine: { lineStyle: { color: '#888' } },\n },\n yAxis: {\n type: 'value',\n name: props.yAxisTitle,\n axisLine: { lineStyle: { color: '#888' } },\n splitLine: { lineStyle: { color: 'rgba(255,255,255,0.08)' } },\n },\n series: series.map(s => ({\n name: s.name,\n type: 'line',\n data: s.data,\n smooth: props.smooth,\n areaStyle: props.areaStyle ? {} : null,\n })),\n }, true);\n}\n\nonMounted(() => {\n initChart();\n window.addEventListener('resize', handleResize);\n});\n\nonUnmounted(() => {\n window.removeEventListener('resize', handleResize);\n chartInstance.value?.dispose();\n});\n\nfunction handleResize() {\n chartInstance.value?.resize();\n}\n\nwatch(() => props, renderChart, { deep: true });\n</script>\n\n<style scoped>\n.ds-line-chart {\n width: 100%;\n height: 100%;\n min-height: 200px;\n}\n</style>\n","<template>\n <div ref=\"chartRef\" class=\"ds-bar-chart\"></div>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted, watch, shallowRef } from 'vue';\n\nconst props = defineProps({\n data: { type: Array, default: () => [] },\n color: { type: String, default: '#1890ff' },\n horizontal: { type: Boolean, default: false },\n showLegend: { type: Boolean, default: false },\n showLabel: { type: Boolean, default: false },\n barWidth: { type: [String, Number], default: 'auto' },\n xAxisTitle: { type: String, default: '' },\n yAxisTitle: { type: String, default: '' },\n});\n\nconst chartRef = ref(null);\nconst chartInstance = shallowRef(null);\n\nasync function initChart() {\n if (!chartRef.value) return;\n const echarts = await import('echarts');\n if (chartInstance.value) chartInstance.value.dispose();\n chartInstance.value = echarts.init(chartRef.value);\n renderChart();\n}\n\nfunction renderChart() {\n if (!chartInstance.value) return;\n\n const series = Array.isArray(props.data) && props.data.length > 0 && props.data[0]?.series\n ? props.data[0].series\n : [{ name: '默认', data: props.data }];\n\n const categories = Array.isArray(props.data) && props.data[0]?.categories\n ? props.data[0].categories\n : series[0]?.data?.map((_, i) => `${i + 1}`) || [];\n\n const categoryAxis = {\n type: 'category',\n data: categories,\n name: props.xAxisTitle,\n axisLine: { lineStyle: { color: '#888' } },\n axisLabel: { color: '#aaa' },\n };\n const valueAxis = {\n type: 'value',\n name: props.yAxisTitle,\n axisLine: { lineStyle: { color: '#888' } },\n axisLabel: { color: '#aaa' },\n splitLine: { lineStyle: { color: 'rgba(255,255,255,0.08)' } },\n };\n\n chartInstance.value.setOption({\n color: [props.color, '#8b5cf6', '#22c55e', '#f59e0b', '#ef4444'],\n legend: { show: props.showLegend, textStyle: { color: '#fff' } },\n tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },\n grid: { left: '8%', right: '8%', top: '10%', bottom: '8%' },\n xAxis: props.horizontal ? valueAxis : categoryAxis,\n yAxis: props.horizontal ? categoryAxis : valueAxis,\n series: series.map(s => ({\n name: s.name,\n type: 'bar',\n data: s.data,\n barWidth: props.barWidth === 'auto' ? undefined : props.barWidth,\n label: { show: props.showLabel, position: props.horizontal ? 'right' : 'top', color: '#fff' },\n })),\n }, true);\n}\n\nfunction handleResize() {\n chartInstance.value?.resize();\n}\n\nonMounted(() => {\n initChart();\n window.addEventListener('resize', handleResize);\n});\n\nonUnmounted(() => {\n window.removeEventListener('resize', handleResize);\n chartInstance.value?.dispose();\n});\n\nwatch(() => props, renderChart, { deep: true });\n</script>\n\n<style scoped>\n.ds-bar-chart {\n width: 100%;\n height: 100%;\n min-height: 200px;\n}\n</style>\n","<template>\n <div ref=\"chartRef\" class=\"ds-pie-chart\"></div>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted, watch, shallowRef } from 'vue';\n\nconst props = defineProps({\n data: { type: Array, default: () => [] },\n colors: { type: Array, default: () => ['#1890ff', '#8b5cf6', '#22c55e', '#f59e0b', '#ef4444', '#06b6d4'] },\n showLegend: { type: Boolean, default: true },\n showLabel: { type: Boolean, default: true },\n ringMode: { type: Boolean, default: false },\n innerRadius: { type: Number, default: 0 },\n outerRadius: { type: Number, default: 80 },\n});\n\nconst chartRef = ref(null);\nconst chartInstance = shallowRef(null);\n\nasync function initChart() {\n if (!chartRef.value) return;\n const echarts = await import('echarts');\n if (chartInstance.value) chartInstance.value.dispose();\n chartInstance.value = echarts.init(chartRef.value);\n renderChart();\n}\n\nfunction renderChart() {\n if (!chartInstance.value) return;\n\n // 兼容多种数据格式:\n // 1. [{ name, value }]\n // 2. [{ name, data: [{ name, value }] }]\n // 3. 普通数组 [1,2,3] => 转为 [{ name: i, value }]\n let pieData = [];\n if (Array.isArray(props.data)) {\n if (props.data[0]?.data) {\n pieData = props.data[0].data;\n } else if (props.data[0]?.value) {\n pieData = props.data;\n } else {\n pieData = props.data.map((v, i) => ({ name: `项${i + 1}`, value: v }));\n }\n }\n\n chartInstance.value.setOption({\n color: props.colors,\n legend: {\n show: props.showLegend,\n orient: 'horizontal',\n bottom: 0,\n textStyle: { color: '#fff' },\n },\n tooltip: {\n trigger: 'item',\n formatter: '{a} <br/>{b}: {c} ({d}%)',\n },\n series: [\n {\n name: '占比',\n type: 'pie',\n radius: props.ringMode\n ? [props.innerRadius || 40, props.outerRadius]\n : `${props.outerRadius}%`,\n center: ['50%', '45%'],\n data: pieData,\n label: {\n show: props.showLabel,\n color: '#fff',\n formatter: '{b}: {d}%',\n },\n labelLine: { lineStyle: { color: '#888' } },\n itemStyle: {\n borderColor: '#0d1a2d',\n borderWidth: 2,\n },\n },\n ],\n }, true);\n}\n\nfunction handleResize() {\n chartInstance.value?.resize();\n}\n\nonMounted(() => {\n initChart();\n window.addEventListener('resize', handleResize);\n});\n\nonUnmounted(() => {\n window.removeEventListener('resize', handleResize);\n chartInstance.value?.dispose();\n});\n\nwatch(() => props, renderChart, { deep: true });\n</script>\n\n<style scoped>\n.ds-pie-chart {\n width: 100%;\n height: 100%;\n min-height: 200px;\n}\n</style>\n","<template>\n <div class=\"ds-border-tech\" :style=\"{ borderColor: color, borderRadius: radius + 'px' }\">\n <div class=\"ds-border-tech-corner top-left\" :style=\"{ borderColor: color }\"></div>\n <div class=\"ds-border-tech-corner top-right\" :style=\"{ borderColor: color }\"></div>\n <div class=\"ds-border-tech-corner bottom-left\" :style=\"{ borderColor: color }\"></div>\n <div class=\"ds-border-tech-corner bottom-right\" :style=\"{ borderColor: color }\"></div>\n <div class=\"ds-border-tech-content\">\n <slot></slot>\n </div>\n </div>\n</template>\n\n<script setup>\ndefineProps({\n color: { type: String, default: '#1890ff' },\n radius: { type: Number, default: 0 },\n});\n</script>\n\n<style scoped>\n.ds-border-tech {\n position: relative;\n width: 100%;\n height: 100%;\n border: 1px solid;\n overflow: hidden;\n}\n\n.ds-border-tech-corner {\n position: absolute;\n width: 12px;\n height: 12px;\n border-style: solid;\n border-width: 0;\n}\n\n.ds-border-tech-corner.top-left {\n top: 0; left: 0;\n border-top-width: 2px;\n border-left-width: 2px;\n}\n\n.ds-border-tech-corner.top-right {\n top: 0; right: 0;\n border-top-width: 2px;\n border-right-width: 2px;\n}\n\n.ds-border-tech-corner.bottom-left {\n bottom: 0; left: 0;\n border-bottom-width: 2px;\n border-left-width: 2px;\n}\n\n.ds-border-tech-corner.bottom-right {\n bottom: 0; right: 0;\n border-bottom-width: 2px;\n border-right-width: 2px;\n}\n\n.ds-border-tech-content {\n width: 100%;\n height: 100%;\n padding: 8px;\n}\n</style>\n","<template>\n <div class=\"ds-counter\" :style=\"{ color: color }\">\n <div class=\"ds-counter-label\" v-if=\"label\">{{ label }}</div>\n <div class=\"ds-counter-value\" :style=\"{ fontSize: fontSize + 'px' }\">\n <span class=\"ds-counter-number\">{{ displayValue }}</span>\n <span class=\"ds-counter-suffix\" v-if=\"suffix\">{{ suffix }}</span>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, watch, onMounted } from 'vue';\n\nconst props = defineProps({\n value: { type: [Number, String], default: 0 },\n label: { type: String, default: '' },\n suffix: { type: String, default: '' },\n color: { type: String, default: '#00d4ff' },\n fontSize: { type: Number, default: 32 },\n duration: { type: Number, default: 1000 },\n decimals: { type: Number, default: 0 },\n});\n\nconst displayValue = ref(0);\n\nfunction animateTo(target) {\n const start = Number(displayValue.value) || 0;\n const end = Number(target) || 0;\n const startTime = performance.now();\n const duration = props.duration;\n\n function step(now) {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = 1 - Math.pow(1 - progress, 3);\n const current = start + (end - start) * eased;\n displayValue.value = formatNumber(current);\n if (progress < 1) {\n requestAnimationFrame(step);\n } else {\n displayValue.value = formatNumber(end);\n }\n }\n requestAnimationFrame(step);\n}\n\nfunction formatNumber(n) {\n return n.toLocaleString('zh-CN', {\n minimumFractionDigits: props.decimals,\n maximumFractionDigits: props.decimals,\n });\n}\n\nonMounted(() => {\n animateTo(props.value);\n});\n\nwatch(() => props.value, (val) => {\n animateTo(val);\n});\n</script>\n\n<style scoped>\n.ds-counter {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n font-family: 'DIN', 'Helvetica Neue', sans-serif;\n}\n\n.ds-counter-label {\n font-size: 14px;\n color: rgba(255,255,255,0.65);\n margin-bottom: 4px;\n}\n\n.ds-counter-value {\n font-weight: 700;\n line-height: 1;\n}\n\n.ds-counter-suffix {\n font-size: 0.5em;\n margin-left: 4px;\n opacity: 0.7;\n}\n</style>\n","<template>\n <div class=\"ds-ring\" :style=\"containerStyle\">\n <div class=\"ring-container\">\n <!-- 外圈 -->\n <div class=\"orbit orbit-1\">\n <div class=\"orbit-path\"></div>\n <div class=\"orbit-dot dot-1\"></div>\n <div class=\"orbit-dot dot-1b\"></div>\n </div>\n <!-- 中圈 -->\n <div class=\"orbit orbit-2\">\n <div class=\"orbit-path\"></div>\n <div class=\"orbit-dot dot-2\"></div>\n <div class=\"orbit-dot dot-2b\"></div>\n </div>\n <!-- 内圈 -->\n <div class=\"orbit orbit-3\">\n <div class=\"orbit-path\"></div>\n <div class=\"orbit-dot dot-3\"></div>\n </div>\n <!-- 核心 -->\n <div class=\"ring-core\">\n <div class=\"core-inner\"></div>\n <div class=\"core-pulse\"></div>\n <div class=\"core-pulse core-pulse-2\"></div>\n </div>\n </div>\n <div class=\"content-overlay\">\n <slot></slot>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\n\nconst props = defineProps({\n color: { type: String, default: '#00f5ff' },\n size: { type: Number, default: 100 },\n opacity: { type: Number, default: 0.8 },\n width: { type: [String, Number], default: '100%' },\n height: { type: [String, Number], default: '100%' },\n});\n\nconst containerStyle = computed(() => ({\n width: props.width,\n height: props.height,\n '--deco-color': props.color,\n '--deco-size': props.size + 'px',\n '--deco-opacity': props.opacity,\n}));\n</script>\n\n<style scoped>\n.ds-ring {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n}\n\n.ring-container {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.orbit {\n position: absolute;\n top: 50%;\n left: 50%;\n border-radius: 50%;\n}\n\n.orbit-path {\n position: absolute;\n inset: 0;\n border-radius: 50%;\n border: 1px solid color-mix(in srgb, var(--deco-color) 25%, transparent);\n}\n\n.orbit-1 {\n width: 90%;\n height: 90%;\n transform: translate(-50%, -50%);\n animation: ds-ring-rotate-1 8s linear infinite;\n}\n.orbit-1 .orbit-path {\n border-color: color-mix(in srgb, var(--deco-color) 30%, transparent);\n border-style: dashed;\n}\n\n.orbit-2 {\n width: 60%;\n height: 60%;\n transform: translate(-50%, -50%);\n animation: ds-ring-rotate-2 5s linear infinite reverse;\n}\n.orbit-2 .orbit-path {\n border-color: color-mix(in srgb, var(--deco-color) 40%, transparent);\n}\n\n.orbit-3 {\n width: 35%;\n height: 35%;\n transform: translate(-50%, -50%);\n animation: ds-ring-rotate-3 3s linear infinite;\n}\n.orbit-3 .orbit-path {\n border-color: color-mix(in srgb, var(--deco-color) 50%, transparent);\n border-width: 2px;\n}\n\n.orbit-dot {\n position: absolute;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--deco-color);\n box-shadow: 0 0 6px var(--deco-color), 0 0 12px color-mix(in srgb, var(--deco-color) 50%, transparent);\n}\n\n.dot-1 { top: -3px; left: 50%; transform: translateX(-50%); width: 5px; height: 5px; }\n.dot-1b { bottom: -3px; left: 50%; transform: translateX(-50%); width: 4px; height: 4px; opacity: 0.6; }\n.dot-2 { top: 50%; right: -3px; transform: translateY(-50%); width: 6px; height: 6px; }\n.dot-2b { top: 50%; left: -3px; transform: translateY(-50%); width: 4px; height: 4px; opacity: 0.6; }\n.dot-3 { top: -3px; left: 50%; transform: translateX(-50%); width: 7px; height: 7px;\n box-shadow: 0 0 8px var(--deco-color), 0 0 16px var(--deco-color); }\n\n@keyframes ds-ring-rotate-1 {\n from { transform: translate(-50%, -50%) rotate(0deg); }\n to { transform: translate(-50%, -50%) rotate(360deg); }\n}\n@keyframes ds-ring-rotate-2 {\n from { transform: translate(-50%, -50%) rotate(0deg); }\n to { transform: translate(-50%, -50%) rotate(360deg); }\n}\n@keyframes ds-ring-rotate-3 {\n from { transform: translate(-50%, -50%) rotate(0deg); }\n to { transform: translate(-50%, -50%) rotate(360deg); }\n}\n\n.ring-core {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 2;\n}\n\n.core-inner {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: radial-gradient(circle, var(--deco-color),\n color-mix(in srgb, var(--deco-color) 60%, #0a0e1a));\n box-shadow: 0 0 10px var(--deco-color),\n 0 0 20px color-mix(in srgb, var(--deco-color) 40%, transparent);\n position: relative;\n z-index: 2;\n animation: ds-core-glow 2s ease-in-out infinite;\n}\n\n.core-pulse {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 10px;\n height: 10px;\n border-radius: 50%;\n border: 1px solid var(--deco-color);\n animation: ds-core-expand 2.5s ease-out infinite;\n}\n.core-pulse-2 { animation-delay: 1.25s; }\n\n@keyframes ds-core-glow {\n 0%, 100% { box-shadow: 0 0 10px var(--deco-color), 0 0 20px color-mix(in srgb, var(--deco-color) 40%, transparent); }\n 50% { box-shadow: 0 0 14px var(--deco-color), 0 0 28px color-mix(in srgb, var(--deco-color) 60%, transparent); }\n}\n\n@keyframes ds-core-expand {\n 0% { width: 10px; height: 10px; opacity: 0.6; }\n 100% { width: 50px; height: 50px; opacity: 0; }\n}\n\n.content-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 3;\n pointer-events: none;\n}\n.content-overlay :deep(*) { pointer-events: auto; }\n</style>\n","<template>\n <div class=\"ds-spark\" :style=\"containerStyle\">\n <div class=\"ds-spark-header\">\n <span class=\"ds-spark-label\">{{ label }}</span>\n <span class=\"ds-spark-current\" :style=\"{ color }\">{{ currentDisplay }}</span>\n </div>\n <svg viewBox=\"0 0 300 80\" class=\"ds-spark-svg\" preserveAspectRatio=\"none\">\n <defs>\n <linearGradient :id=\"`spark-grad-${uid}`\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" :stop-color=\"color\" stop-opacity=\"0.3\" />\n <stop offset=\"100%\" :stop-color=\"color\" stop-opacity=\"0\" />\n </linearGradient>\n </defs>\n <path :d=\"areaPath\" :fill=\"`url(#spark-grad-${uid})`\" />\n <polyline :points=\"linePoints\" fill=\"none\" :stroke=\"color\" stroke-width=\"2\" stroke-linejoin=\"round\" />\n <circle :cx=\"lastX\" :cy=\"lastY\" r=\"4\" :fill=\"color\" />\n <circle :cx=\"lastX\" :cy=\"lastY\" r=\"7\" fill=\"none\" :stroke=\"color\" stroke-width=\"1.5\" opacity=\"0.4\" />\n </svg>\n <div class=\"ds-spark-footer\">\n <span class=\"ds-spark-min\">低: {{ minVal }}</span>\n <span class=\"ds-spark-max\">高: {{ maxVal }}</span>\n <span class=\"ds-spark-avg\">均: {{ avgVal }}</span>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\n\nconst props = defineProps({\n data: { type: Array, default: () => [] },\n label: { type: String, default: '趋势' },\n color: { type: String, default: '#00c8ff' },\n width: { type: [String, Number], default: '100%' },\n height: { type: [String, Number], default: 160 },\n});\n\nconst uid = Math.random().toString(36).slice(2, 8);\nconst containerStyle = computed(() => ({\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n height: typeof props.height === 'number' ? `${props.height}px` : props.height,\n}));\n\nconst values = computed(() => {\n if (Array.isArray(props.data)) {\n if (props.data.length === 0) return [];\n if (typeof props.data[0] === 'number') return props.data;\n if (props.data[0]?.values) return props.data[0].values;\n if (props.data[0]?.data) return props.data[0].data;\n }\n return [];\n});\n\nconst minVal = computed(() => values.value.length ? Math.min(...values.value) : 0);\nconst maxVal = computed(() => values.value.length ? Math.max(...values.value) : 0);\nconst avgVal = computed(() => values.value.length\n ? Math.round(values.value.reduce((a, b) => a + b, 0) / values.value.length)\n : 0);\nconst currentDisplay = computed(() => {\n const v = values.value[values.value.length - 1];\n return v != null ? Number(v).toLocaleString() : '-';\n});\n\nconst linePoints = computed(() => {\n if (values.value.length === 0) return '';\n const w = 300;\n const h = 80;\n const pad = 8;\n const n = values.value.length;\n const range = maxVal.value - minVal.value || 1;\n return values.value.map((v, i) => {\n const x = pad + (i / Math.max(n - 1, 1)) * (w - pad * 2);\n const y = h - pad - ((v - minVal.value) / range) * (h - pad * 2);\n return `${x},${y}`;\n }).join(' ');\n});\n\nconst areaPath = computed(() => {\n if (!linePoints.value) return '';\n const points = linePoints.value.split(' ');\n if (points.length === 0) return '';\n const first = points[0].split(',')[0];\n const last = points[points.length - 1].split(',')[0];\n return `M${first},80 L${points.join(' L')} L${last},80 Z`;\n});\n\nconst lastX = computed(() => {\n const pts = linePoints.value.split(' ');\n return pts.length ? parseFloat(pts[pts.length - 1].split(',')[0]) : 0;\n});\nconst lastY = computed(() => {\n const pts = linePoints.value.split(' ');\n return pts.length ? parseFloat(pts[pts.length - 1].split(',')[1]) : 0;\n});\n</script>\n\n<style scoped>\n.ds-spark {\n display: flex;\n flex-direction: column;\n padding: 8px;\n color: rgba(255, 255, 255, 0.85);\n font-family: 'Microsoft YaHei', sans-serif;\n}\n.ds-spark-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 4px;\n}\n.ds-spark-label {\n font-size: 14px;\n color: rgba(255, 255, 255, 0.7);\n}\n.ds-spark-current {\n font-size: 18px;\n font-weight: 700;\n}\n.ds-spark-svg {\n flex: 1;\n width: 100%;\n min-height: 60px;\n}\n.ds-spark-footer {\n display: flex;\n justify-content: space-between;\n margin-top: 4px;\n font-size: 12px;\n color: rgba(255, 255, 255, 0.55);\n}\n</style>\n","<template>\n <div class=\"ds-clock\" :style=\"[wrapStyle, cssVars]\">\n <div class=\"ds-clock-bg-grid\"></div>\n <div class=\"ds-clock-bg-glow\"></div>\n\n <div class=\"ds-clock-time-row\">\n <div class=\"ds-clock-digit-group\">\n <span class=\"ds-clock-digit\">{{ time.hh[0] }}</span>\n <span class=\"ds-clock-digit\">{{ time.hh[1] }}</span>\n </div>\n <span class=\"ds-clock-sep\" :class=\"{ 'ds-clock-sep--off': !blinkOn }\">:</span>\n <div class=\"ds-clock-digit-group\">\n <span class=\"ds-clock-digit\">{{ time.mm[0] }}</span>\n <span class=\"ds-clock-digit\">{{ time.mm[1] }}</span>\n </div>\n <template v-if=\"showSeconds\">\n <span class=\"ds-clock-sep ds-clock-sep--sec\" :class=\"{ 'ds-clock-sep--off': !blinkOn }\">:</span>\n <div class=\"ds-clock-digit-group ds-clock-digit-group--sec\">\n <span class=\"ds-clock-digit ds-clock-digit--sec\">{{ time.ss[0] }}</span>\n <span class=\"ds-clock-digit ds-clock-digit--sec\">{{ time.ss[1] }}</span>\n </div>\n </template>\n <span v-if=\"is12h\" class=\"ds-clock-ampm\">{{ time.ampm }}</span>\n </div>\n\n <div v-if=\"showDate\" class=\"ds-clock-date-row\">\n <span class=\"ds-clock-date-text\">{{ dateStr }}</span>\n <span class=\"ds-clock-weekday\">{{ weekdayStr }}</span>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onMounted, onUnmounted } from 'vue';\n\nconst props = defineProps({\n color: { type: String, default: '#00d4ff' },\n secondColor: { type: String, default: '#ff6b6b' },\n showSeconds: { type: Boolean, default: true },\n showDate: { type: Boolean, default: true },\n blink: { type: Boolean, default: true },\n timeFormat: { type: String, default: '24h' },\n dateFormat: { type: String, default: 'YYYY-MM-DD' },\n width: { type: [String, Number], default: '100%' },\n height: { type: [String, Number], default: '100%' },\n});\n\nconst now = ref(new Date());\nconst blinkOn = ref(true);\nlet tickTimer = null;\nlet blinkTimer = null;\n\nconst is12h = computed(() => props.timeFormat === '12h');\n\nconst WEEKDAYS = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];\n\nconst time = computed(() => {\n let h = now.value.getHours();\n const m = String(now.value.getMinutes()).padStart(2, '0');\n const s = String(now.value.getSeconds()).padStart(2, '0');\n let ampm = '';\n if (is12h.value) {\n ampm = h >= 12 ? 'PM' : 'AM';\n h = h % 12 || 12;\n }\n return { hh: String(h).padStart(2, '0'), mm: m, ss: s, ampm };\n});\n\nconst dateStr = computed(() => {\n const d = now.value;\n const y = d.getFullYear();\n const mo = String(d.getMonth() + 1).padStart(2, '0');\n const da = String(d.getDate()).padStart(2, '0');\n if (props.dateFormat === 'YYYY年MM月DD日') return `${y}年${mo}月${da}日`;\n if (props.dateFormat === 'DD/MM/YYYY') return `${da}/${mo}/${y}`;\n if (props.dateFormat === 'MM/DD/YYYY') return `${mo}/${da}/${y}`;\n return `${y}-${mo}-${da}`;\n});\n\nconst weekdayStr = computed(() => WEEKDAYS[now.value.getDay()]);\n\nfunction hexToRgb(hex) {\n return {\n r: parseInt(hex.slice(1, 3), 16),\n g: parseInt(hex.slice(3, 5), 16),\n b: parseInt(hex.slice(5, 7), 16),\n };\n}\nfunction rgba(hex, a) {\n const { r, g, b } = hexToRgb(hex);\n return `rgba(${r},${g},${b},${a})`;\n}\n\nconst cssVars = computed(() => {\n const c = props.color;\n const sc = props.secondColor;\n return {\n '--dsc-color': c,\n '--dsc-sec-color': sc,\n '--dsc-glow-08': rgba(c, 0.08),\n '--dsc-glow-60': rgba(c, 0.6),\n '--dsc-glow-25': rgba(c, 0.25),\n '--dsc-glow-30': rgba(c, 0.3),\n '--dsc-glow-50': rgba(c, 0.5),\n '--dsc-glow-40': rgba(c, 0.4),\n '--dsc-sec-glow-50': rgba(sc, 0.5),\n '--dsc-sec-glow-20': rgba(sc, 0.2),\n '--dsc-sec-glow-25': rgba(sc, 0.25),\n };\n});\n\nconst wrapStyle = computed(() => ({\n width: props.width,\n height: props.height,\n}));\n\nonMounted(() => {\n tickTimer = setInterval(() => { now.value = new Date(); }, 1000);\n if (props.blink) {\n blinkTimer = setInterval(() => { blinkOn.value = !blinkOn.value; }, 500);\n }\n});\n\nonUnmounted(() => {\n clearInterval(tickTimer);\n clearInterval(blinkTimer);\n});\n</script>\n\n<style scoped>\n.ds-clock {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n font-family: 'Courier New', 'Consolas', 'Liberation Mono', monospace;\n}\n\n.ds-clock-bg-grid {\n position: absolute;\n inset: 0;\n background-image:\n linear-gradient(rgba(255,255,255,0.015) 1px, transparent 1px),\n linear-gradient(90deg, rgba(255,255,255,0.015) 1px, transparent 1px);\n background-size: 20px 20px;\n pointer-events: none;\n}\n.ds-clock-bg-glow {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 70%;\n height: 60%;\n transform: translate(-50%, -50%);\n background: radial-gradient(ellipse, var(--dsc-glow-08), transparent 70%);\n pointer-events: none;\n}\n\n.ds-clock-time-row {\n display: flex;\n align-items: center;\n gap: clamp(2px, 0.5vw, 6px);\n z-index: 1;\n}\n.ds-clock-digit-group {\n display: flex;\n gap: clamp(1px, 0.3vw, 4px);\n}\n.ds-clock-digit-group--sec { opacity: 0.85; }\n\n.ds-clock-digit {\n font-size: clamp(28px, 7cqw, 72px);\n font-weight: 700;\n color: var(--dsc-color);\n text-shadow: 0 0 8px var(--dsc-glow-60), 0 0 24px var(--dsc-glow-25);\n line-height: 1;\n min-width: 0.62em;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.ds-clock-digit--sec {\n font-size: clamp(20px, 5cqw, 52px);\n color: var(--dsc-sec-color);\n text-shadow: 0 0 6px var(--dsc-sec-glow-50), 0 0 18px var(--dsc-sec-glow-20);\n}\n\n.ds-clock-sep {\n font-size: clamp(24px, 6cqw, 60px);\n font-weight: 300;\n color: var(--dsc-color);\n text-shadow: 0 0 10px var(--dsc-glow-40);\n transition: opacity 0.25s ease;\n line-height: 1;\n}\n.ds-clock-sep--sec {\n font-size: clamp(18px, 4.5cqw, 48px);\n color: var(--dsc-sec-color);\n opacity: 0.7;\n}\n.ds-clock-sep--off {\n opacity: 0.15;\n text-shadow: none;\n}\n\n.ds-clock-ampm {\n font-size: clamp(14px, 2.8cqw, 22px);\n font-weight: 600;\n color: var(--dsc-color);\n opacity: 0.85;\n margin-left: clamp(4px, 1vw, 10px);\n letter-spacing: 1px;\n align-self: flex-end;\n margin-bottom: clamp(4px, 1vw, 10px);\n}\n\n.ds-clock-date-row {\n display: flex;\n align-items: center;\n gap: clamp(6px, 1.2vw, 12px);\n margin-top: clamp(6px, 1.5vw, 16px);\n z-index: 1;\n}\n.ds-clock-date-text {\n font-size: clamp(14px, 2.5vw, 20px);\n font-weight: 500;\n color: rgba(255, 255, 255, 0.75);\n letter-spacing: 1px;\n font-family: 'Microsoft YaHei', 'PingFang SC', sans-serif;\n}\n.ds-clock-weekday {\n font-size: clamp(12px, 2.2vw, 18px);\n font-weight: 600;\n color: var(--dsc-color);\n opacity: 0.85;\n padding: 2px clamp(8px, 1.2vw, 14px);\n background: var(--dsc-glow-08);\n border-radius: 10px;\n font-family: 'Microsoft YaHei', 'PingFang SC', sans-serif;\n}\n</style>\n","<template>\n <div class=\"ds-rank\" :style=\"containerStyle\">\n <div v-if=\"title\" class=\"ds-rank-title\" :style=\"{ color }\">{{ title }}</div>\n <div class=\"ds-rank-list\">\n <div\n v-for=\"(item, i) in items\"\n :key=\"i\"\n class=\"ds-rank-item\"\n :class=\"{ 'ds-rank-item--top': i < 3 }\"\n >\n <div class=\"ds-rank-index\" :class=\"`ds-rank-index--${i < 3 ? i + 1 : 'n'}`\" :style=\"i >= 3 ? { color } : null\">\n {{ i + 1 }}\n </div>\n <div class=\"ds-rank-content\">\n <div class=\"ds-rank-info\">\n <span class=\"ds-rank-name\">{{ item.name }}</span>\n <span class=\"ds-rank-value\" :style=\"{ color }\">{{ formatValue(item.value) }}</span>\n </div>\n <div class=\"ds-rank-bar-track\">\n <div\n class=\"ds-rank-bar-fill\"\n :style=\"{\n width: getPercent(item.value) + '%',\n background: `linear-gradient(90deg, ${color}33, ${color})`,\n }\"\n ></div>\n </div>\n </div>\n </div>\n <div v-if=\"items.length === 0\" class=\"ds-rank-empty\">暂无数据</div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\n\nconst props = defineProps({\n data: { type: Array, default: () => [] },\n title: { type: String, default: '' },\n color: { type: String, default: '#00d4ff' },\n max: { type: Number, default: 0 },\n unit: { type: String, default: '' },\n showTop3: { type: Boolean, default: true },\n width: { type: [String, Number], default: '100%' },\n height: { type: [String, Number], default: '100%' },\n});\n\nconst containerStyle = computed(() => ({\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n height: typeof props.height === 'number' ? `${props.height}px` : props.height,\n}));\n\nconst items = computed(() => {\n if (!Array.isArray(props.data)) return [];\n return props.data\n .map(item => ({\n name: item.name || item.label || '未命名',\n value: Number(item.value) || 0,\n }))\n .sort((a, b) => b.value - a.value);\n});\n\nconst maxValue = computed(() => {\n if (props.max > 0) return props.max;\n return items.value.length ? Math.max(...items.value.map(i => i.value), 1) : 1;\n});\n\nfunction getPercent(value) {\n return Math.max(0, Math.min(100, (value / maxValue.value) * 100));\n}\n\nfunction formatValue(value) {\n const v = Number(value) || 0;\n const formatted = Math.abs(v) >= 1000 ? v.toLocaleString() : String(v);\n return props.unit ? `${formatted} ${props.unit}` : formatted;\n}\n</script>\n\n<style scoped>\n.ds-rank {\n display: flex;\n flex-direction: column;\n padding: 12px;\n color: rgba(255, 255, 255, 0.85);\n font-family: 'Microsoft YaHei', sans-serif;\n overflow: hidden;\n}\n\n.ds-rank-title {\n font-size: 16px;\n font-weight: 600;\n margin-bottom: 8px;\n}\n\n.ds-rank-list {\n flex: 1;\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.ds-rank-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 4px;\n border-radius: 4px;\n transition: background 0.2s;\n}\n.ds-rank-item:hover { background: rgba(255, 255, 255, 0.03); }\n\n.ds-rank-index {\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 700;\n background: rgba(255, 255, 255, 0.08);\n color: rgba(255, 255, 255, 0.65);\n}\n.ds-rank-index--1 { background: #ffd700; color: #1a1a1a; }\n.ds-rank-index--2 { background: #c0c0c0; color: #1a1a1a; }\n.ds-rank-index--3 { background: #cd7f32; color: #fff; }\n\n.ds-rank-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.ds-rank-info {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 13px;\n}\n.ds-rank-name {\n color: rgba(255, 255, 255, 0.85);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ds-rank-value {\n font-weight: 600;\n margin-left: 8px;\n}\n\n.ds-rank-bar-track {\n height: 4px;\n background: rgba(255, 255, 255, 0.06);\n border-radius: 2px;\n overflow: hidden;\n}\n.ds-rank-bar-fill {\n height: 100%;\n border-radius: 2px;\n transition: width 0.6s ease;\n}\n\n.ds-rank-empty {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: rgba(255, 255, 255, 0.35);\n font-size: 14px;\n}\n</style>\n","/**\n * @nbreak/ui - 入口\n *\n * 导出 10 个示例组件扩展,覆盖六大类:\n * - 文本/控制:DsText、DsCounter、DsSparkLine\n * - 图表:DsLineChart、DsBarChart、DsPieChart\n * - 边框:DsBorderTech\n * - 装饰:DsRing\n * - 列表:DsRankList\n * - 时间:DsDigitalClock\n *\n * 完整 178 个内置组件可按相同模式批量迁移\n */\nimport { defineComponentExtension } from '@nbreak/sdk';\nimport DsText from './components/DsText.vue';\nimport DsLineChart from './components/DsLineChart.vue';\nimport DsBarChart from './components/DsBarChart.vue';\nimport DsPieChart from './components/DsPieChart.vue';\nimport DsBorderTech from './components/DsBorderTech.vue';\nimport DsCounter from './components/DsCounter.vue';\nimport DsRing from './components/DsRing.vue';\nimport DsSparkLine from './components/DsSparkLine.vue';\nimport DsDigitalClock from './components/DsDigitalClock.vue';\nimport DsRankList from './components/DsRankList.vue';\n\n// ────────────────────────────────────────────────────────\n// Schema 定义\n// ────────────────────────────────────────────────────────\nconst textSchema = [\n { key: 'content', label: '内容', type: 'textarea', group: '基础', default: '文本内容' },\n { key: 'color', label: '颜色', type: 'color', group: '样式', default: '#ffffff' },\n { key: 'fontSize', label: '字号', type: 'number', group: '样式', default: 16, min: 8, max: 200 },\n { key: 'fontWeight', label: '字重', type: 'select', group: '样式', default: 400,\n options: [{label:'细',value:300},{label:'常规',value:400},{label:'粗',value:700},{label:'特粗',value:900}] },\n { key: 'textAlign', label: '对齐', type: 'select', group: '样式', default: 'left',\n options: [{label:'左',value:'left'},{label:'中',value:'center'},{label:'右',value:'right'}] },\n { key: 'padding', label: '内边距', type: 'slider', group: '样式', default: 8, min: 0, max: 40 },\n];\n\nconst lineChartSchema = [\n { key: 'data', label: '数据', type: 'json', group: '数据', default: [] },\n { key: 'color', label: '线条颜色', type: 'color', group: '样式', default: '#1890ff' },\n { key: 'showLegend', label: '显示图例', type: 'switch', group: '样式', default: true },\n { key: 'smooth', label: '平滑曲线', type: 'switch', group: '样式', default: false },\n { key: 'areaStyle', label: '面积填充', type: 'switch', group: '样式', default: false },\n { key: 'xAxisTitle', label: 'X 轴标题', type: 'text', group: '轴', default: '' },\n { key: 'yAxisTitle', label: 'Y 轴标题', type: 'text', group: '轴', default: '' },\n];\n\nconst barChartSchema = [\n { key: 'data', label: '数据', type: 'json', group: '数据', default: [] },\n { key: 'color', label: '柱子颜色', type: 'color', group: '样式', default: '#1890ff' },\n { key: 'horizontal', label: '横向', type: 'switch', group: '样式', default: false },\n { key: 'showLegend', label: '显示图例', type: 'switch', group: '样式', default: false },\n { key: 'showLabel', label: '显示数值', type: 'switch', group: '样式', default: false },\n { key: 'barWidth', label: '柱宽', type: 'text', group: '样式', default: 'auto',\n placeholder: 'auto 或数字' },\n { key: 'xAxisTitle', label: 'X 轴标题', type: 'text', group: '轴', default: '' },\n { key: 'yAxisTitle', label: 'Y 轴标题', type: 'text', group: '轴', default: '' },\n];\n\nconst pieChartSchema = [\n { key: 'data', label: '数据', type: 'json', group: '数据', default: [] },\n { key: 'colors', label: '配色', type: 'json', group: '样式', default: ['#1890ff', '#8b5cf6', '#22c55e', '#f59e0b', '#ef4444'] },\n { key: 'showLegend', label: '显示图例', type: 'switch', group: '样式', default: true },\n { key: 'showLabel', label: '显示标签', type: 'switch', group: '样式', default: true },\n { key: 'ringMode', label: '环形', type: 'switch', group: '样式', default: false },\n { key: 'innerRadius', label: '内径', type: 'number', group: '样式', default: 40, min: 0, max: 90 },\n { key: 'outerRadius', label: '外径', type: 'number', group: '样式', default: 80, min: 10, max: 100 },\n];\n\nconst borderTechSchema = [\n { key: 'color', label: '边框颜色', type: 'color', group: '样式', default: '#1890ff' },\n { key: 'radius', label: '圆角', type: 'slider', group: '样式', default: 0, min: 0, max: 30 },\n];\n\nconst counterSchema = [\n { key: 'value', label: '数值', type: 'number', group: '基础', default: 0 },\n { key: 'label', label: '标签', type: 'text', group: '基础', default: '' },\n { key: 'suffix', label: '后缀', type: 'text', group: '基础', default: '' },\n { key: 'color', label: '颜色', type: 'color', group: '样式', default: '#00d4ff' },\n { key: 'fontSize', label: '字号', type: 'slider', group: '样式', default: 32, min: 12, max: 120 },\n { key: 'duration', label: '动画时长', type: 'number', group: '动画', default: 1000, min: 0, max: 5000 },\n { key: 'decimals', label: '小数位', type: 'number', group: '基础', default: 0, min: 0, max: 6 },\n];\n\nconst ringSchema = [\n { key: 'color', label: '颜色', type: 'color', group: '样式', default: '#00f5ff' },\n { key: 'size', label: '尺寸', type: 'number', group: '样式', default: 100, min: 40, max: 400 },\n { key: 'opacity', label: '不透明度', type: 'slider', group: '样式', default: 0.8, min: 0.1, max: 1, step: 0.1 },\n];\n\nconst sparkLineSchema = [\n { key: 'data', label: '数据', type: 'json', group: '数据', default: [] },\n { key: 'label', label: '标题', type: 'text', group: '基础', default: '趋势' },\n { key: 'color', label: '颜色', type: 'color', group: '样式', default: '#00c8ff' },\n];\n\nconst digitalClockSchema = [\n { key: 'color', label: '主色', type: 'color', group: '样式', default: '#00d4ff' },\n { key: 'secondColor', label: '秒数颜色', type: 'color', group: '样式', default: '#ff6b6b' },\n { key: 'showSeconds', label: '显示秒', type: 'switch', group: '基础', default: true },\n { key: 'showDate', label: '显示日期', type: 'switch', group: '基础', default: true },\n { key: 'blink', label: '冒号闪烁', type: 'switch', group: '基础', default: true },\n { key: 'timeFormat', label: '时间制', type: 'select', group: '基础', default: '24h',\n options: [{label:'24小时',value:'24h'},{label:'12小时',value:'12h'}] },\n { key: 'dateFormat', label: '日期格式', type: 'select', group: '基础', default: 'YYYY-MM-DD',\n options: [\n {label:'2026-01-01',value:'YYYY-MM-DD'},\n {label:'2026年01月01日',value:'YYYY年MM月DD日'},\n {label:'01/01/2026',value:'DD/MM/YYYY'},\n {label:'01/01/2026',value:'MM/DD/YYYY'},\n ] },\n];\n\nconst rankListSchema = [\n { key: 'data', label: '数据', type: 'json', group: '数据', default: [] },\n { key: 'title', label: '标题', type: 'text', group: '基础', default: '' },\n { key: 'color', label: '颜色', type: 'color', group: '样式', default: '#00d4ff' },\n { key: 'max', label: '最大值', type: 'number', group: '基础', default: 0, description: '0 表示自动' },\n { key: 'unit', label: '单位', type: 'text', group: '基础', default: '' },\n];\n\n// ────────────────────────────────────────────────────────\n// 扩展定义\n// ────────────────────────────────────────────────────────\nconst textExt = defineComponentExtension({\n type: 'ds-text',\n name: '文本',\n category: 'controls',\n component: DsText,\n schema: textSchema,\n defaults: { content: '文本内容', color: '#ffffff', fontSize: 16, fontWeight: 400, textAlign: 'left', padding: 8 },\n tags: ['文本', '文字'],\n icon: 'FontSizeOutlined',\n description: '基础文本组件,支持颜色、字号、对齐配置',\n});\n\nconst lineChartExt = defineComponentExtension({\n type: 'ds-line-chart',\n name: '折线图',\n category: 'charts',\n component: DsLineChart,\n schema: lineChartSchema,\n defaults: { data: [], color: '#1890ff', showLegend: true, smooth: false, areaStyle: false },\n tags: ['图表', '趋势', '折线'],\n icon: 'LineChartOutlined',\n description: 'ECharts 折线图,支持平滑曲线与面积填充',\n});\n\nconst barChartExt = defineComponentExtension({\n type: 'ds-bar-chart',\n name: '柱状图',\n category: 'charts',\n component: DsBarChart,\n schema: barChartSchema,\n defaults: { data: [], color: '#1890ff', horizontal: false, showLegend: false, showLabel: false, barWidth: 'auto' },\n tags: ['图表', '柱状', '对比'],\n icon: 'BarChartOutlined',\n description: 'ECharts 柱状图,支持横向、多系列与数值标签',\n});\n\nconst pieChartExt = defineComponentExtension({\n type: 'ds-pie-chart',\n name: '饼图',\n category: 'charts',\n component: DsPieChart,\n schema: pieChartSchema,\n defaults: { data: [], showLegend: true, showLabel: true, ringMode: false, innerRadius: 40, outerRadius: 80 },\n tags: ['图表', '占比', '饼图'],\n icon: 'PieChartOutlined',\n description: 'ECharts 饼图,支持环形模式与自定义配色',\n});\n\nconst borderTechExt = defineComponentExtension({\n type: 'ds-border-tech',\n name: '科技边框',\n category: 'borders',\n component: DsBorderTech,\n schema: borderTechSchema,\n defaults: { color: '#1890ff', radius: 0 },\n tags: ['边框', '科技'],\n icon: 'BorderOutlined',\n description: '科技风边框,四角装饰',\n});\n\nconst counterExt = defineComponentExtension({\n type: 'ds-counter',\n name: '数字翻牌器',\n category: 'controls',\n component: DsCounter,\n schema: counterSchema,\n defaults: { value: 0, label: '', suffix: '', color: '#00d4ff', fontSize: 32, duration: 1000, decimals: 0 },\n tags: ['数字', '翻牌', '动画'],\n icon: 'FieldNumberOutlined',\n description: '数字翻牌器,支持动画过渡与格式化',\n});\n\nconst ringExt = defineComponentExtension({\n type: 'ds-ring',\n name: '装饰环',\n category: 'decorations',\n component: DsRing,\n schema: ringSchema,\n defaults: { color: '#00f5ff', size: 100, opacity: 0.8 },\n tags: ['装饰', '动画', '环形'],\n icon: 'RadiusSettingOutlined',\n description: '科技装饰环,三层轨道旋转动画,支持自定义颜色',\n});\n\nconst sparkLineExt = defineComponentExtension({\n type: 'ds-spark-line',\n name: '迷你折线',\n category: 'controls',\n component: DsSparkLine,\n schema: sparkLineSchema,\n defaults: { data: [], label: '趋势', color: '#00c8ff' },\n tags: ['图表', '迷你', '趋势'],\n icon: 'DotChartOutlined',\n description: 'SVG 迷你折线图,纯 CSS 实现,体积小',\n});\n\nconst digitalClockExt = defineComponentExtension({\n type: 'ds-digital-clock',\n name: '数字时钟',\n category: 'time',\n component: DsDigitalClock,\n schema: digitalClockSchema,\n defaults: { color: '#00d4ff', secondColor: '#ff6b6b', showSeconds: true, showDate: true, blink: true, timeFormat: '24h', dateFormat: 'YYYY-MM-DD' },\n tags: ['时间', '时钟', '日期'],\n icon: 'ClockCircleOutlined',\n description: '数字时钟,支持 12/24 小时制与多种日期格式',\n});\n\nconst rankListExt = defineComponentExtension({\n type: 'ds-rank-list',\n name: '排行榜',\n category: 'lists',\n component: DsRankList,\n schema: rankListSchema,\n defaults: { data: [], title: '', color: '#00d4ff', max: 0, unit: '' },\n tags: ['列表', '排行', '对比'],\n icon: 'TrophyOutlined',\n description: '排行榜,自动降序,前三名特殊样式',\n});\n\n// ────────────────────────────────────────────────────────\n// 导出\n// ────────────────────────────────────────────────────────\nexport const extensions = [\n textExt,\n lineChartExt,\n barChartExt,\n pieChartExt,\n borderTechExt,\n counterExt,\n ringExt,\n sparkLineExt,\n digitalClockExt,\n rankListExt,\n];\n\nexport const components = {\n 'ds-text': textExt,\n 'ds-line-chart': lineChartExt,\n 'ds-bar-chart': barChartExt,\n 'ds-pie-chart': pieChartExt,\n 'ds-border-tech': borderTechExt,\n 'ds-counter': counterExt,\n 'ds-ring': ringExt,\n 'ds-spark-line': sparkLineExt,\n 'ds-digital-clock': digitalClockExt,\n 'ds-rank-list': rankListExt,\n};\n\nexport default { extensions };\n\nexport {\n DsText,\n DsLineChart,\n DsBarChart,\n DsPieChart,\n DsBorderTech,\n DsCounter,\n DsRing,\n DsSparkLine,\n DsDigitalClock,\n DsRankList,\n};\n\nexport const VERSION = '0.1.0';\nexport const PACKAGE_NAME = '@nbreak/ui';\n"],"mappings":"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"}
|
package/dist/esm/ui.css
ADDED
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
|
|
2
|
+
.ds-text[data-v-145be8f0] {
|
|
3
|
+
width: 100%;
|
|
4
|
+
height: 100%;
|
|
5
|
+
display: flex;
|
|
6
|
+
align-items: center;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
word-break: break-word;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.ds-line-chart[data-v-7814c43a] {
|
|
12
|
+
width: 100%;
|
|
13
|
+
height: 100%;
|
|
14
|
+
min-height: 200px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.ds-bar-chart[data-v-37086186] {
|
|
18
|
+
width: 100%;
|
|
19
|
+
height: 100%;
|
|
20
|
+
min-height: 200px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.ds-pie-chart[data-v-71ef0ee1] {
|
|
24
|
+
width: 100%;
|
|
25
|
+
height: 100%;
|
|
26
|
+
min-height: 200px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.ds-border-tech[data-v-1e01cd34] {
|
|
30
|
+
position: relative;
|
|
31
|
+
width: 100%;
|
|
32
|
+
height: 100%;
|
|
33
|
+
border: 1px solid;
|
|
34
|
+
overflow: hidden;
|
|
35
|
+
}
|
|
36
|
+
.ds-border-tech-corner[data-v-1e01cd34] {
|
|
37
|
+
position: absolute;
|
|
38
|
+
width: 12px;
|
|
39
|
+
height: 12px;
|
|
40
|
+
border-style: solid;
|
|
41
|
+
border-width: 0;
|
|
42
|
+
}
|
|
43
|
+
.ds-border-tech-corner.top-left[data-v-1e01cd34] {
|
|
44
|
+
top: 0; left: 0;
|
|
45
|
+
border-top-width: 2px;
|
|
46
|
+
border-left-width: 2px;
|
|
47
|
+
}
|
|
48
|
+
.ds-border-tech-corner.top-right[data-v-1e01cd34] {
|
|
49
|
+
top: 0; right: 0;
|
|
50
|
+
border-top-width: 2px;
|
|
51
|
+
border-right-width: 2px;
|
|
52
|
+
}
|
|
53
|
+
.ds-border-tech-corner.bottom-left[data-v-1e01cd34] {
|
|
54
|
+
bottom: 0; left: 0;
|
|
55
|
+
border-bottom-width: 2px;
|
|
56
|
+
border-left-width: 2px;
|
|
57
|
+
}
|
|
58
|
+
.ds-border-tech-corner.bottom-right[data-v-1e01cd34] {
|
|
59
|
+
bottom: 0; right: 0;
|
|
60
|
+
border-bottom-width: 2px;
|
|
61
|
+
border-right-width: 2px;
|
|
62
|
+
}
|
|
63
|
+
.ds-border-tech-content[data-v-1e01cd34] {
|
|
64
|
+
width: 100%;
|
|
65
|
+
height: 100%;
|
|
66
|
+
padding: 8px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.ds-counter[data-v-626c08f2] {
|
|
70
|
+
display: flex;
|
|
71
|
+
flex-direction: column;
|
|
72
|
+
align-items: center;
|
|
73
|
+
justify-content: center;
|
|
74
|
+
height: 100%;
|
|
75
|
+
font-family: 'DIN', 'Helvetica Neue', sans-serif;
|
|
76
|
+
}
|
|
77
|
+
.ds-counter-label[data-v-626c08f2] {
|
|
78
|
+
font-size: 14px;
|
|
79
|
+
color: rgba(255,255,255,0.65);
|
|
80
|
+
margin-bottom: 4px;
|
|
81
|
+
}
|
|
82
|
+
.ds-counter-value[data-v-626c08f2] {
|
|
83
|
+
font-weight: 700;
|
|
84
|
+
line-height: 1;
|
|
85
|
+
}
|
|
86
|
+
.ds-counter-suffix[data-v-626c08f2] {
|
|
87
|
+
font-size: 0.5em;
|
|
88
|
+
margin-left: 4px;
|
|
89
|
+
opacity: 0.7;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.ds-ring[data-v-a555123f] {
|
|
93
|
+
position: relative;
|
|
94
|
+
display: flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
justify-content: center;
|
|
97
|
+
overflow: hidden;
|
|
98
|
+
}
|
|
99
|
+
.ring-container[data-v-a555123f] {
|
|
100
|
+
position: relative;
|
|
101
|
+
width: 100%;
|
|
102
|
+
height: 100%;
|
|
103
|
+
display: flex;
|
|
104
|
+
align-items: center;
|
|
105
|
+
justify-content: center;
|
|
106
|
+
}
|
|
107
|
+
.orbit[data-v-a555123f] {
|
|
108
|
+
position: absolute;
|
|
109
|
+
top: 50%;
|
|
110
|
+
left: 50%;
|
|
111
|
+
border-radius: 50%;
|
|
112
|
+
}
|
|
113
|
+
.orbit-path[data-v-a555123f] {
|
|
114
|
+
position: absolute;
|
|
115
|
+
inset: 0;
|
|
116
|
+
border-radius: 50%;
|
|
117
|
+
border: 1px solid color-mix(in srgb, var(--deco-color) 25%, transparent);
|
|
118
|
+
}
|
|
119
|
+
.orbit-1[data-v-a555123f] {
|
|
120
|
+
width: 90%;
|
|
121
|
+
height: 90%;
|
|
122
|
+
transform: translate(-50%, -50%);
|
|
123
|
+
animation: ds-ring-rotate-1-a555123f 8s linear infinite;
|
|
124
|
+
}
|
|
125
|
+
.orbit-1 .orbit-path[data-v-a555123f] {
|
|
126
|
+
border-color: color-mix(in srgb, var(--deco-color) 30%, transparent);
|
|
127
|
+
border-style: dashed;
|
|
128
|
+
}
|
|
129
|
+
.orbit-2[data-v-a555123f] {
|
|
130
|
+
width: 60%;
|
|
131
|
+
height: 60%;
|
|
132
|
+
transform: translate(-50%, -50%);
|
|
133
|
+
animation: ds-ring-rotate-2-a555123f 5s linear infinite reverse;
|
|
134
|
+
}
|
|
135
|
+
.orbit-2 .orbit-path[data-v-a555123f] {
|
|
136
|
+
border-color: color-mix(in srgb, var(--deco-color) 40%, transparent);
|
|
137
|
+
}
|
|
138
|
+
.orbit-3[data-v-a555123f] {
|
|
139
|
+
width: 35%;
|
|
140
|
+
height: 35%;
|
|
141
|
+
transform: translate(-50%, -50%);
|
|
142
|
+
animation: ds-ring-rotate-3-a555123f 3s linear infinite;
|
|
143
|
+
}
|
|
144
|
+
.orbit-3 .orbit-path[data-v-a555123f] {
|
|
145
|
+
border-color: color-mix(in srgb, var(--deco-color) 50%, transparent);
|
|
146
|
+
border-width: 2px;
|
|
147
|
+
}
|
|
148
|
+
.orbit-dot[data-v-a555123f] {
|
|
149
|
+
position: absolute;
|
|
150
|
+
width: 6px;
|
|
151
|
+
height: 6px;
|
|
152
|
+
border-radius: 50%;
|
|
153
|
+
background: var(--deco-color);
|
|
154
|
+
box-shadow: 0 0 6px var(--deco-color), 0 0 12px color-mix(in srgb, var(--deco-color) 50%, transparent);
|
|
155
|
+
}
|
|
156
|
+
.dot-1[data-v-a555123f] { top: -3px; left: 50%; transform: translateX(-50%); width: 5px; height: 5px;
|
|
157
|
+
}
|
|
158
|
+
.dot-1b[data-v-a555123f] { bottom: -3px; left: 50%; transform: translateX(-50%); width: 4px; height: 4px; opacity: 0.6;
|
|
159
|
+
}
|
|
160
|
+
.dot-2[data-v-a555123f] { top: 50%; right: -3px; transform: translateY(-50%); width: 6px; height: 6px;
|
|
161
|
+
}
|
|
162
|
+
.dot-2b[data-v-a555123f] { top: 50%; left: -3px; transform: translateY(-50%); width: 4px; height: 4px; opacity: 0.6;
|
|
163
|
+
}
|
|
164
|
+
.dot-3[data-v-a555123f] { top: -3px; left: 50%; transform: translateX(-50%); width: 7px; height: 7px;
|
|
165
|
+
box-shadow: 0 0 8px var(--deco-color), 0 0 16px var(--deco-color);
|
|
166
|
+
}
|
|
167
|
+
@keyframes ds-ring-rotate-1-a555123f {
|
|
168
|
+
from { transform: translate(-50%, -50%) rotate(0deg);
|
|
169
|
+
}
|
|
170
|
+
to { transform: translate(-50%, -50%) rotate(360deg);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
@keyframes ds-ring-rotate-2-a555123f {
|
|
174
|
+
from { transform: translate(-50%, -50%) rotate(0deg);
|
|
175
|
+
}
|
|
176
|
+
to { transform: translate(-50%, -50%) rotate(360deg);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
@keyframes ds-ring-rotate-3-a555123f {
|
|
180
|
+
from { transform: translate(-50%, -50%) rotate(0deg);
|
|
181
|
+
}
|
|
182
|
+
to { transform: translate(-50%, -50%) rotate(360deg);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
.ring-core[data-v-a555123f] {
|
|
186
|
+
position: absolute;
|
|
187
|
+
top: 50%;
|
|
188
|
+
left: 50%;
|
|
189
|
+
transform: translate(-50%, -50%);
|
|
190
|
+
z-index: 2;
|
|
191
|
+
}
|
|
192
|
+
.core-inner[data-v-a555123f] {
|
|
193
|
+
width: 10px;
|
|
194
|
+
height: 10px;
|
|
195
|
+
border-radius: 50%;
|
|
196
|
+
background: radial-gradient(circle, var(--deco-color),
|
|
197
|
+
color-mix(in srgb, var(--deco-color) 60%, #0a0e1a));
|
|
198
|
+
box-shadow: 0 0 10px var(--deco-color),
|
|
199
|
+
0 0 20px color-mix(in srgb, var(--deco-color) 40%, transparent);
|
|
200
|
+
position: relative;
|
|
201
|
+
z-index: 2;
|
|
202
|
+
animation: ds-core-glow-a555123f 2s ease-in-out infinite;
|
|
203
|
+
}
|
|
204
|
+
.core-pulse[data-v-a555123f] {
|
|
205
|
+
position: absolute;
|
|
206
|
+
top: 50%;
|
|
207
|
+
left: 50%;
|
|
208
|
+
transform: translate(-50%, -50%);
|
|
209
|
+
width: 10px;
|
|
210
|
+
height: 10px;
|
|
211
|
+
border-radius: 50%;
|
|
212
|
+
border: 1px solid var(--deco-color);
|
|
213
|
+
animation: ds-core-expand-a555123f 2.5s ease-out infinite;
|
|
214
|
+
}
|
|
215
|
+
.core-pulse-2[data-v-a555123f] { animation-delay: 1.25s;
|
|
216
|
+
}
|
|
217
|
+
@keyframes ds-core-glow-a555123f {
|
|
218
|
+
0%, 100% { box-shadow: 0 0 10px var(--deco-color), 0 0 20px color-mix(in srgb, var(--deco-color) 40%, transparent);
|
|
219
|
+
}
|
|
220
|
+
50% { box-shadow: 0 0 14px var(--deco-color), 0 0 28px color-mix(in srgb, var(--deco-color) 60%, transparent);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
@keyframes ds-core-expand-a555123f {
|
|
224
|
+
0% { width: 10px; height: 10px; opacity: 0.6;
|
|
225
|
+
}
|
|
226
|
+
100% { width: 50px; height: 50px; opacity: 0;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
.content-overlay[data-v-a555123f] {
|
|
230
|
+
position: absolute;
|
|
231
|
+
inset: 0;
|
|
232
|
+
display: flex;
|
|
233
|
+
align-items: center;
|
|
234
|
+
justify-content: center;
|
|
235
|
+
z-index: 3;
|
|
236
|
+
pointer-events: none;
|
|
237
|
+
}
|
|
238
|
+
.content-overlay[data-v-a555123f] * { pointer-events: auto;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.ds-spark[data-v-9408656c] {
|
|
242
|
+
display: flex;
|
|
243
|
+
flex-direction: column;
|
|
244
|
+
padding: 8px;
|
|
245
|
+
color: rgba(255, 255, 255, 0.85);
|
|
246
|
+
font-family: 'Microsoft YaHei', sans-serif;
|
|
247
|
+
}
|
|
248
|
+
.ds-spark-header[data-v-9408656c] {
|
|
249
|
+
display: flex;
|
|
250
|
+
justify-content: space-between;
|
|
251
|
+
align-items: center;
|
|
252
|
+
margin-bottom: 4px;
|
|
253
|
+
}
|
|
254
|
+
.ds-spark-label[data-v-9408656c] {
|
|
255
|
+
font-size: 14px;
|
|
256
|
+
color: rgba(255, 255, 255, 0.7);
|
|
257
|
+
}
|
|
258
|
+
.ds-spark-current[data-v-9408656c] {
|
|
259
|
+
font-size: 18px;
|
|
260
|
+
font-weight: 700;
|
|
261
|
+
}
|
|
262
|
+
.ds-spark-svg[data-v-9408656c] {
|
|
263
|
+
flex: 1;
|
|
264
|
+
width: 100%;
|
|
265
|
+
min-height: 60px;
|
|
266
|
+
}
|
|
267
|
+
.ds-spark-footer[data-v-9408656c] {
|
|
268
|
+
display: flex;
|
|
269
|
+
justify-content: space-between;
|
|
270
|
+
margin-top: 4px;
|
|
271
|
+
font-size: 12px;
|
|
272
|
+
color: rgba(255, 255, 255, 0.55);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.ds-clock[data-v-cf84c4e0] {
|
|
276
|
+
position: relative;
|
|
277
|
+
display: flex;
|
|
278
|
+
flex-direction: column;
|
|
279
|
+
align-items: center;
|
|
280
|
+
justify-content: center;
|
|
281
|
+
overflow: hidden;
|
|
282
|
+
font-family: 'Courier New', 'Consolas', 'Liberation Mono', monospace;
|
|
283
|
+
}
|
|
284
|
+
.ds-clock-bg-grid[data-v-cf84c4e0] {
|
|
285
|
+
position: absolute;
|
|
286
|
+
inset: 0;
|
|
287
|
+
background-image:
|
|
288
|
+
linear-gradient(rgba(255,255,255,0.015) 1px, transparent 1px),
|
|
289
|
+
linear-gradient(90deg, rgba(255,255,255,0.015) 1px, transparent 1px);
|
|
290
|
+
background-size: 20px 20px;
|
|
291
|
+
pointer-events: none;
|
|
292
|
+
}
|
|
293
|
+
.ds-clock-bg-glow[data-v-cf84c4e0] {
|
|
294
|
+
position: absolute;
|
|
295
|
+
top: 50%;
|
|
296
|
+
left: 50%;
|
|
297
|
+
width: 70%;
|
|
298
|
+
height: 60%;
|
|
299
|
+
transform: translate(-50%, -50%);
|
|
300
|
+
background: radial-gradient(ellipse, var(--dsc-glow-08), transparent 70%);
|
|
301
|
+
pointer-events: none;
|
|
302
|
+
}
|
|
303
|
+
.ds-clock-time-row[data-v-cf84c4e0] {
|
|
304
|
+
display: flex;
|
|
305
|
+
align-items: center;
|
|
306
|
+
gap: clamp(2px, 0.5vw, 6px);
|
|
307
|
+
z-index: 1;
|
|
308
|
+
}
|
|
309
|
+
.ds-clock-digit-group[data-v-cf84c4e0] {
|
|
310
|
+
display: flex;
|
|
311
|
+
gap: clamp(1px, 0.3vw, 4px);
|
|
312
|
+
}
|
|
313
|
+
.ds-clock-digit-group--sec[data-v-cf84c4e0] { opacity: 0.85;
|
|
314
|
+
}
|
|
315
|
+
.ds-clock-digit[data-v-cf84c4e0] {
|
|
316
|
+
font-size: clamp(28px, 7cqw, 72px);
|
|
317
|
+
font-weight: 700;
|
|
318
|
+
color: var(--dsc-color);
|
|
319
|
+
text-shadow: 0 0 8px var(--dsc-glow-60), 0 0 24px var(--dsc-glow-25);
|
|
320
|
+
line-height: 1;
|
|
321
|
+
min-width: 0.62em;
|
|
322
|
+
display: inline-flex;
|
|
323
|
+
align-items: center;
|
|
324
|
+
justify-content: center;
|
|
325
|
+
}
|
|
326
|
+
.ds-clock-digit--sec[data-v-cf84c4e0] {
|
|
327
|
+
font-size: clamp(20px, 5cqw, 52px);
|
|
328
|
+
color: var(--dsc-sec-color);
|
|
329
|
+
text-shadow: 0 0 6px var(--dsc-sec-glow-50), 0 0 18px var(--dsc-sec-glow-20);
|
|
330
|
+
}
|
|
331
|
+
.ds-clock-sep[data-v-cf84c4e0] {
|
|
332
|
+
font-size: clamp(24px, 6cqw, 60px);
|
|
333
|
+
font-weight: 300;
|
|
334
|
+
color: var(--dsc-color);
|
|
335
|
+
text-shadow: 0 0 10px var(--dsc-glow-40);
|
|
336
|
+
transition: opacity 0.25s ease;
|
|
337
|
+
line-height: 1;
|
|
338
|
+
}
|
|
339
|
+
.ds-clock-sep--sec[data-v-cf84c4e0] {
|
|
340
|
+
font-size: clamp(18px, 4.5cqw, 48px);
|
|
341
|
+
color: var(--dsc-sec-color);
|
|
342
|
+
opacity: 0.7;
|
|
343
|
+
}
|
|
344
|
+
.ds-clock-sep--off[data-v-cf84c4e0] {
|
|
345
|
+
opacity: 0.15;
|
|
346
|
+
text-shadow: none;
|
|
347
|
+
}
|
|
348
|
+
.ds-clock-ampm[data-v-cf84c4e0] {
|
|
349
|
+
font-size: clamp(14px, 2.8cqw, 22px);
|
|
350
|
+
font-weight: 600;
|
|
351
|
+
color: var(--dsc-color);
|
|
352
|
+
opacity: 0.85;
|
|
353
|
+
margin-left: clamp(4px, 1vw, 10px);
|
|
354
|
+
letter-spacing: 1px;
|
|
355
|
+
align-self: flex-end;
|
|
356
|
+
margin-bottom: clamp(4px, 1vw, 10px);
|
|
357
|
+
}
|
|
358
|
+
.ds-clock-date-row[data-v-cf84c4e0] {
|
|
359
|
+
display: flex;
|
|
360
|
+
align-items: center;
|
|
361
|
+
gap: clamp(6px, 1.2vw, 12px);
|
|
362
|
+
margin-top: clamp(6px, 1.5vw, 16px);
|
|
363
|
+
z-index: 1;
|
|
364
|
+
}
|
|
365
|
+
.ds-clock-date-text[data-v-cf84c4e0] {
|
|
366
|
+
font-size: clamp(14px, 2.5vw, 20px);
|
|
367
|
+
font-weight: 500;
|
|
368
|
+
color: rgba(255, 255, 255, 0.75);
|
|
369
|
+
letter-spacing: 1px;
|
|
370
|
+
font-family: 'Microsoft YaHei', 'PingFang SC', sans-serif;
|
|
371
|
+
}
|
|
372
|
+
.ds-clock-weekday[data-v-cf84c4e0] {
|
|
373
|
+
font-size: clamp(12px, 2.2vw, 18px);
|
|
374
|
+
font-weight: 600;
|
|
375
|
+
color: var(--dsc-color);
|
|
376
|
+
opacity: 0.85;
|
|
377
|
+
padding: 2px clamp(8px, 1.2vw, 14px);
|
|
378
|
+
background: var(--dsc-glow-08);
|
|
379
|
+
border-radius: 10px;
|
|
380
|
+
font-family: 'Microsoft YaHei', 'PingFang SC', sans-serif;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.ds-rank[data-v-f3072169] {
|
|
384
|
+
display: flex;
|
|
385
|
+
flex-direction: column;
|
|
386
|
+
padding: 12px;
|
|
387
|
+
color: rgba(255, 255, 255, 0.85);
|
|
388
|
+
font-family: 'Microsoft YaHei', sans-serif;
|
|
389
|
+
overflow: hidden;
|
|
390
|
+
}
|
|
391
|
+
.ds-rank-title[data-v-f3072169] {
|
|
392
|
+
font-size: 16px;
|
|
393
|
+
font-weight: 600;
|
|
394
|
+
margin-bottom: 8px;
|
|
395
|
+
}
|
|
396
|
+
.ds-rank-list[data-v-f3072169] {
|
|
397
|
+
flex: 1;
|
|
398
|
+
overflow: auto;
|
|
399
|
+
display: flex;
|
|
400
|
+
flex-direction: column;
|
|
401
|
+
gap: 8px;
|
|
402
|
+
}
|
|
403
|
+
.ds-rank-item[data-v-f3072169] {
|
|
404
|
+
display: flex;
|
|
405
|
+
align-items: center;
|
|
406
|
+
gap: 10px;
|
|
407
|
+
padding: 6px 4px;
|
|
408
|
+
border-radius: 4px;
|
|
409
|
+
transition: background 0.2s;
|
|
410
|
+
}
|
|
411
|
+
.ds-rank-item[data-v-f3072169]:hover { background: rgba(255, 255, 255, 0.03);
|
|
412
|
+
}
|
|
413
|
+
.ds-rank-index[data-v-f3072169] {
|
|
414
|
+
flex-shrink: 0;
|
|
415
|
+
width: 24px;
|
|
416
|
+
height: 24px;
|
|
417
|
+
border-radius: 50%;
|
|
418
|
+
display: flex;
|
|
419
|
+
align-items: center;
|
|
420
|
+
justify-content: center;
|
|
421
|
+
font-size: 12px;
|
|
422
|
+
font-weight: 700;
|
|
423
|
+
background: rgba(255, 255, 255, 0.08);
|
|
424
|
+
color: rgba(255, 255, 255, 0.65);
|
|
425
|
+
}
|
|
426
|
+
.ds-rank-index--1[data-v-f3072169] { background: #ffd700; color: #1a1a1a;
|
|
427
|
+
}
|
|
428
|
+
.ds-rank-index--2[data-v-f3072169] { background: #c0c0c0; color: #1a1a1a;
|
|
429
|
+
}
|
|
430
|
+
.ds-rank-index--3[data-v-f3072169] { background: #cd7f32; color: #fff;
|
|
431
|
+
}
|
|
432
|
+
.ds-rank-content[data-v-f3072169] {
|
|
433
|
+
flex: 1;
|
|
434
|
+
display: flex;
|
|
435
|
+
flex-direction: column;
|
|
436
|
+
gap: 4px;
|
|
437
|
+
min-width: 0;
|
|
438
|
+
}
|
|
439
|
+
.ds-rank-info[data-v-f3072169] {
|
|
440
|
+
display: flex;
|
|
441
|
+
justify-content: space-between;
|
|
442
|
+
align-items: center;
|
|
443
|
+
font-size: 13px;
|
|
444
|
+
}
|
|
445
|
+
.ds-rank-name[data-v-f3072169] {
|
|
446
|
+
color: rgba(255, 255, 255, 0.85);
|
|
447
|
+
overflow: hidden;
|
|
448
|
+
text-overflow: ellipsis;
|
|
449
|
+
white-space: nowrap;
|
|
450
|
+
}
|
|
451
|
+
.ds-rank-value[data-v-f3072169] {
|
|
452
|
+
font-weight: 600;
|
|
453
|
+
margin-left: 8px;
|
|
454
|
+
}
|
|
455
|
+
.ds-rank-bar-track[data-v-f3072169] {
|
|
456
|
+
height: 4px;
|
|
457
|
+
background: rgba(255, 255, 255, 0.06);
|
|
458
|
+
border-radius: 2px;
|
|
459
|
+
overflow: hidden;
|
|
460
|
+
}
|
|
461
|
+
.ds-rank-bar-fill[data-v-f3072169] {
|
|
462
|
+
height: 100%;
|
|
463
|
+
border-radius: 2px;
|
|
464
|
+
transition: width 0.6s ease;
|
|
465
|
+
}
|
|
466
|
+
.ds-rank-empty[data-v-f3072169] {
|
|
467
|
+
display: flex;
|
|
468
|
+
align-items: center;
|
|
469
|
+
justify-content: center;
|
|
470
|
+
height: 100%;
|
|
471
|
+
color: rgba(255, 255, 255, 0.35);
|
|
472
|
+
font-size: 14px;
|
|
473
|
+
}
|
|
474
|
+
/*$vite$:1*/
|