@mui/x-charts
Version:
The community edition of MUI X Charts components.
76 lines (74 loc) • 3.55 kB
JavaScript
import { createSelector, createSelectorMemoized } from '@mui/x-internals/store';
import { selectorChartCartesianAxesGap, selectorChartRawXAxis, selectorChartRawYAxis } from "./useChartCartesianAxisLayout.selectors.mjs";
import { selectorChartXAxisAutoSizes, selectorChartYAxisAutoSizes } from "./useChartAxisAutoSize.selectors.mjs";
import { DEFAULT_AXIS_SIZE_HEIGHT, DEFAULT_AXIS_SIZE_WIDTH, AXIS_LABEL_DEFAULT_HEIGHT } from "../../../../constants/index.mjs";
/**
* Returns the default fallback height for an X axis when auto-sizing is not available.
* This function ensures consistent fallback values between axis size calculation and rendering.
*/
export function getDefaultXAxisHeight(axis) {
return DEFAULT_AXIS_SIZE_HEIGHT + (axis.label ? AXIS_LABEL_DEFAULT_HEIGHT : 0);
}
/**
* Returns the default fallback width for a Y axis when auto-sizing is not available.
* This function ensures consistent fallback values between axis size calculation and rendering.
*/
export function getDefaultYAxisWidth(axis) {
return DEFAULT_AXIS_SIZE_WIDTH + (axis.label ? AXIS_LABEL_DEFAULT_HEIGHT : 0);
}
function selectXAxisSize(axes, axesGap, position, autoSizes) {
let axesSize = 0;
let nbOfAxes = 0;
for (const axis of axes ?? []) {
if (axis.position !== position) {
continue;
}
let axisSize;
if (axis.height === 'auto') {
axisSize = autoSizes[axis.id] ?? getDefaultXAxisHeight(axis);
} else {
axisSize = axis.height ?? 0;
}
axesSize += axisSize + (axis.zoom?.slider.enabled ? axis.zoom.slider.size : 0);
nbOfAxes += 1;
}
return axesSize + axesGap * Math.max(0, nbOfAxes - 1);
}
function selectYAxisSize(axes, axesGap, position, autoSizes) {
let axesSize = 0;
let nbOfAxes = 0;
for (const axis of axes ?? []) {
if (axis.position !== position) {
continue;
}
let axisSize;
if (axis.width === 'auto') {
axisSize = autoSizes[axis.id] ?? getDefaultYAxisWidth(axis);
} else {
axisSize = axis.width ?? 0;
}
axesSize += axisSize + (axis.zoom?.slider.enabled ? axis.zoom.slider.size : 0);
nbOfAxes += 1;
}
return axesSize + axesGap * Math.max(0, nbOfAxes - 1);
}
export const selectorChartLeftAxisSize = createSelector(selectorChartRawYAxis, selectorChartCartesianAxesGap, selectorChartYAxisAutoSizes, function selectorChartLeftAxisSize(yAxis, axesGap, autoSizes) {
return selectYAxisSize(yAxis, axesGap, 'left', autoSizes);
});
export const selectorChartRightAxisSize = createSelector(selectorChartRawYAxis, selectorChartCartesianAxesGap, selectorChartYAxisAutoSizes, function selectorChartRightAxisSize(yAxis, axesGap, autoSizes) {
return selectYAxisSize(yAxis, axesGap, 'right', autoSizes);
});
export const selectorChartTopAxisSize = createSelector(selectorChartRawXAxis, selectorChartCartesianAxesGap, selectorChartXAxisAutoSizes, function selectorChartTopAxisSize(xAxis, axesGap, autoSizes) {
return selectXAxisSize(xAxis, axesGap, 'top', autoSizes);
});
export const selectorChartBottomAxisSize = createSelector(selectorChartRawXAxis, selectorChartCartesianAxesGap, selectorChartXAxisAutoSizes, function selectorChartBottomAxisSize(xAxis, axesGap, autoSizes) {
return selectXAxisSize(xAxis, axesGap, 'bottom', autoSizes);
});
export const selectorChartAxisSizes = createSelectorMemoized(selectorChartLeftAxisSize, selectorChartRightAxisSize, selectorChartTopAxisSize, selectorChartBottomAxisSize, function selectorChartAxisSizes(left, right, top, bottom) {
return {
left,
right,
top,
bottom
};
});