@coinbase/cds-mcp-server 8.44.2 → 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 +8 -0
- package/mcp-docs/mobile/components/SelectChip.txt +1 -0
- package/mcp-docs/mobile/components/Tooltip.txt +24 -0
- package/mcp-docs/mobile/components/Tray.txt +26 -0
- package/mcp-docs/web/components/Tooltip.txt +24 -0
- package/mcp-docs/web/components/Tray.txt +44 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,14 @@ 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, 11:34 AM PST))
|
|
12
|
+
|
|
13
|
+
This is an artificial version bump with no new change.
|
|
14
|
+
|
|
15
|
+
## 8.45.0 ((2/12/2026, 07:33 AM PST))
|
|
16
|
+
|
|
17
|
+
This is an artificial version bump with no new change.
|
|
18
|
+
|
|
11
19
|
## 8.44.2 ((2/10/2026, 08:38 AM PST))
|
|
12
20
|
|
|
13
21
|
This is an artificial version bump with no new change.
|
|
@@ -298,6 +298,7 @@ function SelectChipExample() {
|
|
|
298
298
|
| `presentationStyle` | `fullScreen \| pageSheet \| formSheet \| overFullScreen` | No | `-` | The presentationStyle determines the style of modal to show |
|
|
299
299
|
| `preventDismissGestures` | `boolean` | No | `-` | Prevents a user from dismissing the drawer by pressing the overlay or swiping |
|
|
300
300
|
| `preventHardwareBackBehaviorAndroid` | `boolean` | No | `-` | Prevents a user from dismissing the drawer by pressing hardware back button on Android |
|
|
301
|
+
| `reduceMotion` | `boolean` | No | `-` | When true, the drawer opens and closes with an opacity fade instead of a slide animation. Swipe-to-dismiss gestures remain enabled and use the slide transform so the drawer follows the users finger naturally. |
|
|
301
302
|
| `ref` | `((instance: View \| null) => void) \| RefObject<View> \| null` | No | `-` | - |
|
|
302
303
|
| `right` | `string \| number` | No | `-` | - |
|
|
303
304
|
| `rowGap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
|
|
@@ -53,6 +53,28 @@ function TooltipColorSchemeOptOut() {
|
|
|
53
53
|
}
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
+
### Visibility delay (press)
|
|
57
|
+
|
|
58
|
+
Use `openDelay` and `closeDelay` to slow down activation/dismissal when users tap through dense surfaces.
|
|
59
|
+
|
|
60
|
+
```jsx
|
|
61
|
+
function TooltipVisibilityDelay() {
|
|
62
|
+
return (
|
|
63
|
+
<HStack spacingHorizontal={2} gap={2} justifyContent="space-around">
|
|
64
|
+
<Tooltip content="Opens after 400ms" openDelay={400}>
|
|
65
|
+
<Button>Open delay 400ms</Button>
|
|
66
|
+
</Tooltip>
|
|
67
|
+
<Tooltip content="Closes after 150ms" closeDelay={150}>
|
|
68
|
+
<Button>Close delay 150ms</Button>
|
|
69
|
+
</Tooltip>
|
|
70
|
+
<Tooltip content="Open 400 / Close 150" openDelay={400} closeDelay={150}>
|
|
71
|
+
<Button>Open 400 / Close 150</Button>
|
|
72
|
+
</Tooltip>
|
|
73
|
+
</HStack>
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
56
78
|
## Props
|
|
57
79
|
|
|
58
80
|
| Prop | Type | Required | Default | Description |
|
|
@@ -62,11 +84,13 @@ function TooltipColorSchemeOptOut() {
|
|
|
62
84
|
| `accessibilityHintForContent` | `string` | No | `-` | The accessibilityHint for the content of the tooltip. If content is a string, this is not required as accessibilityHint would be set to the content. Otherwise, this is required |
|
|
63
85
|
| `accessibilityLabel` | `string` | No | `-` | If the children of the trigger is not a string, then you have to set your own accessibilityLabel to ensure that the tooltip is read correctly for voice-overs. |
|
|
64
86
|
| `accessibilityLabelForContent` | `string` | No | `-` | The accessibilityLabel for the content of the tooltip. If content is a string, this is not required as accessibilityHint would be set to the content. Otherwise, this is required |
|
|
87
|
+
| `closeDelay` | `number` | No | `-` | Delay (in ms) before hiding the tooltip after dismiss. |
|
|
65
88
|
| `elevation` | `0 \| 1 \| 2` | No | `-` | Determines a components shadow styles. Parent should have overflow set to visible to ensure styles are not clipped. |
|
|
66
89
|
| `gap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `1` | This value corresponds to how big the gap between the subject and the tooltip is. We do not encourage usage of this prop. But it is enabled for special cases as an escape hatch. |
|
|
67
90
|
| `invertColorScheme` | `boolean` | No | `true` | Invert the themes activeColorScheme for this component |
|
|
68
91
|
| `onCloseTooltip` | `(() => void)` | No | `-` | This callback executes when the tooltip is closed; either by press outside the toolip or on back button press for android. |
|
|
69
92
|
| `onOpenTooltip` | `(() => void)` | No | `-` | This callback executes when the tooltip is opened |
|
|
93
|
+
| `openDelay` | `number` | No | `-` | Delay (in ms) before showing the tooltip after press. |
|
|
70
94
|
| `placement` | `top \| bottom` | No | `-` | Position of tooltip in relation to the subject. |
|
|
71
95
|
| `testID` | `string` | No | `-` | Used to locate this element in unit and end-to-end tests. Under the hood, testID translates to data-testid on Web. On Mobile, testID stays the same - testID |
|
|
72
96
|
| `visible` | `boolean` | No | `true` | Control whether the tooltip is shown or hidden. |
|
|
@@ -382,8 +382,33 @@ function PreventDismissTray() {
|
|
|
382
382
|
|
|
383
383
|
### Accessibility
|
|
384
384
|
|
|
385
|
+
#### Accessibility labels
|
|
386
|
+
|
|
385
387
|
Trays require an accessibility label. If you pass in a ReactNode to `title`, make sure to set `accessibilityLabel`.
|
|
386
388
|
|
|
389
|
+
#### Reduce Motion
|
|
390
|
+
|
|
391
|
+
Use the `reduceMotion` prop to accommodate users with reduced motion settings.
|
|
392
|
+
|
|
393
|
+
```jsx
|
|
394
|
+
function ReducedMotionTray() {
|
|
395
|
+
const [visible, setVisible] = useState(false);
|
|
396
|
+
const handleOpen = () => setVisible(true);
|
|
397
|
+
const handleClose = () => setVisible(false);
|
|
398
|
+
|
|
399
|
+
return (
|
|
400
|
+
<VStack gap={2}>
|
|
401
|
+
<Button onPress={handleOpen}>Open Tray</Button>
|
|
402
|
+
{visible && (
|
|
403
|
+
<Tray reduceMotion onCloseComplete={handleClose} title="Reduced Motion">
|
|
404
|
+
<Text color="fgMuted">This tray fades in and out using opacity.</Text>
|
|
405
|
+
</Tray>
|
|
406
|
+
)}
|
|
407
|
+
</VStack>
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
```
|
|
411
|
+
|
|
387
412
|
### Styling
|
|
388
413
|
|
|
389
414
|
#### Handlebar
|
|
@@ -824,6 +849,7 @@ function Example() {
|
|
|
824
849
|
| `presentationStyle` | `fullScreen \| pageSheet \| formSheet \| overFullScreen` | No | `-` | The presentationStyle determines the style of modal to show |
|
|
825
850
|
| `preventDismissGestures` | `boolean` | No | `-` | Prevents a user from dismissing the drawer by pressing the overlay or swiping |
|
|
826
851
|
| `preventHardwareBackBehaviorAndroid` | `boolean` | No | `-` | Prevents a user from dismissing the drawer by pressing hardware back button on Android |
|
|
852
|
+
| `reduceMotion` | `boolean` | No | `-` | When true, the drawer opens and closes with an opacity fade instead of a slide animation. Swipe-to-dismiss gestures remain enabled and use the slide transform so the drawer follows the users finger naturally. |
|
|
827
853
|
| `ref` | `((instance: DrawerRefBaseProps \| null) => void) \| RefObject<DrawerRefBaseProps> \| null` | No | `-` | - |
|
|
828
854
|
| `statusBarTranslucent` | `boolean` | No | `-` | Determines whether your modal should go under the system statusbar. |
|
|
829
855
|
| `stickyFooter` | `ReactNode \| DrawerRenderChildren` | No | `-` | StickyFooter to be rendered at bottom of Drawer |
|
|
@@ -102,12 +102,35 @@ You can use tooltips within `TextInput` to provide more context.
|
|
|
102
102
|
/>
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
+
### Visibility delay (hover)
|
|
106
|
+
|
|
107
|
+
Use `openDelay` and `closeDelay` to slow down hover activation and reduce accidental opens on dense UI. Keyboard focus still opens immediately.
|
|
108
|
+
|
|
109
|
+
```jsx live
|
|
110
|
+
function TooltipVisibilityDelay() {
|
|
111
|
+
return (
|
|
112
|
+
<HStack spacingHorizontal={2} gap={2} justifyContent="space-around">
|
|
113
|
+
<Tooltip content="Opens after 400ms" openDelay={400}>
|
|
114
|
+
<Button>Open delay 400ms</Button>
|
|
115
|
+
</Tooltip>
|
|
116
|
+
<Tooltip content="Closes after 150ms" closeDelay={150}>
|
|
117
|
+
<Button>Close delay 150ms</Button>
|
|
118
|
+
</Tooltip>
|
|
119
|
+
<Tooltip content="Open 400 / Close 150" openDelay={400} closeDelay={150}>
|
|
120
|
+
<Button>Open 400 / Close 150</Button>
|
|
121
|
+
</Tooltip>
|
|
122
|
+
</HStack>
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
105
127
|
## Props
|
|
106
128
|
|
|
107
129
|
| Prop | Type | Required | Default | Description |
|
|
108
130
|
| --- | --- | --- | --- | --- |
|
|
109
131
|
| `content` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | Yes | `-` | The content to render within the tooltip. |
|
|
110
132
|
| `autoFocusDelay` | `number` | No | `undefined` | The amount of time in milliseconds to wait before auto-focusing the first focusable element. |
|
|
133
|
+
| `closeDelay` | `number` | No | `-` | Delay (in ms) before hiding the tooltip after pointer leave. Keyboard blur still closes immediately. |
|
|
111
134
|
| `disableAutoFocus` | `boolean` | No | `false` | If true, the focus trap will not automatically shift focus to itself when it opens, and replace it to the last focused element when it closes. |
|
|
112
135
|
| `disableFocusTrap` | `boolean` | No | `-` | Disables the focus trap to allow normal keyboard navigation. |
|
|
113
136
|
| `disablePortal` | `boolean` | No | `false` | - |
|
|
@@ -116,6 +139,7 @@ You can use tooltips within `TextInput` to provide more context.
|
|
|
116
139
|
| `focusTabIndexElements` | `boolean` | No | `false` | If true, the focus trap will include all elements with tabIndex values in the list of focusable elements. |
|
|
117
140
|
| `gap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `1` | This value corresponds to how big the gap between the subject and the tooltip is. We do not encourage usage of this prop. But it is enabled for special cases as an escape hatch. |
|
|
118
141
|
| `invertColorScheme` | `boolean` | No | `true` | Invert the themes activeColorScheme for this component |
|
|
142
|
+
| `openDelay` | `number` | No | `-` | Delay (in ms) before showing the tooltip on pointer hover. Keyboard focus still opens immediately for accessibility. |
|
|
119
143
|
| `placement` | `top \| bottom \| left \| right` | No | `top` | Position of tooltip in relation to the subject. |
|
|
120
144
|
| `respectNegativeTabIndex` | `boolean` | No | `false` | If true, the focus trap will respect negative tabIndex values, removing them from the list of focusable elements. |
|
|
121
145
|
| `testID` | `string` | No | `-` | Used to locate this element in unit and end-to-end tests. Under the hood, testID translates to data-testid on Web. On Mobile, testID stays the same - testID |
|
|
@@ -453,8 +453,51 @@ function PreventDismissTray() {
|
|
|
453
453
|
|
|
454
454
|
### Accessibility
|
|
455
455
|
|
|
456
|
+
#### Accessibility labels
|
|
457
|
+
|
|
456
458
|
Trays require an accessibility label. If you pass in a ReactNode to `title`, make sure to set `accessibilityLabel` or `accessibilityLabelledBy`.
|
|
457
459
|
|
|
460
|
+
#### Reduce Motion
|
|
461
|
+
|
|
462
|
+
Use the `reduceMotion` prop to accommodate users with reduced motion settings.
|
|
463
|
+
|
|
464
|
+
```jsx live
|
|
465
|
+
function ReducedMotionTray() {
|
|
466
|
+
const [visible, setVisible] = useState(false);
|
|
467
|
+
const { isPhone } = useBreakpoints();
|
|
468
|
+
const handleOpen = () => setVisible(true);
|
|
469
|
+
const handleClose = () => setVisible(false);
|
|
470
|
+
|
|
471
|
+
return (
|
|
472
|
+
<VStack gap={2}>
|
|
473
|
+
<Button onClick={handleOpen}>Open Tray</Button>
|
|
474
|
+
{visible && (
|
|
475
|
+
<Tray
|
|
476
|
+
reduceMotion
|
|
477
|
+
pin={isPhone ? 'bottom' : 'right'}
|
|
478
|
+
showHandleBar={isPhone}
|
|
479
|
+
onCloseComplete={handleClose}
|
|
480
|
+
title="Reduced Motion"
|
|
481
|
+
footer={({ handleClose }) => (
|
|
482
|
+
<PageFooter
|
|
483
|
+
borderedTop
|
|
484
|
+
justifyContent={isPhone ? 'center' : 'flex-end'}
|
|
485
|
+
action={
|
|
486
|
+
<Button block={isPhone} onClick={handleClose}>
|
|
487
|
+
Close
|
|
488
|
+
</Button>
|
|
489
|
+
}
|
|
490
|
+
/>
|
|
491
|
+
)}
|
|
492
|
+
>
|
|
493
|
+
<Text paddingBottom={2}>This tray fades in and out using opacity.</Text>
|
|
494
|
+
</Tray>
|
|
495
|
+
)}
|
|
496
|
+
</VStack>
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
```
|
|
500
|
+
|
|
458
501
|
### Styling
|
|
459
502
|
|
|
460
503
|
The Tray component exposes `styles` and `classNames` props for customizing various parts of the component. Available keys include: `root`, `overlay`, `container`, `header`, `title`, `content`, `footer`, `handleBar`, `handleBarHandle`, and `closeButton`.
|
|
@@ -1154,6 +1197,7 @@ function ResponsiveTrayExample() {
|
|
|
1154
1197
|
| `onVisibilityChange` | `((context: hidden \| visible) => void)` | No | `-` | Optional callback that, if provided, will be triggered when the Tray is toggled open/ closed If used for analytics, context (visible \| hidden) can be bundled with the event info to track whether the multiselect was toggled into or out of view |
|
|
1155
1198
|
| `pin` | `top \| bottom \| left \| right \| all` | No | `'bottom'` | Pin the tray to one side of the screen |
|
|
1156
1199
|
| `preventDismiss` | `boolean` | No | `-` | Prevents a user from dismissing the tray by pressing the overlay or swiping |
|
|
1200
|
+
| `reduceMotion` | `boolean` | No | `-` | When true, the tray will use opacity animation instead of transform animation. This is useful for supporting reduced motion for accessibility. |
|
|
1157
1201
|
| `ref` | `((instance: TrayRefProps \| null) => void) \| RefObject<TrayRefProps> \| null` | No | `-` | - |
|
|
1158
1202
|
| `restoreFocusOnUnmount` | `boolean` | No | `true` | If true, the focus trap will restore focus to the previously focused element when it unmounts. WARNING: If you disable this, you need to ensure that focus is restored properly so it doesnt end up on the body |
|
|
1159
1203
|
| `role` | `dialog \| alertdialog` | No | `-` | WAI-ARIA Roles |
|