@coinbase/cds-mcp-server 8.23.0 → 8.24.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 CHANGED
@@ -8,6 +8,10 @@ All notable changes to this project will be documented in this file.
8
8
 
9
9
  <!-- template-start -->
10
10
 
11
+ ## 8.24.0 ((12/1/2025, 06:51 AM PST))
12
+
13
+ This is an artificial version bump with no new change.
14
+
11
15
  ## 8.23.0 ((12/1/2025, 06:33 AM PST))
12
16
 
13
17
  This is an artificial version bump with no new change.
@@ -36,6 +36,40 @@ function Example() {
36
36
  }
37
37
  ```
38
38
 
39
+ ### Custom Label
40
+
41
+ If you need to render a custom label (e.g. a label with a tooltip), you can use the `labelNode` prop.
42
+
43
+ ```jsx
44
+ function Example() {
45
+ const [date, setDate] = useState(null);
46
+ const [error, setError] = useState(null);
47
+
48
+ return (
49
+ <DatePicker
50
+ date={date}
51
+ error={error}
52
+ onChangeDate={setDate}
53
+ onErrorDate={setError}
54
+ label="Birthdate"
55
+ labelNode={
56
+ <HStack alignItems="center" gap={1}>
57
+ <InputLabel>Birthdate</InputLabel>
58
+ <Tooltip content="This will be visible to other users.">
59
+ <Icon color="fgMuted" name="info" size="xs" />
60
+ </Tooltip>
61
+ </HStack>
62
+ }
63
+ calendarIconButtonAccessibilityLabel="Birthdate calendar"
64
+ nextArrowAccessibilityLabel="Next month"
65
+ previousArrowAccessibilityLabel="Previous month"
66
+ helperTextErrorIconAccessibilityLabel="Error"
67
+ invalidDateError="Please enter a valid date"
68
+ />
69
+ );
70
+ }
71
+ ```
72
+
39
73
  ### Invalid dates
40
74
 
41
75
  Always provide the `invalidDateError` prop for when users type an impossible date like 99/99/2000.
@@ -420,6 +454,7 @@ function Example() {
420
454
  | `keyboardAppearance` | `light \| default \| dark` | No | `-` | Determines the color of the keyboard. |
421
455
  | `keyboardType` | `default \| url \| number-pad \| decimal-pad \| numeric \| email-address \| phone-pad \| visible-password \| ascii-capable \| numbers-and-punctuation \| name-phone-pad \| twitter \| web-search` | No | `-` | enum(default, numeric, email-address, ascii-capable, numbers-and-punctuation, url, number-pad, phone-pad, name-phone-pad, decimal-pad, twitter, web-search, visible-password) Determines which keyboard to open, e.g.numeric. The following values work across platforms: - default - numeric - email-address - phone-pad The following values work on iOS: - ascii-capable - numbers-and-punctuation - url - number-pad - name-phone-pad - decimal-pad - twitter - web-search The following values work on Android: - visible-password |
422
456
  | `label` | `string` | No | `-` | Short messageArea indicating purpose of input |
457
+ | `labelNode` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | React node to render label. Takes precedence over label. |
423
458
  | `labelVariant` | `inside \| outside` | No | `'outside'` | The variant of the label. Only used when compact is not true. |
424
459
  | `lineBreakStrategyIOS` | `none \| standard \| hangul-word \| push-out` | No | `-` | Set line break strategy on iOS. |
425
460
  | `maxDate` | `Date` | No | `-` | Maximum date allowed to be selected, inclusive. Dates after the maxDate are disabled. All navigation to months after the maxDate is disabled. |
@@ -1131,6 +1131,39 @@ function CustomClassNamesExamples() {
1131
1131
  }
1132
1132
  ```
1133
1133
 
