@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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","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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"}
@@ -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*/