@planningcenter/tapestry-react 2.1.2 → 2.3.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 (88) hide show
  1. package/dist/cjs/Badge/Badge.js +5 -1
  2. package/dist/cjs/Button/Button.js +6 -3
  3. package/dist/cjs/Card/Card.js +5 -2
  4. package/dist/cjs/Combobox/Combobox.js +16 -43
  5. package/dist/cjs/Combobox/ComboboxInput.js +112 -146
  6. package/dist/cjs/Combobox/ComboboxItem.js +38 -53
  7. package/dist/cjs/Combobox/ComboboxItems.js +41 -58
  8. package/dist/cjs/Combobox/index.js +12 -0
  9. package/dist/cjs/DateField/DateField.js +109 -128
  10. package/dist/cjs/Field/Field.js +80 -106
  11. package/dist/cjs/Menu/Item.js +1 -0
  12. package/dist/cjs/Popover/utils.js +1 -0
  13. package/dist/cjs/SegmentedControl/SegmentedControl.js +89 -111
  14. package/dist/cjs/SegmentedTabs/SegmentedTabs.js +54 -84
  15. package/dist/cjs/Tabs/Tab.js +9 -6
  16. package/dist/cjs/Tabs/TabList.js +49 -64
  17. package/dist/cjs/Tabs/TabPanel.js +6 -2
  18. package/dist/cjs/Tabs/TabPanels.js +14 -27
  19. package/dist/cjs/Tabs/Tabs.js +72 -106
  20. package/dist/cjs/Tabs/index.js +12 -0
  21. package/dist/cjs/ThemeProvider/ThemeProvider.js +1 -1
  22. package/dist/cjs/Tooltip/Tooltip.js +158 -182
  23. package/dist/cjs/Wizard/Wizard.js +143 -193
  24. package/dist/cjs/Wizard/index.js +3 -0
  25. package/dist/esm/Badge/Badge.js +5 -1
  26. package/dist/esm/Button/Button.js +6 -3
  27. package/dist/esm/Card/Card.js +5 -2
  28. package/dist/esm/Combobox/Combobox.js +18 -43
  29. package/dist/esm/Combobox/ComboboxInput.js +111 -149
  30. package/dist/esm/Combobox/ComboboxItem.js +38 -52
  31. package/dist/esm/Combobox/ComboboxItems.js +38 -56
  32. package/dist/esm/Combobox/index.js +8 -0
  33. package/dist/esm/DateField/DateField.js +106 -133
  34. package/dist/esm/Field/Field.js +76 -103
  35. package/dist/esm/Menu/Item.js +1 -0
  36. package/dist/esm/Popover/utils.js +1 -0
  37. package/dist/esm/SegmentedControl/SegmentedControl.js +90 -114
  38. package/dist/esm/SegmentedTabs/SegmentedTabs.js +51 -83
  39. package/dist/esm/Tabs/Tab.js +8 -6
  40. package/dist/esm/Tabs/TabList.js +49 -66
  41. package/dist/esm/Tabs/TabPanel.js +4 -2
  42. package/dist/esm/Tabs/TabPanels.js +14 -28
  43. package/dist/esm/Tabs/Tabs.js +76 -120
  44. package/dist/esm/Tabs/index.js +8 -0
  45. package/dist/esm/ThemeProvider/ThemeProvider.js +1 -1
  46. package/dist/esm/Tooltip/Tooltip.js +154 -195
  47. package/dist/esm/Wizard/Wizard.js +144 -201
  48. package/dist/esm/Wizard/index.js +2 -0
  49. package/dist/types/Popover/utils.d.ts +3 -0
  50. package/package.json +1 -1
  51. package/src/.DS_Store +0 -0
  52. package/src/Badge/Badge.js +5 -0
  53. package/src/Button/Button.tsx +6 -3
  54. package/src/Card/Card.tsx +22 -1
  55. package/src/Combobox/Combobox.js +18 -32
  56. package/src/Combobox/Combobox.mdx +1 -0
  57. package/src/Combobox/Combobox.test.js +1 -1
  58. package/src/Combobox/ComboboxInput.js +111 -105
  59. package/src/Combobox/ComboboxItem.js +27 -27
  60. package/src/Combobox/ComboboxItems.js +38 -60
  61. package/src/Combobox/index.js +8 -0
  62. package/src/DateField/DateField.js +109 -105
  63. package/src/DateField/DateField.mdx +1 -0
  64. package/src/Field/Field.js +85 -93
  65. package/src/Field/Field.mdx +1 -0
  66. package/src/Menu/Heading.js +5 -1
  67. package/src/Menu/Heading.mdx +20 -0
  68. package/src/Menu/Item.js +13 -1
  69. package/src/Menu/Item.mdx +18 -0
  70. package/src/Menu/Menu.mdx +1 -0
  71. package/src/Popover/utils.ts +1 -0
  72. package/src/SegmentedControl/SegmentedControl.js +88 -92
  73. package/src/SegmentedControl/SegmentedControl.mdx +1 -0
  74. package/src/SegmentedTabs/SegmentedTabs.js +51 -71
  75. package/src/SegmentedTabs/SegmentedTabs.mdx +1 -0
  76. package/src/Tabs/Tab.js +3 -1
  77. package/src/Tabs/TabList.js +56 -62
  78. package/src/Tabs/TabPanel.js +2 -1
  79. package/src/Tabs/TabPanels.js +14 -15
  80. package/src/Tabs/Tabs.js +63 -84
  81. package/src/Tabs/Tabs.mdx +16 -17
  82. package/src/Tabs/index.js +8 -0
  83. package/src/ThemeProvider/ThemeProvider.tsx +1 -1
  84. package/src/Tooltip/Tooltip.js +142 -160
  85. package/src/Tooltip/Tooltip.mdx +1 -0
  86. package/src/Wizard/Wizard.js +141 -170
  87. package/src/Wizard/Wizard.mdx +3 -2
  88. package/src/Wizard/index.js +2 -0
