@deephaven/components 0.6.3-beta.9 → 0.6.3

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 (48) 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/RadioItem.d.ts +2 -0
  16. package/dist/RadioItem.d.ts.map +1 -1
  17. package/dist/RadioItem.js +5 -2
  18. package/dist/RadioItem.js.map +1 -1
  19. package/dist/Select.js +1 -1
  20. package/dist/Select.js.map +1 -1
  21. package/dist/ThemeExport.js +1 -1
  22. package/dist/TimeSlider.js +3 -3
  23. package/dist/TimeSlider.js.map +1 -1
  24. package/dist/ToastNotification.js +1 -1
  25. package/dist/ToastNotification.js.map +1 -1
  26. package/dist/UISwitch.js +1 -1
  27. package/dist/context-actions/ContextMenu.js +1 -1
  28. package/dist/menu-actions/DropdownMenu.js +1 -1
  29. package/dist/menu-actions/Menu.js +1 -1
  30. package/dist/navigation/Menu.js +1 -1
  31. package/dist/navigation/MenuItem.d.ts.map +1 -1
  32. package/dist/navigation/MenuItem.js +2 -1
  33. package/dist/navigation/MenuItem.js.map +1 -1
  34. package/dist/navigation/Page.d.ts.map +1 -1
  35. package/dist/navigation/Page.js +3 -1
  36. package/dist/navigation/Page.js.map +1 -1
  37. package/dist/navigation/Stack.js +1 -1
  38. package/dist/navigation/Stack.js.map +1 -1
  39. package/dist/popper/Popper.d.ts +2 -5
  40. package/dist/popper/Popper.d.ts.map +1 -1
  41. package/dist/popper/Popper.js +5 -8
  42. package/dist/popper/Popper.js.map +1 -1
  43. package/dist/popper/Tooltip.d.ts +1 -3
  44. package/dist/popper/Tooltip.d.ts.map +1 -1
  45. package/dist/popper/Tooltip.js +2 -5
  46. package/dist/popper/Tooltip.js.map +1 -1
  47. package/dist/tsconfig.tsbuildinfo +1 -1
  48. package/package.json +10 -10
@@ -7,7 +7,7 @@ import "./Page.css";
7
7
  * A page view with a back button in the bottom left, a title at the top, and a close button in the top right.
8
8
  * Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.
9
9
  */
