UNPKG

31.5 kBJavaScriptView Raw
1'use client';
2
3import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
5import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
6import _extends from "@babel/runtime/helpers/esm/extends";
7import * as React from 'react';
8import PropTypes from 'prop-types';
9import clsx from 'clsx';
10import useTimeout, { Timeout } from '@mui/utils/useTimeout';
11import elementAcceptingRef from '@mui/utils/elementAcceptingRef';
12import { appendOwnerState } from '@mui/base/utils';
13import composeClasses from '@mui/utils/composeClasses';
14import { alpha } from '@mui/system/colorManipulator';
15import { useRtl } from '@mui/system/RtlProvider';
16import styled from '../styles/styled';
17import useTheme from '../styles/useTheme';
18import { useDefaultProps } from '../DefaultPropsProvider';
19import capitalize from '../utils/capitalize';
20import Grow from '../Grow';
21import Popper from '../Popper';
22import useEventCallback from '../utils/useEventCallback';
23import useForkRef from '../utils/useForkRef';
24import useId from '../utils/useId';
25import useIsFocusVisible from '../utils/useIsFocusVisible';
26import useControlled from '../utils/useControlled';
27import tooltipClasses, { getTooltipUtilityClass } from './tooltipClasses';
28import { jsx as _jsx } from "react/jsx-runtime";
29import { jsxs as _jsxs } from "react/jsx-runtime";
30function round(value) {
31 return Math.round(value * 1e5) / 1e5;
32}
33var 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};
46var 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});
102var 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});
163var 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' /* = width / sqrt(2) = (length of the hypotenuse) */,
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});
189var hystersisOpen = false;
190var hystersisTimer = new Timeout();
191var cursorPosition = {
192 x: 0,
193 y: 0
194};
195export function testReset() {
196 hystersisOpen = false;
197 hystersisTimer.clear();
198}
199function 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// TODO v6: Remove PopperComponent, PopperProps, TransitionComponent and TransitionProps.
212var Tooltip = /*#__PURE__*/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"]); // to prevent runtime errors, developers will need to provide a child as a React element anyway.
266 var children = /*#__PURE__*/React.isValidElement(childrenProp) ? childrenProp : /*#__PURE__*/_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 // eslint-disable-next-line react-hooks/rules-of-hooks
295 var _React$useRef = React.useRef(openProp !== undefined),
296 isControlled = _React$useRef.current; // eslint-disable-next-line react-hooks/rules-of-hooks
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 // The mouseover event will trigger for every nested element in the tooltip.
320 // We can skip rerendering when the tooltip is already open.
321 // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.
322 setOpenState(true);
323 if (onOpen && !open) {
324 onOpen(event);
325 }
326 };
327 var handleClose = useEventCallback(
328 /**
329 * @param {React.SyntheticEvent | Event} event
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 // Remove the title ahead of time.
349 // We don't want to wait for the next render commit.
350 // We would risk displaying two tooltips at the same time (native + this one).
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; // We don't necessarily care about the focusVisible state (which is safe to access via ref anyway).
375 // We just need to re-render the Tooltip if the focus-visible state changes.
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 // Workaround for https://github.com/facebook/react/issues/7769
387 // The autoFocus of React might trigger the event before the componentDidMount.
388 // We need to account for this eventuality.
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 // Prevent iOS text selection on long-tap.
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 * @param {KeyboardEvent} nativeEvent
434 */
435 function handleKeyDown(nativeEvent) {
436 // IE11, Edge (prior to using Bink?) use 'Esc'
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 // There is no point in displaying an empty tooltip.
449 // So we exclude all falsy values, except 0, which is valid.
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 // eslint-disable-next-line react-hooks/rules-of-hooks
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 /*#__PURE__*/_jsxs(React.Fragment, {
560 children: [/*#__PURE__*/React.cloneElement(children, childrenProps), /*#__PURE__*/_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 /*#__PURE__*/_jsx(TransitionComponent, _extends({
584 timeout: theme.transitions.duration.shorter
585 }, TransitionPropsInner, transitionProps, {
586 children: /*#__PURE__*/_jsxs(TooltipComponent, _extends({}, tooltipProps, {
587 children: [title, arrow ? /*#__PURE__*/_jsx(ArrowComponent, _extends({}, tooltipArrowProps, {
588 ref: setArrowRef
589 })) : null]
590 }))
591 }));
592 }
593 }))]
594 });
595});
596process.env.NODE_ENV !== "production" ? Tooltip.propTypes /* remove-proptypes */ = {
597 // ┌────────────────────────────── Warning ──────────────────────────────┐
598 // │ These PropTypes are generated from the TypeScript type definitions. │
599 // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
600 // └─────────────────────────────────────────────────────────────────────┘
601 /**
602 * If `true`, adds an arrow to the tooltip.
603 * @default false
604 */
605 arrow: PropTypes.bool,
606 /**
607 * Tooltip reference element.
608 */
609 children: elementAcceptingRef.isRequired,
610 /**
611 * Override or extend the styles applied to the component.
612 */
613 classes: PropTypes.object,
614 /**
615 * @ignore
616 */
617 className: PropTypes.string,
618 /**
619 * The components used for each slot inside.
620 *
621 * This prop is an alias for the `slots` prop.
622 * It's recommended to use the `slots` prop instead.
623 *
624 * @default {}
625 */
626 components: PropTypes.shape({
627 Arrow: PropTypes.elementType,
628 Popper: PropTypes.elementType,
629 Tooltip: PropTypes.elementType,
630 Transition: PropTypes.elementType
631 }),
632 /**
633 * The extra props for the slot components.
634 * You can override the existing props or add new ones.
635 *
636 * This prop is an alias for the `slotProps` prop.
637 * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
638 *
639 * @default {}
640 */
641 componentsProps: PropTypes.shape({
642 arrow: PropTypes.object,
643 popper: PropTypes.object,
644 tooltip: PropTypes.object,
645 transition: PropTypes.object
646 }),
647 /**
648 * Set to `true` if the `title` acts as an accessible description.
649 * By default the `title` acts as an accessible label for the child.
650 * @default false
651 */
652 describeChild: PropTypes.bool,
653 /**
654 * Do not respond to focus-visible events.
655 * @default false
656 */
657 disableFocusListener: PropTypes.bool,
658 /**
659 * Do not respond to hover events.
660 * @default false
661 */
662 disableHoverListener: PropTypes.bool,
663 /**
664 * Makes a tooltip not interactive, i.e. it will close when the user
665 * hovers over the tooltip before the `leaveDelay` is expired.
666 * @default false
667 */
668 disableInteractive: PropTypes.bool,
669 /**
670 * Do not respond to long press touch events.
671 * @default false
672 */
673 disableTouchListener: PropTypes.bool,
674 /**
675 * The number of milliseconds to wait before showing the tooltip.
676 * This prop won't impact the enter touch delay (`enterTouchDelay`).
677 * @default 100
678 */
679 enterDelay: PropTypes.number,
680 /**
681 * The number of milliseconds to wait before showing the tooltip when one was already recently opened.
682 * @default 0
683 */
684 enterNextDelay: PropTypes.number,
685 /**
686 * The number of milliseconds a user must touch the element before showing the tooltip.
687 * @default 700
688 */
689 enterTouchDelay: PropTypes.number,
690 /**
691 * If `true`, the tooltip follow the cursor over the wrapped element.
692 * @default false
693 */
694 followCursor: PropTypes.bool,
695 /**
696 * This prop is used to help implement the accessibility logic.
697 * If you don't provide this prop. It falls back to a randomly generated id.
698 */
699 id: PropTypes.string,
700 /**
701 * The number of milliseconds to wait before hiding the tooltip.
702 * This prop won't impact the leave touch delay (`leaveTouchDelay`).
703 * @default 0
704 */
705 leaveDelay: PropTypes.number,
706 /**
707 * The number of milliseconds after the user stops touching an element before hiding the tooltip.
708 * @default 1500
709 */
710 leaveTouchDelay: PropTypes.number,
711 /**
712 * Callback fired when the component requests to be closed.
713 *
714 * @param {React.SyntheticEvent} event The event source of the callback.
715 */
716 onClose: PropTypes.func,
717 /**
718 * Callback fired when the component requests to be open.
719 *
720 * @param {React.SyntheticEvent} event The event source of the callback.
721 */
722 onOpen: PropTypes.func,
723 /**
724 * If `true`, the component is shown.
725 */
726 open: PropTypes.bool,
727 /**
728 * Tooltip placement.
729 * @default 'bottom'
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 * The component used for the popper.
734 * @default Popper
735 */
736 PopperComponent: PropTypes.elementType,
737 /**
738 * Props applied to the [`Popper`](/material-ui/api/popper/) element.
739 * @default {}
740 */
741 PopperProps: PropTypes.object,
742 /**
743 * The extra props for the slot components.
744 * You can override the existing props or add new ones.
745 *
746 * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.
747 *
748 * @default {}
749 */
750 slotProps: PropTypes.shape({
751 arrow: PropTypes.object,
752 popper: PropTypes.object,
753 tooltip: PropTypes.object,
754 transition: PropTypes.object
755 }),
756 /**
757 * The components used for each slot inside.
758 *
759 * This prop is an alias for the `components` prop, which will be deprecated in the future.
760 *
761 * @default {}
762 */
763 slots: PropTypes.shape({
764 arrow: PropTypes.elementType,
765 popper: PropTypes.elementType,
766 tooltip: PropTypes.elementType,
767 transition: PropTypes.elementType
768 }),
769 /**
770 * The system prop that allows defining system overrides as well as additional CSS styles.
771 */
772 sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
773 /**
774 * Tooltip title. Zero-length titles string, undefined, null and false are never displayed.
775 */
776 title: PropTypes.node,
777 /**
778 * The component used for the transition.
779 * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
780 * @default Grow
781 */
782 TransitionComponent: PropTypes.elementType,
783 /**
784 * Props applied to the transition element.
785 * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
786 */
787 TransitionProps: PropTypes.object
788} : void 0;
789export default Tooltip;
\No newline at end of file