@@ -11,130 +11,96 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
13
 
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
17
-
18
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
-
20
14
  var _react = _interopRequireWildcard(require("react"));
21
15
 
22
16
  var _StackView = _interopRequireDefault(require("../StackView"));
23
17
 
24
18
  var _utils = require("../utils");
25
19
 
26
- var _Tab = _interopRequireDefault(require("./Tab"));
20
+ var _system = require("../system");
27
21
 
28
- var _TabList = _interopRequireWildcard(require("./TabList"));
22
+ var _TabList = require("./TabList");
29
23
 
30
- var _TabPanel = _interopRequireDefault(require("./TabPanel"));
24
+ var _TabPanels = require("./TabPanels");
31
25
 
32
- var _TabPanels = _interopRequireWildcard(require("./TabPanels"));
26
+ function Tabs(props) {
27
+ var _useThemeProps = (0, _system.useThemeProps)('tabs', props),
28
+ _useThemeProps$active = _useThemeProps.activeIndex,
29
+ activeIndex = _useThemeProps$active === void 0 ? null : _useThemeProps$active,
30
+ children = _useThemeProps.children,
31
+ _useThemeProps$defaul = _useThemeProps.defaultActiveIndex,
32
+ defaultActiveIndex = _useThemeProps$defaul === void 0 ? 0 : _useThemeProps$defaul,
33
+ onChange = _useThemeProps.onChange,
34
+ restProps = (0, _objectWithoutPropertiesLoose2["default"])(_useThemeProps, ["activeIndex", "children", "defaultActiveIndex", "onChange"]);
33
35
 
34
- var Tabs = /*#__PURE__*/function (_Component) {
35
- (0, _inheritsLoose2["default"])(Tabs, _Component);
36
+ var id = (0, _utils.generateId)('tabs');
36
37
 
37
- function Tabs() {
38
- var _this;
38
+ var _useState = (0, _react.useState)(defaultActiveIndex),
39
+ localActiveIndex = _useState[0],
40
+ setLocalActiveIndex = _useState[1];
39
41
 
40
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
41
- args[_key] = arguments[_key];
42
+ var tabListRef = (0, _react.useRef)(null);
43
+ var setActiveIndex = (0, _react.useCallback)(function (index) {
44
+ if (onChange) {
45
+ onChange(index);
42
46
  }
43
47
 
44
- _this = _Component.call.apply(_Component, [this].concat(args)) || this;
45
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "id", (0, _utils.generateId)('tabs'));
46
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
47
- activeIndex: _this.props.defaultActiveIndex
48
- });
49
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setTabList", function (node) {
50
- if (node) {
51
- _this.tabList = node.querySelector('[role="tablist"]');
52
- }
53
- });
54
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setActiveIndex", function (activeIndex) {
55
- if (_this.props.onChange) {
56
- _this.props.onChange(activeIndex);
57
- }
48
+ if (activeIndex === null) {
49
+ setLocalActiveIndex(index);
50
+ }
51
+ });
52
+ var getActiveIndex = (0, _react.useCallback)(function () {
53
+ return activeIndex === null ? localActiveIndex : activeIndex;
54
+ });
55
+ var getNextTab = (0, _react.useCallback)(function (startIndex, direction) {
56
+ var tabCount = tabListRef.current.children.length;
57
+ var nextIndex = startIndex + direction;
58
+
59
+ if (nextIndex < 0) {
60
+ nextIndex = tabCount - 1;
61
+ } else if (nextIndex >= tabCount) {
62
+ nextIndex = 0;
63
+ }
58
64
 
59
- if (_this.props.activeIndex === null) {
60
- _this.setState({
61
- activeIndex: activeIndex
62
- });
63
- }
64
- });
65
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getActiveIndex", function () {
66
- return _this.props.activeIndex === null ? _this.state.activeIndex : _this.props.activeIndex;
67
- });
68
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getNextTab", function (startIndex, direction) {
69
- var tabCount = _this.tabList.children.length;
70
- var nextIndex = startIndex + direction;
71
-
72
- if (nextIndex < 0) {
73
- nextIndex = tabCount - 1;
74
- } else if (nextIndex >= tabCount) {
75
- nextIndex = 0;
76
- }
65
+ var nextTab = tabListRef.current.children[nextIndex];
77
66
 
