UNPKG

23.2 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.testReset = testReset;
11exports.default = exports.styles = void 0;
12
13var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
14
15var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
16
17var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
18
19var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
20
21var React = _interopRequireWildcard(require("react"));
22
23var ReactDOM = _interopRequireWildcard(require("react-dom"));
24
25var _propTypes = _interopRequireDefault(require("prop-types"));
26
27var _clsx = _interopRequireDefault(require("clsx"));
28
29var _utils = require("@material-ui/utils");
30
31var _colorManipulator = require("../styles/colorManipulator");
32
33var _withStyles = _interopRequireDefault(require("../styles/withStyles"));
34
35var _capitalize = _interopRequireDefault(require("../utils/capitalize"));
36
37var _Grow = _interopRequireDefault(require("../Grow"));
38
39var _Popper = _interopRequireDefault(require("../Popper"));
40
41var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
42
43var _unstable_useId = _interopRequireDefault(require("../utils/unstable_useId"));
44
45var _setRef = _interopRequireDefault(require("../utils/setRef"));
46
47var _useIsFocusVisible2 = _interopRequireDefault(require("../utils/useIsFocusVisible"));
48
49var _useControlled3 = _interopRequireDefault(require("../utils/useControlled"));
50
51var _useTheme = _interopRequireDefault(require("../styles/useTheme"));
52
53function round(value) {
54 return Math.round(value * 1e5) / 1e5;
55}
56
57function arrowGenerator() {
58 return {
59 '&[x-placement*="bottom"] $arrow': {
60 top: 0,
61 left: 0,
62 marginTop: '-0.71em',
63 marginLeft: 4,
64 marginRight: 4,
65 '&::before': {
66 transformOrigin: '0 100%'
67 }
68 },
69 '&[x-placement*="top"] $arrow': {
70 bottom: 0,
71 left: 0,
72 marginBottom: '-0.71em',
73 marginLeft: 4,
74 marginRight: 4,
75 '&::before': {
76 transformOrigin: '100% 0'
77 }
78 },
79 '&[x-placement*="right"] $arrow': {
80 left: 0,
81 marginLeft: '-0.71em',
82 height: '1em',
83 width: '0.71em',
84 marginTop: 4,
85 marginBottom: 4,
86 '&::before': {
87 transformOrigin: '100% 100%'
88 }
89 },
90 '&[x-placement*="left"] $arrow': {
91 right: 0,
92 marginRight: '-0.71em',
93 height: '1em',
94 width: '0.71em',
95 marginTop: 4,
96 marginBottom: 4,
97 '&::before': {
98 transformOrigin: '0 0'
99 }
100 }
101 };
102}
103
104var styles = function styles(theme) {
105 return {
106 /* Styles applied to the Popper component. */
107 popper: {
108 zIndex: theme.zIndex.tooltip,
109 pointerEvents: 'none' // disable jss-rtl plugin
110
111 },
112
113 /* Styles applied to the Popper component if `interactive={true}`. */
114 popperInteractive: {
115 pointerEvents: 'auto'
116 },
117
118 /* Styles applied to the Popper component if `arrow={true}`. */
119 popperArrow: arrowGenerator(),
120
121 /* Styles applied to the tooltip (label wrapper) element. */
122 tooltip: {
123 backgroundColor: (0, _colorManipulator.alpha)(theme.palette.grey[700], 0.9),
124 borderRadius: theme.shape.borderRadius,
125 color: theme.palette.common.white,
126 fontFamily: theme.typography.fontFamily,
127 padding: '4px 8px',
128 fontSize: theme.typography.pxToRem(10),
129 lineHeight: "".concat(round(14 / 10), "em"),
130 maxWidth: 300,
131 wordWrap: 'break-word',
132 fontWeight: theme.typography.fontWeightMedium
133 },
134
135 /* Styles applied to the tooltip (label wrapper) element if `arrow={true}`. */
136 tooltipArrow: {
137 position: 'relative',
138 margin: '0'
139 },
140
141 /* Styles applied to the arrow element. */
142 arrow: {
143 overflow: 'hidden',
144 position: 'absolute',
145 width: '1em',
146 height: '0.71em'
147 /* = width / sqrt(2) = (length of the hypotenuse) */
148 ,
149 boxSizing: 'border-box',
150 color: (0, _colorManipulator.alpha)(theme.palette.grey[700], 0.9),
151 '&::before': {
152 content: '""',
153 margin: 'auto',
154 display: 'block',
155 width: '100%',
156 height: '100%',
157 backgroundColor: 'currentColor',
158 transform: 'rotate(45deg)'
159 }
160 },
161
162 /* Styles applied to the tooltip (label wrapper) element if the tooltip is opened by touch. */
163 touch: {
164 padding: '8px 16px',
165 fontSize: theme.typography.pxToRem(14),
166 lineHeight: "".concat(round(16 / 14), "em"),
167 fontWeight: theme.typography.fontWeightRegular
168 },
169
170 /* Styles applied to the tooltip (label wrapper) element if `placement` contains "left". */
171 tooltipPlacementLeft: (0, _defineProperty2.default)({
172 transformOrigin: 'right center',
173 margin: '0 24px '
174 }, theme.breakpoints.up('sm'), {
175 margin: '0 14px'
176 }),
177
178 /* Styles applied to the tooltip (label wrapper) element if `placement` contains "right". */
179 tooltipPlacementRight: (0, _defineProperty2.default)({
180 transformOrigin: 'left center',
181 margin: '0 24px'
182 }, theme.breakpoints.up('sm'), {
183 margin: '0 14px'
184 }),
185
186 /* Styles applied to the tooltip (label wrapper) element if `placement` contains "top". */
187 tooltipPlacementTop: (0, _defineProperty2.default)({
188 transformOrigin: 'center bottom',
189 margin: '24px 0'
190 }, theme.breakpoints.up('sm'), {
191 margin: '14px 0'
192 }),
193
194 /* Styles applied to the tooltip (label wrapper) element if `placement` contains "bottom". */
195 tooltipPlacementBottom: (0, _defineProperty2.default)({
196 transformOrigin: 'center top',
197 margin: '24px 0'
198 }, theme.breakpoints.up('sm'), {
199 margin: '14px 0'
200 })
201 };
202};
203
204exports.styles = styles;
205var hystersisOpen = false;
206var hystersisTimer = null;
207
208function testReset() {
209 hystersisOpen = false;
210 clearTimeout(hystersisTimer);
211}
212
213var Tooltip = /*#__PURE__*/React.forwardRef(function Tooltip(props, ref) {
214 var _props$arrow = props.arrow,
215 arrow = _props$arrow === void 0 ? false : _props$arrow,
216 children = props.children,
217 classes = props.classes,
218 _props$disableFocusLi = props.disableFocusListener,
219 disableFocusListener = _props$disableFocusLi === void 0 ? false : _props$disableFocusLi,
220 _props$disableHoverLi = props.disableHoverListener,
221 disableHoverListener = _props$disableHoverLi === void 0 ? false : _props$disableHoverLi,
222 _props$disableTouchLi = props.disableTouchListener,
223 disableTouchListener = _props$disableTouchLi === void 0 ? false : _props$disableTouchLi,
224 _props$enterDelay = props.enterDelay,
225 enterDelay = _props$enterDelay === void 0 ? 100 : _props$enterDelay,
226 _props$enterNextDelay = props.enterNextDelay,
227 enterNextDelay = _props$enterNextDelay === void 0 ? 0 : _props$enterNextDelay,
228 _props$enterTouchDela = props.enterTouchDelay,
229 enterTouchDelay = _props$enterTouchDela === void 0 ? 700 : _props$enterTouchDela,
230 idProp = props.id,
231 _props$interactive = props.interactive,
232 interactive = _props$interactive === void 0 ? false : _props$interactive,
233 _props$leaveDelay = props.leaveDelay,
234 leaveDelay = _props$leaveDelay === void 0 ? 0 : _props$leaveDelay,
235 _props$leaveTouchDela = props.leaveTouchDelay,
236 leaveTouchDelay = _props$leaveTouchDela === void 0 ? 1500 : _props$leaveTouchDela,
237 onClose = props.onClose,
238 onOpen = props.onOpen,
239 openProp = props.open,
240 _props$placement = props.placement,
241 placement = _props$placement === void 0 ? 'bottom' : _props$placement,
242 _props$PopperComponen = props.PopperComponent,
243 PopperComponent = _props$PopperComponen === void 0 ? _Popper.default : _props$PopperComponen,
244 PopperProps = props.PopperProps,
245 title = props.title,
246 _props$TransitionComp = props.TransitionComponent,
247 TransitionComponent = _props$TransitionComp === void 0 ? _Grow.default : _props$TransitionComp,
248 TransitionProps = props.TransitionProps,
249 other = (0, _objectWithoutProperties2.default)(props, ["arrow", "children", "classes", "disableFocusListener", "disableHoverListener", "disableTouchListener", "enterDelay", "enterNextDelay", "enterTouchDelay", "id", "interactive", "leaveDelay", "leaveTouchDelay", "onClose", "onOpen", "open", "placement", "PopperComponent", "PopperProps", "title", "TransitionComponent", "TransitionProps"]);
250 var theme = (0, _useTheme.default)();
251
252 var _React$useState = React.useState(),
253 childNode = _React$useState[0],
254 setChildNode = _React$useState[1];
255
256 var _React$useState2 = React.useState(null),
257 arrowRef = _React$useState2[0],
258 setArrowRef = _React$useState2[1];
259
260 var ignoreNonTouchEvents = React.useRef(false);
261 var closeTimer = React.useRef();
262 var enterTimer = React.useRef();
263 var leaveTimer = React.useRef();
264 var touchTimer = React.useRef();
265
266 var _useControlled = (0, _useControlled3.default)({
267 controlled: openProp,
268 default: false,
269 name: 'Tooltip',
270 state: 'open'
271 }),
272 _useControlled2 = (0, _slicedToArray2.default)(_useControlled, 2),
273 openState = _useControlled2[0],
274 setOpenState = _useControlled2[1];
275
276 var open = openState;
277
278 if (process.env.NODE_ENV !== 'production') {
279 // eslint-disable-next-line react-hooks/rules-of-hooks
280 var _React$useRef = React.useRef(openProp !== undefined),
281 isControlled = _React$useRef.current; // eslint-disable-next-line react-hooks/rules-of-hooks
282
283
284 React.useEffect(function () {
285 if (childNode && childNode.disabled && !isControlled && title !== '' && childNode.tagName.toLowerCase() === 'button') {
286 console.error(['Material-UI: 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'));
287 }
288 }, [title, childNode, isControlled]);
289 }
290
291 var id = (0, _unstable_useId.default)(idProp);
292 React.useEffect(function () {
293 return function () {
294 clearTimeout(closeTimer.current);
295 clearTimeout(enterTimer.current);
296 clearTimeout(leaveTimer.current);
297 clearTimeout(touchTimer.current);
298 };
299 }, []);
300
301 var handleOpen = function handleOpen(event) {
302 clearTimeout(hystersisTimer);
303 hystersisOpen = true; // The mouseover event will trigger for every nested element in the tooltip.
304 // We can skip rerendering when the tooltip is already open.
305 // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.
306
307 setOpenState(true);
308
309 if (onOpen) {
310 onOpen(event);
311 }
312 };
313
314 var handleEnter = function handleEnter() {
315 var forward = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
316 return function (event) {
317 var childrenProps = children.props;
318
319 if (event.type === 'mouseover' && childrenProps.onMouseOver && forward) {
320 childrenProps.onMouseOver(event);
321 }
322
323 if (ignoreNonTouchEvents.current && event.type !== 'touchstart') {
324 return;
325 } // Remove the title ahead of time.
326 // We don't want to wait for the next render commit.
327 // We would risk displaying two tooltips at the same time (native + this one).
328
329
330 if (childNode) {
331 childNode.removeAttribute('title');
332 }
333
334 clearTimeout(enterTimer.current);
335 clearTimeout(leaveTimer.current);
336
337 if (enterDelay || hystersisOpen && enterNextDelay) {
338 event.persist();
339 enterTimer.current = setTimeout(function () {
340 handleOpen(event);
341 }, hystersisOpen ? enterNextDelay : enterDelay);
342 } else {
343 handleOpen(event);
344 }
345 };
346 };
347
348 var _useIsFocusVisible = (0, _useIsFocusVisible2.default)(),
349 isFocusVisible = _useIsFocusVisible.isFocusVisible,
350 onBlurVisible = _useIsFocusVisible.onBlurVisible,
351 focusVisibleRef = _useIsFocusVisible.ref;
352
353 var _React$useState3 = React.useState(false),
354 childIsFocusVisible = _React$useState3[0],
355 setChildIsFocusVisible = _React$useState3[1];
356
357 var handleBlur = function handleBlur() {
358 if (childIsFocusVisible) {
359 setChildIsFocusVisible(false);
360 onBlurVisible();
361 }
362 };
363
364 var handleFocus = function handleFocus() {
365 var forward = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
366 return function (event) {
367 // Workaround for https://github.com/facebook/react/issues/7769
368 // The autoFocus of React might trigger the event before the componentDidMount.
369 // We need to account for this eventuality.
370 if (!childNode) {
371 setChildNode(event.currentTarget);
372 }
373
374 if (isFocusVisible(event)) {
375 setChildIsFocusVisible(true);
376 handleEnter()(event);
377 }
378
379 var childrenProps = children.props;
380
381 if (childrenProps.onFocus && forward) {
382 childrenProps.onFocus(event);
383 }
384 };
385 };
386
387 var handleClose = function handleClose(event) {
388 clearTimeout(hystersisTimer);
389 hystersisTimer = setTimeout(function () {
390 hystersisOpen = false;
391 }, 800 + leaveDelay);
392 setOpenState(false);
393
394 if (onClose) {
395 onClose(event);
396 }
397
398 clearTimeout(closeTimer.current);
399 closeTimer.current = setTimeout(function () {
400 ignoreNonTouchEvents.current = false;
401 }, theme.transitions.duration.shortest);
402 };
403
404 var handleLeave = function handleLeave() {
405 var forward = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
406 return function (event) {
407 var childrenProps = children.props;
408
409 if (event.type === 'blur') {
410 if (childrenProps.onBlur && forward) {
411 childrenProps.onBlur(event);
412 }
413
414 handleBlur();
415 }
416
417 if (event.type === 'mouseleave' && childrenProps.onMouseLeave && event.currentTarget === childNode) {
418 childrenProps.onMouseLeave(event);
419 }
420
421 clearTimeout(enterTimer.current);
422 clearTimeout(leaveTimer.current);
423 event.persist();
424 leaveTimer.current = setTimeout(function () {
425 handleClose(event);
426 }, leaveDelay);
427 };
428 };
429
430 var detectTouchStart = function detectTouchStart(event) {
431 ignoreNonTouchEvents.current = true;
432 var childrenProps = children.props;
433
434 if (childrenProps.onTouchStart) {
435 childrenProps.onTouchStart(event);
436 }
437 };
438
439 var handleTouchStart = function handleTouchStart(event) {
440 detectTouchStart(event);
441 clearTimeout(leaveTimer.current);
442 clearTimeout(closeTimer.current);
443 clearTimeout(touchTimer.current);
444 event.persist();
445 touchTimer.current = setTimeout(function () {
446 handleEnter()(event);
447 }, enterTouchDelay);
448 };
449
450 var handleTouchEnd = function handleTouchEnd(event) {
451 if (children.props.onTouchEnd) {
452 children.props.onTouchEnd(event);
453 }
454
455 clearTimeout(touchTimer.current);
456 clearTimeout(leaveTimer.current);
457 event.persist();
458 leaveTimer.current = setTimeout(function () {
459 handleClose(event);
460 }, leaveTouchDelay);
461 };
462
463 var handleUseRef = (0, _useForkRef.default)(setChildNode, ref);
464 var handleFocusRef = (0, _useForkRef.default)(focusVisibleRef, handleUseRef); // can be removed once we drop support for non ref forwarding class components
465
466 var handleOwnRef = React.useCallback(function (instance) {
467 // #StrictMode ready
468 (0, _setRef.default)(handleFocusRef, ReactDOM.findDOMNode(instance));
469 }, [handleFocusRef]);
470 var handleRef = (0, _useForkRef.default)(children.ref, handleOwnRef); // There is no point in displaying an empty tooltip.
471
472 if (title === '') {
473 open = false;
474 } // For accessibility and SEO concerns, we render the title to the DOM node when
475 // the tooltip is hidden. However, we have made a tradeoff when
476 // `disableHoverListener` is set. This title logic is disabled.
477 // It's allowing us to keep the implementation size minimal.
478 // We are open to change the tradeoff.
479
480
481 var shouldShowNativeTitle = !open && !disableHoverListener;
482 var childrenProps = (0, _extends2.default)({
483 'aria-describedby': open ? id : null,
484 title: shouldShowNativeTitle && typeof title === 'string' ? title : null
485 }, other, children.props, {
486 className: (0, _clsx.default)(other.className, children.props.className),
487 onTouchStart: detectTouchStart,
488 ref: handleRef
489 });
490 var interactiveWrapperListeners = {};
491
492 if (!disableTouchListener) {
493 childrenProps.onTouchStart = handleTouchStart;
494 childrenProps.onTouchEnd = handleTouchEnd;
495 }
496
497 if (!disableHoverListener) {
498 childrenProps.onMouseOver = handleEnter();
499 childrenProps.onMouseLeave = handleLeave();
500
501 if (interactive) {
502 interactiveWrapperListeners.onMouseOver = handleEnter(false);
503 interactiveWrapperListeners.onMouseLeave = handleLeave(false);
504 }
505 }
506
507 if (!disableFocusListener) {
508 childrenProps.onFocus = handleFocus();
509 childrenProps.onBlur = handleLeave();
510
511 if (interactive) {
512 interactiveWrapperListeners.onFocus = handleFocus(false);
513 interactiveWrapperListeners.onBlur = handleLeave(false);
514 }
515 }
516
517 if (process.env.NODE_ENV !== 'production') {
518 if (children.props.title) {
519 console.error(['Material-UI: 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'));
520 }
521 }
522
523 var mergedPopperProps = React.useMemo(function () {
524 return (0, _utils.deepmerge)({
525 popperOptions: {
526 modifiers: {
527 arrow: {
528 enabled: Boolean(arrowRef),
529 element: arrowRef
530 }
531 }
532 }
533 }, PopperProps);
534 }, [arrowRef, PopperProps]);
535 return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.cloneElement(children, childrenProps), /*#__PURE__*/React.createElement(PopperComponent, (0, _extends2.default)({
536 className: (0, _clsx.default)(classes.popper, interactive && classes.popperInteractive, arrow && classes.popperArrow),
537 placement: placement,
538 anchorEl: childNode,
539 open: childNode ? open : false,
540 id: childrenProps['aria-describedby'],
541 transition: true
542 }, interactiveWrapperListeners, mergedPopperProps), function (_ref) {
543 var placementInner = _ref.placement,
544 TransitionPropsInner = _ref.TransitionProps;
545 return /*#__PURE__*/React.createElement(TransitionComponent, (0, _extends2.default)({
546 timeout: theme.transitions.duration.shorter
547 }, TransitionPropsInner, TransitionProps), /*#__PURE__*/React.createElement("div", {
548 className: (0, _clsx.default)(classes.tooltip, classes["tooltipPlacement".concat((0, _capitalize.default)(placementInner.split('-')[0]))], ignoreNonTouchEvents.current && classes.touch, arrow && classes.tooltipArrow)
549 }, title, arrow ? /*#__PURE__*/React.createElement("span", {
550 className: classes.arrow,
551 ref: setArrowRef
552 }) : null));
553 }));
554});
555process.env.NODE_ENV !== "production" ? Tooltip.propTypes = {
556 // ----------------------------- Warning --------------------------------
557 // | These PropTypes are generated from the TypeScript type definitions |
558 // | To update them edit the d.ts file and run "yarn proptypes" |
559 // ----------------------------------------------------------------------
560
561 /**
562 * If `true`, adds an arrow to the tooltip.
563 */
564 arrow: _propTypes.default.bool,
565
566 /**
567 * Tooltip reference element.
568 */
569 children: _utils.elementAcceptingRef.isRequired,
570
571 /**
572 * Override or extend the styles applied to the component.
573 * See [CSS API](#css) below for more details.
574 */
575 classes: _propTypes.default.object,
576
577 /**
578 * @ignore
579 */
580 className: _propTypes.default.string,
581
582 /**
583 * Do not respond to focus events.
584 */
585 disableFocusListener: _propTypes.default.bool,
586
587 /**
588 * Do not respond to hover events.
589 */
590 disableHoverListener: _propTypes.default.bool,
591
592 /**
593 * Do not respond to long press touch events.
594 */
595 disableTouchListener: _propTypes.default.bool,
596
597 /**
598 * The number of milliseconds to wait before showing the tooltip.
599 * This prop won't impact the enter touch delay (`enterTouchDelay`).
600 */
601 enterDelay: _propTypes.default.number,
602
603 /**
604 * The number of milliseconds to wait before showing the tooltip when one was already recently opened.
605 */
606 enterNextDelay: _propTypes.default.number,
607
608 /**
609 * The number of milliseconds a user must touch the element before showing the tooltip.
610 */
611 enterTouchDelay: _propTypes.default.number,
612
613 /**
614 * This prop is used to help implement the accessibility logic.
615 * If you don't provide this prop. It falls back to a randomly generated id.
616 */
617 id: _propTypes.default.string,
618
619 /**
620 * Makes a tooltip interactive, i.e. will not close when the user
621 * hovers over the tooltip before the `leaveDelay` is expired.
622 */
623 interactive: _propTypes.default.bool,
624
625 /**
626 * The number of milliseconds to wait before hiding the tooltip.
627 * This prop won't impact the leave touch delay (`leaveTouchDelay`).
628 */
629 leaveDelay: _propTypes.default.number,
630
631 /**
632 * The number of milliseconds after the user stops touching an element before hiding the tooltip.
633 */
634 leaveTouchDelay: _propTypes.default.number,
635
636 /**
637 * Callback fired when the component requests to be closed.
638 *
639 * @param {object} event The event source of the callback.
640 */
641 onClose: _propTypes.default.func,
642
643 /**
644 * Callback fired when the component requests to be open.
645 *
646 * @param {object} event The event source of the callback.
647 */
648 onOpen: _propTypes.default.func,
649
650 /**
651 * If `true`, the tooltip is shown.
652 */
653 open: _propTypes.default.bool,
654
655 /**
656 * Tooltip placement.
657 */
658 placement: _propTypes.default.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
659
660 /**
661 * The component used for the popper.
662 */
663 PopperComponent: _propTypes.default.elementType,
664
665 /**
666 * Props applied to the [`Popper`](/api/popper/) element.
667 */
668 PopperProps: _propTypes.default.object,
669
670 /**
671 * Tooltip title. Zero-length titles string are never displayed.
672 */
673 title: _propTypes.default
674 /* @typescript-to-proptypes-ignore */
675 .node.isRequired,
676
677 /**
678 * The component used for the transition.
679 * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
680 */
681 TransitionComponent: _propTypes.default.elementType,
682
683 /**
684 * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.
685 */
686 TransitionProps: _propTypes.default.object
687} : void 0;
688
689var _default = (0, _withStyles.default)(styles, {
690 name: 'MuiTooltip',
691 flip: false
692})(Tooltip);
693
694exports.default = _default;
\No newline at end of file