@coinbase/cds-web 8.45.0 → 8.46.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.
- package/CHANGELOG.md +6 -0
- package/dts/overlays/tooltip/Tooltip.d.ts +2 -0
- package/dts/overlays/tooltip/Tooltip.d.ts.map +1 -1
- package/dts/overlays/tooltip/TooltipProps.d.ts +10 -0
- package/dts/overlays/tooltip/TooltipProps.d.ts.map +1 -1
- package/dts/overlays/tooltip/useTooltipState.d.ts +5 -1
- package/dts/overlays/tooltip/useTooltipState.d.ts.map +1 -1
- package/esm/overlays/tooltip/Tooltip.js +4 -2
- package/esm/overlays/tooltip/useTooltipState.js +48 -6
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,12 @@ All notable changes to this project will be documented in this file.
|
|
|
8
8
|
|
|
9
9
|
<!-- template-start -->
|
|
10
10
|
|
|
11
|
+
## 8.46.0 (2/12/2026 PST)
|
|
12
|
+
|
|
13
|
+
#### 🚀 Updates
|
|
14
|
+
|
|
15
|
+
- Add open/close visibility delays to Tooltip. [[#234](https://github.com/coinbase/cds/pull/234)]
|
|
16
|
+
|
|
11
17
|
## 8.45.0 (2/12/2026 PST)
|
|
12
18
|
|
|
13
19
|
#### 🚀 Updates
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/overlays/tooltip/Tooltip.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQnD,eAAO,MAAM,OAAO,GAAI,
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/overlays/tooltip/Tooltip.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQnD,eAAO,MAAM,OAAO,GAAI,wRAoBrB,YAAY,4CAiEd,CAAC"}
|
|
@@ -27,6 +27,16 @@ export type TooltipBaseProps = SharedProps &
|
|
|
27
27
|
* @default true
|
|
28
28
|
*/
|
|
29
29
|
visible?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Delay (in ms) before showing the tooltip on pointer hover.
|
|
32
|
+
* Keyboard focus still opens immediately for accessibility.
|
|
33
|
+
*/
|
|
34
|
+
openDelay?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Delay (in ms) before hiding the tooltip after pointer leave.
|
|
37
|
+
* Keyboard blur still closes immediately.
|
|
38
|
+
*/
|
|
39
|
+
closeDelay?: number;
|
|
30
40
|
/** Invert the theme's activeColorScheme for this component
|
|
31
41
|
* @default true
|
|
32
42
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TooltipProps.d.ts","sourceRoot":"","sources":["../../../src/overlays/tooltip/TooltipProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,WAAW,GACxC,cAAc,GACd,IAAI,CACF,YAAY,EACV,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,GAClB,yBAAyB,GACzB,uBAAuB,GACvB,gBAAgB,CACnB,GAAG;IACF,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;IAC7B,gDAAgD;IAChD,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;OAIG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sDAAsD;IACtD,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;SAGK;IACL,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEJ,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"TooltipProps.d.ts","sourceRoot":"","sources":["../../../src/overlays/tooltip/TooltipProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,WAAW,GACxC,cAAc,GACd,IAAI,CACF,YAAY,EACV,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,GAClB,yBAAyB,GACzB,uBAAuB,GACvB,gBAAgB,CACnB,GAAG;IACF,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;IAC7B,gDAAgD;IAChD,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;OAIG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sDAAsD;IACtD,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;SAGK;IACL,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEJ,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTooltipState.d.ts","sourceRoot":"","sources":["../../../src/overlays/tooltip/useTooltipState.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM;;;;;;;
|
|
1
|
+
{"version":3,"file":"useTooltipState.d.ts","sourceRoot":"","sources":["../../../src/overlays/tooltip/useTooltipState.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,YAAY,MAAM,EAAE,aAAa,MAAM;;;;;;;CAsFnF,CAAC"}
|
|
@@ -25,7 +25,9 @@ export const Tooltip = _ref => {
|
|
|
25
25
|
disableTypeFocus,
|
|
26
26
|
focusTabIndexElements,
|
|
27
27
|
respectNegativeTabIndex,
|
|
28
|
-
autoFocusDelay = 20
|
|
28
|
+
autoFocusDelay = 20,
|
|
29
|
+
openDelay,
|
|
30
|
+
closeDelay
|
|
29
31
|
} = _ref;
|
|
30
32
|
const {
|
|
31
33
|
isOpen,
|
|
@@ -34,7 +36,7 @@ export const Tooltip = _ref => {
|
|
|
34
36
|
handleOnFocus,
|
|
35
37
|
handleOnBlur,
|
|
36
38
|
tooltipId
|
|
37
|
-
} = useTooltipState(tooltipIdDefault);
|
|
39
|
+
} = useTooltipState(tooltipIdDefault, openDelay, closeDelay);
|
|
38
40
|
const tooltipContentRef = useRef(null);
|
|
39
41
|
const handleMouseEnter = useCallback(_ref2 => {
|
|
40
42
|
let {
|
|
@@ -1,19 +1,61 @@
|
|
|
1
|
-
import { useCallback, useMemo, useState } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import { usePrefixedId } from '@coinbase/cds-common/hooks/usePrefixedId';
|
|
3
|
-
export const useTooltipState = id => {
|
|
3
|
+
export const useTooltipState = (id, openDelay, closeDelay) => {
|
|
4
4
|
const [isHovered, setIsHovered] = useState(false);
|
|
5
5
|
const [isFocused, setIsFocused] = useState(false);
|
|
6
6
|
const tooltipId = usePrefixedId(id);
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
7
|
+
const openTimeoutRef = useRef(null);
|
|
8
|
+
const closeTimeoutRef = useRef(null);
|
|
9
|
+
const clearOpenTimeout = useCallback(() => {
|
|
10
|
+
if (openTimeoutRef.current) {
|
|
11
|
+
clearTimeout(openTimeoutRef.current);
|
|
12
|
+
openTimeoutRef.current = null;
|
|
13
|
+
}
|
|
14
|
+
}, []);
|
|
15
|
+
const clearCloseTimeout = useCallback(() => {
|
|
16
|
+
if (closeTimeoutRef.current) {
|
|
17
|
+
clearTimeout(closeTimeoutRef.current);
|
|
18
|
+
closeTimeoutRef.current = null;
|
|
19
|
+
}
|
|
20
|
+
}, []);
|
|
21
|
+
const handleOnMouseEnter = useCallback(() => {
|
|
22
|
+
clearCloseTimeout();
|
|
23
|
+
if (openDelay && openDelay > 0) {
|
|
24
|
+
openTimeoutRef.current = setTimeout(() => setIsHovered(true), openDelay);
|
|
25
|
+
} else {
|
|
26
|
+
setIsHovered(true);
|
|
27
|
+
}
|
|
28
|
+
}, [clearCloseTimeout, openDelay]);
|
|
29
|
+
const toggleOffIsHovered = useCallback(() => {
|
|
30
|
+
clearOpenTimeout();
|
|
31
|
+
if (closeDelay && closeDelay > 0) {
|
|
32
|
+
closeTimeoutRef.current = setTimeout(() => setIsHovered(false), closeDelay);
|
|
33
|
+
} else {
|
|
34
|
+
setIsHovered(false);
|
|
35
|
+
}
|
|
36
|
+
}, [clearOpenTimeout, closeDelay]);
|
|
37
|
+
const handleOnFocus = useCallback(() => {
|
|
38
|
+
clearCloseTimeout();
|
|
39
|
+
clearOpenTimeout();
|
|
40
|
+
setIsFocused(true);
|
|
41
|
+
}, [clearCloseTimeout, clearOpenTimeout]);
|
|
42
|
+
const toggleOffIsFocused = useCallback(() => {
|
|
43
|
+
clearOpenTimeout();
|
|
44
|
+
clearCloseTimeout();
|
|
45
|
+
setIsFocused(false);
|
|
46
|
+
}, [clearCloseTimeout, clearOpenTimeout]);
|
|
11
47
|
const handleOnBlur = useCallback(() => {
|
|
12
48
|
toggleOffIsFocused();
|
|
13
49
|
}, [toggleOffIsFocused]);
|
|
14
50
|
const handleOnMouseLeave = useCallback(() => {
|
|
15
51
|
toggleOffIsHovered();
|
|
16
52
|
}, [toggleOffIsHovered]);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
return () => {
|
|
55
|
+
clearOpenTimeout();
|
|
56
|
+
clearCloseTimeout();
|
|
57
|
+
};
|
|
58
|
+
}, [clearCloseTimeout, clearOpenTimeout]);
|
|
17
59
|
return useMemo(() => {
|
|
18
60
|
return {
|
|
19
61
|
isOpen: isHovered || isFocused,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coinbase/cds-web",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.46.0",
|
|
4
4
|
"description": "Coinbase Design System - Web",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
"react-dom": "^18.3.1"
|
|
208
208
|
},
|
|
209
209
|
"dependencies": {
|
|
210
|
-
"@coinbase/cds-common": "^8.
|
|
210
|
+
"@coinbase/cds-common": "^8.46.0",
|
|
211
211
|
"@coinbase/cds-icons": "^5.11.0",
|
|
212
212
|
"@coinbase/cds-illustrations": "^4.31.0",
|
|
213
213
|
"@coinbase/cds-lottie-files": "^3.3.4",
|