@clayui/tooltip 3.77.0 → 3.78.1

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.
@@ -9,14 +9,18 @@ exports.default = void 0;
9
9
 
10
10
  var _shared = require("@clayui/shared");
11
11
 
12
- var _domAlign = require("dom-align");
13
-
14
12
  var _react = _interopRequireWildcard(require("react"));
15
13
 
16
14
  var _warning = _interopRequireDefault(require("warning"));
17
15
 
18
16
  var _Tooltip = _interopRequireDefault(require("./Tooltip"));
19
17
 
18
+ var _useAlign = require("./useAlign");
19
+
20
+ var _useClosestTitle2 = require("./useClosestTitle");
21
+
22
+ var _useTooltipState2 = require("./useTooltipState");
23
+
20
24
  var _excluded = ["type"];
21
25
 
22
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -37,62 +41,21 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
37
41
 
38
42
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
39
43
 
40
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
41
-
42
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
43
-
44
44
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
45
45
 
46
46
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
47
47
 
48
48
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
49
49
 
50
- var ALIGNMENTS = ['top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left'];
51
- var ALIGNMENTS_MAP = {
52
- bottom: ['tc', 'bc'],
53
- 'bottom-left': ['tl', 'bl'],
54
- 'bottom-right': ['tr', 'br'],
55
- left: ['cr', 'cl'],
56
- right: ['cl', 'cr'],
57
- top: ['bc', 'tc'],
58
- 'top-left': ['bl', 'tl'],
59
- 'top-right': ['br', 'tr']
60
- };
61
- var ALIGNMENTS_INVERSE_MAP = {
62
- bctc: 'top',
63
- bltl: 'top-left',
64
- brtr: 'top-right',
65
- clcr: 'right',
66
- crcl: 'left',
67
- tcbc: 'bottom',
68
- tlbl: 'bottom-left',
69
- trbr: 'bottom-right'
70
- };
71
- var BOTTOM_OFFSET = [0, 7];
72
- var LEFT_OFFSET = [-7, 0];
73
- var RIGHT_OFFSET = [7, 0];
74
- var TOP_OFFSET = [0, -7];
75
- var OFFSET_MAP = {
76
- bctc: TOP_OFFSET,
77
- bltl: TOP_OFFSET,
78
- brtr: TOP_OFFSET,
79
- clcr: RIGHT_OFFSET,
80
- crcl: LEFT_OFFSET,
81
- tcbc: BOTTOM_OFFSET,
82
- tlbl: BOTTOM_OFFSET,
83
- trbr: BOTTOM_OFFSET
84
- };
50
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
85
51
 
86
- var ALIGNMENTS_FORCE_MAP = _objectSpread(_objectSpread({}, ALIGNMENTS_INVERSE_MAP), {}, {
87
- bctc: 'top-left',
88
- tcbc: 'bottom-left'
89
- });
52
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
90
53
 
91
54
  var initialState = {
92
55
  align: 'top',
56
+ floating: false,
93
57
  message: '',
94
- setAsHTML: false,
95
- show: false
58
+ setAsHTML: false
96
59
  };
97
60
  var TRIGGER_HIDE_EVENTS = ['dragstart', 'mouseout', 'mouseup', 'pointerup', 'touchend'];
98
61
  var TRIGGER_SHOW_EVENTS = ['mouseover', 'mouseup', 'pointerdown', 'touchstart'];