1134
+ ### Custom Label
1135
+
1136
+ If you need to render a custom label (e.g. a label with a tooltip), you can pass a React Node to the `label` prop.
1137
+
1138
+ ```jsx
1139
+ function CustomLabelExample() {
1140
+ const [value, setValue] = useState('1');
1141
+
1142
+ const options = [
1143
+ { value: '1', label: 'Option 1' },
1144
+ { value: '2', label: 'Option 2' },
1145
+ { value: '3', label: 'Option 3' },
1146
+ ];
1147
+
1148
+ return (
1149
+ <Select
1150
+ label={
1151
+ <HStack alignItems="center" gap={1}>
1152
+ Custom Label
1153
+ <Tooltip content="This will be visible to other users.">
1154
+ <Icon color="fgMuted" name="info" size="xs" />
1155
+ </Tooltip>
1156
+ </HStack>
1157
+ }
1158
+ value={value}
1159
+ onChange={setValue}
1160
+ options={options}
1161
+ placeholder="Select an option"
1162
+ />
1163
+ );
1164
+ }
1165
+ ```
1166
+
1134
1167
  ### Custom components
1135
1168
 
1136
1169
  Select is highly customizable. Use the _Component_ props to customize the various subcomponents in Select.
@@ -323,6 +323,25 @@ When using the `inside` label variant, you should always include a `placeholder`
323
323
  />
324
324
  ```
325
325
 
326
+ #### Custom Label
327
+
328
+ If you need to render a custom label (e.g. a label with a tooltip), you can use the `labelNode` prop.
329
+
330
+ ```jsx
331
+ <TextInput
332
+ label="Display name"
333
+ labelNode={
334
+ <HStack alignItems="center" gap={1}>
335
+ <InputLabel>Display name</InputLabel>
336
+ <Tooltip content="This will be visible to other users.">
337
+ <Icon active color="fg" name="info" size="xs" />
338
+ </Tooltip>
339
+ </HStack>
340
+ }
341
+ placeholder="Satoshi Nakamoto"
342
+ />
343
+ ```
344
+
326
345
  ### Example of Input Objects placed at the End
327
346
 
328
347
  Here are some examples and best practices when using end content in a TextField.
@@ -648,6 +667,7 @@ function TextInputKeyboardExample() {
648
667
  | `keyboardAppearance` | `light \| default \| dark` | No | `-` | Determines the color of the keyboard. |
649
668
  | `keyboardType` | `default \| url \| number-pad \| decimal-pad \| numeric \| email-address \| phone-pad \| visible-password \| ascii-capable \| numbers-and-punctuation \| name-phone-pad \| twitter \| web-search` | No | `-` | enum(default, numeric, email-address, ascii-capable, numbers-and-punctuation, url, number-pad, phone-pad, name-phone-pad, decimal-pad, twitter, web-search, visible-password) Determines which keyboard to open, e.g.numeric. The following values work across platforms: - default - numeric - email-address - phone-pad The following values work on iOS: - ascii-capable - numbers-and-punctuation - url - number-pad - name-phone-pad - decimal-pad - twitter - web-search The following values work on Android: - visible-password |
650
669
  | `label` | `string` | No | `-` | Short messageArea indicating purpose of input |
670
+ | `labelNode` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | React node to render label. Takes precedence over label. |
651
671
  | `labelVariant` | `inside \| outside` | No | `'outside'` | The variant of the label. Only used when compact is not true. |
652
672
  | `lineBreakStrategyIOS` | `none \| standard \| hangul-word \| push-out` | No | `-` | Set line break strategy on iOS. |
653
673
  | `maxFontSizeMultiplier` | `number \| null` | No | `-` | Specifies largest possible scale a font can reach when allowFontScaling is enabled. Possible values: - null/undefined (default): inherit from the parent node or the global default (0) - 0: no max, ignore parent/global default - >= 1: sets the maxFontSizeMultiplier of this node to this value |
@@ -36,6 +36,40 @@ function Example() {
36
36
  }
37
37
  ```
38
38
 