10
- export var Page = _ref => {
10
+ export var Page = (_ref) => {
11
11
  var {
12
12
  children,
13
13
  onBack,
@@ -22,6 +22,7 @@ export var Page = _ref => {
22
22
  className: "navigation-left-buttons"
23
23
  }, onBack !== undefined && /*#__PURE__*/React.createElement("button", {
24
24
  className: "btn btn-link btn-back",
25
+ "data-testid": "btn-page-back",
25
26
  type: "button",
26
27
  onClick: onBack
27
28
  }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
@@ -32,6 +33,7 @@ export var Page = _ref => {
32
33
  className: "navigation-right-buttons"
33
34
  }, onClose !== undefined && /*#__PURE__*/React.createElement("button", {
34
35
  className: "btn btn-link btn-link-icon btn-close px-2 m-1",
36
+ "data-testid": "btn-page-close",
35
37
  type: "button",
36
38
  onClick: onClose
37
39
  }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/navigation/Page.tsx"],"names":["React","FontAwesomeIcon","vsClose","vsChevronLeft","Page","children","onBack","onClose","title","undefined"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,OAAT,EAAkBC,aAAlB,QAAuC,kBAAvC;;;AAUA;AACA;AACA;AACA;AACA,OAAO,IAAMC,IAAI,GAAG;AAAA,MAAC;AACnBC,IAAAA,QADmB;AAEnBC,IAAAA,MAFmB;AAGnBC,IAAAA,OAHmB;AAInBC,IAAAA;AAJmB,GAAD;AAAA,sBAMlB;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,KACGF,MAAM,KAAKG,SAAX,iBACC;AACE,IAAA,SAAS,EAAC,uBADZ;AAEE,IAAA,IAAI,EAAC,QAFP;AAGE,IAAA,OAAO,EAAEH;AAHX,kBAKE,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEH;AAAvB,IALF,SAFJ,CADF,eAaE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAmCK,KAAnC,CAbF,eAcE;AAAK,IAAA,SAAS,EAAC;AAAf,KACGD,OAAO,KAAKE,SAAZ,iBACC;AACE,IAAA,SAAS,EAAC,+CADZ;AAEE,IAAA,IAAI,EAAC,QAFP;AAGE,IAAA,OAAO,EAAEF;AAHX,kBAKE,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEL;AAAvB,IALF,CAFJ,CAdF,CADF,eA2BE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAqCG,QAArC,CA3BF,CANkB;AAAA,CAAb;AAqCP,eAAeD,IAAf","sourcesContent":["import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose, vsChevronLeft } from '@deephaven/icons';\nimport './Page.scss';\n\nexport type PageProps = {\n children: React.ReactNode;\n onBack?: () => void;\n onClose?: () => void;\n title: string;\n};\n\n/**\n * A page view with a back button in the bottom left, a title at the top, and a close button in the top right.\n * Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.\n */\nexport const Page = ({\n children,\n onBack,\n onClose,\n title,\n}: PageProps): JSX.Element => (\n <div className=\"navigation-page\">\n <div className=\"navigation-title-bar\">\n <div className=\"navigation-left-buttons\">\n {onBack !== undefined && (\n <button\n className=\"btn btn-link btn-back\"\n type=\"button\"\n onClick={onBack}\n >\n <FontAwesomeIcon icon={vsChevronLeft} />\n Back\n </button>\n )}\n </div>\n <div className=\"navigation-title\">{title}</div>\n <div className=\"navigation-right-buttons\">\n {onClose !== undefined && (\n <button\n className=\"btn btn-link btn-link-icon btn-close px-2 m-1\"\n type=\"button\"\n onClick={onClose}\n >\n <FontAwesomeIcon icon={vsClose} />\n </button>\n )}\n </div>\n </div>\n <div className=\"navigation-content\">{children}</div>\n </div>\n);\n\nexport default Page;\n"],"file":"Page.js"}
1
+ {"version":3,"sources":["../../src/navigation/Page.tsx"],"names":["React","FontAwesomeIcon","vsClose","vsChevronLeft","Page","children","onBack","onClose","title","undefined"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,OAAT,EAAkBC,aAAlB,QAAuC,kBAAvC;;;AAUA;AACA;AACA;AACA;AACA,OAAO,IAAMC,IAAI,GAAG;AAAA,MAAC;AACnBC,IAAAA,QADmB;AAEnBC,IAAAA,MAFmB;AAGnBC,IAAAA,OAHmB;AAInBC,IAAAA;AAJmB,GAAD;AAAA,sBAMlB;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,KACGF,MAAM,KAAKG,SAAX,iBACC;AACE,IAAA,SAAS,EAAC,uBADZ;AAEE,mBAAY,eAFd;AAGE,IAAA,IAAI,EAAC,QAHP;AAIE,IAAA,OAAO,EAAEH;AAJX,kBAME,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEH;AAAvB,IANF,SAFJ,CADF,eAcE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAmCK,KAAnC,CAdF,eAeE;AAAK,IAAA,SAAS,EAAC;AAAf,KACGD,OAAO,KAAKE,SAAZ,iBACC;AACE,IAAA,SAAS,EAAC,+CADZ;AAEE,mBAAY,gBAFd;AAGE,IAAA,IAAI,EAAC,QAHP;AAIE,IAAA,OAAO,EAAEF;AAJX,kBAME,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEL;AAAvB,IANF,CAFJ,CAfF,CADF,eA6BE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAqCG,QAArC,CA7BF,CANkB;AAAA,CAAb;AAuCP,eAAeD,IAAf","sourcesContent":["import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose, vsChevronLeft } from '@deephaven/icons';\nimport './Page.scss';\n\nexport type PageProps = {\n children: React.ReactNode;\n onBack?: () => void;\n onClose?: () => void;\n title: string;\n};\n\n/**\n * A page view with a back button in the bottom left, a title at the top, and a close button in the top right.\n * Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.\n */\nexport const Page = ({\n children,\n onBack,\n onClose,\n title,\n}: PageProps): JSX.Element => (\n <div className=\"navigation-page\">\n <div className=\"navigation-title-bar\">\n <div className=\"navigation-left-buttons\">\n {onBack !== undefined && (\n <button\n className=\"btn btn-link btn-back\"\n data-testid=\"btn-page-back\"\n type=\"button\"\n onClick={onBack}\n >\n <FontAwesomeIcon icon={vsChevronLeft} />\n Back\n </button>\n )}\n </div>\n <div className=\"navigation-title\">{title}</div>\n <div className=\"navigation-right-buttons\">\n {onClose !== undefined && (\n <button\n className=\"btn btn-link btn-link-icon btn-close px-2 m-1\"\n data-testid=\"btn-page-close\"\n type=\"button\"\n onClick={onClose}\n >\n <FontAwesomeIcon icon={vsClose} />\n </button>\n )}\n </div>\n </div>\n <div className=\"navigation-content\">{children}</div>\n </div>\n);\n\nexport default Page;\n"],"file":"Page.js"}
@@ -8,7 +8,7 @@ import "./Stack.css";
8
8
  * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.
9
9
  * Adding items to the stack will do a "push" animation, and removing items from the stack will do a "pop" animation.
10
10
  */
11
- export var Stack = _ref => {
11
+ export var Stack = (_ref) => {
12
12
  var {
13
13
  children
14
14
  } = _ref;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/navigation/Stack.tsx"],"names":["React","useState","useEffect","useMemo","useCallback","CSSTransition","usePrevious","ThemeExport","Stack","children","childrenArray","Children","toArray","prevChildrenArray","mainView","setMainView","length","pushingView","setPushingView","poppingView","setPoppingView","undefined","topChild","pushComplete","popComplete","transitionMidMs"],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport ThemeExport from '../ThemeExport';\nimport './Stack.scss';\n\nexport type StackProps = {\n children: React.ReactNode | React.ReactNode[];\n};\n\n/**\n * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.\n * Adding items to the stack will do a \"push\" animation, and removing items from the stack will do a \"pop\" animation.\n */\nexport const Stack = ({ children }: StackProps): JSX.Element => {\n const childrenArray = useMemo(() => React.Children.toArray(children), [\n children,\n ]);\n const prevChildrenArray = usePrevious(childrenArray);\n const [mainView, setMainView] = useState<React.ReactNode>(\n childrenArray[childrenArray.length - 1]\n );\n\n const [pushingView, setPushingView] = useState<React.ReactNode>(null);\n const [poppingView, setPoppingView] = useState<React.ReactNode>(null);\n\n /**\n * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.\n * `mainView` - The main view of the stack, stationary, filling the container.\n * `pushingView` - A view that's currently being pushed. Slides from off screen right to overtop of `mainView`.\n * `poppingView` - A view that's currently being popped. Slides from overtop of `mainView` to right off screen.\n *\n * When the `pushingView` or `poppingView` is set, that will kick off their animation.\n * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.\n */\n useEffect(() => {\n if (\n prevChildrenArray === undefined ||\n childrenArray === prevChildrenArray\n ) {\n return;\n }\n const topChild = childrenArray[childrenArray.length - 1];\n if (\n childrenArray.length === prevChildrenArray.length ||\n prevChildrenArray.length === 0 ||\n pushingView !== null ||\n poppingView !== null\n ) {\n // 1) Stack is the same size, we've just mounted, or we're already in an animation - just update the view\n if (pushingView !== null && topChild !== pushingView) {\n // Stack was updated mid animation\n setPushingView(topChild);\n } else if (topChild !== poppingView && topChild !== mainView) {\n // Replace the current view\n setMainView(topChild);\n }\n } else if (childrenArray.length > prevChildrenArray.length) {\n // 2) Stack has grown - start the push animation\n setPushingView(topChild);\n } else if (childrenArray.length < prevChildrenArray.length) {\n // 3) Stack has shrunk - start the pop animation\n setMainView(topChild);\n setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);\n }\n }, [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]);\n\n const pushComplete = useCallback(() => {\n setMainView(pushingView);\n setPushingView(null);\n }, [pushingView]);\n\n const popComplete = useCallback(() => {\n setPoppingView(null);\n }, []);\n\n return (\n <div className=\"navigation-stack\">\n <div className=\"main-view\">{mainView}</div>\n\n <CSSTransition\n in={poppingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-right\"\n onEntered={popComplete}\n >\n <>{poppingView && <div className=\"popping-view\">{poppingView}</div>}</>\n </CSSTransition>\n <CSSTransition\n in={pushingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntered={pushComplete}\n >\n <>{pushingView && <div className=\"pushing-view\">{pushingView}</div>}</>\n </CSSTransition>\n </div>\n );\n};\n\nexport default Stack;\n"],"file":"Stack.js"}
1
+ {"version":3,"sources":["../../src/navigation/Stack.tsx"],"names":["React","useState","useEffect","useMemo","useCallback","CSSTransition","usePrevious","ThemeExport","Stack","children","childrenArray","Children","toArray","prevChildrenArray","mainView","setMainView","length","pushingView","setPushingView","poppingView","setPoppingView","undefined","topChild","pushComplete","popComplete","transitionMidMs"],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport ThemeExport from '../ThemeExport';\nimport './Stack.scss';\n\nexport type StackProps = {\n children: React.ReactNode | React.ReactNode[];\n};\n\n/**\n * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.\n * Adding items to the stack will do a \"push\" animation, and removing items from the stack will do a \"pop\" animation.\n */\nexport const Stack = ({ children }: StackProps): JSX.Element => {\n const childrenArray = useMemo(() => React.Children.toArray(children), [\n children,\n ]);\n const prevChildrenArray = usePrevious(childrenArray);\n const [mainView, setMainView] = useState<React.ReactNode>(\n childrenArray[childrenArray.length - 1]\n );\n\n const [pushingView, setPushingView] = useState<React.ReactNode>(null);\n const [poppingView, setPoppingView] = useState<React.ReactNode>(null);\n\n /**\n * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.\n * `mainView` - The main view of the stack, stationary, filling the container.\n * `pushingView` - A view that's currently being pushed. Slides from off screen right to overtop of `mainView`.\n * `poppingView` - A view that's currently being popped. Slides from overtop of `mainView` to right off screen.\n *\n * When the `pushingView` or `poppingView` is set, that will kick off their animation.\n * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.\n */\n useEffect(() => {\n if (\n prevChildrenArray === undefined ||\n childrenArray === prevChildrenArray\n ) {\n return;\n }\n const topChild = childrenArray[childrenArray.length - 1];\n if (\n childrenArray.length === prevChildrenArray.length ||\n prevChildrenArray.length === 0 ||\n pushingView !== null ||\n poppingView !== null\n ) {\n // 1) Stack is the same size, we've just mounted, or we're already in an animation - just update the view\n if (pushingView !== null && topChild !== pushingView) {\n // Stack was updated mid animation\n setPushingView(topChild);\n } else if (topChild !== poppingView && topChild !== mainView) {\n // Replace the current view\n setMainView(topChild);\n }\n } else if (childrenArray.length > prevChildrenArray.length) {\n // 2) Stack has grown - start the push animation\n setPushingView(topChild);\n } else if (childrenArray.length < prevChildrenArray.length) {\n // 3) Stack has shrunk - start the pop animation\n setMainView(topChild);\n setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);\n }\n }, [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]);\n\n const pushComplete = useCallback(() => {\n setMainView(pushingView);\n setPushingView(null);\n }, [pushingView]);\n\n const popComplete = useCallback(() => {\n setPoppingView(null);\n }, []);\n\n return (\n <div className=\"navigation-stack\">\n <div className=\"main-view\">{mainView}</div>\n\n <CSSTransition\n in={poppingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-right\"\n onEntered={popComplete}\n >\n <>{poppingView && <div className=\"popping-view\">{poppingView}</div>}</>\n </CSSTransition>\n <CSSTransition\n in={pushingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntered={pushComplete}\n >\n <>{pushingView && <div className=\"pushing-view\">{pushingView}</div>}</>\n </CSSTransition>\n </div>\n );\n};\n\nexport default Stack;\n"],"file":"Stack.js"}
@@ -15,7 +15,7 @@
15
15
  * </Popper>
16
16
  */
17
17
  import React, { Component } from 'react';
18
- import PopperJs, { PopperOptions, ReferenceObject } from 'popper.js';
18
+ import PopperJs, { PopperOptions } from 'popper.js';
19
19
  import PropTypes from 'prop-types';
20
20
  import './Popper.scss';
21
21
  interface PopperProps {
@@ -27,7 +27,6 @@ interface PopperProps {
27
27
  isShown: boolean;
28
28
  closeOnBlur: boolean;
29
29
  interactive: boolean;
30
- referenceObject: ReferenceObject;
31
30
  }
32
31
  interface PopperState {
33
32
  show: boolean;
@@ -44,7 +43,6 @@ declare class Popper extends Component<PopperProps, PopperState> {
44
43
  isShown: PropTypes.Requireable<boolean>;
45
44
  closeOnBlur: PropTypes.Requireable<boolean>;
46
45
  interactive: PropTypes.Requireable<boolean>;
47
- referenceObject: PropTypes.Requireable<PropTypes.InferProps<{}>>;
48
46
  };
49
47
  static defaultProps: {
50
48
  options: {};
@@ -55,7 +53,6 @@ declare class Popper extends Component<PopperProps, PopperState> {
55
53
  isShown: boolean;
56
54
  interactive: boolean;
57
55
  closeOnBlur: boolean;
58
- referenceObject: null;
59
56
  };
60
57
  constructor(props: PopperProps);
61
58
  componentDidUpdate(prevProps: PopperProps): void;
@@ -78,5 +75,5 @@ declare class Popper extends Component<PopperProps, PopperState> {
78
75
  render(): JSX.Element;
79
76
  }
80
77
  export default Popper;
81
- export type { PopperOptions, ReferenceObject };
78
+ export type { PopperOptions };
82
79
  //# sourceMappingURL=Popper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popper.d.ts","sourceRoot":"","sources":["../../src/popper/Popper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,QAAQ,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,eAAe,CAAC;AAEvB,UAAU,WAAW;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzB;AAED,cAAM,MAAO,SAAQ,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IACtD,MAAM,CAAC,SAAS;;;;;;;;;;;MAWd;IAEF,MAAM,CAAC,YAAY;;;;qBAIJ,IAAI;oBAGL,IAAI;;;;;MAOhB;gBAEU,KAAK,EAAE,WAAW;IAwB9B,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAehD,oBAAoB,IAAI,IAAI;IAK5B,OAAO,EAAE,cAAc,CAAC;IAExB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE3C,SAAS,EAAE,OAAO,CAAC;IAGnB,GAAG,EAAE,MAAM,CAAC;IAEZ,wFAAwF;IACxF,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI;IAYlE,UAAU,IAAI,IAAI;IA2ClB,aAAa,CAAC,WAAW,UAAO,GAAG,IAAI;IAkBvC,IAAI,IAAI,IAAI;IAKZ,IAAI,IAAI,IAAI;IAIZ,cAAc,IAAI,IAAI;IAKtB,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IASrC,WAAW,IAAI,IAAI;IAKnB,UAAU,IAAI,IAAI;IAYlB,aAAa,IAAI,GAAG,CAAC,OAAO;IA2C5B,MAAM,IAAI,GAAG,CAAC,OAAO;CAYtB;AAED,eAAe,MAAM,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"Popper.d.ts","sourceRoot":"","sources":["../../src/popper/Popper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,QAAQ,EAAE,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,eAAe,CAAC;AAEvB,UAAU,WAAW;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzB;AAED,cAAM,MAAO,SAAQ,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IACtD,MAAM,CAAC,SAAS;;;;;;;;;;MAUd;IAEF,MAAM,CAAC,YAAY;;;;qBAIJ,IAAI;oBAGL,IAAI;;;;MAMhB;gBAEU,KAAK,EAAE,WAAW;IAwB9B,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAehD,oBAAoB,IAAI,IAAI;IAK5B,OAAO,EAAE,cAAc,CAAC;IAExB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE3C,SAAS,EAAE,OAAO,CAAC;IAGnB,GAAG,EAAE,MAAM,CAAC;IAEZ,wFAAwF;IACxF,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI;IAYlE,UAAU,IAAI,IAAI;IA2ClB,aAAa,CAAC,WAAW,UAAO,GAAG,IAAI;IAkBvC,IAAI,IAAI,IAAI;IAKZ,IAAI,IAAI,IAAI;IAIZ,cAAc,IAAI,IAAI;IAKtB,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IASrC,WAAW,IAAI,IAAI;IAKnB,UAAU,IAAI,IAAI;IAYlB,aAAa,IAAI,GAAG,CAAC,OAAO;IA2C5B,MAAM,IAAI,GAAG,CAAC,OAAO;CAYtB;AAED,eAAe,MAAM,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -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,8 +96,7 @@ class Popper extends Component {
96
96
  popper
97
97
  } = this.state;
98
98
  var {
99
- closeOnBlur,
100
- referenceObject
99
+ closeOnBlur
101
100
  } = this.props;
102
101
 
103
102
  if (popper) {
@@ -121,7 +120,7 @@ class Popper extends Component {
121
120
  parent = this.container.current;
122
121
  }
123
122
 
124
- popper = new PopperJs(referenceObject || parent, this.element, options);
123
+ popper = new PopperJs(parent, this.element, options);
125
124
  popper.scheduleUpdate(); // delayed due to scheduleUpdate
126
125
 
127
126
  cancelAnimationFrame(this.rAF);
@@ -283,8 +282,7 @@ _defineProperty(Popper, "propTypes", {
283
282
  onExited: PropTypes.func,
284
283
  isShown: PropTypes.bool,
285
284
  closeOnBlur: PropTypes.bool,
286
- interactive: PropTypes.bool,
287
- referenceObject: PropTypes.shape({})
285
+ interactive: PropTypes.bool
288
286
  });
289
287
 
290
288
  _defineProperty(Popper, "defaultProps", {
@@ -300,8 +298,7 @@ _defineProperty(Popper, "defaultProps", {
300
298
 
301
299
  isShown: false,
302
300
  interactive: false,
303
- closeOnBlur: false,
304
- referenceObject: null
301
+ closeOnBlur: false
305
302
  });
306
303
 
307
304
  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","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
+ {"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,5 +1,5 @@
1
1
  import React, { Component } from 'react';
2
- import Popper, { PopperOptions, ReferenceObject } from './Popper';
2
+ import Popper, { PopperOptions } from './Popper';
3
3
  interface TooltipProps {
4
4
  interactive: boolean;
5
5
  options: PopperOptions;
@@ -7,7 +7,6 @@ interface TooltipProps {
7
7
  reshowTimeout: number;
8
8
  children: React.ReactNode;
9
9
  popperClassName: string;
10
- referenceObject: ReferenceObject;
11
10
  }
12
11
  interface TooltipState {
13
12
  isShown: boolean;
@@ -36,7 +35,6 @@ declare class Tooltip extends Component<TooltipProps, TooltipState> {
36
35
  popperClassName: string;
37
36
  reshowTimeout: number;
38
37
  timeout: number;
39
- referenceObject: null;
40
38
  };
41
39
  static handleHidden(): void;
42
40
  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,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"}
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"}
@@ -272,7 +272,6 @@ class Tooltip extends Component {
272
272
  interactive,
273
273
  children,
274
274
  options,
275
- referenceObject,
276
275
  popperClassName
277
276
  } = this.props;
278
277
  var {
@@ -288,8 +287,7 @@ class Tooltip extends Component {
288
287
  options: options,
289
288
  ref: this.popper,
290
289
  onExited: this.handleExited,
291
- interactive: interactive,
292
- referenceObject: referenceObject
290
+ interactive: interactive
293
291
  }, /*#__PURE__*/React.createElement("div", {
294
292
  className: "tooltip-content"
295
293
  }, " ", isShown && children)));
@@ -312,8 +310,7 @@ _defineProperty(Tooltip, "defaultProps", {
312
310
  options: {},
313
311
  popperClassName: '',
314
312
  reshowTimeout: Tooltip.defaultReshowTimeout,
315
- timeout: Tooltip.defaultTimeout,
316
- referenceObject: null
313
+ timeout: Tooltip.defaultTimeout
317
314
  });
318
315
 
319
316
  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","referenceObject","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;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,OAAN,SAAsBN,SAAtB,CAA4D;AAoBvC,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;AACJrB,MAAAA,WADI;AAEJsB,MAAAA,QAFI;AAGJC,MAAAA,OAHI;AAIJC,MAAAA,eAJI;AAKJC,MAAAA;AALI,QAMF,KAAKhE,KANT;AAOA,QAAM;AAAEe,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,wBACE;AAAK,MAAA,GAAG,EAAE,KAAKL,SAAf;AAA0B,MAAA,KAAK,EAAE;AAAEwD,QAAAA,OAAO,EAAE;AAAX;AAAjC,oBACE,oBAAC,MAAD;AACE,MAAA,SAAS,EAAE9E,UAAU,CAAC6E,eAAD,CADvB;AAEE,MAAA,OAAO,EAAEF,OAFX;AAGE,MAAA,GAAG,EAAE,KAAKnD,MAHZ;AAIE,MAAA,QAAQ,EAAE,KAAKJ,YAJjB;AAKE,MAAA,WAAW,EAAEgC,WALf;AAME,MAAA,eAAe,EAAEwB;AANnB,oBAQE;AAAK,MAAA,SAAS,EAAC;AAAf,YAAmChD,OAAO,IAAI8C,QAA9C,CARF,CADF,CADF;AAcD;;AAjRyD;;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;AAGpBE,EAAAA,eAAe,EAAE,EAHG;AAIpBZ,EAAAA,aAAa,EAAE5D,OAAO,CAAC0E,oBAJH;AAKpBhD,EAAAA,OAAO,EAAE1B,OAAO,CAAC2E,cALG;AAMpBJ,EAAAA,eAAe,EAAE;AANG,C;;AAyQxB,eAAevE,OAAf","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"}
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":"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","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"}