UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

104 lines (102 loc) 4.04 kB
'use client'; import _formatErrorMessage from "@mui/x-internals/formatErrorMessage"; import _extends from "@babel/runtime/helpers/esm/extends"; import * as React from 'react'; import { isOrdinalScale } from "../internals/scaleGuards.mjs"; import { useChartsContext } from "../context/ChartsProvider/useChartsContext.mjs"; import { TICK_LABEL_GAP } from "./utilities.mjs"; import { useTicksGrouped } from "../hooks/useTicksGrouped.mjs"; import { useAxisTicksProps } from "./useAxisTicksProps.mjs"; import { useStore } from "../internals/store/useStore.mjs"; import { selectorChartXAxisAutoSizeResults } from "../internals/plugins/featurePlugins/useChartCartesianAxis/useChartAxisAutoSize.selectors.mjs"; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; const DEFAULT_GROUPING_CONFIG = { tickSize: 6 }; const getGroupingConfig = (groups, groupIndex, tickSize, computedGroupTickSizes) => { const config = groups[groupIndex] ?? {}; const defaultTickSize = tickSize ?? DEFAULT_GROUPING_CONFIG.tickSize; const calculatedTickSize = defaultTickSize * groupIndex * 2 + defaultTickSize; return _extends({}, DEFAULT_GROUPING_CONFIG, config, { tickSize: computedGroupTickSizes?.[groupIndex] ?? config.tickSize ?? calculatedTickSize }); }; /** * @ignore - internal component. */ function ChartsGroupedXAxisTicks(inProps) { const { xScale, defaultizedProps, tickNumber, positionSign, classes, Tick, TickLabel, axisTickLabelProps } = useAxisTicksProps(inProps); if (!isOrdinalScale(xScale)) { throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X Charts: ChartsGroupedXAxis only supports the `band` and `point` scale types. ' + 'Grouped axis ticks require an ordinal scale to display category groupings. ' + 'Use a band or point scale type for the x-axis, or use a non-grouped axis component.' : _formatErrorMessage(8)); } const { disableTicks, tickSize, valueFormatter, slotProps, tickInterval, tickPlacement, tickLabelPlacement } = defaultizedProps; const groups = defaultizedProps.groups; const axisId = defaultizedProps.id; const { instance } = useChartsContext(); const store = useStore(); // Get computed group tick sizes from auto-sizing (if available) const autoSizeResults = store.use(selectorChartXAxisAutoSizeResults); const axisAutoSizeResult = axisId ? autoSizeResults[axisId] : undefined; const computedGroupTickSizes = axisAutoSizeResult?.groupTickSizes; const xTicks = useTicksGrouped({ scale: xScale, tickNumber, valueFormatter, tickInterval, tickPlacement, tickLabelPlacement, direction: 'x', groups }); return /*#__PURE__*/_jsx(React.Fragment, { children: xTicks.map((item, index) => { const { offset: tickOffset, labelOffset } = item; const xTickLabel = labelOffset ?? 0; const showTick = instance.isXInside(tickOffset); const tickLabel = item.formattedValue; const ignoreTick = item.ignoreTick ?? false; const groupIndex = item.groupIndex ?? 0; const groupConfig = getGroupingConfig(groups, groupIndex, tickSize, computedGroupTickSizes); const tickYSize = positionSign * groupConfig.tickSize; const labelPositionY = positionSign * (groupConfig.tickSize + TICK_LABEL_GAP); return /*#__PURE__*/_jsxs("g", { transform: `translate(${tickOffset}, 0)`, className: classes.tickContainer, "data-group-index": groupIndex, children: [!disableTicks && !ignoreTick && showTick && /*#__PURE__*/_jsx(Tick, _extends({ y2: tickYSize, className: classes.tick }, slotProps?.axisTick)), tickLabel !== undefined && /*#__PURE__*/_jsx(TickLabel, _extends({ x: xTickLabel, y: labelPositionY }, axisTickLabelProps, { style: _extends({}, axisTickLabelProps.style, groupConfig.tickLabelStyle), text: tickLabel }))] }, index); }) }); } export { ChartsGroupedXAxisTicks };