39
+ ### Custom Label
40
+
41
+ If you need to render a custom label (e.g. a label with a tooltip), you can use the `labelNode` prop.
42
+
43
+ ```jsx live
44
+ function Example() {
45
+ const [date, setDate] = useState(null);
46
+ const [error, setError] = useState(null);
47
+
48
+ return (
49
+ <DatePicker
50
+ date={date}
51
+ error={error}
52
+ onChangeDate={setDate}
53
+ onErrorDate={setError}
54
+ label="Birthdate"
55
+ labelNode={
56
+ <HStack alignItems="center" gap={1}>
57
+ <InputLabel>Birthdate</InputLabel>
58
+ <Tooltip content="This will be visible to other users.">
59
+ <Icon active color="fg" name="info" size="xs" tabIndex={0} />
60
+ </Tooltip>
61
+ </HStack>
62
+ }
63
+ calendarIconButtonAccessibilityLabel="Birthdate calendar"
64
+ nextArrowAccessibilityLabel="Next month"
65
+ previousArrowAccessibilityLabel="Previous month"
66
+ helperTextErrorIconAccessibilityLabel="Error"
67
+ invalidDateError="Please enter a valid date"
68
+ />
69
+ );
70
+ }
71
+ ```
72
+
39
73
  ### Invalid dates
40
74
 
41
75
  Always provide the `invalidDateError` prop for when users type an impossible date like 99/99/2000.
