@clayui/tooltip 3.141.1-alpha.0 → 3.141.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.
@@ -1,134 +0,0 @@
1
- /**
2
- * SPDX-FileCopyrightText: © 2019 Liferay, Inc. <https://liferay.com>
3
- * SPDX-License-Identifier: BSD-3-Clause
4
- */
5
-
6
- import { useCallback, useRef } from 'react';
7
- function matches(element, selectorString) {
8
- if (element.matches) {
9
- return element.matches(selectorString);
10
- } else if (element.msMatchesSelector) {
11
- return element.msMatchesSelector(selectorString);
12
- } else if (element.webkitMatchesSelector) {
13
- return element.webkitMatchesSelector(selectorString);
14
- } else {
15
- return false;
16
- }
17
- }
18
- function closestAncestor(node, s) {
19
- const element = node;
20
- let ancestor = node;
21
- if (!document.documentElement.contains(element)) {
22
- return null;
23
- }
24
- do {
25
- if (matches(ancestor, s)) {
26
- return ancestor;
27
- }
28
- ancestor = ancestor.parentElement;
29
- } while (ancestor !== null);
30
- return null;
31
- }
32
- export function useClosestTitle(props) {
33
- const targetRef = useRef(null);
34
- const titleNodeRef = useRef(null);
35
- const saveTitle = useCallback(element => {
36
- const title = element.getAttribute('title');
37
- if (title) {
38
- element.setAttribute('data-restore-title', title);
39
- element.removeAttribute('title');
40
- } else if (element.tagName === 'svg') {
41
- const titleTag = element.querySelector('title');
42
- if (titleTag) {
43
- element.setAttribute('data-restore-title', titleTag.innerHTML);
44
- titleTag.remove();
45
- }
46
- }
47
- const hasParentTitle = element.closest('[title]');
48
- if (hasParentTitle) {
49
- saveTitle(hasParentTitle);
50
- }
51
- }, []);
52
- const restoreTitle = useCallback(element => {
53
- const title = element.getAttribute('data-restore-title');
54
- if (title) {
55
- if (element.tagName === 'svg') {
56
- const titleTag = document.createElement('title');
57
- titleTag.innerHTML = title;
58
- element.appendChild(titleTag);
59
- } else {
60
- element.setAttribute('title', title);
61
- }
62
- element.removeAttribute('data-restore-title');
63
- }
64
- const hasParentTitle = element.closest('[data-restore-title]');
65
- if (hasParentTitle) {
66
- restoreTitle(hasParentTitle);
67
- }
68
- }, []);
69
- const onClick = useCallback(event => {
70
- props.onClick();
71
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
72
- onHide(event);
73
- }, []);
74
- const onHide = useCallback(event => {
75
- if (event && !event.relatedTarget?.getAttribute('title') && (props.tooltipRef.current?.contains(event.relatedTarget) || targetRef.current?.contains(event.relatedTarget))) {
76
- return null;
77
- }
78
- props.onHide();
79
- if (titleNodeRef.current) {
80
- restoreTitle(titleNodeRef.current);
81
- titleNodeRef.current = null;
82
- }
83
- if (targetRef.current) {
84
- targetRef.current.removeEventListener('click', onClick);
85
- targetRef.current = null;
86
- }
87
- }, []);
88
- const forceHide = useCallback(() => {
89
- props.forceHide();
90
- if (titleNodeRef.current) {
91
- restoreTitle(titleNodeRef.current);
92
- titleNodeRef.current = null;
93
- }
94
- if (targetRef.current) {
95
- targetRef.current.removeEventListener('click', onClick);
96
- targetRef.current = null;
97
- }
98
- }, []);
99
- const getProps = useCallback((event, hideBrowserTitle) => {
100
- if (targetRef.current) {
101
- props.onClick();
102
- if (onHide(event) === null) {
103
- return;
104
- }
105
- }
106
- const target = event.target;
107
- const hasTitle = target && (target.hasAttribute('[title]') || target.hasAttribute('[data-title]'));
108
- const node = hasTitle ? target : closestAncestor(target, '[title], [data-title]');
109
- const hasNonEmptyTitle = node?.getAttribute('title') !== '';
110
- if (node && hasNonEmptyTitle) {
111
- targetRef.current = target;
112
- target.addEventListener('click', onClick);
113
- const title = node.getAttribute('title') || node.getAttribute('data-title') || '';
114
- titleNodeRef.current = node;
115
- if (hideBrowserTitle) {
116
- saveTitle(node);
117
- }
118
- return {
119
- align: node.getAttribute('data-tooltip-align'),
120
- delay: node.getAttribute('data-tooltip-delay'),
121
- floating: Boolean(node.getAttribute('data-tooltip-floating')),
122
- setAsHTML: !!node.getAttribute('data-title-set-as-html'),
123
- title
124
- };
125
- }
126
- }, []);
127
- return {
128
- forceHide,
129
- getProps,
130
- onHide,
131
- target: targetRef,
132
- titleNode: titleNodeRef
133
- };
134
- }
@@ -1,32 +0,0 @@
1
- /**
2
- * SPDX-FileCopyrightText: © 2019 Liferay, Inc. <https://liferay.com>
3
- * SPDX-License-Identifier: BSD-3-Clause
4
- */
5
-
6
- import { useCallback, useRef, useState } from 'react';
7
- export function useTooltipState(_ref) {
8
- let {
9
- delay = 600
10
- } = _ref;
11
- const [isOpen, setOpen] = useState(false);
12
- const timeoutIdRef = useRef();
13
- const open = useCallback((immediate, customDelay) => {
14
- if (!immediate) {
15
- clearTimeout(timeoutIdRef.current);
16
- timeoutIdRef.current = setTimeout(() => {
17
- setOpen(true);
18
- }, customDelay !== undefined ? customDelay : delay);
19
- } else {
20
- setOpen(true);
21
- }
22
- }, []);
23
- const close = useCallback(() => {
24
- clearTimeout(timeoutIdRef.current);
25
- setOpen(false);
26
- }, []);
27
- return {
28
- close,
29
- isOpen,
30
- open
31
- };
32
- }