@deephaven/components 0.6.3-beta.0 → 0.7.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/AutoCompleteInput.js +1 -1
  2. package/dist/AutoResizeTextarea.js +1 -1
  3. package/dist/AutoResizeTextarea.js.map +1 -1
  4. package/dist/CardFlip.js +1 -1
  5. package/dist/CardFlip.js.map +1 -1
  6. package/dist/ComboBox.js +1 -1
  7. package/dist/CustomTimeSelect.js +1 -1
  8. package/dist/DeephavenSpinner.js +1 -1
  9. package/dist/DraggableItemList.js +1 -1
  10. package/dist/HierarchicalCheckboxMenu.js +2 -2
  11. package/dist/ItemList.js +4 -4
  12. package/dist/LoadingOverlay.js +1 -1
  13. package/dist/LoadingSpinner.js +1 -1
  14. package/dist/Option.js +1 -1
  15. package/dist/Select.js +1 -1
  16. package/dist/Select.js.map +1 -1
  17. package/dist/ThemeExport.js +1 -1
  18. package/dist/TimeSlider.js +3 -3
  19. package/dist/TimeSlider.js.map +1 -1
  20. package/dist/ToastNotification.js +1 -1
  21. package/dist/ToastNotification.js.map +1 -1
  22. package/dist/UISwitch.js +1 -1
  23. package/dist/context-actions/ContextMenu.js +1 -1
  24. package/dist/menu-actions/DropdownMenu.js +1 -1
  25. package/dist/menu-actions/Menu.js +1 -1
  26. package/dist/navigation/Menu.js +1 -1
  27. package/dist/navigation/MenuItem.js +1 -1
  28. package/dist/navigation/MenuItem.js.map +1 -1
  29. package/dist/navigation/Page.js +1 -1
  30. package/dist/navigation/Stack.js +1 -1
  31. package/dist/navigation/Stack.js.map +1 -1
  32. package/dist/popper/Popper.d.ts +5 -2
  33. package/dist/popper/Popper.d.ts.map +1 -1
  34. package/dist/popper/Popper.js +8 -5
  35. package/dist/popper/Popper.js.map +1 -1
  36. package/dist/popper/Tooltip.d.ts +3 -1
  37. package/dist/popper/Tooltip.d.ts.map +1 -1
  38. package/dist/popper/Tooltip.js +5 -2
  39. package/dist/popper/Tooltip.js.map +1 -1
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/package.json +9 -9
@@ -1,4 +1,4 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2
2
 
3
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
4
4
 
@@ -96,7 +96,8 @@ class Popper extends Component {
96
96
  popper
97
97
  } = this.state;
98
98
  var {
99
- closeOnBlur
99
+ closeOnBlur,
100
+ referenceObject
100
101
  } = this.props;
101
102
 