@@ -475,6 +509,7 @@ function Example() {
475
509
  | `invalidDateError` | `string` | No | `'Please enter a valid date'` | Error text to display when an impossible date is selected, e.g. 99/99/2000. This should always be defined for accessibility. Also displays when a date is selected that is more than 100 years before the minDate, or more than 100 years after the maxDate. |
476
510
  | `key` | `Key \| null` | No | `-` | - |
477
511
  | `label` | `string` | No | `-` | Short messageArea indicating purpose of input |
512
+ | `labelNode` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | React node to render label. Takes precedence over label. |
478
513
  | `labelVariant` | `inside \| outside` | No | `'outside'` | The variant of the label. Only used when compact is not true. |
479
514
  | `maxDate` | `Date` | No | `-` | Maximum date allowed to be selected, inclusive. Dates after the maxDate are disabled. All navigation to months after the maxDate is disabled. |
480
515
  | `minDate` | `Date` | No | `-` | Minimum date allowed to be selected, inclusive. Dates before the minDate are disabled. All navigation to months before the minDate is disabled. |
@@ -1037,6 +1037,39 @@ function CustomClassNamesExamples() {
1037
1037
  }
1038
1038
  ```
1039
1039
 
1040
+ ### Custom Label
1041
+
1042
+ If you need to render a custom label (e.g. a label with a tooltip), you can pass a React Node to the `label` prop.
1043
+
1044
+ ```jsx live
1045
+ function CustomLabelExample() {
1046
+ const [value, setValue] = useState('1');
1047
+
1048
+ const options = [
1049
+ { value: '1', label: 'Option 1' },
1050
+ { value: '2', label: 'Option 2' },
1051
+ { value: '3', label: 'Option 3' },
1052
+ ];
1053
+
1054
+ return (
1055
+ <Select
1056
+ label={
1057
+ <HStack alignItems="center" gap={1}>
1058
+ Custom Label
1059
+ <Tooltip content="This will be visible to other users.">
1060
+ <Icon active color="fg" name="info" size="xs" tabIndex={0} />
1061
+ </Tooltip>
1062
+ </HStack>
1063
+ }
1064
+ value={value}
1065
+ onChange={setValue}
1066
+ options={options}
1067
+ placeholder="Select an option"
1068
+ />
1069
+ );
1070
+ }
1071
+ ```
1072
+
1040
1073
  ### Custom components
1041
1074
 
1042
1075
  Select is highly customizable. Use the _Component_ props to customize the various subcomponents in Select.
@@ -266,6 +266,28 @@ When using the `inside` label variant, you should always include a `placeholder`
266
266
  </VStack>
267
267
  ```
268
268
 
269
+ #### Custom Label
270
+
271
+ If you need to render a custom label (e.g. a label with a tooltip), you can use the `labelNode` prop.
272
+
273
+ ```jsx live
274
+ <TextInput
275
+ id="display-name-tooltip"
276
+ label="Display name"
277
+ labelNode={
278
+ <InputLabel htmlFor="display-name-tooltip">
279
+ <HStack alignItems="center" gap={1}>
280
+ Display name
281
+ <Tooltip content="This will be visible to other users.">
282
+ <Icon active color="fg" name="info" size="xs" tabIndex={0} />
283
+ </Tooltip>
284
+ </HStack>
285
+ </InputLabel>
286
+ }
287
+ placeholder="Satoshi Nakamoto"
288
+ />
289
+ ```
290
+
269
291
  #### StartContent & EndContent
270
292
 
271
293
  ##### Examples of Input Objects placed at the Start
@@ -635,6 +657,7 @@ function TextInputKeyboardExample() {
635
657
  | `inputNode` | `ReactElement` | No | `-` | Customize the element which the input area will be rendered as. Adds ability to render the input area as a <textarea />, <input /> etc... By default, the input area will be rendered as an <input />. |
636
658
  | `key` | `Key \| null` | No | `-` | - |
637
659
  | `label` | `string` | No | `-` | Short messageArea indicating purpose of input |
660
+ | `labelNode` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | React node to render label. Takes precedence over label. |
638
661
  | `labelVariant` | `inside \| outside` | No | `'outside'` | The variant of the label. Only used when compact is not true. |
639
662
  | `onChange` | `ChangeEventHandler<HTMLInputElement>` | No | `-` | - |
640
663
  | `onClick` | `(MouseEventHandler<Element> & MouseEventHandler<HTMLInputElement>)` | No | `-` | Callback fired when pressed/clicked |
@@ -51,13 +51,13 @@ function TooltipPosition() {
51
51
  <Box position="relative">
52
52
  Set your default display currency.
53
53
  <Tooltip content="I am not centered horizontally">
54
- <Icon active color="fg" name="info" paddingStart={1} position="absolute" />
54
+ <Icon active color="fg" name="info" paddingStart={1} position="absolute" tabIndex={0} />
55
55
  </Tooltip>
56
56
  </Box>
57
57
  <Box position="relative">
58
58
  Set your default display currency.
59
59
  <Tooltip content="I am centered horizontally" position="absolute">
60
- <Icon active color="fg" name="info" paddingStart={1} />
60
+ <Icon active color="fg" name="info" paddingStart={1} tabIndex={0} />
61
61
  </Tooltip>
62
62
  </Box>
63
63
  </VStack>
@@ -81,6 +81,28 @@ function TooltipColorSchemeOptOut() {
81
81
  }
82
82
  ```
83
83
 
84
+ ### Tooltip in TextInput
85
+
86
+ You can use tooltips within `TextInput` to provide more context.
87
+
88
+ ```jsx live
89
+ <TextInput
90
+ id="tooltip-input-example"
91
+ label="Display name"
92
+ labelNode={
93
+ <InputLabel htmlFor="tooltip-input-example">
94
+ <HStack alignItems="center" gap={1}>
95
+ Display name
96
+ <Tooltip content="This will be visible to other users.">
97
+ <Icon active color="fg" name="info" size="xs" tabIndex={0} />
98
+ </Tooltip>
99
+ </HStack>
100
+ </InputLabel>
101
+ }
102
+ placeholder="Satoshi Nakamoto"
103
+ />
104
+ ```
105
+
84
106
  ## Props
85
107
 
86
108
  | Prop | Type | Required | Default | Description |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coinbase/cds-mcp-server",
3
- "version": "8.23.0",
3
+ "version": "8.24.0",
4
4
  "description": "Coinbase Design System - MCP Server",
5
5
  "repository": {
6
6
  "type": "git",