78
- var nextTab = _this.tabList.children[nextIndex];
67
+ if (nextTab.getAttribute('aria-disabled') === 'true') {
68
+ return getNextTab(nextIndex, direction);
69
+ } else {
70
+ return nextTab;
71
+ }
72
+ });
73
+ var moveTabFocus = (0, _react.useCallback)(function (direction) {
74
+ var nextTab = getNextTab(getActiveIndex(), direction);
79
75
 
80
- if (nextTab.getAttribute('aria-disabled') === 'true') {
81
- return _this.getNextTab(nextIndex, direction);
82
- } else {
83
- return nextTab;
76
+ if (nextTab) {
77
+ nextTab.focus();
78
+ }
79
+ });
80
+ return /*#__PURE__*/_react["default"].createElement(_StackView["default"], (0, _extends2["default"])({
81
+ innerRef: function innerRef(node) {
82
+ if (node) {
83
+ tabListRef.current = node.querySelector('[role="tablist"]');
84
84
  }
85
- });
86
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "moveTabFocus", function (direction) {
87
- var nextTab = _this.getNextTab(_this.getActiveIndex(), direction);
85
+ }
86
+ }, restProps), _react.Children.map(children, function (child, index) {
87
+ if (child && child.type.displayName === _TabList.TABLIST_DISPLAY_NAME) {
88
+ return /*#__PURE__*/_react["default"].cloneElement(child, {
89
+ id: id,
90
+ activeIndex: getActiveIndex(),
91
+ moveTabFocus: moveTabFocus,
92
+ setActiveIndex: setActiveIndex
93
+ });
94
+ } else if (child && child.type.displayName === _TabPanels.TABPANELS_DISPLAY_NAME) {
95
+ return /*#__PURE__*/_react["default"].cloneElement(child, {
96
+ id: id,
97
+ activeIndex: getActiveIndex()
98
+ });
99
+ } else {
100
+ return child;
101
+ }
102
+ }));
103
+ }
88
104
 
