@mui/x-charts
Version:
The community edition of MUI X Charts components.
68 lines (66 loc) • 3.04 kB
JavaScript
;
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.HighlightedScatterMark = HighlightedScatterMark;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _clsx = _interopRequireDefault(require("clsx"));
var _styles = require("@mui/material/styles");
var _useChartHighlight = require("../internals/plugins/featurePlugins/useChartHighlight");
var _useChartDimensions = require("../internals/plugins/corePlugins/useChartDimensions");
var _useStore = require("../internals/store/useStore");
var _scatterClasses = require("./scatterClasses");
var _useScatterItemPosition = require("./useScatterItemPosition");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["className"];
/**
* Draws an SVG ring around the currently highlighted scatter point.
* Used by renderers where the point itself is rasterized off the SVG tree
* (for example WebGL or `svg-batch`), so the highlight has to be drawn in SVG
* and positioned via the same axis scales the underlying renderer uses.
*/
function HighlightedScatterMark(_ref) {
let {
className
} = _ref,
props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
const theme = (0, _styles.useTheme)();
const store = (0, _useStore.useStore)();
const highlightedItem = store.use(_useChartHighlight.selectorChartsHighlightedItem);
const drawingArea = store.use(_useChartDimensions.selectorChartDrawingArea);
const classes = (0, _scatterClasses.useUtilityClasses)();
const isHighlightedScatter = highlightedItem?.type === 'scatter' && highlightedItem.dataIndex !== undefined;
const resolved = (0, _useScatterItemPosition.useScatterItemPosition)(isHighlightedScatter ? {
seriesId: highlightedItem.seriesId,
dataIndex: highlightedItem.dataIndex
} : null);
if (!resolved) {
return null;
}
const {
cx,
cy,
series
} = resolved;
// Allow a markerSize margin around the drawing area so the highlight ring stays
// visible at the edges (e.g. during keyboard navigation) without needing a clip-path.
const margin = series.markerSize;
if (cx < drawingArea.left - margin || cx > drawingArea.left + drawingArea.width + margin || cy < drawingArea.top - margin || cy > drawingArea.top + drawingArea.height + margin) {
return null;
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)("circle", (0, _extends2.default)({
className: (0, _clsx.default)(classes.highlightedMark, className),
fill: "none",
stroke: (theme.vars ?? theme).palette.text.primary,
strokeWidth: 1,
cx: cx,
cy: cy,
r: series.markerSize,
pointerEvents: "none"
}, props));
}