102
103
  if (popper) {
@@ -120,7 +121,7 @@ class Popper extends Component {
120
121
  parent = this.container.current;
121
122
  }
122
123
 
123
- popper = new PopperJs(parent, this.element, options);
124
+ popper = new PopperJs(referenceObject || parent, this.element, options);
124
125
  popper.scheduleUpdate(); // delayed due to scheduleUpdate
125
126
 
126
127
  cancelAnimationFrame(this.rAF);
@@ -282,7 +283,8 @@ _defineProperty(Popper, "propTypes", {
282
283
  onExited: PropTypes.func,
283
284
  isShown: PropTypes.bool,
284
285
  closeOnBlur: PropTypes.bool,
285
- interactive: PropTypes.bool
286
+ interactive: PropTypes.bool,
287
+ referenceObject: PropTypes.shape({})
286
288
  });
287
289
 
288
290
  _defineProperty(Popper, "defaultProps", {
@@ -298,7 +300,8 @@ _defineProperty(Popper, "defaultProps", {
298
300
 
299
301
  isShown: false,
300
302
  interactive: false,
301
- closeOnBlur: false
303
+ closeOnBlur: false,
304
+ referenceObject: null
302
305
  });
303
306
 
304
307
  export default Popper;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/popper/Popper.tsx"],"names":["React","Component","ReactDOM","classNames","CSSTransition","PopperJs","PropTypes","ThemeExport","Popper","constructor","props","handleEnter","bind","handleExit","handleBlur","element","document","createElement","className","container","createRef","isExiting","rAF","isShown","state","show","popper","componentDidUpdate","prevProps","cancelAnimationFrame","window","requestAnimationFrame","hide","componentWillUnmount","destroyPopper","getVisibleElement","clientHeight","clientWidth","parentElement","initPopper","closeOnBlur","current","options","placement","body","appendChild","parent","scheduleUpdate","contains","activeElement","elem","firstElementChild","HTMLElement","focus","setState","updateState","destroy","removeChild","e","relatedTarget","onEntered","onExited","renderContent","children","timeout","interactive","stopPropagation","key","undefined","render","display","createPortal","node","isRequired","shape","string","number","func","bool","transitionMs"],"mappings":"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","sourcesContent":["/**\n * A component for creating popover dialogs. Only requires child element.\n *\n * <Popper\n * options={popperOptions}\n * className=\"whatever\"\n * onEntered={this.handleEnter}\n * onExited={this.handleExit}\n * closeOnBlur // if you want dialog to self close, on click outside\n * interactive // if popper contents will be interactable\n * isShown={variable} // controls if its shown or not,\n * ref={this.popper} // or via ref and this.popper.show() or this.popper.hide()\n * >\n * <ChildContent />\n * </Popper>\n */\n\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PopperJs, { PopperOptions } from 'popper.js';\nimport PropTypes from 'prop-types';\nimport ThemeExport from '../ThemeExport';\nimport './Popper.scss';\n\ninterface PopperProps {\n options: PopperOptions;\n className: string;\n timeout: number;\n onEntered: () => void;\n onExited: () => void;\n isShown: boolean;\n closeOnBlur: boolean;\n interactive: boolean;\n}\n\ninterface PopperState {\n show: boolean;\n popper: PopperJs | null;\n}\n\nclass Popper extends Component<PopperProps, PopperState> {\n static propTypes = {\n children: PropTypes.node.isRequired,\n options: PropTypes.shape({}),\n className: PropTypes.string,\n timeout: PropTypes.number,\n onEntered: PropTypes.func,\n onExited: PropTypes.func,\n isShown: PropTypes.bool,\n closeOnBlur: PropTypes.bool,\n interactive: PropTypes.bool,\n };\n\n static defaultProps = {\n options: {},\n className: '',\n timeout: ThemeExport.transitionMs,\n onEntered(): void {\n // no-op\n },\n onExited(): void {\n // no-op\n },\n isShown: false,\n interactive: false,\n closeOnBlur: false,\n };\n\n constructor(props: PopperProps) {\n super(props);\n\n this.handleEnter = this.handleEnter.bind(this);\n this.handleExit = this.handleExit.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.element = document.createElement('div');\n this.element.className = 'popper-container';\n this.container = React.createRef<HTMLDivElement>();\n\n this.isExiting = false;\n\n // cancelAnimationFrame does nothing if the handle isn't recognized\n // requestAnimationFrame provides a non-zero number, so 0 as a default should be safe\n this.rAF = 0;\n\n const { isShown } = this.props;\n\n this.state = {\n show: isShown,\n popper: null,\n };\n }\n\n componentDidUpdate(prevProps: PopperProps): void {\n const { isShown } = this.props;\n\n if (prevProps.isShown !== isShown) {\n if (isShown) {\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n this.show();\n });\n } else {\n this.hide();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.destroyPopper(false);\n this.isExiting = false;\n }\n\n element: HTMLDivElement;\n\n container: React.RefObject<HTMLDivElement>;\n\n isExiting: boolean;\n\n // This is the request animation frame handle number\n rAF: number;\n\n /** Goes through an element and it's parents until the first visible element is found */\n getVisibleElement(element: HTMLElement | null): HTMLElement | null {\n if (\n element == null ||\n element.clientHeight > 0 ||\n element.clientWidth > 0\n ) {\n return element;\n }\n\n return this.getVisibleElement(element.parentElement);\n }\n\n initPopper(): void {\n let { popper } = this.state;\n const { closeOnBlur } = this.props;\n\n if (popper) {\n return;\n }\n\n if (this.container.current === null) {\n return;\n }\n\n let { options } = this.props;\n options = {\n placement: 'auto',\n ...options,\n };\n document.body.appendChild(this.element);\n\n let parent = this.getVisibleElement(this.container.current);\n if (parent == null) {\n parent = this.container.current;\n }\n\n popper = new PopperJs(parent, this.element, options);\n popper.scheduleUpdate();\n\n // delayed due to scheduleUpdate\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n // for blur on close to work, focus needs to be on or within the popper\n if (closeOnBlur && !this.element.contains(document.activeElement)) {\n // only set focus, if a focus isn't already set within\n const elem = this.element.firstElementChild;\n if (elem instanceof HTMLElement) {\n elem.focus(); // first child of the portal element\n }\n }\n });\n\n this.setState({ popper });\n }\n\n destroyPopper(updateState = true): void {\n this.isExiting = false;\n cancelAnimationFrame(this.rAF);\n\n const { popper } = this.state;\n if (!popper) {\n return;\n }\n\n popper.destroy();\n\n document.body.removeChild(this.element);\n\n if (updateState) {\n this.setState({ popper: null });\n }\n }\n\n show(): void {\n this.initPopper();\n this.setState({ show: true });\n }\n\n hide(): void {\n this.setState({ show: false });\n }\n\n scheduleUpdate(): void {\n const { popper } = this.state;\n if (popper) popper.scheduleUpdate();\n }\n\n handleBlur(e: React.FocusEvent): void {\n if (!(e.relatedTarget instanceof HTMLElement)) {\n return;\n }\n if (!this.element.contains(e.relatedTarget)) {\n this.hide();\n }\n }\n\n handleEnter(): void {\n const { onEntered } = this.props;\n onEntered(); // trigger any parent component waiting for enter handler\n }\n\n handleExit(): void {\n const { onExited } = this.props;\n onExited(); // trigger any parent component waiting for exited handler\n\n const { show } = this.state;\n if (!show) {\n this.destroyPopper();\n }\n\n this.isExiting = false;\n }\n\n renderContent(): JSX.Element {\n const {\n className,\n children,\n timeout,\n interactive,\n closeOnBlur,\n } = this.props;\n const { show } = this.state;\n\n return (\n <CSSTransition\n in={show}\n timeout={timeout}\n classNames=\"popper-transition\"\n onEntered={this.handleEnter}\n onExit={() => {\n this.isExiting = true;\n }}\n onExited={this.handleExit}\n >\n <div\n onClick={e => {\n // stop click events from escaping popper\n e.stopPropagation();\n }}\n onKeyDown={e => {\n if (e.key === 'Escape') this.hide();\n }}\n className={classNames('popper', { interactive }, className)}\n onBlur={closeOnBlur ? this.handleBlur : undefined}\n tabIndex={closeOnBlur ? -1 : undefined}\n role=\"presentation\"\n >\n <div className=\"popper-content\">\n {children}\n <div className=\"popper-arrow\" x-arrow=\"\" />\n </div>\n </div>\n </CSSTransition>\n );\n }\n\n render(): JSX.Element {\n const { popper } = this.state;\n return (\n <div\n className=\"popper-parent-container\"\n ref={this.container}\n style={{ display: 'none' }}\n >\n {popper && ReactDOM.createPortal(this.renderContent(), this.element)}\n </div>\n );\n }\n}\n\nexport default Popper;\nexport type { PopperOptions };\n"],"file":"Popper.js"}
1
+ {"version":3,"sources":["../../src/popper/Popper.tsx"],"names":["React","Component","ReactDOM","classNames","CSSTransition","PopperJs","PropTypes","ThemeExport","Popper","constructor","props","handleEnter","bind","handleExit","handleBlur","element","document","createElement","className","container","createRef","isExiting","rAF","isShown","state","show","popper","componentDidUpdate","prevProps","cancelAnimationFrame","window","requestAnimationFrame","hide","componentWillUnmount","destroyPopper","getVisibleElement","clientHeight","clientWidth","parentElement","initPopper","closeOnBlur","referenceObject","current","options","placement","body","appendChild","parent","scheduleUpdate","contains","activeElement","elem","firstElementChild","HTMLElement","focus","setState","updateState","destroy","removeChild","e","relatedTarget","onEntered","onExited","renderContent","children","timeout","interactive","stopPropagation","key","undefined","render","display","createPortal","node","isRequired","shape","string","number","func","bool","transitionMs"],"mappings":"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","sourcesContent":["/**\n * A component for creating popover dialogs. Only requires child element.\n *\n * <Popper\n * options={popperOptions}\n * className=\"whatever\"\n * onEntered={this.handleEnter}\n * onExited={this.handleExit}\n * closeOnBlur // if you want dialog to self close, on click outside\n * interactive // if popper contents will be interactable\n * isShown={variable} // controls if its shown or not,\n * ref={this.popper} // or via ref and this.popper.show() or this.popper.hide()\n * >\n * <ChildContent />\n * </Popper>\n */\n\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PopperJs, { PopperOptions, ReferenceObject } from 'popper.js';\nimport PropTypes from 'prop-types';\nimport ThemeExport from '../ThemeExport';\nimport './Popper.scss';\n\ninterface PopperProps {\n options: PopperOptions;\n className: string;\n timeout: number;\n onEntered: () => void;\n onExited: () => void;\n isShown: boolean;\n closeOnBlur: boolean;\n interactive: boolean;\n referenceObject: ReferenceObject;\n}\n\ninterface PopperState {\n show: boolean;\n popper: PopperJs | null;\n}\n\nclass Popper extends Component<PopperProps, PopperState> {\n static propTypes = {\n children: PropTypes.node.isRequired,\n options: PropTypes.shape({}),\n className: PropTypes.string,\n timeout: PropTypes.number,\n onEntered: PropTypes.func,\n onExited: PropTypes.func,\n isShown: PropTypes.bool,\n closeOnBlur: PropTypes.bool,\n interactive: PropTypes.bool,\n referenceObject: PropTypes.shape({}),\n };\n\n static defaultProps = {\n options: {},\n className: '',\n timeout: ThemeExport.transitionMs,\n onEntered(): void {\n // no-op\n },\n onExited(): void {\n // no-op\n },\n isShown: false,\n interactive: false,\n closeOnBlur: false,\n referenceObject: null,\n };\n\n constructor(props: PopperProps) {\n super(props);\n\n this.handleEnter = this.handleEnter.bind(this);\n this.handleExit = this.handleExit.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.element = document.createElement('div');\n this.element.className = 'popper-container';\n this.container = React.createRef<HTMLDivElement>();\n\n this.isExiting = false;\n\n // cancelAnimationFrame does nothing if the handle isn't recognized\n // requestAnimationFrame provides a non-zero number, so 0 as a default should be safe\n this.rAF = 0;\n\n const { isShown } = this.props;\n\n this.state = {\n show: isShown,\n popper: null,\n };\n }\n\n componentDidUpdate(prevProps: PopperProps): void {\n const { isShown } = this.props;\n\n if (prevProps.isShown !== isShown) {\n if (isShown) {\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n this.show();\n });\n } else {\n this.hide();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.destroyPopper(false);\n this.isExiting = false;\n }\n\n element: HTMLDivElement;\n\n container: React.RefObject<HTMLDivElement>;\n\n isExiting: boolean;\n\n // This is the request animation frame handle number\n rAF: number;\n\n /** Goes through an element and it's parents until the first visible element is found */\n getVisibleElement(element: HTMLElement | null): HTMLElement | null {\n if (\n element == null ||\n element.clientHeight > 0 ||\n element.clientWidth > 0\n ) {\n return element;\n }\n\n return this.getVisibleElement(element.parentElement);\n }\n\n initPopper(): void {\n let { popper } = this.state;\n const { closeOnBlur, referenceObject } = this.props;\n\n if (popper) {\n return;\n }\n\n if (this.container.current === null) {\n return;\n }\n\n let { options } = this.props;\n options = {\n placement: 'auto',\n ...options,\n };\n document.body.appendChild(this.element);\n\n let parent = this.getVisibleElement(this.container.current);\n if (parent == null) {\n parent = this.container.current;\n }\n\n popper = new PopperJs(referenceObject || parent, this.element, options);\n popper.scheduleUpdate();\n\n // delayed due to scheduleUpdate\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n // for blur on close to work, focus needs to be on or within the popper\n if (closeOnBlur && !this.element.contains(document.activeElement)) {\n // only set focus, if a focus isn't already set within\n const elem = this.element.firstElementChild;\n if (elem instanceof HTMLElement) {\n elem.focus(); // first child of the portal element\n }\n }\n });\n\n this.setState({ popper });\n }\n\n destroyPopper(updateState = true): void {\n this.isExiting = false;\n cancelAnimationFrame(this.rAF);\n\n const { popper } = this.state;\n if (!popper) {\n return;\n }\n\n popper.destroy();\n\n document.body.removeChild(this.element);\n\n if (updateState) {\n this.setState({ popper: null });\n }\n }\n\n show(): void {\n this.initPopper();\n this.setState({ show: true });\n }\n\n hide(): void {\n this.setState({ show: false });\n }\n\n scheduleUpdate(): void {\n const { popper } = this.state;\n if (popper) popper.scheduleUpdate();\n }\n\n handleBlur(e: React.FocusEvent): void {\n if (!(e.relatedTarget instanceof HTMLElement)) {\n return;\n }\n if (!this.element.contains(e.relatedTarget)) {\n this.hide();\n }\n }\n\n handleEnter(): void {\n const { onEntered } = this.props;\n onEntered(); // trigger any parent component waiting for enter handler\n }\n\n handleExit(): void {\n const { onExited } = this.props;\n onExited(); // trigger any parent component waiting for exited handler\n\n const { show } = this.state;\n if (!show) {\n this.destroyPopper();\n }\n\n this.isExiting = false;\n }\n\n renderContent(): JSX.Element {\n const {\n className,\n children,\n timeout,\n interactive,\n closeOnBlur,\n } = this.props;\n const { show } = this.state;\n\n return (\n <CSSTransition\n in={show}\n timeout={timeout}\n classNames=\"popper-transition\"\n onEntered={this.handleEnter}\n onExit={() => {\n this.isExiting = true;\n }}\n onExited={this.handleExit}\n >\n <div\n onClick={e => {\n // stop click events from escaping popper\n e.stopPropagation();\n }}\n onKeyDown={e => {\n if (e.key === 'Escape') this.hide();\n }}\n className={classNames('popper', { interactive }, className)}\n onBlur={closeOnBlur ? this.handleBlur : undefined}\n tabIndex={closeOnBlur ? -1 : undefined}\n role=\"presentation\"\n >\n <div className=\"popper-content\">\n {children}\n <div className=\"popper-arrow\" x-arrow=\"\" />\n </div>\n </div>\n </CSSTransition>\n );\n }\n\n render(): JSX.Element {\n const { popper } = this.state;\n return (\n <div\n className=\"popper-parent-container\"\n ref={this.container}\n style={{ display: 'none' }}\n >\n {popper && ReactDOM.createPortal(this.renderContent(), this.element)}\n </div>\n );\n }\n}\n\nexport default Popper;\nexport type { PopperOptions, ReferenceObject };\n"],"file":"Popper.js"}
@@ -1,5 +1,5 @@
1
1
  import React, { Component } from 'react';
2
- import Popper, { PopperOptions } from './Popper';
2
+ import Popper, { PopperOptions, ReferenceObject } from './Popper';
3
3
  interface TooltipProps {
4
4
  interactive: boolean;
5
5
  options: PopperOptions;
@@ -7,6 +7,7 @@ interface TooltipProps {
7
7
  reshowTimeout: number;
8
8
  children: React.ReactNode;
9
9
  popperClassName: string;
10
+ referenceObject: ReferenceObject;
10
11
  }
11
12
  interface TooltipState {
12
13
  isShown: boolean;
@@ -35,6 +36,7 @@ declare class Tooltip extends Component<TooltipProps, TooltipState> {
35
36
  popperClassName: string;
36
37
  reshowTimeout: number;
37
38
  timeout: number;
39
+ referenceObject: null;
38
40
  };
39
41
  static handleHidden(): void;
40
42
  static handleShown(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/popper/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIjD,UAAU,YAAY;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,cAAM,OAAQ,SAAQ,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACzD,MAAM,CAAC,cAAc,SAAO;IAE5B,MAAM,CAAC,oBAAoB,SAAO;IAElC,MAAM,CAAC,sBAAsB,SAAO;IAEpC,MAAM,CAAC,iBAAiB,SAAK;IAE7B,MAAM,CAAC,cAAc,SAAc;IAEnC,MAAM,CAAC,YAAY;;;;;;MAMjB;IAEF,MAAM,CAAC,YAAY,IAAI,IAAI;IAQ3B,MAAM,CAAC,WAAW,IAAI,IAAI;gBAId,KAAK,EAAE,YAAY;IAqB/B,iBAAiB,IAAI,IAAI;IASzB,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAa1E,oBAAoB,IAAI,IAAI;IAY5B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE3C,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEhC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAI3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,cAAc,IAAI,IAAI;IAYtB,aAAa,IAAI,IAAI;IAUrB,oBAAoB,IAAI,IAAI;IAM5B,mBAAmB,IAAI,IAAI;IAM3B,eAAe,IAAI,IAAI;IAIvB,WAAW,IAAI,IAAI;IAanB,gBAAgB,IAAI,IAAI;IAUxB,aAAa,IAAI,IAAI;IAIrB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA+B9C,UAAU,IAAI,IAAI;IAclB,SAAS,IAAI,IAAI;IAOjB,IAAI,IAAI,IAAI;IAeZ,IAAI,IAAI,IAAI;IAKZ,MAAM,IAAI,IAAI;IAId,YAAY,IAAI,IAAI;IAIpB,kBAAkB,IAAI,IAAI;IAQ1B,MAAM,IAAI,GAAG,CAAC,OAAO;CAiBtB;AAED,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/popper/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,MAAM,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAIlE,UAAU,YAAY;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,cAAM,OAAQ,SAAQ,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACzD,MAAM,CAAC,cAAc,SAAO;IAE5B,MAAM,CAAC,oBAAoB,SAAO;IAElC,MAAM,CAAC,sBAAsB,SAAO;IAEpC,MAAM,CAAC,iBAAiB,SAAK;IAE7B,MAAM,CAAC,cAAc,SAAc;IAEnC,MAAM,CAAC,YAAY;;;;;;;MAOjB;IAEF,MAAM,CAAC,YAAY,IAAI,IAAI;IAQ3B,MAAM,CAAC,WAAW,IAAI,IAAI;gBAId,KAAK,EAAE,YAAY;IAqB/B,iBAAiB,IAAI,IAAI;IASzB,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAa1E,oBAAoB,IAAI,IAAI;IAY5B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE3C,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEhC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAI3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,cAAc,IAAI,IAAI;IAYtB,aAAa,IAAI,IAAI;IAUrB,oBAAoB,IAAI,IAAI;IAM5B,mBAAmB,IAAI,IAAI;IAM3B,eAAe,IAAI,IAAI;IAIvB,WAAW,IAAI,IAAI;IAanB,gBAAgB,IAAI,IAAI;IAUxB,aAAa,IAAI,IAAI;IAIrB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA+B9C,UAAU,IAAI,IAAI;IAclB,SAAS,IAAI,IAAI;IAOjB,IAAI,IAAI,IAAI;IAeZ,IAAI,IAAI,IAAI;IAKZ,MAAM,IAAI,IAAI;IAId,YAAY,IAAI,IAAI;IAIpB,kBAAkB,IAAI,IAAI;IAQ1B,MAAM,IAAI,GAAG,CAAC,OAAO;CAwBtB;AAED,eAAe,OAAO,CAAC"}
@@ -272,6 +272,7 @@ class Tooltip extends Component {
272
272
  interactive,
273
273
  children,
274
274
  options,
275
+ referenceObject,
275
276
  popperClassName
276
277
  } = this.props;
277
278
  var {
@@ -287,7 +288,8 @@ class Tooltip extends Component {
287
288
  options: options,
288
289
  ref: this.popper,
289
290
  onExited: this.handleExited,
290
- interactive: interactive
291
+ interactive: interactive,
292
+ referenceObject: referenceObject
291
293
  }, /*#__PURE__*/React.createElement("div", {
292
294
  className: "tooltip-content"
293
295
  }, " ", isShown && children)));
@@ -310,7 +312,8 @@ _defineProperty(Tooltip, "defaultProps", {
310
312
  options: {},
311
313
  popperClassName: '',
312
314
  reshowTimeout: Tooltip.defaultReshowTimeout,
313
- timeout: Tooltip.defaultTimeout
315
+ timeout: Tooltip.defaultTimeout,
316
+ referenceObject: null
314
317
  });
315
318
 
316
319
  export default Tooltip;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/popper/Tooltip.tsx"],"names":["React","Component","classNames","Log","Popper","log","module","Tooltip","handleHidden","shownTooltipCount","lastHiddenTime","Date","now","handleShown","constructor","props","handleMouseMove","bind","handleMouseLeave","handleWindowMouseMove","handleWheel","handleTimeout","handleExited","stopShowingTooltip","container","createRef","popper","parent","timer","state","isShown","componentDidMount","startListening","timeout","show","componentDidUpdate","prevProps","prevState","oldIsShown","componentWillUnmount","stopListening","stopListeningWindow","stopTimer","current","parentElement","error","addEventListener","removeEventListener","startListeningWindow","window","startTimer","element","matches","hide","interactive","event","mouseX","clientX","mouseY","clientY","popperRect","getBoundingClientRect","parentRect","left","width","top","height","reshowTimeout","timerTimeout","triggerReshowThreshold","setTimeout","clearTimeout","setState","update","scheduleUpdate","render","children","options","popperClassName","display","defaultReshowTimeout","defaultTimeout"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,GAAP,MAAgB,gBAAhB;OACOC,M;AAEP,IAAMC,GAAG,GAAGF,GAAG,CAACG,MAAJ,CAAW,SAAX,CAAZ;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,OAAN,SAAsBN,SAAtB,CAA4D;AAmBvC,SAAZO,YAAY,GAAS;AAC1BD,IAAAA,OAAO,CAACE,iBAAR,IAA6B,CAA7B;;AAEA,QAAIF,OAAO,CAACE,iBAAR,KAA8B,CAAlC,EAAqC;AACnCF,MAAAA,OAAO,CAACG,cAAR,GAAyBC,IAAI,CAACC,GAAL,EAAzB;AACD;AACF;;AAEiB,SAAXC,WAAW,GAAS;AACzBN,IAAAA,OAAO,CAACE,iBAAR,IAA6B,CAA7B;AACD;;AAEDK,EAAAA,WAAW,CAACC,KAAD,EAAsB;AAC/B,UAAMA,KAAN;;AAD+B;;AAAA;;AAAA;;AAAA;;AAG/B,SAAKC,eAAL,GAAuB,KAAKA,eAAL,CAAqBC,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKC,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBD,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKE,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BF,IAA3B,CAAgC,IAAhC,CAA7B;AACA,SAAKG,WAAL,GAAmB,KAAKA,WAAL,CAAiBH,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKI,aAAL,GAAqB,KAAKA,aAAL,CAAmBJ,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKK,YAAL,GAAoB,KAAKA,YAAL,CAAkBL,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKM,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBN,IAAxB,CAA6B,IAA7B,CAA1B;AAEA,SAAKO,SAAL,gBAAiBxB,KAAK,CAACyB,SAAN,EAAjB;AACA,SAAKC,MAAL,gBAAc1B,KAAK,CAACyB,SAAN,EAAd;AACA,SAAKE,MAAL,GAAc,IAAd;AACA,SAAKC,KAAL,GAAa,IAAb;AAEA,SAAKC,KAAL,GAAa;AACXC,MAAAA,OAAO,EAAE;AADE,KAAb;AAGD;;AAEDC,EAAAA,iBAAiB,GAAS;AACxB,SAAKC,cAAL;AAEA,QAAM;AAAEC,MAAAA;AAAF,QAAc,KAAKlB,KAAzB;;AACA,QAAIkB,OAAO,KAAK,CAAhB,EAAmB;AACjB,WAAKC,IAAL;AACD;AACF;;AAEDC,EAAAA,kBAAkB,CAACC,SAAD,EAA0BC,SAA1B,EAAyD;AACzE,QAAM;AAAEP,MAAAA,OAAO,EAAEQ;AAAX,QAA0BD,SAAhC;AACA,QAAM;AAAEP,MAAAA;AAAF,QAAc,KAAKD,KAAzB;;AAEA,QAAIC,OAAO,KAAKQ,UAAhB,EAA4B;AAC1B,UAAIR,OAAJ,EAAa;AACXvB,QAAAA,OAAO,CAACM,WAAR;AACD,OAFD,MAEO;AACLN,QAAAA,OAAO,CAACC,YAAR;AACD;AACF;AACF;;AAED+B,EAAAA,oBAAoB,GAAS;AAC3B,SAAKC,aAAL;AACA,SAAKC,mBAAL;AACA,SAAKC,SAAL;AAEA,QAAM;AAAEZ,MAAAA;AAAF,QAAc,KAAKD,KAAzB;;AAEA,QAAIC,OAAJ,EAAa;AACXvB,MAAAA,OAAO,CAACC,YAAR;AACD;AACF;;AAYDwB,EAAAA,cAAc,GAAS;AACrB,QAAI,CAAC,KAAKR,SAAL,CAAemB,OAAhB,IAA2B,CAAC,KAAKnB,SAAL,CAAemB,OAAf,CAAuBC,aAAvD,EAAsE;AACpEvC,MAAAA,GAAG,CAACwC,KAAJ,CAAU,mDAAV;AACA;AACD;;AAED,SAAKlB,MAAL,GAAc,KAAKH,SAAL,CAAemB,OAAf,CAAuBC,aAArC;AACA,SAAKjB,MAAL,CAAYmB,gBAAZ,CAA6B,WAA7B,EAA0C,KAAK9B,eAA/C;AACA,SAAKW,MAAL,CAAYmB,gBAAZ,CAA6B,YAA7B,EAA2C,KAAK5B,gBAAhD;AACA,SAAKS,MAAL,CAAYmB,gBAAZ,CAA6B,WAA7B,EAA0C,KAAKvB,kBAA/C;AACD;;AAEDiB,EAAAA,aAAa,GAAS;AACpB,QAAI,CAAC,KAAKb,MAAV,EAAkB;AAChB;AACD;;AAED,SAAKA,MAAL,CAAYoB,mBAAZ,CAAgC,WAAhC,EAA6C,KAAK/B,eAAlD;AACA,SAAKW,MAAL,CAAYoB,mBAAZ,CAAgC,YAAhC,EAA8C,KAAK7B,gBAAnD;AACA,SAAKS,MAAL,CAAYoB,mBAAZ,CAAgC,WAAhC,EAA6C,KAAKxB,kBAAlD;AACD;;AAEDyB,EAAAA,oBAAoB,GAAS;AAC3BC,IAAAA,MAAM,CAACH,gBAAP,CAAwB,WAAxB,EAAqC,KAAK3B,qBAA1C,EAAiE,IAAjE;AACA8B,IAAAA,MAAM,CAACH,gBAAP,CAAwB,aAAxB,EAAuC,KAAKvB,kBAA5C,EAAgE,IAAhE;AACA0B,IAAAA,MAAM,CAACH,gBAAP,CAAwB,OAAxB,EAAiC,KAAK1B,WAAtC;AACD;;AAEDqB,EAAAA,mBAAmB,GAAS;AAC1BQ,IAAAA,MAAM,CAACF,mBAAP,CAA2B,WAA3B,EAAwC,KAAK5B,qBAA7C,EAAoE,IAApE;AACA8B,IAAAA,MAAM,CAACF,mBAAP,CAA2B,aAA3B,EAA0C,KAAKxB,kBAA/C,EAAmE,IAAnE;AACA0B,IAAAA,MAAM,CAACF,mBAAP,CAA2B,OAA3B,EAAoC,KAAK3B,WAAzC;AACD;;AAEDJ,EAAAA,eAAe,GAAS;AACtB,SAAKkC,UAAL;AACD;;AAED9B,EAAAA,WAAW,GAAS;AAClB,QAAM;AAAEU,MAAAA;AAAF,QAAc,KAAKD,KAAzB;;AACA,QAAI,KAAKH,MAAL,CAAYiB,OAAZ,IAAuB,KAAKhB,MAA5B,IAAsCG,OAA1C,EAAmD;AACjD,UACE,CAAC,KAAKJ,MAAL,CAAYiB,OAAZ,CAAoBQ,OAApB,CAA4BC,OAA5B,CAAoC,QAApC,CAAD,IACA,CAAC,KAAKzB,MAAL,CAAYyB,OAAZ,CAAoB,QAApB,CAFH,EAGE;AACA,aAAKV,SAAL;AACA,aAAKW,IAAL;AACD;AACF;AACF;;AAEDnC,EAAAA,gBAAgB,GAAS;AACvB,QAAM;AAAEY,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,SAAKa,SAAL;AAEA,QAAM;AAAEY,MAAAA;AAAF,QAAkB,KAAKvC,KAA7B;;AACA,QAAI,CAACuC,WAAD,IAAgBxB,OAApB,EAA6B;AAC3B,WAAKuB,IAAL;AACD;AACF;;AAEDhC,EAAAA,aAAa,GAAS;AACpB,SAAKa,IAAL;AACD;;AAEDf,EAAAA,qBAAqB,CAACoC,KAAD,EAA0B;AAC7C,QAAMC,MAAM,GAAGD,KAAK,CAACE,OAArB;AACA,QAAMC,MAAM,GAAGH,KAAK,CAACI,OAArB;AACA,QAAM;AAAE7B,MAAAA;AAAF,QAAc,KAAKD,KAAzB;;AAEA,QAAI,CAAC,KAAKH,MAAL,CAAYiB,OAAb,IAAwB,CAAC,KAAKhB,MAAlC,EAA0C;AACxC;AACD;;AACD,QAAMiC,UAAU,GAAG,KAAKlC,MAAL,CAAYiB,OAAZ,CAAoBQ,OAApB,CAA4BU,qBAA5B,EAAnB;AACA,QAAMC,UAAU,GAAG,KAAKnC,MAAL,CAAYkC,qBAAZ,EAAnB;;AAEA,QACEL,MAAM,IAAII,UAAU,CAACG,IAArB,IACAP,MAAM,IAAII,UAAU,CAACG,IAAX,GAAkBH,UAAU,CAACI,KADvC,IAEAN,MAAM,IAAIE,UAAU,CAACK,GAFrB,IAGAP,MAAM,IAAIE,UAAU,CAACK,GAAX,GAAiBL,UAAU,CAACM,MAJxC,EAKE;AACA,WAAKlD,eAAL;AACD,KAPD,MAOO,IACLwC,MAAM,IAAIM,UAAU,CAACC,IAArB,IACAP,MAAM,IAAIM,UAAU,CAACC,IAAX,GAAkBD,UAAU,CAACE,KADvC,IAEAN,MAAM,IAAII,UAAU,CAACG,GAFrB,IAGAP,MAAM,IAAII,UAAU,CAACG,GAAX,GAAiBH,UAAU,CAACI,MAJjC,EAKL;AACA,WAAKlD,eAAL;AACD,KAPM,MAOA,IAAIc,OAAJ,EAAa;AAClB,WAAKY,SAAL;AACA,WAAKW,IAAL;AACD;AACF;;AAEDH,EAAAA,UAAU,GAAS;AACjB,SAAKR,SAAL;AAEA,QAAM;AAAET,MAAAA,OAAF;AAAWkC,MAAAA;AAAX,QAA6B,KAAKpD,KAAxC;AACA,QAAIqD,YAAY,GAAGnC,OAAnB;;AACA,QACE1B,OAAO,CAACE,iBAAR,GAA4B,CAA5B,IACAE,IAAI,CAACC,GAAL,KAAaL,OAAO,CAACG,cAArB,GAAsCH,OAAO,CAAC8D,sBAFhD,EAGE;AACAD,MAAAA,YAAY,GAAGD,aAAf;AACD;;AACD,SAAKvC,KAAL,GAAaqB,MAAM,CAACqB,UAAP,CAAkB,KAAKjD,aAAvB,EAAsC+C,YAAtC,CAAb;AACD;;AAED1B,EAAAA,SAAS,GAAS;AAChB,QAAI,KAAKd,KAAT,EAAgB;AACd2C,MAAAA,YAAY,CAAC,KAAK3C,KAAN,CAAZ;AACA,WAAKA,KAAL,GAAa,IAAb;AACD;AACF;;AAEDM,EAAAA,IAAI,GAAS;AACX,QAAM;AAAEJ,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,SAAKa,SAAL;;AAEA,QAAI,CAACZ,OAAL,EAAc;AAAA;;AACZ,mCAAKJ,MAAL,CAAYiB,OAAZ,8EAAqBT,IAArB;AACA,WAAKsC,QAAL,CAAc;AAAE1C,QAAAA,OAAO,EAAE;AAAX,OAAd;AAEA,UAAM;AAAEwB,QAAAA;AAAF,UAAkB,KAAKvC,KAA7B;;AACA,UAAIuC,WAAJ,EAAiB;AACf,aAAKN,oBAAL;AACD;AACF;AACF;;AAEDK,EAAAA,IAAI,GAAS;AAAA;;AACX,kCAAK3B,MAAL,CAAYiB,OAAZ,gFAAqBU,IAArB;AACA,SAAKZ,mBAAL;AACD;;AAEDgC,EAAAA,MAAM,GAAS;AAAA;;AACb,kCAAK/C,MAAL,CAAYiB,OAAZ,gFAAqB+B,cAArB;AACD;;AAEDpD,EAAAA,YAAY,GAAS;AACnB,SAAKkD,QAAL,CAAc;AAAE1C,MAAAA,OAAO,EAAE;AAAX,KAAd;AACD;;AAEDP,EAAAA,kBAAkB,GAAS;AACzB,QAAM;AAAEO,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,SAAKa,SAAL;;AACA,QAAIZ,OAAJ,EAAa;AACX,WAAKuB,IAAL;AACD;AACF;;AAEDsB,EAAAA,MAAM,GAAgB;AACpB,QAAM;AAAErB,MAAAA,WAAF;AAAesB,MAAAA,QAAf;AAAyBC,MAAAA,OAAzB;AAAkCC,MAAAA;AAAlC,QAAsD,KAAK/D,KAAjE;AACA,QAAM;AAAEe,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,wBACE;AAAK,MAAA,GAAG,EAAE,KAAKL,SAAf;AAA0B,MAAA,KAAK,EAAE;AAAEuD,QAAAA,OAAO,EAAE;AAAX;AAAjC,oBACE,oBAAC,MAAD;AACE,MAAA,SAAS,EAAE7E,UAAU,CAAC4E,eAAD,CADvB;AAEE,MAAA,OAAO,EAAED,OAFX;AAGE,MAAA,GAAG,EAAE,KAAKnD,MAHZ;AAIE,MAAA,QAAQ,EAAE,KAAKJ,YAJjB;AAKE,MAAA,WAAW,EAAEgC;AALf,oBAOE;AAAK,MAAA,SAAS,EAAC;AAAf,YAAmCxB,OAAO,IAAI8C,QAA9C,CAPF,CADF,CADF;AAaD;;AAzQyD;;gBAAtDrE,O,oBACoB,G;;gBADpBA,O,0BAG0B,G;;gBAH1BA,O,4BAK4B,G;;gBAL5BA,O,uBAOuB,C;;gBAPvBA,O,oBASoBI,IAAI,CAACC,GAAL,E;;gBATpBL,O,kBAWkB;AACpB+C,EAAAA,WAAW,EAAE,KADO;AAEpBuB,EAAAA,OAAO,EAAE,EAFW;AAGpBC,EAAAA,eAAe,EAAE,EAHG;AAIpBX,EAAAA,aAAa,EAAE5D,OAAO,CAACyE,oBAJH;AAKpB/C,EAAAA,OAAO,EAAE1B,OAAO,CAAC0E;AALG,C;;AAiQxB,eAAe1E,OAAf","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport Popper, { PopperOptions } from './Popper';\n\nconst log = Log.module('Tooltip');\n\ninterface TooltipProps {\n interactive: boolean;\n options: PopperOptions;\n timeout: number;\n reshowTimeout: number;\n children: React.ReactNode;\n popperClassName: string;\n}\n\ninterface TooltipState {\n isShown: boolean;\n}\n\n/**\n * Component that can be added to an element to automatically display a tooltip.\n * Content is mounted lazily, so don't worry about complex tooltips!\n *\n * Usage:\n * <div className=\"parent-container\">\n * Hover this container to see a tooltip\n * <Tooltip>\n * <div>My tooltip content goes here!</div>\n * </Tooltip>\n * </div>\n */\nclass Tooltip extends Component<TooltipProps, TooltipState> {\n static defaultTimeout = 500;\n\n static defaultReshowTimeout = 100;\n\n static triggerReshowThreshold = 300;\n\n static shownTooltipCount = 0;\n\n static lastHiddenTime = Date.now();\n\n static defaultProps = {\n interactive: false,\n options: {},\n popperClassName: '',\n reshowTimeout: Tooltip.defaultReshowTimeout,\n timeout: Tooltip.defaultTimeout,\n };\n\n static handleHidden(): void {\n Tooltip.shownTooltipCount -= 1;\n\n if (Tooltip.shownTooltipCount === 0) {\n Tooltip.lastHiddenTime = Date.now();\n }\n }\n\n static handleShown(): void {\n Tooltip.shownTooltipCount += 1;\n }\n\n constructor(props: TooltipProps) {\n super(props);\n\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleWindowMouseMove = this.handleWindowMouseMove.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.stopShowingTooltip = this.stopShowingTooltip.bind(this);\n\n this.container = React.createRef();\n this.popper = React.createRef();\n this.parent = null;\n this.timer = null;\n\n this.state = {\n isShown: false,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n\n const { timeout } = this.props;\n if (timeout === 0) {\n this.show();\n }\n }\n\n componentDidUpdate(prevProps: TooltipProps, prevState: TooltipState): void {\n const { isShown: oldIsShown } = prevState;\n const { isShown } = this.state;\n\n if (isShown !== oldIsShown) {\n if (isShown) {\n Tooltip.handleShown();\n } else {\n Tooltip.handleHidden();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n this.stopListeningWindow();\n this.stopTimer();\n\n const { isShown } = this.state;\n\n if (isShown) {\n Tooltip.handleHidden();\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n popper: React.RefObject<Popper>;\n\n parent: HTMLElement | null;\n\n // This is platform dependent of Node/DOM\n // Jest requires Node types\n timer: number | null;\n\n startListening(): void {\n if (!this.container.current || !this.container.current.parentElement) {\n log.error(\"Tooltip doesn't have a container or a parent set!\");\n return;\n }\n\n this.parent = this.container.current.parentElement;\n this.parent.addEventListener('mousemove', this.handleMouseMove);\n this.parent.addEventListener('mouseleave', this.handleMouseLeave);\n this.parent.addEventListener('mousedown', this.stopShowingTooltip);\n }\n\n stopListening(): void {\n if (!this.parent) {\n return;\n }\n\n this.parent.removeEventListener('mousemove', this.handleMouseMove);\n this.parent.removeEventListener('mouseleave', this.handleMouseLeave);\n this.parent.removeEventListener('mousedown', this.stopShowingTooltip);\n }\n\n startListeningWindow(): void {\n window.addEventListener('mousemove', this.handleWindowMouseMove, true);\n window.addEventListener('contextmenu', this.stopShowingTooltip, true);\n window.addEventListener('wheel', this.handleWheel);\n }\n\n stopListeningWindow(): void {\n window.removeEventListener('mousemove', this.handleWindowMouseMove, true);\n window.removeEventListener('contextmenu', this.stopShowingTooltip, true);\n window.removeEventListener('wheel', this.handleWheel);\n }\n\n handleMouseMove(): void {\n this.startTimer();\n }\n\n handleWheel(): void {\n const { isShown } = this.state;\n if (this.popper.current && this.parent && isShown) {\n if (\n !this.popper.current.element.matches(':hover') &&\n !this.parent.matches(':hover')\n ) {\n this.stopTimer();\n this.hide();\n }\n }\n }\n\n handleMouseLeave(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n const { interactive } = this.props;\n if (!interactive && isShown) {\n this.hide();\n }\n }\n\n handleTimeout(): void {\n this.show();\n }\n\n handleWindowMouseMove(event: MouseEvent): void {\n const mouseX = event.clientX;\n const mouseY = event.clientY;\n const { isShown } = this.state;\n\n if (!this.popper.current || !this.parent) {\n return;\n }\n const popperRect = this.popper.current.element.getBoundingClientRect();\n const parentRect = this.parent.getBoundingClientRect();\n\n if (\n mouseX >= popperRect.left &&\n mouseX <= popperRect.left + popperRect.width &&\n mouseY >= popperRect.top &&\n mouseY <= popperRect.top + popperRect.height\n ) {\n this.handleMouseMove();\n } else if (\n mouseX >= parentRect.left &&\n mouseX <= parentRect.left + parentRect.width &&\n mouseY >= parentRect.top &&\n mouseY <= parentRect.top + parentRect.height\n ) {\n this.handleMouseMove();\n } else if (isShown) {\n this.stopTimer();\n this.hide();\n }\n }\n\n startTimer(): void {\n this.stopTimer();\n\n const { timeout, reshowTimeout } = this.props;\n let timerTimeout = timeout;\n if (\n Tooltip.shownTooltipCount > 0 ||\n Date.now() - Tooltip.lastHiddenTime < Tooltip.triggerReshowThreshold\n ) {\n timerTimeout = reshowTimeout;\n }\n this.timer = window.setTimeout(this.handleTimeout, timerTimeout);\n }\n\n stopTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n show(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n if (!isShown) {\n this.popper.current?.show();\n this.setState({ isShown: true });\n\n const { interactive } = this.props;\n if (interactive) {\n this.startListeningWindow();\n }\n }\n }\n\n hide(): void {\n this.popper.current?.hide();\n this.stopListeningWindow();\n }\n\n update(): void {\n this.popper.current?.scheduleUpdate();\n }\n\n handleExited(): void {\n this.setState({ isShown: false });\n }\n\n stopShowingTooltip(): void {\n const { isShown } = this.state;\n this.stopTimer();\n if (isShown) {\n this.hide();\n }\n }\n\n render(): JSX.Element {\n const { interactive, children, options, popperClassName } = this.props;\n const { isShown } = this.state;\n return (\n <div ref={this.container} style={{ display: 'none' }}>\n <Popper\n className={classNames(popperClassName)}\n options={options}\n ref={this.popper}\n onExited={this.handleExited}\n interactive={interactive}\n >\n <div className=\"tooltip-content\"> {isShown && children}</div>\n </Popper>\n </div>\n );\n }\n}\n\nexport default Tooltip;\n"],"file":"Tooltip.js"}
1
+ {"version":3,"sources":["../../src/popper/Tooltip.tsx"],"names":["React","Component","classNames","Log","Popper","log","module","Tooltip","handleHidden","shownTooltipCount","lastHiddenTime","Date","now","handleShown","constructor","props","handleMouseMove","bind","handleMouseLeave","handleWindowMouseMove","handleWheel","handleTimeout","handleExited","stopShowingTooltip","container","createRef","popper","parent","timer","state","isShown","componentDidMount","startListening","timeout","show","componentDidUpdate","prevProps","prevState","oldIsShown","componentWillUnmount","stopListening","stopListeningWindow","stopTimer","current","parentElement","error","addEventListener","removeEventListener","startListeningWindow","window","startTimer","element","matches","hide","interactive","event","mouseX","clientX","mouseY","clientY","popperRect","getBoundingClientRect","parentRect","left","width","top","height","reshowTimeout","timerTimeout","triggerReshowThreshold","setTimeout","clearTimeout","setState","update","scheduleUpdate","render","children","options","referenceObject","popperClassName","display","defaultReshowTimeout","defaultTimeout"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport Popper, { PopperOptions, ReferenceObject } from './Popper';\n\nconst log = Log.module('Tooltip');\n\ninterface TooltipProps {\n interactive: boolean;\n options: PopperOptions;\n timeout: number;\n reshowTimeout: number;\n children: React.ReactNode;\n popperClassName: string;\n referenceObject: ReferenceObject;\n}\n\ninterface TooltipState {\n isShown: boolean;\n}\n\n/**\n * Component that can be added to an element to automatically display a tooltip.\n * Content is mounted lazily, so don't worry about complex tooltips!\n *\n * Usage:\n * <div className=\"parent-container\">\n * Hover this container to see a tooltip\n * <Tooltip>\n * <div>My tooltip content goes here!</div>\n * </Tooltip>\n * </div>\n */\nclass Tooltip extends Component<TooltipProps, TooltipState> {\n static defaultTimeout = 500;\n\n static defaultReshowTimeout = 100;\n\n static triggerReshowThreshold = 300;\n\n static shownTooltipCount = 0;\n\n static lastHiddenTime = Date.now();\n\n static defaultProps = {\n interactive: false,\n options: {},\n popperClassName: '',\n reshowTimeout: Tooltip.defaultReshowTimeout,\n timeout: Tooltip.defaultTimeout,\n referenceObject: null,\n };\n\n static handleHidden(): void {\n Tooltip.shownTooltipCount -= 1;\n\n if (Tooltip.shownTooltipCount === 0) {\n Tooltip.lastHiddenTime = Date.now();\n }\n }\n\n static handleShown(): void {\n Tooltip.shownTooltipCount += 1;\n }\n\n constructor(props: TooltipProps) {\n super(props);\n\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleWindowMouseMove = this.handleWindowMouseMove.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.stopShowingTooltip = this.stopShowingTooltip.bind(this);\n\n this.container = React.createRef();\n this.popper = React.createRef();\n this.parent = null;\n this.timer = null;\n\n this.state = {\n isShown: false,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n\n const { timeout } = this.props;\n if (timeout === 0) {\n this.show();\n }\n }\n\n componentDidUpdate(prevProps: TooltipProps, prevState: TooltipState): void {\n const { isShown: oldIsShown } = prevState;\n const { isShown } = this.state;\n\n if (isShown !== oldIsShown) {\n if (isShown) {\n Tooltip.handleShown();\n } else {\n Tooltip.handleHidden();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n this.stopListeningWindow();\n this.stopTimer();\n\n const { isShown } = this.state;\n\n if (isShown) {\n Tooltip.handleHidden();\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n popper: React.RefObject<Popper>;\n\n parent: HTMLElement | null;\n\n // This is platform dependent of Node/DOM\n // Jest requires Node types\n timer: number | null;\n\n startListening(): void {\n if (!this.container.current || !this.container.current.parentElement) {\n log.error(\"Tooltip doesn't have a container or a parent set!\");\n return;\n }\n\n this.parent = this.container.current.parentElement;\n this.parent.addEventListener('mousemove', this.handleMouseMove);\n this.parent.addEventListener('mouseleave', this.handleMouseLeave);\n this.parent.addEventListener('mousedown', this.stopShowingTooltip);\n }\n\n stopListening(): void {\n if (!this.parent) {\n return;\n }\n\n this.parent.removeEventListener('mousemove', this.handleMouseMove);\n this.parent.removeEventListener('mouseleave', this.handleMouseLeave);\n this.parent.removeEventListener('mousedown', this.stopShowingTooltip);\n }\n\n startListeningWindow(): void {\n window.addEventListener('mousemove', this.handleWindowMouseMove, true);\n window.addEventListener('contextmenu', this.stopShowingTooltip, true);\n window.addEventListener('wheel', this.handleWheel);\n }\n\n stopListeningWindow(): void {\n window.removeEventListener('mousemove', this.handleWindowMouseMove, true);\n window.removeEventListener('contextmenu', this.stopShowingTooltip, true);\n window.removeEventListener('wheel', this.handleWheel);\n }\n\n handleMouseMove(): void {\n this.startTimer();\n }\n\n handleWheel(): void {\n const { isShown } = this.state;\n if (this.popper.current && this.parent && isShown) {\n if (\n !this.popper.current.element.matches(':hover') &&\n !this.parent.matches(':hover')\n ) {\n this.stopTimer();\n this.hide();\n }\n }\n }\n\n handleMouseLeave(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n const { interactive } = this.props;\n if (!interactive && isShown) {\n this.hide();\n }\n }\n\n handleTimeout(): void {\n this.show();\n }\n\n handleWindowMouseMove(event: MouseEvent): void {\n const mouseX = event.clientX;\n const mouseY = event.clientY;\n const { isShown } = this.state;\n\n if (!this.popper.current || !this.parent) {\n return;\n }\n const popperRect = this.popper.current.element.getBoundingClientRect();\n const parentRect = this.parent.getBoundingClientRect();\n\n if (\n mouseX >= popperRect.left &&\n mouseX <= popperRect.left + popperRect.width &&\n mouseY >= popperRect.top &&\n mouseY <= popperRect.top + popperRect.height\n ) {\n this.handleMouseMove();\n } else if (\n mouseX >= parentRect.left &&\n mouseX <= parentRect.left + parentRect.width &&\n mouseY >= parentRect.top &&\n mouseY <= parentRect.top + parentRect.height\n ) {\n this.handleMouseMove();\n } else if (isShown) {\n this.stopTimer();\n this.hide();\n }\n }\n\n startTimer(): void {\n this.stopTimer();\n\n const { timeout, reshowTimeout } = this.props;\n let timerTimeout = timeout;\n if (\n Tooltip.shownTooltipCount > 0 ||\n Date.now() - Tooltip.lastHiddenTime < Tooltip.triggerReshowThreshold\n ) {\n timerTimeout = reshowTimeout;\n }\n this.timer = window.setTimeout(this.handleTimeout, timerTimeout);\n }\n\n stopTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n show(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n if (!isShown) {\n this.popper.current?.show();\n this.setState({ isShown: true });\n\n const { interactive } = this.props;\n if (interactive) {\n this.startListeningWindow();\n }\n }\n }\n\n hide(): void {\n this.popper.current?.hide();\n this.stopListeningWindow();\n }\n\n update(): void {\n this.popper.current?.scheduleUpdate();\n }\n\n handleExited(): void {\n this.setState({ isShown: false });\n }\n\n stopShowingTooltip(): void {\n const { isShown } = this.state;\n this.stopTimer();\n if (isShown) {\n this.hide();\n }\n }\n\n render(): JSX.Element {\n const {\n interactive,\n children,\n options,\n referenceObject,\n popperClassName,\n } = this.props;\n const { isShown } = this.state;\n return (\n <div ref={this.container} style={{ display: 'none' }}>\n <Popper\n className={classNames(popperClassName)}\n options={options}\n ref={this.popper}\n onExited={this.handleExited}\n interactive={interactive}\n referenceObject={referenceObject}\n >\n <div className=\"tooltip-content\"> {isShown && children}</div>\n </Popper>\n </div>\n );\n }\n}\n\nexport default Tooltip;\n"],"file":"Tooltip.js"}