@@ -102,19 +65,13 @@ var reducer = function reducer(state, _ref) {
102
65
  payload = _objectWithoutProperties(_ref, _excluded);
103
66
 
104
67
  switch (type) {
105
- case 'align':
68
+ case 'update':
106
69
  return _objectSpread(_objectSpread({}, state), payload);
107
70
 
108
- case 'show':
109
- return _objectSpread(_objectSpread(_objectSpread({}, state), payload), {}, {
110
- show: true
111
- });
112
-
113
- case 'hide':
71
+ case 'reset':
114
72
  return _objectSpread(_objectSpread({}, state), {}, {
115
73
  align: initialState.align,
116
- floating: undefined,
117
- show: false
74
+ floating: false
118
75
  });
119
76
 
120
77
  default:
@@ -122,37 +79,6 @@ var reducer = function reducer(state, _ref) {
122
79
  }
123
80
  };
124
81
 
125
- function matches(element, selectorString) {
126
- if (element.matches) {
127
- return element.matches(selectorString);
128
- } else if (element.msMatchesSelector) {
129
- return element.msMatchesSelector(selectorString);
130
- } else if (element.webkitMatchesSelector) {
131
- return element.webkitMatchesSelector(selectorString);
132
- } else {
133
- return false;
134
- }
135
- }
136
-
137
- function closestAncestor(node, s) {
138
- var element = node;
139
- var ancestor = node;
140
-
141
- if (!document.documentElement.contains(element)) {
142
- return null;
143
- }
144
-
145
- do {
146
- if (matches(ancestor, s)) {
147
- return ancestor;
148
- }
149
-
150
- ancestor = ancestor.parentElement;
151
- } while (ancestor !== null);
152
-
153
- return null;
154
- }
155
-
156
82
  var TooltipProvider = function TooltipProvider(_ref2) {
157
83
  var _ref2$autoAlign = _ref2.autoAlign,
158
84
  autoAlign = _ref2$autoAlign === void 0 ? true : _ref2$autoAlign,
@@ -175,103 +101,81 @@ var TooltipProvider = function TooltipProvider(_ref2) {
175
101
  _useReducer2$$message = _useReducer2$.message,
176
102
  message = _useReducer2$$message === void 0 ? '' : _useReducer2$$message,
177
103
  setAsHTML = _useReducer2$.setAsHTML,
178
- show = _useReducer2$.show,
179
104
  dispatch = _useReducer2[1];
180
105
 
181
- var mousePosition = (0, _shared.useMousePosition)(20); // Using `any` type since TS incorrectly infers setTimeout to be from NodeJS
182
-
183
- var timeoutIdRef = (0, _react.useRef)();
184
- var targetRef = (0, _react.useRef)(null);
185
- var titleNodeRef = (0, _react.useRef)(null);
186
106
  var tooltipRef = (0, _react.useRef)(null);
187
- var saveTitle = (0, _react.useCallback)(function (element) {
188
- titleNodeRef.current = element;
189
- var title = element.getAttribute('title');
190
-
191
- if (title) {
192
- element.setAttribute('data-restore-title', title);
193
- element.removeAttribute('title');
194
- } else if (element.tagName === 'svg') {
195
- var titleTag = element.querySelector('title');
196
-
197
- if (titleTag) {
198
- element.setAttribute('data-restore-title', titleTag.innerHTML);
199
- titleTag.remove();
200
- }
201
- }
202
- }, []);
203
- var restoreTitle = (0, _react.useCallback)(function () {
204
- var element = titleNodeRef.current;
205
-
206
- if (element) {
207
- var title = element.getAttribute('data-restore-title');
208
-
209
- if (title) {
210
- if (element.tagName === 'svg') {
211
- var titleTag = document.createElement('title');
212
- titleTag.innerHTML = title;
213
- element.appendChild(titleTag);
214
- } else {
215
- element.setAttribute('title', title);
216
- }
217
-
218
- element.removeAttribute('data-restore-title');
219
- }
220
-
221
- titleNodeRef.current = null;
222
- }
223
- }, []);
224
- var handleHide = (0, _react.useCallback)(function (event) {
225
- var _tooltipRef$current, _targetRef$current;
226
107
 
227
- if (event && ((_tooltipRef$current = tooltipRef.current) !== null && _tooltipRef$current !== void 0 && _tooltipRef$current.contains(event.relatedTarget) || (_targetRef$current = targetRef.current) !== null && _targetRef$current !== void 0 && _targetRef$current.contains(event.relatedTarget))) {
228
- return;
229
- }
108
+ var _useInteractionFocus = (0, _shared.useInteractionFocus)(),
109
+ getInteraction = _useInteractionFocus.getInteraction,
110
+ isFocusVisible = _useInteractionFocus.isFocusVisible;
111
+
112
+ var isHovered = (0, _react.useRef)(false);
113
+ var isFocused = (0, _react.useRef)(false);
114
+
115
+ var _useTooltipState = (0, _useTooltipState2.useTooltipState)({
116
+ delay: delay
117
+ }),
118
+ close = _useTooltipState.close,
119
+ isOpen = _useTooltipState.isOpen,
120
+ open = _useTooltipState.open;
121
+
122
+ var _useClosestTitle = (0, _useClosestTitle2.useClosestTitle)({
123
+ onClick: (0, _react.useCallback)(function () {
124
+ isFocused.current = false;
125
+ isHovered.current = false;
126
+ }, []),
127
+ onHide: (0, _react.useCallback)(function () {
128
+ if (!isHovered.current && !isFocused.current) {
129
+ dispatch({
130
+ type: 'reset'
131
+ });
132
+ close();
133
+ }
134
+ }, []),
135
+ tooltipRef: tooltipRef
136
+ }),
137
+ getProps = _useClosestTitle.getProps,
138
+ onHide = _useClosestTitle.onHide,
139
+ target = _useClosestTitle.target,
140
+ titleNode = _useClosestTitle.titleNode;
141
+
142
+ (0, _useAlign.useAlign)({
143
+ align: align,
144
+ autoAlign: autoAlign,
145
+ floating: floating,
146
+ isOpen: isOpen,
147
+ onAlign: (0, _react.useCallback)(function (align) {
148
+ return dispatch({
149
+ align: align,
150
+ type: 'update'
151
+ });
152
+ }, []),
153
+ sourceElement: tooltipRef,
154
+ targetElement: titleNode
155
+ });
156
+ var onShow = (0, _react.useCallback)(function (event) {
157
+ if (isHovered.current || isFocused.current) {
158
+ var _props = getProps(event);
230
159
 
231
- dispatch({
232
- type: 'hide'
233
- });
234
- clearTimeout(timeoutIdRef.current);
235
- restoreTitle();
160
+ if (_props) {
161
+ var _ref3;
236
162
 
237
- if (targetRef.current) {
238
- targetRef.current.removeEventListener('click', handleHide);
239
- targetRef.current = null;
240
- }
241
- }, []);
242
- var handleShow = (0, _react.useCallback)(function (event) {
243
- var target = event.target;
244
- var hasTitle = target && (target.hasAttribute('title') || target.hasAttribute('data-title'));
245
- var titleNode = hasTitle ? target : closestAncestor(target, '[title], [data-title]');
246
-
247
- if (titleNode) {
248
- targetRef.current = target;
249
- target.addEventListener('click', handleHide);
250
- var title = titleNode.getAttribute('title') || titleNode.getAttribute('data-title') || '';
251
- saveTitle(titleNode);
252
- var customDelay = titleNode.getAttribute('data-tooltip-delay');
253
- var newAlign = titleNode.getAttribute('data-tooltip-align');
254
-
255
- var _setAsHTML = !!titleNode.getAttribute('data-title-set-as-html');
256
-
257
- var isFloating = titleNode.getAttribute('data-tooltip-floating');
258
- clearTimeout(timeoutIdRef.current);
259
- timeoutIdRef.current = setTimeout(function () {
260
163
  dispatch({
261
- align: newAlign || align,
262
- floating: Boolean(isFloating),
263
- message: title,
264
- setAsHTML: _setAsHTML,
265
- type: 'show'
164
+ align: (_ref3 = _props.align) !== null && _ref3 !== void 0 ? _ref3 : align,
165
+ floating: _props.floating,
166
+ message: _props.title,
167
+ setAsHTML: _props.setAsHTML,
168
+ type: 'update'
266
169
  });
267
- }, customDelay ? Number(customDelay) : delay);
170
+ open(isFocused.current, _props.delay ? Number(_props.delay) : undefined);
171
+ }
268
172
  }
269
- }, []);
173
+ }, [align]);
270
174
  (0, _react.useEffect)(function () {
271
175
  var handleEsc = function handleEsc(event) {
272
- if (show && event.key === _shared.Keys.Esc) {
176
+ if (isOpen && event.key === _shared.Keys.Esc) {
273
177
  event.stopImmediatePropagation();
274
- handleHide();
178
+ onHide();
275
179
  }
276
180
  };
277
181
 
@@ -279,81 +183,70 @@ var TooltipProvider = function TooltipProvider(_ref2) {
279
183
  return function () {
280
184
  return document.removeEventListener('keyup', handleEsc, true);
281
185
  };
282
- }, [show]);
186
+ }, [isOpen]);
187
+
188
+ var onHoverStart = function onHoverStart(event) {
189
+ if (getInteraction() === 'pointer') {
190
+ isHovered.current = true;
191
+ } else {
192
+ isHovered.current = false;
193
+ }
194
+
195
+ onShow(event);
196
+ };
197
+
198
+ var onHoverEnd = function onHoverEnd(event) {
199
+ isFocused.current = false;
200
+ isHovered.current = false;
201
+ onHide(event);
202
+ };
203
+
204
+ var onFocus = function onFocus(event) {
205
+ if (isFocusVisible()) {
206
+ isFocused.current = true;
207
+ onShow(event);
208
+ }
209
+ };
210
+
211
+ var onBlur = function onBlur(event) {
212
+ isFocused.current = false;
213
+ isHovered.current = false;
214
+ onHide(event);
215
+ };
216
+
283
217
  (0, _react.useEffect)(function () {
284
218
  if (scope) {
285
219
  var disposeShowEvents = TRIGGER_SHOW_EVENTS.map(function (eventName) {
286
- return (0, _shared.delegate)(document.body, eventName, scope, handleShow);
220
+ return (0, _shared.delegate)(document.body, eventName, scope, onHoverStart);
287
221
  });
288
222
  var disposeHideEvents = TRIGGER_HIDE_EVENTS.map(function (eventName) {
289
- return (0, _shared.delegate)(document.body, eventName, "".concat(scope, ", .tooltip"), handleHide);
223
+ return (0, _shared.delegate)(document.body, eventName, "".concat(scope, ", .tooltip"), onHoverEnd);
290
224
  });
225
+ var disposeShowFocus = (0, _shared.delegate)(document.body, 'focus', "".concat(scope, ", .tooltip"), onFocus, true);
226
+ var disposeCloseBlur = (0, _shared.delegate)(document.body, 'blur', "".concat(scope, ", .tooltip"), onBlur, true);
291
227
  return function () {
292
- disposeShowEvents.forEach(function (_ref3) {
293
- var dispose = _ref3.dispose;
228
+ disposeShowEvents.forEach(function (_ref4) {
229
+ var dispose = _ref4.dispose;
294
230
  return dispose();
295
231
  });
296
- disposeHideEvents.forEach(function (_ref4) {
297
- var dispose = _ref4.dispose;
232
+ disposeHideEvents.forEach(function (_ref5) {
233
+ var dispose = _ref5.dispose;
298
234
  return dispose();
299
235
  });
236
+ disposeShowFocus.dispose();
237
+ disposeCloseBlur.dispose();
300
238
  };
301
239
  }
302
- }, [handleShow]);
303
- (0, _react.useEffect)(function () {
304
- if (tooltipRef.current && show && floating) {
305
- var points = ALIGNMENTS_MAP[align || 'top'];
306
-
307
- var _mousePosition = _slicedToArray(mousePosition, 2),
308
- clientX = _mousePosition[0],
309
- clientY = _mousePosition[1];
310
-
311
- (0, _domAlign.alignPoint)(tooltipRef.current, {
312
- clientX: clientX,
313
- clientY: clientY
314
- }, {
315
- offset: OFFSET_MAP[points.join('')],
316
- points: points
317
- });
318
- }
319
- }, [show, floating]);
320
- (0, _react.useEffect)(function () {
321
- if (titleNodeRef.current && tooltipRef.current && !floating) {
322
- var points = ALIGNMENTS_MAP[align || 'top'];
323
- var alignment = (0, _shared.doAlign)({
324
- overflow: {
325
- adjustX: autoAlign,
326
- adjustY: autoAlign
327
- },
328
- points: points,
329
- sourceElement: tooltipRef.current,
330
- targetElement: titleNodeRef.current
331
- });
332
- var alignmentString = alignment.points.join('');
333
- var pointsString = points.join('');
334
-
335
- if (alignment.overflow.adjustX) {
336
- dispatch({
337
- align: ALIGNMENTS_FORCE_MAP[alignmentString],
338
- type: 'align'
339
- });
340
- } else if (pointsString !== alignmentString) {
341
- dispatch({
342
- align: ALIGNMENTS_INVERSE_MAP[alignmentString],
343
- type: 'align'
344
- });
345
- }
346
- }
347
- }, [align, show]);
240
+ }, [onShow]);
348
241
  "production" !== "production" ? (0, _warning.default)(typeof children === 'undefined' && typeof scope !== 'undefined' || typeof scope === 'undefined' && typeof children !== 'undefined', '<TooltipProvider />: You must use at least one of the following props: `children` or `scope`.') : void 0;
349
242
  "production" !== "production" ? (0, _warning.default)(typeof children !== 'undefined' || typeof scope !== 'undefined', '<TooltipProvider />: If you want to use `scope`, use <TooltipProvider /> as a singleton and do not pass `children`.') : void 0;
350
243
  "production" !== "production" ? (0, _warning.default)((children === null || children === void 0 ? void 0 : children.type) !== _react.default.Fragment, '<TooltipProvider />: React Fragment is not allowed as a child to TooltipProvider. Child must be a single HTML element that accepts `onMouseOver` and `onMouseOut`.') : void 0;
351
244
  var titleContent = contentRenderer({
352
- targetNode: targetRef.current,
245
+ targetNode: target.current,
353
246
  title: message
354
247
  });
355
248
 
356
- var tooltip = show && /*#__PURE__*/_react.default.createElement(_shared.ClayPortal, containerProps, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
249
+ var tooltip = isOpen && /*#__PURE__*/_react.default.createElement(_shared.ClayPortal, containerProps, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
357
250
  alignPosition: align,
358
251
  ref: tooltipRef,
359
252
  show: true
@@ -365,8 +258,10 @@ var TooltipProvider = function TooltipProvider(_ref2) {
365
258
 
366
259
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, scope ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, tooltip, children) : children && /*#__PURE__*/_react.default.cloneElement(children, _objectSpread(_objectSpread({}, children.props), {}, {
367
260
  children: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children.props.children, tooltip),
368
- onMouseOut: handleHide,
369
- onMouseOver: handleShow
261
+ onBlur: onBlur,
262
+ onFocus: onFocus,
263
+ onMouseOut: onHoverEnd,
264
+ onMouseOver: onHoverStart
370
265
  })));
371
266
  };
372
267
 
@@ -0,0 +1,18 @@
1
+ /**
2
+ * SPDX-FileCopyrightText: © 2019 Liferay, Inc. <https://liferay.com>
3
+ * SPDX-License-Identifier: BSD-3-Clause
4
+ */
5
+ import React from 'react';
6
+ declare const ALIGNMENTS: readonly ["top", "top-right", "right", "bottom-right", "bottom", "bottom-left", "left", "top-left"];
7
+ export declare type Align = typeof ALIGNMENTS[number];
8
+ declare type Props = {
9
+ align: Align;
10
+ autoAlign: boolean;
11
+ floating: boolean;
12
+ isOpen: boolean;
13
+ onAlign: (align: Align) => void;
14
+ sourceElement: React.MutableRefObject<HTMLElement | null>;
15
+ targetElement: React.MutableRefObject<HTMLElement | null>;
16
+ };
17
+ export declare function useAlign({ align, autoAlign, floating, isOpen, onAlign, sourceElement, targetElement, }: Props): void;
18
+ export {};
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useAlign = useAlign;
7
+
8
+ var _shared = require("@clayui/shared");
9
+
10
+ var _domAlign = require("dom-align");
11
+
12
+ var _react = require("react");
13
+
14
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
15
+
16
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
17
+
18
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
+
20
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
21
+
22
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
23
+
24
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
25
+
26
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
27
+
28
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
29
+
30
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
31
+
32
+ var ALIGNMENTS = ['top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left'];
33
+ var ALIGNMENTS_MAP = {
34
+ bottom: ['tc', 'bc'],
35
+ 'bottom-left': ['tl', 'bl'],
36
+ 'bottom-right': ['tr', 'br'],
37
+ left: ['cr', 'cl'],
38
+ right: ['cl', 'cr'],
39
+ top: ['bc', 'tc'],
40
+ 'top-left': ['bl', 'tl'],
41
+ 'top-right': ['br', 'tr']
42
+ };
43
+ var ALIGNMENTS_INVERSE_MAP = {
44
+ bctc: 'top',
45
+ bltl: 'top-left',
46
+ brtr: 'top-right',
47
+ clcr: 'right',
48
+ crcl: 'left',
49
+ tcbc: 'bottom',
50
+ tlbl: 'bottom-left',
51
+ trbr: 'bottom-right'
52
+ };
53
+ var BOTTOM_OFFSET = [0, 7];
54
+ var LEFT_OFFSET = [-7, 0];
55
+ var RIGHT_OFFSET = [7, 0];
56
+ var TOP_OFFSET = [0, -7];
57
+ var OFFSET_MAP = {
58
+ bctc: TOP_OFFSET,
59
+ bltl: TOP_OFFSET,
60
+ brtr: TOP_OFFSET,
61
+ clcr: RIGHT_OFFSET,
62
+ crcl: LEFT_OFFSET,
63
+ tcbc: BOTTOM_OFFSET,
64
+ tlbl: BOTTOM_OFFSET,
65
+ trbr: BOTTOM_OFFSET
66
+ };
67
+
68
+ var ALIGNMENTS_FORCE_MAP = _objectSpread(_objectSpread({}, ALIGNMENTS_INVERSE_MAP), {}, {
69
+ bctc: 'top-left',
70
+ tcbc: 'bottom-left'
71
+ });
72
+
73
+ function useAlign(_ref) {
74
+ var align = _ref.align,
75
+ autoAlign = _ref.autoAlign,
76
+ floating = _ref.floating,
77
+ isOpen = _ref.isOpen,
78
+ onAlign = _ref.onAlign,
79
+ sourceElement = _ref.sourceElement,
80
+ targetElement = _ref.targetElement;
81
+ var mousePosition = (0, _shared.useMousePosition)(20);
82
+ (0, _react.useEffect)(function () {
83
+ if (sourceElement.current && isOpen && floating) {
84
+ var points = ALIGNMENTS_MAP[align || 'top'];
85
+
86
+ var _mousePosition = _slicedToArray(mousePosition, 2),
87
+ clientX = _mousePosition[0],
88
+ clientY = _mousePosition[1];
89
+
90
+ (0, _domAlign.alignPoint)(sourceElement.current, {
91
+ clientX: clientX,
92
+ clientY: clientY
93
+ }, {
94
+ offset: OFFSET_MAP[points.join('')],
95
+ points: points
96
+ });
97
+ }
98
+ }, [isOpen, floating]);
99
+ (0, _react.useEffect)(function () {
100
+ if (targetElement.current && sourceElement.current && !floating) {
101
+ var points = ALIGNMENTS_MAP[align || 'top'];
102
+ var alignment = (0, _shared.doAlign)({
103
+ overflow: {
104
+ adjustX: autoAlign,
105
+ adjustY: autoAlign
106
+ },
107
+ points: points,
108
+ sourceElement: sourceElement.current,
109
+ targetElement: targetElement.current
110
+ });
111
+ var alignmentString = alignment.points.join('');
112
+ var pointsString = points.join('');
113
+
114
+ if (alignment.overflow.adjustX) {
115
+ onAlign(ALIGNMENTS_FORCE_MAP[alignmentString]);
116
+ } else if (pointsString !== alignmentString) {
117
+ onAlign(ALIGNMENTS_INVERSE_MAP[alignmentString]);
118
+ }
119
+ }
120
+ }, [align, isOpen]);
121
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * SPDX-FileCopyrightText: © 2019 Liferay, Inc. <https://liferay.com>
3
+ * SPDX-License-Identifier: BSD-3-Clause
4
+ */
5
+ import React from 'react';
6
+ declare type Props = {
7
+ onHide: () => void;
8
+ onClick: () => void;
9
+ tooltipRef: React.MutableRefObject<HTMLElement | null>;
10
+ };
11
+ export declare function useClosestTitle(props: Props): {
12
+ getProps: (event: React.MouseEvent<HTMLElement, MouseEvent>) => {
13
+ align: string | null;
14
+ delay: string | null;
15
+ floating: boolean;
16
+ setAsHTML: boolean;
17
+ title: string;
18
+ } | undefined;
19
+ onHide: (event?: any) => null | undefined;
20
+ target: React.MutableRefObject<HTMLElement | null>;
21
+ titleNode: React.MutableRefObject<HTMLElement | null>;
22
+ };
23
+ export {};