89
- if (nextTab) {
90
- nextTab.focus();
91
- }
92
- });
93
- return _this;
94
- }
95
-
96
- var _proto = Tabs.prototype;
97
-
98
- _proto.render = function render() {
99
- var _this2 = this;
100
-
101
- var _this$props = this.props,
102
- activeIndex = _this$props.activeIndex,
103
- children = _this$props.children,
104
- defaultActiveIndex = _this$props.defaultActiveIndex,
105
- onChange = _this$props.onChange,
106
- restProps = (0, _objectWithoutPropertiesLoose2["default"])(_this$props, ["activeIndex", "children", "defaultActiveIndex", "onChange"]);
107
- return /*#__PURE__*/_react["default"].createElement(_StackView["default"], (0, _extends2["default"])({
108
- innerRef: this.setTabList
109
- }, restProps), _react.Children.map(children, function (child, index) {
110
- if (child && child.type.displayName === _TabList.TABLIST_DISPLAY_NAME) {
111
- return /*#__PURE__*/_react["default"].cloneElement(child, {
112
- id: _this2.id,
113
- activeIndex: _this2.getActiveIndex(),
114
- moveTabFocus: _this2.moveTabFocus,
115
- setActiveIndex: _this2.setActiveIndex
116
- });
117
- } else if (child && child.type.displayName === _TabPanels.TABPANELS_DISPLAY_NAME) {
118
- return /*#__PURE__*/_react["default"].cloneElement(child, {
119
- id: _this2.id,
120
- activeIndex: _this2.getActiveIndex()
121
- });
122
- } else {
123
- return child;
124
- }
125
- }));
126
- };
127
-
128
- return Tabs;
129
- }(_react.Component);
130
-
131
- (0, _defineProperty2["default"])(Tabs, "Tab", _Tab["default"]);
132
- (0, _defineProperty2["default"])(Tabs, "TabList", _TabList["default"]);
133
- (0, _defineProperty2["default"])(Tabs, "TabPanel", _TabPanel["default"]);
134
- (0, _defineProperty2["default"])(Tabs, "TabPanels", _TabPanels["default"]);
135
- (0, _defineProperty2["default"])(Tabs, "defaultProps", {
136
- activeIndex: null,
137
- defaultActiveIndex: 0
138
- });
139
105
  var _default = Tabs;
140
106
  exports["default"] = _default;
@@ -7,5 +7,17 @@ exports["default"] = void 0;
7
7
 
8
8
  var _Tabs = _interopRequireDefault(require("./Tabs"));
9
9
 
10
+ var _Tab = _interopRequireDefault(require("./Tab"));
11
+
12
+ var _TabList = _interopRequireDefault(require("./TabList"));
13
+
14
+ var _TabPanel = _interopRequireDefault(require("./TabPanel"));
15
+
16
+ var _TabPanels = _interopRequireDefault(require("./TabPanels"));
17
+
18
+ _Tabs["default"].Tab = _Tab["default"];
19
+ _Tabs["default"].TabList = _TabList["default"];
20
+ _Tabs["default"].TabPanel = _TabPanel["default"];
21
+ _Tabs["default"].TabPanels = _TabPanels["default"];
10
22
  var _default = _Tabs["default"];
11
23
  exports["default"] = _default;
@@ -47,7 +47,7 @@ var themeStorage = {
47
47
  }
48
48
  };
49
49
  exports.themeStorage = themeStorage;
50
- var themeInitializerScript = "\ntry {\n var theme = window.localStorage.getItem('" + STORAGE_KEY + "')\n if (theme) {\n document.body.dataset.theme = theme\n }\n} catch (e) {}\n";
50
+ var themeInitializerScript = "\ntry {\n var theme = window.localStorage.getItem('" + STORAGE_KEY + "')\n if (theme) {\n document.documentElement.dataset.theme = theme\n }\n} catch (e) {}\n";
51
51
  exports.themeInitializerScript = themeInitializerScript;
