@coinbase/cds-mcp-server 8.34.2 → 8.35.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.
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.35.1 ((1/5/2026, 03:28 PM PST))
12
+
13
+ This is an artificial version bump with no new change.
14
+
15
+ ## 8.35.0 ((1/5/2026, 10:03 AM PST))
16
+
17
+ This is an artificial version bump with no new change.
18
+
11
19
  ## 8.34.2 ((1/2/2026, 09:41 AM PST))
12
20
 
13
21
  This is an artificial version bump with no new change.
@@ -10,7 +10,7 @@ import { ProgressBar } from '@coinbase/cds-mobile/visualizations/ProgressBar'
10
10
 
11
11
  ## Examples
12
12
 
13
- ### Default
13
+ #### Default
14
14
 
15
15
  ```tsx
16
16
  <VStack gap={2}>
@@ -20,7 +20,7 @@ import { ProgressBar } from '@coinbase/cds-mobile/visualizations/ProgressBar'
20
20
  </VStack>
21
21
  ```
22
22
 
23
- ### Weights
23
+ #### Weights
24
24
 
25
25
  ```tsx
26
26
  <VStack gap={2}>
@@ -31,7 +31,7 @@ import { ProgressBar } from '@coinbase/cds-mobile/visualizations/ProgressBar'
31
31
  </VStack>
32
32
  ```
33
33
 
34
- ### Disabled
34
+ #### Disabled
35
35
 
36
36
  ```tsx
37
37
  <VStack gap={2}>
@@ -41,7 +41,7 @@ import { ProgressBar } from '@coinbase/cds-mobile/visualizations/ProgressBar'
41
41
  </VStack>
42
42
  ```
43
43
 
44
- ### Colors
44
+ #### Colors
45
45
 
46
46
  ```tsx
47
47
  <VStack gap={2}>
@@ -54,11 +54,11 @@ import { ProgressBar } from '@coinbase/cds-mobile/visualizations/ProgressBar'
54
54
  </VStack>
55
55
  ```
56
56
 
57
- ### Custom Styles
57
+ #### Custom Styles
58
58
 
59
59
  You can customize the appearance of the progress bar using the `styles` prop. The `root` style controls the container, and `progress` controls the fill bar.
60
60
 
61
- ```tsx live
61
+ ```tsx
62
62
  <ProgressContainerWithButtons>
