Files
brk/website_next/chart/y.js
T
2026-07-04 13:27:57 +02:00

34 lines
926 B
JavaScript

import { scaleY } from "./scale.js";
import { getPlotHeight, insetPlotY } from "./viewbox.js";
/**
* @param {ChartFrame} frame
* @param {ScaleBounds} bounds
* @param {ChartScale} scale
*/
export function createYScale(frame, bounds, scale) {
const height = getPlotHeight(frame);
return /** @param {number} y */ (y) =>
insetPlotY(frame, scaleY(y, bounds, height, scale));
}
/**
* @param {ChartFrame} frame
* @param {number[]} values
* @param {(value: number) => number} [transform]
*/
export function createValueYScale(frame, values, transform = (value) => value) {
const scaledValues = values.map(transform);
const min = Math.min(...scaledValues);
const max = Math.max(...scaledValues);
const span = max - min;
const height = getPlotHeight(frame);
return /** @param {number} y */ (y) =>
insetPlotY(
frame,
span ? (1 - (transform(y) - min) / span) * height : height / 2,
);
}