52
52
  var emptyTheme = {};
53
53
 
@@ -11,12 +11,6 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
13
 
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
17
-
18
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
-
20
14
  var _react = _interopRequireWildcard(require("react"));
21
15
 
22
16
  var _mitt = _interopRequireDefault(require("mitt"));
@@ -25,6 +19,8 @@ var _Popover = _interopRequireDefault(require("../Popover"));
25
19
 
26
20
  var _utils = require("../utils");
27
21
 
22
+ var _system = require("../system");
23
+
28
24
  var emitter = (0, _mitt["default"])();
29
25
  var globalTimeoutId = null;
30
26
  var instantDelay = false;
@@ -40,193 +36,173 @@ function clearGlobalTimeout() {
40
36
  clearTimeout(globalTimeoutId);
41
37
  }
42
38
 
43
- var Tooltip = /*#__PURE__*/function (_Component) {
44
- (0, _inheritsLoose2["default"])(Tooltip, _Component);
45
-
46
- function Tooltip() {
47
- var _this;
48
-
49
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
50
- args[_key] = arguments[_key];
51
- }
52
-
53
- _this = _Component.call.apply(_Component, [this].concat(args)) || this;
54
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
55
- isPopoverOpen: _this.props.defaultOpen
56
- });
57
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isPageInView", true);
58
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isFocused", false);
59
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isMouseDown", false);
60
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "openTimeoutId", null);
61
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "closeTimeoutId", null);
62
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "cleanupPageViewChange", (0, _utils.pageViewChange)(function (inView) {
63
- return setTimeout(function () {
64
- return _this.isPageInView = inView;
65
- });
66
- }));
67
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleCloseOpenTooltips", function (instance) {
68
- if ((0, _assertThisInitialized2["default"])(_this) !== instance) {
69
- _this.close();
70
- }
71
- });
72
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "createOpenTimeout", function () {
73
- clearGlobalTimeout();
74
-
75
- if (_this.openTimeoutId === null) {
76
- clearTimeout(_this.closeTimeoutId);
77
- _this.closeTimeoutId = null;
78
-
79
- if (_this.state.isPopoverOpen === false) {
80
- emitter.emit('CLOSE_OPEN_TOOLTIPS');
81
- _this.openTimeoutId = setTimeout(function () {
82
- return _this.open();
83
- }, instantDelay ? 0 : _this.props.openDelay);
84
- }
85
- }
86
- });
87
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "createCloseTimeout", function () {
88
- startGlobalTimeout();
89
-
90
- if (_this.closeTimeoutId === null) {
91
- clearTimeout(_this.openTimeoutId);
92
- _this.openTimeoutId = null;
93
- _this.closeTimeoutId = setTimeout(function () {
94
- _this.close();
95
- }, _this.props.closeDelay);
96
- }
97
- });
98
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "open", function () {
99
- clearTimeout(_this.closeTimeoutId);
100
- _this.closeTimeoutId = null;
101
-
102
- _this.setState({
103
- isPopoverOpen: true
104
- });
105
- });
106
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "close", function () {
107
- clearTimeout(_this.openTimeoutId);
108
- _this.openTimeoutId = null;
109
-
110
- _this.setState({
111
- isPopoverOpen: false
112
- });
113
- });
114
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggle", function () {
115
- _this.setState(function (state) {
116
- return {
117
- isPopoverOpen: !state.isPopoverOpen
118
- };
119
- });
120
- });
121
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleFocus", function () {
122
- if (_this.isPageInView && !_this.isMouseDown) {
123
- _this.open();
124
- }
125
- });
126
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMouseDown", function () {
127
- _this.isMouseDown = true;
128
-
129
- _this.close();
39
+ function Tooltip(props, ref) {
40
+ var _useThemeProps = (0, _system.useThemeProps)('tooltip', props),
41
+ children = _useThemeProps.children,
42
+ _useThemeProps$openDe = _useThemeProps.openDelay,
43
+ openDelay = _useThemeProps$openDe === void 0 ? 500 : _useThemeProps$openDe,
44
+ _useThemeProps$closeD = _useThemeProps.closeDelay,
45
+ closeDelay = _useThemeProps$closeD === void 0 ? 300 : _useThemeProps$closeD,
46
+ _useThemeProps$defaul = _useThemeProps.defaultOpen,
47
+ defaultOpen = _useThemeProps$defaul === void 0 ? false : _useThemeProps$defaul,
48
+ _useThemeProps$keepIn = _useThemeProps.keepInView,
49
+ keepInView = _useThemeProps$keepIn === void 0 ? true : _useThemeProps$keepIn,
50
+ placement = _useThemeProps.placement,
51
+ popoverProps = _useThemeProps.popoverProps,
52
+ renderTo = _useThemeProps.renderTo,
53
+ title = _useThemeProps.title,
54
+ _useThemeProps$trigge = _useThemeProps.triggerOnFocus,
55
+ triggerOnFocus = _useThemeProps$trigge === void 0 ? true : _useThemeProps$trigge,
56
+ _useThemeProps$trigge2 = _useThemeProps.triggerOnHover,
57
+ triggerOnHover = _useThemeProps$trigge2 === void 0 ? true : _useThemeProps$trigge2,
58
+ childProps = (0, _objectWithoutPropertiesLoose2["default"])(_useThemeProps, ["children", "openDelay", "closeDelay", "defaultOpen", "keepInView", "placement", "popoverProps", "renderTo", "title", "triggerOnFocus", "triggerOnHover"]);
59
+
60
+ var isPageInView = true;
61
+ var isFocused = false;
62
+ var isMouseDown = false;
63
+ var openTimeoutId = null;
64
+ var closeTimeoutId = null; // prevents tooltips showing when focused and navigating back to a page after leaving
65
+
66
+ var cleanupPageViewChange = (0, _react.useCallback)((0, _utils.pageViewChange)(function (inView) {
67
+ return setTimeout(function () {
68
+ return isPageInView = inView;
130
69
  });
131
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMouseUp", function () {
132
- _this.isMouseDown = false;
133
- });
134
- return _this;
135
- }
136
-
137
- var _proto = Tooltip.prototype;
138
-
139
- _proto.componentDidMount = function componentDidMount() {
140
- emitter.on('CLOSE_OPEN_TOOLTIPS', this.handleCloseOpenTooltips);
70
+ }));
71
+
72
+ var _useState = (0, _react.useState)(defaultOpen),
73
+ isPopoverOpen = _useState[0],
74
+ setIsPopoverOpen = _useState[1];
75
+
76
+ (0, _react.useEffect)(function () {
77
+ emitter.on('CLOSE_OPEN_TOOLTIPS', close);
78
+ return function () {
79
+ emitter.off('CLOSE_OPEN_TOOLTIPS', close);
80
+ clearTimeout(openTimeoutId);
81
+ clearTimeout(closeTimeoutId);
82
+ cleanupPageViewChange();
83
+ };
84
+ }, []);
85
+
86
+ var open = function open() {
87
+ clearTimeout(closeTimeoutId);
88
+ closeTimeoutId = null;
89
+ setIsPopoverOpen(true);
141
90
  };
