@coinbase/cds-mcp-server 8.28.2 → 8.29.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.
Files changed (78) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/mcp-docs/mobile/components/Accordion.txt +3 -1
  3. package/mcp-docs/mobile/components/Alert.txt +3 -1
  4. package/mcp-docs/mobile/components/Banner.txt +14 -14
  5. package/mcp-docs/mobile/components/Carousel.txt +24 -24
  6. package/mcp-docs/mobile/components/Combobox.txt +187 -0
  7. package/mcp-docs/mobile/components/ContainedAssetCard.txt +4 -4
  8. package/mcp-docs/mobile/components/ContentCard.txt +29 -27
  9. package/mcp-docs/mobile/components/ContentCardBody.txt +4 -4
  10. package/mcp-docs/mobile/components/ContentCardHeader.txt +2 -2
  11. package/mcp-docs/mobile/components/FloatingAssetCard.txt +6 -6
  12. package/mcp-docs/mobile/components/LineChart.txt +3 -2
  13. package/mcp-docs/mobile/components/MultiContentModule.txt +6 -6
  14. package/mcp-docs/mobile/components/Numpad.txt +2 -2
  15. package/mcp-docs/mobile/components/PageHeader.txt +3 -1
  16. package/mcp-docs/mobile/components/PeriodSelector.txt +4 -4
  17. package/mcp-docs/mobile/components/Pressable.txt +6 -2
  18. package/mcp-docs/mobile/components/ProgressBarWithFixedLabels.txt +4 -4
  19. package/mcp-docs/mobile/components/ProgressBarWithFloatLabel.txt +2 -2
  20. package/mcp-docs/mobile/components/ProgressCircle.txt +5 -1
  21. package/mcp-docs/mobile/components/SelectChip.txt +2 -0
  22. package/mcp-docs/mobile/components/SelectChipAlpha.txt +1 -1
  23. package/mcp-docs/mobile/components/SlideButton.txt +2 -2
  24. package/mcp-docs/mobile/components/Sparkline.txt +3 -1
  25. package/mcp-docs/mobile/components/SparklineGradient.txt +3 -1
  26. package/mcp-docs/mobile/components/SparklineInteractiveHeader.txt +3 -1
  27. package/mcp-docs/mobile/components/TabbedChips.txt +3 -1
  28. package/mcp-docs/mobile/components/Tag.txt +19 -9
  29. package/mcp-docs/mobile/components/TextInput.txt +9 -3
  30. package/mcp-docs/mobile/components/Tray.txt +2 -0
  31. package/mcp-docs/mobile/components/UpsellCard.txt +16 -16
  32. package/mcp-docs/mobile/hooks/useDimensions.txt +4 -4
  33. package/mcp-docs/mobile/hooks/useMergeRefs.txt +4 -4
  34. package/mcp-docs/mobile/hooks/usePreviousValue.txt +5 -5
  35. package/mcp-docs/mobile/hooks/useRefMap.txt +6 -6
  36. package/mcp-docs/mobile/routes.txt +1 -0
  37. package/mcp-docs/web/components/Accordion.txt +3 -1
  38. package/mcp-docs/web/components/Alert.txt +3 -1
  39. package/mcp-docs/web/components/Banner.txt +14 -14
  40. package/mcp-docs/web/components/Carousel.txt +71 -65
  41. package/mcp-docs/web/components/Combobox.txt +176 -0
  42. package/mcp-docs/web/components/ContainedAssetCard.txt +4 -4
  43. package/mcp-docs/web/components/ContentCard.txt +29 -27
  44. package/mcp-docs/web/components/ContentCardBody.txt +4 -4
  45. package/mcp-docs/web/components/ContentCardHeader.txt +2 -2
  46. package/mcp-docs/web/components/FloatingAssetCard.txt +6 -6
  47. package/mcp-docs/web/components/FullscreenModal.txt +12 -4
  48. package/mcp-docs/web/components/GridColumn.txt +12 -4
  49. package/mcp-docs/web/components/LineChart.txt +3 -2
  50. package/mcp-docs/web/components/MultiContentModule.txt +6 -6
  51. package/mcp-docs/web/components/PageHeader.txt +11 -9
  52. package/mcp-docs/web/components/ProgressBarWithFixedLabels.txt +4 -4
  53. package/mcp-docs/web/components/ProgressBarWithFloatLabel.txt +2 -2
  54. package/mcp-docs/web/components/ProgressCircle.txt +5 -1
  55. package/mcp-docs/web/components/SelectChipAlpha.txt +1 -1
  56. package/mcp-docs/web/components/Sidebar.txt +2 -2
  57. package/mcp-docs/web/components/Sparkline.txt +3 -1
  58. package/mcp-docs/web/components/SparklineGradient.txt +3 -1
  59. package/mcp-docs/web/components/SparklineInteractiveHeader.txt +3 -1
  60. package/mcp-docs/web/components/TabbedChips.txt +3 -1
  61. package/mcp-docs/web/components/TableBody.txt +2 -2
  62. package/mcp-docs/web/components/TableCaption.txt +2 -2
  63. package/mcp-docs/web/components/TableCell.txt +6 -6
  64. package/mcp-docs/web/components/Tag.txt +19 -9
  65. package/mcp-docs/web/components/TextInput.txt +9 -3
  66. package/mcp-docs/web/components/Tray.txt +2 -1
  67. package/mcp-docs/web/components/UpsellCard.txt +16 -16
  68. package/mcp-docs/web/hooks/useDimensions.txt +4 -4
  69. package/mcp-docs/web/hooks/useHasMounted.txt +7 -3
  70. package/mcp-docs/web/hooks/useIsoEffect.txt +1 -1
  71. package/mcp-docs/web/hooks/useMergeRefs.txt +4 -4
  72. package/mcp-docs/web/hooks/useOverlayContentContext.txt +8 -8
  73. package/mcp-docs/web/hooks/usePreviousValue.txt +5 -5
  74. package/mcp-docs/web/hooks/useRefMap.txt +6 -6
  75. package/mcp-docs/web/hooks/useScrollBlocker.txt +1 -1
  76. package/mcp-docs/web/hooks/useTheme.txt +3 -3
  77. package/mcp-docs/web/routes.txt +1 -0
  78. package/package.json +1 -1