63
63
  {({ calculateProgress }) => (
64
64
  <VStack gap={2}>
@@ -80,7 +80,21 @@ You can customize the appearance of the progress bar using the `styles` prop. Th
80
80
  </ProgressContainerWithButtons>
81
81
  ```
82
82
 
83
- ### Animation Callbacks
83
+ ### Animation
84
+
85
+ By default, ProgressBar animates progress changes. Use `disableAnimateOnMount` to skip the initial animation while still animating subsequent changes.
86
+
87
+ ```tsx
88
+ <VStack gap={2}>
89
+ <Text variant="label2">Normal animation</Text>
90
+ <ProgressBar progress={0.5} />
91
+
92
+ <Text variant="label2">Disable animation on mount</Text>
93
+ <ProgressBar disableAnimateOnMount progress={0.5} />
94
+ </VStack>
95
+ ```
96
+
97
+ #### Callbacks
84
98
 
85
99
  You can use the `onAnimationStart` and `onAnimationEnd` callbacks to track the progress of the animation.
86
100
 
@@ -102,7 +116,7 @@ function Example() {
102
116
  <ProgressBar
103
117
  onAnimationEnd={handleAnimationEnd}
104
118
  onAnimationStart={handleAnimationStart}
105
- progress={calculateProgress(0.2)}
119
+ progress={0.2}
106
120
  />
107
121
  </VStack>
108
122
  );
@@ -116,7 +130,7 @@ function Example() {
116
130
  | `progress` | `number` | Yes | `-` | Number between 0-1 representing the progress percentage |
117
131
  | `color` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `primary` | Custom progress color. |
118
132
  | `disableAnimateOnMount` | `boolean` | No | `false` | Disable animation on component mount |
119
- | `disabled` | `boolean` | No | `false` | Toggle used to show a disabled progress visualization |
133
+ | `disabled` | `boolean` | No | `-` | Toggle used to show a disabled progress visualization |
120
134
  | `key` | `Key \| null` | No | `-` | - |
121
135
  | `onAnimationEnd` | `(() => void)` | No | `-` | Callback fired when the progress animation ends. |
122
136
  | `onAnimationStart` | `(() => void)` | No | `-` | Callback fired when the progress animation starts. |
@@ -12,7 +12,7 @@ import { ProgressBarWithFixedLabels } from '@coinbase/cds-mobile/visualizations/
12
12
 
13
13
  ### Label Below
14
14
 
15
- ```jsx live
15
+ ```jsx
16
16
  <VStack gap={2}>
17
17
  <ProgressBarWithFixedLabels startLabel={0} endLabel={20} labelPlacement="below">
18
18
  <ProgressBar progress={0.2} />
@@ -25,7 +25,7 @@ import { ProgressBarWithFixedLabels } from '@coinbase/cds-mobile/visualizations/
25
25
 
26
26
  ### Label Beside
27
27
 
28
- ```jsx live
28
+ ```jsx
29
29
  <VStack gap={2}>
30
30
  <ProgressBarWithFixedLabels startLabel={0} endLabel={20} labelPlacement="beside">
31
31
  <ProgressBar progress={0.2} />
@@ -38,7 +38,7 @@ import { ProgressBarWithFixedLabels } from '@coinbase/cds-mobile/visualizations/
38
38
 
39
39
  ### Disabled
40
40
 
41
- ```jsx live
41
+ ```jsx
42
42
  <VStack gap={2}>
43
43
  <ProgressBarWithFixedLabels startLabel={0} endLabel={20} disabled labelPlacement="beside">
44
44
  <ProgressBar disabled progress={0.2} />
@@ -51,7 +51,7 @@ import { ProgressBarWithFixedLabels } from '@coinbase/cds-mobile/visualizations/
51
51
 
52
52
  ### Custom Labels
53
53
 
54
- ```jsx live
54
+ ```jsx
55
55
  function Example() {
56
56
  const renderStartLabelNumStr = useCallback((num) => {
57
57
  return `$${num.toLocaleString()}`;
@@ -119,7 +119,7 @@ function Example() {
119
119
 
120
120
  You can customize the appearance of the progress bar and labels using the `styles` prop.
121
121
 
122
- ```tsx live
122
+ ```tsx
123
123
  <ProgressContainerWithButtons>
124
124
  {({ calculateProgress }) => (
125
125
  <VStack gap={2}>
@@ -145,11 +145,66 @@ You can customize the appearance of the progress bar and labels using the `style
145
145
  </ProgressContainerWithButtons>
146
146
  ```
147
147
 
148
+ ### Animation
149
+
150
+ By default, ProgressBar animates progress changes. Use `disableAnimateOnMount` to skip the initial animation while still animating subsequent changes.
151
+
152
+ ```tsx
153
+ <VStack gap={2}>
154
+ <Text variant="label2">Normal animation</Text>
155
+ <ProgressBarWithFixedLabels startLabel={0} endLabel={50} labelPlacement="above">
156
+ <ProgressBar progress={0.5} />
157
+ </ProgressBarWithFixedLabels>
158
+
159
+ <Text variant="label2">Disable animation on mount</Text>
160
+ <ProgressBarWithFixedLabels
161
+ disableAnimateOnMount
162
+ startLabel={0}
163
+ endLabel={50}
164
+ labelPlacement="above"
165
+ >
166
+ <ProgressBar disableAnimateOnMount progress={0.5} />
167
+ </ProgressBarWithFixedLabels>
168
+ </VStack>
169
+ ```
170
+
171
+ #### Callbacks
172
+
173
+ You can use the `onAnimationStart` and `onAnimationEnd` callbacks to track the progress of the animation.
174
+
175
+ ```jsx
176
+ function Example() {
177
+ const [animationStatus, setAnimationStatus] = React.useState('Ready');
178
+
179
+ const handleAnimationStart = useCallback(() => {
180
+ setAnimationStatus('Animating...');
181
+ }, []);
182
+
183
+ const handleAnimationEnd = useCallback(() => {
184
+ setAnimationStatus('Animation Ended');
185
+ }, []);
186
+
187
+ return (
188
+ <VStack gap={2}>
189
+ <Text>Animation Status: {animationStatus}</Text>
190
+ <ProgressBarWithFixedLabels startLabel={0} endLabel={20} labelPlacement="above">
191
+ <ProgressBar
192
+ onAnimationEnd={handleAnimationEnd}
193
+ onAnimationStart={handleAnimationStart}
194
+ progress={0.2}
195
+ />
196
+ </ProgressBarWithFixedLabels>
197
+ </VStack>
198
+ );
199
+ }
200
+ ```
201
+
148
202
  ## Props
149
203
 
150
204
  | Prop | Type | Required | Default | Description |
151
205
  | --- | --- | --- | --- | --- |
152
- | `disabled` | `boolean` | No | `false` | Toggle used to show a disabled progress visualization |
206
+ | `disableAnimateOnMount` | `boolean` | No | `false` | Disable animation on component mount |
207
+ | `disabled` | `boolean` | No | `-` | Toggle used to show a disabled progress visualization |
153
208
  | `endLabel` | `number \| { value: number; render: (num: number, disabled?: boolean \| undefined) => ReactNode; }` | No | `-` | Label that is pinned to the end of the container. If a number is used then it will format it as a percentage. |
154
209
  | `labelPlacement` | `above \| below \| beside` | No | `beside` | Position of label relative to the bar |
155
210
  | `startLabel` | `number \| { value: number; render: (num: number, disabled?: boolean \| undefined) => ReactNode; }` | No | `-` | Label that is pinned to the start of the container. If a number is used then it will format it as a percentage. |
@@ -12,7 +12,7 @@ import { ProgressBarWithFloatLabel } from '@coinbase/cds-mobile/visualizations/P
12
12
 
13
13
  ### Label Above
14
14
 
15
- ```jsx live
15
+ ```jsx
16
16
  <VStack gap={2}>
17
17
  <ProgressBarWithFloatLabel label={0} progress={0} labelPlacement="above">
18
18
  <ProgressBar progress={0} />
@@ -25,7 +25,7 @@ import { ProgressBarWithFloatLabel } from '@coinbase/cds-mobile/visualizations/P
25
25
 
26
26
  ### Label Below
27
27
 
28
- ```jsx live
28
+ ```jsx
29
29
  <VStack gap={2}>
30
30
  <ProgressBarWithFloatLabel label={0} progress={0} labelPlacement="below">
31
31
  <ProgressBar progress={0} />
@@ -38,7 +38,7 @@ import { ProgressBarWithFloatLabel } from '@coinbase/cds-mobile/visualizations/P
38
38
 
39
39
  ### Disabled
40
40
 
41
- ```jsx live
41
+ ```jsx
42
42
  <VStack gap={2}>
43
43
  <ProgressBarWithFloatLabel label={70} progress={0.7} disabled>
44
44
  <ProgressBar progress={0.7} disabled />
@@ -48,7 +48,7 @@ import { ProgressBarWithFloatLabel } from '@coinbase/cds-mobile/visualizations/P
48
48
 
49
49
  ### Custom Labels
50
50
 
51
- ```jsx live
51
+ ```jsx
52
52
  function Example() {
53
53
  const renderLabelNumStr = useCallback((num) => {
54
54
  return `$${num.toLocaleString()}`;
@@ -103,7 +103,7 @@ function Example() {
103
103
 
104
104
  You can customize the appearance of the progress bar and float label using the `styles` prop.
105
105
 
106
- ```tsx live
106
+ ```tsx
107
107
  <ProgressContainerWithButtons>
108
108
  {({ calculateProgress }) => (
109
109
  <VStack gap={2}>
@@ -122,13 +122,63 @@ You can customize the appearance of the progress bar and float label using the `
122
122
  </ProgressContainerWithButtons>
123
123
  ```
124
124
 
125
+ ### Animation
126
+
127
+ By default, ProgressBar animates progress changes. Use `disableAnimateOnMount` to skip the initial animation while still animating subsequent changes.
128
+
129
+ ```tsx
130
+ <VStack gap={2}>
131
+ <Text variant="label2">Normal animation</Text>
132
+ <ProgressBarWithFloatLabel label={50} progress={0.5} labelPlacement="above">
133
+ <ProgressBar progress={0.5} />
134
+ </ProgressBarWithFloatLabel>
135
+
136
+ <Text variant="label2">Disable animation on mount</Text>
137
+ <ProgressBarWithFloatLabel disableAnimateOnMount label={50} progress={0.5} labelPlacement="above">
138
+ <ProgressBar disableAnimateOnMount progress={0.5} />
139
+ </ProgressBarWithFloatLabel>
140
+ </VStack>
141
+ ```
142
+
143
+ #### Callbacks
144
+
145
+ You can use the `onAnimationStart` and `onAnimationEnd` callbacks to track the progress of the animation.
146
+
147
+ ```jsx
148
+ function Example() {
149
+ const [animationStatus, setAnimationStatus] = React.useState('Ready');
150
+
151
+ const handleAnimationStart = useCallback(() => {
152
+ setAnimationStatus('Animating...');
153
+ }, []);
154
+
155
+ const handleAnimationEnd = useCallback(() => {
156
+ setAnimationStatus('Animation Ended');
157
+ }, []);
158
+
159
+ return (
160
+ <VStack gap={2}>
161
+ <Text>Animation Status: {animationStatus}</Text>
162
+ <ProgressBarWithFloatLabel label={20} progress={0.2} labelPlacement="above">
163
+ <ProgressBar
164
+ onAnimationEnd={handleAnimationEnd}
165
+ onAnimationStart={handleAnimationStart}
166
+ progress={0.2}
167
+ />
168
+ </ProgressBarWithFloatLabel>
169
+ </VStack>
170
+ );
171
+ }
172
+ ```
173
+
125
174
  ## Props
126
175
 
127
176
  | Prop | Type | Required | Default | Description |
128
177
  | --- | --- | --- | --- | --- |
129
178
  | `label` | `number \| { value: number; render: (num: number, disabled?: boolean \| undefined) => ReactNode; }` | Yes | `-` | Label that is floated at the end of the filled in bar. If a number is used then it will format it as a percentage. |
130
179
  | `progress` | `number` | Yes | `-` | Number between 0-1 representing the progress percentage |
131
- | `disabled` | `boolean` | No | `false` | Toggle used to show a disabled progress visualization |
180
+ | `disableAnimateOnMount` | `boolean` | No | `false` | Disable animation on component mount |
181
+ | `disabled` | `boolean` | No | `-` | Toggle used to show a disabled progress visualization |
132
182
  | `labelPlacement` | `above \| below` | No | `above` | Position of label relative to the bar |
133
183
  | `style` | `null \| false \| ViewStyle \| RegisteredStyle<ViewStyle> \| RecursiveArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>>` | No | `-` | Custom styles for the progress bar with float label root. |
134
184
  | `styles` | `{ root?: StyleProp<ViewStyle>; labelContainer?: StyleProp<ViewStyle>; label?: StyleProp<TextStyle>; }` | No | `-` | Custom styles for the progress bar with float label. |
@@ -186,7 +186,25 @@ The progress circle can be customized with styles.
186
186
  </HStack>
187
187
  ```
188
188
 
189
- #### Animation Callbacks
189
+ ### Animation
190
+
191
+ By default, ProgressCircle animates progress changes. Use `disableAnimateOnMount` to skip the initial animation while still animating subsequent changes.
192
+
193
+ ```tsx
194
+ <HStack gap={2}>
195
+ <VStack gap={1} alignItems="center">
196
+ <Text variant="label2">Normal animation</Text>
197
+ <ProgressCircle progress={0.5} size={100} />
198
+ </VStack>
199
+
200
+ <VStack gap={1} alignItems="center">
201
+ <Text variant="label2">Disable animation on mount</Text>
202
+ <ProgressCircle disableAnimateOnMount progress={0.5} size={100} />
203
+ </VStack>
204
+ </HStack>
205
+ ```
206
+
207
+ #### Callbacks
190
208
 
191
209
  You can use the `onAnimationStart` and `onAnimationEnd` callbacks to track the progress of the animation.
192
210
 
@@ -208,7 +226,7 @@ function Example() {
208
226
  <ProgressCircle
209
227
  onAnimationEnd={handleAnimationEnd}
210
228
  onAnimationStart={handleAnimationStart}
211
- progress={calculateProgress(0.2)}
229
+ progress={0.2}
212
230
  size={100}
213
231
  />
214
232
  </VStack>
@@ -224,7 +242,7 @@ function Example() {
224
242
  | `color` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `primary` | Custom progress color. |
225
243
  | `contentNode` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Optional component to override the default content rendered inside the circle. |
226
244
  | `disableAnimateOnMount` | `boolean` | No | `false` | Disable animation on component mount |
227
- | `disabled` | `boolean` | No | `false` | Toggle used to show a disabled progress visualization |
245
+ | `disabled` | `boolean` | No | `-` | Toggle used to show a disabled progress visualization |
228
246
  | `hideContent` | `boolean` | No | `-` | Toggle used to hide the content node rendered inside the circle. |
229
247
  | `hideText` | `boolean` | No | `-` | - |
230
248
  | `key` | `Key \| null` | No | `-` | - |
@@ -47,10 +47,25 @@ import { RemoteImageGroup } from '@coinbase/cds-mobile/media/RemoteImageGroup'
47
47
  </RemoteImageGroup>
48
48
  ```
49
49
 
50
+ ### Bordered Images
51
+
52
+ Use the `borderWidth` and `borderColor` props to change border style of the images in the group. `borderColor` defaults to `bg` when `borderWidth` is set.
53
+
54
+ ```tsx
55
+ <RemoteImageGroup borderWidth={300} max={3}>
56
+ <RemoteImage source={assets.eth.imageUrl} />
57
+ <RemoteImage source={assets.btc.imageUrl} />
58
+ <RemoteImage source={assets.dai.imageUrl} />
59
+ <RemoteImage source={assets.hbar.imageUrl} />
60
+ </RemoteImageGroup>
61
+ ```
62
+
50
63
  ## Props
51
64
 
52
65
  | Prop | Type | Required | Default | Description |
53
66
  | --- | --- | --- | --- | --- |
67
+ | `borderColor` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `borderWidth ? 'bg' : undefined` | - |
68
+ | `borderWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
54
69
  | `children` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Children content |
55
70
  | `max` | `number` | No | `4` | Indicates the number of remote image before it collapses |
56
71
  | `shape` | `rectangle \| circle \| squircle \| square \| hexagon` | No | `circle` | Shape of all RemoteImage children in the group |
@@ -383,7 +383,7 @@ function CustomBeaconLabel() {
383
383
 
384
384
  Using `labelElevated` will elevate the Scrubber's reference line label with a shadow.
385
385
 
386
- ```jsx live
386
+ ```jsx
387
387
  <LineChart
388
388
  enableScrubbing
389
389
  height={200}
@@ -324,7 +324,7 @@ When using the `inside` label variant, you should always include a `placeholder`
324
324
  label="Password"
325
325
  labelVariant="inside"
326
326
  secureTextEntry
327
- end={<InputIconButton name="visibleInactive" />}
327
+ end={<InputIconButton name="visible" />}
328
328
  placeholder="Enter your password"
329
329
  />
330
330
  ```
@@ -409,6 +409,7 @@ Password Input - Use Icon Buttons at the end for actions like showing a password
409
409
  function PasswordInput() {
410
410
  const [isVisible, setIsVisible] = useState(false);
411
411
  const type = useMemo(() => (isVisible ? 'text' : 'password'), [isVisible]);
412
+ const iconName = useMemo(() => (isVisible ? 'visible' : 'invisible'), [isVisible]);
412
413
 
413
414
  return (
414
415
  <TextInput
@@ -416,8 +417,8 @@ function PasswordInput() {
416
417
  type={type}
417
418
  end={
418
419
  <InputIconButton
419
- name={isVisible ? 'visibleActive' : 'visibleInactive'}
420
- onPress={() => setIsVisible((isVisible) => !setIsVisible)}
420
+ name={iconName}
421
+ onPress={() => setIsVisible((isVisible) => !isVisible)}
421
422
  accessibilityLabel={isVisible ? 'Hide password' : 'Show password'}
422
423
  />
423
424
  }
@@ -108,7 +108,25 @@ This is for demo purposes. ProgressContainerWithButtons isn't designed for produ
108
108
  </ProgressContainerWithButtons>
109
109
  ```
110
110
 
111
- ### Animation Callbacks
111
+ ### Animation
112
+
113
+ By default, ProgressBar animates progress changes. Use `disableAnimateOnMount` to skip the initial animation while still animating subsequent changes.
114
+
115
+ ```tsx live
116
+ <ProgressContainerWithButtons>
117
+ {({ calculateProgress }) => (
118
+ <VStack gap={2}>
119
+ <Text variant="label2">Normal animation</Text>
120
+ <ProgressBar progress={calculateProgress(0)} />
121
+
122
+ <Text variant="label2">Disable animation on mount</Text>
123
+ <ProgressBar disableAnimateOnMount progress={calculateProgress(0.3)} />
124
+ </VStack>
125
+ )}
126
+ </ProgressContainerWithButtons>
127
+ ```
128
+
129
+ #### Callbacks
112
130
 
113
131
  You can use the `onAnimationStart` and `onAnimationEnd` callbacks to track the progress of the animation.
114
132
 
@@ -150,7 +168,7 @@ function Example() {
150
168
  | `classNames` | `{ root?: string; progress?: string \| undefined; } \| undefined` | No | `-` | Custom class names for the progress bar. |
151
169
  | `color` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `primary` | Custom progress color. |
152
170
  | `disableAnimateOnMount` | `boolean` | No | `false` | Disable animation on component mount |
153
- | `disabled` | `boolean` | No | `false` | Toggle used to show a disabled progress visualization |
171
+ | `disabled` | `boolean` | No | `-` | Toggle used to show a disabled progress visualization |
154
172
  | `key` | `Key \| null` | No | `-` | - |
155
173
  | `onAnimationEnd` | `(() => void)` | No | `-` | Callback fired when the progress animation ends. |
156
174
  | `onAnimationStart` | `(() => void)` | No | `-` | Callback fired when the progress animation starts. |
@@ -195,13 +195,84 @@ This is for demo purposes. ProgressContainerWithButtons isn't designed for produ
195
195
  </ProgressContainerWithButtons>
196
196
  ```
197
197
 
198
+ ### Animation
199
+
200
+ By default, ProgressBar animates progress changes. Use `disableAnimateOnMount` to skip the initial animation while still animating subsequent changes.
201
+
202
+ ```tsx live
203
+ <ProgressContainerWithButtons>
204
+ {({ calculateProgress }) => (
205
+ <VStack gap={2}>
206
+ <Text variant="label2">Normal animation</Text>
207
+ <ProgressBarWithFixedLabels
208
+ startLabel={0}
209
+ endLabel={Math.round(calculateProgress(0) * 100)}
210
+ labelPlacement="above"
211
+ >
212
+ <ProgressBar progress={calculateProgress(0)} />
213
+ </ProgressBarWithFixedLabels>
214
+
215
+ <Text variant="label2">Disable animation on mount</Text>
216
+ <ProgressBarWithFixedLabels
217
+ disableAnimateOnMount
218
+ startLabel={0}
219
+ endLabel={Math.round(calculateProgress(0.3) * 100)}
220
+ labelPlacement="above"
221
+ >
222
+ <ProgressBar disableAnimateOnMount progress={calculateProgress(0.3)} />
223
+ </ProgressBarWithFixedLabels>
224
+ </VStack>
225
+ )}
226
+ </ProgressContainerWithButtons>
227
+ ```
228
+
229
+ #### Callbacks
230
+
231
+ You can use the `onAnimationStart` and `onAnimationEnd` callbacks to track the progress of the animation.
232
+
233
+ ```jsx live
234
+ function Example() {
235
+ const [animationStatus, setAnimationStatus] = React.useState('Ready');
236
+
237
+ const handleAnimationStart = useCallback(() => {
238
+ setAnimationStatus('Animating...');
239
+ }, []);
240
+
241
+ const handleAnimationEnd = useCallback(() => {
242
+ setAnimationStatus('Animation Ended');
243
+ }, []);
244
+
245
+ return (
246
+ <ProgressContainerWithButtons>
247
+ {({ calculateProgress }) => (
248
+ <VStack gap={2}>
249
+ <Text>Animation Status: {animationStatus}</Text>
250
+ <ProgressBarWithFixedLabels
251
+ startLabel={0}
252
+ endLabel={Math.round(calculateProgress(0.2) * 100)}
253
+ labelPlacement="above"
254
+ >
255
+ <ProgressBar
256
+ onAnimationEnd={handleAnimationEnd}
257
+ onAnimationStart={handleAnimationStart}
258
+ progress={calculateProgress(0.2)}
259
+ />
260
+ </ProgressBarWithFixedLabels>
261
+ </VStack>
262
+ )}
263
+ </ProgressContainerWithButtons>
264
+ );
265
+ }
266
+ ```
267
+
198
268
  ## Props
199
269
 
200
270
  | Prop | Type | Required | Default | Description |
201
271
  | --- | --- | --- | --- | --- |
202
272
  | `className` | `string` | No | `-` | Custom class name for the progress bar with fixed labels root. |
203
273
  | `classNames` | `{ root?: string; labelContainer?: string \| undefined; startLabel?: string \| undefined; endLabel?: string \| undefined; } \| undefined` | No | `-` | Custom class names for the progress bar with fixed labels. |
204
- | `disabled` | `boolean` | No | `false` | Toggle used to show a disabled progress visualization |
274
+ | `disableAnimateOnMount` | `boolean` | No | `false` | Disable animation on component mount |
275
+ | `disabled` | `boolean` | No | `-` | Toggle used to show a disabled progress visualization |
205
276
  | `endLabel` | `number \| { value: number; render: (num: number, disabled?: boolean \| undefined) => ReactNode; }` | No | `-` | Label that is pinned to the end of the container. If a number is used then it will format it as a percentage. |
206
277
  | `labelPlacement` | `above \| below \| beside` | No | `beside` | Position of label relative to the bar |
207
278
  | `startLabel` | `number \| { value: number; render: (num: number, disabled?: boolean \| undefined) => ReactNode; }` | No | `-` | Label that is pinned to the start of the container. If a number is used then it will format it as a percentage. |
@@ -164,6 +164,76 @@ This is for demo purposes. ProgressContainerWithButtons isn't designed for produ
164
164
  </ProgressContainerWithButtons>
165
165
  ```
166
166
 
167
+ ### Animation
168
+
169
+ By default, ProgressBar animates progress changes. Use `disableAnimateOnMount` to skip the initial animation while still animating subsequent changes.
170
+
171
+ ```tsx live
172
+ <ProgressContainerWithButtons>
173
+ {({ calculateProgress }) => (
174
+ <VStack gap={2}>
175
+ <Text variant="label2">Normal animation</Text>
176
+ <ProgressBarWithFloatLabel
177
+ label={Math.round(calculateProgress(0) * 100)}
178
+ progress={calculateProgress(0)}
179
+ labelPlacement="above"
180
+ >
181
+ <ProgressBar progress={calculateProgress(0)} />
182
+ </ProgressBarWithFloatLabel>
183
+
184
+ <Text variant="label2">Disable animation on mount</Text>
185
+ <ProgressBarWithFloatLabel
186
+ disableAnimateOnMount
187
+ label={Math.round(calculateProgress(0.3) * 100)}
188
+ progress={calculateProgress(0.3)}
189
+ labelPlacement="above"
190
+ >
191
+ <ProgressBar disableAnimateOnMount progress={calculateProgress(0.3)} />
192
+ </ProgressBarWithFloatLabel>
193
+ </VStack>
194
+ )}
195
+ </ProgressContainerWithButtons>
196
+ ```
197
+
198
+ #### Callbacks
199
+
200
+ You can use the `onAnimationStart` and `onAnimationEnd` callbacks to track the progress of the animation.
201
+
202
+ ```jsx live
203
+ function Example() {
204
+ const [animationStatus, setAnimationStatus] = React.useState('Ready');
205
+
206
+ const handleAnimationStart = useCallback(() => {
207
+ setAnimationStatus('Animating...');
208
+ }, []);
209
+
210
+ const handleAnimationEnd = useCallback(() => {
211
+ setAnimationStatus('Animation Ended');
212
+ }, []);
213
+
214
+ return (
215
+ <ProgressContainerWithButtons>
216
+ {({ calculateProgress }) => (
217
+ <VStack gap={2}>
218
+ <Text>Animation Status: {animationStatus}</Text>
219
+ <ProgressBarWithFloatLabel
220
+ label={Math.round(calculateProgress(0.2) * 100)}
221
+ progress={calculateProgress(0.2)}
222
+ labelPlacement="above"
223
+ >
224
+ <ProgressBar
225
+ onAnimationEnd={handleAnimationEnd}
226
+ onAnimationStart={handleAnimationStart}
227
+ progress={calculateProgress(0.2)}
228
+ />
229
+ </ProgressBarWithFloatLabel>
230
+ </VStack>
231
+ )}
232
+ </ProgressContainerWithButtons>
233
+ );
234
+ }
235
+ ```
236
+
167
237
  ## Props
168
238
 
169
239
  | Prop | Type | Required | Default | Description |
@@ -172,7 +242,8 @@ This is for demo purposes. ProgressContainerWithButtons isn't designed for produ
172
242
  | `progress` | `number` | Yes | `-` | Number between 0-1 representing the progress percentage |
173
243
  | `className` | `string` | No | `-` | Custom class name for the progress bar with float label root. |
174
244
  | `classNames` | `{ root?: string; labelContainer?: string \| undefined; label?: string \| undefined; } \| undefined` | No | `-` | Custom class names for the progress bar with float label. |
175
- | `disabled` | `boolean` | No | `false` | Toggle used to show a disabled progress visualization |
245
+ | `disableAnimateOnMount` | `boolean` | No | `false` | Disable animation on component mount |
246
+ | `disabled` | `boolean` | No | `-` | Toggle used to show a disabled progress visualization |
176
247
  | `labelPlacement` | `above \| below` | No | `above` | Position of label relative to the bar |
177
248
  | `style` | `CSSProperties` | No | `-` | Custom styles for the progress bar with float label root. |
178
249
  | `styles` | `{ root?: CSSProperties; labelContainer?: CSSProperties \| undefined; label?: CSSProperties \| undefined; } \| undefined` | No | `-` | Custom styles for the progress bar with float label. |
@@ -13,7 +13,7 @@ import { ProgressCircle } from '@coinbase/cds-web/visualizations/ProgressCircle'
13
13
  ### Default
14
14
 
15
15
  ```jsx live
16
- <HStack gap={2}>
16
+ <HStack gap={2} flexWrap="wrap">
17
17
  <ProgressCircle progress={0} size={100} />
18
18
  <ProgressCircle progress={0.5} size={100} />
19
19
  <ProgressCircle progress={1} size={100} />
@@ -23,7 +23,7 @@ import { ProgressCircle } from '@coinbase/cds-web/visualizations/ProgressCircle'
23
23
  ### Thin
24
24
 
25
25
  ```jsx live
26
- <HStack gap={2}>
26
+ <HStack gap={2} flexWrap="wrap">
27
27
  <ProgressCircle progress={0} weight="thin" size={100} />
28
28
  <ProgressCircle progress={0.5} weight="thin" size={100} />
29
29
  <ProgressCircle progress={1} weight="thin" size={100} />
@@ -33,7 +33,7 @@ import { ProgressCircle } from '@coinbase/cds-web/visualizations/ProgressCircle'
33
33
  ### Semiheavy
34
34
 
35
35
  ```jsx live
36
- <HStack gap={2}>
36
+ <HStack gap={2} flexWrap="wrap">
37
37
  <ProgressCircle progress={0} weight="semiheavy" size={100} />
38
38
  <ProgressCircle progress={0.5} weight="semiheavy" size={100} />
39
39
  <ProgressCircle progress={1} weight="semiheavy" size={100} />
@@ -43,7 +43,7 @@ import { ProgressCircle } from '@coinbase/cds-web/visualizations/ProgressCircle'
43
43
  ### Heavy
44
44
 
45
45
  ```jsx live
46
- <HStack gap={2}>
46
+ <HStack gap={2} flexWrap="wrap">
47
47
  <ProgressCircle progress={0} weight="heavy" size={100} />
48
48
  <ProgressCircle progress={0.5} weight="heavy" size={100} />
49
49
  <ProgressCircle progress={1} weight="heavy" size={100} />
@@ -53,7 +53,7 @@ import { ProgressCircle } from '@coinbase/cds-web/visualizations/ProgressCircle'
53
53
  ### No Text
54
54
 
55
55
  ```jsx live
56
- <HStack gap={2}>
56
+ <HStack gap={2} flexWrap="wrap">
57
57
  <ProgressCircle progress={0} hideContent size={25} />
58
58
  <ProgressCircle progress={0.5} hideContent size={25} />
59
59
  <ProgressCircle progress={1} hideContent size={25} />
@@ -63,7 +63,7 @@ import { ProgressCircle } from '@coinbase/cds-web/visualizations/ProgressCircle'
63
63
  ### Disabled
64
64
 
65
65
  ```jsx live
66
- <HStack gap={2}>
66
+ <HStack gap={2} flexWrap="wrap">
67
67
  <ProgressCircle progress={0} disabled size={100} />
68
68
  <ProgressCircle progress={0.5} disabled size={100} />
69
69
  <ProgressCircle progress={1} disabled size={100} />
@@ -73,7 +73,7 @@ import { ProgressCircle } from '@coinbase/cds-web/visualizations/ProgressCircle'
73
73
  ### Colors
74
74
 
75
75
  ```jsx live
76
- <HStack gap={2}>
76
+ <HStack gap={2} flexWrap="wrap">
77
77
  <ProgressCircle progress={0.5} color="bgPositive" size={100} />
78
78
  <ProgressCircle progress={0.5} color="bgNegative" size={100} />
79
79
  <ProgressCircle progress={0.5} color="bgPrimary" size={100} />
@@ -109,7 +109,7 @@ You can provide an image, such as an asset, as the content node.
109
109
 
110
110
  ```jsx live
111
111
  <VStack gap={2}>
112
- <HStack gap={2}>
112
+ <HStack gap={2} flexWrap="wrap">
113
113
  <ProgressCircle
114
114
  progress={1}
115
115
  size={56}
@@ -211,7 +211,7 @@ You can provide an image, such as an asset, as the content node.
211
211
  weight="thin"
212
212
  />
213
213
  </HStack>
214
- <HStack gap={2}>
214
+ <HStack gap={2} flexWrap="wrap">
215
215
  <ProgressCircle
216
216
  styles={{
217
217
  progress: {
@@ -387,7 +387,29 @@ This is for demo purposes. ProgressContainerWithButtons isn't designed for produ
387
387
  </ProgressContainerWithButtons>
388
388
  ```
389
389
 
390
- ### Animation Callbacks
390
+ ### Animation
391
+
392
+ By default, ProgressCircle animates progress changes. Use `disableAnimateOnMount` to skip the initial animation while still animating subsequent changes.
393
+
394
+ ```tsx live
395
+ <ProgressContainerWithButtons>
396
+ {({ calculateProgress }) => (
397
+ <HStack gap={2}>
398
+ <VStack gap={1} alignItems="center">
399
+ <Text variant="label2">Normal animation</Text>
400
+ <ProgressCircle progress={calculateProgress(0)} size={100} />
401
+ </VStack>
402
+
403
+ <VStack gap={1} alignItems="center">
404
+ <Text variant="label2">Disable animation on mount</Text>
405
+ <ProgressCircle disableAnimateOnMount progress={calculateProgress(0.3)} size={100} />
406
+ </VStack>
407
+ </HStack>
408
+ )}
409
+ </ProgressContainerWithButtons>
410
+ ```
411
+
412
+ #### Callbacks
391
413
 
392
414
  You can use the `onAnimationStart` and `onAnimationEnd` callbacks to track the progress of the animation.
393
415
 
@@ -431,7 +453,7 @@ function Example() {
431
453
  | `color` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `primary` | Custom progress color. |
432
454
  | `contentNode` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Optional component to override the default content rendered inside the circle. |
433
455
  | `disableAnimateOnMount` | `boolean` | No | `false` | Disable animation on component mount |
434
- | `disabled` | `boolean` | No | `false` | Toggle used to show a disabled progress visualization |
456
+ | `disabled` | `boolean` | No | `-` | Toggle used to show a disabled progress visualization |
435
457
  | `hideContent` | `boolean` | No | `-` | Toggle used to hide the content node rendered inside the circle. |
436
458
  | `hideText` | `boolean` | No | `-` | - |
437
459
  | `key` | `Key \| null` | No | `-` | - |
@@ -77,10 +77,25 @@ function Component() {
77
77
  }
78
78
  ```
79
79
 
80
+ ### Bordered Images
81
+
82
+ Use the `borderWidth` and `borderColor` props to change border style of the images in the group. `borderColor` defaults to `bg` when `borderWidth` is set.
83
+
84
+ ```tsx live
85
+ <RemoteImageGroup borderWidth={300} max={3}>
86
+ <RemoteImage source={assets.eth.imageUrl} />
87
+ <RemoteImage source={assets.btc.imageUrl} />
88
+ <RemoteImage source={assets.dai.imageUrl} />
89
+ <RemoteImage source={assets.hbar.imageUrl} />
90
+ </RemoteImageGroup>
91
+ ```
92
+
80
93
  ## Props
81
94
 
82
95
  | Prop | Type | Required | Default | Description |
83
96
  | --- | --- | --- | --- | --- |
97
+ | `borderColor` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `borderWidth ? 'bg' : undefined` | - |
98
+ | `borderWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
84
99
  | `children` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | Children content |
85
100
  | `max` | `number` | No | `4` | Indicates the number of remote image before it collapses |
86
101
  | `shape` | `rectangle \| circle \| squircle \| square \| hexagon` | No | `circle` | Shape of all RemoteImage children in the group |
@@ -265,7 +265,7 @@ When using the `inside` label variant, you should always include a `placeholder`
265
265
  label="Password"
266
266
  labelVariant="inside"
267
267
  type="password"
268
- end={<InputIconButton name="visibleInactive" />}
268
+ end={<InputIconButton name="visible" />}
269
269
  placeholder="Enter your password"
270
270
  />
271
271
  </VStack>
@@ -422,6 +422,7 @@ Password Input - Use Icon Buttons at the end for actions like showing a password
422
422
  function PasswordInput() {
423
423
  const [isVisible, setIsVisible] = useState(false);
424
424
  const type = useMemo(() => (isVisible ? 'text' : 'password'), [isVisible]);
425
+ const iconName = useMemo(() => (isVisible ? 'visible' : 'invisible'), [isVisible]);
425
426
 
426
427
  return (
427
428
  <TextInput
@@ -429,8 +430,8 @@ function PasswordInput() {
429
430
  type={type}
430
431
  end={
431
432
  <InputIconButton
432
- name={isVisible ? 'visibleActive' : 'visibleInactive'}
433
- onClick={() => setIsVisible((isVisible) => !setIsVisible)}
433
+ name={iconName}
434
+ onClick={() => setIsVisible((isVisible) => !isVisible)}
434
435
  accessibilityLabel={isVisible ? 'Hide password' : 'Show password'}
435
436
  />
436
437
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coinbase/cds-mcp-server",
3
- "version": "8.34.2",
3
+ "version": "8.35.1",
4
4
  "description": "Coinbase Design System - MCP Server",
5
5
  "repository": {
6
6
  "type": "git",