UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

68 lines (66 loc) 3.04 kB
"use strict"; '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)); }