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