diff --git a/packages/patternfly-4/react-core/src/components/ClipboardCopy/__snapshots__/CopyButton.test.js.snap b/packages/patternfly-4/react-core/src/components/ClipboardCopy/__snapshots__/CopyButton.test.js.snap index 963637305b0..b5f988eee94 100644 --- a/packages/patternfly-4/react-core/src/components/ClipboardCopy/__snapshots__/CopyButton.test.js.snap +++ b/packages/patternfly-4/react-core/src/components/ClipboardCopy/__snapshots__/CopyButton.test.js.snap @@ -3,7 +3,7 @@ exports[`copy button render 1`] = ` Copy Me diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.md b/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.md index 0cc69f188f2..15ff945025f 100644 --- a/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.md +++ b/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.md @@ -1,6 +1,7 @@ --- title: 'Tooltip' cssPrefix: 'pf-c-tooltip' +typescript: true propComponents: ['Tooltip'] --- diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.test.js b/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.test.tsx similarity index 90% rename from packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.test.js rename to packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.test.tsx index 036cb983fbe..579d67661c3 100644 --- a/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.test.js +++ b/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.test.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import * as React from 'react'; import { shallow } from 'enzyme'; -import { Tooltip } from './index'; +import { Tooltip } from './Tooltip'; import Tippy from '@tippy.js/react'; test('tooltip renders', () => { diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.js b/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.tsx similarity index 67% rename from packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.js rename to packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.tsx index 59a2599cfd8..196a5107557 100644 --- a/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.js +++ b/packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.tsx @@ -1,72 +1,74 @@ -import React from 'react'; -import PropTypes from 'prop-types'; +import * as React from 'react'; import Tippy from '@tippy.js/react'; +import { Instance as TippyInstance } from 'tippy.js'; import styles from '@patternfly/react-styles/css/components/Tooltip/tooltip'; import { css, getModifier } from '@patternfly/react-styles'; -import TooltipArrow from './TooltipArrow'; -import TooltipContent from './TooltipContent'; +import { TooltipArrow } from './TooltipArrow'; +import { TooltipContent } from './TooltipContent'; import { KEY_CODES } from '../../helpers/constants'; import { c_tooltip_MaxWidth as tooltipMaxWidth } from '@patternfly/react-tokens'; import { tippyStyles } from './styles'; +import { ReactElement } from 'react'; tippyStyles(); -export const TooltipPosition = { - top: 'top', - bottom: 'bottom', - left: 'left', - right: 'right' +export enum TooltipPosition { + top = 'top', + bottom = 'bottom', + left = 'left', + right = 'right' }; -const propTypes = { +export interface TooltipProps { /** Tooltip position */ - position: PropTypes.oneOf(Object.keys(TooltipPosition).map(key => TooltipPosition[key])), + position?: 'top' | 'bottom' | 'left' | 'right'; /** Tooltip trigger: click, mouseenter, focus */ - trigger: PropTypes.string, + trigger?: string; /** If true, tries to keep the tooltip in view by flipping it if necessary */ - enableFlip: PropTypes.bool, + enableFlip?: boolean; /** Tooltip additional class */ - className: PropTypes.string, + className?: string; /** Tooltip content */ - content: PropTypes.node.isRequired, + content: React.ReactNode; /** The reference element to which the tooltip is relatively placed to */ - children: PropTypes.element.isRequired, + children: ReactElement; /** Delay in ms before the tooltip appears */ - entryDelay: PropTypes.number, + entryDelay?: number; /** Delay in ms before the tooltip disappears */ - exitDelay: PropTypes.number, + exitDelay?: number; /** The element to append the tooltip to, defaults to body */ - appendTo: PropTypes.oneOfType([PropTypes.element, PropTypes.func]), + appendTo?: Element | ((ref: Element) => Element); /** z-index of the tooltip */ - zIndex: PropTypes.number, + zIndex?: number; /** Maximum width of the tooltip (default 12.5rem) */ - maxWidth: PropTypes.string, + maxWidth?: string; /** If true, displays as an application launcher */ - isAppLauncher: PropTypes.bool, - /** Distance of the tooltip to its target */ - distance: PropTypes.number + isAppLauncher?: boolean; + /** Distance of the tooltip to its target, defaults to 15 */ + distance?: number; }; -const defaultProps = { - position: 'top', - trigger: 'mouseenter focus', - enableFlip: true, - className: null, - entryDelay: 500, - exitDelay: 500, - appendTo: () => document.body, - zIndex: 9999, - maxWidth: tooltipMaxWidth && tooltipMaxWidth.value, - isAppLauncher: false, - distance: 15 -}; +export class Tooltip extends React.Component { + private tip: TippyInstance; + static defaultProps = { + position: 'top', + trigger: 'mouseenter focus', + enableFlip: true, + className: '', + entryDelay: 500, + exitDelay: 500, + appendTo: () => document.body, + zIndex: 9999, + maxWidth: tooltipMaxWidth && tooltipMaxWidth.value, + isAppLauncher: false, + distance: 15 + }; -class Tooltip extends React.Component { - storeTippyInstance = tip => { + storeTippyInstance = (tip:TippyInstance) => { this.tip = tip; }; - handleEscKeyClick = event => { + handleEscKeyClick = (event: KeyboardEvent) => { if (event.keyCode === KEY_CODES.ESCAPE_KEY && this.tip.state.isVisible) { this.tip.hide(); } @@ -145,8 +147,3 @@ class Tooltip extends React.Component { ); } } - -Tooltip.propTypes = propTypes; -Tooltip.defaultProps = defaultProps; - -export default Tooltip; diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/TooltipArrow.js b/packages/patternfly-4/react-core/src/components/Tooltip/TooltipArrow.js deleted file mode 100644 index 229f6f21cc1..00000000000 --- a/packages/patternfly-4/react-core/src/components/Tooltip/TooltipArrow.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import styles from '@patternfly/react-styles/css/components/Tooltip/tooltip'; -import { css } from '@patternfly/react-styles'; - -const TooltipArrow = ({ className, ...rest }) =>
; - -TooltipArrow.propTypes = { - /** Tooltip arrow additional className */ - className: PropTypes.string -}; - -TooltipArrow.defaultProps = { - className: null -}; - -export default TooltipArrow; diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/TooltipArrow.tsx b/packages/patternfly-4/react-core/src/components/Tooltip/TooltipArrow.tsx new file mode 100644 index 00000000000..032659840f2 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Tooltip/TooltipArrow.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; +import styles from '@patternfly/react-styles/css/components/Tooltip/tooltip'; +import { css } from '@patternfly/react-styles'; + +export interface TooltipArrowProps extends React.HTMLProps { + /** className */ + className?: string; +} + +export const TooltipArrow = ({ className, ...props }: TooltipArrowProps) => +
; diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/TooltipContent.js b/packages/patternfly-4/react-core/src/components/Tooltip/TooltipContent.js deleted file mode 100644 index 985bef9e44a..00000000000 --- a/packages/patternfly-4/react-core/src/components/Tooltip/TooltipContent.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import styles from '@patternfly/react-styles/css/components/Tooltip/tooltip'; -import { css } from '@patternfly/react-styles'; - -const TooltipContent = ({ className, children, ...rest }) => ( -
- {children} -
-); - -TooltipContent.propTypes = { - /** TooltipContent additional class */ - className: PropTypes.string, - /** TooltipContent content */ - children: PropTypes.node.isRequired -}; - -TooltipContent.defaultProps = { - className: null -}; - -export default TooltipContent; diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/TooltipContent.tsx b/packages/patternfly-4/react-core/src/components/Tooltip/TooltipContent.tsx new file mode 100644 index 00000000000..640415c6621 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Tooltip/TooltipContent.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import styles from '@patternfly/react-styles/css/components/Tooltip/tooltip'; +import { css } from '@patternfly/react-styles'; + +export interface TooltipContentProps extends React.HTMLProps { + /** PopoverContent additional class */ + className?: string; + /** PopoverContent content */ + children: React.ReactNode; +} + +export const TooltipContent = ({ className, children, ...props }: TooltipContentProps) => ( +
+ {children} +
+); diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/__snapshots__/Tooltip.test.js.snap b/packages/patternfly-4/react-core/src/components/Tooltip/__snapshots__/Tooltip.test.tsx.snap similarity index 86% rename from packages/patternfly-4/react-core/src/components/Tooltip/__snapshots__/Tooltip.test.js.snap rename to packages/patternfly-4/react-core/src/components/Tooltip/__snapshots__/Tooltip.test.tsx.snap index b2da2d43e81..8e7867a580f 100644 --- a/packages/patternfly-4/react-core/src/components/Tooltip/__snapshots__/Tooltip.test.js.snap +++ b/packages/patternfly-4/react-core/src/components/Tooltip/__snapshots__/Tooltip.test.tsx.snap @@ -9,16 +9,12 @@ exports[`tooltip renders 1`] = ` className="pf-c-tooltip" role="tooltip" > - - + +
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam id feugiat augue, nec fringilla turpis.
-
+
} delay={ diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/index.d.ts b/packages/patternfly-4/react-core/src/components/Tooltip/index.d.ts deleted file mode 100644 index de47a87b12a..00000000000 --- a/packages/patternfly-4/react-core/src/components/Tooltip/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Tooltip, TooltipPosition, TooltipProps } from './Tooltip'; diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/index.js b/packages/patternfly-4/react-core/src/components/Tooltip/index.js deleted file mode 100644 index 5b081ec6e0c..00000000000 --- a/packages/patternfly-4/react-core/src/components/Tooltip/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as Tooltip, TooltipPosition } from './Tooltip'; diff --git a/packages/patternfly-4/react-core/src/components/Tooltip/index.ts b/packages/patternfly-4/react-core/src/components/Tooltip/index.ts new file mode 100644 index 00000000000..fae00494e73 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Tooltip/index.ts @@ -0,0 +1 @@ +export { Tooltip, TooltipPosition } from './Tooltip'; diff --git a/packages/patternfly-4/react-integration/cypress/integration/tooltip.spec.ts b/packages/patternfly-4/react-integration/cypress/integration/tooltip.spec.ts new file mode 100644 index 00000000000..e81c9a3d154 --- /dev/null +++ b/packages/patternfly-4/react-integration/cypress/integration/tooltip.spec.ts @@ -0,0 +1,16 @@ +describe('Tooltip Demo Test', () => { + it('Navigate to tooltip section', () => { + cy.visit('http://localhost:3000/'); + cy.get('#tooltip-demo-nav-item-link').click(); + cy.url().should('eq', 'http://localhost:3000/tooltip-demo-nav-link') + }); + + it('Display Tooltip', () => { + cy.get('div[id="tooltipTarget"]').then((tooltipLink: JQuery) => { + cy.get('.tippy-popper').should('not.exist'); + cy.wrap(tooltipLink).trigger('mouseenter') + .get('.tippy-popper').should('exist') + .get('.tippy-popper').contains('World'); + }); + }); +}); diff --git a/packages/patternfly-4/react-integration/demo-app-ts/src/components/demos/TooltipDemo/TooltipDemo.tsx b/packages/patternfly-4/react-integration/demo-app-ts/src/components/demos/TooltipDemo/TooltipDemo.tsx index 213d0dde5b4..fa524f27ee3 100644 --- a/packages/patternfly-4/react-integration/demo-app-ts/src/components/demos/TooltipDemo/TooltipDemo.tsx +++ b/packages/patternfly-4/react-integration/demo-app-ts/src/components/demos/TooltipDemo/TooltipDemo.tsx @@ -1,16 +1,16 @@ -import { Tooltip, TooltipProps } from '@patternfly/react-core'; +import { Tooltip } from '@patternfly/react-core'; import React, { Component } from 'react'; -const myProps: TooltipProps = { - content:
World
, - children:
Hello
-}; - export class TooltipDemo extends Component { + myTooltipProps = { + content:
World
, + children:
Hello
+ }; + render() { return ( - - {myProps.children} + + {this.myTooltipProps.children} ); }; diff --git a/packages/patternfly-4/react-topology/src/components/TopologyControlBar/__snapshots__/TopologyControlBar.test.tsx.snap b/packages/patternfly-4/react-topology/src/components/TopologyControlBar/__snapshots__/TopologyControlBar.test.tsx.snap index a19e75f8e55..80ce0b52d5a 100644 --- a/packages/patternfly-4/react-topology/src/components/TopologyControlBar/__snapshots__/TopologyControlBar.test.tsx.snap +++ b/packages/patternfly-4/react-topology/src/components/TopologyControlBar/__snapshots__/TopologyControlBar.test.tsx.snap @@ -162,7 +162,7 @@ exports[`TopologyControlBar should accept button options correctly 1`] = ` > - - + + test zoom in tooltip
@@ -272,16 +268,12 @@ exports[`TopologyControlBar should accept button options correctly 1`] = ` className="pf-c-tooltip" role="tooltip" > - +
- +
@@ -303,7 +295,7 @@ exports[`TopologyControlBar should accept button options correctly 1`] = ` > - - + + Zoom Out
@@ -436,16 +424,12 @@ exports[`TopologyControlBar should accept button options correctly 1`] = ` className="pf-c-tooltip" role="tooltip" > - +
- +
@@ -467,7 +451,7 @@ exports[`TopologyControlBar should accept button options correctly 1`] = ` > - - + + Reset View
@@ -600,16 +580,12 @@ exports[`TopologyControlBar should accept button options correctly 1`] = ` className="pf-c-tooltip" role="tooltip" > - +
- +
@@ -842,7 +818,7 @@ exports[`TopologyControlBar should display the default controls correctly 1`] = > - - + + Zoom In
@@ -975,16 +947,12 @@ exports[`TopologyControlBar should display the default controls correctly 1`] = className="pf-c-tooltip" role="tooltip" > - +
- +
@@ -1006,7 +974,7 @@ exports[`TopologyControlBar should display the default controls correctly 1`] = > - - + + Zoom Out
@@ -1139,16 +1103,12 @@ exports[`TopologyControlBar should display the default controls correctly 1`] = className="pf-c-tooltip" role="tooltip" > - +
- +
@@ -1170,7 +1130,7 @@ exports[`TopologyControlBar should display the default controls correctly 1`] = > - - + + Fit to Screen
@@ -1303,16 +1259,12 @@ exports[`TopologyControlBar should display the default controls correctly 1`] = className="pf-c-tooltip" role="tooltip" > - +
- +
@@ -1334,7 +1286,7 @@ exports[`TopologyControlBar should display the default controls correctly 1`] = > - - + + Reset View
@@ -1467,16 +1415,12 @@ exports[`TopologyControlBar should display the default controls correctly 1`] = className="pf-c-tooltip" role="tooltip" > - +
- +