1 | 'use client';
|
2 |
|
3 | import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
4 | import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
5 | import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
6 | import _extends from "@babel/runtime/helpers/esm/extends";
|
7 | import * as React from 'react';
|
8 | import PropTypes from 'prop-types';
|
9 | import clsx from 'clsx';
|
10 | import useTimeout, { Timeout } from '@mui/utils/useTimeout';
|
11 | import elementAcceptingRef from '@mui/utils/elementAcceptingRef';
|
12 | import { appendOwnerState } from '@mui/base/utils';
|
13 | import composeClasses from '@mui/utils/composeClasses';
|
14 | import { alpha } from '@mui/system/colorManipulator';
|
15 | import { useRtl } from '@mui/system/RtlProvider';
|
16 | import styled from '../styles/styled';
|
17 | import useTheme from '../styles/useTheme';
|
18 | import { useDefaultProps } from '../DefaultPropsProvider';
|
19 | import capitalize from '../utils/capitalize';
|
20 | import Grow from '../Grow';
|
21 | import Popper from '../Popper';
|
22 | import useEventCallback from '../utils/useEventCallback';
|
23 | import useForkRef from '../utils/useForkRef';
|
24 | import useId from '../utils/useId';
|
25 | import useIsFocusVisible from '../utils/useIsFocusVisible';
|
26 | import useControlled from '../utils/useControlled';
|
27 | import tooltipClasses, { getTooltipUtilityClass } from './tooltipClasses';
|
28 | import { jsx as _jsx } from "react/jsx-runtime";
|
29 | import { jsxs as _jsxs } from "react/jsx-runtime";
|
30 | function round(value) {
|
31 | return Math.round(value * 1e5) / 1e5;
|
32 | }
|
33 | var useUtilityClasses = function useUtilityClasses(ownerState) {
|
34 | var classes = ownerState.classes,
|
35 | disableInteractive = ownerState.disableInteractive,
|
36 | arrow = ownerState.arrow,
|
37 | touch = ownerState.touch,
|
38 | placement = ownerState.placement;
|
39 | var slots = {
|
40 | popper: ['popper', !disableInteractive && 'popperInteractive', arrow && 'popperArrow'],
|
41 | tooltip: ['tooltip', arrow && 'tooltipArrow', touch && 'touch', "tooltipPlacement".concat(capitalize(placement.split('-')[0]))],
|
42 | arrow: ['arrow']
|
43 | };
|
44 | return composeClasses(slots, getTooltipUtilityClass, classes);
|
45 | };
|
46 | var TooltipPopper = styled(Popper, {
|
47 | name: 'MuiTooltip',
|
48 | slot: 'Popper',
|
49 | overridesResolver: function overridesResolver(props, styles) {
|
50 | var ownerState = props.ownerState;
|
51 | return [styles.popper, !ownerState.disableInteractive && styles.popperInteractive, ownerState.arrow && styles.popperArrow, !ownerState.open && styles.popperClose];
|
52 | }
|
53 | })(function (_ref) {
|
54 | var theme = _ref.theme,
|
55 | ownerState = _ref.ownerState,
|
56 | open = _ref.open;
|
57 | return _extends({
|
58 | zIndex: (theme.vars || theme).zIndex.tooltip,
|
59 | pointerEvents: 'none'
|
60 | }, !ownerState.disableInteractive && {
|
61 | pointerEvents: 'auto'
|
62 | }, !open && {
|
63 | pointerEvents: 'none'
|
64 | }, ownerState.arrow && _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "&[data-popper-placement*=\"bottom\"] .".concat(tooltipClasses.arrow), {
|
65 | top: 0,
|
66 | marginTop: '-0.71em',
|
67 | '&::before': {
|
68 | transformOrigin: '0 100%'
|
69 | }
|
70 | }), "&[data-popper-placement*=\"top\"] .".concat(tooltipClasses.arrow), {
|
71 | bottom: 0,
|
72 | marginBottom: '-0.71em',
|
73 | '&::before': {
|
74 | transformOrigin: '100% 0'
|
75 | }
|
76 | }), "&[data-popper-placement*=\"right\"] .".concat(tooltipClasses.arrow), _extends({}, !ownerState.isRtl ? {
|
77 | left: 0,
|
78 | marginLeft: '-0.71em'
|
79 | } : {
|
80 | right: 0,
|
81 | marginRight: '-0.71em'
|
82 | }, {
|
83 | height: '1em',
|
84 | width: '0.71em',
|
85 | '&::before': {
|
86 | transformOrigin: '100% 100%'
|
87 | }
|
88 | })), "&[data-popper-placement*=\"left\"] .".concat(tooltipClasses.arrow), _extends({}, !ownerState.isRtl ? {
|
89 | right: 0,
|
90 | marginRight: '-0.71em'
|
91 | } : {
|
92 | left: 0,
|
93 | marginLeft: '-0.71em'
|
94 | }, {
|
95 | height: '1em',
|
96 | width: '0.71em',
|
97 | '&::before': {
|
98 | transformOrigin: '0 0'
|
99 | }
|
100 | })));
|
101 | });
|
102 | var TooltipTooltip = styled('div', {
|
103 | name: 'MuiTooltip',
|
104 | slot: 'Tooltip',
|
105 | overridesResolver: function overridesResolver(props, styles) {
|
106 | var ownerState = props.ownerState;
|
107 | return [styles.tooltip, ownerState.touch && styles.touch, ownerState.arrow && styles.tooltipArrow, styles["tooltipPlacement".concat(capitalize(ownerState.placement.split('-')[0]))]];
|
108 | }
|
109 | })(function (_ref3) {
|
110 | var theme = _ref3.theme,
|
111 | ownerState = _ref3.ownerState;
|
112 | return _extends({
|
113 | backgroundColor: theme.vars ? theme.vars.palette.Tooltip.bg : alpha(theme.palette.grey[700], 0.92),
|
114 | borderRadius: (theme.vars || theme).shape.borderRadius,
|
115 | color: (theme.vars || theme).palette.common.white,
|
116 | fontFamily: theme.typography.fontFamily,
|
117 | padding: '4px 8px',
|
118 | fontSize: theme.typography.pxToRem(11),
|
119 | maxWidth: 300,
|
120 | margin: 2,
|
121 | wordWrap: 'break-word',
|
122 | fontWeight: theme.typography.fontWeightMedium
|
123 | }, ownerState.arrow && {
|
124 | position: 'relative',
|
125 | margin: 0
|
126 | }, ownerState.touch && {
|
127 | padding: '8px 16px',
|
128 | fontSize: theme.typography.pxToRem(14),
|
129 | lineHeight: "".concat(round(16 / 14), "em"),
|
130 | fontWeight: theme.typography.fontWeightRegular
|
131 | }, _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, ".".concat(tooltipClasses.popper, "[data-popper-placement*=\"left\"] &"), _extends({
|
132 | transformOrigin: 'right center'
|
133 | }, !ownerState.isRtl ? _extends({
|
134 | marginRight: '14px'
|
135 | }, ownerState.touch && {
|
136 | marginRight: '24px'
|
137 | }) : _extends({
|
138 | marginLeft: '14px'
|
139 | }, ownerState.touch && {
|
140 | marginLeft: '24px'
|
141 | }))), ".".concat(tooltipClasses.popper, "[data-popper-placement*=\"right\"] &"), _extends({
|
142 | transformOrigin: 'left center'
|
143 | }, !ownerState.isRtl ? _extends({
|
144 | marginLeft: '14px'
|
145 | }, ownerState.touch && {
|
146 | marginLeft: '24px'
|
147 | }) : _extends({
|
148 | marginRight: '14px'
|
149 | }, ownerState.touch && {
|
150 | marginRight: '24px'
|
151 | }))), ".".concat(tooltipClasses.popper, "[data-popper-placement*=\"top\"] &"), _extends({
|
152 | transformOrigin: 'center bottom',
|
153 | marginBottom: '14px'
|
154 | }, ownerState.touch && {
|
155 | marginBottom: '24px'
|
156 | })), ".".concat(tooltipClasses.popper, "[data-popper-placement*=\"bottom\"] &"), _extends({
|
157 | transformOrigin: 'center top',
|
158 | marginTop: '14px'
|
159 | }, ownerState.touch && {
|
160 | marginTop: '24px'
|
161 | })));
|
162 | });
|
163 | var TooltipArrow = styled('span', {
|
164 | name: 'MuiTooltip',
|
165 | slot: 'Arrow',
|
166 | overridesResolver: function overridesResolver(props, styles) {
|
167 | return styles.arrow;
|
168 | }
|
169 | })(function (_ref4) {
|
170 | var theme = _ref4.theme;
|
171 | return {
|
172 | overflow: 'hidden',
|
173 | position: 'absolute',
|
174 | width: '1em',
|
175 | height: '0.71em' ,
|
176 | boxSizing: 'border-box',
|
177 | color: theme.vars ? theme.vars.palette.Tooltip.bg : alpha(theme.palette.grey[700], 0.9),
|
178 | '&::before': {
|
179 | content: '""',
|
180 | margin: 'auto',
|
181 | display: 'block',
|
182 | width: '100%',
|
183 | height: '100%',
|
184 | backgroundColor: 'currentColor',
|
185 | transform: 'rotate(45deg)'
|
186 | }
|
187 | };
|
188 | });
|
189 | var hystersisOpen = false;
|
190 | var hystersisTimer = new Timeout();
|
191 | var cursorPosition = {
|
192 | x: 0,
|
193 | y: 0
|
194 | };
|
195 | export function testReset() {
|
196 | hystersisOpen = false;
|
197 | hystersisTimer.clear();
|
198 | }
|
199 | function composeEventHandler(handler, eventHandler) {
|
200 | return function (event) {
|
201 | for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
202 | params[_key - 1] = arguments[_key];
|
203 | }
|
204 | if (eventHandler) {
|
205 | eventHandler.apply(void 0, [event].concat(params));
|
206 | }
|
207 | handler.apply(void 0, [event].concat(params));
|
208 | };
|
209 | }
|
210 |
|
211 |
|
212 | var Tooltip = React.forwardRef(function Tooltip(inProps, ref) {
|
213 | var _ref5, _slots$popper, _ref6, _ref7, _slots$transition, _ref8, _slots$tooltip, _ref9, _slots$arrow, _slotProps$popper, _ref10, _slotProps$popper2, _slotProps$transition, _slotProps$tooltip, _ref11, _slotProps$tooltip2, _slotProps$arrow, _ref12, _slotProps$arrow2;
|
214 | var props = useDefaultProps({
|
215 | props: inProps,
|
216 | name: 'MuiTooltip'
|
217 | });
|
218 | var _props$arrow = props.arrow,
|
219 | arrow = _props$arrow === void 0 ? false : _props$arrow,
|
220 | childrenProp = props.children,
|
221 | classesProp = props.classes,
|
222 | _props$components = props.components,
|
223 | components = _props$components === void 0 ? {} : _props$components,
|
224 | _props$componentsProp = props.componentsProps,
|
225 | componentsProps = _props$componentsProp === void 0 ? {} : _props$componentsProp,
|
226 | _props$describeChild = props.describeChild,
|
227 | describeChild = _props$describeChild === void 0 ? false : _props$describeChild,
|
228 | _props$disableFocusLi = props.disableFocusListener,
|
229 | disableFocusListener = _props$disableFocusLi === void 0 ? false : _props$disableFocusLi,
|
230 | _props$disableHoverLi = props.disableHoverListener,
|
231 | disableHoverListener = _props$disableHoverLi === void 0 ? false : _props$disableHoverLi,
|
232 | _props$disableInterac = props.disableInteractive,
|
233 | disableInteractiveProp = _props$disableInterac === void 0 ? false : _props$disableInterac,
|
234 | _props$disableTouchLi = props.disableTouchListener,
|
235 | disableTouchListener = _props$disableTouchLi === void 0 ? false : _props$disableTouchLi,
|
236 | _props$enterDelay = props.enterDelay,
|
237 | enterDelay = _props$enterDelay === void 0 ? 100 : _props$enterDelay,
|
238 | _props$enterNextDelay = props.enterNextDelay,
|
239 | enterNextDelay = _props$enterNextDelay === void 0 ? 0 : _props$enterNextDelay,
|
240 | _props$enterTouchDela = props.enterTouchDelay,
|
241 | enterTouchDelay = _props$enterTouchDela === void 0 ? 700 : _props$enterTouchDela,
|
242 | _props$followCursor = props.followCursor,
|
243 | followCursor = _props$followCursor === void 0 ? false : _props$followCursor,
|
244 | idProp = props.id,
|
245 | _props$leaveDelay = props.leaveDelay,
|
246 | leaveDelay = _props$leaveDelay === void 0 ? 0 : _props$leaveDelay,
|
247 | _props$leaveTouchDela = props.leaveTouchDelay,
|
248 | leaveTouchDelay = _props$leaveTouchDela === void 0 ? 1500 : _props$leaveTouchDela,
|
249 | onClose = props.onClose,
|
250 | onOpen = props.onOpen,
|
251 | openProp = props.open,
|
252 | _props$placement = props.placement,
|
253 | placement = _props$placement === void 0 ? 'bottom' : _props$placement,
|
254 | PopperComponentProp = props.PopperComponent,
|
255 | _props$PopperProps = props.PopperProps,
|
256 | PopperProps = _props$PopperProps === void 0 ? {} : _props$PopperProps,
|
257 | _props$slotProps = props.slotProps,
|
258 | slotProps = _props$slotProps === void 0 ? {} : _props$slotProps,
|
259 | _props$slots = props.slots,
|
260 | slots = _props$slots === void 0 ? {} : _props$slots,
|
261 | title = props.title,
|
262 | _props$TransitionComp = props.TransitionComponent,
|
263 | TransitionComponentProp = _props$TransitionComp === void 0 ? Grow : _props$TransitionComp,
|
264 | TransitionProps = props.TransitionProps,
|
265 | other = _objectWithoutProperties(props, ["arrow", "children", "classes", "components", "componentsProps", "describeChild", "disableFocusListener", "disableHoverListener", "disableInteractive", "disableTouchListener", "enterDelay", "enterNextDelay", "enterTouchDelay", "followCursor", "id", "leaveDelay", "leaveTouchDelay", "onClose", "onOpen", "open", "placement", "PopperComponent", "PopperProps", "slotProps", "slots", "title", "TransitionComponent", "TransitionProps"]);
|
266 | var children = React.isValidElement(childrenProp) ? childrenProp : _jsx("span", {
|
267 | children: childrenProp
|
268 | });
|
269 | var theme = useTheme();
|
270 | var isRtl = useRtl();
|
271 | var _React$useState = React.useState(),
|
272 | childNode = _React$useState[0],
|
273 | setChildNode = _React$useState[1];
|
274 | var _React$useState2 = React.useState(null),
|
275 | arrowRef = _React$useState2[0],
|
276 | setArrowRef = _React$useState2[1];
|
277 | var ignoreNonTouchEvents = React.useRef(false);
|
278 | var disableInteractive = disableInteractiveProp || followCursor;
|
279 | var closeTimer = useTimeout();
|
280 | var enterTimer = useTimeout();
|
281 | var leaveTimer = useTimeout();
|
282 | var touchTimer = useTimeout();
|
283 | var _useControlled = useControlled({
|
284 | controlled: openProp,
|
285 | default: false,
|
286 | name: 'Tooltip',
|
287 | state: 'open'
|
288 | }),
|
289 | _useControlled2 = _slicedToArray(_useControlled, 2),
|
290 | openState = _useControlled2[0],
|
291 | setOpenState = _useControlled2[1];
|
292 | var open = openState;
|
293 | if (process.env.NODE_ENV !== 'production') {
|
294 |
|
295 | var _React$useRef = React.useRef(openProp !== undefined),
|
296 | isControlled = _React$useRef.current;
|
297 | React.useEffect(function () {
|
298 | if (childNode && childNode.disabled && !isControlled && title !== '' && childNode.tagName.toLowerCase() === 'button') {
|
299 | console.error(['MUI: You are providing a disabled `button` child to the Tooltip component.', 'A disabled element does not fire events.', "Tooltip needs to listen to the child element's events to display the title.", '', 'Add a simple wrapper element, such as a `span`.'].join('\n'));
|
300 | }
|
301 | }, [title, childNode, isControlled]);
|
302 | }
|
303 | var id = useId(idProp);
|
304 | var prevUserSelect = React.useRef();
|
305 | var stopTouchInteraction = useEventCallback(function () {
|
306 | if (prevUserSelect.current !== undefined) {
|
307 | document.body.style.WebkitUserSelect = prevUserSelect.current;
|
308 | prevUserSelect.current = undefined;
|
309 | }
|
310 | touchTimer.clear();
|
311 | });
|
312 | React.useEffect(function () {
|
313 | return stopTouchInteraction;
|
314 | }, [stopTouchInteraction]);
|
315 | var handleOpen = function handleOpen(event) {
|
316 | hystersisTimer.clear();
|
317 | hystersisOpen = true;
|
318 |
|
319 |
|
320 |
|
321 |
|
322 | setOpenState(true);
|
323 | if (onOpen && !open) {
|
324 | onOpen(event);
|
325 | }
|
326 | };
|
327 | var handleClose = useEventCallback(
|
328 | |
329 |
|
330 |
|
331 | function (event) {
|
332 | hystersisTimer.start(800 + leaveDelay, function () {
|
333 | hystersisOpen = false;
|
334 | });
|
335 | setOpenState(false);
|
336 | if (onClose && open) {
|
337 | onClose(event);
|
338 | }
|
339 | closeTimer.start(theme.transitions.duration.shortest, function () {
|
340 | ignoreNonTouchEvents.current = false;
|
341 | });
|
342 | });
|
343 | var handleMouseOver = function handleMouseOver(event) {
|
344 | if (ignoreNonTouchEvents.current && event.type !== 'touchstart') {
|
345 | return;
|
346 | }
|
347 |
|
348 |
|
349 |
|
350 |
|
351 | if (childNode) {
|
352 | childNode.removeAttribute('title');
|
353 | }
|
354 | enterTimer.clear();
|
355 | leaveTimer.clear();
|
356 | if (enterDelay || hystersisOpen && enterNextDelay) {
|
357 | enterTimer.start(hystersisOpen ? enterNextDelay : enterDelay, function () {
|
358 | handleOpen(event);
|
359 | });
|
360 | } else {
|
361 | handleOpen(event);
|
362 | }
|
363 | };
|
364 | var handleMouseLeave = function handleMouseLeave(event) {
|
365 | enterTimer.clear();
|
366 | leaveTimer.start(leaveDelay, function () {
|
367 | handleClose(event);
|
368 | });
|
369 | };
|
370 | var _useIsFocusVisible = useIsFocusVisible(),
|
371 | isFocusVisibleRef = _useIsFocusVisible.isFocusVisibleRef,
|
372 | handleBlurVisible = _useIsFocusVisible.onBlur,
|
373 | handleFocusVisible = _useIsFocusVisible.onFocus,
|
374 | focusVisibleRef = _useIsFocusVisible.ref;
|
375 |
|
376 | var _React$useState3 = React.useState(false),
|
377 | setChildIsFocusVisible = _React$useState3[1];
|
378 | var handleBlur = function handleBlur(event) {
|
379 | handleBlurVisible(event);
|
380 | if (isFocusVisibleRef.current === false) {
|
381 | setChildIsFocusVisible(false);
|
382 | handleMouseLeave(event);
|
383 | }
|
384 | };
|
385 | var handleFocus = function handleFocus(event) {
|
386 |
|
387 |
|
388 |
|
389 | if (!childNode) {
|
390 | setChildNode(event.currentTarget);
|
391 | }
|
392 | handleFocusVisible(event);
|
393 | if (isFocusVisibleRef.current === true) {
|
394 | setChildIsFocusVisible(true);
|
395 | handleMouseOver(event);
|
396 | }
|
397 | };
|
398 | var detectTouchStart = function detectTouchStart(event) {
|
399 | ignoreNonTouchEvents.current = true;
|
400 | var childrenProps = children.props;
|
401 | if (childrenProps.onTouchStart) {
|
402 | childrenProps.onTouchStart(event);
|
403 | }
|
404 | };
|
405 | var handleTouchStart = function handleTouchStart(event) {
|
406 | detectTouchStart(event);
|
407 | leaveTimer.clear();
|
408 | closeTimer.clear();
|
409 | stopTouchInteraction();
|
410 | prevUserSelect.current = document.body.style.WebkitUserSelect;
|
411 |
|
412 | document.body.style.WebkitUserSelect = 'none';
|
413 | touchTimer.start(enterTouchDelay, function () {
|
414 | document.body.style.WebkitUserSelect = prevUserSelect.current;
|
415 | handleMouseOver(event);
|
416 | });
|
417 | };
|
418 | var handleTouchEnd = function handleTouchEnd(event) {
|
419 | if (children.props.onTouchEnd) {
|
420 | children.props.onTouchEnd(event);
|
421 | }
|
422 | stopTouchInteraction();
|
423 | leaveTimer.start(leaveTouchDelay, function () {
|
424 | handleClose(event);
|
425 | });
|
426 | };
|
427 | React.useEffect(function () {
|
428 | if (!open) {
|
429 | return undefined;
|
430 | }
|
431 |
|
432 | |
433 |
|
434 |
|
435 | function handleKeyDown(nativeEvent) {
|
436 |
|
437 | if (nativeEvent.key === 'Escape' || nativeEvent.key === 'Esc') {
|
438 | handleClose(nativeEvent);
|
439 | }
|
440 | }
|
441 | document.addEventListener('keydown', handleKeyDown);
|
442 | return function () {
|
443 | document.removeEventListener('keydown', handleKeyDown);
|
444 | };
|
445 | }, [handleClose, open]);
|
446 | var handleRef = useForkRef(children.ref, focusVisibleRef, setChildNode, ref);
|
447 |
|
448 |
|
449 |
|
450 | if (!title && title !== 0) {
|
451 | open = false;
|
452 | }
|
453 | var popperRef = React.useRef();
|
454 | var handleMouseMove = function handleMouseMove(event) {
|
455 | var childrenProps = children.props;
|
456 | if (childrenProps.onMouseMove) {
|
457 | childrenProps.onMouseMove(event);
|
458 | }
|
459 | cursorPosition = {
|
460 | x: event.clientX,
|
461 | y: event.clientY
|
462 | };
|
463 | if (popperRef.current) {
|
464 | popperRef.current.update();
|
465 | }
|
466 | };
|
467 | var nameOrDescProps = {};
|
468 | var titleIsString = typeof title === 'string';
|
469 | if (describeChild) {
|
470 | nameOrDescProps.title = !open && titleIsString && !disableHoverListener ? title : null;
|
471 | nameOrDescProps['aria-describedby'] = open ? id : null;
|
472 | } else {
|
473 | nameOrDescProps['aria-label'] = titleIsString ? title : null;
|
474 | nameOrDescProps['aria-labelledby'] = open && !titleIsString ? id : null;
|
475 | }
|
476 | var childrenProps = _extends({}, nameOrDescProps, other, children.props, {
|
477 | className: clsx(other.className, children.props.className),
|
478 | onTouchStart: detectTouchStart,
|
479 | ref: handleRef
|
480 | }, followCursor ? {
|
481 | onMouseMove: handleMouseMove
|
482 | } : {});
|
483 | if (process.env.NODE_ENV !== 'production') {
|
484 | childrenProps['data-mui-internal-clone-element'] = true;
|
485 |
|
486 |
|
487 | React.useEffect(function () {
|
488 | if (childNode && !childNode.getAttribute('data-mui-internal-clone-element')) {
|
489 | console.error(['MUI: The `children` component of the Tooltip is not forwarding its props correctly.', 'Please make sure that props are spread on the same element that the ref is applied to.'].join('\n'));
|
490 | }
|
491 | }, [childNode]);
|
492 | }
|
493 | var interactiveWrapperListeners = {};
|
494 | if (!disableTouchListener) {
|
495 | childrenProps.onTouchStart = handleTouchStart;
|
496 | childrenProps.onTouchEnd = handleTouchEnd;
|
497 | }
|
498 | if (!disableHoverListener) {
|
499 | childrenProps.onMouseOver = composeEventHandler(handleMouseOver, childrenProps.onMouseOver);
|
500 | childrenProps.onMouseLeave = composeEventHandler(handleMouseLeave, childrenProps.onMouseLeave);
|
501 | if (!disableInteractive) {
|
502 | interactiveWrapperListeners.onMouseOver = handleMouseOver;
|
503 | interactiveWrapperListeners.onMouseLeave = handleMouseLeave;
|
504 | }
|
505 | }
|
506 | if (!disableFocusListener) {
|
507 | childrenProps.onFocus = composeEventHandler(handleFocus, childrenProps.onFocus);
|
508 | childrenProps.onBlur = composeEventHandler(handleBlur, childrenProps.onBlur);
|
509 | if (!disableInteractive) {
|
510 | interactiveWrapperListeners.onFocus = handleFocus;
|
511 | interactiveWrapperListeners.onBlur = handleBlur;
|
512 | }
|
513 | }
|
514 | if (process.env.NODE_ENV !== 'production') {
|
515 | if (children.props.title) {
|
516 | console.error(['MUI: You have provided a `title` prop to the child of <Tooltip />.', "Remove this title prop `".concat(children.props.title, "` or the Tooltip component.")].join('\n'));
|
517 | }
|
518 | }
|
519 | var popperOptions = React.useMemo(function () {
|
520 | var _PopperProps$popperOp;
|
521 | var tooltipModifiers = [{
|
522 | name: 'arrow',
|
523 | enabled: Boolean(arrowRef),
|
524 | options: {
|
525 | element: arrowRef,
|
526 | padding: 4
|
527 | }
|
528 | }];
|
529 | if ((_PopperProps$popperOp = PopperProps.popperOptions) != null && _PopperProps$popperOp.modifiers) {
|
530 | tooltipModifiers = tooltipModifiers.concat(PopperProps.popperOptions.modifiers);
|
531 | }
|
532 | return _extends({}, PopperProps.popperOptions, {
|
533 | modifiers: tooltipModifiers
|
534 | });
|
535 | }, [arrowRef, PopperProps]);
|
536 | var ownerState = _extends({}, props, {
|
537 | isRtl: isRtl,
|
538 | arrow: arrow,
|
539 | disableInteractive: disableInteractive,
|
540 | placement: placement,
|
541 | PopperComponentProp: PopperComponentProp,
|
542 | touch: ignoreNonTouchEvents.current
|
543 | });
|
544 | var classes = useUtilityClasses(ownerState);
|
545 | var PopperComponent = (_ref5 = (_slots$popper = slots.popper) != null ? _slots$popper : components.Popper) != null ? _ref5 : TooltipPopper;
|
546 | var TransitionComponent = (_ref6 = (_ref7 = (_slots$transition = slots.transition) != null ? _slots$transition : components.Transition) != null ? _ref7 : TransitionComponentProp) != null ? _ref6 : Grow;
|
547 | var TooltipComponent = (_ref8 = (_slots$tooltip = slots.tooltip) != null ? _slots$tooltip : components.Tooltip) != null ? _ref8 : TooltipTooltip;
|
548 | var ArrowComponent = (_ref9 = (_slots$arrow = slots.arrow) != null ? _slots$arrow : components.Arrow) != null ? _ref9 : TooltipArrow;
|
549 | var popperProps = appendOwnerState(PopperComponent, _extends({}, PopperProps, (_slotProps$popper = slotProps.popper) != null ? _slotProps$popper : componentsProps.popper, {
|
550 | className: clsx(classes.popper, PopperProps == null ? void 0 : PopperProps.className, (_ref10 = (_slotProps$popper2 = slotProps.popper) != null ? _slotProps$popper2 : componentsProps.popper) == null ? void 0 : _ref10.className)
|
551 | }), ownerState);
|
552 | var transitionProps = appendOwnerState(TransitionComponent, _extends({}, TransitionProps, (_slotProps$transition = slotProps.transition) != null ? _slotProps$transition : componentsProps.transition), ownerState);
|
553 | var tooltipProps = appendOwnerState(TooltipComponent, _extends({}, (_slotProps$tooltip = slotProps.tooltip) != null ? _slotProps$tooltip : componentsProps.tooltip, {
|
554 | className: clsx(classes.tooltip, (_ref11 = (_slotProps$tooltip2 = slotProps.tooltip) != null ? _slotProps$tooltip2 : componentsProps.tooltip) == null ? void 0 : _ref11.className)
|
555 | }), ownerState);
|
556 | var tooltipArrowProps = appendOwnerState(ArrowComponent, _extends({}, (_slotProps$arrow = slotProps.arrow) != null ? _slotProps$arrow : componentsProps.arrow, {
|
557 | className: clsx(classes.arrow, (_ref12 = (_slotProps$arrow2 = slotProps.arrow) != null ? _slotProps$arrow2 : componentsProps.arrow) == null ? void 0 : _ref12.className)
|
558 | }), ownerState);
|
559 | return _jsxs(React.Fragment, {
|
560 | children: [React.cloneElement(children, childrenProps), _jsx(PopperComponent, _extends({
|
561 | as: PopperComponentProp != null ? PopperComponentProp : Popper,
|
562 | placement: placement,
|
563 | anchorEl: followCursor ? {
|
564 | getBoundingClientRect: function getBoundingClientRect() {
|
565 | return {
|
566 | top: cursorPosition.y,
|
567 | left: cursorPosition.x,
|
568 | right: cursorPosition.x,
|
569 | bottom: cursorPosition.y,
|
570 | width: 0,
|
571 | height: 0
|
572 | };
|
573 | }
|
574 | } : childNode,
|
575 | popperRef: popperRef,
|
576 | open: childNode ? open : false,
|
577 | id: id,
|
578 | transition: true
|
579 | }, interactiveWrapperListeners, popperProps, {
|
580 | popperOptions: popperOptions,
|
581 | children: function children(_ref13) {
|
582 | var TransitionPropsInner = _ref13.TransitionProps;
|
583 | return _jsx(TransitionComponent, _extends({
|
584 | timeout: theme.transitions.duration.shorter
|
585 | }, TransitionPropsInner, transitionProps, {
|
586 | children: _jsxs(TooltipComponent, _extends({}, tooltipProps, {
|
587 | children: [title, arrow ? _jsx(ArrowComponent, _extends({}, tooltipArrowProps, {
|
588 | ref: setArrowRef
|
589 | })) : null]
|
590 | }))
|
591 | }));
|
592 | }
|
593 | }))]
|
594 | });
|
595 | });
|
596 | process.env.NODE_ENV !== "production" ? Tooltip.propTypes = {
|
597 |
|
598 |
|
599 |
|
600 |
|
601 | |
602 |
|
603 |
|
604 |
|
605 | arrow: PropTypes.bool,
|
606 | |
607 |
|
608 |
|
609 | children: elementAcceptingRef.isRequired,
|
610 | |
611 |
|
612 |
|
613 | classes: PropTypes.object,
|
614 | |
615 |
|
616 |
|
617 | className: PropTypes.string,
|
618 | |
619 |
|
620 |
|
621 |
|
622 |
|
623 |
|
624 |
|
625 |
|
626 | components: PropTypes.shape({
|
627 | Arrow: PropTypes.elementType,
|
628 | Popper: PropTypes.elementType,
|
629 | Tooltip: PropTypes.elementType,
|
630 | Transition: PropTypes.elementType
|
631 | }),
|
632 | |
633 |
|
634 |
|
635 |
|
636 |
|
637 |
|
638 |
|
639 |
|
640 |
|
641 | componentsProps: PropTypes.shape({
|
642 | arrow: PropTypes.object,
|
643 | popper: PropTypes.object,
|
644 | tooltip: PropTypes.object,
|
645 | transition: PropTypes.object
|
646 | }),
|
647 | |
648 |
|
649 |
|
650 |
|
651 |
|
652 | describeChild: PropTypes.bool,
|
653 | |
654 |
|
655 |
|
656 |
|
657 | disableFocusListener: PropTypes.bool,
|
658 | |
659 |
|
660 |
|
661 |
|
662 | disableHoverListener: PropTypes.bool,
|
663 | |
664 |
|
665 |
|
666 |
|
667 |
|
668 | disableInteractive: PropTypes.bool,
|
669 | |
670 |
|
671 |
|
672 |
|
673 | disableTouchListener: PropTypes.bool,
|
674 | |
675 |
|
676 |
|
677 |
|
678 |
|
679 | enterDelay: PropTypes.number,
|
680 | |
681 |
|
682 |
|
683 |
|
684 | enterNextDelay: PropTypes.number,
|
685 | |
686 |
|
687 |
|
688 |
|
689 | enterTouchDelay: PropTypes.number,
|
690 | |
691 |
|
692 |
|
693 |
|
694 | followCursor: PropTypes.bool,
|
695 | |
696 |
|
697 |
|
698 |
|
699 | id: PropTypes.string,
|
700 | |
701 |
|
702 |
|
703 |
|
704 |
|
705 | leaveDelay: PropTypes.number,
|
706 | |
707 |
|
708 |
|
709 |
|
710 | leaveTouchDelay: PropTypes.number,
|
711 | |
712 |
|
713 |
|
714 |
|
715 |
|
716 | onClose: PropTypes.func,
|
717 | |
718 |
|
719 |
|
720 |
|
721 |
|
722 | onOpen: PropTypes.func,
|
723 | |
724 |
|
725 |
|
726 | open: PropTypes.bool,
|
727 | |
728 |
|
729 |
|
730 |
|
731 | placement: PropTypes.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
|
732 | |
733 |
|
734 |
|
735 |
|
736 | PopperComponent: PropTypes.elementType,
|
737 | |
738 |
|
739 |
|
740 |
|
741 | PopperProps: PropTypes.object,
|
742 | |
743 |
|
744 |
|
745 |
|
746 |
|
747 |
|
748 |
|
749 |
|
750 | slotProps: PropTypes.shape({
|
751 | arrow: PropTypes.object,
|
752 | popper: PropTypes.object,
|
753 | tooltip: PropTypes.object,
|
754 | transition: PropTypes.object
|
755 | }),
|
756 | |
757 |
|
758 |
|
759 |
|
760 |
|
761 |
|
762 |
|
763 | slots: PropTypes.shape({
|
764 | arrow: PropTypes.elementType,
|
765 | popper: PropTypes.elementType,
|
766 | tooltip: PropTypes.elementType,
|
767 | transition: PropTypes.elementType
|
768 | }),
|
769 | |
770 |
|
771 |
|
772 | sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
773 | |
774 |
|
775 |
|
776 | title: PropTypes.node,
|
777 | |
778 |
|
779 |
|
780 |
|
781 |
|
782 | TransitionComponent: PropTypes.elementType,
|
783 | |
784 |
|
785 |
|
786 |
|
787 | TransitionProps: PropTypes.object
|
788 | } : void 0;
|
789 | export default Tooltip; |
\ | No newline at end of file |