mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-07-04 07:43:41 -07:00
53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
import { CHART_MARKER, CHART_POINT, CHART_SIZE } from "./constants.js";
|
|
|
|
const VIEWBOX_WIDTH = CHART_SIZE.width;
|
|
|
|
/**
|
|
* @param {HTMLElement} marker
|
|
* @param {number} y
|
|
*/
|
|
export function sizeChartMarker(marker, y = 0) {
|
|
marker.style.top = `${y}px`;
|
|
marker.style.height = `${CHART_MARKER.height}px`;
|
|
}
|
|
|
|
/** @param {HTMLElement} marker */
|
|
function getMarkerWidth(marker) {
|
|
return marker.offsetWidth || CHART_MARKER.fallbackWidth;
|
|
}
|
|
|
|
/**
|
|
* @param {HTMLElement} marker
|
|
* @param {number} xValue
|
|
* @param {number} [viewWidth]
|
|
*/
|
|
export function positionChartMarker(marker, xValue, viewWidth = VIEWBOX_WIDTH) {
|
|
const parentWidth = marker.parentElement?.clientWidth || viewWidth;
|
|
const markerWidth = getMarkerWidth(marker);
|
|
const x = (xValue / viewWidth) * parentWidth;
|
|
const min = -CHART_MARKER.edgeOverflow;
|
|
const max = Math.max(
|
|
min,
|
|
parentWidth - markerWidth + CHART_MARKER.edgeOverflow,
|
|
);
|
|
const left = Math.min(Math.max(x - markerWidth / 2, min), max);
|
|
|
|
marker.style.left = `${left.toFixed(2)}px`;
|
|
}
|
|
|
|
/**
|
|
* @param {HTMLElement} marker
|
|
* @param {number} xValue
|
|
*/
|
|
export function layoutChartMarker(marker, xValue) {
|
|
sizeChartMarker(marker);
|
|
positionChartMarker(marker, xValue);
|
|
}
|
|
|
|
/** @param {number} viewWidth */
|
|
export function getChartPointRadius(viewWidth) {
|
|
return viewWidth
|
|
? (CHART_POINT.radius * CHART_SIZE.width) / viewWidth
|
|
: CHART_POINT.radius;
|
|
}
|