@@ -58,9 +58,9 @@ function Example() {
58
58
  {
59
59
  title: '#7560',
60
60
  description: (
61
- <TextLabel2 color="fgPositive" numberOfLines={2}>
61
+ <Text font="label2" color="fgPositive" numberOfLines={2}>
62
62
  &#x2197;6.37%
63
- </TextLabel2>
63
+ </Text>
64
64
  ),
65
65
  subtitle: 'Bored Ape',
66
66
  onPress: NoopFn,
@@ -76,9 +76,9 @@ function Example() {
76
76
  {
77
77
  title: '#2015',
78
78
  description: (
79
- <TextLabel2 color="fgNegative" numberOfLines={2}>
79
+ <Text font="label2" color="fgNegative" numberOfLines={2}>
80
80
  &#x2198;6.37%
81
- </TextLabel2>
81
+ </Text>
82
82
  ),
83
83
  subtitle: 'Pudgy Penguins',
84
84
  onPress: NoopFn,
@@ -115,9 +115,9 @@ function Example() {
115
115
  {
116
116
  title: 'Parallel',
117
117
  description: (
118
- <TextLabel2 color="fgMuted" numberOfLines={2}>
118
+ <Text font="label2" color="fgMuted" numberOfLines={2}>
119
119
  &#9733;4.5
120
- </TextLabel2>
120
+ </Text>
121
121
  ),
122
122
  onPress: NoopFn,
123
123
  media: (
@@ -1314,13 +1314,14 @@ function AssetPriceWithDottedArea() {
1314
1314
  <SegmentedTab
1315
1315
  ref={ref}
1316
1316
  label={
1317
- <TextLabel1
1317
+ <Text
1318
+ font="label1"
1318
1319
  style={{
1319
1320
  color: isActive ? assets.btc.color : undefined,
1320
1321
  }}
1321
1322
  >
1322
1323
  {label}
1323
- </TextLabel1>
1324
+ </Text>
1324
1325
  }
1325
1326
  {...props}
1326
1327
  />
@@ -215,9 +215,9 @@ function Example() {
215
215
  <VStack>
216
216
  <HStack justifyContent="center" zIndex={1}>
217
217
  <Box background="background" paddingHorizontal={1.5}>
218
- <TextBody as="span" color="foregroundMuted">
218
+ <Text as="span" font="body" color="foregroundMuted">
219
219
  OR
220
- </TextBody>
220
+ </Text>
221
221
  </Box>
222
222
  </HStack>
223
223
  <Divider marginTop={-1.5} paddingBottom={1.5} />
@@ -235,9 +235,9 @@ function Example() {
235
235
  >
236
236
  <Box padding={2}>{icon}</Box>
237
237
  </Pressable>
238
- <TextLabel2 as="span" color="foregroundMuted" paddingTop={1}>
238
+ <Text as="span" font="label2" color="foregroundMuted" paddingTop={1}>
239
239
  {name}
240
- </TextLabel2>
240
+ </Text>
241
241
  </VStack>
242
242
  ))}
243
243
  </HStack>
@@ -251,13 +251,13 @@ function Example() {
251
251
  actionAccessibilityLabel="Continue"
252
252
  title="Sign in to Coinbase"
253
253
  description={
254
- <TextBody as="p" color="foregroundMuted">
254
+ <Text as="p" font="body" color="foregroundMuted">
255
255
  By signing in, you agree to our{' '}
256
256
  <Link to="https://www.google.com/" openInNewWindow underline={false}>
257
257
  Privacy Policy
258
258
  </Link>
259
259
  . Not your device? Use a private window.
260
- </TextBody>
260
+ </Text>
261
261
  }
262
262
  accessibilityLabel="Login section"
263
263
  pictogram={<LogoMark size={32} />}
@@ -154,7 +154,7 @@ const TransactionalNumpadExample = () => {
154
154
  title="Invalid Input"
155
155
  variant="warning"
156
156
  >
157
- <Text>Enter an amount greater than zero.</TextBody>
157
+ <Text>Enter an amount greater than zero.</Text>
158
158
  </Banner>
159
159
  );
160
160
  if (parseFloat(value) >= VALUE_MAX) {
@@ -167,7 +167,7 @@ const TransactionalNumpadExample = () => {
167
167
  title="You've reached the maximum value"
168
168
  variant="warning"
169
169
  >
170
- <Text>Max ${VALUE_MAX}</TextBody>
170
+ <Text>Max ${VALUE_MAX}</Text>
171
171
  </Banner>
172
172
  );
173
173
  }
@@ -79,7 +79,9 @@ function Example() {
79
79
  title="Page Title"
80
80
  />
81
81
  <Box padding={3}>
82
- <TextBody>Content below with padding 3 to align visually with the header actions.</TextBody>
82
+ <Text font="body">
83
+ Content below with padding 3 to align visually with the header actions.
84
+ </Text>
83
85
  </Box>
84
86
  </>
85
87
  );
@@ -174,9 +174,9 @@ function ColoredBTCExample() {
174
174
 
175
175
  const wrappedLabel =
176
176
  typeof label === 'string' ? (
177
- <TextLabel1 dangerouslySetColor={isActive ? btcColor : theme.color.fg}>
177
+ <Text font="label1" dangerouslySetColor={isActive ? btcColor : theme.color.fg}>
178
178
  {label}
179
- </TextLabel1>
179
+ </Text>
180
180
  ) : (
181
181
  label
182
182
  );
@@ -274,9 +274,9 @@ function ColoredExcludingLiveExample() {
274
274
 
275
275
  const wrappedLabel =
276
276
  typeof label === 'string' ? (
277
- <TextLabel1 dangerouslySetColor={isActive ? btcColor : theme.color.fg}>
277
+ <Text font="label1" dangerouslySetColor={isActive ? btcColor : theme.color.fg}>
278
278
  {label}
279
- </TextLabel1>
279
+ </Text>
280
280
  ) : (
281
281
  label
282
282
  );
@@ -23,7 +23,9 @@ Pressables support an `onPress` prop for handling click/press interactions. When
23
23
  borderRadius={300}
24
24
  >
25
25
  <Box as="span" padding={2}>
26
- <TextHeadline as="span">Click me...</TextHeadline>
26
+ <Text as="span" font="headline">
27
+ Click me...
28
+ </Text>
27
29
  </Box>
28
30
  </Pressable>
29
31
  ```
@@ -61,7 +63,9 @@ Pressables support an `onPress` prop for handling click/press interactions. When
61
63
  borderRadius={300}
62
64
  >
63
65
  <Box as="span" padding={2}>
64
- <TextHeadline as="span">Click me...</TextHeadline>
66
+ <Text as="span" font="headline">
67
+ Click me...
68
+ </Text>
65
69
  </Box>
66
70
  </Pressable>
67
71
  ```
@@ -63,17 +63,17 @@ function Example() {
63
63
 
64
64
  const renderStartLabelNum = useCallback((num, disabled) => {
65
65
  return (
66
- <TextTitle3 disabled={disabled} as="span">
66
+ <Text disabled={disabled} as="span" font="title3">
67
67
  ${num.toLocaleString()}
68
- </TextTitle3>
68
+ </Text>
69
69
  );
70
70
  }, []);
71
71
 
72
72
  const renderEndLabelNum = useCallback((num, disabled) => {
73
73
  return (
74
- <TextLabel2 disabled={disabled} as="span" align="end" noWrap>
74
+ <Text disabled={disabled} as="span" font="label2" align="end" noWrap>
75
75
  ${num.toLocaleString()} left
76
- </TextLabel2>
76
+ </Text>
77
77
  );
78
78
  }, []);
79
79
 
@@ -56,9 +56,9 @@ function Example() {
56
56
 
57
57
  const renderLabelNum = useCallback((num, disabled) => {
58
58
  return (
59
- <TextTitle3 as="span" disabled={disabled}>
59
+ <Text as="span" font="title3" disabled={disabled}>
60
60
  ${num.toLocaleString()}
61
- </TextTitle3>
61
+ </Text>
62
62
  );
63
63
  }, []);
64
64
 
@@ -165,7 +165,11 @@ The progress circle can be customized with styles.
165
165
  stroke: 'transparent',
166
166
  },
167
167
  }}
168
- contentNode={<TextTitle1 color="fgPrimary">40%</TextTitle1>}
168
+ contentNode={
169
+ <Text font="title1" color="fgPrimary">
170
+ 40%
171
+ </Text>
172
+ }
169
173
  weight="semiheavy"
170
174
  />
171
175
  <ProgressCircle
@@ -233,9 +233,11 @@ function SelectChipExample() {
233
233
  | `fontFamily` | `inherit \| FontFamily` | No | `-` | - |
234
234
  | `fontSize` | `inherit \| FontSize` | No | `-` | - |
235
235
  | `fontWeight` | `inherit \| FontWeight` | No | `-` | - |
236
+ | `footer` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | ReactNode to render as the Tray footer |
236
237
  | `gap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
237
238
  | `handleBarAccessibilityLabel` | `string` | No | `-` | Accessibility label for handlebar |
238
239
  | `hardwareAccelerated` | `boolean` | No | `-` | Controls whether to force hardware acceleration for the underlying window. |
240
+ | `header` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | ReactNode to render as the Tray header |
239
241
  | `height` | `string \| number` | No | `-` | - |
240
242
  | `hideHandleBar` | `boolean` | No | `false` | The HandleBar by default only is used for a bottom pinned drawer. This removes it. |
241
243
  | `invertColorScheme` | `boolean` | No | `false` | Invert the foreground and background colors to emphasize the Chip. Depending on your theme, it may be dangerous to use this prop in conjunction with transparentWhileInactive. |
@@ -362,6 +362,6 @@ function ExampleDisabled() {
362
362
  | `style` | `null \| false \| ViewStyle \| RegisteredStyle<ViewStyle> \| RecursiveArray<ViewStyle \| Falsy \| RegisteredStyle<ViewStyle>>` | No | `-` | Inline styles for the root element |
363
363
  | `styles` | `{ root?: StyleProp<ViewStyle>; control?: StyleProp<ViewStyle>; controlStartNode?: StyleProp<ViewStyle>; controlInputNode?: StyleProp<ViewStyle>; controlValueNode?: StyleProp<ViewStyle>; controlLabelNode?: StyleProp<ViewStyle>; controlHelperTextNode?: StyleProp<ViewStyle>; controlEndNode?: StyleProp<ViewStyle>; controlBlendStyles?: InteractableBlendStyles; dropdown?: StyleProp<ViewStyle>; option?: StyleProp<ViewStyle>; optionCell?: StyleProp<ViewStyle>; optionContent?: StyleProp<ViewStyle>; optionLabel?: StyleProp<ViewStyle>; optionDescription?: StyleProp<ViewStyle>; optionBlendStyles?: InteractableBlendStyles \| undefined; selectAllDivider?: StyleProp<ViewStyle>; emptyContentsContainer?: StyleProp<ViewStyle>; emptyContentsText?: StyleProp<ViewStyle>; optionGroup?: StyleProp<ViewStyle>; } \| undefined` | No | `-` | Custom styles for different parts of the select |
364
364
  | `testID` | `string` | No | `-` | Test ID for the root element |
365
- | `type` | `single \| multi` | No | `-` | Whether the select allows single or multiple selections |
365
+ | `type` | `multi \| single` | No | `-` | Whether the select allows single or multiple selections |
366
366
 
367
367
 
@@ -164,7 +164,7 @@ function Example() {
164
164
  >
165
165
  <HStack alignItems="center" height="100%" justifyContent="center" width="100%">
166
166
  <HStack height="100%" pin="right" alignItems="center" padding={2}>
167
- <TextLabel1>➡️</TextLabel1>
167
+ <Text font="label1">➡️</Text>
168
168
  </HStack>
169
169
  </HStack>
170
170
  </Pressable>
@@ -182,7 +182,7 @@ function Example() {
182
182
  justifyContent="center"
183
183
  width="100%"
184
184
  >
185
- <TextHeadline>Slide me</TextHeadline>
185
+ <Text font="headline">Slide me</Text>
186
186
  </HStack>
187
187
  );
188
188
 
@@ -76,7 +76,9 @@ function Example() {
76
76
  const path = useSparklinePath({ ...dimensions, data: prices, yAxisScalingFactor });
77
77
  return (
78
78
  <VStack gap={2}>
79
- <TextLabel1 as="p">Scale {yAxisScalingFactor}</TextLabel1>
79
+ <Text as="p" font="label1">
80
+ Scale {yAxisScalingFactor}
81
+ </Text>
80
82
  <Sparkline {...dimensions} path={path} color="auto" yAxisScalingFactor={yAxisScalingFactor} />
81
83
  </VStack>
82
84
  );
@@ -55,7 +55,9 @@ function Example() {
55
55
  const path = useSparklinePath({ ...dimensions, data: prices, yAxisScalingFactor });
56
56
  return (
57
57
  <VStack gap={2}>
58
- <TextLabel1 as="p">Scale {yAxisScalingFactor}</TextLabel1>
58
+ <Text as="p" font="label1">
59
+ Scale {yAxisScalingFactor}
60
+ </Text>
59
61
  <SparklineGradient
60
62
  {...dimensions}
61
63
  path={path}
@@ -51,7 +51,9 @@ The fill will be added by default
51
51
  labelNode={
52
52
  <HStack gap={1} alignItems="center" paddingBottom={0}>
53
53
  <Icon active name="wallet" size="s" />
54
- <TextTitle3 as="span">CustomHeader</TextTitle3>
54
+ <Text as="span" font="title3">
55
+ CustomHeader
56
+ </Text>
55
57
  </HStack>
56
58
  }
57
59
  />
@@ -36,7 +36,9 @@ function TabbedChipsExample() {
36
36
  return (
37
37
  <VStack maxWidth={375} borderRadius={400} bordered paddingX={2} gap={2} paddingY={2}>
38
38
  <VStack paddingTop={1}>
39
- <TextTitle3 as="p">Popular assets</TextTitle3>
39
+ <Text as="p" font="title3">
40
+ Popular assets
41
+ </Text>
40
42
  </VStack>
41
43
  <SearchInput compact placeholder="Search by name" />
42
44
  <TabbedChips value={value} onChange={setValue} tabs={tabs} />
@@ -52,10 +52,14 @@ You can control the visual prominence of the Tag using the `emphasis` prop. By d
52
52
  <HStack justifyContent="space-between" gap="2" alignItems="center">
53
53
  <VStack gap={0.5}>
54
54
  <HStack gap={1}>
55
- <TextHeadline as="p">Tax account status</TextHeadline>
55
+ <Text as="p" font="headline">
56
+ Tax account status
57
+ </Text>
56
58
  <Tag colorScheme="red">Not verified</Tag>
57
59
  </HStack>
58
- <TextBody as="p">Verify your info for tax reporting purposes.</TextBody>
60
+ <Text as="p" font="body">
61
+ Verify your info for tax reporting purposes.
62
+ </Text>
59
63
  </VStack>
60
64
  <Button>Get started</Button>
61
65
  </HStack>
@@ -67,9 +71,9 @@ You can control the visual prominence of the Tag using the `emphasis` prop. By d
67
71
  function MarginExample() {
68
72
  const renderStartLabelNum = useCallback((num, disabled) => {
69
73
  return (
70
- <TextTitle3 disabled={disabled} as="span">
74
+ <Text disabled={disabled} as="span" font="title3">
71
75
  ${num.toLocaleString()} (10%)
72
- </TextTitle3>
76
+ </Text>
73
77
  );
74
78
  }, []);
75
79
 
@@ -91,12 +95,14 @@ function MarginExample() {
91
95
  >
92
96
  <VStack gap={0.5}>
93
97
  <HStack gap={1}>
94
- <TextHeadline as="p">Margin ratio</TextHeadline>
98
+ <Text as="p" font="headline">
99
+ Margin ratio
100
+ </Text>
95
101
  <Tag colorScheme="green">Low</Tag>
96
102
  </HStack>
97
- <TextBody as="p">
103
+ <Text as="p" font="body">
98
104
  The portion of your balance being held on margin is low. No action is required.
99
- </TextBody>
105
+ </Text>
100
106
  </VStack>
101
107
  <ProgressBarWithFixedLabels
102
108
  startLabel={{ value: 400, render: renderStartLabelNum }}
@@ -118,10 +124,14 @@ function MarginExample() {
118
124
  >
119
125
  <VStack gap={0.5}>
120
126
  <HStack gap={1}>
121
- <TextHeadline as="p">Margin ratio</TextHeadline>
127
+ <Text as="p" font="headline">
128
+ Margin ratio
129
+ </Text>
122
130
  <Tag colorScheme="red">high</Tag>
123
131
  </HStack>
124
- <TextBody as="p">Margin usage is high. Deposit funds to avoid liquidation</TextBody>
132
+ <Text as="p" font="body">
133
+ Margin usage is high. Deposit funds to avoid liquidation
134
+ </Text>
125
135
  </VStack>
126
136
  <ProgressBarWithFixedLabels
127
137
  startLabel={{ value: 60000, render: renderStartLabelNum }}
@@ -126,7 +126,9 @@ with a TypeAhead component.
126
126
  ```jsx
127
127
  <VStack gap={3}>
128
128
  <VStack>
129
- <TextHeadline as="p">Default sentiment</TextHeadline>
129
+ <Text as="p" font="headline">
130
+ Default sentiment
131
+ </Text>
130
132
  <TextInput
131
133
  label="Campaign title"
132
134
  placeholder="Title"
@@ -135,7 +137,9 @@ with a TypeAhead component.
135
137
  </VStack>
136
138
 
137
139
  <VStack>
138
- <TextHeadline as="p">Positive sentiment</TextHeadline>
140
+ <Text as="p" font="headline">
141
+ Positive sentiment
142
+ </Text>
139
143
  <TextInput
140
144
  label="Address"
141
145
  helperText="Valid BTC address"
@@ -146,7 +150,9 @@ with a TypeAhead component.
146
150
  </VStack>
147
151
 
148
152
  <VStack>
149
- <TextHeadline as="p">Negative Sentiment</TextHeadline>
153
+ <Text as="p" font="headline">
154
+ Negative Sentiment
155
+ </Text>
150
156
  <TextInput
151
157
  label="Address"
152
158
  helperText="Invalid BTC address"
@@ -215,8 +215,10 @@ Note: The Tray component is built on top of the Drawer component and provides a
215
215
  | `animated` | `boolean` | No | `-` | - |
216
216
  | `animationType` | `none \| slide \| fade` | No | `-` | The animationType prop controls how the modal animates. - slide slides in from the bottom - fade fades into view - none appears without an animation |
217
217
  | `disableCapturePanGestureToDismiss` | `boolean` | No | `false` | Prevents the Drawer from capturing pan gestures on children. Set to true when using a ScrollView as a child |
218
+ | `footer` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | ReactNode to render as the Tray footer |
218
219
  | `handleBarAccessibilityLabel` | `string` | No | `-` | Accessibility label for handlebar |
219
220
  | `hardwareAccelerated` | `boolean` | No | `-` | Controls whether to force hardware acceleration for the underlying window. |
221
+ | `header` | `null \| string \| number \| false \| true \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal` | No | `-` | ReactNode to render as the Tray header |
220
222
  | `hideHandleBar` | `boolean` | No | `false` | The HandleBar by default only is used for a bottom pinned drawer. This removes it. |
221
223
  | `key` | `Key \| null` | No | `-` | - |
222
224
  | `onBlur` | `(() => void)` | No | `-` | Callback fired when the overlay is pressed, or swipe to close |
@@ -100,14 +100,14 @@ function Example() {
100
100
  <UpsellCard
101
101
  {...card}
102
102
  title={
103
- <TextHeadline color="fgInverse" as="h3">
103
+ <Text color="fgInverse" as="h3" font="headline">
104
104
  {card.title}
105
- </TextHeadline>
105
+ </Text>
106
106
  }
107
107
  description={
108
- <TextLabel2 as="p" numberOfLines={3} color="fgInverse">
108
+ <Text as="p" font="label2" numberOfLines={3} color="fgInverse">
109
109
  {card.description}
110
- </TextLabel2>
110
+ </Text>
111
111
  }
112
112
  />
113
113
  );
@@ -162,14 +162,14 @@ function Example() {
162
162
  <UpsellCard
163
163
  {...card}
164
164
  title={
165
- <TextHeadline color="fgInverse" as="h3">
165
+ <Text color="fgInverse" as="h3" font="headline">
166
166
  {card.title}
167
- </TextHeadline>
167
+ </Text>
168
168
  }
169
169
  description={
170
- <TextLabel2 as="p" numberOfLines={3} color="fgInverse">
170
+ <Text as="p" font="label2" numberOfLines={3} color="fgInverse">
171
171
  {card.description}
172
- </TextLabel2>
172
+ </Text>
173
173
  }
174
174
  />
175
175
  );
@@ -224,14 +224,14 @@ function Example() {
224
224
  <UpsellCard
225
225
  {...card}
226
226
  title={
227
- <TextHeadline color="fgInverse" as="h3">
227
+ <Text color="fgInverse" as="h3" font="headline">
228
228
  {card.title}
229
- </TextHeadline>
229
+ </Text>
230
230
  }
231
231
  description={
232
- <TextLabel2 as="p" numberOfLines={3} color="fgInverse">
232
+ <Text as="p" font="label2" numberOfLines={3} color="fgInverse">
233
233
  {card.description}
234
- </TextLabel2>
234
+ </Text>
235
235
  }
236
236
  />
237
237
  );
@@ -286,14 +286,14 @@ function Example() {
286
286
  <UpsellCard
287
287
  {...card}
288
288
  title={
289
- <TextHeadline color="fgInverse" as="h3">
289
+ <Text color="fgInverse" as="h3" font="headline">
290
290
  {card.title}
291
- </TextHeadline>
291
+ </Text>
292
292
  }
293
293
  description={
294
- <TextLabel2 as="p" numberOfLines={3} color="fgInverse">
294
+ <Text as="p" font="label2" numberOfLines={3} color="fgInverse">
295
295
  {card.description}
296
- </TextLabel2>
296
+ </Text>
297
297
  }
298
298
  />
299
299
  );
@@ -45,10 +45,10 @@ function Example() {
45
45
  return (
46
46
  <Box backgroundColor="bgAlternate" padding={3} borderRadius={300} width="100%">
47
47
  <VStack gap={2}>
48
- <TextHeadline>
48
+ <Text font="headline">
49
49
  Screen dimensions: {screenWidth}x{screenHeight}
50
- </TextHeadline>
51
- <TextHeadline>Status bar height: {statusBarHeight}px</TextHeadline>
50
+ </Text>
51
+ <Text font="headline">Status bar height: {statusBarHeight}px</Text>
52
52
  </VStack>
53
53
  </Box>
54
54
  );
@@ -64,7 +64,7 @@ function Example() {
64
64
 
65
65
  return (
66
66
  <Box backgroundColor="bgAlternate" height={contentHeight} paddingTop={statusBarHeight}>
67
- <TextHeadline>Content below status bar</TextHeadline>
67
+ <Text font="headline">Content below status bar</Text>
68
68
  </Box>
69
69
  );
70
70
  }
@@ -47,7 +47,7 @@ function Example() {
47
47
 
48
48
  return (
49
49
  <Box ref={refs} padding={3} background="bgAlternate" borderRadius={300}>
50
- <TextBody>This box uses a merged ref</TextBody>
50
+ <Text font="body">This box uses a merged ref</Text>
51
51
  </Box>
52
52
  );
53
53
  });
@@ -76,7 +76,7 @@ function Example() {
76
76
  return (
77
77
  <VStack gap={2}>
78
78
  <Box ref={mergedRefs} padding={3} background="bgAlternate" borderRadius={300}>
79
- <TextBody>This element is referenced by three refs</TextBody>
79
+ <Text font="body">This element is referenced by three refs</Text>
80
80
  </Box>
81
81
  <Button onClick={checkRefs}>Check Refs</Button>
82
82
  </VStack>
@@ -106,9 +106,9 @@ function Example() {
106
106
  return (
107
107
  <VStack gap={2}>
108
108
  <Box ref={refs} padding={3} background="bgAlternate" borderRadius={300} width="100%">
109
- <TextBody>This box uses both function and object refs</TextBody>
109
+ <Text font="body">This box uses both function and object refs</Text>
110
110
  </Box>
111
- <TextBody>Box width: {elementWidth}px</TextBody>
111
+ <Text font="body">Box width: {elementWidth}px</Text>
112
112
  </VStack>
113
113
  );
114
114
  }
@@ -39,8 +39,8 @@ function Example() {
39
39
  return (
40
40
  <VStack gap={3} alignItems="start">
41
41
  <VStack gap={1}>
42
- <TextHeadline>Current count: {count}</TextHeadline>
43
- <TextHeadline>Previous count: {previousCount ?? 'None'}</TextHeadline>
42
+ <Text font="headline">Current count: {count}</Text>
43
+ <Text font="headline">Previous count: {previousCount ?? 'None'}</Text>
44
44
  </VStack>
45
45
  <Button onClick={() => setCount(count + 1)}>Increment</Button>
46
46
  </VStack>
@@ -62,9 +62,9 @@ function Example() {
62
62
  return (
63
63
  <VStack gap={3} alignItems="start">
64
64
  <VStack gap={1}>
65
- <TextHeadline>Name: {user.name}</TextHeadline>
66
- <TextHeadline>Age: {user.age}</TextHeadline>
67
- <TextHeadline>Previous age: {previousUser?.age ?? 'None'}</TextHeadline>
65
+ <Text font="headline">Name: {user.name}</Text>
66
+ <Text font="headline">Age: {user.age}</Text>
67
+ <Text font="headline">Previous age: {previousUser?.age ?? 'None'}</Text>
68
68
  </VStack>
69
69
  <Button onClick={updateAge}>Add Year</Button>
70
70
  </VStack>
@@ -56,7 +56,7 @@ function Example() {
56
56
  background="bgAlternate"
57
57
  borderRadius={300}
58
58
  >
59
- <TextBody>This box is registered with ID 'box1'</TextBody>
59
+ <Text font="body">This box is registered with ID 'box1'</Text>
60
60
  </Box>
61
61
  <Button onClick={handleClick}>Get Box Dimensions</Button>
62
62
  </VStack>
@@ -103,7 +103,7 @@ function Example() {
103
103
  background="bgAlternate"
104
104
  borderRadius={300}
105
105
  >
106
- <TextBody>Box 1</TextBody>
106
+ <Text font="body">Box 1</Text>
107
107
  </Box>
108
108
 
109
109
  <Box
@@ -112,7 +112,7 @@ function Example() {
112
112
  background="bgAlternate"
113
113
  borderRadius={300}
114
114
  >
115
- <TextBody>Box 2</TextBody>
115
+ <Text font="body">Box 2</Text>
116
116
  </Box>
117
117
 
118
118
  <Box
@@ -121,7 +121,7 @@ function Example() {
121
121
  background="bgAlternate"
122
122
  borderRadius={300}
123
123
  >
124
- <TextBody>Box 3</TextBody>
124
+ <Text font="body">Box 3</Text>
125
125
  </Box>
126
126
  </VStack>
127
127
  </VStack>
@@ -158,7 +158,7 @@ function Example() {
158
158
  background="bgAlternate"
159
159
  borderRadius={300}
160
160
  >
161
- <TextBody>Box 1</TextBody>
161
+ <Text font="body">Box 1</Text>
162
162
  </Box>
163
163
 
164
164
  <Box
@@ -167,7 +167,7 @@ function Example() {
167
167
  background="bgAlternate"
168
168
  borderRadius={300}
169
169
  >
170
- <TextBody>Box 2</TextBody>
170
+ <Text font="body">Box 2</Text>
171
171
  </Box>
172
172
 
173
173
  <Button onClick={logRefs}>Log Refs</Button>
@@ -92,6 +92,7 @@
92
92
  - [InputChip](mobile/components/InputChip.txt): A Chip used for removable selections.
93
93
  - [IconButton](mobile/components/IconButton.txt): A Button with an Icon for content.
94
94
  - [ControlGroup](mobile/components/ControlGroup.txt): A layout component that arranges and manages a group of related controls, such as radio buttons, switches, or checkboxes.
95
+ - [Combobox](mobile/components/Combobox.txt): A flexible combobox component for both single and multi-selection, built for mobile applications with comprehensive accessibility support.
95
96
  - [Chip](mobile/components/Chip.txt): A compact, interactive content element.
96
97
  - [CheckboxGroup](mobile/components/CheckboxGroup.txt): CheckboxGroup is a control component that allows users to select multiple options from a set of choices. It manages the state and layout of multiple checkbox inputs as a cohesive group.
97
98
  - [CheckboxCell](mobile/components/CheckboxCell.txt): A selectable cell that pairs a checkbox with a title and description for multi-choice selections.