142
91
 
143
- _proto.componentDidUpdate = function componentDidUpdate(lastProps) {
144
- if (lastProps.triggerOnFocus !== this.props.triggerOnFocus && this.props.triggerOnFocus === false || lastProps.triggerOnHover !== this.props.triggerOnHover && this.triggerOnHover === false) {
145
- this.close();
146
- }
92
+ var close = function close() {
93
+ clearTimeout(openTimeoutId);
94
+ openTimeoutId = null;
95
+ setIsPopoverOpen(false);
147
96
  };
148
97
 
149
- _proto.componentWillUnmount = function componentWillUnmount() {
150
- emitter.off('CLOSE_OPEN_TOOLTIPS', this.handleCloseOpenTooltips);
151
- clearTimeout(this.openTimeoutId);
152
- clearTimeout(this.closeTimeoutId);
153
- this.cleanupPageViewChange();
98
+ var toggle = function toggle() {
99
+ setIsPopoverOpen(!isPopoverOpen);
154
100
  };
155
101
 
156
- _proto.render = function render() {
157
- var _this$props = this.props,
158
- children = _this$props.children,
159
- openDelay = _this$props.openDelay,
160
- closeDelay = _this$props.closeDelay,
161
- defaultOpen = _this$props.defaultOpen,
162
- keepInView = _this$props.keepInView,
163
- placement = _this$props.placement,
164
- popoverProps = _this$props.popoverProps,
165
- renderTo = _this$props.renderTo,
166
- title = _this$props.title,
167
- triggerOnFocus = _this$props.triggerOnFocus,
168
- triggerOnHover = _this$props.triggerOnHover,
169
- childProps = (0, _objectWithoutPropertiesLoose2["default"])(_this$props, ["children", "openDelay", "closeDelay", "defaultOpen", "keepInView", "placement", "popoverProps", "renderTo", "title", "triggerOnFocus", "triggerOnHover"]);
170
- var isPopoverOpen = this.state.isPopoverOpen;
171
-
172
- var child = _react.Children.only(children);
173
-
174
- var _child$props = child.props,
175
- onFocus = _child$props.onFocus,
176
- onBlur = _child$props.onBlur,
177
- onMouseEnter = _child$props.onMouseEnter,
178
- onMouseLeave = _child$props.onMouseLeave,
179
- onMouseDown = _child$props.onMouseDown,
180
- onMouseUp = _child$props.onMouseUp;
181
-
182
- if (!title) {
183
- return /*#__PURE__*/(0, _react.cloneElement)(child, childProps);
102
+ (0, _react.useImperativeHandle)(ref, function () {
103
+ return {
104
+ open: open,
105
+ close: close,
106
+ toggle: toggle
107
+ };
108
+ });
109
+ (0, _react.useEffect)(function () {
110
+ if (triggerOnFocus === false) {
111
+ close();
184
112
  }
185
-
186
- if (triggerOnFocus) {
187
- childProps.onFocus = (0, _utils.composeEvents)(this.handleFocus, onFocus);
188
- childProps.onBlur = (0, _utils.composeEvents)(this.close, onBlur);
189
- childProps.onMouseDown = (0, _utils.composeEvents)(this.handleMouseDown, onMouseDown);
190
- childProps.onMouseUp = (0, _utils.composeEvents)(this.handleMouseUp, onMouseUp);
113
+ }, [triggerOnFocus]);
114
+ (0, _react.useEffect)(function () {
115
+ if (triggerOnHover === false) {
116
+ close();
191
117
  }
192
-
193
- if (triggerOnHover) {
194
- childProps.onMouseEnter = (0, _utils.composeEvents)(this.createOpenTimeout, onMouseEnter);
195
- childProps.onMouseLeave = (0, _utils.composeEvents)(this.createCloseTimeout, onMouseLeave);
118
+ }, [triggerOnHover]);
119
+ var createOpenTimeout = (0, _react.useCallback)(function () {
120
+ clearGlobalTimeout();
121
+
122
+ if (openTimeoutId === null) {
123
+ clearTimeout(closeTimeoutId);
124
+ closeTimeoutId = null;
125
+
126
+ if (isPopoverOpen === false) {
127
+ emitter.emit('CLOSE_OPEN_TOOLTIPS');
128
+ openTimeoutId = setTimeout(function () {
129
+ return open();
130
+ }, instantDelay ? 0 : openDelay);
131
+ }
132
+ }
133
+ });
134
+ var createCloseTimeout = (0, _react.useCallback)(function () {
135
+ startGlobalTimeout();
136
+
137
+ if (closeTimeoutId === null) {
138
+ clearTimeout(openTimeoutId);
139
+ openTimeoutId = null;
140
+ closeTimeoutId = setTimeout(function () {
141
+ close();
142
+ }, closeDelay);
143
+ }
144
+ });
145
+ var handleFocus = (0, _react.useCallback)(function () {
146
+ if (isPageInView && !isMouseDown) {
147
+ open();
196
148
  }
149
+ });
150
+ var handleMouseDown = (0, _react.useCallback)(function () {
151
+ isMouseDown = true;
152
+ close();
153
+ });
154
+ var handleMouseUp = (0, _react.useCallback)(function () {
155
+ isMouseDown = false;
156
+ });
157
+
158
+ var child = _react.Children.only(children);
159
+
160
+ var _child$props = child.props,
161
+ onFocus = _child$props.onFocus,
162
+ onBlur = _child$props.onBlur,
163
+ onMouseEnter = _child$props.onMouseEnter,
164
+ onMouseLeave = _child$props.onMouseLeave,
165
+ onMouseDown = _child$props.onMouseDown,
166
+ onMouseUp = _child$props.onMouseUp;
167
+
168
+ if (!title) {
169
+ return /*#__PURE__*/(0, _react.cloneElement)(child, childProps);
170
+ }
197
171
 
198
- return /*#__PURE__*/_react["default"].createElement(_Popover["default"], (0, _extends2["default"])({
199
- shouldFlip: true,
200
- paddingHorizontal: 0.75,
201
- paddingVertical: 0.25,
202
- fontSize: 5,
203
- textAlign: "center",
204
- radius: 2,
205
- backgroundColor: "grey-9",
206
- color: "rgba(255,255,255,0.94)",
207
- zIndex: 9999
208
- }, popoverProps, {
209
- anchorElement: /*#__PURE__*/(0, _react.cloneElement)(child, childProps),
210
- onMouseEnter: this.createOpenTimeout,
211
- onMouseLeave: this.createCloseTimeout,
212
- keepInView: keepInView,
213
- placement: placement,
214
- renderTo: renderTo,
215
- children: title,
216
- open: isPopoverOpen
217
- }));
218
- };
172
+ if (triggerOnFocus) {
173
+ childProps.onFocus = (0, _utils.composeEvents)(handleFocus, onFocus);
174
+ childProps.onBlur = (0, _utils.composeEvents)(close, onBlur);
175
+ childProps.onMouseDown = (0, _utils.composeEvents)(handleMouseDown, onMouseDown);
176
+ childProps.onMouseUp = (0, _utils.composeEvents)(handleMouseUp, onMouseUp);
177
+ }
178
+
179
+ if (triggerOnHover) {
180
+ childProps.onMouseEnter = (0, _utils.composeEvents)(createOpenTimeout, onMouseEnter);
181
+ childProps.onMouseLeave = (0, _utils.composeEvents)(createCloseTimeout, onMouseLeave);
182
+ }
183
+
184
+ return /*#__PURE__*/_react["default"].createElement(_Popover["default"], (0, _extends2["default"])({
185
+ shouldFlip: true,
186
+ paddingHorizontal: 0.75,
187
+ paddingVertical: 0.25,
188
+ fontSize: 5,
189
+ textAlign: "center",
190
+ radius: 2,
191
+ backgroundColor: "grey-9",
192
+ color: "rgba(255,255,255,0.94)",
193
+ zIndex: 9999
194
+ }, popoverProps, {
195
+ anchorElement: /*#__PURE__*/(0, _react.cloneElement)(child, childProps),
196
+ onMouseEnter: createOpenTimeout,
197
+ onMouseLeave: createCloseTimeout,
198
+ keepInView: keepInView,
199
+ placement: placement,
200
+ renderTo: renderTo,
201
+ children: title,
202
+ open: isPopoverOpen
203
+ }));
204
+ }
219
205
 
220
- return Tooltip;
221
- }(_react.Component);
222
-
223
- (0, _defineProperty2["default"])(Tooltip, "defaultProps", {
224
- openDelay: 500,
225
- closeDelay: 300,
226
- keepInView: true,
227
- triggerOnFocus: true,
228
- triggerOnHover: true,
229
- defaultOpen: false
230
- });
206
+ Tooltip = /*#__PURE__*/(0, _react.forwardRef)(Tooltip);
231
207
  var _default = Tooltip;
232
208
  exports["default"] = _default;