{"version":3,"sources":["../src/charts/gantt/gantt-type.ts","../src/charts/org/org-type.ts","../src/charts/flow/flow-type.ts","../src/charts/pareto/pareto-type.ts","../src/api/chart-types.ts","../src/api/convenience.ts","../src/interaction/link.ts","../src/data/streaming.ts","../src/features/dataset.ts","../src/features/datazoom.ts","../src/features/datazoom-widget.ts","../src/features/graphic.ts","../src/features/richtext.ts","../src/registry/registry.ts","../src/scales/time.ts"],"names":["defineChartType","prepareNoAxes","line","text","group","PathBuilder","path","rect","prepareData","getBandwidth","circle","lineChartType","barChartType","stackedBarChartType","horizontalBarChartType","pieChartType","donutChartType","scatterChartType","sparklineChartType","areaChartType","radarChartType","bubbleChartType","candlestickChartType","gaugeChartType","waterfallChartType","funnelChartType","heatmapChartType","boxplotChartType","histogramChartType","treemapChartType","polarChartType","radialBarChartType","lollipopChartType","bulletChartType","dumbbellChartType","calendarChartType","comboChartType","sankeyChartType","sunburstChartType","treeChartType","graphChartType","parallelChartType","themeRiverChartType","pictorialBarChartType","chordChartType","geoChartType","linesChartType","matrixChartType","customChartType","ohlcChartType","stepChartType","volumeChartType","rangeChartType","baselineChartType","kagiChartType","renkoChartType","violinChartType","packChartType","voronoiChartType","wordcloudChartType","pillarChartType","createChart","charts","pad"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n  ChartData, ResolvedOptions, PreparedData,\n  RenderContext, RenderNode, HitResult,\n} from '../../types'\nimport { defineChartType } from '../../api/define'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, rect, text, path, line } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Gantt chart — horizontal task bars on a timeline.\n *\n * Data convention:\n * - labels: task names\n * - series[0].values: start values (day offsets or timestamps)\n * - series[1].values: end values\n * - series[2].values (optional): progress 0-100\n *\n * When start === end, renders a milestone diamond.\n */\n\nexport const ganttChartType = defineChartType({\n  type: 'gantt',\n  suppressAxes: true,\n\n  prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n    return prepareNoAxes(data, options)\n  },\n\n  render(ctx: RenderContext): RenderNode[] {\n    const { data, area, theme, options } = ctx\n    const nodes: RenderNode[] = []\n\n    const startSeries = data.series[0]\n    const endSeries = data.series[1]\n    if (!startSeries || !endSeries) return nodes\n\n    const progressSeries = data.series[2]\n    const taskCount = data.labels.length\n    if (taskCount === 0) return nodes\n\n    // Find time range\n    let tMin = Infinity\n    let tMax = -Infinity\n    for (let i = 0; i < taskCount; i++) {\n      const s = startSeries.values[i] ?? 0\n      const e = endSeries.values[i] ?? 0\n      if (s < tMin) tMin = s\n      if (e > tMax) tMax = e\n    }\n    if (tMin === tMax) tMax = tMin + 1\n\n    const labelWidth = area.width * 0.22\n    const chartX = area.x + labelWidth\n    const chartW = area.width - labelWidth\n    const rowH = area.height / Math.max(taskCount, 1)\n    const barH = Math.min(rowH * 0.55, 28)\n    const tRange = tMax - tMin\n\n    // Grid lines (vertical time ticks)\n    const gridNodes: RenderNode[] = []\n    const tickCount = Math.min(Math.max(Math.floor(chartW / 60), 3), 10)\n    for (let t = 0; t <= tickCount; t++) {\n      const frac = t / tickCount\n      const x = chartX + frac * chartW\n      gridNodes.push(line(x, area.y, x, area.y + area.height, {\n        stroke: theme.gridColor,\n        strokeWidth: 0.5,\n        strokeDasharray: '3,3',\n      }))\n      // Time label at bottom\n      const val = Math.round(tMin + frac * tRange)\n      gridNodes.push(text(x, area.y + area.height + 14, String(val), {\n        fill: theme.textColor,\n        textAnchor: 'middle',\n        fontSize: theme.fontSizeSmall,\n        fontFamily: theme.fontFamily,\n      }))\n    }\n    nodes.push(group(gridNodes, { class: 'chartts-gantt-grid' }))\n\n    // Row separators\n    const sepNodes: RenderNode[] = []\n    for (let i = 1; i < taskCount; i++) {\n      const y = area.y + i * rowH\n      sepNodes.push(line(chartX, y, chartX + chartW, y, {\n        stroke: theme.gridColor,\n        strokeWidth: 0.5,\n      }))\n    }\n    if (sepNodes.length > 0) {\n      nodes.push(group(sepNodes, { class: 'chartts-gantt-rows' }))\n    }\n\n    // Task bars\n    const barNodes: RenderNode[] = []\n    for (let i = 0; i < taskCount; i++) {\n      const s = startSeries.values[i] ?? 0\n      const e = endSeries.values[i] ?? 0\n      const progress = progressSeries ? (progressSeries.values[i] ?? 0) : -1\n      const color = options.colors[i % options.colors.length]!\n\n      const cy = area.y + i * rowH + rowH / 2\n\n      // Task label\n      barNodes.push(text(chartX - 8, cy, String(data.labels[i] ?? ''), {\n        fill: theme.textColor,\n        textAnchor: 'end',\n        dominantBaseline: 'central',\n        fontSize: theme.fontSizeSmall,\n        fontFamily: theme.fontFamily,\n      }))\n\n      if (s === e) {\n        // Milestone — diamond shape\n        const mx = chartX + ((s - tMin) / tRange) * chartW\n        const sz = barH * 0.45\n        const pb = new PathBuilder()\n        pb.moveTo(mx, cy - sz)\n        pb.lineTo(mx + sz, cy)\n        pb.lineTo(mx, cy + sz)\n        pb.lineTo(mx - sz, cy)\n        pb.close()\n\n        barNodes.push(path(pb.build(), {\n          class: 'chartts-gantt-milestone',\n          fill: color,\n          'data-series': 0,\n          'data-index': i,\n          tabindex: 0,\n          role: 'img',\n          ariaLabel: `${data.labels[i] ?? i}: milestone at ${s}`,\n        }))\n      } else {\n        // Bar\n        const x1 = chartX + ((s - tMin) / tRange) * chartW\n        const x2 = chartX + ((e - tMin) / tRange) * chartW\n        const bw = Math.max(x2 - x1, 2)\n        const by = cy - barH / 2\n\n        barNodes.push(rect(x1, by, bw, barH, {\n          rx: 4, ry: 4,\n          class: 'chartts-gantt-bar',\n          fill: color,\n          opacity: 0.75,\n          'data-series': 0,\n          'data-index': i,\n          tabindex: 0,\n          role: 'img',\n          ariaLabel: `${data.labels[i] ?? i}: ${s} to ${e}`,\n        }))\n\n        // Progress overlay\n        if (progress >= 0 && progress <= 100) {\n          const pw = bw * (progress / 100)\n          barNodes.push(rect(x1, by, pw, barH, {\n            rx: 4, ry: 4,\n            class: 'chartts-gantt-progress',\n            fill: color,\n            opacity: 1,\n          }))\n        }\n      }\n    }\n\n    nodes.push(group(barNodes, {\n      class: 'chartts-series chartts-series-0',\n      'data-series-name': 'Gantt',\n    }))\n\n    return nodes\n  },\n\n  hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n    const { data, area } = ctx\n    const startSeries = data.series[0]\n    const endSeries = data.series[1]\n    if (!startSeries || !endSeries) return null\n\n    const taskCount = data.labels.length\n    if (taskCount === 0) return null\n\n    let tMin = Infinity\n    let tMax = -Infinity\n    for (let i = 0; i < taskCount; i++) {\n      const s = startSeries.values[i] ?? 0\n      const e = endSeries.values[i] ?? 0\n      if (s < tMin) tMin = s\n      if (e > tMax) tMax = e\n    }\n    if (tMin === tMax) tMax = tMin + 1\n\n    const labelWidth = area.width * 0.22\n    const chartX = area.x + labelWidth\n    const chartW = area.width - labelWidth\n    const rowH = area.height / Math.max(taskCount, 1)\n    const tRange = tMax - tMin\n\n    for (let i = 0; i < taskCount; i++) {\n      const s = startSeries.values[i] ?? 0\n      const e = endSeries.values[i] ?? 0\n      const cy = area.y + i * rowH + rowH / 2\n      const x1 = chartX + ((s - tMin) / tRange) * chartW\n      const x2 = chartX + ((e - tMin) / tRange) * chartW\n\n      if (my >= cy - rowH / 2 && my <= cy + rowH / 2 &&\n          mx >= x1 - 5 && mx <= Math.max(x2, x1 + 10) + 5) {\n        return { seriesIndex: 0, pointIndex: i, distance: 0, x: (x1 + x2) / 2, y: cy }\n      }\n    }\n\n    return null\n  },\n})\n","import type {\n  ChartData, ResolvedOptions, PreparedData,\n  RenderContext, RenderNode, HitResult,\n} from '../../types'\nimport { defineChartType } from '../../api/define'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, rect, path, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Org chart — hierarchical organization diagram with rectangular cards.\n *\n * Data convention (same as Tree):\n * - labels: node names with \"/\" separators for hierarchy (e.g., \"CEO/CTO/VP Eng\")\n * - series[0].values: node sizing (optional, all 1 by default)\n *\n * Difference from Tree: uses rounded rectangles with text inside (org cards)\n * instead of circles with labels beside them.\n */\n\ninterface OrgNode {\n  name: string\n  value: number\n  children: OrgNode[]\n  depth: number\n  index: number\n  x: number\n  y: number\n  leafCount: number\n}\n\nexport const orgChartType = defineChartType({\n  type: 'org',\n  suppressAxes: true,\n\n  prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n    return prepareNoAxes(data, options)\n  },\n\n  render(ctx: RenderContext): RenderNode[] {\n    const { data, area, theme, options } = ctx\n    const nodes: RenderNode[] = []\n\n    const series = data.series[0]\n    if (!series || series.values.length === 0) return nodes\n\n    const root = buildOrgTree(data.labels, series.values)\n    if (!root) return nodes\n\n    computeLeafCounts(root)\n    const maxDepth = getMaxDepth(root)\n\n    // Card dimensions\n    const cardW = Math.min(area.width / (root.leafCount + 1) * 0.85, 120)\n    const cardH = Math.min(area.height / (maxDepth + 2) * 0.5, 36)\n\n    // Layout top-down\n    const levelHeight = area.height / Math.max(maxDepth + 1, 1)\n    layoutVertical(root, area.y, area.x, area.x + area.width, levelHeight)\n\n    // Render edges first\n    const edgeNodes: RenderNode[] = []\n    renderEdges(root, edgeNodes, theme, cardH)\n    nodes.push(...edgeNodes)\n\n    // Render cards\n    let nodeIdx = 0\n    const renderOrgNode = (node: OrgNode) => {\n      const color = options.colors[node.depth % options.colors.length]!\n      const cardNodes: RenderNode[] = []\n\n      // Rounded rectangle card\n      cardNodes.push(rect(node.x - cardW / 2, node.y - cardH / 2, cardW, cardH, {\n        rx: 6, ry: 6,\n        class: 'chartts-org-card',\n        fill: color,\n        stroke: theme.background === 'transparent' ? '#fff' : theme.background,\n        strokeWidth: 1.5,\n        'data-series': 0,\n        'data-index': nodeIdx,\n        tabindex: 0,\n        role: 'img',\n        ariaLabel: node.name,\n      }))\n\n      // Name label inside card\n      const fontSize = Math.min(theme.fontSizeSmall, cardH * 0.38)\n      const maxChars = Math.floor(cardW / (fontSize * 0.58))\n      const displayName = node.name.length > maxChars\n        ? node.name.slice(0, maxChars - 1) + '\\u2026'\n        : node.name\n\n      cardNodes.push(text(node.x, node.y, displayName, {\n        class: 'chartts-org-label',\n        fill: '#fff',\n        textAnchor: 'middle',\n        dominantBaseline: 'central',\n        fontSize,\n        fontFamily: theme.fontFamily,\n        fontWeight: 600,\n      }))\n\n      nodes.push(group(cardNodes, {\n        class: `chartts-series chartts-series-${nodeIdx}`,\n        'data-series-name': node.name,\n      }))\n\n      nodeIdx++\n      for (const child of node.children) {\n        renderOrgNode(child)\n      }\n    }\n\n    renderOrgNode(root)\n\n    return nodes\n  },\n\n  hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n    const { data, area } = ctx\n    const series = data.series[0]\n    if (!series || series.values.length === 0) return null\n\n    const root = buildOrgTree(data.labels, series.values)\n    if (!root) return null\n\n    computeLeafCounts(root)\n    const maxDepth = getMaxDepth(root)\n\n    const cardW = Math.min(area.width / (root.leafCount + 1) * 0.85, 120)\n    const cardH = Math.min(area.height / (maxDepth + 2) * 0.5, 36)\n    const levelHeight = area.height / Math.max(maxDepth + 1, 1)\n    layoutVertical(root, area.y, area.x, area.x + area.width, levelHeight)\n\n    let best: HitResult | null = null\n    let idx = 0\n\n    const checkNode = (node: OrgNode) => {\n      if (\n        mx >= node.x - cardW / 2 - 2 && mx <= node.x + cardW / 2 + 2 &&\n        my >= node.y - cardH / 2 - 2 && my <= node.y + cardH / 2 + 2\n      ) {\n        best = { seriesIndex: 0, pointIndex: idx, distance: 0, x: node.x, y: node.y }\n      }\n      idx++\n      for (const child of node.children) {\n        checkNode(child)\n      }\n    }\n\n    checkNode(root)\n    return best\n  },\n})\n\n// ---------------------------------------------------------------------------\n// Tree building (reused from Tree chart pattern)\n// ---------------------------------------------------------------------------\n\nfunction buildOrgTree(labels: (string | number | Date)[], values: number[]): OrgNode | null {\n  const root: OrgNode = {\n    name: 'Root', value: 0, children: [], depth: 0, index: 0,\n    x: 0, y: 0, leafCount: 0,\n  }\n\n  const hasHierarchy = labels.some(l => String(l).includes('/'))\n\n  if (hasHierarchy) {\n    for (let i = 0; i < labels.length; i++) {\n      const parts = String(labels[i] ?? '').split('/')\n      const value = Math.abs(values[i] ?? 1)\n      let current = root\n\n      for (let p = 0; p < parts.length; p++) {\n        const part = parts[p]!.trim()\n        if (!part) continue\n\n        let child = current.children.find(c => c.name === part)\n        if (!child) {\n          child = {\n            name: part, value: 0, children: [], depth: current.depth + 1,\n            index: i, x: 0, y: 0, leafCount: 0,\n          }\n          current.children.push(child)\n        }\n        if (p === parts.length - 1) {\n          child.value = value\n        }\n        current = child\n      }\n    }\n  } else {\n    root.name = String(labels[0] ?? 'Root')\n    root.value = Math.abs(values[0] ?? 1)\n\n    for (let i = 1; i < labels.length; i++) {\n      root.children.push({\n        name: String(labels[i] ?? `Node ${i}`),\n        value: Math.abs(values[i] ?? 1),\n        children: [],\n        depth: 1,\n        index: i,\n        x: 0, y: 0, leafCount: 0,\n      })\n    }\n  }\n\n  if (root.children.length === 0 && labels.length > 0) {\n    root.name = String(labels[0] ?? 'Root')\n    root.value = Math.abs(values[0] ?? 1)\n  }\n\n  return root\n}\n\nfunction computeLeafCounts(node: OrgNode): number {\n  if (node.children.length === 0) {\n    node.leafCount = 1\n    return 1\n  }\n  let count = 0\n  for (const child of node.children) {\n    count += computeLeafCounts(child)\n  }\n  node.leafCount = count\n  return count\n}\n\nfunction getMaxDepth(node: OrgNode): number {\n  if (node.children.length === 0) return node.depth\n  let max = node.depth\n  for (const child of node.children) {\n    max = Math.max(max, getMaxDepth(child))\n  }\n  return max\n}\n\n// ---------------------------------------------------------------------------\n// Layout\n// ---------------------------------------------------------------------------\n\nfunction layoutVertical(\n  node: OrgNode, topY: number, leftX: number, rightX: number, levelHeight: number,\n): void {\n  node.y = topY + node.depth * levelHeight + levelHeight / 2\n  const totalLeaves = node.leafCount || 1\n  const slotWidth = (rightX - leftX) / totalLeaves\n\n  if (node.children.length === 0) {\n    node.x = leftX + slotWidth / 2\n    return\n  }\n\n  let currentX = leftX\n  for (const child of node.children) {\n    const childWidth = (child.leafCount / totalLeaves) * (rightX - leftX)\n    layoutVertical(child, topY, currentX, currentX + childWidth, levelHeight)\n    currentX += childWidth\n  }\n\n  const firstChild = node.children[0]!\n  const lastChild = node.children[node.children.length - 1]!\n  node.x = (firstChild.x + lastChild.x) / 2\n}\n\n// ---------------------------------------------------------------------------\n// Rendering edges with curved connectors\n// ---------------------------------------------------------------------------\n\nfunction renderEdges(\n  node: OrgNode,\n  nodes: RenderNode[],\n  theme: RenderContext['theme'],\n  cardH: number,\n): void {\n  for (const child of node.children) {\n    const pb = new PathBuilder()\n    const startY = node.y + cardH / 2\n    const endY = child.y - cardH / 2\n    const midY = (startY + endY) / 2\n\n    pb.moveTo(node.x, startY)\n    pb.curveTo(node.x, midY, child.x, midY, child.x, endY)\n\n    nodes.push(path(pb.build(), {\n      class: 'chartts-org-edge',\n      stroke: theme.gridColor,\n      strokeWidth: 1.5,\n      fill: 'none',\n    }))\n\n    renderEdges(child, nodes, theme, cardH)\n  }\n}\n","import type {\n  ChartData, ResolvedOptions, PreparedData,\n  RenderContext, RenderNode, HitResult,\n} from '../../types'\nimport { defineChartType } from '../../api/define'\nimport { prepareNoAxes } from '../../utils/prepare'\nimport { group, rect, path, text } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\n\n/**\n * Flow chart — process diagram with shaped nodes and directed edges.\n *\n * Data convention:\n * - labels: node names. Shape detected from naming conventions:\n *   - Starting with \"[\" → decision (diamond)\n *   - Starting with \"(\" → terminal (rounded rect / stadium)\n *   - Default → process (rect)\n * - series with \" -> \" in name → edge (from -> to), values[0] = weight\n * - series without \" -> \" → node metadata (ignored for layout)\n *\n * Layout: left-to-right layered (topological sort into columns).\n */\n\ninterface FlowNode {\n  name: string\n  index: number\n  shape: 'rect' | 'diamond' | 'rounded'\n  layer: number\n  layerOrder: number\n  x: number\n  y: number\n}\n\ninterface FlowEdge {\n  from: number\n  to: number\n  weight: number\n}\n\nexport const flowChartType = defineChartType({\n  type: 'flow',\n  suppressAxes: true,\n\n  prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n    // Pad edge series to match label count so validation passes\n    const labelLen = data.labels?.length ?? 0\n    if (labelLen > 0) {\n      const paddedSeries = data.series.map(s => {\n        if (s.values.length < labelLen) {\n          const padded = new Array(labelLen).fill(0)\n          for (let i = 0; i < s.values.length; i++) padded[i] = s.values[i]!\n          return { ...s, values: padded }\n        }\n        return s\n      })\n      return prepareNoAxes({ ...data, series: paddedSeries }, options)\n    }\n    return prepareNoAxes(data, options)\n  },\n\n  render(ctx: RenderContext): RenderNode[] {\n    const { data, area, theme, options } = ctx\n    const nodes: RenderNode[] = []\n\n    if (data.labels.length === 0) return nodes\n\n    const { flowNodes, edges } = parseFlowData(data)\n    if (flowNodes.length === 0) return nodes\n\n    assignLayers(flowNodes, edges)\n    layoutNodes(flowNodes, area)\n\n    // Node dimensions\n    const nodeW = Math.min(area.width / (getMaxLayer(flowNodes) + 2) * 0.65, 110)\n    const nodeH = Math.min(area.height / (getMaxLayerCount(flowNodes) + 1) * 0.55, 36)\n\n    // Render edges first (below nodes)\n    const edgeNodes: RenderNode[] = []\n    for (const edge of edges) {\n      const from = flowNodes[edge.from]\n      const to = flowNodes[edge.to]\n      if (!from || !to) continue\n\n      const pb = new PathBuilder()\n      const startX = from.x + nodeW / 2\n      const endX = to.x - nodeW / 2\n      const midX = (startX + endX) / 2\n\n      pb.moveTo(startX, from.y)\n      pb.curveTo(midX, from.y, midX, to.y, endX, to.y)\n\n      edgeNodes.push(path(pb.build(), {\n        class: 'chartts-flow-edge',\n        stroke: theme.gridColor,\n        strokeWidth: 1.5,\n        fill: 'none',\n      }))\n\n      // Arrowhead\n      const arrowSize = 6\n      const apb = new PathBuilder()\n      apb.moveTo(endX, to.y)\n      apb.lineTo(endX - arrowSize, to.y - arrowSize * 0.6)\n      apb.lineTo(endX - arrowSize, to.y + arrowSize * 0.6)\n      apb.close()\n\n      edgeNodes.push(path(apb.build(), {\n        class: 'chartts-flow-arrow',\n        fill: theme.gridColor,\n      }))\n    }\n    if (edgeNodes.length > 0) {\n      nodes.push(group(edgeNodes, { class: 'chartts-flow-edges' }))\n    }\n\n    // Render nodes\n    for (let i = 0; i < flowNodes.length; i++) {\n      const fNode = flowNodes[i]!\n      const color = options.colors[i % options.colors.length]!\n      const cardNodes: RenderNode[] = []\n\n      if (fNode.shape === 'diamond') {\n        // Diamond (decision)\n        const dw = nodeW * 0.6\n        const dh = nodeH * 0.85\n        const dpb = new PathBuilder()\n        dpb.moveTo(fNode.x, fNode.y - dh)\n        dpb.lineTo(fNode.x + dw, fNode.y)\n        dpb.lineTo(fNode.x, fNode.y + dh)\n        dpb.lineTo(fNode.x - dw, fNode.y)\n        dpb.close()\n\n        cardNodes.push(path(dpb.build(), {\n          class: 'chartts-flow-node chartts-flow-decision',\n          fill: color,\n          'data-series': 0,\n          'data-index': i,\n          tabindex: 0,\n          role: 'img',\n          ariaLabel: fNode.name,\n        }))\n      } else if (fNode.shape === 'rounded') {\n        // Stadium / terminal shape (very rounded rect)\n        cardNodes.push(rect(fNode.x - nodeW / 2, fNode.y - nodeH / 2, nodeW, nodeH, {\n          rx: nodeH / 2, ry: nodeH / 2,\n          class: 'chartts-flow-node chartts-flow-terminal',\n          fill: color,\n          'data-series': 0,\n          'data-index': i,\n          tabindex: 0,\n          role: 'img',\n          ariaLabel: fNode.name,\n        }))\n      } else {\n        // Rectangle (process)\n        cardNodes.push(rect(fNode.x - nodeW / 2, fNode.y - nodeH / 2, nodeW, nodeH, {\n          rx: 4, ry: 4,\n          class: 'chartts-flow-node chartts-flow-process',\n          fill: color,\n          'data-series': 0,\n          'data-index': i,\n          tabindex: 0,\n          role: 'img',\n          ariaLabel: fNode.name,\n        }))\n      }\n\n      // Label inside node\n      const displayName = fNode.name.replace(/^\\[|\\]$|^\\(|\\)$/g, '')\n      const fontSize = Math.min(theme.fontSizeSmall, nodeH * 0.38)\n      const maxChars = Math.floor(nodeW / (fontSize * 0.55))\n      const labelText = displayName.length > maxChars\n        ? displayName.slice(0, maxChars - 1) + '\\u2026'\n        : displayName\n\n      cardNodes.push(text(fNode.x, fNode.y, labelText, {\n        class: 'chartts-flow-label',\n        fill: '#fff',\n        textAnchor: 'middle',\n        dominantBaseline: 'central',\n        fontSize,\n        fontFamily: theme.fontFamily,\n        fontWeight: 600,\n      }))\n\n      nodes.push(group(cardNodes, {\n        class: `chartts-series chartts-series-${i}`,\n        'data-series-name': fNode.name,\n      }))\n    }\n\n    return nodes\n  },\n\n  hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n    const { data, area } = ctx\n    if (data.labels.length === 0) return null\n\n    const { flowNodes, edges } = parseFlowData(data)\n    if (flowNodes.length === 0) return null\n\n    assignLayers(flowNodes, edges)\n    layoutNodes(flowNodes, area)\n\n    const nodeW = Math.min(area.width / (getMaxLayer(flowNodes) + 2) * 0.65, 110)\n    const nodeH = Math.min(area.height / (getMaxLayerCount(flowNodes) + 1) * 0.55, 36)\n\n    for (let i = 0; i < flowNodes.length; i++) {\n      const fNode = flowNodes[i]!\n      if (\n        mx >= fNode.x - nodeW / 2 - 4 && mx <= fNode.x + nodeW / 2 + 4 &&\n        my >= fNode.y - nodeH / 2 - 4 && my <= fNode.y + nodeH / 2 + 4\n      ) {\n        return { seriesIndex: 0, pointIndex: i, distance: 0, x: fNode.x, y: fNode.y }\n      }\n    }\n\n    return null\n  },\n})\n\n// ---------------------------------------------------------------------------\n// Parsing\n// ---------------------------------------------------------------------------\n\nfunction parseFlowData(data: PreparedData): { flowNodes: FlowNode[]; edges: FlowEdge[] } {\n  const labels = data.labels ?? []\n  const nameToIndex = new Map<string, number>()\n  const flowNodes: FlowNode[] = []\n\n  for (let i = 0; i < labels.length; i++) {\n    const name = String(labels[i] ?? '')\n    let shape: FlowNode['shape'] = 'rect'\n    if (name.startsWith('[')) shape = 'diamond'\n    else if (name.startsWith('(')) shape = 'rounded'\n\n    flowNodes.push({\n      name,\n      index: i,\n      shape,\n      layer: 0,\n      layerOrder: 0,\n      x: 0,\n      y: 0,\n    })\n    nameToIndex.set(name, i)\n  }\n\n  const edges: FlowEdge[] = []\n  for (const series of data.series) {\n    if (!series.name.includes(' -> ')) continue\n    const [fromName, toName] = series.name.split(' -> ').map(s => s.trim())\n    const fromIdx = nameToIndex.get(fromName!)\n    const toIdx = nameToIndex.get(toName!)\n    if (fromIdx !== undefined && toIdx !== undefined) {\n      edges.push({ from: fromIdx, to: toIdx, weight: series.values[0] ?? 1 })\n    }\n  }\n\n  return { flowNodes, edges }\n}\n\n// ---------------------------------------------------------------------------\n// Layer assignment (topological)\n// ---------------------------------------------------------------------------\n\nfunction assignLayers(flowNodes: FlowNode[], edges: FlowEdge[]): void {\n  // Build adjacency\n  const inDegree = new Array(flowNodes.length).fill(0) as number[]\n  const adj: number[][] = flowNodes.map(() => [])\n\n  for (const edge of edges) {\n    adj[edge.from]!.push(edge.to)\n    inDegree[edge.to]!++\n  }\n\n  // BFS layer assignment\n  const queue: number[] = []\n  for (let i = 0; i < flowNodes.length; i++) {\n    if (inDegree[i] === 0) {\n      queue.push(i)\n      flowNodes[i]!.layer = 0\n    }\n  }\n\n  const visited = new Set<number>()\n  while (queue.length > 0) {\n    const curr = queue.shift()!\n    if (visited.has(curr)) continue\n    visited.add(curr)\n\n    for (const next of adj[curr]!) {\n      flowNodes[next]!.layer = Math.max(flowNodes[next]!.layer, flowNodes[curr]!.layer + 1)\n      inDegree[next]!--\n      if (inDegree[next] === 0) {\n        queue.push(next)\n      }\n    }\n  }\n\n  // Assign nodes that weren't reached (disconnected)\n  for (let i = 0; i < flowNodes.length; i++) {\n    if (!visited.has(i)) {\n      flowNodes[i]!.layer = 0\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Layout\n// ---------------------------------------------------------------------------\n\nfunction layoutNodes(\n  flowNodes: FlowNode[],\n  area: { x: number; y: number; width: number; height: number },\n): void {\n  const maxLayer = getMaxLayer(flowNodes)\n  const layerWidth = area.width / Math.max(maxLayer + 1, 1)\n\n  // Group by layer\n  const layers: FlowNode[][] = []\n  for (const node of flowNodes) {\n    if (!layers[node.layer]) layers[node.layer] = []\n    layers[node.layer]!.push(node)\n  }\n\n  // Position each layer\n  for (let l = 0; l <= maxLayer; l++) {\n    const nodesInLayer = layers[l] ?? []\n    const layerH = area.height / Math.max(nodesInLayer.length, 1)\n\n    for (let j = 0; j < nodesInLayer.length; j++) {\n      const node = nodesInLayer[j]!\n      node.x = area.x + l * layerWidth + layerWidth / 2\n      node.y = area.y + j * layerH + layerH / 2\n      node.layerOrder = j\n    }\n  }\n}\n\nfunction getMaxLayer(flowNodes: FlowNode[]): number {\n  let max = 0\n  for (const n of flowNodes) {\n    if (n.layer > max) max = n.layer\n  }\n  return max\n}\n\nfunction getMaxLayerCount(flowNodes: FlowNode[]): number {\n  const counts = new Map<number, number>()\n  for (const n of flowNodes) {\n    counts.set(n.layer, (counts.get(n.layer) ?? 0) + 1)\n  }\n  let max = 0\n  for (const c of counts.values()) {\n    if (c > max) max = c\n  }\n  return max\n}\n","import type {\n  ChartData, ResolvedOptions, PreparedData,\n  RenderContext, RenderNode, HitResult,\n} from '../../types'\nimport { defineChartType } from '../../api/define'\nimport { prepareData } from '../../data/prepare'\nimport { group, rect, path, circle, text, line } from '../../render/tree'\nimport { PathBuilder } from '../../render/tree'\nimport { getBandwidth } from '../../utils/scale'\n\n/**\n * Pareto chart — bars sorted descending + cumulative percentage line + 80% threshold.\n *\n * Data convention:\n * - Single series — values are auto-sorted descending.\n * - Labels are reordered to match.\n * - Cumulative percentages are computed automatically.\n *\n * Renders: bars (primary color) + cumulative line (secondary) + 80% dashed line.\n */\n\nexport const paretoChartType = defineChartType({\n  type: 'pareto',\n  useBandScale: true,\n\n  prepareData(data: ChartData, options: ResolvedOptions): PreparedData {\n    // Sort data descending and compute cumulative percentages\n    const series = data.series[0]\n    if (!series) return prepareData(data, options)\n\n    const labels = data.labels ?? []\n    const indices = series.values.map((_, i) => i)\n    indices.sort((a, b) => (series.values[b] ?? 0) - (series.values[a] ?? 0))\n\n    const sortedLabels = indices.map(i => String(labels[i] ?? ''))\n    const sortedValues = indices.map(i => series.values[i] ?? 0)\n    const total = sortedValues.reduce((s, v) => s + v, 0)\n\n    // Compute cumulative percentages for y-axis range\n    let cumPct = 0\n    const cumValues: number[] = []\n    for (const v of sortedValues) {\n      cumPct += total > 0 ? (v / total) * 100 : 0\n      cumValues.push(cumPct)\n    }\n\n    const sortedData: ChartData = {\n      labels: sortedLabels,\n      series: [\n        { name: series.name, values: sortedValues },\n        { name: 'Cumulative %', values: cumValues },\n      ],\n    }\n\n    const prepared = prepareData(sortedData, options)\n\n    // Ensure y starts at 0\n    if (options.yMin === undefined && prepared.bounds.yMin > 0) {\n      prepared.bounds.yMin = 0\n    }\n\n    return prepared\n  },\n\n  render(ctx: RenderContext): RenderNode[] {\n    const { data, options, xScale, yScale, area, theme } = ctx\n    const nodes: RenderNode[] = []\n\n    const barSeries = data.series[0]\n    if (!barSeries || barSeries.values.length === 0) return nodes\n\n    const cumSeries = data.series[1]\n    const bw = getBandwidth(xScale)\n    const barWidth = bw * (1 - options.barGap)\n    const baseline = yScale.map(0)\n\n    const barColor = options.colors[0] ?? '#3b82f6'\n    const lineColor = options.colors[1] ?? '#f59e0b'\n\n    // Bars\n    const barNodes: RenderNode[] = []\n    for (let i = 0; i < barSeries.values.length; i++) {\n      const val = barSeries.values[i]!\n      if (isNaN(val)) continue\n      const cx = xScale.map(i)\n      const barX = cx - barWidth / 2\n      const vy = yScale.map(val)\n      const y = vy\n      const h = Math.abs(baseline - vy)\n\n      barNodes.push(rect(barX, y, barWidth, h, {\n        rx: 3, ry: 3,\n        class: 'chartts-pareto-bar',\n        fill: barColor,\n        'data-series': 0,\n        'data-index': i,\n        tabindex: 0,\n        role: 'img',\n        ariaLabel: `${data.labels[i] ?? i}: ${val}`,\n      }))\n    }\n    nodes.push(group(barNodes, {\n      class: 'chartts-series chartts-series-0',\n      'data-series-name': barSeries.name,\n    }))\n\n    // Cumulative percentage line\n    if (cumSeries && cumSeries.values.length > 0) {\n      const yDomain = yScale.getDomain()\n      const yMax = yDomain[1] as number\n\n      const lineNodes: RenderNode[] = []\n      const pb = new PathBuilder()\n      let started = false\n\n      for (let i = 0; i < cumSeries.values.length; i++) {\n        const cumPct = cumSeries.values[i]!\n        // Map cumulative % (0-100) proportionally onto the y scale\n        // cumPct maps to (cumPct / 100) * yMax on the value scale\n        const mappedVal = (cumPct / 100) * yMax\n        const px = xScale.map(i)\n        const py = yScale.map(mappedVal)\n\n        if (!started) {\n          pb.moveTo(px, py)\n          started = true\n        } else {\n          pb.lineTo(px, py)\n        }\n\n        lineNodes.push(circle(px, py, 3.5, {\n          class: 'chartts-pareto-point',\n          fill: lineColor,\n          stroke: '#fff',\n          strokeWidth: 1.5,\n          'data-series': 1,\n          'data-index': i,\n          tabindex: 0,\n          role: 'img',\n          ariaLabel: `Cumulative: ${cumPct.toFixed(1)}%`,\n        }))\n      }\n\n      lineNodes.unshift(path(pb.build(), {\n        class: 'chartts-pareto-line',\n        stroke: lineColor,\n        strokeWidth: 2,\n        fill: 'none',\n      }))\n\n      // 80% threshold line\n      const threshold80Val = (80 / 100) * yMax\n      const threshold80Y = yScale.map(threshold80Val)\n\n      lineNodes.push(line(area.x, threshold80Y, area.x + area.width, threshold80Y, {\n        class: 'chartts-pareto-threshold',\n        stroke: theme.gridColor,\n        strokeWidth: 1,\n        strokeDasharray: '6,3',\n      }))\n\n      // 80% label on right side\n      lineNodes.push(text(area.x + area.width + 4, threshold80Y, '80%', {\n        fill: theme.textColor,\n        textAnchor: 'start',\n        dominantBaseline: 'central',\n        fontSize: theme.fontSizeSmall,\n        fontFamily: theme.fontFamily,\n      }))\n\n      nodes.push(group(lineNodes, {\n        class: 'chartts-series chartts-series-1',\n        'data-series-name': 'Cumulative %',\n      }))\n    }\n\n    return nodes\n  },\n\n  hitTest(ctx: RenderContext, mx: number, my: number): HitResult | null {\n    const { data, xScale, yScale, options } = ctx\n    const barSeries = data.series[0]\n    if (!barSeries) return null\n\n    const bw = getBandwidth(xScale)\n    const barWidth = bw * (1 - options.barGap)\n    const baseline = yScale.map(0)\n\n    for (let i = 0; i < barSeries.values.length; i++) {\n      const val = barSeries.values[i]!\n      if (isNaN(val)) continue\n      const cx = xScale.map(i)\n      const barX = cx - barWidth / 2\n      const vy = yScale.map(val)\n      const y = Math.min(vy, baseline)\n      const h = Math.abs(baseline - vy)\n\n      if (mx >= barX - 2 && mx <= barX + barWidth + 2 && my >= y - 2 && my <= y + h + 2) {\n        return { seriesIndex: 0, pointIndex: i, distance: 0, x: cx, y: vy }\n      }\n    }\n\n    return null\n  },\n})\n","/**\n * Central registry of all built-in chart types.\n *\n * Adding a new chart type = add ONE entry here.\n * convenience.ts, framework wrappers, and entries all derive from this.\n */\nimport type { ChartTypePlugin } from '../types'\n\nimport { lineChartType } from '../charts/line/line-type'\nimport { barChartType } from '../charts/bar/bar-type'\nimport { stackedBarChartType } from '../charts/bar/stacked-bar-type'\nimport { horizontalBarChartType } from '../charts/bar/horizontal-bar-type'\nimport { pieChartType, donutChartType } from '../charts/pie/pie-type'\nimport { scatterChartType } from '../charts/scatter/scatter-type'\nimport { sparklineChartType } from '../charts/sparkline/sparkline-type'\nimport { areaChartType } from '../charts/area/area-type'\nimport { radarChartType } from '../charts/radar/radar-type'\nimport { bubbleChartType } from '../charts/bubble/bubble-type'\nimport { candlestickChartType } from '../charts/candlestick/candlestick-type'\nimport { gaugeChartType } from '../charts/gauge/gauge-type'\nimport { waterfallChartType } from '../charts/waterfall/waterfall-type'\nimport { funnelChartType } from '../charts/funnel/funnel-type'\nimport { heatmapChartType } from '../charts/heatmap/heatmap-type'\nimport { boxplotChartType } from '../charts/boxplot/boxplot-type'\nimport { histogramChartType } from '../charts/histogram/histogram-type'\nimport { treemapChartType } from '../charts/treemap/treemap-type'\nimport { polarChartType } from '../charts/polar/polar-type'\nimport { radialBarChartType } from '../charts/radialbar/radialbar-type'\nimport { lollipopChartType } from '../charts/lollipop/lollipop-type'\nimport { bulletChartType } from '../charts/bullet/bullet-type'\nimport { dumbbellChartType } from '../charts/dumbbell/dumbbell-type'\nimport { calendarChartType } from '../charts/calendar/calendar-type'\nimport { comboChartType } from '../charts/combo/combo-type'\nimport { sankeyChartType } from '../charts/sankey/sankey-type'\nimport { sunburstChartType } from '../charts/sunburst/sunburst-type'\nimport { treeChartType } from '../charts/tree/tree-type'\nimport { graphChartType } from '../charts/graph/graph-type'\nimport { parallelChartType } from '../charts/parallel/parallel-type'\nimport { themeRiverChartType } from '../charts/themeriver/themeriver-type'\nimport { pictorialBarChartType } from '../charts/pictorialbar/pictorialbar-type'\nimport { chordChartType } from '../charts/chord/chord-type'\nimport { geoChartType } from '../charts/geo/geo-type'\nimport { linesChartType } from '../charts/lines/lines-type'\nimport { matrixChartType } from '../charts/matrix/matrix-type'\nimport { customChartType } from '../charts/custom/custom-type'\nimport { ohlcChartType } from '../charts/ohlc/ohlc-type'\nimport { stepChartType } from '../charts/step/step-type'\nimport { volumeChartType } from '../charts/volume/volume-type'\nimport { rangeChartType } from '../charts/range/range-type'\nimport { baselineChartType } from '../charts/baseline/baseline-type'\nimport { kagiChartType } from '../charts/kagi/kagi-type'\nimport { renkoChartType } from '../charts/renko/renko-type'\nimport { violinChartType } from '../charts/violin/violin-type'\nimport { packChartType } from '../charts/pack/pack-type'\nimport { voronoiChartType } from '../charts/voronoi/voronoi-type'\nimport { wordcloudChartType } from '../charts/wordcloud/wordcloud-type'\nimport { pillarChartType } from '../charts/pillar/pillar-type'\nimport { ganttChartType } from '../charts/gantt/gantt-type'\nimport { orgChartType } from '../charts/org/org-type'\nimport { flowChartType } from '../charts/flow/flow-type'\nimport { paretoChartType } from '../charts/pareto/pareto-type'\n\n/**\n * Map of convenience name -> chart type plugin.\n * Keys are PascalCase names matching the public API (Line, Bar, etc.).\n */\nexport const CHART_TYPES: Record<string, ChartTypePlugin> = {\n  Line: lineChartType,\n  Bar: barChartType,\n  StackedBar: stackedBarChartType,\n  HorizontalBar: horizontalBarChartType,\n  Pie: pieChartType,\n  Donut: donutChartType,\n  Scatter: scatterChartType,\n  Sparkline: sparklineChartType,\n  Area: areaChartType,\n  Radar: radarChartType,\n  Bubble: bubbleChartType,\n  Candlestick: candlestickChartType,\n  Gauge: gaugeChartType,\n  Waterfall: waterfallChartType,\n  Funnel: funnelChartType,\n  Heatmap: heatmapChartType,\n  Boxplot: boxplotChartType,\n  Histogram: histogramChartType,\n  Treemap: treemapChartType,\n  Polar: polarChartType,\n  RadialBar: radialBarChartType,\n  Lollipop: lollipopChartType,\n  Bullet: bulletChartType,\n  Dumbbell: dumbbellChartType,\n  Calendar: calendarChartType,\n  Combo: comboChartType,\n  Sankey: sankeyChartType,\n  Sunburst: sunburstChartType,\n  Tree: treeChartType,\n  Graph: graphChartType,\n  Parallel: parallelChartType,\n  ThemeRiver: themeRiverChartType,\n  PictorialBar: pictorialBarChartType,\n  Chord: chordChartType,\n  Geo: geoChartType,\n  Lines: linesChartType,\n  Matrix: matrixChartType,\n  Custom: customChartType,\n  OHLC: ohlcChartType,\n  Step: stepChartType,\n  Volume: volumeChartType,\n  Range: rangeChartType,\n  Baseline: baselineChartType,\n  Kagi: kagiChartType,\n  Renko: renkoChartType,\n  Violin: violinChartType,\n  Pack: packChartType,\n  Voronoi: voronoiChartType,\n  WordCloud: wordcloudChartType,\n  Pillar: pillarChartType,\n  Gantt: ganttChartType,\n  Org: orgChartType,\n  Flow: flowChartType,\n  Pareto: paretoChartType,\n}\n\n// Re-export individual chart types for direct import\nexport {\n  lineChartType, barChartType, stackedBarChartType, horizontalBarChartType,\n  pieChartType, donutChartType, scatterChartType, sparklineChartType,\n  areaChartType, radarChartType, bubbleChartType, candlestickChartType,\n  gaugeChartType, waterfallChartType, funnelChartType, heatmapChartType,\n  boxplotChartType, histogramChartType, treemapChartType, polarChartType,\n  radialBarChartType, lollipopChartType, bulletChartType, dumbbellChartType,\n  calendarChartType, comboChartType, sankeyChartType,\n  sunburstChartType, treeChartType, graphChartType, parallelChartType,\n  themeRiverChartType, pictorialBarChartType, chordChartType,\n  geoChartType, linesChartType, matrixChartType, customChartType,\n  ohlcChartType, stepChartType, volumeChartType, rangeChartType,\n  baselineChartType, kagiChartType, renkoChartType, violinChartType,\n  packChartType, voronoiChartType, wordcloudChartType, pillarChartType,\n  ganttChartType, orgChartType, flowChartType, paretoChartType,\n}\n","import type { ChartData, ChartOptions, ChartInstance } from '../types'\nimport { createChart } from './create'\nimport { CHART_TYPES } from './chart-types'\n\ninterface ChartConfig extends ChartOptions {\n  data: ChartData\n  debug?: boolean\n}\n\ntype ConvenienceFunction = (target: string | HTMLElement, config: ChartConfig) => ChartInstance\n\n/**\n * Generate all convenience functions from the CHART_TYPES map.\n * Each function is: (target, { data, ...options }) => createChart(target, plugin, data, options)\n */\nfunction generateConvenienceFunctions(): Record<string, ConvenienceFunction> {\n  const fns: Record<string, ConvenienceFunction> = {}\n  for (const [name, chartType] of Object.entries(CHART_TYPES)) {\n    fns[name] = (target: string | HTMLElement, config: ChartConfig): ChartInstance => {\n      const { data, ...options } = config\n      return createChart(target, chartType, data, options)\n    }\n  }\n  return fns\n}\n\nconst _fns = generateConvenienceFunctions()\n\n// Export named convenience functions for backwards-compatible API\nexport const Line = _fns.Line!\nexport const Bar = _fns.Bar!\nexport const StackedBar = _fns.StackedBar!\nexport const HorizontalBar = _fns.HorizontalBar!\nexport const Pie = _fns.Pie!\nexport const Donut = _fns.Donut!\nexport const Scatter = _fns.Scatter!\nexport const Sparkline = _fns.Sparkline!\nexport const Area = _fns.Area!\nexport const Radar = _fns.Radar!\nexport const Bubble = _fns.Bubble!\nexport const Candlestick = _fns.Candlestick!\nexport const Gauge = _fns.Gauge!\nexport const Waterfall = _fns.Waterfall!\nexport const Funnel = _fns.Funnel!\nexport const Heatmap = _fns.Heatmap!\nexport const Boxplot = _fns.Boxplot!\nexport const Histogram = _fns.Histogram!\nexport const Treemap = _fns.Treemap!\nexport const Polar = _fns.Polar!\nexport const RadialBar = _fns.RadialBar!\nexport const Lollipop = _fns.Lollipop!\nexport const Bullet = _fns.Bullet!\nexport const Dumbbell = _fns.Dumbbell!\nexport const Calendar = _fns.Calendar!\nexport const Combo = _fns.Combo!\nexport const Sankey = _fns.Sankey!\nexport const Sunburst = _fns.Sunburst!\nexport const Tree = _fns.Tree!\nexport const Graph = _fns.Graph!\nexport const Parallel = _fns.Parallel!\nexport const ThemeRiver = _fns.ThemeRiver!\nexport const PictorialBar = _fns.PictorialBar!\nexport const Chord = _fns.Chord!\nexport const Geo = _fns.Geo!\nexport const Lines = _fns.Lines!\nexport const Matrix = _fns.Matrix!\nexport const Custom = _fns.Custom!\nexport const OHLC = _fns.OHLC!\nexport const Step = _fns.Step!\nexport const Volume = _fns.Volume!\nexport const Range = _fns.Range!\nexport const Baseline = _fns.Baseline!\nexport const Kagi = _fns.Kagi!\nexport const Renko = _fns.Renko!\nexport const Violin = _fns.Violin!\nexport const Pack = _fns.Pack!\nexport const Voronoi = _fns.Voronoi!\nexport const WordCloud = _fns.WordCloud!\nexport const Pillar = _fns.Pillar!\nexport const Gantt = _fns.Gantt!\nexport const Org = _fns.Org!\nexport const Flow = _fns.Flow!\nexport const Pareto = _fns.Pareto!\n","/**\n * Linked charts — sync crosshair position across multiple chart instances.\n *\n * Usage:\n * ```ts\n * const unlink = linkCharts(chart1, chart2, chart3)\n * // Later:\n * unlink()\n * ```\n */\n\nimport type { ChartInstance } from '../types'\n\n/**\n * Link multiple chart instances so their crosshair positions stay in sync.\n * When one chart emits a crosshair:move event, all others receive it.\n *\n * Returns an unlink function to disconnect the charts.\n */\nexport function linkCharts(...charts: ChartInstance[]): () => void {\n  if (charts.length < 2) return () => {}\n\n  let broadcasting = false\n  const unsubs: (() => void)[] = []\n\n  for (const chart of charts) {\n    const unsub = chart.on('crosshair:move', (payload: unknown) => {\n      if (broadcasting) return\n      broadcasting = true\n\n      const { x, label } = payload as { x: number; label: string | number | Date }\n\n      // Broadcast to all other charts via public _bus\n      for (const other of charts) {\n        if (other === chart) continue\n        other._bus.emit('crosshair:move' as never, { x, label } as never)\n      }\n\n      broadcasting = false\n    })\n\n    unsubs.push(unsub)\n\n    // Also sync hide events\n    const unsubHide = chart.on('crosshair:hide', () => {\n      if (broadcasting) return\n      broadcasting = true\n      for (const other of charts) {\n        if (other === chart) continue\n        other._bus.emit('crosshair:hide' as never, undefined as never)\n      }\n      broadcasting = false\n    })\n    unsubs.push(unsubHide)\n  }\n\n  return () => {\n    for (const unsub of unsubs) unsub()\n    unsubs.length = 0\n  }\n}\n","/**\n * Realtime streaming data module.\n *\n * Provides a circular buffer + rolling window for live data feeds.\n * Throttled re-render via requestAnimationFrame.\n *\n * Usage:\n * ```ts\n * const stream = createStreamingChart(chart, {\n *   windowSize: 100,     // show last 100 points\n *   seriesCount: 3,      // 3 data series\n *   seriesNames: ['CPU', 'Memory', 'Disk'],\n * })\n *\n * // Push single data point (one value per series)\n * stream.push([45, 72, 30], 'now')\n *\n * // Push batch of data points\n * stream.pushBatch([\n *   { values: [45, 72, 30], label: '10:00' },\n *   { values: [46, 71, 31], label: '10:01' },\n * ])\n *\n * // Pause / resume\n * stream.pause()\n * stream.resume()\n *\n * // Clean up\n * stream.destroy()\n * ```\n */\n\nimport type { ChartInstance, ChartData } from '../types'\n\n// ---------------------------------------------------------------------------\n// Config\n// ---------------------------------------------------------------------------\n\nexport interface StreamingConfig {\n  /** Number of data points visible in the rolling window. Default 100. */\n  windowSize?: number\n  /** Number of data series. Default 1. */\n  seriesCount?: number\n  /** Series names. Default ['Series 1', 'Series 2', ...] */\n  seriesNames?: string[]\n  /** Series colors (optional — falls back to chart palette). */\n  seriesColors?: string[]\n  /** Maximum buffer size (oldest data is discarded beyond this). Default 10x windowSize. */\n  maxBufferSize?: number\n  /** Throttle interval in ms (0 = use rAF). Default 0. */\n  throttleMs?: number\n}\n\n// ---------------------------------------------------------------------------\n// Instance\n// ---------------------------------------------------------------------------\n\nexport interface StreamingInstance {\n  /** Push one data point (one value per series). */\n  push(values: number[], label?: string | number | Date): void\n  /** Push a batch of data points at once. */\n  pushBatch(points: Array<{ values: number[]; label?: string | number | Date }>): void\n  /** Pause streaming (stops re-renders but still accepts data). */\n  pause(): void\n  /** Resume streaming re-renders. */\n  resume(): void\n  /** Clear all buffered data. */\n  clear(): void\n  /** Get current buffer size. */\n  getBufferSize(): number\n  /** Destroy the streaming instance and clean up. */\n  destroy(): void\n}\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nexport function createStreamingChart(\n  chart: ChartInstance,\n  config: StreamingConfig = {},\n): StreamingInstance {\n  const windowSize = config.windowSize ?? 100\n  const seriesCount = config.seriesCount ?? 1\n  const maxBuffer = config.maxBufferSize ?? windowSize * 10\n  const throttleMs = config.throttleMs ?? 0\n\n  const names: string[] = config.seriesNames\n    ?? Array.from({ length: seriesCount }, (_, i) => `Series ${i + 1}`)\n  const colors: (string | undefined)[] = config.seriesColors ?? []\n\n  // Circular buffers: one per series + one for labels\n  const buffers: number[][] = Array.from({ length: seriesCount }, () => [])\n  const labels: (string | number | Date)[] = []\n  let totalPushed = 0\n\n  let paused = false\n  let dirty = false\n  let rafId: number | null = null\n  let throttleTimer: ReturnType<typeof setTimeout> | null = null\n\n  // -----------------------------------------------------------------------\n  // Internal: schedule a chart update\n  // -----------------------------------------------------------------------\n\n  function scheduleUpdate(): void {\n    if (paused) { dirty = true; return }\n\n    if (throttleMs > 0) {\n      if (throttleTimer !== null) return\n      throttleTimer = setTimeout(() => {\n        throttleTimer = null\n        flush()\n      }, throttleMs)\n    } else {\n      if (rafId !== null) return\n      rafId = requestAnimationFrame(() => {\n        rafId = null\n        flush()\n      })\n    }\n  }\n\n  function flush(): void {\n    dirty = false\n\n    // Build ChartData from the rolling window\n    const start = Math.max(0, labels.length - windowSize)\n    const windowLabels = labels.slice(start)\n    const series = buffers.map((buf, i) => ({\n      name: names[i] ?? `Series ${i + 1}`,\n      values: buf.slice(start),\n      ...(colors[i] ? { color: colors[i] } : {}),\n    }))\n\n    const data: ChartData = {\n      labels: windowLabels as string[],\n      series,\n    }\n\n    chart.setData(data)\n  }\n\n  // -----------------------------------------------------------------------\n  // Trim buffer if it exceeds maxBuffer\n  // -----------------------------------------------------------------------\n\n  function trimBuffer(): void {\n    if (labels.length <= maxBuffer) return\n    const excess = labels.length - maxBuffer\n    labels.splice(0, excess)\n    for (const buf of buffers) {\n      buf.splice(0, excess)\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Public API\n  // -----------------------------------------------------------------------\n\n  return {\n    push(values: number[], label?: string | number | Date): void {\n      totalPushed++\n      const lbl = label ?? totalPushed\n      labels.push(lbl)\n\n      for (let i = 0; i < seriesCount; i++) {\n        buffers[i]!.push(values[i] ?? 0)\n      }\n\n      trimBuffer()\n      scheduleUpdate()\n    },\n\n    pushBatch(points): void {\n      for (const pt of points) {\n        totalPushed++\n        const lbl = pt.label ?? totalPushed\n        labels.push(lbl)\n\n        for (let i = 0; i < seriesCount; i++) {\n          buffers[i]!.push(pt.values[i] ?? 0)\n        }\n      }\n\n      trimBuffer()\n      scheduleUpdate()\n    },\n\n    pause(): void {\n      paused = true\n    },\n\n    resume(): void {\n      paused = false\n      if (dirty) scheduleUpdate()\n    },\n\n    clear(): void {\n      labels.length = 0\n      for (const buf of buffers) buf.length = 0\n      totalPushed = 0\n      dirty = false\n    },\n\n    getBufferSize(): number {\n      return labels.length\n    },\n\n    destroy(): void {\n      if (rafId !== null) cancelAnimationFrame(rafId)\n      if (throttleTimer !== null) clearTimeout(throttleTimer)\n      labels.length = 0\n      for (const buf of buffers) buf.length = 0\n    },\n  }\n}\n","import type { ChartData, Series } from '../types'\n\n/**\n * Dataset — data transformation utilities for filtering, sorting, and\n * aggregating chart data before rendering.\n */\n\ntype Labels = ChartData['labels']\n\nfunction getLabels(data: ChartData): NonNullable<Labels> {\n  return data.labels ?? []\n}\n\n// ---------------------------------------------------------------------------\n// Filter\n// ---------------------------------------------------------------------------\n\n/** Filter series by a predicate on values. */\nexport function filterData(\n  data: ChartData,\n  predicate: (value: number, index: number, seriesIndex: number) => boolean,\n): ChartData {\n  const labels = getLabels(data)\n  const keepIndices = labels\n    .map((_: unknown, i: number) =>\n      data.series.some((s, si) => predicate(s.values[i] ?? 0, i, si)) ? i : -1,\n    )\n    .filter((i: number) => i >= 0)\n\n  return {\n    ...data,\n    series: data.series.map((s, si) => ({\n      ...s,\n      values: s.values.filter((v, i) => predicate(v, i, si)),\n    })),\n    labels: keepIndices.map((i: number) => (labels as unknown[])[i]) as Labels,\n  }\n}\n\n/** Filter to keep only specific series by name or index. */\nexport function filterSeries(\n  data: ChartData,\n  keep: (string | number)[],\n): ChartData {\n  return {\n    ...data,\n    series: data.series.filter((s, i) =>\n      keep.includes(s.name) || keep.includes(i),\n    ),\n  }\n}\n\n/** Filter to keep only specific labels/categories. */\nexport function filterLabels(\n  data: ChartData,\n  keep: (string | number | Date)[],\n): ChartData {\n  const labels = getLabels(data)\n  const keepSet = new Set(keep.map(String))\n  const indices = (labels as unknown[])\n    .map((l, i) => keepSet.has(String(l)) ? i : -1)\n    .filter(i => i >= 0)\n\n  return {\n    ...data,\n    labels: indices.map(i => (labels as unknown[])[i]) as Labels,\n    series: data.series.map(s => ({\n      ...s,\n      values: indices.map(i => s.values[i] ?? 0),\n    })),\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Sort\n// ---------------------------------------------------------------------------\n\n/** Sort data by label or by a specific series' values. */\nexport function sortData(\n  data: ChartData,\n  by: 'label' | number,\n  direction: 'asc' | 'desc' = 'asc',\n): ChartData {\n  const labels = getLabels(data)\n  const indices = (labels as unknown[]).map((_: unknown, i: number) => i)\n  const dir = direction === 'asc' ? 1 : -1\n\n  if (by === 'label') {\n    indices.sort((a, b) => dir * String((labels as unknown[])[a]).localeCompare(String((labels as unknown[])[b])))\n  } else {\n    const series = data.series[by]\n    if (series) {\n      indices.sort((a, b) => dir * ((series.values[a] ?? 0) - (series.values[b] ?? 0)))\n    }\n  }\n\n  return {\n    ...data,\n    labels: indices.map(i => (labels as unknown[])[i]) as Labels,\n    series: data.series.map(s => ({\n      ...s,\n      values: indices.map(i => s.values[i] ?? 0),\n    })),\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Aggregate\n// ---------------------------------------------------------------------------\n\ntype AggFn = 'sum' | 'avg' | 'min' | 'max' | 'count'\n\n/** Aggregate all series values per label into a single series. */\nexport function aggregateData(\n  data: ChartData,\n  fn: AggFn = 'sum',\n): ChartData {\n  const labels = getLabels(data)\n  const agg = getAggFn(fn)\n  const values = (labels as unknown[]).map((_: unknown, i: number) => {\n    const vals = data.series.map(s => s.values[i] ?? 0)\n    return agg(vals)\n  })\n\n  return {\n    ...data,\n    series: [{ name: fn, values }],\n  }\n}\n\nfunction getAggFn(fn: AggFn): (vals: number[]) => number {\n  switch (fn) {\n    case 'sum': return vals => vals.reduce((a, b) => a + b, 0)\n    case 'avg': return vals => vals.length > 0 ? vals.reduce((a, b) => a + b, 0) / vals.length : 0\n    case 'min': return vals => Math.min(...vals)\n    case 'max': return vals => Math.max(...vals)\n    case 'count': return vals => vals.filter(v => v !== 0).length\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Transform pipeline\n// ---------------------------------------------------------------------------\n\ntype TransformFn = (data: ChartData) => ChartData\n\n/** Apply a chain of transforms to chart data. */\nexport function transformData(data: ChartData, ...transforms: TransformFn[]): ChartData {\n  return transforms.reduce((d, fn) => fn(d), data)\n}\n\n// ---------------------------------------------------------------------------\n// Pivot / transpose\n// ---------------------------------------------------------------------------\n\n/** Transpose rows and columns — series become labels and vice versa. */\nexport function pivotData(data: ChartData): ChartData {\n  const labels = getLabels(data)\n  const newLabels = data.series.map(s => s.name) as string[]\n  const newSeries: Series[] = (labels as unknown[]).map((label: unknown, i: number) => ({\n    name: String(label),\n    values: data.series.map(s => s.values[i] ?? 0),\n  }))\n\n  return { labels: newLabels, series: newSeries }\n}\n\n// ---------------------------------------------------------------------------\n// Slice / window\n// ---------------------------------------------------------------------------\n\n/** Take a slice of the data (for pagination or windowing). */\nexport function sliceData(data: ChartData, start: number, end?: number): ChartData {\n  const labels = getLabels(data)\n  return {\n    ...data,\n    labels: (labels as unknown[]).slice(start, end) as Labels,\n    series: data.series.map(s => ({\n      ...s,\n      values: s.values.slice(start, end),\n    })),\n  }\n}\n","import type { ChartData, RenderNode } from '../types'\nimport { rect, path, text } from '../render/tree'\nimport { PathBuilder } from '../render/tree'\n\n/**\n * DataZoom — interactive data range selection and filtering.\n *\n * Provides utilities to:\n * 1. Filter chart data to a visible window (applyDataZoom)\n * 2. Render a zoom slider control (renderDataZoomSlider)\n * 3. Manage zoom state (createDataZoomState)\n */\n\nexport interface DataZoomRange {\n  /** Start percentage 0..1 */\n  start: number\n  /** End percentage 0..1 */\n  end: number\n}\n\nexport interface DataZoomState {\n  range: DataZoomRange\n  setRange(start: number, end: number): void\n  reset(): void\n  zoomIn(factor?: number): void\n  zoomOut(factor?: number): void\n  panLeft(amount?: number): void\n  panRight(amount?: number): void\n}\n\nexport interface DataZoomSliderOptions {\n  x: number\n  y: number\n  width: number\n  height?: number\n  trackColor?: string\n  handleColor?: string\n  selectedColor?: string\n  showMinimap?: boolean\n}\n\n/** Create a DataZoom state manager. */\nexport function createDataZoomState(\n  initial?: Partial<DataZoomRange>,\n  onChange?: (range: DataZoomRange) => void,\n): DataZoomState {\n  const range: DataZoomRange = {\n    start: initial?.start ?? 0,\n    end: initial?.end ?? 1,\n  }\n\n  function clamp() {\n    range.start = Math.max(0, Math.min(range.start, 1))\n    range.end = Math.max(range.start + 0.01, Math.min(range.end, 1))\n    onChange?.(range)\n  }\n\n  return {\n    range,\n    setRange(start: number, end: number) {\n      range.start = start\n      range.end = end\n      clamp()\n    },\n    reset() {\n      range.start = 0\n      range.end = 1\n      onChange?.(range)\n    },\n    zoomIn(factor = 0.1) {\n      const center = (range.start + range.end) / 2\n      const halfSpan = (range.end - range.start) / 2 * (1 - factor)\n      range.start = center - halfSpan\n      range.end = center + halfSpan\n      clamp()\n    },\n    zoomOut(factor = 0.1) {\n      const center = (range.start + range.end) / 2\n      const halfSpan = (range.end - range.start) / 2 * (1 + factor)\n      range.start = center - halfSpan\n      range.end = center + halfSpan\n      clamp()\n    },\n    panLeft(amount = 0.05) {\n      const span = range.end - range.start\n      range.start = Math.max(0, range.start - amount)\n      range.end = range.start + span\n      clamp()\n    },\n    panRight(amount = 0.05) {\n      const span = range.end - range.start\n      range.end = Math.min(1, range.end + amount)\n      range.start = range.end - span\n      clamp()\n    },\n  }\n}\n\n/** Apply DataZoom range to filter chart data. */\nexport function applyDataZoom(data: ChartData, range: DataZoomRange): ChartData {\n  const labels = data.labels ?? []\n  const total = labels.length\n  if (total === 0) return data\n\n  const startIdx = Math.floor(range.start * total)\n  const endIdx = Math.ceil(range.end * total)\n\n  return {\n    ...data,\n    labels: (labels as unknown[]).slice(startIdx, endIdx) as ChartData['labels'],\n    series: data.series.map(s => ({\n      ...s,\n      values: s.values.slice(startIdx, endIdx),\n    })),\n  }\n}\n\n/** Render a DataZoom slider as RenderNode[]. */\nexport function renderDataZoomSlider(\n  data: ChartData,\n  range: DataZoomRange,\n  opts: DataZoomSliderOptions,\n): RenderNode[] {\n  const nodes: RenderNode[] = []\n  const h = opts.height ?? 30\n  const trackColor = opts.trackColor ?? '#e5e7eb'\n  const handleColor = opts.handleColor ?? '#6b7280'\n  const selectedColor = opts.selectedColor ?? 'rgba(59,130,246,0.2)'\n\n  // Track background\n  nodes.push(rect(opts.x, opts.y, opts.width, h, {\n    class: 'chartts-datazoom-track',\n    fill: trackColor,\n    rx: 4,\n    ry: 4,\n  }))\n\n  // Minimap sparkline\n  if (opts.showMinimap !== false && data.series[0]) {\n    const values = data.series[0].values\n    const max = Math.max(...values.map(Math.abs), 1)\n    const pb = new PathBuilder()\n\n    for (let i = 0; i < values.length; i++) {\n      const x = opts.x + (i / Math.max(values.length - 1, 1)) * opts.width\n      const y = opts.y + h - (Math.abs(values[i]!) / max) * (h - 4) - 2\n      if (i === 0) pb.moveTo(x, y)\n      else pb.lineTo(x, y)\n    }\n\n    nodes.push(path(pb.build(), {\n      class: 'chartts-datazoom-minimap',\n      fill: 'none',\n      stroke: handleColor,\n      strokeWidth: 1,\n      strokeOpacity: 0.4,\n    }))\n  }\n\n  // Selected region\n  const selX = opts.x + range.start * opts.width\n  const selW = (range.end - range.start) * opts.width\n\n  nodes.push(rect(selX, opts.y, selW, h, {\n    class: 'chartts-datazoom-selected',\n    fill: selectedColor,\n    rx: 2,\n    ry: 2,\n  }))\n\n  // Left handle\n  nodes.push(rect(selX - 3, opts.y + 4, 6, h - 8, {\n    class: 'chartts-datazoom-handle chartts-datazoom-handle-left',\n    fill: handleColor,\n    rx: 3,\n    ry: 3,\n    cursor: 'ew-resize',\n  }))\n\n  // Right handle\n  nodes.push(rect(selX + selW - 3, opts.y + 4, 6, h - 8, {\n    class: 'chartts-datazoom-handle chartts-datazoom-handle-right',\n    fill: handleColor,\n    rx: 3,\n    ry: 3,\n    cursor: 'ew-resize',\n  }))\n\n  // Range labels\n  const dlabels = data.labels ?? []\n  const total = dlabels.length\n  const startIdx = Math.floor(range.start * total)\n  const endIdx = Math.min(Math.ceil(range.end * total) - 1, total - 1)\n\n  if (total > 0) {\n    nodes.push(text(selX, opts.y + h + 12, String((dlabels as unknown[])[startIdx] ?? ''), {\n      class: 'chartts-datazoom-label',\n      fill: handleColor,\n      textAnchor: 'start',\n      fontSize: 9,\n    }))\n\n    nodes.push(text(selX + selW, opts.y + h + 12, String((dlabels as unknown[])[endIdx] ?? ''), {\n      class: 'chartts-datazoom-label',\n      fill: handleColor,\n      textAnchor: 'end',\n      fontSize: 9,\n    }))\n  }\n\n  return nodes\n}\n","/**\n * Interactive DataZoom slider widget.\n *\n * A real DOM element with draggable handles and minimap sparkline.\n * Lives outside the chart render loop — manages its own pointer events.\n *\n * Usage:\n * ```ts\n * const widget = createDataZoomWidget({\n *   data: fullData,\n *   onChange: (range) => {\n *     chart.setData(applyDataZoom(fullData, range))\n *   },\n * })\n * container.appendChild(widget.element)\n * ```\n */\n\nimport type { ChartData } from '../types'\nimport { createDataZoomState, type DataZoomState, type DataZoomRange } from './datazoom'\n\nexport interface DataZoomWidgetOptions {\n  /** Chart data (first series used for minimap sparkline). */\n  data: ChartData\n  /** Height of the slider in pixels. Default 40. */\n  height?: number\n  /** Initial visible range. Default { start: 0, end: 1 }. */\n  initialRange?: Partial<DataZoomRange>\n  /** Called when range changes via user interaction. */\n  onChange?: (range: DataZoomRange) => void\n  /** Track background color. */\n  trackColor?: string\n  /** Handle color. */\n  handleColor?: string\n  /** Selected region color. */\n  selectedColor?: string\n  /** Minimap line color. */\n  minimapColor?: string\n}\n\nexport interface DataZoomWidget {\n  /** The DOM element to insert into the page. */\n  element: HTMLElement\n  /** The state manager (setRange, reset, zoomIn, zoomOut, panLeft, panRight). */\n  state: DataZoomState\n  /** Update minimap sparkline data. */\n  setData(data: ChartData): void\n  /** Destroy and clean up. */\n  destroy(): void\n}\n\nexport function createDataZoomWidget(options: DataZoomWidgetOptions): DataZoomWidget {\n  const h = options.height ?? 40\n  const trackColor = options.trackColor ?? '#e5e7eb'\n  const handleColor = options.handleColor ?? '#6b7280'\n  const selectedColor = options.selectedColor ?? 'rgba(59,130,246,0.25)'\n  const minimapColor = options.minimapColor ?? '#9ca3af'\n\n  let currentData = options.data\n\n  // State\n  const state = createDataZoomState(\n    options.initialRange,\n    (range) => {\n      updateLayout()\n      options.onChange?.(range)\n    },\n  )\n\n  // -----------------------------------------------------------------------\n  // DOM construction\n  // -----------------------------------------------------------------------\n\n  const root = document.createElement('div')\n  root.className = 'chartts-datazoom-widget'\n  root.style.cssText = `position:relative;height:${h}px;width:100%;user-select:none;touch-action:none;`\n\n  // Track background\n  const track = document.createElement('div')\n  track.className = 'chartts-datazoom-track'\n  track.style.cssText = `position:absolute;inset:0;background:${trackColor};border-radius:4px;overflow:hidden;`\n  root.appendChild(track)\n\n  // Minimap canvas\n  const minimap = document.createElement('canvas')\n  minimap.className = 'chartts-datazoom-minimap'\n  minimap.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;'\n  track.appendChild(minimap)\n\n  // Left mask (dimmed area)\n  const maskLeft = document.createElement('div')\n  maskLeft.style.cssText = `position:absolute;top:0;left:0;height:100%;background:rgba(0,0,0,0.15);border-radius:4px 0 0 4px;pointer-events:none;`\n  root.appendChild(maskLeft)\n\n  // Right mask (dimmed area)\n  const maskRight = document.createElement('div')\n  maskRight.style.cssText = `position:absolute;top:0;right:0;height:100%;background:rgba(0,0,0,0.15);border-radius:0 4px 4px 0;pointer-events:none;`\n  root.appendChild(maskRight)\n\n  // Selected region (draggable for pan)\n  const selected = document.createElement('div')\n  selected.className = 'chartts-datazoom-selected'\n  selected.style.cssText = `position:absolute;top:0;height:100%;background:${selectedColor};cursor:grab;border-top:2px solid ${handleColor};border-bottom:2px solid ${handleColor};`\n  root.appendChild(selected)\n\n  // Left handle\n  const handleLeft = document.createElement('div')\n  handleLeft.className = 'chartts-datazoom-handle-left'\n  handleLeft.style.cssText = `position:absolute;top:2px;width:8px;height:${h - 4}px;background:${handleColor};border-radius:4px;cursor:ew-resize;z-index:2;transform:translateX(-50%);`\n  root.appendChild(handleLeft)\n\n  // Right handle\n  const handleRight = document.createElement('div')\n  handleRight.className = 'chartts-datazoom-handle-right'\n  handleRight.style.cssText = `position:absolute;top:2px;width:8px;height:${h - 4}px;background:${handleColor};border-radius:4px;cursor:ew-resize;z-index:2;transform:translateX(-50%);`\n  root.appendChild(handleRight)\n\n  // -----------------------------------------------------------------------\n  // Layout update\n  // -----------------------------------------------------------------------\n\n  function updateLayout(): void {\n    const w = root.clientWidth || root.offsetWidth || 300\n    const { start, end } = state.range\n\n    const leftPx = start * w\n    const rightPx = end * w\n    const selWidth = rightPx - leftPx\n\n    maskLeft.style.width = `${leftPx}px`\n    maskRight.style.width = `${w - rightPx}px`\n\n    selected.style.left = `${leftPx}px`\n    selected.style.width = `${selWidth}px`\n\n    handleLeft.style.left = `${leftPx}px`\n    handleRight.style.left = `${rightPx}px`\n  }\n\n  // -----------------------------------------------------------------------\n  // Minimap rendering\n  // -----------------------------------------------------------------------\n\n  function drawMinimap(): void {\n    const w = root.clientWidth || root.offsetWidth || 300\n    const dpr = window.devicePixelRatio || 1\n    minimap.width = Math.round(w * dpr)\n    minimap.height = Math.round(h * dpr)\n    minimap.style.width = `${w}px`\n    minimap.style.height = `${h}px`\n\n    const ctx = minimap.getContext('2d')\n    if (!ctx) return\n    ctx.setTransform(dpr, 0, 0, dpr, 0, 0)\n    ctx.clearRect(0, 0, w, h)\n\n    const series = currentData.series[0]\n    if (!series || series.values.length === 0) return\n\n    const values = series.values.filter(v => !isNaN(v))\n    if (values.length === 0) return\n\n    const max = Math.max(...values)\n    const min = Math.min(...values)\n    const range = max - min || 1\n    const pad = 4\n\n    ctx.beginPath()\n    ctx.strokeStyle = minimapColor\n    ctx.lineWidth = 1\n    ctx.globalAlpha = 0.5\n\n    let started = false\n    for (let i = 0; i < series.values.length; i++) {\n      const v = series.values[i]!\n      if (isNaN(v)) continue\n      const x = (i / Math.max(series.values.length - 1, 1)) * w\n      const y = h - pad - ((v - min) / range) * (h - pad * 2)\n      if (!started) { ctx.moveTo(x, y); started = true }\n      else ctx.lineTo(x, y)\n    }\n    ctx.stroke()\n\n    // Fill area below the line\n    if (started) {\n      ctx.lineTo(w, h)\n      ctx.lineTo(0, h)\n      ctx.closePath()\n      ctx.fillStyle = minimapColor\n      ctx.globalAlpha = 0.08\n      ctx.fill()\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Pointer interaction\n  // -----------------------------------------------------------------------\n\n  type DragMode = 'left' | 'right' | 'pan' | null\n  let dragMode: DragMode = null\n  let dragStartX = 0\n  let dragStartRange: DataZoomRange = { start: 0, end: 1 }\n\n  function toNormalized(clientX: number): number {\n    const r = root.getBoundingClientRect()\n    return Math.max(0, Math.min(1, (clientX - r.left) / r.width))\n  }\n\n  function onPointerDown(e: PointerEvent): void {\n    const target = e.target as HTMLElement\n    if (target === handleLeft || target.closest('.chartts-datazoom-handle-left')) {\n      dragMode = 'left'\n    } else if (target === handleRight || target.closest('.chartts-datazoom-handle-right')) {\n      dragMode = 'right'\n    } else if (target === selected || target.closest('.chartts-datazoom-selected')) {\n      dragMode = 'pan'\n      selected.style.cursor = 'grabbing'\n    } else {\n      // Click on track — jump to position\n      const pos = toNormalized(e.clientX)\n      const span = state.range.end - state.range.start\n      state.setRange(pos - span / 2, pos + span / 2)\n      return\n    }\n\n    dragStartX = e.clientX\n    dragStartRange = { ...state.range }\n    root.setPointerCapture(e.pointerId)\n    e.preventDefault()\n  }\n\n  function onPointerMove(e: PointerEvent): void {\n    if (!dragMode) return\n\n    const dx = e.clientX - dragStartX\n    const w = root.clientWidth || root.offsetWidth || 300\n    const delta = dx / w\n\n    if (dragMode === 'left') {\n      state.setRange(\n        Math.min(dragStartRange.start + delta, state.range.end - 0.02),\n        state.range.end,\n      )\n    } else if (dragMode === 'right') {\n      state.setRange(\n        state.range.start,\n        Math.max(dragStartRange.end + delta, state.range.start + 0.02),\n      )\n    } else if (dragMode === 'pan') {\n      const span = dragStartRange.end - dragStartRange.start\n      let newStart = dragStartRange.start + delta\n      let newEnd = dragStartRange.end + delta\n      // Clamp to bounds\n      if (newStart < 0) { newStart = 0; newEnd = span }\n      if (newEnd > 1) { newEnd = 1; newStart = 1 - span }\n      state.setRange(newStart, newEnd)\n    }\n  }\n\n  function onPointerUp(_e: PointerEvent): void {\n    dragMode = null\n    selected.style.cursor = 'grab'\n  }\n\n  function onDblClick(): void {\n    state.reset()\n  }\n\n  root.addEventListener('pointerdown', onPointerDown)\n  root.addEventListener('pointermove', onPointerMove)\n  root.addEventListener('pointerup', onPointerUp)\n  root.addEventListener('dblclick', onDblClick)\n\n  // -----------------------------------------------------------------------\n  // Resize observer\n  // -----------------------------------------------------------------------\n\n  let resizeObserver: ResizeObserver | null = null\n  if (typeof ResizeObserver !== 'undefined') {\n    resizeObserver = new ResizeObserver(() => {\n      updateLayout()\n      drawMinimap()\n    })\n    resizeObserver.observe(root)\n  }\n\n  // Initial draw (deferred to next frame so root has dimensions)\n  requestAnimationFrame(() => {\n    updateLayout()\n    drawMinimap()\n  })\n\n  // -----------------------------------------------------------------------\n  // Public API\n  // -----------------------------------------------------------------------\n\n  return {\n    element: root,\n    state,\n\n    setData(data: ChartData): void {\n      currentData = data\n      drawMinimap()\n    },\n\n    destroy(): void {\n      resizeObserver?.disconnect()\n      root.removeEventListener('pointerdown', onPointerDown)\n      root.removeEventListener('pointermove', onPointerMove)\n      root.removeEventListener('pointerup', onPointerUp)\n      root.removeEventListener('dblclick', onDblClick)\n      root.remove()\n    },\n  }\n}\n","import type { RenderNode, RenderAttrs } from '../types'\nimport { rect, circle, path, text, line, group } from '../render/tree'\n\n/**\n * Graphic — create custom SVG overlay elements for charts.\n *\n * Provides a declarative API to define arbitrary shapes, text, and groups\n * that can be overlaid on any chart. Positions can be absolute (px)\n * or relative (0..1 proportion of chart area).\n */\n\nexport interface GraphicElement {\n  type: 'rect' | 'circle' | 'path' | 'text' | 'line' | 'group' | 'image'\n  // Position (absolute px or relative 0..1 with position: 'relative')\n  x?: number\n  y?: number\n  // Sizing\n  width?: number\n  height?: number\n  r?: number\n  // Content\n  d?: string            // path data\n  content?: string      // text content\n  x2?: number           // line end x\n  y2?: number           // line end y\n  src?: string          // image source\n  // Children (for groups)\n  children?: GraphicElement[]\n  // Positioning mode\n  position?: 'absolute' | 'relative'\n  // Any SVG attributes\n  attrs?: Record<string, unknown>\n}\n\nexport interface GraphicArea {\n  x: number\n  y: number\n  width: number\n  height: number\n}\n\n/**\n * Convert an array of GraphicElement definitions into RenderNode[].\n * Use `area` to resolve relative positions.\n */\nexport function createGraphicElements(\n  elements: GraphicElement[],\n  area?: GraphicArea,\n): RenderNode[] {\n  return elements.map(el => resolveElement(el, area)).filter(Boolean) as RenderNode[]\n}\n\nfunction resolveElement(el: GraphicElement, area?: GraphicArea): RenderNode | null {\n  const resolve = (v: number | undefined, dim: 'x' | 'y'): number => {\n    if (v === undefined) return 0\n    if (el.position === 'relative' && area) {\n      return dim === 'x'\n        ? area.x + v * area.width\n        : area.y + v * area.height\n    }\n    return v\n  }\n\n  const resolveSize = (v: number | undefined, dim: 'w' | 'h'): number => {\n    if (v === undefined) return 0\n    if (el.position === 'relative' && area) {\n      return dim === 'w' ? v * area.width : v * area.height\n    }\n    return v\n  }\n\n  const attrs: RenderAttrs = {\n    class: 'chartts-graphic',\n    ...(el.attrs as RenderAttrs),\n  }\n\n  switch (el.type) {\n    case 'rect':\n      return rect(\n        resolve(el.x, 'x'),\n        resolve(el.y, 'y'),\n        resolveSize(el.width, 'w'),\n        resolveSize(el.height, 'h'),\n        attrs,\n      )\n\n    case 'circle':\n      return circle(\n        resolve(el.x, 'x'),\n        resolve(el.y, 'y'),\n        el.r ?? 10,\n        attrs,\n      )\n\n    case 'path':\n      return el.d ? path(el.d, attrs) : null\n\n    case 'text':\n      return text(\n        resolve(el.x, 'x'),\n        resolve(el.y, 'y'),\n        el.content ?? '',\n        attrs,\n      )\n\n    case 'line':\n      return line(\n        resolve(el.x, 'x'),\n        resolve(el.y, 'y'),\n        resolve(el.x2, 'x'),\n        resolve(el.y2, 'y'),\n        attrs,\n      )\n\n    case 'group': {\n      const children = (el.children ?? [])\n        .map(c => resolveElement(c, area))\n        .filter(Boolean) as RenderNode[]\n      return group(children, attrs)\n    }\n\n    case 'image':\n      return {\n        type: 'image' as unknown as RenderNode['type'],\n        attrs: {\n          ...attrs,\n          href: el.src ?? '',\n          x: resolve(el.x, 'x'),\n          y: resolve(el.y, 'y'),\n          width: resolveSize(el.width, 'w'),\n          height: resolveSize(el.height, 'h'),\n        },\n      } as unknown as RenderNode\n\n    default:\n      return null\n  }\n}\n\n/**\n * Convenience: create a horizontal guideline.\n */\nexport function horizontalLine(\n  y: number,\n  area: GraphicArea,\n  attrs?: RenderAttrs,\n): RenderNode {\n  return line(area.x, y, area.x + area.width, y, {\n    class: 'chartts-graphic-guideline',\n    stroke: '#6b7280',\n    strokeWidth: 1,\n    strokeDasharray: '4,3',\n    ...attrs,\n  })\n}\n\n/**\n * Convenience: create a vertical guideline.\n */\nexport function verticalLine(\n  x: number,\n  area: GraphicArea,\n  attrs?: RenderAttrs,\n): RenderNode {\n  return line(x, area.y, x, area.y + area.height, {\n    class: 'chartts-graphic-guideline',\n    stroke: '#6b7280',\n    strokeWidth: 1,\n    strokeDasharray: '4,3',\n    ...attrs,\n  })\n}\n\n/**\n * Convenience: create a text annotation at a position.\n */\nexport function annotation(\n  x: number, y: number,\n  content: string,\n  attrs?: RenderAttrs,\n): RenderNode {\n  return text(x, y, content, {\n    class: 'chartts-graphic-annotation',\n    fill: '#374151',\n    fontSize: 11,\n    textAnchor: 'middle',\n    dominantBaseline: 'auto',\n    ...attrs,\n  })\n}\n","import type { RenderNode, RenderAttrs } from '../types'\n\n/**\n * Rich Text — parse simple markup into multi-styled text elements.\n *\n * Supports a simple markup syntax:\n * - {b}bold{/b} or **bold**\n * - {i}italic{/i} or *italic*\n * - {color:red}colored{/color}\n * - {size:16}sized{/size}\n * - {style:name}custom{/style} — uses named styles\n *\n * Returns a RenderNode (text element with tspan children).\n */\n\nexport interface RichTextStyle {\n  fontWeight?: number | string\n  fontStyle?: string\n  fill?: string\n  fontSize?: number | string\n  fontFamily?: string\n  textDecoration?: string\n}\n\nexport interface RichTextOptions {\n  /** Default text attributes */\n  defaults?: RichTextStyle\n  /** Named styles for {style:name} syntax */\n  styles?: Record<string, RichTextStyle>\n  /** X position */\n  x?: number\n  /** Y position */\n  y?: number\n  /** Additional attributes for the parent text element */\n  attrs?: RenderAttrs\n}\n\ninterface TextSpan {\n  text: string\n  style: RichTextStyle\n}\n\n/**\n * Parse rich text markup and return a RenderNode with tspan children.\n */\nexport function parseRichText(\n  input: string,\n  options: RichTextOptions = {},\n): RenderNode {\n  const spans = parse(input, options.defaults ?? {}, options.styles ?? {})\n\n  // Build tspan children\n  const tspans: RenderNode[] = spans.map(span => ({\n    type: 'tspan' as unknown as RenderNode['type'],\n    attrs: {\n      ...(span.style.fontWeight ? { fontWeight: span.style.fontWeight } : {}),\n      ...(span.style.fontStyle ? { fontStyle: span.style.fontStyle } : {}),\n      ...(span.style.fill ? { fill: span.style.fill } : {}),\n      ...(span.style.fontSize ? { fontSize: span.style.fontSize } : {}),\n      ...(span.style.fontFamily ? { fontFamily: span.style.fontFamily } : {}),\n      ...(span.style.textDecoration ? { textDecoration: span.style.textDecoration } : {}),\n    },\n    children: [],\n    text: span.text,\n  } as unknown as RenderNode))\n\n  return {\n    type: 'text',\n    x: options.x ?? 0,\n    y: options.y ?? 0,\n    text: '',\n    attrs: {\n      class: 'chartts-richtext',\n      ...options.attrs,\n    },\n    children: tspans,\n  } as unknown as RenderNode\n}\n\n/**\n * Format a value with rich text markup.\n * E.g., richLabel(\"Revenue\", 1234, { valueColor: \"#3b82f6\" })\n * → \"{b}Revenue{/b}: {color:#3b82f6}1,234{/color}\"\n */\nexport function richLabel(\n  label: string,\n  value: number | string,\n  opts?: { valueColor?: string; valueWeight?: string },\n): string {\n  const color = opts?.valueColor ?? '#3b82f6'\n  const weight = opts?.valueWeight ?? ''\n  const valueStr = typeof value === 'number' ? formatNum(value) : value\n  const weightTag = weight ? `{b}${valueStr}{/b}` : valueStr\n  return `{b}${label}{/b}: {color:${color}}${weightTag}{/color}`\n}\n\n// ---------------------------------------------------------------------------\n// Parser\n// ---------------------------------------------------------------------------\n\nfunction parse(\n  input: string,\n  defaults: RichTextStyle,\n  namedStyles: Record<string, RichTextStyle>,\n): TextSpan[] {\n  const spans: TextSpan[] = []\n  const styleStack: RichTextStyle[] = [{ ...defaults }]\n\n  // Pattern matches: {b}, {/b}, {i}, {/i}, {color:X}, {/color}, {size:X}, {/size}, {style:X}, {/style}, **X**, *X*\n  const regex = /\\{(b|\\/b|i|\\/i|color:([^}]+)|\\/color|size:([^}]+)|\\/size|style:([^}]+)|\\/style)\\}|\\*\\*(.+?)\\*\\*|\\*(.+?)\\*/g\n\n  let lastIndex = 0\n  let match: RegExpExecArray | null\n\n  while ((match = regex.exec(input)) !== null) {\n    // Text before this match\n    if (match.index > lastIndex) {\n      spans.push({ text: input.slice(lastIndex, match.index), style: currentStyle(styleStack) })\n    }\n\n    const tag = match[1]\n    const boldShorthand = match[5]\n    const italicShorthand = match[6]\n\n    if (boldShorthand) {\n      spans.push({ text: boldShorthand, style: { ...currentStyle(styleStack), fontWeight: 700 } })\n    } else if (italicShorthand) {\n      spans.push({ text: italicShorthand, style: { ...currentStyle(styleStack), fontStyle: 'italic' } })\n    } else if (tag === 'b') {\n      styleStack.push({ ...currentStyle(styleStack), fontWeight: 700 })\n    } else if (tag === '/b') {\n      popStyle(styleStack)\n    } else if (tag === 'i') {\n      styleStack.push({ ...currentStyle(styleStack), fontStyle: 'italic' })\n    } else if (tag === '/i') {\n      popStyle(styleStack)\n    } else if (tag?.startsWith('color:')) {\n      styleStack.push({ ...currentStyle(styleStack), fill: match[2] })\n    } else if (tag === '/color') {\n      popStyle(styleStack)\n    } else if (tag?.startsWith('size:')) {\n      styleStack.push({ ...currentStyle(styleStack), fontSize: parseFloat(match[3]!) || 12 })\n    } else if (tag === '/size') {\n      popStyle(styleStack)\n    } else if (tag?.startsWith('style:')) {\n      const named = namedStyles[match[4]!]\n      if (named) {\n        styleStack.push({ ...currentStyle(styleStack), ...named })\n      }\n    } else if (tag === '/style') {\n      popStyle(styleStack)\n    }\n\n    lastIndex = match.index + match[0].length\n  }\n\n  // Remaining text\n  if (lastIndex < input.length) {\n    spans.push({ text: input.slice(lastIndex), style: currentStyle(styleStack) })\n  }\n\n  return spans\n}\n\nfunction currentStyle(stack: RichTextStyle[]): RichTextStyle {\n  return { ...stack[stack.length - 1]! }\n}\n\nfunction popStyle(stack: RichTextStyle[]): void {\n  if (stack.length > 1) stack.pop()\n}\n\nfunction formatNum(n: number): string {\n  return n.toLocaleString()\n}\n","import type { ChartTypePlugin, ScaleFactory, ScaleType } from '../types'\n\n/**\n * @deprecated Use the `CHART_TYPES` map from `@chartts/core` instead.\n * This registry is unused internally and will be removed in a future version.\n */\n\nconst charts = new Map<string, ChartTypePlugin>()\nconst scales = new Map<ScaleType, ScaleFactory>()\n\n/** @deprecated Use `CHART_TYPES` map instead. */\nexport function registerChart(plugin: ChartTypePlugin): void {\n  if (charts.has(plugin.type)) {\n    throw new Error(`[chartts] Chart type \"${plugin.type}\" already registered.`)\n  }\n  charts.set(plugin.type, plugin)\n}\n\n/** @deprecated Use `CHART_TYPES` map instead. */\nexport function getChart(type: string): ChartTypePlugin {\n  const plugin = charts.get(type)\n  if (!plugin) {\n    const available = Array.from(charts.keys()).join(', ') || 'none'\n    throw new Error(`[chartts] Unknown chart type \"${type}\". Registered: ${available}`)\n  }\n  return plugin\n}\n\n/** @deprecated */\nexport function registerScale(type: ScaleType, factory: ScaleFactory): void {\n  scales.set(type, factory)\n}\n\n/** @deprecated */\nexport function getScaleFactory(type: ScaleType): ScaleFactory {\n  const factory = scales.get(type)\n  if (!factory) {\n    throw new Error(`[chartts] Unknown scale type \"${type}\".`)\n  }\n  return factory\n}\n\n/** @deprecated */\nexport function clearRegistry(): void {\n  charts.clear()\n  scales.clear()\n}\n","import type { Scale, Tick } from '../types'\n\nexport interface TimeScaleOpts {\n  domain?: [number | Date, number | Date]\n  range?: [number, number]\n  format?: (value: Date) => string\n}\n\nconst S = 1000, M = 60 * S, H = 60 * M, D = 24 * H, W = 7 * D, MO = 30 * D, Y = 365 * D\n\nconst INTERVALS: { ms: number; fmt: (d: Date) => string }[] = [\n  { ms: S,      fmt: fmtTime },\n  { ms: 5 * S,  fmt: fmtTime },\n  { ms: 15 * S, fmt: fmtTime },\n  { ms: 30 * S, fmt: fmtTime },\n  { ms: M,      fmt: fmtTime },\n  { ms: 5 * M,  fmt: fmtTime },\n  { ms: 15 * M, fmt: fmtTime },\n  { ms: H,      fmt: fmtTime },\n  { ms: 3 * H,  fmt: fmtTime },\n  { ms: 6 * H,  fmt: fmtTime },\n  { ms: 12 * H, fmt: fmtTime },\n  { ms: D,      fmt: fmtDate },\n  { ms: W,      fmt: fmtDate },\n  { ms: MO,     fmt: fmtMonthYear },\n  { ms: 3 * MO, fmt: fmtMonthYear },\n  { ms: 6 * MO, fmt: fmtMonthYear },\n  { ms: Y,      fmt: fmtYear },\n  { ms: 5 * Y,  fmt: fmtYear },\n  { ms: 10 * Y, fmt: fmtYear },\n]\n\nexport function createTimeScale(opts?: TimeScaleOpts): Scale {\n  let dMin = ts(opts?.domain?.[0] ?? 0)\n  let dMax = ts(opts?.domain?.[1] ?? Date.now())\n  let rMin = opts?.range?.[0] ?? 0\n  let rMax = opts?.range?.[1] ?? 1\n  const customFmt = opts?.format\n\n  function map(value: number | string | Date): number {\n    const v = ts(value)\n    const span = dMax - dMin\n    if (span === 0) return (rMin + rMax) / 2\n    return rMin + ((v - dMin) / span) * (rMax - rMin)\n  }\n\n  function invert(px: number): number {\n    const span = rMax - rMin\n    if (span === 0) return (dMin + dMax) / 2\n    return dMin + ((px - rMin) / span) * (dMax - dMin)\n  }\n\n  function ticks(count = 6): Tick[] {\n    const span = dMax - dMin\n    if (span <= 0) return []\n\n    const target = span / count\n    const interval = INTERVALS.find((i) => i.ms >= target) ?? INTERVALS[INTERVALS.length - 1]!\n    const fmt = customFmt ?? interval.fmt\n    const result: Tick[] = []\n    const start = Math.ceil(dMin / interval.ms) * interval.ms\n\n    for (let t = start; t <= dMax; t += interval.ms) {\n      const d = new Date(t)\n      result.push({ value: d, position: map(t), label: fmt(d) })\n    }\n    return result\n  }\n\n  return {\n    map,\n    invert,\n    ticks,\n    setDomain(min, max) { dMin = ts(min); dMax = ts(max) },\n    setRange(min, max) { rMin = min; rMax = max },\n    getDomain() { return [new Date(dMin), new Date(dMax)] },\n    getRange() { return [rMin, rMax] },\n    bandwidth() { return 0 },\n  }\n}\n\nfunction ts(v: number | string | Date): number {\n  return v instanceof Date ? v.getTime() : typeof v === 'string' ? new Date(v).getTime() : v\n}\n\nconst MONTHS = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] as const\n\nfunction pad(n: number): string { return n < 10 ? `0${n}` : String(n) }\nfunction fmtTime(d: Date): string { return `${pad(d.getHours())}:${pad(d.getMinutes())}` }\nfunction fmtDate(d: Date): string { return `${MONTHS[d.getMonth()]} ${d.getDate()}` }\nfunction fmtMonthYear(d: Date): string { return `${MONTHS[d.getMonth()]} ${d.getFullYear()}` }\nfunction fmtYear(d: Date): string { return String(d.getFullYear()) }\n"]}