@coinbase/cds-mcp-server 8.20.1 → 8.21.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/TabbedChipsAlpha.txt +174 -0
- package/mcp-docs/mobile/components/Toast.txt +1 -1
- package/mcp-docs/mobile/getting-started/theming.txt +1 -1
- package/mcp-docs/mobile/routes.txt +1 -0
- package/mcp-docs/web/components/TabbedChips.txt +1 -1
- package/mcp-docs/web/components/TabbedChipsAlpha.txt +202 -0
- package/mcp-docs/web/components/Toast.txt +1 -1
- package/mcp-docs/web/getting-started/theming.txt +1 -1
- package/mcp-docs/web/routes.txt +1 -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.21.0 ((11/12/2025, 11:45 AM PST))
|
|
12
|
+
|
|
13
|
+
This is an artificial version bump with no new change.
|
|
14
|
+
|
|
15
|
+
## 8.20.2 ((11/12/2025, 10:01 AM PST))
|
|
16
|
+
|
|
17
|
+
This is an artificial version bump with no new change.
|
|
18
|
+
|
|
11
19
|
## 8.20.1 ((11/7/2025, 01:20 PM PST))
|
|
12
20
|
|
|
13
21
|
This is an artificial version bump with no new change.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# TabbedChipsAlpha
|
|
2
|
+
|
|
3
|
+
A chip component commonly used in filter context to refine a date source
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { TabbedChips } from '@coinbase/cds-mobile/alpha/tabbed-chips/TabbedChips'
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Examples
|
|
12
|
+
|
|
13
|
+
### Basic usage
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
function ExampleDefault() {
|
|
17
|
+
const tabs = [
|
|
18
|
+
{ id: 'all', label: 'All' },
|
|
19
|
+
{ id: 'swap', label: 'Swap' },
|
|
20
|
+
{ id: 'collect', label: 'Collect' },
|
|
21
|
+
{ id: 'bridge', label: 'Bridge' },
|
|
22
|
+
];
|
|
23
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
24
|
+
return <TabbedChips activeTab={activeTab} onChange={setActiveTab} tabs={tabs} />;
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Compact
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
function ExampleCompactNoStart() {
|
|
32
|
+
const tabs = [
|
|
33
|
+
{ id: 'all', label: 'All' },
|
|
34
|
+
{ id: 'swap', label: 'Swap' },
|
|
35
|
+
{ id: 'collect', label: 'Collect' },
|
|
36
|
+
{ id: 'bridge', label: 'Bridge' },
|
|
37
|
+
];
|
|
38
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
39
|
+
return <TabbedChips activeTab={activeTab} compact onChange={setActiveTab} tabs={tabs} />;
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Many tabs (scrollable)
|
|
44
|
+
|
|
45
|
+
:::tip Scrolling behavior
|
|
46
|
+
The list becomes horizontally scrollable when content overflows; an `OverflowGradient` appears on the edge to hint more content.
|
|
47
|
+
:::
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
function ExampleManyTabs() {
|
|
51
|
+
const tabs = Array.from({ length: 12 }).map((_, i) => ({
|
|
52
|
+
id: `tab_${i + 1}`,
|
|
53
|
+
label: `Tab ${i + 1}`,
|
|
54
|
+
}));
|
|
55
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
56
|
+
return <TabbedChips activeTab={activeTab} onChange={setActiveTab} tabs={tabs} />;
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Long text tabs
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
function ExampleLongText() {
|
|
64
|
+
const tabs = [
|
|
65
|
+
{ id: 'a', label: 'Very long tab label that can wrap on small widths' },
|
|
66
|
+
{ id: 'b', label: 'Another extra long label to test overflow' },
|
|
67
|
+
{ id: 'c', label: 'Short' },
|
|
68
|
+
];
|
|
69
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
70
|
+
return <TabbedChips activeTab={activeTab} onChange={setActiveTab} tabs={tabs} />;
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Disabled tab
|
|
75
|
+
|
|
76
|
+
```tsx
|
|
77
|
+
function ExampleDisabled() {
|
|
78
|
+
const tabs = [
|
|
79
|
+
{ id: 'first', label: 'First' },
|
|
80
|
+
{ id: 'second', label: 'Second', disabled: true },
|
|
81
|
+
{ id: 'third', label: 'Third' },
|
|
82
|
+
];
|
|
83
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
84
|
+
return <TabbedChips activeTab={activeTab} onChange={setActiveTab} tabs={tabs} />;
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### With start media
|
|
89
|
+
|
|
90
|
+
:::tip Media sizing
|
|
91
|
+
For start media, use circular images sized 24×24 for regular chips and 16×16 for compact chips.
|
|
92
|
+
:::
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
function ExampleWithStart() {
|
|
96
|
+
const icon = { height: 24, width: 24, shape: 'circle', source: assets.eth.imageUrl };
|
|
97
|
+
const compactIcon = { height: 16, width: 16, shape: 'circle', source: assets.eth.imageUrl };
|
|
98
|
+
const tabs = [
|
|
99
|
+
{ id: 'all', label: 'All', start: <RemoteImage {...icon} /> },
|
|
100
|
+
{ id: 'swap', label: 'Swap', start: <RemoteImage {...icon} /> },
|
|
101
|
+
{ id: 'collect', label: 'Collect', start: <RemoteImage {...icon} /> },
|
|
102
|
+
{ id: 'bridge', label: 'Bridge', start: <RemoteImage {...icon} /> },
|
|
103
|
+
];
|
|
104
|
+
const compactTabs = tabs.map((tab) => ({ ...tab, start: <RemoteImage {...compactIcon} /> }));
|
|
105
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
106
|
+
return (
|
|
107
|
+
<VStack gap={2}>
|
|
108
|
+
<TabbedChips activeTab={activeTab} onChange={setActiveTab} tabs={tabs} />
|
|
109
|
+
<TabbedChips compact activeTab={activeTab} onChange={setActiveTab} tabs={compactTabs} />
|
|
110
|
+
</VStack>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Custom TabComponent
|
|
116
|
+
|
|
117
|
+
:::tip Custom Tab behavior
|
|
118
|
+
When providing a custom TabComponent, use `useTabsContext()` and call `updateActiveTab(id)` to update selection state. Reflect the active state (e.g., end icon state) based on `activeTab?.id === id`.
|
|
119
|
+
:::
|
|
120
|
+
|
|
121
|
+
```tsx
|
|
122
|
+
function CustomTab({ id, label, ...props }: TabbedChipProps) {
|
|
123
|
+
const { activeTab, updateActiveTab } = useTabsContext();
|
|
124
|
+
const isActive = activeTab?.id === id;
|
|
125
|
+
return (
|
|
126
|
+
<MediaChip
|
|
127
|
+
onPress={() => updateActiveTab(id)}
|
|
128
|
+
end={<Icon size="s" active={isActive} name="star" />}
|
|
129
|
+
{...props}
|
|
130
|
+
>
|
|
131
|
+
{label}
|
|
132
|
+
</MediaChip>
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const tabs = [
|
|
137
|
+
{ id: 'all', label: 'All' },
|
|
138
|
+
{ id: 'swap', label: 'Swap' },
|
|
139
|
+
{ id: 'collect', label: 'Collect' },
|
|
140
|
+
];
|
|
141
|
+
|
|
142
|
+
function Example() {
|
|
143
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
144
|
+
return (
|
|
145
|
+
<TabbedChips
|
|
146
|
+
activeTab={activeTab}
|
|
147
|
+
onChange={setActiveTab}
|
|
148
|
+
tabs={tabs}
|
|
149
|
+
TabComponent={CustomTab}
|
|
150
|
+
/>
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
render(<Example />);
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Props
|
|
158
|
+
|
|
159
|
+
| Prop | Type | Required | Default | Description |
|
|
160
|
+
| --- | --- | --- | --- | --- |
|
|
161
|
+
| `activeTab` | `TabValue<T> \| null` | Yes | `-` | React state for the currently active tab. Setting it to null results in no active tab. |
|
|
162
|
+
| `onChange` | `(activeTab: TabValue<T> \| null) => void` | Yes | `-` | Callback that is fired when the active tab changes. Use this callback to update the activeTab state. |
|
|
163
|
+
| `tabs` | `TabbedChipProps<T>[]` | Yes | `-` | - |
|
|
164
|
+
| `TabComponent` | `FC<TabbedChipProps<T>>` | No | `-` | - |
|
|
165
|
+
| `TabsActiveIndicatorComponent` | `TabsActiveIndicatorComponent` | No | `-` | - |
|
|
166
|
+
| `compact` | `boolean` | No | `false` | Turn on to use a compact Chip component for each tab. |
|
|
167
|
+
| `disabled` | `boolean` | No | `-` | Disable interactions on all the tabs. |
|
|
168
|
+
| `gap` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1.5` | No | `1` | The spacing between Tabs |
|
|
169
|
+
| `ref` | `null \| (instance: View \| null) => void \| MutableRefObject<View \| null>` | No | `-` | - |
|
|
170
|
+
| `styles` | `{ root?: StyleProp<ViewStyle>; tabs?: StyleProp<ViewStyle>; }` | No | `-` | - |
|
|
171
|
+
| `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 |
|
|
172
|
+
| `width` | `string \| number` | No | `-` | The width of the scroll container, defaults to 100% of the parent container If the tabs are wider than the width of the container, paddles will be shown to scroll the tabs. |
|
|
173
|
+
|
|
174
|
+
|
|
@@ -147,7 +147,7 @@ The `color` variables have semantic names which describe their application in th
|
|
|
147
147
|
const theme = useTheme();
|
|
148
148
|
theme.lightSpectrum.gray0; // "255,255,255"
|
|
149
149
|
theme.darkSpectrum.gray0; // "10,11,13"
|
|
150
|
-
theme.spectrum.
|
|
150
|
+
theme.spectrum.gray0; // "255,255,255" or "10,11,13", depends on activeColorScheme
|
|
151
151
|
theme.lightColor.bg; // "rgb(255,255,255)"
|
|
152
152
|
theme.darkColor.bg; // "rgb(10,11,13)"
|
|
153
153
|
theme.color.bg; // "rgb(255,255,255)" or "rgb(10,11,13)", depends on activeColorScheme
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
- [Tour](mobile/components/Tour.txt): Creates guided tours of a user interface.
|
|
35
35
|
- [TopNavBar](mobile/components/TopNavBar.txt): A customizable top navigation bar that can contain start, middle, and end content, as well as a bottom section for elements like tabs. It remains sticky at the top of the screen.
|
|
36
36
|
- [Tabs](mobile/components/Tabs.txt): Tabs is a flexible, accessible tab navigation component for React Native, supporting animated indicators, custom tab components, and full accessibility.
|
|
37
|
+
- [TabbedChipsAlpha](mobile/components/TabbedChipsAlpha.txt): A chip component commonly used in filter context to refine a date source
|
|
37
38
|
- [TabbedChips](mobile/components/TabbedChips.txt): Tab chips are to be used in a filter setting where the user is given the ability to refine the data source they are accessing.
|
|
38
39
|
- [TabNavigation](mobile/components/TabNavigation.txt): Organizes content across different screens or data sets.
|
|
39
40
|
- [TabLabel](mobile/components/TabLabel.txt): A text label component used within tab navigation.
|
|
@@ -39,7 +39,7 @@ function TabbedChipsExample() {
|
|
|
39
39
|
<TextTitle3 as="p">Popular assets</TextTitle3>
|
|
40
40
|
</VStack>
|
|
41
41
|
<SearchInput compact placeholder="Search by name" />
|
|
42
|
-
<
|
|
42
|
+
<OldTabbedChips value={value} onChange={setValue} tabs={tabs} />
|
|
43
43
|
</VStack>
|
|
44
44
|
);
|
|
45
45
|
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# TabbedChipsAlpha
|
|
2
|
+
|
|
3
|
+
A chip component commonly used in filter context to refine a date source
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { TabbedChips } from '@coinbase/cds-web/alpha/tabbed-chips/TabbedChips'
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Examples
|
|
12
|
+
|
|
13
|
+
### Basic usage
|
|
14
|
+
|
|
15
|
+
```jsx live
|
|
16
|
+
function ExampleDefault() {
|
|
17
|
+
const tabs = [
|
|
18
|
+
{ id: 'all', label: 'All' },
|
|
19
|
+
{ id: 'swap', label: 'Swap' },
|
|
20
|
+
{ id: 'collect', label: 'Collect' },
|
|
21
|
+
{ id: 'bridge', label: 'Bridge' },
|
|
22
|
+
];
|
|
23
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
24
|
+
return <TabbedChips activeTab={activeTab} onChange={setActiveTab} tabs={tabs} />;
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Compact
|
|
29
|
+
|
|
30
|
+
```jsx live
|
|
31
|
+
function ExampleCompactNoStart() {
|
|
32
|
+
const tabs = [
|
|
33
|
+
{ id: 'all', label: 'All' },
|
|
34
|
+
{ id: 'swap', label: 'Swap' },
|
|
35
|
+
{ id: 'collect', label: 'Collect' },
|
|
36
|
+
{ id: 'bridge', label: 'Bridge' },
|
|
37
|
+
];
|
|
38
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
39
|
+
return <TabbedChips activeTab={activeTab} compact onChange={setActiveTab} tabs={tabs} />;
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Many tabs (paddles)
|
|
44
|
+
|
|
45
|
+
:::tip Paddles & overflow
|
|
46
|
+
Paddles appear automatically when the tab list overflows.
|
|
47
|
+
:::
|
|
48
|
+
|
|
49
|
+
```jsx live
|
|
50
|
+
function ExampleWithPaddles() {
|
|
51
|
+
const tabs = Array.from({ length: 12 }).map((_, i) => ({
|
|
52
|
+
id: `tab_${i + 1}`,
|
|
53
|
+
label: `Tab ${i + 1}`,
|
|
54
|
+
}));
|
|
55
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
56
|
+
return <TabbedChips activeTab={activeTab} onChange={setActiveTab} tabs={tabs} />;
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### With custom sized paddles
|
|
61
|
+
|
|
62
|
+
:::tip Paddle styling
|
|
63
|
+
You can adjust the size of the paddles via `styles.paddle`.
|
|
64
|
+
:::
|
|
65
|
+
|
|
66
|
+
```jsx live
|
|
67
|
+
function ExampleCustomPaddles() {
|
|
68
|
+
const tabs = Array.from({ length: 10 }).map((_, i) => ({
|
|
69
|
+
id: `t_${i + 1}`,
|
|
70
|
+
label: `Item ${i + 1}`,
|
|
71
|
+
}));
|
|
72
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
73
|
+
return (
|
|
74
|
+
<TabbedChips
|
|
75
|
+
activeTab={activeTab}
|
|
76
|
+
onChange={setActiveTab}
|
|
77
|
+
tabs={tabs}
|
|
78
|
+
styles={{ paddle: { transform: 'scale(0.8)' } }}
|
|
79
|
+
/>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Long text tabs
|
|
85
|
+
|
|
86
|
+
```jsx live
|
|
87
|
+
function ExampleLongText() {
|
|
88
|
+
const tabs = [
|
|
89
|
+
{ id: 'a', label: 'Very long tab label that can wrap on small widths' },
|
|
90
|
+
{ id: 'b', label: 'Another extra long label to test overflow' },
|
|
91
|
+
{ id: 'c', label: 'Short' },
|
|
92
|
+
];
|
|
93
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
94
|
+
return <TabbedChips activeTab={activeTab} onChange={setActiveTab} tabs={tabs} />;
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Disabled tab
|
|
99
|
+
|
|
100
|
+
```jsx live
|
|
101
|
+
function ExampleDisabled() {
|
|
102
|
+
const tabs = [
|
|
103
|
+
{ id: 'first', label: 'First' },
|
|
104
|
+
{ id: 'second', label: 'Second', disabled: true },
|
|
105
|
+
{ id: 'third', label: 'Third' },
|
|
106
|
+
];
|
|
107
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
108
|
+
return <TabbedChips activeTab={activeTab} onChange={setActiveTab} tabs={tabs} />;
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### With start media
|
|
113
|
+
|
|
114
|
+
:::tip Media sizing
|
|
115
|
+
For start media, use circular images sized 24×24 for regular chips and 16×16 for compact chips.
|
|
116
|
+
:::
|
|
117
|
+
|
|
118
|
+
```jsx live
|
|
119
|
+
function ExampleWithStart() {
|
|
120
|
+
const icon = { height: 24, width: 24, shape: 'circle', source: assets.eth.imageUrl };
|
|
121
|
+
const compactIcon = { height: 16, width: 16, shape: 'circle', source: assets.eth.imageUrl };
|
|
122
|
+
const tabs = [
|
|
123
|
+
{ id: 'all', label: 'All', start: <RemoteImage {...icon} /> },
|
|
124
|
+
{ id: 'swap', label: 'Swap', start: <RemoteImage {...icon} /> },
|
|
125
|
+
{ id: 'collect', label: 'Collect', start: <RemoteImage {...icon} /> },
|
|
126
|
+
{ id: 'bridge', label: 'Bridge', start: <RemoteImage {...icon} /> },
|
|
127
|
+
];
|
|
128
|
+
const compactTabs = tabs.map((tab) => ({ ...tab, start: <RemoteImage {...compactIcon} /> }));
|
|
129
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
130
|
+
return (
|
|
131
|
+
<VStack gap={2}>
|
|
132
|
+
<TabbedChips activeTab={activeTab} onChange={setActiveTab} tabs={tabs} />
|
|
133
|
+
<TabbedChips compact activeTab={activeTab} onChange={setActiveTab} tabs={compactTabs} />
|
|
134
|
+
</VStack>
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Custom TabComponent
|
|
140
|
+
|
|
141
|
+
:::tip Custom Tab behavior
|
|
142
|
+
When providing a custom TabComponent, use `useTabsContext()` and call `updateActiveTab(id)` to update selection state. Reflect the active state (e.g., end icon state) based on `activeTab?.id === id`.
|
|
143
|
+
:::
|
|
144
|
+
|
|
145
|
+
```jsx live noInline
|
|
146
|
+
function CustomTab({ id, label, ...props }: TabbedChipProps) {
|
|
147
|
+
const { activeTab, updateActiveTab } = useTabsContext();
|
|
148
|
+
const isActive = activeTab?.id === id;
|
|
149
|
+
return (
|
|
150
|
+
<MediaChip
|
|
151
|
+
end={<Icon size="s" active={isActive} name="star" />}
|
|
152
|
+
onClick={() => updateActiveTab(id)}
|
|
153
|
+
{...props}
|
|
154
|
+
>
|
|
155
|
+
{label}
|
|
156
|
+
</MediaChip>
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const tabs = [
|
|
161
|
+
{ id: 'all', label: 'All' },
|
|
162
|
+
{ id: 'swap', label: 'Swap' },
|
|
163
|
+
{ id: 'collect', label: 'Collect' },
|
|
164
|
+
];
|
|
165
|
+
|
|
166
|
+
function Example() {
|
|
167
|
+
const [activeTab, setActiveTab] = useState(tabs[0]);
|
|
168
|
+
return (
|
|
169
|
+
<TabbedChips
|
|
170
|
+
activeTab={activeTab}
|
|
171
|
+
onChange={setActiveTab}
|
|
172
|
+
tabs={tabs}
|
|
173
|
+
TabComponent={CustomTab}
|
|
174
|
+
/>
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
render(<Example />);
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Props
|
|
182
|
+
|
|
183
|
+
| Prop | Type | Required | Default | Description |
|
|
184
|
+
| --- | --- | --- | --- | --- |
|
|
185
|
+
| `activeTab` | `TabValue<T> \| null` | Yes | `-` | React state for the currently active tab. Setting it to null results in no active tab. |
|
|
186
|
+
| `onChange` | `(activeTab: TabValue<T> \| null) => void` | Yes | `-` | Callback that is fired when the active tab changes. Use this callback to update the activeTab state. |
|
|
187
|
+
| `tabs` | `TabbedChipProps<T>[]` | Yes | `-` | - |
|
|
188
|
+
| `TabComponent` | `FC<TabbedChipProps<T>>` | No | `-` | - |
|
|
189
|
+
| `TabsActiveIndicatorComponent` | `TabsActiveIndicatorComponent` | No | `-` | - |
|
|
190
|
+
| `background` | `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 | `-` | - |
|
|
191
|
+
| `classNames` | `{ root?: string; scrollContainer?: string \| undefined; tabs?: string \| undefined; } \| undefined` | No | `-` | - |
|
|
192
|
+
| `compact` | `boolean` | No | `false` | Turn on to use a compact Chip component for each tab. |
|
|
193
|
+
| `disabled` | `boolean` | No | `-` | Disable interactions on all the tabs. |
|
|
194
|
+
| `gap` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `1` | The spacing between Tabs |
|
|
195
|
+
| `nextArrowAccessibilityLabel` | `string` | No | `-` | - |
|
|
196
|
+
| `previousArrowAccessibilityLabel` | `string` | No | `-` | - |
|
|
197
|
+
| `ref` | `null \| (instance: HTMLElement \| null) => void \| MutableRefObject<HTMLElement \| null>` | No | `-` | - |
|
|
198
|
+
| `styles` | `{ root?: CSSProperties; scrollContainer?: CSSProperties \| undefined; paddle?: CSSProperties \| undefined; tabs?: CSSProperties \| undefined; } \| undefined` | No | `-` | - |
|
|
199
|
+
| `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 |
|
|
200
|
+
| `width` | `ResponsiveProp<Width<string \| number>>` | No | `100%` | The width of the scroll container, defaults to 100% of the parent container If the tabs are wider than the width of the container, paddles will be shown to scroll the tabs. |
|
|
201
|
+
|
|
202
|
+
|
|
@@ -186,7 +186,7 @@ The `color` variables have semantic names which describe their application in th
|
|
|
186
186
|
const theme = useTheme();
|
|
187
187
|
theme.lightSpectrum.gray0; // "255,255,255"
|
|
188
188
|
theme.darkSpectrum.gray0; // "10,11,13"
|
|
189
|
-
theme.spectrum.
|
|
189
|
+
theme.spectrum.gray0; // "255,255,255" or "10,11,13", depends on activeColorScheme
|
|
190
190
|
theme.lightColor.bg; // "rgb(255,255,255)"
|
|
191
191
|
theme.darkColor.bg; // "rgb(10,11,13)"
|
|
192
192
|
theme.color.bg; // "rgb(255,255,255)" or "rgb(10,11,13)", depends on activeColorScheme
|
package/mcp-docs/web/routes.txt
CHANGED
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
- [RollingNumber](web/components/RollingNumber.txt): A numeric display that animates value changes with rolling digits.
|
|
40
40
|
- [Tour](web/components/Tour.txt): Creates guided tours of a user interface.
|
|
41
41
|
- [Tabs](web/components/Tabs.txt): Tabs is a flexible, accessible tab navigation component for switching between content sections. It supports custom tab components, animated active indicators, and full keyboard navigation.
|
|
42
|
+
- [TabbedChipsAlpha](web/components/TabbedChipsAlpha.txt): A chip component commonly used in filter context to refine a date source
|
|
42
43
|
- [TabbedChips](web/components/TabbedChips.txt): Tab chips are to be used in a filter setting where the user is given the ability to refine the data source they are accessing.
|
|
43
44
|
- [TabNavigation](web/components/TabNavigation.txt): Organizes content across different screens or data sets.
|
|
44
45
|
- [TabLabel](web/components/TabLabel.txt): A text label component used within tab navigation.
|