New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@clayui/tooltip

Package Overview
Dependencies
Maintainers
15
Versions
100
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@clayui/tooltip - npm Package Compare versions

Comparing version

to
3.78.0

lib/useAlign.d.ts

343

lib/TooltipProvider.js

@@ -12,4 +12,2 @@ "use strict";

var _domAlign = require("dom-align");
var _react = _interopRequireWildcard(require("react"));

@@ -21,2 +19,8 @@

var _useAlign = require("./useAlign");
var _useClosestTitle2 = require("./useClosestTitle");
var _useTooltipState2 = require("./useTooltipState");
var _excluded = ["type"];

@@ -42,6 +46,2 @@

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; }
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; }
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; }

@@ -53,48 +53,11 @@

var ALIGNMENTS = ['top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left'];
var ALIGNMENTS_MAP = {
bottom: ['tc', 'bc'],
'bottom-left': ['tl', 'bl'],
'bottom-right': ['tr', 'br'],
left: ['cr', 'cl'],
right: ['cl', 'cr'],
top: ['bc', 'tc'],
'top-left': ['bl', 'tl'],
'top-right': ['br', 'tr']
};
var ALIGNMENTS_INVERSE_MAP = {
bctc: 'top',
bltl: 'top-left',
brtr: 'top-right',
clcr: 'right',
crcl: 'left',
tcbc: 'bottom',
tlbl: 'bottom-left',
trbr: 'bottom-right'
};
var BOTTOM_OFFSET = [0, 7];
var LEFT_OFFSET = [-7, 0];
var RIGHT_OFFSET = [7, 0];
var TOP_OFFSET = [0, -7];
var OFFSET_MAP = {
bctc: TOP_OFFSET,
bltl: TOP_OFFSET,
brtr: TOP_OFFSET,
clcr: RIGHT_OFFSET,
crcl: LEFT_OFFSET,
tcbc: BOTTOM_OFFSET,
tlbl: BOTTOM_OFFSET,
trbr: BOTTOM_OFFSET
};
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; }
var ALIGNMENTS_FORCE_MAP = _objectSpread(_objectSpread({}, ALIGNMENTS_INVERSE_MAP), {}, {
bctc: 'top-left',
tcbc: 'bottom-left'
});
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; }
var initialState = {
align: 'top',
floating: false,
message: '',
setAsHTML: false,
show: false
setAsHTML: false
};

@@ -109,15 +72,9 @@ var TRIGGER_HIDE_EVENTS = ['dragstart', 'mouseout', 'mouseup', 'pointerup', 'touchend'];

