@vanduo-oss/vd3-cbun 1.0.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/LICENSE +22 -0
  3. package/README.md +160 -0
  4. package/SKILL.md +119 -0
  5. package/dist/charts/core.d.ts +273 -0
  6. package/dist/charts/index.cjs +1828 -0
  7. package/dist/charts/index.cjs.map +7 -0
  8. package/dist/charts/index.d.ts +65 -0
  9. package/dist/charts/index.js +1805 -0
  10. package/dist/charts/index.js.map +7 -0
  11. package/dist/charts/vd3-charts.css +51 -0
  12. package/dist/charts/vue.d.ts +86 -0
  13. package/dist/flowchart/core.d.ts +288 -0
  14. package/dist/flowchart/index.cjs +3447 -0
  15. package/dist/flowchart/index.cjs.map +7 -0
  16. package/dist/flowchart/index.d.ts +54 -0
  17. package/dist/flowchart/index.js +3424 -0
  18. package/dist/flowchart/index.js.map +7 -0
  19. package/dist/flowchart/vd3-flowchart.css +600 -0
  20. package/dist/flowchart/vue.d.ts +66 -0
  21. package/dist/hex-grid/core.d.ts +200 -0
  22. package/dist/hex-grid/hex-math.cjs +162 -0
  23. package/dist/hex-grid/hex-math.cjs.map +7 -0
  24. package/dist/hex-grid/hex-math.d.ts +119 -0
  25. package/dist/hex-grid/hex-math.js +141 -0
  26. package/dist/hex-grid/hex-math.js.map +7 -0
  27. package/dist/hex-grid/index.cjs +915 -0
  28. package/dist/hex-grid/index.cjs.map +7 -0
  29. package/dist/hex-grid/index.d.ts +15 -0
  30. package/dist/hex-grid/index.js +894 -0
  31. package/dist/hex-grid/index.js.map +7 -0
  32. package/dist/hex-grid/vue.d.ts +14 -0
  33. package/dist/index.d.ts +13 -0
  34. package/dist/index.js +11 -0
  35. package/dist/index.js.map +7 -0
  36. package/dist/meta.json +551 -0
  37. package/dist/music-player/core.d.ts +88 -0
  38. package/dist/music-player/index.cjs +1227 -0
  39. package/dist/music-player/index.cjs.map +7 -0
  40. package/dist/music-player/index.d.ts +12 -0
  41. package/dist/music-player/index.js +1204 -0
  42. package/dist/music-player/index.js.map +7 -0
  43. package/dist/music-player/vd3-music-player.css +829 -0
  44. package/dist/music-player/vue.d.ts +32 -0
  45. package/package.json +105 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/charts/vue.js", "../../src/charts/core.js"],
4
+ "sourcesContent": ["/**\n * Vue 3 wrappers for the vd3-cbun charts component \u2014 the primary surface of\n * the `@vanduo-oss/vd3-cbun/charts` entry.\n *\n * import { VdChart } from '@vanduo-oss/vd3-cbun/charts';\n * <VdChart type=\"bar\" :data=\"rows\" x=\"month\" y=\"sales\" title=\"Sales\" :height=\"300\" />\n *\n * The sibling `./core.js` stays framework-agnostic. SSR-safe: the chart is\n * created on mount (client) into a plain container the server can pre-render.\n */\nimport { defineComponent, h, ref, onMounted, onBeforeUnmount, watch } from 'vue';\nimport { BarChart, LineChart, AreaChart, ScatterChart, DonutChart, PieChart } from './core.js';\n\nconst FACTORIES = {\n bar: BarChart,\n line: LineChart,\n area: AreaChart,\n scatter: ScatterChart,\n donut: DonutChart,\n pie: PieChart,\n};\n\nconst CHART_PROPS = {\n type: { type: String, default: 'bar' },\n data: { type: Array, default: () => [] },\n x: { type: [String, Function], default: undefined },\n y: { type: [String, Function], default: undefined },\n label: { type: [String, Function], default: undefined },\n value: { type: [String, Function], default: undefined },\n // CSS color, category-field name, or per-datum function `(row) => color`.\n color: { type: [String, Function], default: undefined },\n title: { type: String, default: undefined },\n description: { type: String, default: undefined },\n width: { type: Number, default: undefined },\n height: { type: Number, default: 300 },\n innerRadiusRatio: { type: Number, default: undefined },\n theme: { type: Object, default: undefined },\n tooltip: { type: [Function, String, Boolean], default: undefined },\n responsive: { type: Boolean, default: true },\n // Multi-series (bar \u2192 grouped, line/area \u2192 one path each).\n series: { type: Array, default: undefined },\n // `true` / `false` / `{ position }`.\n legend: { type: [Boolean, Object], default: undefined },\n // Value labels on marks: `true` / `false` / `{ format, color }`.\n dataLabels: { type: [Boolean, Object], default: undefined },\n // Reference lines: `[{ y?, x?, label?, color?, dash? }]`.\n annotations: { type: Array, default: undefined },\n // Axis range + ticks.\n xMin: { type: Number, default: undefined },\n xMax: { type: Number, default: undefined },\n yMin: { type: Number, default: undefined },\n yMax: { type: Number, default: undefined },\n yTickCount: { type: Number, default: undefined },\n yIncludeZero: { type: Boolean, default: undefined },\n xFormat: { type: Function, default: undefined },\n yFormat: { type: Function, default: undefined },\n xAxis: { type: Object, default: undefined },\n yAxis: { type: Object, default: undefined },\n};\n\nfunction optionsFrom(target, props) {\n return {\n target,\n type: props.type,\n data: props.data,\n x: props.x,\n y: props.y,\n label: props.label,\n value: props.value,\n color: props.color,\n title: props.title,\n description: props.description,\n width: props.width,\n height: props.height,\n innerRadiusRatio: props.innerRadiusRatio,\n theme: props.theme,\n tooltip: props.tooltip,\n responsive: props.responsive,\n series: props.series,\n legend: props.legend,\n dataLabels: props.dataLabels,\n annotations: props.annotations,\n xMin: props.xMin,\n xMax: props.xMax,\n yMin: props.yMin,\n yMax: props.yMax,\n yTickCount: props.yTickCount,\n yIncludeZero: props.yIncludeZero,\n xFormat: props.xFormat,\n yFormat: props.yFormat,\n xAxis: props.xAxis,\n yAxis: props.yAxis,\n };\n}\n\nexport const VdChart = defineComponent({\n name: 'VdChart',\n props: CHART_PROPS,\n setup(props) {\n const el = ref(null);\n let instance = null;\n let currentType = props.type;\n\n const create = () => {\n const factory = FACTORIES[props.type] || BarChart;\n currentType = props.type;\n instance = factory(optionsFrom(el.value, props));\n };\n\n onMounted(() => {\n if (typeof window === 'undefined' || !el.value) return;\n create();\n });\n\n watch(\n () => [\n props.type,\n props.data,\n props.x,\n props.y,\n props.label,\n props.value,\n props.color,\n props.title,\n props.description,\n props.width,\n props.height,\n props.innerRadiusRatio,\n props.theme,\n props.tooltip,\n props.responsive,\n props.series,\n props.legend,\n props.dataLabels,\n props.annotations,\n props.xMin,\n props.xMax,\n props.yMin,\n props.yMax,\n props.yTickCount,\n props.yIncludeZero,\n props.xFormat,\n props.yFormat,\n props.xAxis,\n props.yAxis,\n ],\n () => {\n if (!instance) return;\n // A different chart type needs a different renderer \u2192 recreate;\n // otherwise update options in place.\n if (props.type !== currentType) {\n instance.destroy();\n create();\n } else {\n instance.update(optionsFrom(el.value, props));\n }\n },\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n if (instance) {\n instance.destroy();\n instance = null;\n }\n });\n\n return () =>\n h('div', {\n ref: el,\n class: 'vd-chart',\n style: props.height ? { minHeight: `${props.height}px` } : undefined,\n });\n },\n});\n\nfunction typed(name, type) {\n return defineComponent({\n name,\n props: CHART_PROPS,\n setup(props) {\n return () => h(VdChart, { ...props, type });\n },\n });\n}\n\nexport const VdBarChart = typed('VdBarChart', 'bar');\nexport const VdLineChart = typed('VdLineChart', 'line');\nexport const VdAreaChart = typed('VdAreaChart', 'area');\nexport const VdScatterChart = typed('VdScatterChart', 'scatter');\nexport const VdDonutChart = typed('VdDonutChart', 'donut');\nexport const VdPieChart = typed('VdPieChart', 'pie');\n", "const SVG_NS = 'http://www.w3.org/2000/svg';\nconst TAU = Math.PI * 2;\nconst ARC_EPSILON = 0.0001;\nconst DEFAULT_WIDTH = 640;\nconst DEFAULT_HEIGHT = 360;\nconst DEFAULT_MARGIN = { top: 28, right: 24, bottom: 46, left: 56 };\nconst POLAR_MARGIN = { top: 32, right: 24, bottom: 28, left: 24 };\nconst DEFAULT_COLORS = [\n '#5c7cfa',\n '#228be6',\n '#40c057',\n '#fab005',\n '#fa5252',\n '#12b886',\n '#be4bdb',\n '#fd7e14',\n];\n\nexport const VD_CHARTS_VERSION = '1.0.0';\n\nlet chartId = 0;\n\nfunction nextId(prefix) {\n chartId += 1;\n return `${prefix}-${chartId}`;\n}\n\nfunction hasWindow() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nfunction isElement(value) {\n return hasWindow() && value instanceof Element;\n}\n\nfunction resolveTarget(target) {\n if (!hasWindow()) {\n throw new Error('Vanduo Charts requires a browser DOM target.');\n }\n if (typeof target === 'string') {\n const el = document.querySelector(target);\n if (!el) throw new Error(`Chart target not found: ${target}`);\n return el;\n }\n if (isElement(target)) return target;\n throw new Error('Chart target must be an Element or selector string.');\n}\n\nfunction svgEl(name, attrs = {}) {\n const el = document.createElementNS(SVG_NS, name);\n Object.entries(attrs).forEach(([key, value]) => {\n if (value !== null && typeof value !== 'undefined') {\n el.setAttribute(key, String(value));\n }\n });\n return el;\n}\n\nfunction append(parent, child) {\n parent.appendChild(child);\n return child;\n}\n\nfunction setText(parent, text) {\n parent.textContent = text == null ? '' : String(text);\n return parent;\n}\n\nfunction toArray(value) {\n return Array.isArray(value) ? value : [];\n}\n\nfunction unique(values) {\n const seen = new Set();\n const result = [];\n values.forEach((value) => {\n const key = String(value);\n if (seen.has(key)) return;\n seen.add(key);\n result.push(value);\n });\n return result;\n}\n\nfunction isFiniteNumber(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction toNumber(value) {\n if (value instanceof Date) return Number.isFinite(value.getTime()) ? value.getTime() : null;\n if (typeof value === 'number') return Number.isFinite(value) ? value : null;\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction toTime(value) {\n if (value instanceof Date) return Number.isFinite(value.getTime()) ? value.getTime() : null;\n if (typeof value === 'number') return Number.isFinite(value) ? value : null;\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction isDateLike(value) {\n if (value instanceof Date) return Number.isFinite(value.getTime());\n if (typeof value !== 'string') return false;\n const trimmed = value.trim();\n if (!trimmed || /^-?\\d+(\\.\\d+)?$/.test(trimmed)) return false;\n return Number.isFinite(Date.parse(trimmed));\n}\n\nfunction readPathValue(source, path) {\n if (source == null) return undefined;\n if (!String(path).includes('.')) return source[path];\n return String(path)\n .split('.')\n .reduce((value, key) => {\n if (value == null) return undefined;\n return value[key];\n }, source);\n}\n\nexport function createAccessor(accessor, fallback) {\n const resolved = accessor == null ? fallback : accessor;\n if (typeof resolved === 'function') return resolved;\n if (typeof resolved === 'string' && resolved.length) {\n return (datum) => readPathValue(datum, resolved);\n }\n return (datum) => datum;\n}\n\nfunction normalizeMargin(value, fallback = DEFAULT_MARGIN) {\n if (typeof value === 'number') {\n return { top: value, right: value, bottom: value, left: value };\n }\n return {\n top: Number(value?.top ?? fallback.top),\n right: Number(value?.right ?? fallback.right),\n bottom: Number(value?.bottom ?? fallback.bottom),\n left: Number(value?.left ?? fallback.left),\n };\n}\n\nfunction measureTarget(target, options) {\n const width = Number(options.width) || Math.round(target.clientWidth) || DEFAULT_WIDTH;\n const height = Number(options.height) || Math.round(target.clientHeight) || DEFAULT_HEIGHT;\n return {\n width: Math.max(160, width),\n height: Math.max(140, height),\n };\n}\n\nfunction getPlotBox(width, height, margin) {\n return {\n left: margin.left,\n top: margin.top,\n right: Math.max(margin.left + 1, width - margin.right),\n bottom: Math.max(margin.top + 1, height - margin.bottom),\n };\n}\n\nfunction readToken(style, names, fallback) {\n for (const name of names) {\n const value = style.getPropertyValue(name).trim();\n if (value) return value;\n }\n return fallback;\n}\n\nexport function resolveTheme(target, overrides = {}) {\n if (!hasWindow()) {\n return {\n fontFamily: 'inherit',\n textColor: '#1a1d20',\n mutedTextColor: '#868e96',\n gridColor: '#e9ecef',\n axisColor: '#ced4da',\n backgroundColor: '#ffffff',\n colors: DEFAULT_COLORS.slice(),\n ...overrides,\n };\n }\n\n const styleTarget = isElement(target) ? target : document.documentElement;\n const style = getComputedStyle(styleTarget);\n const rootStyle = getComputedStyle(document.documentElement);\n const tokenStyle = {\n getPropertyValue(name) {\n return style.getPropertyValue(name) || rootStyle.getPropertyValue(name);\n },\n };\n\n const colors = DEFAULT_COLORS.map((fallback, index) =>\n readToken(\n tokenStyle,\n [\n `--vd-chart-${index + 1}`,\n index === 0 ? '--vd-color-primary' : '',\n index === 1 ? '--vd-color-info' : '',\n index === 2 ? '--vd-color-success' : '',\n index === 3 ? '--vd-color-warning' : '',\n index === 4 ? '--vd-color-error' : '',\n index === 0 ? '--color-primary' : '',\n index === 1 ? '--color-info' : '',\n index === 2 ? '--color-success' : '',\n ].filter(Boolean),\n fallback,\n ),\n );\n\n return {\n fontFamily: readToken(tokenStyle, ['--vd-font-family-base'], 'inherit'),\n textColor: readToken(tokenStyle, ['--vd-text-primary', '--text-primary'], '#1a1d20'),\n mutedTextColor: readToken(tokenStyle, ['--vd-text-muted', '--text-muted'], '#868e96'),\n gridColor: readToken(\n tokenStyle,\n ['--vd-border-color-light', '--border-color-light', '--vd-border-color'],\n '#e9ecef',\n ),\n axisColor: readToken(tokenStyle, ['--vd-border-color', '--border-color'], '#ced4da'),\n backgroundColor: readToken(tokenStyle, ['--vd-bg-primary', '--bg-primary'], '#ffffff'),\n ...overrides,\n colors: overrides.colors || colors,\n };\n}\n\nfunction tickStep(min, max, count) {\n const span = Math.abs(max - min);\n if (!span || !Number.isFinite(span)) return 1;\n const raw = span / Math.max(1, count);\n const power = Math.pow(10, Math.floor(Math.log10(raw)));\n const error = raw / power;\n const factor = error >= 7.5 ? 10 : error >= 3.5 ? 5 : error >= 1.5 ? 2 : 1;\n return factor * power;\n}\n\nexport function ticks(min, max, count = 5) {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [];\n if (min === max) return [min];\n const reverse = max < min;\n const start = reverse ? max : min;\n const stop = reverse ? min : max;\n const step = tickStep(start, stop, count);\n const first = Math.ceil(start / step) * step;\n const values = [];\n for (let value = first; value <= stop + step / 2; value += step) {\n values.push(Number(value.toFixed(12)));\n }\n return reverse ? values.reverse() : values;\n}\n\n/**\n * Compute a \"nice\" [min, max] domain.\n * @param {Array} values\n * @param {boolean | { includeZero?: boolean, min?: number, max?: number, tickCount?: number }} [options]\n * Pass a boolean for the legacy `includeZero` shorthand, or an options object.\n * An explicit `min`/`max` pins that bound exactly (no nice-rounding).\n */\nexport function niceDomain(values, options = false) {\n const opts = typeof options === 'boolean' ? { includeZero: options } : options || {};\n const nums = values.map(toNumber).filter(isFiniteNumber);\n if (!nums.length) {\n return [isFiniteNumber(opts.min) ? opts.min : 0, isFiniteNumber(opts.max) ? opts.max : 1];\n }\n let min = Math.min(...nums);\n let max = Math.max(...nums);\n\n if (opts.includeZero) {\n min = Math.min(0, min);\n max = Math.max(0, max);\n }\n if (isFiniteNumber(opts.min)) min = opts.min;\n if (isFiniteNumber(opts.max)) max = opts.max;\n\n if (min === max) {\n const pad = Math.abs(min || 1) * 0.1;\n min -= pad;\n max += pad;\n }\n\n const step = tickStep(min, max, opts.tickCount || 5);\n return [\n isFiniteNumber(opts.min) ? opts.min : Math.floor(min / step) * step,\n isFiniteNumber(opts.max) ? opts.max : Math.ceil(max / step) * step,\n ];\n}\n\nexport function scaleLinear(config = {}) {\n const domain = config.domain || [0, 1];\n const range = config.range || [0, 1];\n let d0 = Number(domain[0]);\n let d1 = Number(domain[1]);\n const r0 = Number(range[0]);\n const r1 = Number(range[1]);\n\n if (!Number.isFinite(d0)) d0 = 0;\n if (!Number.isFinite(d1)) d1 = 1;\n if (d0 === d1) {\n d0 -= 0.5;\n d1 += 0.5;\n }\n\n const scale = (value) => {\n const n = Number(value);\n if (!Number.isFinite(n)) return null;\n return r0 + ((n - d0) / (d1 - d0)) * (r1 - r0);\n };\n scale.domain = () => [d0, d1];\n scale.range = () => [r0, r1];\n scale.ticks = (count = 5) => ticks(d0, d1, count);\n return scale;\n}\n\nexport function scaleTime(config = {}) {\n const domain = (config.domain || [new Date(0), new Date(1)]).map(toTime);\n const linear = scaleLinear({\n domain: [domain[0] ?? 0, domain[1] ?? 1],\n range: config.range || [0, 1],\n });\n const scale = (value) => linear(toTime(value));\n scale.domain = () => linear.domain().map((value) => new Date(value));\n scale.range = linear.range;\n scale.ticks = (count = 5) => linear.ticks(count).map((value) => new Date(value));\n return scale;\n}\n\nexport function scaleBand(config = {}) {\n const domain = unique(config.domain || []).map(String);\n const range = config.range || [0, 1];\n const paddingInner = Number(config.paddingInner ?? config.padding ?? 0.16);\n const paddingOuter = Number(config.paddingOuter ?? config.padding ?? 0.16);\n const r0 = Number(range[0]);\n const r1 = Number(range[1]);\n const span = r1 - r0;\n const denominator = Math.max(1, domain.length - paddingInner + paddingOuter * 2);\n const step = span / denominator;\n const bandwidth = Math.abs(step * Math.max(0, 1 - paddingInner));\n\n const scale = (value) => {\n const index = domain.indexOf(String(value));\n if (index < 0) return null;\n return r0 + (paddingOuter + index) * step;\n };\n scale.domain = () => domain.slice();\n scale.range = () => [r0, r1];\n scale.bandwidth = () => bandwidth;\n scale.step = () => Math.abs(step);\n return scale;\n}\n\nexport function scalePoint(config = {}) {\n const domain = unique(config.domain || []).map(String);\n const range = config.range || [0, 1];\n const padding = Number(config.padding ?? 0.5);\n const r0 = Number(range[0]);\n const r1 = Number(range[1]);\n const span = r1 - r0;\n const step = domain.length <= 1 ? 0 : span / Math.max(1, domain.length - 1 + padding * 2);\n const start = domain.length <= 1 ? r0 + span / 2 : r0 + padding * step;\n\n const scale = (value) => {\n const index = domain.indexOf(String(value));\n if (index < 0) return null;\n return start + index * step;\n };\n scale.domain = () => domain.slice();\n scale.range = () => [r0, r1];\n scale.step = () => Math.abs(step);\n scale.bandwidth = () => 0;\n return scale;\n}\n\nexport function scaleOrdinal(config = {}) {\n const domain = unique(config.domain || []).map(String);\n const range = config.range || DEFAULT_COLORS;\n const scale = (value) => {\n const key = String(value);\n let index = domain.indexOf(key);\n if (index < 0) {\n domain.push(key);\n index = domain.length - 1;\n }\n return range[index % range.length];\n };\n scale.domain = () => domain.slice();\n scale.range = () => range.slice();\n return scale;\n}\n\nexport function linePath(points) {\n const clean = points.filter((point) => isFiniteNumber(point.x) && isFiniteNumber(point.y));\n if (!clean.length) return '';\n return clean.map((point, index) => `${index === 0 ? 'M' : 'L'}${point.x},${point.y}`).join(' ');\n}\n\nexport function areaPath(points, baselineY) {\n const clean = points.filter((point) => isFiniteNumber(point.x) && isFiniteNumber(point.y));\n if (!clean.length || !isFiniteNumber(baselineY)) return '';\n const line = linePath(clean);\n const last = clean[clean.length - 1];\n const first = clean[0];\n return `${line} L${last.x},${baselineY} L${first.x},${baselineY} Z`;\n}\n\nfunction polarPoint(cx, cy, radius, angle) {\n return {\n x: cx + radius * Math.cos(angle),\n y: cy + radius * Math.sin(angle),\n };\n}\n\nexport function arcPath(cx, cy, outerRadius, innerRadius, startAngle, endAngle) {\n if (!isFiniteNumber(outerRadius) || outerRadius <= 0 || endAngle <= startAngle) return '';\n\n const safeEnd = endAngle - startAngle >= TAU ? startAngle + TAU - ARC_EPSILON : endAngle;\n const largeArc = safeEnd - startAngle > Math.PI ? 1 : 0;\n const outerStart = polarPoint(cx, cy, outerRadius, startAngle);\n const outerEnd = polarPoint(cx, cy, outerRadius, safeEnd);\n const inner = Math.max(0, Number(innerRadius) || 0);\n\n if (inner <= 0) {\n return [\n `M${cx},${cy}`,\n `L${outerStart.x},${outerStart.y}`,\n `A${outerRadius},${outerRadius} 0 ${largeArc} 1 ${outerEnd.x},${outerEnd.y}`,\n 'Z',\n ].join(' ');\n }\n\n const innerEnd = polarPoint(cx, cy, inner, safeEnd);\n const innerStart = polarPoint(cx, cy, inner, startAngle);\n return [\n `M${outerStart.x},${outerStart.y}`,\n `A${outerRadius},${outerRadius} 0 ${largeArc} 1 ${outerEnd.x},${outerEnd.y}`,\n `L${innerEnd.x},${innerEnd.y}`,\n `A${inner},${inner} 0 ${largeArc} 0 ${innerStart.x},${innerStart.y}`,\n 'Z',\n ].join(' ');\n}\n\nfunction formatNumber(value) {\n if (!Number.isFinite(value)) return '';\n return Math.abs(value) >= 1000 ? value.toLocaleString() : String(Number(value.toFixed(3)));\n}\n\nfunction formatTick(value, formatter) {\n if (typeof formatter === 'function') return formatter(value);\n if (value instanceof Date) {\n return new Intl.DateTimeFormat(undefined, { month: 'short', day: 'numeric' }).format(value);\n }\n return formatNumber(Number(value));\n}\n\nfunction formatCategory(value) {\n return value == null ? '' : String(value);\n}\n\nfunction attachTooltip(instance, mark, options, context, fallback) {\n const tooltip = options.tooltip;\n if (tooltip === false) return;\n\n const getContent = () => {\n if (typeof tooltip === 'function') {\n // Backward-compatible: the raw datum is the first arg (as before); the\n // typed context (x/y/value/label/index/seriesIndex/seriesName) is second.\n const result = tooltip(context.datum, context);\n return result === false ? null : result;\n }\n if (typeof tooltip === 'string') return tooltip;\n return fallback;\n };\n\n const show = (event) => {\n const content = getContent();\n if (content == null || content === '') return;\n instance.showTooltip(content, event);\n };\n const hide = () => instance.hideTooltip();\n mark.addEventListener('pointerenter', show);\n mark.addEventListener('pointermove', show);\n mark.addEventListener('pointerleave', hide);\n mark.addEventListener('focus', show);\n mark.addEventListener('blur', hide);\n}\n\nfunction attachClick(mark, callback, datum, index) {\n if (typeof callback !== 'function') return;\n const fire = (event) => callback({ event, datum, index });\n mark.addEventListener('click', fire);\n mark.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n fire(event);\n }\n });\n}\n\nfunction makeInteractive(mark, hasClick, hasTooltip) {\n if (hasClick || hasTooltip) {\n mark.setAttribute('tabindex', '0');\n mark.setAttribute('focusable', 'true');\n }\n}\n\nfunction createSvgShell(instance) {\n const { target, options } = instance;\n const size = measureTarget(target, options);\n const theme = resolveTheme(target, options.theme);\n const margin = normalizeMargin(options.margin, options.polar ? POLAR_MARGIN : DEFAULT_MARGIN);\n const plot = getPlotBox(size.width, size.height, margin);\n\n target.innerHTML = '';\n target.classList.add('vd-chart-root', `vd-chart-${instance.kind}`);\n if (getComputedStyle(target).position === 'static') {\n target.style.position = 'relative';\n }\n\n const svg = svgEl('svg', {\n class: 'vd-chart-svg',\n width: size.width,\n height: size.height,\n viewBox: `0 0 ${size.width} ${size.height}`,\n role: 'img',\n });\n\n const titleId = nextId('vd-chart-title');\n const descId = nextId('vd-chart-desc');\n const labelledBy = [];\n\n if (options.title) {\n labelledBy.push(titleId);\n append(svg, setText(svgEl('title', { id: titleId }), options.title));\n }\n if (options.description) {\n labelledBy.push(descId);\n append(svg, setText(svgEl('desc', { id: descId }), options.description));\n }\n if (labelledBy.length) {\n svg.setAttribute('aria-labelledby', labelledBy.join(' '));\n } else {\n svg.setAttribute('aria-label', options.ariaLabel || `${instance.kind} chart`);\n }\n\n if (options.title) {\n append(\n svg,\n setText(\n svgEl('text', {\n x: margin.left,\n y: 18,\n fill: theme.textColor,\n 'font-size': 14,\n 'font-weight': 600,\n }),\n options.title,\n ),\n );\n }\n\n target.appendChild(svg);\n instance.theme = theme;\n instance.size = size;\n instance.plot = plot;\n instance.tooltipEl = null;\n return { svg, size, theme, plot, margin };\n}\n\nfunction renderEmpty(svg, size, theme, message = 'No data') {\n append(\n svg,\n setText(\n svgEl('text', {\n class: 'vd-chart-empty',\n x: size.width / 2,\n y: size.height / 2,\n fill: theme.mutedTextColor,\n 'text-anchor': 'middle',\n }),\n message,\n ),\n );\n}\n\nfunction drawAxisLine(svg, x1, y1, x2, y2, theme) {\n append(\n svg,\n svgEl('line', {\n x1,\n y1,\n x2,\n y2,\n stroke: theme.axisColor,\n 'stroke-width': 1,\n 'shape-rendering': 'crispEdges',\n }),\n );\n}\n\nfunction drawCartesianAxes(svg, config) {\n const { plot, xScale, yScale, xTicks, yTicks, theme, options, categoricalX } = config;\n const axisGroup = append(svg, svgEl('g', { class: 'vd-chart-axes' }));\n\n yTicks.forEach((tick) => {\n const y = yScale(tick);\n if (!isFiniteNumber(y)) return;\n append(\n axisGroup,\n svgEl('line', {\n x1: plot.left,\n y1: y,\n x2: plot.right,\n y2: y,\n stroke: theme.gridColor,\n 'stroke-width': 1,\n 'shape-rendering': 'crispEdges',\n }),\n );\n append(\n axisGroup,\n setText(\n svgEl('text', {\n x: plot.left - 10,\n y: y + 4,\n fill: theme.mutedTextColor,\n 'font-size': 11,\n 'text-anchor': 'end',\n }),\n formatTick(tick, options.yFormat),\n ),\n );\n });\n\n drawAxisLine(axisGroup, plot.left, plot.bottom, plot.right, plot.bottom, theme);\n drawAxisLine(axisGroup, plot.left, plot.top, plot.left, plot.bottom, theme);\n\n xTicks.forEach((tick) => {\n let x = xScale(tick);\n if (categoricalX && typeof xScale.bandwidth === 'function') {\n x += xScale.bandwidth() / 2;\n }\n if (!isFiniteNumber(x)) return;\n append(\n axisGroup,\n svgEl('line', {\n x1: x,\n y1: plot.bottom,\n x2: x,\n y2: plot.bottom + 5,\n stroke: theme.axisColor,\n 'stroke-width': 1,\n }),\n );\n append(\n axisGroup,\n setText(\n svgEl('text', {\n x,\n y: plot.bottom + 20,\n fill: theme.mutedTextColor,\n 'font-size': 11,\n 'text-anchor': 'middle',\n }),\n categoricalX ? formatCategory(tick) : formatTick(tick, options.xFormat),\n ),\n );\n });\n\n if (options.xAxis?.label) {\n append(\n axisGroup,\n setText(\n svgEl('text', {\n x: (plot.left + plot.right) / 2,\n y: plot.bottom + 40,\n fill: theme.mutedTextColor,\n 'font-size': 12,\n 'text-anchor': 'middle',\n }),\n options.xAxis.label,\n ),\n );\n }\n\n if (options.yAxis?.label) {\n append(\n axisGroup,\n setText(\n svgEl('text', {\n x: -((plot.top + plot.bottom) / 2),\n y: 15,\n fill: theme.mutedTextColor,\n 'font-size': 12,\n 'text-anchor': 'middle',\n transform: 'rotate(-90)',\n }),\n options.yAxis.label,\n ),\n );\n }\n}\n\nfunction inferXScale(rows, plot, options) {\n const values = rows.map((row) => row.x);\n const explicitType = options.xScale;\n const allNumeric = values.every((value) => toNumber(value) !== null);\n const allDates = values.every(isDateLike);\n\n if (explicitType === 'time' || (!explicitType && allDates)) {\n const times = values.map(toTime).filter(isFiniteNumber);\n return {\n scale: scaleTime({ domain: niceDomain(times), range: [plot.left, plot.right] }),\n values: times,\n ticks: scaleLinear({ domain: niceDomain(times), range: [plot.left, plot.right] })\n .ticks(5)\n .map((value) => new Date(value)),\n type: 'time',\n mapValue: toTime,\n };\n }\n\n if (explicitType === 'linear' || (!explicitType && allNumeric)) {\n const nums = values.map(toNumber).filter(isFiniteNumber);\n const domain = niceDomain(nums, { min: options.xMin, max: options.xMax });\n const scale = scaleLinear({ domain, range: [plot.left, plot.right] });\n return {\n scale,\n values: nums,\n ticks: scale.ticks(5),\n type: 'linear',\n mapValue: toNumber,\n };\n }\n\n const domain = unique(values).map(String);\n return {\n scale: scalePoint({ domain, range: [plot.left, plot.right], padding: 0.5 }),\n values: domain,\n ticks: domain,\n type: 'point',\n mapValue: (value) => String(value),\n };\n}\n\nfunction getColorScale(rows, colorOption, theme) {\n if (colorOption == null) return null;\n // A function returns a CSS color per datum directly (e.g. (row) => '#40c057').\n if (typeof colorOption === 'function') {\n return { direct: colorOption };\n }\n // A string names a category field \u2192 ordinal palette (legacy behavior).\n const colorAccessor = createAccessor(colorOption);\n const domain = unique(rows.map((row) => colorAccessor(row.raw))).map(String);\n return {\n accessor: colorAccessor,\n scale: scaleOrdinal({ domain, range: theme.colors }),\n };\n}\n\nfunction colorForRow(color, row, theme) {\n if (color) {\n if (typeof color.direct === 'function') return color.direct(row.raw);\n if (color.scale) return color.scale(color.accessor(row.raw));\n }\n return theme.colors[row.index % theme.colors.length];\n}\n\n/**\n * Normalize `options.series` (or the implicit single series) into a list of\n * `{ name, color, seriesIndex, rows }`. Series may share `options.data` with\n * their own `y` accessor, or carry their own `data`.\n */\nfunction buildSeriesList(options) {\n const xAccessor = createAccessor(options.x, 'x');\n const sharedData = toArray(options.data);\n const buildRows = (data, yAccessor) =>\n data\n .map((datum, index) => ({\n raw: datum,\n index,\n x: xAccessor(datum),\n y: toNumber(yAccessor(datum)),\n }))\n .filter((row) => row.x != null && isFiniteNumber(row.y));\n\n if (Array.isArray(options.series) && options.series.length) {\n return options.series.map((series, seriesIndex) => {\n const data = Array.isArray(series.data) && series.data.length ? series.data : sharedData;\n const yAccessor = createAccessor(series.y ?? options.y, 'y');\n return {\n name: series.name ?? `Series ${seriesIndex + 1}`,\n color: series.color,\n seriesIndex,\n rows: buildRows(data, yAccessor),\n };\n });\n }\n\n return [\n {\n name: options.name ?? null,\n color: options.stroke,\n seriesIndex: 0,\n rows: buildRows(sharedData, createAccessor(options.y, 'y')),\n },\n ];\n}\n\nfunction seriesColor(series, theme) {\n return series.color || theme.colors[series.seriesIndex % theme.colors.length];\n}\n\n/**\n * Horizontal legend along the top-right of the plot. Items: `{ label, color }`.\n * Widths are estimated (no DOM text measurement available), which is fine for\n * the short series/category labels legends carry.\n */\nfunction renderTopLegend(svg, items, theme, plot) {\n if (!items.length) return;\n const shown = items.slice(0, 8);\n const widths = shown.map((item) => 14 + String(item.label).length * 6.5 + 14);\n const total = widths.reduce((sum, w) => sum + w, 0);\n let x = Math.max(plot.left, plot.right - total);\n const y = 14;\n const legend = append(svg, svgEl('g', { class: 'vd-chart-legend' }));\n shown.forEach((item, index) => {\n append(\n legend,\n svgEl('rect', {\n x,\n y: y - 8,\n width: 10,\n height: 10,\n rx: 2,\n fill: item.color,\n }),\n );\n append(\n legend,\n setText(\n svgEl('text', {\n x: x + 14,\n y,\n fill: theme.mutedTextColor,\n 'font-size': 11,\n }),\n formatCategory(item.label),\n ),\n );\n x += widths[index];\n });\n}\n\nfunction dataLabelConfig(options) {\n const dl = options.dataLabels;\n if (!dl) return null;\n return typeof dl === 'object' ? dl : {};\n}\n\nfunction drawDataLabel(svg, x, y, value, cfg, theme, anchor = 'middle') {\n if (!isFiniteNumber(x) || !isFiniteNumber(y)) return;\n append(\n svg,\n setText(\n svgEl('text', {\n class: 'vd-chart-data-label',\n x,\n y,\n fill: cfg.color || theme.textColor,\n 'font-size': 10,\n 'text-anchor': anchor,\n }),\n typeof cfg.format === 'function' ? cfg.format(value) : formatNumber(value),\n ),\n );\n}\n\n/**\n * Reference lines. `annotations: Array<{ y?, x?, label?, color?, dash? }>` \u2014\n * `y` draws a horizontal line, `x` (numeric/category) a vertical one.\n */\nfunction drawAnnotations(svg, options, plot, xScale, yScale, theme) {\n const annotations = toArray(options.annotations);\n if (!annotations.length) return;\n const group = append(svg, svgEl('g', { class: 'vd-chart-annotations' }));\n annotations.forEach((ann) => {\n const color = ann.color || theme.mutedTextColor;\n const dash = ann.dash === false ? null : '4 3';\n if (isFiniteNumber(ann.y) && yScale) {\n const y = yScale(ann.y);\n if (!isFiniteNumber(y)) return;\n append(\n group,\n svgEl('line', {\n class: 'vd-chart-annotation-line',\n x1: plot.left,\n y1: y,\n x2: plot.right,\n y2: y,\n stroke: color,\n 'stroke-width': 1,\n 'stroke-dasharray': dash,\n }),\n );\n if (ann.label) {\n append(\n group,\n setText(\n svgEl('text', {\n x: plot.right - 4,\n y: y - 4,\n fill: color,\n 'font-size': 10,\n 'text-anchor': 'end',\n }),\n ann.label,\n ),\n );\n }\n }\n if (ann.x != null && xScale) {\n let x = xScale(ann.x);\n if (typeof xScale.bandwidth === 'function' && isFiniteNumber(x)) {\n x += xScale.bandwidth() / 2;\n }\n if (!isFiniteNumber(x)) return;\n append(\n group,\n svgEl('line', {\n class: 'vd-chart-annotation-line',\n x1: x,\n y1: plot.top,\n x2: x,\n y2: plot.bottom,\n stroke: color,\n 'stroke-width': 1,\n 'stroke-dasharray': dash,\n }),\n );\n if (ann.label) {\n append(\n group,\n setText(\n svgEl('text', {\n x: x + 4,\n y: plot.top + 10,\n fill: color,\n 'font-size': 10,\n }),\n ann.label,\n ),\n );\n }\n }\n });\n}\n\nfunction renderBarChart(instance) {\n if (instance.options.series?.length) return renderMultiBarChart(instance);\n\n const shell = createSvgShell(instance);\n const { svg, size, theme, plot } = shell;\n const options = instance.options;\n const data = toArray(options.data);\n const xAccessor = createAccessor(options.x, 'x');\n const yAccessor = createAccessor(options.y, 'y');\n const rows = data\n .map((datum, index) => ({\n raw: datum,\n index,\n x: xAccessor(datum),\n y: toNumber(yAccessor(datum)),\n }))\n .filter((row) => row.x != null && isFiniteNumber(row.y));\n\n if (!rows.length) {\n renderEmpty(svg, size, theme);\n return;\n }\n\n const categories = unique(rows.map((row) => row.x)).map(String);\n const xScale = scaleBand({\n domain: categories,\n range: [plot.left, plot.right],\n padding: options.barPadding ?? 0.18,\n });\n const yDomain = niceDomain(\n rows.map((row) => row.y),\n {\n includeZero: true,\n min: options.yMin,\n max: options.yMax,\n tickCount: options.yTickCount,\n },\n );\n const yScale = scaleLinear({ domain: yDomain, range: [plot.bottom, plot.top] });\n const yTicks = yScale.ticks(options.yTickCount ?? 5);\n const color = getColorScale(rows, options.color, theme);\n\n drawCartesianAxes(svg, {\n plot,\n xScale,\n yScale,\n xTicks: categories,\n yTicks,\n theme,\n options,\n categoricalX: true,\n });\n\n drawAnnotations(svg, options, plot, xScale, yScale, theme);\n const labels = dataLabelConfig(options);\n const markGroup = append(svg, svgEl('g', { class: 'vd-chart-marks vd-chart-bars' }));\n const baseline = yScale(0);\n rows.forEach((row) => {\n const x = xScale(row.x);\n const y = yScale(row.y);\n if (!isFiniteNumber(x) || !isFiniteNumber(y) || !isFiniteNumber(baseline)) return;\n const rectY = Math.min(y, baseline);\n const rectHeight = Math.max(1, Math.abs(baseline - y));\n const fill = colorForRow(color, row, theme);\n const rect = svgEl('rect', {\n class: 'vd-chart-bar',\n x,\n y: rectY,\n width: xScale.bandwidth(),\n height: rectHeight,\n rx: 3,\n fill,\n role: 'graphics-symbol',\n 'aria-label': `${formatCategory(row.x)}: ${formatNumber(row.y)}`,\n });\n makeInteractive(rect, typeof options.onBarClick === 'function', options.tooltip !== false);\n attachTooltip(\n instance,\n rect,\n options,\n {\n datum: row.raw,\n x: row.x,\n y: row.y,\n value: row.y,\n label: row.x,\n index: row.index,\n },\n `${formatCategory(row.x)}: ${formatNumber(row.y)}`,\n );\n attachClick(rect, options.onBarClick, row.raw, row.index);\n if (labels) drawDataLabel(svg, x + xScale.bandwidth() / 2, rectY - 4, row.y, labels, theme);\n append(markGroup, rect);\n });\n\n if (options.legend && color && color.scale) {\n renderTopLegend(\n svg,\n color.scale.domain().map((cat) => ({ label: cat, color: color.scale(cat) })),\n theme,\n plot,\n );\n }\n}\n\nfunction renderMultiBarChart(instance) {\n const shell = createSvgShell(instance);\n const { svg, size, theme, plot } = shell;\n const options = instance.options;\n const seriesList = buildSeriesList(options);\n const allRows = seriesList.flatMap((series) => series.rows);\n\n if (!allRows.length) {\n renderEmpty(svg, size, theme);\n return;\n }\n\n const categories = unique(allRows.map((row) => String(row.x)));\n const xScale = scaleBand({\n domain: categories,\n range: [plot.left, plot.right],\n padding: options.barPadding ?? 0.18,\n });\n const innerScale = scaleBand({\n domain: seriesList.map((series) => series.name),\n range: [0, xScale.bandwidth()],\n padding: 0.08,\n });\n const yDomain = niceDomain(\n allRows.map((row) => row.y),\n {\n includeZero: true,\n min: options.yMin,\n max: options.yMax,\n tickCount: options.yTickCount,\n },\n );\n const yScale = scaleLinear({ domain: yDomain, range: [plot.bottom, plot.top] });\n const yTicks = yScale.ticks(options.yTickCount ?? 5);\n\n drawCartesianAxes(svg, {\n plot,\n xScale,\n yScale,\n xTicks: categories,\n yTicks,\n theme,\n options,\n categoricalX: true,\n });\n\n drawAnnotations(svg, options, plot, xScale, yScale, theme);\n const labels = dataLabelConfig(options);\n const markGroup = append(svg, svgEl('g', { class: 'vd-chart-marks vd-chart-bars' }));\n const baseline = yScale(0);\n seriesList.forEach((series) => {\n const fill = seriesColor(series, theme);\n series.rows.forEach((row) => {\n const groupX = xScale(String(row.x));\n const offset = innerScale(series.name);\n const y = yScale(row.y);\n if (![groupX, offset, y, baseline].every(isFiniteNumber)) return;\n const rectY = Math.min(y, baseline);\n const rectHeight = Math.max(1, Math.abs(baseline - y));\n const rect = svgEl('rect', {\n class: 'vd-chart-bar',\n x: groupX + offset,\n y: rectY,\n width: innerScale.bandwidth(),\n height: rectHeight,\n rx: 3,\n fill,\n role: 'graphics-symbol',\n 'aria-label': `${series.name} \u2014 ${formatCategory(row.x)}: ${formatNumber(row.y)}`,\n });\n makeInteractive(rect, typeof options.onBarClick === 'function', options.tooltip !== false);\n attachTooltip(\n instance,\n rect,\n options,\n {\n datum: row.raw,\n x: row.x,\n y: row.y,\n value: row.y,\n label: row.x,\n index: row.index,\n seriesIndex: series.seriesIndex,\n seriesName: series.name,\n },\n `${series.name} \u2014 ${formatCategory(row.x)}: ${formatNumber(row.y)}`,\n );\n attachClick(rect, options.onBarClick, row.raw, row.index);\n if (labels)\n drawDataLabel(\n svg,\n groupX + offset + innerScale.bandwidth() / 2,\n rectY - 4,\n row.y,\n labels,\n theme,\n );\n append(markGroup, rect);\n });\n });\n\n if (options.legend !== false) {\n renderTopLegend(\n svg,\n seriesList.map((series) => ({ label: series.name, color: seriesColor(series, theme) })),\n theme,\n plot,\n );\n }\n}\n\nfunction renderLineLikeChart(instance, mode) {\n if (instance.options.series?.length) return renderMultiLineChart(instance, mode);\n\n const shell = createSvgShell(instance);\n const { svg, size, theme, plot } = shell;\n const options = instance.options;\n const data = toArray(options.data);\n const xAccessor = createAccessor(options.x, 'x');\n const yAccessor = createAccessor(options.y, 'y');\n const rows = data\n .map((datum, index) => ({\n raw: datum,\n index,\n x: xAccessor(datum),\n y: toNumber(yAccessor(datum)),\n }))\n .filter((row) => row.x != null && isFiniteNumber(row.y));\n\n if (!rows.length) {\n renderEmpty(svg, size, theme);\n return;\n }\n\n const xInfo = inferXScale(rows, plot, options);\n const yDomain = niceDomain(\n rows.map((row) => row.y),\n {\n includeZero: mode === 'area' || options.yIncludeZero === true,\n min: options.yMin,\n max: options.yMax,\n tickCount: options.yTickCount,\n },\n );\n const yScale = scaleLinear({ domain: yDomain, range: [plot.bottom, plot.top] });\n const yTicks = yScale.ticks(options.yTickCount ?? 5);\n const color = options.stroke || theme.colors[0];\n const points = rows\n .map((row) => ({\n raw: row.raw,\n index: row.index,\n xValue: row.x,\n yValue: row.y,\n x: xInfo.scale(xInfo.mapValue(row.x)),\n y: yScale(row.y),\n }))\n .filter((point) => isFiniteNumber(point.x) && isFiniteNumber(point.y));\n\n drawCartesianAxes(svg, {\n plot,\n xScale: xInfo.scale,\n yScale,\n xTicks: xInfo.ticks,\n yTicks,\n theme,\n options,\n categoricalX: xInfo.type === 'point',\n });\n\n drawAnnotations(svg, options, plot, xInfo.scale, yScale, theme);\n const labels = dataLabelConfig(options);\n const markGroup = append(svg, svgEl('g', { class: `vd-chart-marks vd-chart-${mode}` }));\n\n if (mode === 'area') {\n const baseline = yScale(Math.max(0, yDomain[0]));\n append(\n markGroup,\n svgEl('path', {\n class: 'vd-chart-area-path',\n d: areaPath(points, baseline),\n fill: options.fill || color,\n opacity: options.fillOpacity ?? 0.18,\n stroke: 'none',\n }),\n );\n }\n\n append(\n markGroup,\n svgEl('path', {\n class: 'vd-chart-line-path',\n d: linePath(points),\n fill: 'none',\n stroke: color,\n 'stroke-width': options.strokeWidth || 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n );\n\n if (options.points !== false) {\n points.forEach((point) => {\n const circle = svgEl('circle', {\n class: 'vd-chart-point',\n cx: point.x,\n cy: point.y,\n r: options.pointRadius || 3.5,\n fill: options.pointFill || theme.backgroundColor,\n stroke: color,\n 'stroke-width': 2,\n role: 'graphics-symbol',\n 'aria-label': `${formatCategory(point.xValue)}: ${formatNumber(point.yValue)}`,\n });\n makeInteractive(\n circle,\n typeof options.onPointClick === 'function',\n options.tooltip !== false,\n );\n attachTooltip(\n instance,\n circle,\n options,\n {\n datum: point.raw,\n x: point.xValue,\n y: point.yValue,\n value: point.yValue,\n index: point.index,\n },\n `${formatCategory(point.xValue)}: ${formatNumber(point.yValue)}`,\n );\n attachClick(circle, options.onPointClick, point.raw, point.index);\n append(markGroup, circle);\n });\n }\n\n if (labels) {\n points.forEach((point) =>\n drawDataLabel(svg, point.x, point.y - 8, point.yValue, labels, theme),\n );\n }\n}\n\nfunction renderMultiLineChart(instance, mode) {\n const shell = createSvgShell(instance);\n const { svg, size, theme, plot } = shell;\n const options = instance.options;\n const seriesList = buildSeriesList(options);\n const allRows = seriesList.flatMap((series) => series.rows);\n\n if (!allRows.length) {\n renderEmpty(svg, size, theme);\n return;\n }\n\n const xInfo = inferXScale(allRows, plot, options);\n const yDomain = niceDomain(\n allRows.map((row) => row.y),\n {\n includeZero: mode === 'area' || options.yIncludeZero === true,\n min: options.yMin,\n max: options.yMax,\n tickCount: options.yTickCount,\n },\n );\n const yScale = scaleLinear({ domain: yDomain, range: [plot.bottom, plot.top] });\n const yTicks = yScale.ticks(options.yTickCount ?? 5);\n\n drawCartesianAxes(svg, {\n plot,\n xScale: xInfo.scale,\n yScale,\n xTicks: xInfo.ticks,\n yTicks,\n theme,\n options,\n categoricalX: xInfo.type === 'point',\n });\n\n drawAnnotations(svg, options, plot, xInfo.scale, yScale, theme);\n const labels = dataLabelConfig(options);\n const markGroup = append(svg, svgEl('g', { class: `vd-chart-marks vd-chart-${mode}` }));\n const baseline = yScale(Math.max(0, yDomain[0]));\n\n seriesList.forEach((series) => {\n const stroke = seriesColor(series, theme);\n const points = series.rows\n .map((row) => ({\n raw: row.raw,\n index: row.index,\n xValue: row.x,\n yValue: row.y,\n x: xInfo.scale(xInfo.mapValue(row.x)),\n y: yScale(row.y),\n }))\n .filter((point) => isFiniteNumber(point.x) && isFiniteNumber(point.y));\n\n if (mode === 'area') {\n append(\n markGroup,\n svgEl('path', {\n class: 'vd-chart-area-path',\n d: areaPath(points, baseline),\n fill: series.color || stroke,\n opacity: options.fillOpacity ?? 0.18,\n stroke: 'none',\n }),\n );\n }\n\n append(\n markGroup,\n svgEl('path', {\n class: 'vd-chart-line-path',\n d: linePath(points),\n fill: 'none',\n stroke,\n 'stroke-width': options.strokeWidth || 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n );\n\n if (options.points !== false) {\n points.forEach((point) => {\n const circle = svgEl('circle', {\n class: 'vd-chart-point',\n cx: point.x,\n cy: point.y,\n r: options.pointRadius || 3.5,\n fill: options.pointFill || theme.backgroundColor,\n stroke,\n 'stroke-width': 2,\n role: 'graphics-symbol',\n 'aria-label': `${series.name} ${formatCategory(point.xValue)}: ${formatNumber(point.yValue)}`,\n });\n makeInteractive(\n circle,\n typeof options.onPointClick === 'function',\n options.tooltip !== false,\n );\n attachTooltip(\n instance,\n circle,\n options,\n {\n datum: point.raw,\n x: point.xValue,\n y: point.yValue,\n value: point.yValue,\n index: point.index,\n seriesIndex: series.seriesIndex,\n seriesName: series.name,\n },\n `${series.name} \u2014 ${formatCategory(point.xValue)}: ${formatNumber(point.yValue)}`,\n );\n attachClick(circle, options.onPointClick, point.raw, point.index);\n append(markGroup, circle);\n });\n }\n\n if (labels) {\n points.forEach((point) =>\n drawDataLabel(svg, point.x, point.y - 8, point.yValue, labels, theme),\n );\n }\n });\n\n if (options.legend !== false) {\n renderTopLegend(\n svg,\n seriesList.map((series) => ({ label: series.name, color: seriesColor(series, theme) })),\n theme,\n plot,\n );\n }\n}\n\nfunction renderScatterChart(instance) {\n const shell = createSvgShell(instance);\n const { svg, size, theme, plot } = shell;\n const options = instance.options;\n const data = toArray(options.data);\n const xAccessor = createAccessor(options.x, 'x');\n const yAccessor = createAccessor(options.y, 'y');\n const rows = data\n .map((datum, index) => ({\n raw: datum,\n index,\n x: xAccessor(datum),\n y: toNumber(yAccessor(datum)),\n }))\n .filter((row) => row.x != null && isFiniteNumber(row.y));\n\n if (!rows.length) {\n renderEmpty(svg, size, theme);\n return;\n }\n\n const xInfo = inferXScale(rows, plot, options);\n const yDomain = niceDomain(\n rows.map((row) => row.y),\n {\n includeZero: options.yIncludeZero === true,\n min: options.yMin,\n max: options.yMax,\n tickCount: options.yTickCount,\n },\n );\n const yScale = scaleLinear({ domain: yDomain, range: [plot.bottom, plot.top] });\n const yTicks = yScale.ticks(options.yTickCount ?? 5);\n const color = getColorScale(rows, options.color, theme);\n\n drawCartesianAxes(svg, {\n plot,\n xScale: xInfo.scale,\n yScale,\n xTicks: xInfo.ticks,\n yTicks,\n theme,\n options,\n categoricalX: xInfo.type === 'point',\n });\n\n drawAnnotations(svg, options, plot, xInfo.scale, yScale, theme);\n const labels = dataLabelConfig(options);\n const markGroup = append(svg, svgEl('g', { class: 'vd-chart-marks vd-chart-scatter' }));\n rows.forEach((row) => {\n const cx = xInfo.scale(xInfo.mapValue(row.x));\n const cy = yScale(row.y);\n if (!isFiniteNumber(cx) || !isFiniteNumber(cy)) return;\n const fill = colorForRow(color, row, theme);\n const circle = svgEl('circle', {\n class: 'vd-chart-scatter-point',\n cx,\n cy,\n r: options.pointRadius || 4,\n fill,\n opacity: options.pointOpacity ?? 0.88,\n role: 'graphics-symbol',\n 'aria-label': `${formatCategory(row.x)}: ${formatNumber(row.y)}`,\n });\n makeInteractive(circle, typeof options.onPointClick === 'function', options.tooltip !== false);\n attachTooltip(\n instance,\n circle,\n options,\n {\n datum: row.raw,\n x: row.x,\n y: row.y,\n value: row.y,\n index: row.index,\n },\n `${formatCategory(row.x)}: ${formatNumber(row.y)}`,\n );\n attachClick(circle, options.onPointClick, row.raw, row.index);\n if (labels) drawDataLabel(svg, cx, cy - 8, row.y, labels, theme);\n append(markGroup, circle);\n });\n\n if (options.legend && color && color.scale) {\n renderTopLegend(\n svg,\n color.scale.domain().map((cat) => ({ label: cat, color: color.scale(cat) })),\n theme,\n plot,\n );\n }\n}\n\nfunction renderLegend(svg, rows, colorScale, theme, x, y) {\n const legend = append(svg, svgEl('g', { class: 'vd-chart-legend' }));\n rows.slice(0, 8).forEach((row, index) => {\n const itemY = y + index * 20;\n append(\n legend,\n svgEl('rect', {\n x,\n y: itemY - 9,\n width: 10,\n height: 10,\n rx: 2,\n fill: colorScale(row.label),\n }),\n );\n append(\n legend,\n setText(\n svgEl('text', {\n x: x + 16,\n y: itemY,\n fill: theme.mutedTextColor,\n 'font-size': 11,\n }),\n formatCategory(row.label),\n ),\n );\n });\n}\n\nfunction renderDonutChart(instance) {\n instance.options.polar = true;\n const shell = createSvgShell(instance);\n const { svg, size, theme, plot } = shell;\n const options = instance.options;\n const data = toArray(options.data);\n const labelAccessor = createAccessor(options.label, 'label');\n const valueAccessor = createAccessor(options.value, 'value');\n const rows = data\n .map((datum, index) => ({\n raw: datum,\n index,\n label: labelAccessor(datum),\n value: toNumber(valueAccessor(datum)),\n }))\n .filter((row) => row.label != null && isFiniteNumber(row.value) && row.value > 0);\n const total = rows.reduce((sum, row) => sum + row.value, 0);\n\n if (!rows.length || total <= 0) {\n renderEmpty(svg, size, theme);\n return;\n }\n\n const legendSpace = options.legend === false || size.width < 520 ? 0 : 128;\n const cx = (plot.left + plot.right - legendSpace) / 2;\n const cy = (plot.top + plot.bottom) / 2 + 5;\n const outerRadius = Math.max(\n 28,\n Math.min(plot.right - plot.left - legendSpace, plot.bottom - plot.top) / 2,\n );\n const ratio = Math.max(0, Math.min(0.9, Number(options.innerRadiusRatio ?? 0.62)));\n const innerRadius = outerRadius * ratio;\n const colorScale = scaleOrdinal({ domain: rows.map((row) => row.label), range: theme.colors });\n const labels = dataLabelConfig(options);\n const markGroup = append(svg, svgEl('g', { class: 'vd-chart-marks vd-chart-slices' }));\n let cursor = -Math.PI / 2;\n\n rows.forEach((row) => {\n const angle = (row.value / total) * TAU;\n const start = cursor;\n const end = cursor + angle;\n cursor = end;\n const path = svgEl('path', {\n class: 'vd-chart-slice',\n d: arcPath(cx, cy, outerRadius, innerRadius, start, end),\n fill: colorScale(row.label),\n stroke: theme.backgroundColor,\n 'stroke-width': 2,\n role: 'graphics-symbol',\n 'aria-label': `${formatCategory(row.label)}: ${formatNumber(row.value)}`,\n });\n makeInteractive(path, typeof options.onSliceClick === 'function', options.tooltip !== false);\n attachTooltip(\n instance,\n path,\n options,\n {\n datum: row.raw,\n label: row.label,\n value: row.value,\n y: row.value,\n index: row.index,\n },\n `${formatCategory(row.label)}: ${formatNumber(row.value)}`,\n );\n attachClick(path, options.onSliceClick, row.raw, row.index);\n if (labels) {\n const mid = (start + end) / 2;\n const point = polarPoint(cx, cy, (innerRadius + outerRadius) / 2, mid);\n drawDataLabel(svg, point.x, point.y, row.value, labels, theme);\n }\n append(markGroup, path);\n });\n\n if (innerRadius > 16 && options.centerLabel !== false) {\n append(\n svg,\n setText(\n svgEl('text', {\n x: cx,\n y: cy - 2,\n fill: theme.textColor,\n 'font-size': 18,\n 'font-weight': 700,\n 'text-anchor': 'middle',\n }),\n options.centerLabel || formatNumber(total),\n ),\n );\n append(\n svg,\n setText(\n svgEl('text', {\n x: cx,\n y: cy + 16,\n fill: theme.mutedTextColor,\n 'font-size': 11,\n 'text-anchor': 'middle',\n }),\n options.centerSubLabel || 'total',\n ),\n );\n }\n\n if (legendSpace) {\n renderLegend(svg, rows, colorScale, theme, plot.right - legendSpace + 8, plot.top + 28);\n }\n}\n\nclass ChartInstance {\n constructor(kind, options, renderer) {\n this.kind = kind;\n this.options = { ...options };\n this.target = resolveTarget(options.target);\n this.renderer = renderer;\n this.resizeObserver = null;\n this.destroyed = false;\n this.theme = null;\n this.size = null;\n this.plot = null;\n this.tooltipEl = null;\n this.render();\n this.setupResizeObserver();\n }\n\n render() {\n if (this.destroyed) return this;\n this.renderer(this);\n return this;\n }\n\n update(nextOptions = {}) {\n if (this.destroyed) return this;\n this.options = { ...this.options, ...nextOptions };\n return this.render();\n }\n\n resize() {\n return this.render();\n }\n\n setupResizeObserver() {\n if (this.options.responsive === false || !hasWindow() || typeof ResizeObserver === 'undefined')\n return;\n let lastWidth = this.target.clientWidth;\n let lastHeight = this.target.clientHeight;\n this.resizeObserver = new ResizeObserver(() => {\n const width = this.target.clientWidth;\n const height = this.target.clientHeight;\n if (width === lastWidth && height === lastHeight) return;\n lastWidth = width;\n lastHeight = height;\n this.resize();\n });\n this.resizeObserver.observe(this.target);\n }\n\n ensureTooltip() {\n if (this.tooltipEl && this.tooltipEl.isConnected) return this.tooltipEl;\n const tooltip = document.createElement('div');\n tooltip.className = 'vd-chart-tooltip';\n tooltip.setAttribute('role', 'status');\n tooltip.setAttribute('aria-live', 'polite');\n this.target.appendChild(tooltip);\n this.tooltipEl = tooltip;\n return tooltip;\n }\n\n showTooltip(content, event) {\n const tooltip = this.ensureTooltip();\n tooltip.textContent = String(content);\n const rect = this.target.getBoundingClientRect();\n let x = rect.width / 2;\n let y = rect.height / 2;\n if (event && isFiniteNumber(event.clientX) && isFiniteNumber(event.clientY)) {\n x = event.clientX - rect.left;\n y = event.clientY - rect.top;\n } else if (event && event.target && typeof event.target.getBoundingClientRect === 'function') {\n const markRect = event.target.getBoundingClientRect();\n x = markRect.left + markRect.width / 2 - rect.left;\n y = markRect.top - rect.top;\n }\n tooltip.style.left = `${Math.max(8, Math.min(rect.width - 8, x))}px`;\n tooltip.style.top = `${Math.max(18, Math.min(rect.height - 8, y))}px`;\n tooltip.classList.add('is-visible');\n }\n\n hideTooltip() {\n if (this.tooltipEl) {\n this.tooltipEl.classList.remove('is-visible');\n }\n }\n\n destroy() {\n if (this.destroyed) return;\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n this.target.innerHTML = '';\n this.target.classList.remove('vd-chart-root', `vd-chart-${this.kind}`);\n this.destroyed = true;\n }\n}\n\nfunction createChartFactory(kind, renderer, defaults = {}) {\n return function chartFactory(options = {}) {\n return new ChartInstance(kind, { ...defaults, ...options }, renderer);\n };\n}\n\nexport const BarChart = createChartFactory('bar', renderBarChart);\nexport const LineChart = createChartFactory('line', (instance) =>\n renderLineLikeChart(instance, 'line'),\n);\nexport const AreaChart = createChartFactory('area', (instance) =>\n renderLineLikeChart(instance, 'area'),\n);\nexport const ScatterChart = createChartFactory('scatter', renderScatterChart);\nexport const DonutChart = createChartFactory('donut', renderDonutChart, { innerRadiusRatio: 0.62 });\nexport const PieChart = createChartFactory('pie', renderDonutChart, { innerRadiusRatio: 0 });\n"],
5
+ "mappings": "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",
6
+ "names": ["domain"]
7
+ }
@@ -0,0 +1,51 @@
1
+ :root {
2
+ --vd-chart-1: var(--vd-color-primary, #5c7cfa);
3
+ --vd-chart-2: var(--vd-color-info, #228be6);
4
+ --vd-chart-3: var(--vd-color-success, #40c057);
5
+ --vd-chart-4: var(--vd-color-warning, #fab005);
6
+ --vd-chart-5: var(--vd-color-error, #fa5252);
7
+ --vd-chart-6: #12b886;
8
+ --vd-chart-7: #be4bdb;
9
+ --vd-chart-8: #fd7e14;
10
+ }
11
+
12
+ .vd-chart-root {
13
+ position: relative;
14
+ min-height: 220px;
15
+ color: var(--vd-text-primary, #1a1d20);
16
+ }
17
+
18
+ .vd-chart-root svg {
19
+ display: block;
20
+ max-width: 100%;
21
+ overflow: visible;
22
+ font-family: inherit;
23
+ }
24
+
25
+ .vd-chart-tooltip {
26
+ position: absolute;
27
+ z-index: 20;
28
+ max-width: min(260px, calc(100% - 1rem));
29
+ padding: 0.45rem 0.6rem;
30
+ border: 1px solid color-mix(in srgb, var(--vd-border-color, #dee2e6) 72%, transparent);
31
+ border-radius: 0.375rem;
32
+ background: color-mix(in srgb, var(--vd-bg-primary, #ffffff) 96%, transparent);
33
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.14);
34
+ color: var(--vd-text-primary, #1a1d20);
35
+ font-size: 0.8125rem;
36
+ line-height: 1.35;
37
+ pointer-events: none;
38
+ transform: translate(-50%, calc(-100% - 0.75rem));
39
+ opacity: 0;
40
+ transition: opacity 120ms ease;
41
+ }
42
+
43
+ .vd-chart-tooltip.is-visible {
44
+ opacity: 1;
45
+ }
46
+
47
+ .vd-chart-empty {
48
+ color: var(--vd-text-muted, #868e96);
49
+ font-size: 0.875rem;
50
+ }
51
+
@@ -0,0 +1,86 @@
1
+ import type { DefineComponent } from 'vue';
2
+ import type {
3
+ Annotation,
4
+ ColorOption,
5
+ DataLabelsOption,
6
+ LegendOptions,
7
+ Series,
8
+ TooltipOption,
9
+ } from './core';
10
+
11
+ export type {
12
+ TooltipContext,
13
+ TooltipOption,
14
+ Series,
15
+ ColorOption,
16
+ LegendOptions,
17
+ DataLabelsOption,
18
+ Annotation,
19
+ } from './core';
20
+
21
+ export type VdChartType = 'bar' | 'line' | 'area' | 'scatter' | 'donut' | 'pie';
22
+
23
+ export type VdChartAccessor = string | ((row: Record<string, unknown>) => unknown);
24
+
25
+ export interface VdChartProps {
26
+ /** Chart kind. Default `'bar'`. */
27
+ type?: VdChartType;
28
+ /** Row data; plain objects. */
29
+ data?: Array<Record<string, unknown>>;
30
+ /** Cartesian x accessor (key or function). */
31
+ x?: VdChartAccessor;
32
+ /** Cartesian y accessor (key or function). */
33
+ y?: VdChartAccessor;
34
+ /** Pie/donut label accessor. */
35
+ label?: VdChartAccessor;
36
+ /** Pie/donut value accessor. */
37
+ value?: VdChartAccessor;
38
+ /**
39
+ * A CSS color, a category-field name (distinct values → palette), or a
40
+ * per-datum function `(row) => color`.
41
+ */
42
+ color?: ColorOption;
43
+ /** Rendered into SVG accessibility metadata. */
44
+ title?: string;
45
+ description?: string;
46
+ width?: number;
47
+ /** Container min-height in px. Default `300`. */
48
+ height?: number;
49
+ /** Donut/pie inner radius ratio. */
50
+ innerRadiusRatio?: number;
51
+ theme?: Record<string, unknown>;
52
+ /** String, `false`, or a function receiving a typed `TooltipContext`. */
53
+ tooltip?: TooltipOption;
54
+ responsive?: boolean;
55
+ /** Multiple series (bar → grouped, line/area → one path each). */
56
+ series?: Series[];
57
+ /** Show a legend; multi-series charts show one by default. */
58
+ legend?: boolean | LegendOptions;
59
+ /** Draw value labels on each mark. */
60
+ dataLabels?: boolean | DataLabelsOption;
61
+ /** Reference lines drawn across the plot. */
62
+ annotations?: Annotation[];
63
+ /** Pin axis bounds (otherwise auto-scaled to the data). */
64
+ xMin?: number;
65
+ xMax?: number;
66
+ yMin?: number;
67
+ yMax?: number;
68
+ /** Target number of y ticks (default 5). */
69
+ yTickCount?: number;
70
+ /** Force 0 into the y domain. */
71
+ yIncludeZero?: boolean;
72
+ /** Tick formatters. */
73
+ xFormat?: (value: unknown) => string;
74
+ yFormat?: (value: number) => string;
75
+ /** Axis titles. */
76
+ xAxis?: { label?: string };
77
+ yAxis?: { label?: string };
78
+ }
79
+
80
+ export declare const VdChart: DefineComponent<VdChartProps>;
81
+ export declare const VdBarChart: DefineComponent<VdChartProps>;
82
+ export declare const VdLineChart: DefineComponent<VdChartProps>;
83
+ export declare const VdAreaChart: DefineComponent<VdChartProps>;
84
+ export declare const VdScatterChart: DefineComponent<VdChartProps>;
85
+ export declare const VdDonutChart: DefineComponent<VdChartProps>;
86
+ export declare const VdPieChart: DefineComponent<VdChartProps>;