minerva-design 1.17.2 → 1.18.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 (69) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/angular/fesm2022/minerva-angular.mjs +27 -25
  3. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  4. package/dist/angular/types/minerva-angular.d.ts +1 -1
  5. package/dist/charts/engine/chart.cjs +1 -1
  6. package/dist/charts/engine/chart.cjs.map +1 -1
  7. package/dist/charts/engine/chart.js +309 -301
  8. package/dist/charts/engine/chart.js.map +1 -1
  9. package/dist/charts/engine/overlay.cjs +1 -1
  10. package/dist/charts/engine/overlay.cjs.map +1 -1
  11. package/dist/charts/engine/overlay.d.cts +5 -0
  12. package/dist/charts/engine/overlay.d.ts +5 -0
  13. package/dist/charts/engine/overlay.js +87 -69
  14. package/dist/charts/engine/overlay.js.map +1 -1
  15. package/dist/charts/engine/scene.cjs +1 -1
  16. package/dist/charts/engine/scene.cjs.map +1 -1
  17. package/dist/charts/engine/scene.d.cts +5 -0
  18. package/dist/charts/engine/scene.d.ts +5 -0
  19. package/dist/charts/engine/scene.js +32 -32
  20. package/dist/charts/engine/scene.js.map +1 -1
  21. package/dist/charts/engine/types.d.cts +14 -0
  22. package/dist/charts/engine/types.d.ts +14 -0
  23. package/dist/charts/react/Chart.cjs +1 -1
  24. package/dist/charts/react/Chart.cjs.map +1 -1
  25. package/dist/charts/react/Chart.d.cts +4 -2
  26. package/dist/charts/react/Chart.d.ts +4 -2
  27. package/dist/charts/react/Chart.js +42 -42
  28. package/dist/charts/react/Chart.js.map +1 -1
  29. package/dist/charts/react/charts.cjs +1 -1
  30. package/dist/charts/react/charts.cjs.map +1 -1
  31. package/dist/charts/react/charts.js +320 -231
  32. package/dist/charts/react/charts.js.map +1 -1
  33. package/dist/charts/react/types.d.cts +8 -2
  34. package/dist/charts/react/types.d.ts +8 -2
  35. package/dist/core/contracts.cjs +1 -1
  36. package/dist/core/contracts.cjs.map +1 -1
  37. package/dist/core/contracts.js +1 -1
  38. package/dist/core/contracts.js.map +1 -1
  39. package/dist/native/charts/src/engine/overlay.cjs +1 -1
  40. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  41. package/dist/native/charts/src/engine/overlay.js +82 -65
  42. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  43. package/dist/native/charts/src/engine/scene.cjs +1 -1
  44. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  45. package/dist/native/charts/src/engine/scene.js +32 -32
  46. package/dist/native/charts/src/engine/scene.js.map +1 -1
  47. package/dist/react/components/QuadrantTaskBoard/QuadrantTaskBoard.cjs +1 -1
  48. package/dist/react/components/QuadrantTaskBoard/QuadrantTaskBoard.cjs.map +1 -1
  49. package/dist/react/components/QuadrantTaskBoard/QuadrantTaskBoard.js +14 -8
  50. package/dist/react/components/QuadrantTaskBoard/QuadrantTaskBoard.js.map +1 -1
  51. package/dist/react/components/QuadrantTaskBoard/quadrantTaskBoard.module.scss.cjs +1 -1
  52. package/dist/react/components/QuadrantTaskBoard/quadrantTaskBoard.module.scss.cjs.map +1 -1
  53. package/dist/react/components/QuadrantTaskBoard/quadrantTaskBoard.module.scss.js +16 -15
  54. package/dist/react/components/QuadrantTaskBoard/quadrantTaskBoard.module.scss.js.map +1 -1
  55. package/dist/react/style.css +1 -1
  56. package/dist/react/styles/quadrant-task-board.css +1 -1
  57. package/dist/taro/index.js +1514 -1496
  58. package/dist/taro/style.css +22 -0
  59. package/dist/uni/style.css +22 -0
  60. package/dist/vue/components/QuadrantTaskBoard/QuadrantTaskBoard.vue.js.map +1 -1
  61. package/dist/vue/components/QuadrantTaskBoard/QuadrantTaskBoard.vue_vue_type_script_setup_true_lang.js +14 -8
  62. package/dist/vue/components/QuadrantTaskBoard/QuadrantTaskBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/weapp/charts/canvas.js +35 -7
  64. package/dist/weapp/controls.wxss +22 -0
  65. package/dist/web-components/components/quadrant-task-board/quadrant-task-board.js +7 -7
  66. package/dist/web-components/components/quadrant-task-board/quadrant-task-board.js.map +1 -1
  67. package/dist/web-components/styles/QuadrantTaskBoard/quadrantTaskBoard.css.js +1 -1
  68. package/dist/web-components/styles/QuadrantTaskBoard/quadrantTaskBoard.css.js.map +1 -1
  69. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chart.cjs","names":["createChartDom","readTheme","buildModel","clampRange","sameRange","itemsSignature","resolveAnnotations","resolveDependencies","legendShown","colorLegend","legendShape","swatch","chartAriaLabel","font","layoutChart","drawForeground","collectPointLabels","connectorSegments","dependencyArrows","cellStyleKey","buildItems","hitTest","sameHover","tooltipContent","hoverRect","tooltipObstacles","crosshairAt","hoverMarks","createBand","styleElement","PLOT_BACKGROUND","prefersReducedMotion","liftedBarRect","liftShadow","CELL_LIFT","CELL_ACCENT","createMarker","markerHalo","heatPosition","pointOf","createLabelPill","dragPreview","createDragDot","createDragPlaceholder","createDropTarget","dragDotShadow","viewToValues","toData","zoomRange","fromPlotX","fromPlotY","panRange","wheelFactor","lowerBound","createScales","hoverItemOf","themeColorsChanged","watchTheme","watchLocale","createRenderer","createDataCanvas","followDefaultRenderer","viewFromValues","toScreen","toPlotX","toPlotY","require_data","require_tooltip","require_dom","require_layout","require_overlay","require_locale","require_labels","require_model","require_scene","require_drag_preview","require_hover_rect","require_items","require_detect","require_follow","require_signature","require_theme","require_viewport","mid","r","withRect","a","b","x","y","copyView","v","createChart","doc","container","win","dom","cache","hidden","listeners","options","initialOptions","theme","model","view","zoomed","origin","items","itemsDirty","version","annotations","dependencies","scales","xTicks","yTicks","y2Ticks","renderer","rendererToken","destroyed","frameId","hover","lastPlot","pointDrag","dragEls","settling","clearDragOnFrame","placedLabels","labelChip","labelChipBox","drag","markers","bands","cells","guides","lifts","liftClip","veil","legendCaret","cellKey","themeVersion","itemsSignatureKey","legendKey","shownMarks","shownTip","resolveReady","ready","resolve","emit","type","listener","event","interactionOf","interactionValue","interaction","value","o","tooltipOptions","invalidate","frame","rebuild","zoom","base","minSpan","signature","index","renderLegend","updateAccessibility","ensureOrigin","far","legendOption","named","s","show","config","toggle","bottom","colors","key","l","focused","ramp","first","last","bar","tick","text","el","item","keyboard","sizeCanvas","w","width","dpr","h","height","canvas","transformFor","scale","range","offset","reverse","bg","fg","layout","rect","plotRect","transposed","cw","plot","ch","bw","bh","density","xScale","xOffset","yScale","yOffset","renderHover","hideDrag","renderDrag","hitAt","px","py","p","draggableAt","it","setHover","changed","next","tooltipNode","custom","content","fragment","header","sub","swatches","row","grid","cell","n","pooled","pool","i","make","parent","sc","renderMarks","tip","markerCount","bandCount","cellCount","guideCount","liftCount","veiled","renderLegendCaret","guide","line","marks","lifted","mark","mixed","series","liftParent","prev","fresh","vertical","ring","shadow","thick","k","prevMarker","freshMarker","renderLabelChip","caret","found","label","d","showDrag","dot","right","pill","live","size","placeholder","target","onDragKey","cancelDrag","releasePointer","id","setViewInternal","notify","zoomAt","at","factor","localPoint","inPlot","dataAt","cx","cy","onPointerMove","dx","dy","from","to","event2","onPointerDown","draggable","onPointerUp","hit","moved","onPointerLeave","onWheel","modifier","onDoubleClick","resetZoom","moveFocus","current","step","count","current2","span","leadItem","onKeyDown","center","onFocus","visible","onBlur","stage","resizeObserver","refreshTheme","unwatchTheme","unwatchLocale","initRenderer","token","kind","exclude","unfollowDefault","previous","set"],"sources":["../../../../charts/src/engine/chart.ts"],"sourcesContent":["// createChart: mounts a chart in a container and keeps it in sync with its\n// options, its size, the theme and the user's interactions.\n\nimport type { AxisTicks } from \"./axis\";\nimport { lowerBound } from \"./data\";\nimport {\n createBand,\n createChartDom,\n createDataCanvas,\n createDragDot,\n createDragPlaceholder,\n createDropTarget,\n createLabelPill,\n createMarker,\n CELL_ACCENT,\n CELL_LIFT,\n dragDotShadow,\n liftShadow,\n markerHalo,\n PLOT_BACKGROUND,\n playLift,\n styleElement,\n swatch,\n} from \"./dom\";\nimport { dragPreview, type DragPreview } from \"./drag-preview\";\nimport { hoverRect, tooltipObstacles } from \"./hover-rect\";\nimport {\n buildItems,\n cellStyleKey,\n type Origin,\n type PixelDensity,\n} from \"./items\";\nimport { chartAriaLabel } from \"./labels\";\nimport {\n createScales,\n toData,\n toScreen,\n type Rect,\n type Scales,\n} from \"./layout\";\nimport { watchLocale } from \"./locale\";\nimport {\n buildModel,\n fromPlotX,\n fromPlotY,\n heatPosition,\n toPlotX,\n toPlotY,\n viewFromValues,\n viewToValues,\n type ChartModel,\n type DataCache,\n} from \"./model\";\nimport {\n drawBackground,\n drawForeground,\n font,\n type PointLabel,\n type ResolvedAnnotation,\n} from \"./overlay\";\nimport { createRenderer } from \"./renderers/detect\";\nimport { followDefaultRenderer } from \"./renderers/follow\";\nimport type { ChartRenderer, RenderItem } from \"./renderers/types\";\nimport {\n collectPointLabels,\n colorLegend,\n connectorSegments,\n crosshairAt,\n dependencyArrows,\n hitTest,\n hoverItemOf,\n hoverMarks,\n layoutChart,\n legendShape,\n legendShown,\n liftedBarRect,\n pointOf,\n resolveAnnotations,\n resolveDependencies,\n sameHover,\n tooltipContent,\n type ResolvedDependency,\n} from \"./scene\";\nimport { itemsSignature } from \"./signature\";\nimport {\n readTheme,\n themeColorsChanged,\n watchTheme,\n type ChartTheme,\n} from \"./theme\";\nimport {\n positionTooltip,\n prefersReducedMotion,\n releaseTooltip,\n themeTooltip,\n} from \"./tooltip\";\nimport type {\n ChartEventMap,\n ChartHoverEvent,\n ChartHoverItem,\n ChartInstance,\n ChartInteractionOptions,\n ChartOptions,\n ChartRendererKind,\n ChartTooltipOptions,\n ChartView,\n} from \"./types\";\nimport {\n clampRange,\n panRange,\n sameRange,\n wheelFactor,\n zoomRange,\n type Range,\n} from \"./viewport\";\n\ninterface HoverState {\n event: ChartHoverEvent;\n /** Tooltip anchor in stage pixels */\n anchorX: number;\n anchorY: number;\n keyboard: boolean;\n}\n\nconst mid = (r: Range) => (r[0] + r[1]) / 2;\n/** The box around two boxes (either may be missing) */\nconst withRect = (a: Rect | null, b: Rect | null): Rect | null => {\n if (!a || !b) return a ?? b;\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n return {\n x,\n y,\n width: Math.max(a.x + a.width, b.x + b.width) - x,\n height: Math.max(a.y + a.height, b.y + b.height) - y,\n };\n};\nconst copyView = (v: ChartView): ChartView => ({\n x: [v.x[0], v.x[1]],\n y: [v.y[0], v.y[1]],\n});\n\n/**\n * Creates a chart inside `container` (which must have a size). The data\n * layer uses WebGPU when available, then WebGL2, then WebGL, then Canvas2D.\n */\nexport const createChart = (\n container: HTMLElement,\n initialOptions: ChartOptions,\n): ChartInstance => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n const dom = createChartDom(container);\n const cache: DataCache = new Map();\n const hidden = new Set<string>();\n const listeners: {\n [K in keyof ChartEventMap]?: Set<(event: ChartEventMap[K]) => void>;\n } = {};\n\n let options = initialOptions;\n let theme: ChartTheme = readTheme(dom.root, options.palette);\n themeTooltip(dom.tooltip, theme);\n let model: ChartModel;\n let view: ChartView = { x: [0, 1], y: [0, 1] };\n let zoomed = false;\n let origin: Origin = { x: 0, y: 0 };\n let items: RenderItem[] = [];\n let itemsDirty = true;\n let version = 0;\n let annotations: ResolvedAnnotation[] = [];\n let dependencies: ResolvedDependency[] = [];\n let scales: Scales | null = null;\n let xTicks: AxisTicks | null = null;\n let yTicks: AxisTicks | null = null;\n let y2Ticks: AxisTicks | null = null;\n let renderer: ChartRenderer | null = null;\n let rendererToken = 0;\n let destroyed = false;\n let frameId = 0;\n let hover: HoverState | null = null;\n let lastPlot = \"\";\n let pointDrag: {\n id: number;\n item: ChartHoverItem;\n /** Where the pointer went down */\n x: number;\n y: number;\n /** Where the pointer is */\n px: number;\n py: number;\n moved: boolean;\n } | null = null;\n /** Elements of the drag preview, created on the first drag */\n let dragEls: {\n dot: HTMLDivElement;\n pill: HTMLDivElement;\n placeholder: HTMLDivElement;\n target: HTMLDivElement;\n } | null = null;\n /**\n * A dropped point stays where it was released until the new data is\n * drawn (or briefly, when the drop is not applied)\n */\n let settling: {\n item: ChartHoverItem;\n timer: ReturnType<typeof setTimeout>;\n } | null = null;\n let clearDragOnFrame = false;\n /** Point labels drawn on the foreground (for the hovered label chip) */\n let placedLabels: { label: PointLabel; box: Rect }[] = [];\n let labelChip: HTMLDivElement | null = null;\n /** Where the label chip is shown (the tooltip keeps off it) */\n let labelChipBox: Rect | null = null;\n let drag: {\n id: number;\n x: number;\n y: number;\n view: ChartView;\n moved: boolean;\n } | null = null;\n const markers: HTMLDivElement[] = [];\n const bands: HTMLDivElement[] = [];\n const cells: HTMLDivElement[] = [];\n const guides: HTMLDivElement[] = [];\n /** Lifted hovered bars, in `liftClip` */\n const lifts: HTMLDivElement[] = [];\n /** Clips the lifted bars to the plot, like the data layer */\n let liftClip: HTMLDivElement | null = null;\n /** Dims the plot behind lifted bars (focus on the hovered one) */\n let veil: HTMLDivElement | null = null;\n /** Hover caret of the color legend (heatmaps) */\n let legendCaret: HTMLDivElement | null = null;\n let cellKey = \"\";\n let themeVersion = 0;\n let itemsSignatureKey = \"\";\n let legendKey = \"\";\n /** What the hover layer shows: kept while the hovered points are the same */\n let shownMarks: {\n event: ChartHoverEvent;\n model: ChartModel;\n scales: Scales;\n } | null = null;\n let shownTip: {\n event: ChartHoverEvent;\n model: ChartModel;\n yTicks: AxisTicks | null;\n width: number;\n height: number;\n } | null = null;\n\n let resolveReady: (kind: ChartRendererKind | null) => void = () => {};\n const ready = new Promise<ChartRendererKind | null>((resolve) => {\n resolveReady = resolve;\n });\n\n const emit = <K extends keyof ChartEventMap>(\n type: K,\n event: ChartEventMap[K],\n ) => {\n listeners[type]?.forEach((listener) => listener(event));\n };\n\n let interactionOf: ChartOptions | null = null;\n let interactionValue: Required<ChartInteractionOptions> | null = null;\n /** Resolved `interaction` option (cached: read on every pointer move) */\n const interaction = (): Required<ChartInteractionOptions> | null => {\n if (interactionOf === options) return interactionValue;\n interactionOf = options;\n const value = options.interaction;\n if (value === false) return (interactionValue = null);\n const o = typeof value === \"object\" ? value : {};\n return (interactionValue = {\n zoom: o.zoom ?? true,\n wheel: o.wheel ?? \"modifier\",\n pan: o.pan ?? true,\n keyboard: o.keyboard ?? true,\n dragPoints: o.dragPoints ?? false,\n dropTargets: o.dropTargets ?? false,\n dragLabel: o.dragLabel ?? true,\n });\n };\n\n const tooltipOptions = (): ChartTooltipOptions | null =>\n options.tooltip === false\n ? null\n : typeof options.tooltip === \"object\"\n ? options.tooltip\n : {};\n\n const invalidate = () => {\n if (destroyed || frameId) return;\n frameId = win?.requestAnimationFrame\n ? win.requestAnimationFrame(frame)\n : (setTimeout(frame, 16) as unknown as number);\n };\n\n // ---------------------------------------------------------------- model\n\n const rebuild = () => {\n model = buildModel(options, theme, hidden, cache);\n const { base, zoom, minSpan } = model;\n if (!zoomed) {\n view = copyView(base);\n } else {\n view = {\n x: zoom.x ? clampRange(view.x, base.x, minSpan.x) : [...base.x],\n y: zoom.y ? clampRange(view.y, base.y, minSpan.y) : [...base.y],\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n }\n // Unchanged data and styles (e.g. a React re-render): keep the GPU\n // buffers and the hover state\n const signature = itemsSignature(\n model,\n themeVersion,\n (index) => options.series[index]?.stack,\n );\n if (signature !== itemsSignatureKey) {\n itemsSignatureKey = signature;\n origin = { x: mid(base.x), y: mid(base.y) };\n itemsDirty = true;\n if (hover && !hover.keyboard) {\n hover = null;\n // listeners tracking the hovered point (an info card shown while\n // nothing is hovered) would otherwise keep the old one\n emit(\"hover\", null);\n }\n }\n // new data after a drop: the dropped point is drawn where it landed\n if (settling) {\n clearTimeout(settling.timer);\n settling = null;\n clearDragOnFrame = true;\n }\n annotations = resolveAnnotations(\n options.annotations,\n theme,\n model.y.type === \"log\" ? Math.log10 : undefined,\n model.x.type === \"log\" ? Math.log10 : undefined,\n );\n dependencies = resolveDependencies(options.dependencies, theme);\n renderLegend();\n updateAccessibility();\n invalidate();\n };\n\n /** float32 positions lose precision far from the origin: re-center when deeply zoomed */\n const ensureOrigin = () => {\n const far = (r: Range, o: number) =>\n Math.max(Math.abs(r[0] - o), Math.abs(r[1] - o)) > (r[1] - r[0]) * 2000;\n if (far(view.x, origin.x) || far(view.y, origin.y)) {\n origin = { x: mid(view.x), y: mid(view.y) };\n itemsDirty = true;\n }\n };\n\n // --------------------------------------------------------------- legend\n\n const renderLegend = () => {\n const legendOption = options.legend;\n const named = options.series.filter((s) => s.name).length;\n const show = legendShown(legendOption, model, named);\n const config = typeof legendOption === \"object\" ? legendOption : {};\n const toggle = config.toggle ?? true;\n const bottom = config.position === \"bottom\";\n const colors = show ? colorLegend(model) : null;\n // rebuild the DOM only when what it shows changed\n let key = `${show}|${bottom}|${toggle}`;\n if (colors) {\n key += `\\n${colors.stops.join(\";\")}|${colors.labels.map((l) => l.text).join(\";\")}`;\n } else if (show) {\n for (const s of model.series)\n key += `\\n${s.id}\\u0001${s.name}\\u0001${s.colorCss}\\u0001${legendShape(s.type)}\\u0001${s.hidden}`;\n }\n if (key === legendKey) return;\n legendKey = key;\n const focused = [...dom.legend.children].indexOf(\n doc.activeElement as Element,\n );\n dom.legend.replaceChildren();\n legendCaret = null;\n dom.legend.style.display = show ? \"flex\" : \"none\";\n if (!show) return;\n dom.legend.style.order = bottom ? \"1\" : \"0\";\n dom.legend.style.padding = bottom ? \"8px 4px 0\" : \"0 4px 8px\";\n if (colors) {\n // visual map: the ramp with its values, the hovered value marked\n dom.legend.style.justifyContent = \"flex-end\";\n const ramp = doc.createElement(\"div\");\n styleElement(ramp, {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n color: \"var(--text-secondary-color, #6b7280)\",\n fontSize: \"11px\",\n fontVariantNumeric: \"tabular-nums\",\n });\n const first = colors.labels[0];\n const last = colors.labels[colors.labels.length - 1];\n const bar = doc.createElement(\"div\");\n styleElement(bar, {\n position: \"relative\",\n width: \"160px\",\n height: \"8px\",\n borderRadius: \"4px\",\n background: `linear-gradient(to right, ${colors.stops.join(\", \")})`,\n boxShadow:\n \"inset 0 0 0 1px color-mix(in srgb, var(--text-color, #1f2937) 8%, transparent)\",\n });\n if (colors.labels.length > 2) {\n const tick = doc.createElement(\"div\");\n styleElement(tick, {\n position: \"absolute\",\n left: \"50%\",\n top: \"-2px\",\n width: \"1px\",\n height: \"12px\",\n background:\n \"color-mix(in srgb, var(--text-color, #1f2937) 35%, transparent)\",\n });\n bar.appendChild(tick);\n }\n legendCaret = doc.createElement(\"div\");\n styleElement(legendCaret, {\n position: \"absolute\",\n top: \"-3px\",\n width: \"4px\",\n height: \"14px\",\n marginLeft: \"-2px\",\n borderRadius: \"2px\",\n background: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 0 0 1.5px var(--surface-color, var(--background-color, #fff))\",\n display: \"none\",\n });\n bar.appendChild(legendCaret);\n const text = (value: string) => {\n const el = doc.createElement(\"span\");\n el.textContent = value;\n return el;\n };\n ramp.append(text(first?.text ?? \"\"), bar, text(last?.text ?? \"\"));\n dom.legend.appendChild(ramp);\n return;\n }\n dom.legend.style.justifyContent = \"\";\n for (const s of model.series) {\n const item = doc.createElement(toggle ? \"button\" : \"span\");\n if (item instanceof HTMLButtonElement) {\n item.type = \"button\";\n item.setAttribute(\"aria-pressed\", String(!s.hidden));\n item.addEventListener(\"click\", () => {\n if (hidden.has(s.id)) hidden.delete(s.id);\n else hidden.add(s.id);\n rebuild();\n });\n }\n styleElement(item, {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"2px 4px\",\n margin: \"0\",\n border: \"0\",\n borderRadius: \"4px\",\n background: \"none\",\n font: \"inherit\",\n color: \"var(--text-secondary-color, #6b7280)\",\n cursor: toggle ? \"pointer\" : \"default\",\n opacity: s.hidden ? \"0.45\" : \"1\",\n textDecoration: s.hidden ? \"line-through\" : \"none\",\n });\n item.append(\n swatch(doc, s.colorCss, legendShape(s.type)),\n doc.createTextNode(s.name),\n );\n dom.legend.appendChild(item);\n }\n if (focused >= 0)\n (dom.legend.children[focused] as HTMLElement | undefined)?.focus();\n };\n\n const updateAccessibility = () => {\n dom.stage.setAttribute(\n \"aria-label\",\n options.ariaLabel ?? chartAriaLabel(model),\n );\n const keyboard = interaction()?.keyboard;\n dom.stage.style.touchAction = interaction()?.dragPoints ? \"none\" : \"pan-y\";\n if (keyboard) dom.stage.tabIndex = 0;\n else dom.stage.removeAttribute(\"tabindex\");\n };\n\n // ---------------------------------------------------------------- frame\n\n const sizeCanvas = (\n canvas: HTMLCanvasElement,\n width: number,\n height: number,\n dpr: number,\n ) => {\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (canvas.width !== w) canvas.width = w;\n if (canvas.height !== h) canvas.height = h;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n };\n\n const transformFor = (range: Range, o: number, reverse: boolean) => {\n const scale = 2 / (range[1] - range[0]);\n const offset = (o - range[0]) * scale - 1;\n return reverse ? [-scale, -offset] : [scale, offset];\n };\n\n function frame() {\n frameId = 0;\n if (destroyed) return;\n const width = dom.stage.clientWidth;\n const height = dom.stage.clientHeight;\n if (width <= 0 || height <= 0) return;\n const dpr = win?.devicePixelRatio || 1;\n sizeCanvas(dom.background, width, height, dpr);\n sizeCanvas(dom.foreground, width, height, dpr);\n const bg = dom.background.getContext(\"2d\");\n const fg = dom.foreground.getContext(\"2d\");\n\n if (bg) {\n bg.setTransform(dpr, 0, 0, dpr, 0, 0);\n bg.font = font(theme);\n }\n const layout = layoutChart({\n model,\n view,\n theme,\n width,\n height,\n padding: options.padding,\n measure: bg\n ? (text) => bg.measureText(text).width\n : (text) => text.length * theme.fontSize * 0.6,\n });\n const { plot } = layout;\n xTicks = layout.xTicks;\n yTicks = layout.yTicks;\n y2Ticks = layout.y2Ticks;\n scales = layout.scales;\n const rect = plotRect();\n if (rect && rect.join() !== lastPlot) {\n lastPlot = rect.join();\n emit(\"layout\", {\n x: rect[0],\n y: rect[1],\n width: rect[2],\n height: rect[3],\n });\n }\n\n if (bg) {\n drawBackground(bg, {\n width,\n height,\n scales,\n x: model.x,\n y: model.y,\n xTicks,\n yTicks,\n y2: model.y2,\n y2Ticks,\n theme,\n annotations,\n });\n }\n if (fg) {\n fg.setTransform(dpr, 0, 0, dpr, 0, 0);\n placedLabels = drawForeground(fg, {\n width,\n height,\n scales,\n theme,\n annotations,\n pointLabels: collectPointLabels(\n model,\n view,\n scales,\n yTicks,\n theme.background,\n // the label of a dragged point follows it (in the drag pill)\n pointDrag?.moved ? pointDrag.item : (settling?.item ?? null),\n ),\n connectors: connectorSegments(model, scales),\n arrows: dependencyArrows(model, scales, dependencies),\n });\n }\n\n if (renderer) {\n const canvas = renderer.canvas;\n // horizontal charts: the data layer is drawn as a vertical chart on a\n // transposed canvas (its x axis runs down the plot, its y axis right)\n const transposed = model.horizontal;\n const cw = transposed ? plot.height : plot.width;\n const ch = transposed ? plot.width : plot.height;\n styleElement(canvas, {\n left: `${plot.x}px`,\n top: `${plot.y}px`,\n width: `${cw}px`,\n height: `${ch}px`,\n transformOrigin: transposed ? \"0 0\" : \"\",\n transform: transposed ? \"matrix(0, 1, 1, 0, 0, 0)\" : \"\",\n });\n const bw = Math.max(1, Math.round(cw * dpr));\n const bh = Math.max(1, Math.round(ch * dpr));\n if (canvas.width !== bw || canvas.height !== bh) renderer.resize(bw, bh);\n ensureOrigin();\n // heatmap cells: their gaps and corners follow their size on screen\n const density: PixelDensity = {\n x: 1 / Math.abs(scales.xPerPx),\n y: 1 / Math.abs(scales.yPerPx),\n };\n const key = cellStyleKey(model, density);\n if (key !== cellKey) {\n cellKey = key;\n itemsDirty = true;\n }\n if (itemsDirty) {\n version++;\n items = buildItems(model, origin, version, density);\n itemsDirty = false;\n }\n const [xScale, xOffset] = transformFor(view.x, origin.x, model.x.reverse);\n const [yScale, yOffset] = transformFor(\n view.y,\n origin.y,\n // the top of the transposed canvas is the left of the plot\n transposed ? !model.y.reverse : model.y.reverse,\n );\n renderer.render(items, {\n transform: { xScale, xOffset, yScale, yOffset },\n width: bw,\n height: bh,\n dpr,\n });\n }\n renderHover();\n if (clearDragOnFrame) {\n clearDragOnFrame = false;\n if (!pointDrag?.moved) hideDrag();\n } else if (pointDrag?.moved) renderDrag();\n }\n\n // ------------------------------------------------------------ hit tests\n\n const hitAt = (px: number, py: number): ChartHoverEvent | null =>\n scales ? hitTest(model, scales, xTicks, px, py) : null;\n\n /** Plot area relative to the container: x, y, width, height */\n const plotRect = (): [number, number, number, number] | null => {\n const p = scales?.plot;\n if (!p) return null;\n return [\n p.x + dom.stage.offsetLeft,\n p.y + dom.stage.offsetTop,\n p.width,\n p.height,\n ];\n };\n\n /** A draggable point under the pointer (`interaction.dragPoints`) */\n const draggableAt = (px: number, py: number) => {\n if (!interaction()?.dragPoints) return null;\n const hit = hitAt(px, py);\n const item = hit?.items.find(\n (it) => model.series[it.seriesIndex].type === \"scatter\",\n );\n return item ?? null;\n };\n\n // ---------------------------------------------------------------- hover\n\n const setHover = (next: HoverState | null) => {\n const changed = !sameHover(hover?.event ?? null, next?.event ?? null);\n hover = next;\n renderHover();\n if (changed) emit(\"hover\", next ? next.event : null);\n };\n\n const tooltipNode = (event: ChartHoverEvent): Node | string | null => {\n const custom = tooltipOptions()?.render;\n if (custom) return custom(event);\n const content = tooltipContent(model, event, yTicks, y2Ticks);\n const fragment = doc.createDocumentFragment();\n const header = doc.createElement(\"div\");\n styleElement(header, {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n fontWeight: \"600\",\n marginBottom: content.subtitle ? \"0\" : \"4px\",\n color: \"var(--text-color, #1f2937)\",\n });\n if (content.titleColor)\n header.appendChild(swatch(doc, content.titleColor, \"dot\"));\n header.appendChild(doc.createTextNode(content.title));\n fragment.append(header);\n if (content.subtitle) {\n const sub = doc.createElement(\"div\");\n styleElement(sub, {\n color: \"var(--text-secondary-color, #6b7280)\",\n fontSize: \"11px\",\n margin: \"1px 0 6px\",\n paddingLeft: content.titleColor ? \"14px\" : \"0\",\n });\n sub.textContent = content.subtitle;\n fragment.append(sub);\n }\n if (!content.rows.length) return fragment;\n // a label column and a value column (right-aligned, tabular figures)\n const swatches = content.rows.some((row) => row.color);\n const grid = doc.createElement(\"div\");\n styleElement(grid, {\n display: \"grid\",\n gridTemplateColumns: swatches\n ? \"auto minmax(0, 1fr) auto\"\n : \"minmax(0, 1fr) auto\",\n columnGap: \"0\",\n rowGap: \"2px\",\n alignItems: \"center\",\n });\n for (const row of content.rows) {\n if (swatches) {\n const cell = doc.createElement(\"span\");\n styleElement(cell, {\n display: \"inline-flex\",\n width: \"14px\",\n justifyContent: \"flex-start\",\n });\n if (row.color) cell.appendChild(swatch(doc, row.color, \"dot\"));\n grid.appendChild(cell);\n }\n const n = doc.createElement(\"span\");\n styleElement(n, {\n color: \"var(--text-secondary-color, #6b7280)\",\n paddingRight: \"16px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n });\n n.textContent = row.name;\n const v = doc.createElement(\"span\");\n styleElement(v, {\n fontWeight: \"600\",\n fontVariantNumeric: \"tabular-nums\",\n textAlign: \"right\",\n color: \"var(--text-color, #1f2937)\",\n });\n v.textContent = row.value;\n grid.append(n, v);\n }\n fragment.append(grid);\n return fragment;\n };\n\n const pooled = <T extends HTMLElement>(\n pool: T[],\n i: number,\n make: () => T,\n parent: HTMLElement = dom.hover,\n ) => {\n if (!pool[i]) {\n pool[i] = make();\n parent.appendChild(pool[i]);\n }\n pool[i].style.display = \"block\";\n return pool[i];\n };\n\n function renderHover() {\n const sc = scales;\n const marksShown =\n !!hover &&\n !!sc &&\n !!shownMarks &&\n shownMarks.scales === sc &&\n shownMarks.model === model &&\n sameHover(shownMarks.event, hover.event);\n // pointer moves over the same points: the markers stay where they are\n if (!marksShown) renderMarks(sc);\n\n const tip = dom.tooltip;\n if (!hover || !sc || !tooltipOptions() || drag?.moved || pointDrag?.moved) {\n tip.style.display = \"none\";\n return;\n }\n const custom = tooltipOptions()?.render;\n let w: number;\n let h: number;\n if (\n !custom &&\n shownTip &&\n shownTip.model === model &&\n shownTip.yTicks === yTicks &&\n sameHover(shownTip.event, hover.event) &&\n tip.style.display === \"block\"\n ) {\n // same content: only the position follows the pointer\n w = shownTip.width;\n h = shownTip.height;\n } else {\n shownTip = null;\n const content = tooltipNode(hover.event);\n if (content === null || content === \"\") {\n tip.style.display = \"none\";\n return;\n }\n if (typeof content === \"string\") {\n tip.textContent = content;\n tip.style.whiteSpace = \"pre\";\n } else {\n tip.replaceChildren(content);\n tip.style.whiteSpace = \"nowrap\";\n }\n tip.style.display = \"block\";\n w = tip.offsetWidth;\n h = tip.offsetHeight;\n if (!custom)\n shownTip = { event: hover.event, model, yTicks, width: w, height: h };\n }\n // off the hovered marks: beside them, above / below the rows of\n // horizontal charts (Gantt tasks), off the other bars of those\n positionTooltip(tip, dom.stage, {\n anchor: { x: hover.anchorX, y: hover.anchorY },\n avoid: withRect(hoverRect(model, sc, hover.event), labelChipBox),\n obstacles: tooltipObstacles(model, sc),\n prefer: sc.horizontal ? \"vertical\" : \"side\",\n size: { width: w, height: h },\n animate: true,\n });\n }\n\n /** Crosshair, point markers, bar bands, lifted bars and heatmap cells */\n function renderMarks(sc: Scales | null) {\n let markerCount = 0;\n let bandCount = 0;\n let cellCount = 0;\n let guideCount = 0;\n let liftCount = 0;\n let veiled = false;\n renderLegendCaret();\n shownMarks = null;\n dom.crosshair.style.display = \"none\";\n if (hover && sc) {\n shownMarks = { event: hover.event, model, scales: sc };\n const { plot } = sc;\n dom.hover.style.width = `${dom.stage.clientWidth}px`;\n dom.hover.style.height = `${dom.stage.clientHeight}px`;\n const guide = crosshairAt(model, sc, hover.event, options.crosshair);\n if (guide !== null) {\n const line =\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)\";\n styleElement(\n dom.crosshair,\n sc.horizontal\n ? {\n display: \"block\",\n left: `${plot.x}px`,\n top: `${Math.round(guide)}px`,\n width: `${plot.width}px`,\n height: \"0\",\n borderLeft: \"0\",\n borderTop: line,\n }\n : {\n display: \"block\",\n left: `${Math.round(guide)}px`,\n top: `${plot.y}px`,\n width: \"0\",\n height: `${plot.height}px`,\n borderLeft: line,\n borderTop: \"0\",\n },\n );\n }\n const marks = hoverMarks(model, sc, hover.event);\n // behind lifted bars the band only gives the context: lighter\n const lifted = marks.some((mark) => mark.kind === \"bar\");\n for (const mark of marks) {\n if (mark.kind === \"band\" || mark.kind === \"guide\") {\n const el =\n mark.kind === \"band\"\n ? pooled(bands, bandCount++, () => createBand(doc), dom.underlay)\n : pooled(\n guides,\n guideCount++,\n () =>\n styleElement(createBand(doc), {\n borderRadius: \"0\",\n background:\n \"color-mix(in srgb, var(--text-color, #1f2937) 6%, transparent)\",\n }),\n dom.lift,\n );\n styleElement(el, {\n left: `${mark.x}px`,\n top: `${mark.y}px`,\n width: `${mark.width}px`,\n height: `${mark.height}px`,\n });\n if (mark.kind === \"band\")\n el.style.background = `color-mix(in srgb, var(--text-color, #1f2937) ${lifted ? 4 : 6}%, transparent)`;\n continue;\n }\n if (mark.kind === \"bar\") {\n const mixed = model.series.some(\n (series) =>\n !series.hidden &&\n (series.type === \"line\" || series.type === \"area\"),\n );\n // combo charts: the lifted bar goes below the data layer, so the\n // lines (and their markers) stay above it; no veil either\n const liftParent = mixed ? dom.underlay : dom.lift;\n if (!liftClip) {\n liftClip = styleElement(doc.createElement(\"div\"), {\n position: \"absolute\",\n overflow: \"hidden\",\n }) as HTMLDivElement;\n }\n if (\n liftClip.parentElement !== liftParent ||\n (mixed && liftParent.lastElementChild !== liftClip)\n )\n liftParent.appendChild(liftClip);\n if (!veiled && !mixed) {\n veiled = true;\n if (!veil) {\n veil = styleElement(doc.createElement(\"div\"), {\n position: \"absolute\",\n background: `color-mix(in srgb, ${PLOT_BACKGROUND} 42%, transparent)`,\n opacity: \"0\",\n }) as HTMLDivElement;\n dom.lift.insertBefore(\n veil,\n liftClip.parentElement === dom.lift ? liftClip : null,\n );\n }\n styleElement(veil, {\n left: `${plot.x}px`,\n top: `${plot.y}px`,\n width: `${plot.width}px`,\n height: `${plot.height}px`,\n transition: prefersReducedMotion(win)\n ? \"none\"\n : \"opacity 140ms ease-out\",\n opacity: \"1\",\n });\n }\n styleElement(liftClip, {\n left: `${plot.x}px`,\n top: `${plot.y}px`,\n width: `${plot.width}px`,\n height: `${plot.height}px`,\n });\n const key = `${mark.seriesIndex}:${mark.index}`;\n const prev = lifts[liftCount];\n const fresh =\n !prev || prev.style.display !== \"block\" || prev.dataset.key !== key;\n const el = pooled(\n lifts,\n liftCount++,\n () => createBand(doc),\n liftClip,\n );\n el.dataset.key = key;\n const r = liftedBarRect(mark);\n const vertical = mark.base === \"top\" || mark.base === \"bottom\";\n const ring =\n mark.ring === null\n ? null\n : {\n color: mark.ring,\n // translucent bars: a stronger ring in their solid color\n width: Math.min(\n mark.backdrop ? 2 : 1.5,\n Math.max(0, (Math.min(r.width, r.height) - 2) / 4),\n ),\n };\n el.dataset.hoverMark = \"bar\";\n const shadow = ring ? liftShadow(ring, 1.5, null) : \"none\";\n styleElement(el, {\n left: `${r.x - plot.x}px`,\n top: `${r.y - plot.y}px`,\n width: `${r.width}px`,\n height: `${r.height}px`,\n borderRadius: `${mark.radius}px`,\n filter: \"brightness(1.08) saturate(1.08)\",\n background: mark.backdrop\n ? `linear-gradient(${mark.color}, ${mark.color}), ${PLOT_BACKGROUND}`\n : mark.color,\n boxShadow: shadow,\n });\n if (fresh) {\n // grows from the bar as drawn\n const thick = vertical ? r.width : r.height;\n const k = thick > 0 ? (thick - mark.grow * 2) / thick : 1;\n playLift(\n el,\n {\n transform: vertical ? `scaleX(${k})` : `scaleY(${k})`,\n ...(ring\n ? { boxShadow: liftShadow(ring, 1.5, null, true) }\n : {}),\n },\n { transform: \"none\", ...(ring ? { boxShadow: shadow } : {}) },\n win,\n );\n }\n continue;\n }\n if (mark.kind === \"cell\") {\n // the cell lifted above its neighbours (and below the labels):\n // a ring at its edge, a halo of the background and an accent line\n const key = `${mark.seriesIndex}:${mark.index}`;\n const prev = cells[cellCount];\n const fresh =\n !prev || prev.style.display !== \"block\" || prev.dataset.key !== key;\n const el = pooled(\n cells,\n cellCount++,\n () =>\n styleElement(createBand(doc), {\n zIndex: \"1\",\n transform: `scale(${CELL_LIFT})`,\n }),\n dom.lift,\n );\n el.dataset.key = key;\n const ring = {\n color: mark.ring,\n width: Math.min(2, Math.min(mark.width, mark.height) / 5),\n };\n const shadow = liftShadow(ring, 2, CELL_ACCENT);\n styleElement(el, {\n left: `${mark.x}px`,\n top: `${mark.y}px`,\n width: `${mark.width}px`,\n height: `${mark.height}px`,\n background: mark.color,\n borderRadius: `${Math.max(mark.radius, 2)}px`,\n boxShadow: shadow,\n });\n if (fresh)\n playLift(\n el,\n {\n transform: \"scale(1)\",\n boxShadow: liftShadow(ring, 2, CELL_ACCENT, true),\n },\n { transform: `scale(${CELL_LIFT})`, boxShadow: shadow },\n win,\n );\n continue;\n }\n const prevMarker = markers[markerCount];\n const freshMarker =\n !prevMarker ||\n prevMarker.style.display !== \"block\" ||\n prevMarker.style.left !== `${mark.x}px` ||\n prevMarker.style.top !== `${mark.y}px`;\n const el = pooled(markers, markerCount++, () => createMarker(doc));\n styleElement(el, {\n left: `${mark.x}px`,\n top: `${mark.y}px`,\n width: `${mark.size}px`,\n height: `${mark.size}px`,\n background: mark.color,\n boxShadow: markerHalo(mark.halo),\n });\n if (freshMarker)\n playLift(\n el,\n { transform: \"translate(-50%, -50%) scale(0.6)\", opacity: \"0.6\" },\n { transform: \"translate(-50%, -50%) scale(1)\", opacity: \"1\" },\n win,\n );\n }\n renderLabelChip(sc);\n } else if (labelChip) {\n labelChip.style.display = \"none\";\n labelChipBox = null;\n }\n for (let i = markerCount; i < markers.length; i++)\n markers[i].style.display = \"none\";\n for (let i = bandCount; i < bands.length; i++)\n bands[i].style.display = \"none\";\n for (let i = cellCount; i < cells.length; i++)\n cells[i].style.display = \"none\";\n for (let i = guideCount; i < guides.length; i++)\n guides[i].style.display = \"none\";\n for (let i = liftCount; i < lifts.length; i++)\n lifts[i].style.display = \"none\";\n if (veil && !veiled) veil.style.opacity = \"0\";\n }\n\n /** Marks the hovered heatmap value on the color legend */\n function renderLegendCaret() {\n const caret = legendCaret;\n if (!caret) return;\n const it = hover?.event.items[0];\n const s = it ? model.series[it.seriesIndex] : undefined;\n if (!it || !s || s.type !== \"heatmap\" || it.value === undefined) {\n caret.style.display = \"none\";\n return;\n }\n caret.style.display = \"block\";\n caret.style.left = `${(heatPosition(s, it.value) * 100).toFixed(2)}%`;\n }\n\n /** The label of a hovered dot, highlighted in a chip tinted with its color */\n function renderLabelChip(sc: Scales) {\n const it = hover?.event.items[0];\n const s = it ? model.series[it.seriesIndex] : undefined;\n let found: { label: PointLabel; box: Rect } | undefined;\n if (it && s?.type === \"scatter\" && it.label && !pointDrag?.moved) {\n const p = pointOf(s, it.index, sc);\n found = placedLabels.find(\n ({ label }) =>\n label.text === it.label &&\n Math.abs(label.x - p.px) < 0.5 &&\n Math.abs(label.y - p.py) < 0.5,\n );\n }\n labelChipBox = null;\n if (!found || !it) {\n if (labelChip) labelChip.style.display = \"none\";\n return;\n }\n if (!labelChip) {\n labelChip = createLabelPill(doc);\n labelChip.dataset.hoverMark = \"label\";\n dom.hover.appendChild(labelChip);\n }\n labelChip.textContent = found.label.text;\n styleElement(labelChip, {\n display: \"block\",\n left: `${found.box.x - 10}px`,\n top: `${found.box.y + found.box.height / 2}px`,\n transform: \"translateY(-50%)\",\n background: `color-mix(in srgb, ${it.color} 14%, var(--surface-color, var(--background-color, #fff)))`,\n borderColor: `color-mix(in srgb, ${it.color} 45%, transparent)`,\n boxShadow: \"0 4px 12px -4px rgba(15, 23, 42, 0.28)\",\n });\n // the canvas label, a little wider in bold, with the padding of the chip\n labelChipBox = {\n x: found.box.x - 10,\n y: found.box.y + found.box.height / 2 - 11,\n width: found.box.width * 1.1 + 20,\n height: 22,\n };\n }\n\n // ----------------------------------------------------------- point drag\n\n /** The dragged point under the pointer, its label, its origin and target */\n function renderDrag() {\n const d = pointDrag;\n const sc = scales;\n if (!d?.moved || !sc) return;\n showDrag(\n dragPreview(\n model,\n sc,\n annotations,\n d.item,\n d.px,\n d.py,\n !!interaction()?.dropTargets,\n ),\n true,\n );\n }\n\n function showDrag(p: DragPreview, live: boolean) {\n if (!dragEls) {\n dragEls = {\n dot: createDragDot(doc),\n pill: createLabelPill(doc),\n placeholder: createDragPlaceholder(doc),\n target: createDropTarget(doc),\n };\n dragEls.dot.dataset.dragMark = \"dot\";\n dragEls.pill.dataset.dragMark = \"label\";\n dragEls.placeholder.dataset.dragMark = \"origin\";\n dragEls.target.dataset.dragMark = \"target\";\n dom.underlay.appendChild(dragEls.target);\n dom.hover.append(dragEls.placeholder, dragEls.dot, dragEls.pill);\n }\n const { dot, pill, placeholder, target } = dragEls;\n dom.hover.style.width = `${dom.stage.clientWidth}px`;\n dom.hover.style.height = `${dom.stage.clientHeight}px`;\n styleElement(dot, {\n display: \"block\",\n left: `${p.x}px`,\n top: `${p.y}px`,\n width: `${p.size}px`,\n height: `${p.size}px`,\n background: p.color,\n boxShadow: dragDotShadow(p.color),\n });\n if (p.label && interaction()?.dragLabel !== false) {\n pill.textContent = p.label;\n const sc = scales;\n // beside the dot, on the side with room\n const right = !sc || p.x < sc.plot.x + sc.plot.width * 0.62;\n styleElement(pill, {\n display: \"block\",\n left: `${p.x}px`,\n top: `${p.y}px`,\n transform: right\n ? `translate(${p.size / 2 + 8}px, -50%)`\n : `translate(calc(-100% - ${p.size / 2 + 8}px), -50%)`,\n });\n } else pill.style.display = \"none\";\n if (live && p.origin) {\n const size = p.size - 2;\n styleElement(placeholder, {\n display: \"block\",\n left: `${p.origin.x}px`,\n top: `${p.origin.y}px`,\n width: `${size}px`,\n height: `${size}px`,\n borderColor: p.color,\n background: `color-mix(in srgb, ${PLOT_BACKGROUND} 62%, transparent)`,\n });\n } else placeholder.style.display = \"none\";\n if (live && p.target) {\n styleElement(target, {\n display: \"block\",\n left: `${p.target.x}px`,\n top: `${p.target.y}px`,\n width: `${p.target.width}px`,\n height: `${p.target.height}px`,\n background: `color-mix(in srgb, ${p.target.color} 12%, transparent)`,\n boxShadow: `inset 0 0 0 2px color-mix(in srgb, ${p.target.color} 70%, transparent)`,\n });\n } else target.style.display = \"none\";\n }\n\n function hideDrag() {\n if (!dragEls) return;\n for (const el of Object.values(dragEls)) el.style.display = \"none\";\n }\n\n const onDragKey = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !pointDrag) return;\n event.preventDefault();\n event.stopPropagation();\n cancelDrag();\n };\n\n const releasePointer = (id: number) => {\n if (dom.stage.hasPointerCapture?.(id)) dom.stage.releasePointerCapture(id);\n };\n\n /** Ends a point drag without a drop (Escape, a cancelled pointer) */\n function cancelDrag() {\n const d = pointDrag;\n if (!d) return;\n pointDrag = null;\n win?.removeEventListener(\"keydown\", onDragKey, true);\n releasePointer(d.id);\n dom.stage.style.cursor = \"\";\n hideDrag();\n if (!d.moved) return;\n invalidate();\n emit(\"dragEnd\", { item: d.item, cancelled: true });\n }\n\n // ---------------------------------------------------------- interaction\n\n const setViewInternal = (next: ChartView, notify: boolean) => {\n const { base, minSpan } = model;\n view = {\n x: clampRange(next.x, base.x, minSpan.x),\n y: clampRange(next.y, base.y, minSpan.y),\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n const it = interaction();\n dom.stage.style.cursor = zoomed && it?.pan ? \"grab\" : \"\";\n if (notify) emit(\"zoom\", viewToValues(model, view));\n invalidate();\n };\n\n const zoomAt = (px: number, py: number, factor: number) => {\n const sc = scales;\n if (!sc) return;\n const next = copyView(view);\n const at = toData(sc, px, py);\n if (model.zoom.x) next.x = zoomRange(view.x, at.x, factor);\n if (model.zoom.y) next.y = zoomRange(view.y, at.y, factor);\n setViewInternal(next, true);\n };\n\n const localPoint = (event: { clientX: number; clientY: number }) => {\n const rect = dom.stage.getBoundingClientRect();\n return { x: event.clientX - rect.left, y: event.clientY - rect.top };\n };\n\n const inPlot = (x: number, y: number) => {\n const p = scales?.plot;\n return (\n !!p && x >= p.x && x <= p.x + p.width && y >= p.y && y <= p.y + p.height\n );\n };\n\n const dataAt = (x: number, y: number) => {\n const sc = scales;\n if (!sc) return null;\n const { plot } = sc;\n const cx = Math.max(plot.x, Math.min(plot.x + plot.width, x));\n const cy = Math.max(plot.y, Math.min(plot.y + plot.height, y));\n const p = toData(sc, cx, cy);\n // values of the axes (not logarithms)\n return { x: fromPlotX(model, p.x), y: fromPlotY(model, p.y) };\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const { x, y } = localPoint(event);\n if (pointDrag && pointDrag.id === event.pointerId) {\n const d = pointDrag;\n d.px = x;\n d.py = y;\n if (!d.moved && Math.hypot(x - d.x, y - d.y) > 3) {\n d.moved = true;\n dom.stage.setPointerCapture?.(event.pointerId);\n dom.stage.style.cursor = \"grabbing\";\n win?.addEventListener(\"keydown\", onDragKey, true);\n // a drop not yet applied: the new drag replaces it\n if (settling) {\n clearTimeout(settling.timer);\n settling = null;\n }\n setHover(null);\n // the foreground is drawn again without the label of the point\n invalidate();\n const at = dataAt(d.x, d.y);\n if (at) emit(\"dragStart\", { item: d.item, x: at.x, y: at.y });\n }\n if (d.moved && pointDrag === d) {\n // the point and its label follow the pointer at once, on the DOM\n renderDrag();\n const at = dataAt(x, y);\n if (at) emit(\"drag\", { item: d.item, x: at.x, y: at.y });\n }\n return;\n }\n if (drag && drag.id === event.pointerId) {\n const dx = x - drag.x;\n const dy = y - drag.y;\n if (!drag.moved && Math.hypot(dx, dy) > 3) {\n const it = interaction();\n if (zoomed && it?.pan) {\n drag.moved = true;\n dom.stage.setPointerCapture?.(event.pointerId);\n dom.stage.style.cursor = \"grabbing\";\n }\n }\n if (drag.moved && scales) {\n const next = copyView(drag.view);\n const from = toData(scales, drag.x, drag.y);\n const to = toData(scales, x, y);\n if (model.zoom.x) next.x = panRange(drag.view.x, from.x - to.x);\n if (model.zoom.y) next.y = panRange(drag.view.y, from.y - to.y);\n setViewInternal(next, true);\n return;\n }\n }\n const event2 = hitAt(x, y);\n setHover(\n event2\n ? { event: event2, anchorX: x, anchorY: y, keyboard: false }\n : null,\n );\n if (!drag && interaction()?.dragPoints) {\n dom.stage.style.cursor = draggableAt(x, y)\n ? \"grab\"\n : zoomed && interaction()?.pan\n ? \"grab\"\n : \"\";\n }\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (event.button !== 0) return;\n const { x, y } = localPoint(event);\n if (!inPlot(x, y)) return;\n const draggable = draggableAt(x, y);\n if (draggable) {\n pointDrag = {\n id: event.pointerId,\n item: draggable,\n x,\n y,\n px: x,\n py: y,\n moved: false,\n };\n return;\n }\n drag = { id: event.pointerId, x, y, view: copyView(view), moved: false };\n };\n\n const onPointerUp = (event: PointerEvent) => {\n if (pointDrag && pointDrag.id === event.pointerId) {\n const d = pointDrag;\n const { x, y } = localPoint(event);\n if (d.moved && event.type === \"pointercancel\") {\n cancelDrag();\n return;\n }\n pointDrag = null;\n win?.removeEventListener(\"keydown\", onDragKey, true);\n releasePointer(event.pointerId);\n dom.stage.style.cursor = draggableAt(x, y) ? \"grab\" : \"\";\n if (d.moved) {\n d.px = x;\n d.py = y;\n const at = dataAt(x, y);\n const sc = scales;\n // the dot stays where it was released until the new data is drawn\n if (sc) {\n showDrag(\n dragPreview(model, sc, annotations, d.item, x, y, false),\n false,\n );\n if (settling) clearTimeout(settling.timer);\n settling = {\n item: d.item,\n timer: setTimeout(() => {\n settling = null;\n if (!pointDrag?.moved) hideDrag();\n invalidate();\n }, 320),\n };\n } else hideDrag();\n if (at) emit(\"drop\", { item: d.item, x: at.x, y: at.y });\n emit(\"dragEnd\", { item: d.item, cancelled: !at });\n renderHover();\n } else {\n const hit = hitAt(x, y);\n if (hit) emit(\"click\", hit);\n }\n return;\n }\n if (!drag || drag.id !== event.pointerId) return;\n const moved = drag.moved;\n drag = null;\n if (dom.stage.hasPointerCapture?.(event.pointerId)) {\n dom.stage.releasePointerCapture(event.pointerId);\n }\n dom.stage.style.cursor = zoomed && interaction()?.pan ? \"grab\" : \"\";\n if (!moved) {\n const { x, y } = localPoint(event);\n const hit = hitAt(x, y);\n if (hit) emit(\"click\", hit);\n else if (event.type !== \"pointercancel\" && inPlot(x, y)) {\n const at = dataAt(x, y);\n if (at) emit(\"plotClick\", at);\n }\n } else {\n renderHover();\n }\n };\n\n const onPointerLeave = () => {\n if (!drag?.moved && !pointDrag?.moved) setHover(null);\n };\n\n const onWheel = (event: WheelEvent) => {\n const it = interaction();\n if (!it || it.zoom === false || (!model.zoom.x && !model.zoom.y)) return;\n const { x, y } = localPoint(event);\n if (!inPlot(x, y)) return;\n const modifier = event.ctrlKey || event.metaKey;\n if (it.wheel === \"always\" || modifier) {\n event.preventDefault();\n zoomAt(\n x,\n y,\n wheelFactor(\n event.deltaY,\n event.deltaMode,\n event.ctrlKey && !event.metaKey,\n ),\n );\n } else if (\n zoomed &&\n model.zoom.x &&\n scales &&\n !scales.horizontal &&\n Math.abs(event.deltaX) > Math.abs(event.deltaY)\n ) {\n event.preventDefault();\n const next = copyView(view);\n next.x = panRange(\n view.x,\n event.deltaX * scales.xPerPx * (model.x.reverse ? -1 : 1),\n );\n setViewInternal(next, true);\n }\n };\n\n const onDoubleClick = (event: MouseEvent) => {\n const { x, y } = localPoint(event);\n if (interaction() && zoomed && inPlot(x, y)) resetZoom();\n };\n\n /** Keyboard: moves along the first visible series (or the one in focus) */\n const moveFocus = (step: number) => {\n const sc = scales;\n if (!sc) return;\n const current = hover?.keyboard ? hover.event.items[0] : null;\n const series =\n (current && model.series[current.seriesIndex]) ??\n model.series.find((s) => !s.hidden && s.cols.count > 0);\n if (!series) return;\n const { x, y, count } = series.cols;\n let index: number;\n if (current) {\n index = current.index + step;\n } else {\n // first point inside the view\n index = series.cols.sorted ? lowerBound(x, count, view.x[0]) : 0;\n if (step < 0)\n index = series.cols.sorted\n ? lowerBound(x, count, view.x[1]) - 1\n : count - 1;\n }\n while (index >= 0 && index < count && !Number.isFinite(y[index]))\n index += step || 1;\n if (index < 0 || index >= count) return;\n // keep the point visible\n let current2 = sc;\n if (model.zoom.x && (x[index] < view.x[0] || x[index] > view.x[1])) {\n const span = view.x[1] - view.x[0];\n setViewInternal(\n { x: [x[index] - span / 2, x[index] + span / 2], y: view.y },\n true,\n );\n current2 = scales = createScales(\n sc.plot,\n view,\n model.x.reverse,\n model.y.reverse,\n model.horizontal,\n );\n }\n const p = pointOf(series, index, current2);\n const leadItem = hoverItemOf(series, index);\n const others =\n model.tooltipMode === \"axis\" && series.type !== \"scatter\"\n ? (hitAt(p.px, p.py)?.items ?? []).filter(\n (it) => it.seriesIndex !== series.index,\n )\n : [];\n const event: ChartHoverEvent = {\n items: [leadItem, ...others],\n x: leadItem.x,\n xLabel: xTicks?.formatValue(leadItem.x) ?? String(leadItem.x),\n };\n setHover({ event, anchorX: p.px, anchorY: p.py, keyboard: true });\n const it = leadItem;\n dom.live.textContent = `${it.seriesName}: ${event.xLabel}, ${yTicks?.formatValue(it.y) ?? it.y}${it.label ? ` (${it.label})` : \"\"}`;\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!interaction()?.keyboard) return;\n const center = () => {\n const p = scales?.plot;\n return p ? [p.x + p.width / 2, p.y + p.height / 2] : [0, 0];\n };\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowLeft\":\n if (model.horizontal) return;\n event.preventDefault();\n moveFocus((event.key === \"ArrowRight\") !== model.x.reverse ? 1 : -1);\n break;\n case \"ArrowDown\":\n case \"ArrowUp\":\n // horizontal charts: the x axis runs down\n if (!model.horizontal) return;\n event.preventDefault();\n moveFocus((event.key === \"ArrowDown\") !== model.x.reverse ? 1 : -1);\n break;\n case \"+\":\n case \"=\": {\n if (!model.zoom.x && !model.zoom.y) return;\n event.preventDefault();\n const [cx, cy] = center();\n zoomAt(cx, cy, 0.8);\n break;\n }\n case \"-\":\n case \"_\": {\n if (!model.zoom.x && !model.zoom.y) return;\n event.preventDefault();\n const [cx, cy] = center();\n zoomAt(cx, cy, 1.25);\n break;\n }\n case \"0\":\n event.preventDefault();\n resetZoom();\n break;\n case \"Escape\":\n if (hover) {\n event.preventDefault();\n setHover(null);\n }\n break;\n default:\n break;\n }\n };\n\n const onFocus = () => {\n let visible: boolean;\n try {\n visible = dom.stage.matches(\":focus-visible\");\n } catch {\n visible = true;\n }\n if (visible)\n dom.stage.style.boxShadow = \"0 0 0 2px var(--primary-color, #4f46e5)\";\n };\n\n const onBlur = () => {\n dom.stage.style.boxShadow = \"\";\n if (hover?.keyboard) setHover(null);\n };\n\n const stage = dom.stage;\n stage.addEventListener(\"pointermove\", onPointerMove);\n stage.addEventListener(\"pointerdown\", onPointerDown);\n stage.addEventListener(\"pointerup\", onPointerUp);\n stage.addEventListener(\"pointercancel\", onPointerUp);\n stage.addEventListener(\"pointerleave\", onPointerLeave);\n stage.addEventListener(\"wheel\", onWheel, { passive: false });\n stage.addEventListener(\"dblclick\", onDoubleClick);\n stage.addEventListener(\"keydown\", onKeyDown);\n stage.addEventListener(\"focus\", onFocus);\n stage.addEventListener(\"blur\", onBlur);\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => invalidate())\n : null;\n resizeObserver?.observe(dom.stage);\n\n const refreshTheme = () => {\n if (destroyed) return;\n const next = readTheme(dom.root, options.palette);\n // the watcher fires on any class / style change of <html> / <body>:\n // keep the GPU buffers unless a color really changed\n if (themeColorsChanged(theme, next)) themeVersion++;\n theme = next;\n themeTooltip(dom.tooltip, theme);\n rebuild();\n };\n const unwatchTheme = watchTheme(refreshTheme);\n // charts without `locale` follow the page language\n const unwatchLocale = watchLocale(() => {\n if (!destroyed && !options.locale) rebuild();\n });\n\n // ------------------------------------------------------------- renderer\n\n const initRenderer = async (exclude: Set<ChartRendererKind> = new Set()) => {\n const token = ++rendererToken;\n const next = await createRenderer(\n options.renderer ?? \"auto\",\n () => createDataCanvas(doc),\n (kind) => {\n if (destroyed || renderer?.kind !== kind) return;\n renderer.destroy();\n renderer.canvas.remove();\n renderer = null;\n void initRenderer(new Set([...exclude, kind]));\n },\n exclude,\n );\n if (destroyed || token !== rendererToken) {\n next?.destroy();\n return;\n }\n if (renderer) {\n renderer.destroy();\n renderer.canvas.remove();\n }\n renderer = next;\n if (next) {\n dom.root.dataset.renderer = next.kind;\n // between the hover band and the lifted marks\n dom.stage.insertBefore(next.canvas, dom.lift);\n itemsDirty = true;\n emit(\"renderer\", next.kind);\n }\n resolveReady(next?.kind ?? null);\n invalidate();\n };\n\n // ------------------------------------------------------------------ api\n\n function resetZoom() {\n if (!zoomed) return;\n setViewInternal(copyView(model.base), true);\n }\n\n rebuild();\n void initRenderer();\n const unfollowDefault = followDefaultRenderer(\n () => options.renderer,\n () => void initRenderer(),\n );\n\n const instance: ChartInstance = {\n setOptions(next) {\n if (destroyed) return;\n const previous = options;\n options = next;\n if ((next.palette ?? []).join() !== (previous.palette ?? []).join()) {\n theme = readTheme(dom.root, next.palette);\n themeVersion++;\n }\n if ((next.renderer ?? \"auto\") !== (previous.renderer ?? \"auto\"))\n void initRenderer();\n rebuild();\n },\n resize() {\n invalidate();\n },\n resetZoom,\n getView: () => viewToValues(model, view),\n setView(next) {\n if (destroyed) return;\n setViewInternal(viewFromValues(model, next, view), false);\n },\n getRenderer: () => renderer?.kind ?? null,\n getPlotRect() {\n const rect = plotRect();\n return rect\n ? { x: rect[0], y: rect[1], width: rect[2], height: rect[3] }\n : null;\n },\n toPixel(x, y) {\n if (!scales) return null;\n const p = toScreen(scales, toPlotX(model, x), toPlotY(model, y));\n return {\n x: p.x + dom.stage.offsetLeft,\n y: p.y + dom.stage.offsetTop,\n };\n },\n fromPixel(x, y) {\n if (!scales) return null;\n const p = toData(\n scales,\n x - dom.stage.offsetLeft,\n y - dom.stage.offsetTop,\n );\n return { x: fromPlotX(model, p.x), y: fromPlotY(model, p.y) };\n },\n ready,\n refreshTheme,\n on(type, listener) {\n let set = listeners[type] as Set<typeof listener> | undefined;\n if (!set) {\n set = new Set();\n (listeners as Record<string, unknown>)[type] = set;\n }\n set.add(listener);\n return () => {\n set.delete(listener);\n };\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n win?.removeEventListener(\"keydown\", onDragKey, true);\n if (settling) clearTimeout(settling.timer);\n if (frameId) {\n if (win?.cancelAnimationFrame) win.cancelAnimationFrame(frameId);\n else clearTimeout(frameId);\n }\n resizeObserver?.disconnect();\n unfollowDefault();\n unwatchTheme();\n unwatchLocale();\n stage.removeEventListener(\"wheel\", onWheel);\n renderer?.destroy();\n renderer = null;\n releaseTooltip(dom.tooltip);\n dom.root.remove();\n for (const key of Object.keys(listeners)) {\n delete (listeners as Record<string, unknown>)[key];\n }\n },\n };\n return instance;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"chart.cjs","names":["createChartDom","readTheme","buildModel","clampRange","sameRange","itemsSignature","resolveAnnotations","resolveDependencies","legendShown","colorLegend","legendShape","swatch","chartAriaLabel","font","layoutChart","drawForeground","collectPointLabels","connectorSegments","dependencyArrows","cellStyleKey","buildItems","hitTest","sameHover","tooltipContent","hoverRect","tooltipObstacles","crosshairAt","hoverMarks","createBand","styleElement","PLOT_BACKGROUND","prefersReducedMotion","liftedBarRect","liftShadow","CELL_LIFT","CELL_ACCENT","createMarker","markerHalo","heatPosition","pointOf","createLabelPill","dragPreview","createDragDot","createDragPlaceholder","createDropTarget","dragDotShadow","viewToValues","toData","zoomRange","fromPlotX","fromPlotY","panRange","wheelFactor","lowerBound","createScales","hoverItemOf","themeColorsChanged","watchTheme","watchLocale","createRenderer","createDataCanvas","followDefaultRenderer","viewFromValues","toScreen","toPlotX","toPlotY","require_data","require_tooltip","require_dom","require_layout","require_overlay","require_locale","require_labels","require_model","require_scene","require_drag_preview","require_hover_rect","require_items","require_detect","require_follow","require_signature","require_theme","require_viewport","mid","r","withRect","a","b","x","y","copyView","v","createChart","doc","container","win","dom","cache","hidden","listeners","options","initialOptions","theme","model","view","zoomed","origin","items","itemsDirty","version","annotations","dependencies","scales","xTicks","yTicks","y2Ticks","renderer","rendererToken","destroyed","frameId","hover","lastPlot","pointDrag","dragEls","settling","clearDragOnFrame","placedLabels","labelChip","labelChipBox","hiddenLabel","drag","markers","bands","cells","guides","lifts","liftClip","veil","legendCaret","cellKey","themeVersion","itemsSignatureKey","legendKey","shownMarks","shownTip","resolveReady","ready","resolve","emit","type","listener","event","interactionOf","interactionValue","interaction","value","o","tooltipOptions","invalidate","frame","rebuild","zoom","base","minSpan","signature","index","renderLegend","updateAccessibility","ensureOrigin","far","legendOption","named","s","show","config","toggle","bottom","colors","key","l","focused","ramp","first","last","bar","tick","text","el","item","keyboard","sizeCanvas","w","width","dpr","h","height","canvas","transformFor","scale","range","offset","reverse","bg","fg","layout","rect","plotRect","transposed","cw","plot","ch","bw","bh","density","xScale","xOffset","yScale","yOffset","renderHover","hideDrag","renderDrag","hitAt","px","py","p","draggableAt","it","setHover","changed","next","tooltipNode","custom","content","fragment","header","sub","swatches","row","grid","cell","n","pooled","pool","i","make","parent","sc","renderMarks","tip","markerCount","bandCount","cellCount","guideCount","liftCount","veiled","renderLegendCaret","guide","line","marks","lifted","mark","mixed","series","liftParent","prev","fresh","vertical","ring","shadow","thick","k","prevMarker","freshMarker","renderLabelChip","caret","found","label","d","showDrag","dot","right","pill","live","size","placeholder","target","onDragKey","cancelDrag","releasePointer","id","setViewInternal","notify","zoomAt","at","factor","localPoint","inPlot","dataAt","cx","cy","onPointerMove","dx","dy","from","to","event2","onPointerDown","draggable","onPointerUp","hit","moved","onPointerLeave","onWheel","modifier","onDoubleClick","resetZoom","moveFocus","current","step","count","current2","span","leadItem","onKeyDown","center","onFocus","visible","onBlur","stage","resizeObserver","refreshTheme","unwatchTheme","unwatchLocale","initRenderer","token","kind","exclude","unfollowDefault","previous","point","set"],"sources":["../../../../charts/src/engine/chart.ts"],"sourcesContent":["// createChart: mounts a chart in a container and keeps it in sync with its\n// options, its size, the theme and the user's interactions.\n\nimport type { AxisTicks } from \"./axis\";\nimport { lowerBound } from \"./data\";\nimport {\n createBand,\n createChartDom,\n createDataCanvas,\n createDragDot,\n createDragPlaceholder,\n createDropTarget,\n createLabelPill,\n createMarker,\n CELL_ACCENT,\n CELL_LIFT,\n dragDotShadow,\n liftShadow,\n markerHalo,\n PLOT_BACKGROUND,\n playLift,\n styleElement,\n swatch,\n} from \"./dom\";\nimport { dragPreview, type DragPreview } from \"./drag-preview\";\nimport { hoverRect, tooltipObstacles } from \"./hover-rect\";\nimport {\n buildItems,\n cellStyleKey,\n type Origin,\n type PixelDensity,\n} from \"./items\";\nimport { chartAriaLabel } from \"./labels\";\nimport {\n createScales,\n toData,\n toScreen,\n type Rect,\n type Scales,\n} from \"./layout\";\nimport { watchLocale } from \"./locale\";\nimport {\n buildModel,\n fromPlotX,\n fromPlotY,\n heatPosition,\n toPlotX,\n toPlotY,\n viewFromValues,\n viewToValues,\n type ChartModel,\n type DataCache,\n} from \"./model\";\nimport {\n drawBackground,\n drawForeground,\n font,\n type PointLabel,\n type ResolvedAnnotation,\n} from \"./overlay\";\nimport { createRenderer } from \"./renderers/detect\";\nimport { followDefaultRenderer } from \"./renderers/follow\";\nimport type { ChartRenderer, RenderItem } from \"./renderers/types\";\nimport {\n collectPointLabels,\n colorLegend,\n connectorSegments,\n crosshairAt,\n dependencyArrows,\n hitTest,\n hoverItemOf,\n hoverMarks,\n layoutChart,\n legendShape,\n legendShown,\n liftedBarRect,\n pointOf,\n resolveAnnotations,\n resolveDependencies,\n sameHover,\n tooltipContent,\n type ResolvedDependency,\n} from \"./scene\";\nimport { itemsSignature } from \"./signature\";\nimport {\n readTheme,\n themeColorsChanged,\n watchTheme,\n type ChartTheme,\n} from \"./theme\";\nimport {\n positionTooltip,\n prefersReducedMotion,\n releaseTooltip,\n themeTooltip,\n} from \"./tooltip\";\nimport type {\n ChartEventMap,\n ChartHoverEvent,\n ChartHoverItem,\n ChartInstance,\n ChartInteractionOptions,\n ChartOptions,\n ChartRendererKind,\n ChartTooltipOptions,\n ChartView,\n} from \"./types\";\nimport {\n clampRange,\n panRange,\n sameRange,\n wheelFactor,\n zoomRange,\n type Range,\n} from \"./viewport\";\n\ninterface HoverState {\n event: ChartHoverEvent;\n /** Tooltip anchor in stage pixels */\n anchorX: number;\n anchorY: number;\n keyboard: boolean;\n}\n\nconst mid = (r: Range) => (r[0] + r[1]) / 2;\n/** The box around two boxes (either may be missing) */\nconst withRect = (a: Rect | null, b: Rect | null): Rect | null => {\n if (!a || !b) return a ?? b;\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n return {\n x,\n y,\n width: Math.max(a.x + a.width, b.x + b.width) - x,\n height: Math.max(a.y + a.height, b.y + b.height) - y,\n };\n};\nconst copyView = (v: ChartView): ChartView => ({\n x: [v.x[0], v.x[1]],\n y: [v.y[0], v.y[1]],\n});\n\n/**\n * Creates a chart inside `container` (which must have a size). The data\n * layer uses WebGPU when available, then WebGL2, then WebGL, then Canvas2D.\n */\nexport const createChart = (\n container: HTMLElement,\n initialOptions: ChartOptions,\n): ChartInstance => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n const dom = createChartDom(container);\n const cache: DataCache = new Map();\n const hidden = new Set<string>();\n const listeners: {\n [K in keyof ChartEventMap]?: Set<(event: ChartEventMap[K]) => void>;\n } = {};\n\n let options = initialOptions;\n let theme: ChartTheme = readTheme(dom.root, options.palette);\n themeTooltip(dom.tooltip, theme);\n let model: ChartModel;\n let view: ChartView = { x: [0, 1], y: [0, 1] };\n let zoomed = false;\n let origin: Origin = { x: 0, y: 0 };\n let items: RenderItem[] = [];\n let itemsDirty = true;\n let version = 0;\n let annotations: ResolvedAnnotation[] = [];\n let dependencies: ResolvedDependency[] = [];\n let scales: Scales | null = null;\n let xTicks: AxisTicks | null = null;\n let yTicks: AxisTicks | null = null;\n let y2Ticks: AxisTicks | null = null;\n let renderer: ChartRenderer | null = null;\n let rendererToken = 0;\n let destroyed = false;\n let frameId = 0;\n let hover: HoverState | null = null;\n let lastPlot = \"\";\n let pointDrag: {\n id: number;\n item: ChartHoverItem;\n /** Where the pointer went down */\n x: number;\n y: number;\n /** Where the pointer is */\n px: number;\n py: number;\n moved: boolean;\n } | null = null;\n /** Elements of the drag preview, created on the first drag */\n let dragEls: {\n dot: HTMLDivElement;\n pill: HTMLDivElement;\n placeholder: HTMLDivElement;\n target: HTMLDivElement;\n } | null = null;\n /**\n * A dropped point stays where it was released until the new data is\n * drawn (or briefly, when the drop is not applied)\n */\n let settling: {\n item: ChartHoverItem;\n timer: ReturnType<typeof setTimeout>;\n } | null = null;\n let clearDragOnFrame = false;\n /** Point labels drawn on the foreground (for the hovered label chip) */\n let placedLabels: { label: PointLabel; box: Rect }[] = [];\n let labelChip: HTMLDivElement | null = null;\n /** Where the label chip is shown (the tooltip keeps off it) */\n let labelChipBox: Rect | null = null;\n /** Point whose label a host card shows instead (`setLabelHidden`) */\n let hiddenLabel: { seriesIndex: number; index: number } | null = null;\n let drag: {\n id: number;\n x: number;\n y: number;\n view: ChartView;\n moved: boolean;\n } | null = null;\n const markers: HTMLDivElement[] = [];\n const bands: HTMLDivElement[] = [];\n const cells: HTMLDivElement[] = [];\n const guides: HTMLDivElement[] = [];\n /** Lifted hovered bars, in `liftClip` */\n const lifts: HTMLDivElement[] = [];\n /** Clips the lifted bars to the plot, like the data layer */\n let liftClip: HTMLDivElement | null = null;\n /** Dims the plot behind lifted bars (focus on the hovered one) */\n let veil: HTMLDivElement | null = null;\n /** Hover caret of the color legend (heatmaps) */\n let legendCaret: HTMLDivElement | null = null;\n let cellKey = \"\";\n let themeVersion = 0;\n let itemsSignatureKey = \"\";\n let legendKey = \"\";\n /** What the hover layer shows: kept while the hovered points are the same */\n let shownMarks: {\n event: ChartHoverEvent;\n model: ChartModel;\n scales: Scales;\n } | null = null;\n let shownTip: {\n event: ChartHoverEvent;\n model: ChartModel;\n yTicks: AxisTicks | null;\n width: number;\n height: number;\n } | null = null;\n\n let resolveReady: (kind: ChartRendererKind | null) => void = () => {};\n const ready = new Promise<ChartRendererKind | null>((resolve) => {\n resolveReady = resolve;\n });\n\n const emit = <K extends keyof ChartEventMap>(\n type: K,\n event: ChartEventMap[K],\n ) => {\n listeners[type]?.forEach((listener) => listener(event));\n };\n\n let interactionOf: ChartOptions | null = null;\n let interactionValue: Required<ChartInteractionOptions> | null = null;\n /** Resolved `interaction` option (cached: read on every pointer move) */\n const interaction = (): Required<ChartInteractionOptions> | null => {\n if (interactionOf === options) return interactionValue;\n interactionOf = options;\n const value = options.interaction;\n if (value === false) return (interactionValue = null);\n const o = typeof value === \"object\" ? value : {};\n return (interactionValue = {\n zoom: o.zoom ?? true,\n wheel: o.wheel ?? \"modifier\",\n pan: o.pan ?? true,\n keyboard: o.keyboard ?? true,\n dragPoints: o.dragPoints ?? false,\n dropTargets: o.dropTargets ?? false,\n dragLabel: o.dragLabel ?? true,\n hoverLabel: o.hoverLabel ?? true,\n });\n };\n\n const tooltipOptions = (): ChartTooltipOptions | null =>\n options.tooltip === false\n ? null\n : typeof options.tooltip === \"object\"\n ? options.tooltip\n : {};\n\n const invalidate = () => {\n if (destroyed || frameId) return;\n frameId = win?.requestAnimationFrame\n ? win.requestAnimationFrame(frame)\n : (setTimeout(frame, 16) as unknown as number);\n };\n\n // ---------------------------------------------------------------- model\n\n const rebuild = () => {\n model = buildModel(options, theme, hidden, cache);\n const { base, zoom, minSpan } = model;\n if (!zoomed) {\n view = copyView(base);\n } else {\n view = {\n x: zoom.x ? clampRange(view.x, base.x, minSpan.x) : [...base.x],\n y: zoom.y ? clampRange(view.y, base.y, minSpan.y) : [...base.y],\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n }\n // Unchanged data and styles (e.g. a React re-render): keep the GPU\n // buffers and the hover state\n const signature = itemsSignature(\n model,\n themeVersion,\n (index) => options.series[index]?.stack,\n );\n if (signature !== itemsSignatureKey) {\n itemsSignatureKey = signature;\n origin = { x: mid(base.x), y: mid(base.y) };\n itemsDirty = true;\n if (hover && !hover.keyboard) {\n hover = null;\n // listeners tracking the hovered point (an info card shown while\n // nothing is hovered) would otherwise keep the old one\n emit(\"hover\", null);\n }\n }\n // new data after a drop: the dropped point is drawn where it landed\n if (settling) {\n clearTimeout(settling.timer);\n settling = null;\n clearDragOnFrame = true;\n }\n annotations = resolveAnnotations(\n options.annotations,\n theme,\n model.y.type === \"log\" ? Math.log10 : undefined,\n model.x.type === \"log\" ? Math.log10 : undefined,\n );\n dependencies = resolveDependencies(options.dependencies, theme);\n renderLegend();\n updateAccessibility();\n invalidate();\n };\n\n /** float32 positions lose precision far from the origin: re-center when deeply zoomed */\n const ensureOrigin = () => {\n const far = (r: Range, o: number) =>\n Math.max(Math.abs(r[0] - o), Math.abs(r[1] - o)) > (r[1] - r[0]) * 2000;\n if (far(view.x, origin.x) || far(view.y, origin.y)) {\n origin = { x: mid(view.x), y: mid(view.y) };\n itemsDirty = true;\n }\n };\n\n // --------------------------------------------------------------- legend\n\n const renderLegend = () => {\n const legendOption = options.legend;\n const named = options.series.filter((s) => s.name).length;\n const show = legendShown(legendOption, model, named);\n const config = typeof legendOption === \"object\" ? legendOption : {};\n const toggle = config.toggle ?? true;\n const bottom = config.position === \"bottom\";\n const colors = show ? colorLegend(model) : null;\n // rebuild the DOM only when what it shows changed\n let key = `${show}|${bottom}|${toggle}`;\n if (colors) {\n key += `\\n${colors.stops.join(\";\")}|${colors.labels.map((l) => l.text).join(\";\")}`;\n } else if (show) {\n for (const s of model.series)\n key += `\\n${s.id}\\u0001${s.name}\\u0001${s.colorCss}\\u0001${legendShape(s.type)}\\u0001${s.hidden}`;\n }\n if (key === legendKey) return;\n legendKey = key;\n const focused = [...dom.legend.children].indexOf(\n doc.activeElement as Element,\n );\n dom.legend.replaceChildren();\n legendCaret = null;\n dom.legend.style.display = show ? \"flex\" : \"none\";\n if (!show) return;\n dom.legend.style.order = bottom ? \"1\" : \"0\";\n dom.legend.style.padding = bottom ? \"8px 4px 0\" : \"0 4px 8px\";\n if (colors) {\n // visual map: the ramp with its values, the hovered value marked\n dom.legend.style.justifyContent = \"flex-end\";\n const ramp = doc.createElement(\"div\");\n styleElement(ramp, {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n color: \"var(--text-secondary-color, #6b7280)\",\n fontSize: \"11px\",\n fontVariantNumeric: \"tabular-nums\",\n });\n const first = colors.labels[0];\n const last = colors.labels[colors.labels.length - 1];\n const bar = doc.createElement(\"div\");\n styleElement(bar, {\n position: \"relative\",\n width: \"160px\",\n height: \"8px\",\n borderRadius: \"4px\",\n background: `linear-gradient(to right, ${colors.stops.join(\", \")})`,\n boxShadow:\n \"inset 0 0 0 1px color-mix(in srgb, var(--text-color, #1f2937) 8%, transparent)\",\n });\n if (colors.labels.length > 2) {\n const tick = doc.createElement(\"div\");\n styleElement(tick, {\n position: \"absolute\",\n left: \"50%\",\n top: \"-2px\",\n width: \"1px\",\n height: \"12px\",\n background:\n \"color-mix(in srgb, var(--text-color, #1f2937) 35%, transparent)\",\n });\n bar.appendChild(tick);\n }\n legendCaret = doc.createElement(\"div\");\n styleElement(legendCaret, {\n position: \"absolute\",\n top: \"-3px\",\n width: \"4px\",\n height: \"14px\",\n marginLeft: \"-2px\",\n borderRadius: \"2px\",\n background: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 0 0 1.5px var(--surface-color, var(--background-color, #fff))\",\n display: \"none\",\n });\n bar.appendChild(legendCaret);\n const text = (value: string) => {\n const el = doc.createElement(\"span\");\n el.textContent = value;\n return el;\n };\n ramp.append(text(first?.text ?? \"\"), bar, text(last?.text ?? \"\"));\n dom.legend.appendChild(ramp);\n return;\n }\n dom.legend.style.justifyContent = \"\";\n for (const s of model.series) {\n const item = doc.createElement(toggle ? \"button\" : \"span\");\n if (item instanceof HTMLButtonElement) {\n item.type = \"button\";\n item.setAttribute(\"aria-pressed\", String(!s.hidden));\n item.addEventListener(\"click\", () => {\n if (hidden.has(s.id)) hidden.delete(s.id);\n else hidden.add(s.id);\n rebuild();\n });\n }\n styleElement(item, {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"2px 4px\",\n margin: \"0\",\n border: \"0\",\n borderRadius: \"4px\",\n background: \"none\",\n font: \"inherit\",\n color: \"var(--text-secondary-color, #6b7280)\",\n cursor: toggle ? \"pointer\" : \"default\",\n opacity: s.hidden ? \"0.45\" : \"1\",\n textDecoration: s.hidden ? \"line-through\" : \"none\",\n });\n item.append(\n swatch(doc, s.colorCss, legendShape(s.type)),\n doc.createTextNode(s.name),\n );\n dom.legend.appendChild(item);\n }\n if (focused >= 0)\n (dom.legend.children[focused] as HTMLElement | undefined)?.focus();\n };\n\n const updateAccessibility = () => {\n dom.stage.setAttribute(\n \"aria-label\",\n options.ariaLabel ?? chartAriaLabel(model),\n );\n const keyboard = interaction()?.keyboard;\n dom.stage.style.touchAction = interaction()?.dragPoints ? \"none\" : \"pan-y\";\n if (keyboard) dom.stage.tabIndex = 0;\n else dom.stage.removeAttribute(\"tabindex\");\n };\n\n // ---------------------------------------------------------------- frame\n\n const sizeCanvas = (\n canvas: HTMLCanvasElement,\n width: number,\n height: number,\n dpr: number,\n ) => {\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (canvas.width !== w) canvas.width = w;\n if (canvas.height !== h) canvas.height = h;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n };\n\n const transformFor = (range: Range, o: number, reverse: boolean) => {\n const scale = 2 / (range[1] - range[0]);\n const offset = (o - range[0]) * scale - 1;\n return reverse ? [-scale, -offset] : [scale, offset];\n };\n\n function frame() {\n frameId = 0;\n if (destroyed) return;\n const width = dom.stage.clientWidth;\n const height = dom.stage.clientHeight;\n if (width <= 0 || height <= 0) return;\n const dpr = win?.devicePixelRatio || 1;\n sizeCanvas(dom.background, width, height, dpr);\n sizeCanvas(dom.foreground, width, height, dpr);\n const bg = dom.background.getContext(\"2d\");\n const fg = dom.foreground.getContext(\"2d\");\n\n if (bg) {\n bg.setTransform(dpr, 0, 0, dpr, 0, 0);\n bg.font = font(theme);\n }\n const layout = layoutChart({\n model,\n view,\n theme,\n width,\n height,\n padding: options.padding,\n measure: bg\n ? (text) => bg.measureText(text).width\n : (text) => text.length * theme.fontSize * 0.6,\n });\n const { plot } = layout;\n xTicks = layout.xTicks;\n yTicks = layout.yTicks;\n y2Ticks = layout.y2Ticks;\n scales = layout.scales;\n const rect = plotRect();\n if (rect && rect.join() !== lastPlot) {\n lastPlot = rect.join();\n emit(\"layout\", {\n x: rect[0],\n y: rect[1],\n width: rect[2],\n height: rect[3],\n });\n }\n\n if (bg) {\n drawBackground(bg, {\n width,\n height,\n scales,\n x: model.x,\n y: model.y,\n xTicks,\n yTicks,\n y2: model.y2,\n y2Ticks,\n theme,\n annotations,\n });\n }\n if (fg) {\n fg.setTransform(dpr, 0, 0, dpr, 0, 0);\n placedLabels = drawForeground(fg, {\n width,\n height,\n scales,\n theme,\n annotations,\n pointLabels: collectPointLabels(\n model,\n view,\n scales,\n yTicks,\n theme.background,\n // the label of a dragged point follows it (in the drag pill)\n pointDrag?.moved ? pointDrag.item : (settling?.item ?? null),\n hiddenLabel,\n ),\n connectors: connectorSegments(model, scales),\n arrows: dependencyArrows(model, scales, dependencies),\n });\n }\n\n if (renderer) {\n const canvas = renderer.canvas;\n // horizontal charts: the data layer is drawn as a vertical chart on a\n // transposed canvas (its x axis runs down the plot, its y axis right)\n const transposed = model.horizontal;\n const cw = transposed ? plot.height : plot.width;\n const ch = transposed ? plot.width : plot.height;\n styleElement(canvas, {\n left: `${plot.x}px`,\n top: `${plot.y}px`,\n width: `${cw}px`,\n height: `${ch}px`,\n transformOrigin: transposed ? \"0 0\" : \"\",\n transform: transposed ? \"matrix(0, 1, 1, 0, 0, 0)\" : \"\",\n });\n const bw = Math.max(1, Math.round(cw * dpr));\n const bh = Math.max(1, Math.round(ch * dpr));\n if (canvas.width !== bw || canvas.height !== bh) renderer.resize(bw, bh);\n ensureOrigin();\n // heatmap cells: their gaps and corners follow their size on screen\n const density: PixelDensity = {\n x: 1 / Math.abs(scales.xPerPx),\n y: 1 / Math.abs(scales.yPerPx),\n };\n const key = cellStyleKey(model, density);\n if (key !== cellKey) {\n cellKey = key;\n itemsDirty = true;\n }\n if (itemsDirty) {\n version++;\n items = buildItems(model, origin, version, density);\n itemsDirty = false;\n }\n const [xScale, xOffset] = transformFor(view.x, origin.x, model.x.reverse);\n const [yScale, yOffset] = transformFor(\n view.y,\n origin.y,\n // the top of the transposed canvas is the left of the plot\n transposed ? !model.y.reverse : model.y.reverse,\n );\n renderer.render(items, {\n transform: { xScale, xOffset, yScale, yOffset },\n width: bw,\n height: bh,\n dpr,\n });\n }\n renderHover();\n if (clearDragOnFrame) {\n clearDragOnFrame = false;\n if (!pointDrag?.moved) hideDrag();\n } else if (pointDrag?.moved) renderDrag();\n }\n\n // ------------------------------------------------------------ hit tests\n\n const hitAt = (px: number, py: number): ChartHoverEvent | null =>\n scales ? hitTest(model, scales, xTicks, px, py) : null;\n\n /** Plot area relative to the container: x, y, width, height */\n const plotRect = (): [number, number, number, number] | null => {\n const p = scales?.plot;\n if (!p) return null;\n return [\n p.x + dom.stage.offsetLeft,\n p.y + dom.stage.offsetTop,\n p.width,\n p.height,\n ];\n };\n\n /** A draggable point under the pointer (`interaction.dragPoints`) */\n const draggableAt = (px: number, py: number) => {\n if (!interaction()?.dragPoints) return null;\n const hit = hitAt(px, py);\n const item = hit?.items.find(\n (it) => model.series[it.seriesIndex].type === \"scatter\",\n );\n return item ?? null;\n };\n\n // ---------------------------------------------------------------- hover\n\n const setHover = (next: HoverState | null) => {\n const changed = !sameHover(hover?.event ?? null, next?.event ?? null);\n hover = next;\n renderHover();\n if (changed) emit(\"hover\", next ? next.event : null);\n };\n\n const tooltipNode = (event: ChartHoverEvent): Node | string | null => {\n const custom = tooltipOptions()?.render;\n if (custom) return custom(event);\n const content = tooltipContent(model, event, yTicks, y2Ticks);\n const fragment = doc.createDocumentFragment();\n const header = doc.createElement(\"div\");\n styleElement(header, {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n fontWeight: \"600\",\n marginBottom: content.subtitle ? \"0\" : \"4px\",\n color: \"var(--text-color, #1f2937)\",\n });\n if (content.titleColor)\n header.appendChild(swatch(doc, content.titleColor, \"dot\"));\n header.appendChild(doc.createTextNode(content.title));\n fragment.append(header);\n if (content.subtitle) {\n const sub = doc.createElement(\"div\");\n styleElement(sub, {\n color: \"var(--text-secondary-color, #6b7280)\",\n fontSize: \"11px\",\n margin: \"1px 0 6px\",\n paddingLeft: content.titleColor ? \"14px\" : \"0\",\n });\n sub.textContent = content.subtitle;\n fragment.append(sub);\n }\n if (!content.rows.length) return fragment;\n // a label column and a value column (right-aligned, tabular figures)\n const swatches = content.rows.some((row) => row.color);\n const grid = doc.createElement(\"div\");\n styleElement(grid, {\n display: \"grid\",\n gridTemplateColumns: swatches\n ? \"auto minmax(0, 1fr) auto\"\n : \"minmax(0, 1fr) auto\",\n columnGap: \"0\",\n rowGap: \"2px\",\n alignItems: \"center\",\n });\n for (const row of content.rows) {\n if (swatches) {\n const cell = doc.createElement(\"span\");\n styleElement(cell, {\n display: \"inline-flex\",\n width: \"14px\",\n justifyContent: \"flex-start\",\n });\n if (row.color) cell.appendChild(swatch(doc, row.color, \"dot\"));\n grid.appendChild(cell);\n }\n const n = doc.createElement(\"span\");\n styleElement(n, {\n color: \"var(--text-secondary-color, #6b7280)\",\n paddingRight: \"16px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n });\n n.textContent = row.name;\n const v = doc.createElement(\"span\");\n styleElement(v, {\n fontWeight: \"600\",\n fontVariantNumeric: \"tabular-nums\",\n textAlign: \"right\",\n color: \"var(--text-color, #1f2937)\",\n });\n v.textContent = row.value;\n grid.append(n, v);\n }\n fragment.append(grid);\n return fragment;\n };\n\n const pooled = <T extends HTMLElement>(\n pool: T[],\n i: number,\n make: () => T,\n parent: HTMLElement = dom.hover,\n ) => {\n if (!pool[i]) {\n pool[i] = make();\n parent.appendChild(pool[i]);\n }\n pool[i].style.display = \"block\";\n return pool[i];\n };\n\n function renderHover() {\n const sc = scales;\n const marksShown =\n !!hover &&\n !!sc &&\n !!shownMarks &&\n shownMarks.scales === sc &&\n shownMarks.model === model &&\n sameHover(shownMarks.event, hover.event);\n // pointer moves over the same points: the markers stay where they are\n if (!marksShown) renderMarks(sc);\n\n const tip = dom.tooltip;\n if (!hover || !sc || !tooltipOptions() || drag?.moved || pointDrag?.moved) {\n tip.style.display = \"none\";\n return;\n }\n const custom = tooltipOptions()?.render;\n let w: number;\n let h: number;\n if (\n !custom &&\n shownTip &&\n shownTip.model === model &&\n shownTip.yTicks === yTicks &&\n sameHover(shownTip.event, hover.event) &&\n tip.style.display === \"block\"\n ) {\n // same content: only the position follows the pointer\n w = shownTip.width;\n h = shownTip.height;\n } else {\n shownTip = null;\n const content = tooltipNode(hover.event);\n if (content === null || content === \"\") {\n tip.style.display = \"none\";\n return;\n }\n if (typeof content === \"string\") {\n tip.textContent = content;\n tip.style.whiteSpace = \"pre\";\n } else {\n tip.replaceChildren(content);\n tip.style.whiteSpace = \"nowrap\";\n }\n tip.style.display = \"block\";\n w = tip.offsetWidth;\n h = tip.offsetHeight;\n if (!custom)\n shownTip = { event: hover.event, model, yTicks, width: w, height: h };\n }\n // off the hovered marks: beside them, above / below the rows of\n // horizontal charts (Gantt tasks), off the other bars of those\n positionTooltip(tip, dom.stage, {\n anchor: { x: hover.anchorX, y: hover.anchorY },\n avoid: withRect(hoverRect(model, sc, hover.event), labelChipBox),\n obstacles: tooltipObstacles(model, sc),\n prefer: sc.horizontal ? \"vertical\" : \"side\",\n size: { width: w, height: h },\n animate: true,\n });\n }\n\n /** Crosshair, point markers, bar bands, lifted bars and heatmap cells */\n function renderMarks(sc: Scales | null) {\n let markerCount = 0;\n let bandCount = 0;\n let cellCount = 0;\n let guideCount = 0;\n let liftCount = 0;\n let veiled = false;\n renderLegendCaret();\n shownMarks = null;\n dom.crosshair.style.display = \"none\";\n if (hover && sc) {\n shownMarks = { event: hover.event, model, scales: sc };\n const { plot } = sc;\n dom.hover.style.width = `${dom.stage.clientWidth}px`;\n dom.hover.style.height = `${dom.stage.clientHeight}px`;\n const guide = crosshairAt(model, sc, hover.event, options.crosshair);\n if (guide !== null) {\n const line =\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)\";\n styleElement(\n dom.crosshair,\n sc.horizontal\n ? {\n display: \"block\",\n left: `${plot.x}px`,\n top: `${Math.round(guide)}px`,\n width: `${plot.width}px`,\n height: \"0\",\n borderLeft: \"0\",\n borderTop: line,\n }\n : {\n display: \"block\",\n left: `${Math.round(guide)}px`,\n top: `${plot.y}px`,\n width: \"0\",\n height: `${plot.height}px`,\n borderLeft: line,\n borderTop: \"0\",\n },\n );\n }\n const marks = hoverMarks(model, sc, hover.event);\n // behind lifted bars the band only gives the context: lighter\n const lifted = marks.some((mark) => mark.kind === \"bar\");\n for (const mark of marks) {\n if (mark.kind === \"band\" || mark.kind === \"guide\") {\n const el =\n mark.kind === \"band\"\n ? pooled(bands, bandCount++, () => createBand(doc), dom.underlay)\n : pooled(\n guides,\n guideCount++,\n () =>\n styleElement(createBand(doc), {\n borderRadius: \"0\",\n background:\n \"color-mix(in srgb, var(--text-color, #1f2937) 6%, transparent)\",\n }),\n dom.lift,\n );\n styleElement(el, {\n left: `${mark.x}px`,\n top: `${mark.y}px`,\n width: `${mark.width}px`,\n height: `${mark.height}px`,\n });\n if (mark.kind === \"band\")\n el.style.background = `color-mix(in srgb, var(--text-color, #1f2937) ${lifted ? 4 : 6}%, transparent)`;\n continue;\n }\n if (mark.kind === \"bar\") {\n const mixed = model.series.some(\n (series) =>\n !series.hidden &&\n (series.type === \"line\" || series.type === \"area\"),\n );\n // combo charts: the lifted bar goes below the data layer, so the\n // lines (and their markers) stay above it; no veil either\n const liftParent = mixed ? dom.underlay : dom.lift;\n if (!liftClip) {\n liftClip = styleElement(doc.createElement(\"div\"), {\n position: \"absolute\",\n overflow: \"hidden\",\n }) as HTMLDivElement;\n }\n if (\n liftClip.parentElement !== liftParent ||\n (mixed && liftParent.lastElementChild !== liftClip)\n )\n liftParent.appendChild(liftClip);\n if (!veiled && !mixed) {\n veiled = true;\n if (!veil) {\n veil = styleElement(doc.createElement(\"div\"), {\n position: \"absolute\",\n background: `color-mix(in srgb, ${PLOT_BACKGROUND} 42%, transparent)`,\n opacity: \"0\",\n }) as HTMLDivElement;\n dom.lift.insertBefore(\n veil,\n liftClip.parentElement === dom.lift ? liftClip : null,\n );\n }\n styleElement(veil, {\n left: `${plot.x}px`,\n top: `${plot.y}px`,\n width: `${plot.width}px`,\n height: `${plot.height}px`,\n transition: prefersReducedMotion(win)\n ? \"none\"\n : \"opacity 140ms ease-out\",\n opacity: \"1\",\n });\n }\n styleElement(liftClip, {\n left: `${plot.x}px`,\n top: `${plot.y}px`,\n width: `${plot.width}px`,\n height: `${plot.height}px`,\n });\n const key = `${mark.seriesIndex}:${mark.index}`;\n const prev = lifts[liftCount];\n const fresh =\n !prev || prev.style.display !== \"block\" || prev.dataset.key !== key;\n const el = pooled(\n lifts,\n liftCount++,\n () => createBand(doc),\n liftClip,\n );\n el.dataset.key = key;\n const r = liftedBarRect(mark);\n const vertical = mark.base === \"top\" || mark.base === \"bottom\";\n const ring =\n mark.ring === null\n ? null\n : {\n color: mark.ring,\n // translucent bars: a stronger ring in their solid color\n width: Math.min(\n mark.backdrop ? 2 : 1.5,\n Math.max(0, (Math.min(r.width, r.height) - 2) / 4),\n ),\n };\n el.dataset.hoverMark = \"bar\";\n const shadow = ring ? liftShadow(ring, 1.5, null) : \"none\";\n styleElement(el, {\n left: `${r.x - plot.x}px`,\n top: `${r.y - plot.y}px`,\n width: `${r.width}px`,\n height: `${r.height}px`,\n borderRadius: `${mark.radius}px`,\n filter: \"brightness(1.08) saturate(1.08)\",\n background: mark.backdrop\n ? `linear-gradient(${mark.color}, ${mark.color}), ${PLOT_BACKGROUND}`\n : mark.color,\n boxShadow: shadow,\n });\n if (fresh) {\n // grows from the bar as drawn\n const thick = vertical ? r.width : r.height;\n const k = thick > 0 ? (thick - mark.grow * 2) / thick : 1;\n playLift(\n el,\n {\n transform: vertical ? `scaleX(${k})` : `scaleY(${k})`,\n ...(ring\n ? { boxShadow: liftShadow(ring, 1.5, null, true) }\n : {}),\n },\n { transform: \"none\", ...(ring ? { boxShadow: shadow } : {}) },\n win,\n );\n }\n continue;\n }\n if (mark.kind === \"cell\") {\n // the cell lifted above its neighbours (and below the labels):\n // a ring at its edge, a halo of the background and an accent line\n const key = `${mark.seriesIndex}:${mark.index}`;\n const prev = cells[cellCount];\n const fresh =\n !prev || prev.style.display !== \"block\" || prev.dataset.key !== key;\n const el = pooled(\n cells,\n cellCount++,\n () =>\n styleElement(createBand(doc), {\n zIndex: \"1\",\n transform: `scale(${CELL_LIFT})`,\n }),\n dom.lift,\n );\n el.dataset.key = key;\n const ring = {\n color: mark.ring,\n width: Math.min(2, Math.min(mark.width, mark.height) / 5),\n };\n const shadow = liftShadow(ring, 2, CELL_ACCENT);\n styleElement(el, {\n left: `${mark.x}px`,\n top: `${mark.y}px`,\n width: `${mark.width}px`,\n height: `${mark.height}px`,\n background: mark.color,\n borderRadius: `${Math.max(mark.radius, 2)}px`,\n boxShadow: shadow,\n });\n if (fresh)\n playLift(\n el,\n {\n transform: \"scale(1)\",\n boxShadow: liftShadow(ring, 2, CELL_ACCENT, true),\n },\n { transform: `scale(${CELL_LIFT})`, boxShadow: shadow },\n win,\n );\n continue;\n }\n const prevMarker = markers[markerCount];\n const freshMarker =\n !prevMarker ||\n prevMarker.style.display !== \"block\" ||\n prevMarker.style.left !== `${mark.x}px` ||\n prevMarker.style.top !== `${mark.y}px`;\n const el = pooled(markers, markerCount++, () => createMarker(doc));\n styleElement(el, {\n left: `${mark.x}px`,\n top: `${mark.y}px`,\n width: `${mark.size}px`,\n height: `${mark.size}px`,\n background: mark.color,\n boxShadow: markerHalo(mark.halo),\n });\n if (freshMarker)\n playLift(\n el,\n { transform: \"translate(-50%, -50%) scale(0.6)\", opacity: \"0.6\" },\n { transform: \"translate(-50%, -50%) scale(1)\", opacity: \"1\" },\n win,\n );\n }\n renderLabelChip(sc);\n } else if (labelChip) {\n labelChip.style.display = \"none\";\n labelChipBox = null;\n }\n for (let i = markerCount; i < markers.length; i++)\n markers[i].style.display = \"none\";\n for (let i = bandCount; i < bands.length; i++)\n bands[i].style.display = \"none\";\n for (let i = cellCount; i < cells.length; i++)\n cells[i].style.display = \"none\";\n for (let i = guideCount; i < guides.length; i++)\n guides[i].style.display = \"none\";\n for (let i = liftCount; i < lifts.length; i++)\n lifts[i].style.display = \"none\";\n if (veil && !veiled) veil.style.opacity = \"0\";\n }\n\n /** Marks the hovered heatmap value on the color legend */\n function renderLegendCaret() {\n const caret = legendCaret;\n if (!caret) return;\n const it = hover?.event.items[0];\n const s = it ? model.series[it.seriesIndex] : undefined;\n if (!it || !s || s.type !== \"heatmap\" || it.value === undefined) {\n caret.style.display = \"none\";\n return;\n }\n caret.style.display = \"block\";\n caret.style.left = `${(heatPosition(s, it.value) * 100).toFixed(2)}%`;\n }\n\n /** The label of a hovered dot, highlighted in a chip tinted with its color */\n function renderLabelChip(sc: Scales) {\n const it = hover?.event.items[0];\n const s = it ? model.series[it.seriesIndex] : undefined;\n let found: { label: PointLabel; box: Rect } | undefined;\n if (\n it &&\n s?.type === \"scatter\" &&\n it.label &&\n !pointDrag?.moved &&\n interaction()?.hoverLabel !== false\n ) {\n const p = pointOf(s, it.index, sc);\n found = placedLabels.find(\n ({ label }) =>\n !label.hidden &&\n label.text === it.label &&\n Math.abs(label.x - p.px) < 0.5 &&\n Math.abs(label.y - p.py) < 0.5,\n );\n }\n labelChipBox = null;\n if (!found || !it) {\n if (labelChip) labelChip.style.display = \"none\";\n return;\n }\n if (!labelChip) {\n labelChip = createLabelPill(doc);\n labelChip.dataset.hoverMark = \"label\";\n dom.hover.appendChild(labelChip);\n }\n labelChip.textContent = found.label.text;\n styleElement(labelChip, {\n display: \"block\",\n left: `${found.box.x - 10}px`,\n top: `${found.box.y + found.box.height / 2}px`,\n transform: \"translateY(-50%)\",\n background: `color-mix(in srgb, ${it.color} 14%, var(--surface-color, var(--background-color, #fff)))`,\n borderColor: `color-mix(in srgb, ${it.color} 45%, transparent)`,\n boxShadow: \"0 4px 12px -4px rgba(15, 23, 42, 0.28)\",\n });\n // the canvas label, a little wider in bold, with the padding of the chip\n labelChipBox = {\n x: found.box.x - 10,\n y: found.box.y + found.box.height / 2 - 11,\n width: found.box.width * 1.1 + 20,\n height: 22,\n };\n }\n\n // ----------------------------------------------------------- point drag\n\n /** The dragged point under the pointer, its label, its origin and target */\n function renderDrag() {\n const d = pointDrag;\n const sc = scales;\n if (!d?.moved || !sc) return;\n showDrag(\n dragPreview(\n model,\n sc,\n annotations,\n d.item,\n d.px,\n d.py,\n !!interaction()?.dropTargets,\n ),\n true,\n );\n }\n\n function showDrag(p: DragPreview, live: boolean) {\n if (!dragEls) {\n dragEls = {\n dot: createDragDot(doc),\n pill: createLabelPill(doc),\n placeholder: createDragPlaceholder(doc),\n target: createDropTarget(doc),\n };\n dragEls.dot.dataset.dragMark = \"dot\";\n dragEls.pill.dataset.dragMark = \"label\";\n dragEls.placeholder.dataset.dragMark = \"origin\";\n dragEls.target.dataset.dragMark = \"target\";\n dom.underlay.appendChild(dragEls.target);\n dom.hover.append(dragEls.placeholder, dragEls.dot, dragEls.pill);\n }\n const { dot, pill, placeholder, target } = dragEls;\n dom.hover.style.width = `${dom.stage.clientWidth}px`;\n dom.hover.style.height = `${dom.stage.clientHeight}px`;\n styleElement(dot, {\n display: \"block\",\n left: `${p.x}px`,\n top: `${p.y}px`,\n width: `${p.size}px`,\n height: `${p.size}px`,\n background: p.color,\n boxShadow: dragDotShadow(p.color),\n });\n if (p.label && interaction()?.dragLabel !== false) {\n pill.textContent = p.label;\n const sc = scales;\n // beside the dot, on the side with room\n const right = !sc || p.x < sc.plot.x + sc.plot.width * 0.62;\n styleElement(pill, {\n display: \"block\",\n left: `${p.x}px`,\n top: `${p.y}px`,\n transform: right\n ? `translate(${p.size / 2 + 8}px, -50%)`\n : `translate(calc(-100% - ${p.size / 2 + 8}px), -50%)`,\n });\n } else pill.style.display = \"none\";\n if (live && p.origin) {\n const size = p.size - 2;\n styleElement(placeholder, {\n display: \"block\",\n left: `${p.origin.x}px`,\n top: `${p.origin.y}px`,\n width: `${size}px`,\n height: `${size}px`,\n borderColor: p.color,\n background: `color-mix(in srgb, ${PLOT_BACKGROUND} 62%, transparent)`,\n });\n } else placeholder.style.display = \"none\";\n if (live && p.target) {\n styleElement(target, {\n display: \"block\",\n left: `${p.target.x}px`,\n top: `${p.target.y}px`,\n width: `${p.target.width}px`,\n height: `${p.target.height}px`,\n background: `color-mix(in srgb, ${p.target.color} 12%, transparent)`,\n boxShadow: `inset 0 0 0 2px color-mix(in srgb, ${p.target.color} 70%, transparent)`,\n });\n } else target.style.display = \"none\";\n }\n\n function hideDrag() {\n if (!dragEls) return;\n for (const el of Object.values(dragEls)) el.style.display = \"none\";\n }\n\n const onDragKey = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !pointDrag) return;\n event.preventDefault();\n event.stopPropagation();\n cancelDrag();\n };\n\n const releasePointer = (id: number) => {\n if (dom.stage.hasPointerCapture?.(id)) dom.stage.releasePointerCapture(id);\n };\n\n /** Ends a point drag without a drop (Escape, a cancelled pointer) */\n function cancelDrag() {\n const d = pointDrag;\n if (!d) return;\n pointDrag = null;\n win?.removeEventListener(\"keydown\", onDragKey, true);\n releasePointer(d.id);\n dom.stage.style.cursor = \"\";\n hideDrag();\n if (!d.moved) return;\n invalidate();\n emit(\"dragEnd\", { item: d.item, cancelled: true });\n }\n\n // ---------------------------------------------------------- interaction\n\n const setViewInternal = (next: ChartView, notify: boolean) => {\n const { base, minSpan } = model;\n view = {\n x: clampRange(next.x, base.x, minSpan.x),\n y: clampRange(next.y, base.y, minSpan.y),\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n const it = interaction();\n dom.stage.style.cursor = zoomed && it?.pan ? \"grab\" : \"\";\n if (notify) emit(\"zoom\", viewToValues(model, view));\n invalidate();\n };\n\n const zoomAt = (px: number, py: number, factor: number) => {\n const sc = scales;\n if (!sc) return;\n const next = copyView(view);\n const at = toData(sc, px, py);\n if (model.zoom.x) next.x = zoomRange(view.x, at.x, factor);\n if (model.zoom.y) next.y = zoomRange(view.y, at.y, factor);\n setViewInternal(next, true);\n };\n\n const localPoint = (event: { clientX: number; clientY: number }) => {\n const rect = dom.stage.getBoundingClientRect();\n return { x: event.clientX - rect.left, y: event.clientY - rect.top };\n };\n\n const inPlot = (x: number, y: number) => {\n const p = scales?.plot;\n return (\n !!p && x >= p.x && x <= p.x + p.width && y >= p.y && y <= p.y + p.height\n );\n };\n\n const dataAt = (x: number, y: number) => {\n const sc = scales;\n if (!sc) return null;\n const { plot } = sc;\n const cx = Math.max(plot.x, Math.min(plot.x + plot.width, x));\n const cy = Math.max(plot.y, Math.min(plot.y + plot.height, y));\n const p = toData(sc, cx, cy);\n // values of the axes (not logarithms)\n return { x: fromPlotX(model, p.x), y: fromPlotY(model, p.y) };\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const { x, y } = localPoint(event);\n if (pointDrag && pointDrag.id === event.pointerId) {\n const d = pointDrag;\n d.px = x;\n d.py = y;\n if (!d.moved && Math.hypot(x - d.x, y - d.y) > 3) {\n d.moved = true;\n dom.stage.setPointerCapture?.(event.pointerId);\n dom.stage.style.cursor = \"grabbing\";\n win?.addEventListener(\"keydown\", onDragKey, true);\n // a drop not yet applied: the new drag replaces it\n if (settling) {\n clearTimeout(settling.timer);\n settling = null;\n }\n setHover(null);\n // the foreground is drawn again without the label of the point\n invalidate();\n const at = dataAt(d.x, d.y);\n if (at) emit(\"dragStart\", { item: d.item, x: at.x, y: at.y });\n }\n if (d.moved && pointDrag === d) {\n // the point and its label follow the pointer at once, on the DOM\n renderDrag();\n const at = dataAt(x, y);\n if (at) emit(\"drag\", { item: d.item, x: at.x, y: at.y });\n }\n return;\n }\n if (drag && drag.id === event.pointerId) {\n const dx = x - drag.x;\n const dy = y - drag.y;\n if (!drag.moved && Math.hypot(dx, dy) > 3) {\n const it = interaction();\n if (zoomed && it?.pan) {\n drag.moved = true;\n dom.stage.setPointerCapture?.(event.pointerId);\n dom.stage.style.cursor = \"grabbing\";\n }\n }\n if (drag.moved && scales) {\n const next = copyView(drag.view);\n const from = toData(scales, drag.x, drag.y);\n const to = toData(scales, x, y);\n if (model.zoom.x) next.x = panRange(drag.view.x, from.x - to.x);\n if (model.zoom.y) next.y = panRange(drag.view.y, from.y - to.y);\n setViewInternal(next, true);\n return;\n }\n }\n const event2 = hitAt(x, y);\n setHover(\n event2\n ? { event: event2, anchorX: x, anchorY: y, keyboard: false }\n : null,\n );\n if (!drag && interaction()?.dragPoints) {\n dom.stage.style.cursor = draggableAt(x, y)\n ? \"grab\"\n : zoomed && interaction()?.pan\n ? \"grab\"\n : \"\";\n }\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (event.button !== 0) return;\n const { x, y } = localPoint(event);\n if (!inPlot(x, y)) return;\n const draggable = draggableAt(x, y);\n if (draggable) {\n pointDrag = {\n id: event.pointerId,\n item: draggable,\n x,\n y,\n px: x,\n py: y,\n moved: false,\n };\n return;\n }\n drag = { id: event.pointerId, x, y, view: copyView(view), moved: false };\n };\n\n const onPointerUp = (event: PointerEvent) => {\n if (pointDrag && pointDrag.id === event.pointerId) {\n const d = pointDrag;\n const { x, y } = localPoint(event);\n if (d.moved && event.type === \"pointercancel\") {\n cancelDrag();\n return;\n }\n pointDrag = null;\n win?.removeEventListener(\"keydown\", onDragKey, true);\n releasePointer(event.pointerId);\n dom.stage.style.cursor = draggableAt(x, y) ? \"grab\" : \"\";\n if (d.moved) {\n d.px = x;\n d.py = y;\n const at = dataAt(x, y);\n const sc = scales;\n // the dot stays where it was released until the new data is drawn\n if (sc) {\n showDrag(\n dragPreview(model, sc, annotations, d.item, x, y, false),\n false,\n );\n if (settling) clearTimeout(settling.timer);\n settling = {\n item: d.item,\n timer: setTimeout(() => {\n settling = null;\n if (!pointDrag?.moved) hideDrag();\n invalidate();\n }, 320),\n };\n } else hideDrag();\n if (at) emit(\"drop\", { item: d.item, x: at.x, y: at.y });\n emit(\"dragEnd\", { item: d.item, cancelled: !at });\n renderHover();\n } else {\n const hit = hitAt(x, y);\n if (hit) emit(\"click\", hit);\n }\n return;\n }\n if (!drag || drag.id !== event.pointerId) return;\n const moved = drag.moved;\n drag = null;\n if (dom.stage.hasPointerCapture?.(event.pointerId)) {\n dom.stage.releasePointerCapture(event.pointerId);\n }\n dom.stage.style.cursor = zoomed && interaction()?.pan ? \"grab\" : \"\";\n if (!moved) {\n const { x, y } = localPoint(event);\n const hit = hitAt(x, y);\n if (hit) emit(\"click\", hit);\n else if (event.type !== \"pointercancel\" && inPlot(x, y)) {\n const at = dataAt(x, y);\n if (at) emit(\"plotClick\", at);\n }\n } else {\n renderHover();\n }\n };\n\n const onPointerLeave = () => {\n if (!drag?.moved && !pointDrag?.moved) setHover(null);\n };\n\n const onWheel = (event: WheelEvent) => {\n const it = interaction();\n if (!it || it.zoom === false || (!model.zoom.x && !model.zoom.y)) return;\n const { x, y } = localPoint(event);\n if (!inPlot(x, y)) return;\n const modifier = event.ctrlKey || event.metaKey;\n if (it.wheel === \"always\" || modifier) {\n event.preventDefault();\n zoomAt(\n x,\n y,\n wheelFactor(\n event.deltaY,\n event.deltaMode,\n event.ctrlKey && !event.metaKey,\n ),\n );\n } else if (\n zoomed &&\n model.zoom.x &&\n scales &&\n !scales.horizontal &&\n Math.abs(event.deltaX) > Math.abs(event.deltaY)\n ) {\n event.preventDefault();\n const next = copyView(view);\n next.x = panRange(\n view.x,\n event.deltaX * scales.xPerPx * (model.x.reverse ? -1 : 1),\n );\n setViewInternal(next, true);\n }\n };\n\n const onDoubleClick = (event: MouseEvent) => {\n const { x, y } = localPoint(event);\n if (interaction() && zoomed && inPlot(x, y)) resetZoom();\n };\n\n /** Keyboard: moves along the first visible series (or the one in focus) */\n const moveFocus = (step: number) => {\n const sc = scales;\n if (!sc) return;\n const current = hover?.keyboard ? hover.event.items[0] : null;\n const series =\n (current && model.series[current.seriesIndex]) ??\n model.series.find((s) => !s.hidden && s.cols.count > 0);\n if (!series) return;\n const { x, y, count } = series.cols;\n let index: number;\n if (current) {\n index = current.index + step;\n } else {\n // first point inside the view\n index = series.cols.sorted ? lowerBound(x, count, view.x[0]) : 0;\n if (step < 0)\n index = series.cols.sorted\n ? lowerBound(x, count, view.x[1]) - 1\n : count - 1;\n }\n while (index >= 0 && index < count && !Number.isFinite(y[index]))\n index += step || 1;\n if (index < 0 || index >= count) return;\n // keep the point visible\n let current2 = sc;\n if (model.zoom.x && (x[index] < view.x[0] || x[index] > view.x[1])) {\n const span = view.x[1] - view.x[0];\n setViewInternal(\n { x: [x[index] - span / 2, x[index] + span / 2], y: view.y },\n true,\n );\n current2 = scales = createScales(\n sc.plot,\n view,\n model.x.reverse,\n model.y.reverse,\n model.horizontal,\n );\n }\n const p = pointOf(series, index, current2);\n const leadItem = hoverItemOf(series, index);\n const others =\n model.tooltipMode === \"axis\" && series.type !== \"scatter\"\n ? (hitAt(p.px, p.py)?.items ?? []).filter(\n (it) => it.seriesIndex !== series.index,\n )\n : [];\n const event: ChartHoverEvent = {\n items: [leadItem, ...others],\n x: leadItem.x,\n xLabel: xTicks?.formatValue(leadItem.x) ?? String(leadItem.x),\n };\n setHover({ event, anchorX: p.px, anchorY: p.py, keyboard: true });\n const it = leadItem;\n dom.live.textContent = `${it.seriesName}: ${event.xLabel}, ${yTicks?.formatValue(it.y) ?? it.y}${it.label ? ` (${it.label})` : \"\"}`;\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!interaction()?.keyboard) return;\n const center = () => {\n const p = scales?.plot;\n return p ? [p.x + p.width / 2, p.y + p.height / 2] : [0, 0];\n };\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowLeft\":\n if (model.horizontal) return;\n event.preventDefault();\n moveFocus((event.key === \"ArrowRight\") !== model.x.reverse ? 1 : -1);\n break;\n case \"ArrowDown\":\n case \"ArrowUp\":\n // horizontal charts: the x axis runs down\n if (!model.horizontal) return;\n event.preventDefault();\n moveFocus((event.key === \"ArrowDown\") !== model.x.reverse ? 1 : -1);\n break;\n case \"+\":\n case \"=\": {\n if (!model.zoom.x && !model.zoom.y) return;\n event.preventDefault();\n const [cx, cy] = center();\n zoomAt(cx, cy, 0.8);\n break;\n }\n case \"-\":\n case \"_\": {\n if (!model.zoom.x && !model.zoom.y) return;\n event.preventDefault();\n const [cx, cy] = center();\n zoomAt(cx, cy, 1.25);\n break;\n }\n case \"0\":\n event.preventDefault();\n resetZoom();\n break;\n case \"Escape\":\n if (hover) {\n event.preventDefault();\n setHover(null);\n }\n break;\n default:\n break;\n }\n };\n\n const onFocus = () => {\n let visible: boolean;\n try {\n visible = dom.stage.matches(\":focus-visible\");\n } catch {\n visible = true;\n }\n if (visible)\n dom.stage.style.boxShadow = \"0 0 0 2px var(--primary-color, #4f46e5)\";\n };\n\n const onBlur = () => {\n dom.stage.style.boxShadow = \"\";\n if (hover?.keyboard) setHover(null);\n };\n\n const stage = dom.stage;\n stage.addEventListener(\"pointermove\", onPointerMove);\n stage.addEventListener(\"pointerdown\", onPointerDown);\n stage.addEventListener(\"pointerup\", onPointerUp);\n stage.addEventListener(\"pointercancel\", onPointerUp);\n stage.addEventListener(\"pointerleave\", onPointerLeave);\n stage.addEventListener(\"wheel\", onWheel, { passive: false });\n stage.addEventListener(\"dblclick\", onDoubleClick);\n stage.addEventListener(\"keydown\", onKeyDown);\n stage.addEventListener(\"focus\", onFocus);\n stage.addEventListener(\"blur\", onBlur);\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => invalidate())\n : null;\n resizeObserver?.observe(dom.stage);\n\n const refreshTheme = () => {\n if (destroyed) return;\n const next = readTheme(dom.root, options.palette);\n // the watcher fires on any class / style change of <html> / <body>:\n // keep the GPU buffers unless a color really changed\n if (themeColorsChanged(theme, next)) themeVersion++;\n theme = next;\n themeTooltip(dom.tooltip, theme);\n rebuild();\n };\n const unwatchTheme = watchTheme(refreshTheme);\n // charts without `locale` follow the page language\n const unwatchLocale = watchLocale(() => {\n if (!destroyed && !options.locale) rebuild();\n });\n\n // ------------------------------------------------------------- renderer\n\n const initRenderer = async (exclude: Set<ChartRendererKind> = new Set()) => {\n const token = ++rendererToken;\n const next = await createRenderer(\n options.renderer ?? \"auto\",\n () => createDataCanvas(doc),\n (kind) => {\n if (destroyed || renderer?.kind !== kind) return;\n renderer.destroy();\n renderer.canvas.remove();\n renderer = null;\n void initRenderer(new Set([...exclude, kind]));\n },\n exclude,\n );\n if (destroyed || token !== rendererToken) {\n next?.destroy();\n return;\n }\n if (renderer) {\n renderer.destroy();\n renderer.canvas.remove();\n }\n renderer = next;\n if (next) {\n dom.root.dataset.renderer = next.kind;\n // between the hover band and the lifted marks\n dom.stage.insertBefore(next.canvas, dom.lift);\n itemsDirty = true;\n emit(\"renderer\", next.kind);\n }\n resolveReady(next?.kind ?? null);\n invalidate();\n };\n\n // ------------------------------------------------------------------ api\n\n function resetZoom() {\n if (!zoomed) return;\n setViewInternal(copyView(model.base), true);\n }\n\n rebuild();\n void initRenderer();\n const unfollowDefault = followDefaultRenderer(\n () => options.renderer,\n () => void initRenderer(),\n );\n\n const instance: ChartInstance = {\n setOptions(next) {\n if (destroyed) return;\n const previous = options;\n options = next;\n if ((next.palette ?? []).join() !== (previous.palette ?? []).join()) {\n theme = readTheme(dom.root, next.palette);\n themeVersion++;\n }\n if ((next.renderer ?? \"auto\") !== (previous.renderer ?? \"auto\"))\n void initRenderer();\n rebuild();\n },\n resize() {\n invalidate();\n },\n resetZoom,\n getView: () => viewToValues(model, view),\n setView(next) {\n if (destroyed) return;\n setViewInternal(viewFromValues(model, next, view), false);\n },\n getRenderer: () => renderer?.kind ?? null,\n getPlotRect() {\n const rect = plotRect();\n return rect\n ? { x: rect[0], y: rect[1], width: rect[2], height: rect[3] }\n : null;\n },\n toPixel(x, y) {\n if (!scales) return null;\n const p = toScreen(scales, toPlotX(model, x), toPlotY(model, y));\n return {\n x: p.x + dom.stage.offsetLeft,\n y: p.y + dom.stage.offsetTop,\n };\n },\n fromPixel(x, y) {\n if (!scales) return null;\n const p = toData(\n scales,\n x - dom.stage.offsetLeft,\n y - dom.stage.offsetTop,\n );\n return { x: fromPlotX(model, p.x), y: fromPlotY(model, p.y) };\n },\n ready,\n refreshTheme,\n setLabelHidden(point) {\n const next = point\n ? { seriesIndex: point.seriesIndex, index: point.index }\n : null;\n if (\n next?.seriesIndex === hiddenLabel?.seriesIndex &&\n next?.index === hiddenLabel?.index\n )\n return;\n hiddenLabel = next;\n invalidate();\n },\n on(type, listener) {\n let set = listeners[type] as Set<typeof listener> | undefined;\n if (!set) {\n set = new Set();\n (listeners as Record<string, unknown>)[type] = set;\n }\n set.add(listener);\n return () => {\n set.delete(listener);\n };\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n win?.removeEventListener(\"keydown\", onDragKey, true);\n if (settling) clearTimeout(settling.timer);\n if (frameId) {\n if (win?.cancelAnimationFrame) win.cancelAnimationFrame(frameId);\n else clearTimeout(frameId);\n }\n resizeObserver?.disconnect();\n unfollowDefault();\n unwatchTheme();\n unwatchLocale();\n stage.removeEventListener(\"wheel\", onWheel);\n renderer?.destroy();\n renderer = null;\n releaseTooltip(dom.tooltip);\n dom.root.remove();\n for (const key of Object.keys(listeners)) {\n delete (listeners as Record<string, unknown>)[key];\n }\n },\n };\n return instance;\n};\n"],"mappings":"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"}