switch (type) {
case 'align':
case 'update':
return _objectSpread(_objectSpread({}, state), payload);
case 'show':
return _objectSpread(_objectSpread(_objectSpread({}, state), payload), {}, {
show: true
});
case 'hide':
case 'reset':
return _objectSpread(_objectSpread({}, state), {}, {
align: initialState.align,
floating: undefined,
show: false
floating: false
});

@@ -130,33 +87,2 @@

function matches(element, selectorString) {
if (element.matches) {
return element.matches(selectorString);
} else if (element.msMatchesSelector) {
return element.msMatchesSelector(selectorString);
} else if (element.webkitMatchesSelector) {
return element.webkitMatchesSelector(selectorString);
} else {
return false;
}
}
function closestAncestor(node, s) {
var element = node;
var ancestor = node;
if (!document.documentElement.contains(element)) {
return null;
}
do {
if (matches(ancestor, s)) {
return ancestor;
}
ancestor = ancestor.parentElement;
} while (ancestor !== null);
return null;
}
var TooltipProvider = function TooltipProvider(_ref2) {

@@ -184,99 +110,77 @@ var _ref2$autoAlign = _ref2.autoAlign,

setAsHTML = _useReducer2$.setAsHTML,
show = _useReducer2$.show,
dispatch = _useReducer2[1];
var mousePosition = (0, _shared.useMousePosition)(20); // Using `any` type since TS incorrectly infers setTimeout to be from NodeJS
var timeoutIdRef = (0, _react.useRef)();
var targetRef = (0, _react.useRef)(null);
var titleNodeRef = (0, _react.useRef)(null);
var tooltipRef = (0, _react.useRef)(null);
var saveTitle = (0, _react.useCallback)(function (element) {
titleNodeRef.current = element;
var title = element.getAttribute('title');
if (title) {
element.setAttribute('data-restore-title', title);
element.removeAttribute('title');
} else if (element.tagName === 'svg') {
var titleTag = element.querySelector('title');
var _useInteractionFocus = (0, _shared.useInteractionFocus)(),
getInteraction = _useInteractionFocus.getInteraction,
isFocusVisible = _useInteractionFocus.isFocusVisible;
if (titleTag) {
element.setAttribute('data-restore-title', titleTag.innerHTML);
titleTag.remove();
}
}
}, []);
var restoreTitle = (0, _react.useCallback)(function () {
var element = titleNodeRef.current;
var isHovered = (0, _react.useRef)(false);
var isFocused = (0, _react.useRef)(false);
if (element) {
var title = element.getAttribute('data-restore-title');
var _useTooltipState = (0, _useTooltipState2.useTooltipState)({
delay: delay
}),
close = _useTooltipState.close,
isOpen = _useTooltipState.isOpen,
open = _useTooltipState.open;
if (title) {
if (element.tagName === 'svg') {
var titleTag = document.createElement('title');
titleTag.innerHTML = title;
element.appendChild(titleTag);
} else {
element.setAttribute('title', title);
}
element.removeAttribute('data-restore-title');
var _useClosestTitle = (0, _useClosestTitle2.useClosestTitle)({
onClick: (0, _react.useCallback)(function () {
isFocused.current = false;
isHovered.current = false;
}, []),
onHide: (0, _react.useCallback)(function () {
if (!isHovered.current && !isFocused.current) {
dispatch({
type: 'reset'
});
close();
}
}, []),
tooltipRef: tooltipRef
}),
getProps = _useClosestTitle.getProps,
onHide = _useClosestTitle.onHide,
target = _useClosestTitle.target,
titleNode = _useClosestTitle.titleNode;
titleNodeRef.current = null;
}
}, []);
var handleHide = (0, _react.useCallback)(function (event) {
var _tooltipRef$current, _targetRef$current;
(0, _useAlign.useAlign)({
align: align,
autoAlign: autoAlign,
floating: floating,
isOpen: isOpen,
onAlign: (0, _react.useCallback)(function (align) {
return dispatch({
align: align,
type: 'update'
});
}, []),
sourceElement: tooltipRef,
targetElement: titleNode
});
var onShow = (0, _react.useCallback)(function (event) {
if (isHovered.current || isFocused.current) {
var _props = getProps(event);
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))) {
return;
}
if (_props) {
var _ref3;
dispatch({
type: 'hide'
});
clearTimeout(timeoutIdRef.current);
restoreTitle();
if (targetRef.current) {
targetRef.current.removeEventListener('click', handleHide);
targetRef.current = null;
}
}, []);
var handleShow = (0, _react.useCallback)(function (event) {
var target = event.target;
var hasTitle = target && (target.hasAttribute('title') || target.hasAttribute('data-title'));
var titleNode = hasTitle ? target : closestAncestor(target, '[title], [data-title]');
if (titleNode) {
targetRef.current = target;
target.addEventListener('click', handleHide);
var title = titleNode.getAttribute('title') || titleNode.getAttribute('data-title') || '';
saveTitle(titleNode);
var customDelay = titleNode.getAttribute('data-tooltip-delay');
var newAlign = titleNode.getAttribute('data-tooltip-align');
var _setAsHTML = !!titleNode.getAttribute('data-title-set-as-html');
var isFloating = titleNode.getAttribute('data-tooltip-floating');
clearTimeout(timeoutIdRef.current);
timeoutIdRef.current = setTimeout(function () {
dispatch({
align: newAlign || align,
floating: Boolean(isFloating),
message: title,
setAsHTML: _setAsHTML,
type: 'show'
align: (_ref3 = _props.align) !== null && _ref3 !== void 0 ? _ref3 : align,
floating: _props.floating,
message: _props.title,
setAsHTML: _props.setAsHTML,
type: 'update'
});
}, customDelay ? Number(customDelay) : delay);
open(isFocused.current, _props.delay ? Number(_props.delay) : undefined);
}
}
}, []);
}, [align]);
(0, _react.useEffect)(function () {
var handleEsc = function handleEsc(event) {
if (show && event.key === _shared.Keys.Esc) {
if (isOpen && event.key === _shared.Keys.Esc) {
event.stopImmediatePropagation();
handleHide();
onHide();
}

@@ -289,68 +193,57 @@ };

};
}, [show]);
}, [isOpen]);
var onHoverStart = function onHoverStart(event) {
if (getInteraction() === 'pointer') {
isHovered.current = true;
} else {
isHovered.current = false;
}
onShow(event);
};
var onHoverEnd = function onHoverEnd(event) {
isFocused.current = false;
isHovered.current = false;
onHide(event);
};
var onFocus = function onFocus(event) {
if (isFocusVisible()) {
isFocused.current = true;
onShow(event);
}
};
var onBlur = function onBlur(event) {
isFocused.current = false;
isHovered.current = false;
onHide(event);
};
(0, _react.useEffect)(function () {
if (scope) {
var disposeShowEvents = TRIGGER_SHOW_EVENTS.map(function (eventName) {
return (0, _shared.delegate)(document.body, eventName, scope, handleShow);
return (0, _shared.delegate)(document.body, eventName, scope, onHoverStart);
});
var disposeHideEvents = TRIGGER_HIDE_EVENTS.map(function (eventName) {
return (0, _shared.delegate)(document.body, eventName, "".concat(scope, ", .tooltip"), handleHide);
return (0, _shared.delegate)(document.body, eventName, "".concat(scope, ", .tooltip"), onHoverEnd);
});
var disposeShowFocus = (0, _shared.delegate)(document.body, 'focus', "".concat(scope, ", .tooltip"), onFocus, true);
var disposeCloseBlur = (0, _shared.delegate)(document.body, 'blur', "".concat(scope, ", .tooltip"), onBlur, true);
return function () {
disposeShowEvents.forEach(function (_ref3) {
var dispose = _ref3.dispose;
disposeShowEvents.forEach(function (_ref4) {
var dispose = _ref4.dispose;
return dispose();
});
disposeHideEvents.forEach(function (_ref4) {
var dispose = _ref4.dispose;
disposeHideEvents.forEach(function (_ref5) {
var dispose = _ref5.dispose;
return dispose();
});
disposeShowFocus.dispose();
disposeCloseBlur.dispose();
};
}
}, [handleShow]);
(0, _react.useEffect)(function () {
if (tooltipRef.current && show && floating) {
var points = ALIGNMENTS_MAP[align || 'top'];
var _mousePosition = _slicedToArray(mousePosition, 2),
clientX = _mousePosition[0],
clientY = _mousePosition[1];
(0, _domAlign.alignPoint)(tooltipRef.current, {
clientX: clientX,
clientY: clientY
}, {
offset: OFFSET_MAP[points.join('')],
points: points
});
}
}, [show, floating]);
(0, _react.useEffect)(function () {
if (titleNodeRef.current && tooltipRef.current && !floating) {
var points = ALIGNMENTS_MAP[align || 'top'];
var alignment = (0, _shared.doAlign)({
overflow: {
adjustX: autoAlign,
adjustY: autoAlign
},
points: points,
sourceElement: tooltipRef.current,
targetElement: titleNodeRef.current
});
var alignmentString = alignment.points.join('');
var pointsString = points.join('');
if (alignment.overflow.adjustX) {
dispatch({
align: ALIGNMENTS_FORCE_MAP[alignmentString],
type: 'align'
});
} else if (pointsString !== alignmentString) {
dispatch({
align: ALIGNMENTS_INVERSE_MAP[alignmentString],
type: 'align'
});
}
}
}, [align, show]);
}, [onShow]);
"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;

@@ -360,7 +253,7 @@ "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;

var titleContent = contentRenderer({
targetNode: targetRef.current,
targetNode: target.current,
title: message
});
var tooltip = show && /*#__PURE__*/_react.default.createElement(_shared.ClayPortal, containerProps, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
var tooltip = isOpen && /*#__PURE__*/_react.default.createElement(_shared.ClayPortal, containerProps, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
alignPosition: align,

@@ -377,4 +270,6 @@ ref: tooltipRef,

children: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children.props.children, tooltip),
onMouseOut: handleHide,
onMouseOver: handleShow
onBlur: onBlur,
onFocus: onFocus,
onMouseOut: onHoverEnd,
onMouseOver: onHoverStart
})));

@@ -381,0 +276,0 @@ };

{
"name": "@clayui/tooltip",
"version": "3.77.0",
"version": "3.78.0",
"description": "ClayTooltip component",

@@ -29,3 +29,3 @@ "license": "BSD-3-Clause",

"dependencies": {
"@clayui/shared": "^3.77.0",
"@clayui/shared": "^3.78.0",
"classnames": "^2.2.6",

@@ -43,3 +43,3 @@ "dom-align": "^1.12.2",

],
"gitHead": "edd3cfe3a397c48057632f76945b2ae9be1bfa58"
"gitHead": "128788059d168c956b392363054933db34c67cab"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet