ionbase-ui 0.76.0 → 0.81.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/dist/components/Card.d.ts +61 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +37 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/CommandPalette.d.ts +76 -0
- package/dist/components/CommandPalette.d.ts.map +1 -0
- package/dist/components/CommandPalette.js +194 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/DateField.d.ts +14 -0
- package/dist/components/DateField.d.ts.map +1 -1
- package/dist/components/DateField.js +1 -1
- package/dist/components/DateField.js.map +1 -1
- package/dist/components/DatePicker.d.ts +1 -1
- package/dist/components/DatePicker.d.ts.map +1 -1
- package/dist/components/DatePicker.js +14 -6
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/DateRangePicker.d.ts +1 -1
- package/dist/components/DateRangePicker.d.ts.map +1 -1
- package/dist/components/DateRangePicker.js +14 -6
- package/dist/components/DateRangePicker.js.map +1 -1
- package/dist/components/Kbd.d.ts +45 -0
- package/dist/components/Kbd.d.ts.map +1 -0
- package/dist/components/Kbd.js +45 -0
- package/dist/components/Kbd.js.map +1 -0
- package/dist/components/Table.d.ts +18 -0
- package/dist/components/Table.d.ts.map +1 -1
- package/dist/components/Table.js +14 -3
- package/dist/components/Table.js.map +1 -1
- package/dist/components/TagGroup.d.ts +51 -0
- package/dist/components/TagGroup.d.ts.map +1 -0
- package/dist/components/TagGroup.js +84 -0
- package/dist/components/TagGroup.js.map +1 -0
- package/dist/components/TimeField.d.ts +72 -0
- package/dist/components/TimeField.d.ts.map +1 -0
- package/dist/components/TimeField.js +102 -0
- package/dist/components/TimeField.js.map +1 -0
- package/dist/components/index.d.ts +14 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/iso-time.d.ts +23 -0
- package/dist/components/iso-time.d.ts.map +1 -0
- package/dist/components/iso-time.js +34 -0
- package/dist/components/iso-time.js.map +1 -0
- package/dist/components/shortcut.d.ts +19 -0
- package/dist/components/shortcut.d.ts.map +1 -0
- package/dist/components/shortcut.js +122 -0
- package/dist/components/shortcut.js.map +1 -0
- package/dist/components/use-table-sort.d.ts +38 -0
- package/dist/components/use-table-sort.d.ts.map +1 -0
- package/dist/components/use-table-sort.js +33 -0
- package/dist/components/use-table-sort.js.map +1 -0
- package/dist/figma-descriptions.json +103 -68
- package/dist/figma-map.json +343 -2
- package/dist/meta/Card.json +153 -0
- package/dist/meta/Checkbox.json +2 -2
- package/dist/meta/CommandPalette.json +178 -0
- package/dist/meta/DatePicker.json +5 -4
- package/dist/meta/DateRangePicker.json +3 -2
- package/dist/meta/Kbd.json +97 -0
- package/dist/meta/Radio.json +2 -2
- package/dist/meta/RadioGroup.json +2 -2
- package/dist/meta/Table.json +4 -1
- package/dist/meta/TableBody.json +3 -0
- package/dist/meta/TableCell.json +49 -5
- package/dist/meta/TableHead.json +3 -0
- package/dist/meta/TableRow.json +3 -0
- package/dist/meta/Tag.json +54 -0
- package/dist/meta/TagGroup.json +211 -0
- package/dist/meta/TimeField.json +224 -0
- package/dist/meta/Toggle.json +2 -2
- package/dist/meta/components.json +1014 -38
- package/dist/meta/contrast.json +1133 -6
- package/dist/meta/index.json +86 -12
- package/dist/meta/patterns/DataTable.json +27 -3
- package/dist/meta/patterns/PageShell.json +15 -2
- package/dist/meta/patterns/index.json +7 -3
- package/dist/styles/agent-activity.css +4 -2
- package/dist/styles/approval-gate.css +4 -3
- package/dist/styles/card.css +75 -0
- package/dist/styles/citation.css +4 -2
- package/dist/styles/command-palette.css +250 -0
- package/dist/styles/confidence-indicator.css +2 -2
- package/dist/styles/index.css +5 -0
- package/dist/styles/kbd.css +47 -0
- package/dist/styles/streaming-text.css +3 -2
- package/dist/styles/table.css +51 -0
- package/dist/styles/tag-group.css +172 -0
- package/dist/styles/time-field.css +31 -0
- package/llms.txt +2 -2
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* ConfidenceIndicator
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* system's status roles.
|
|
4
|
+
* Drawn in Figma as `Confidence Indicator` (1166:262), by Level. Three bars and
|
|
5
|
+
* a line of text; the colours are the system's status roles.
|
|
6
6
|
*
|
|
7
7
|
* THE BARS ARE THE SECOND SIGNAL, NOT THE FIRST. The count of filled bars
|
|
8
8
|
* carries the level, so it reads in greyscale and in forced-colours mode; the
|
package/dist/styles/index.css
CHANGED
|
@@ -90,9 +90,14 @@
|
|
|
90
90
|
*/
|
|
91
91
|
@import url('./date-picker.css');
|
|
92
92
|
@import url('./date-range-picker.css');
|
|
93
|
+
@import url('./time-field.css');
|
|
93
94
|
@import url('./stat-tile.css');
|
|
94
95
|
@import url('./setting-row.css');
|
|
95
96
|
@import url('./chart.css');
|
|
97
|
+
@import url('./card.css');
|
|
98
|
+
@import url('./tag-group.css');
|
|
99
|
+
@import url('./kbd.css');
|
|
100
|
+
@import url('./command-palette.css');
|
|
96
101
|
|
|
97
102
|
/*
|
|
98
103
|
* Visually hidden, but not hidden from assistive tech.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Kbd
|
|
3
|
+
*
|
|
4
|
+
* Drawn in Figma as `Kbd` on the Command Palette page.
|
|
5
|
+
*
|
|
6
|
+
* key 20 tall, at least 20 wide, 4 across; radius/xs
|
|
7
|
+
* colour surface/subtle key, border/default rule, text/secondary glyph
|
|
8
|
+
* type caption, medium — a key is read at a glance, not studied
|
|
9
|
+
*
|
|
10
|
+
* A shortcut is a group of keys 2 apart, never "⌘+K" with a printed plus:
|
|
11
|
+
* the keys are what the reader looks for on the keyboard, and the plus is not
|
|
12
|
+
* one of them.
|
|
13
|
+
*
|
|
14
|
+
* The key carries its own background, so the contrast gate measures the glyph
|
|
15
|
+
* against the key rather than whatever it sits on — a menu row, a hover.
|
|
16
|
+
*/
|
|
17
|
+
.ion-kbd-group {
|
|
18
|
+
display: inline-flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
gap: var(--spacing-2);
|
|
21
|
+
font: inherit;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.ion-kbd {
|
|
25
|
+
display: inline-flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
justify-content: center;
|
|
28
|
+
min-width: var(--spacing-20);
|
|
29
|
+
height: var(--spacing-20);
|
|
30
|
+
padding-inline: calc(var(--spacing-4) - var(--border-width-default));
|
|
31
|
+
border: var(--border-width-default) solid var(--border-default);
|
|
32
|
+
border-radius: var(--radius-xs);
|
|
33
|
+
background-color: var(--surface-subtle);
|
|
34
|
+
color: var(--text-secondary);
|
|
35
|
+
font-family: var(--font-family-sans);
|
|
36
|
+
font-size: var(--type-caption);
|
|
37
|
+
line-height: var(--type-caption-line-height);
|
|
38
|
+
font-weight: var(--font-weight-medium);
|
|
39
|
+
white-space: nowrap;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Forced colours drop the fill; the rule is what keeps each key a key. */
|
|
43
|
+
@media (forced-colors: active) {
|
|
44
|
+
.ion-kbd {
|
|
45
|
+
border-color: CanvasText;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* StreamingText
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Drawn in Figma as `Streaming Text` (1164:248), with a Streaming axis for the
|
|
5
|
+
* cursor. Type and rhythm come from the body tokens, so this is ordinary prose
|
|
6
|
+
* that happens to be arriving late.
|
|
6
7
|
*/
|
|
7
8
|
.ion-streaming-text {
|
|
8
9
|
color: var(--text-default);
|
package/dist/styles/table.css
CHANGED
|
@@ -187,6 +187,57 @@
|
|
|
187
187
|
color: var(--icon-secondary);
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
+
/*
|
|
191
|
+
* Sortable headers — `sortDirection` on a header TableCell, Figma's
|
|
192
|
+
* `Table Sort Indicator` in the Cell Text trailing slot.
|
|
193
|
+
*
|
|
194
|
+
* The label is a real button inside the <th>, reset to read as header text:
|
|
195
|
+
* same weight, same `text/secondary`, no chrome. It darkens to `text/default`
|
|
196
|
+
* on hover and when it is the sorted column, so the current sort reads from
|
|
197
|
+
* the label as well as the arrow. The unsorted indicator stays
|
|
198
|
+
* `icon/tertiary`: present enough to say "this sorts", quiet enough that a
|
|
199
|
+
* row of them is not noise.
|
|
200
|
+
*/
|
|
201
|
+
.ion-table__sort {
|
|
202
|
+
margin: 0;
|
|
203
|
+
padding: 0;
|
|
204
|
+
border: 0;
|
|
205
|
+
border-radius: var(--radius-xs);
|
|
206
|
+
background: none;
|
|
207
|
+
color: inherit;
|
|
208
|
+
font: inherit;
|
|
209
|
+
text-align: inherit;
|
|
210
|
+
|
|
211
|
+
/* The arrow beside a two-line label reads as belonging to one line of it.
|
|
212
|
+
The table scrolls sideways before it squeezes a header this far. */
|
|
213
|
+
white-space: nowrap;
|
|
214
|
+
cursor: pointer;
|
|
215
|
+
transition: color var(--ion-duration-base) var(--ion-ease-out);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
@media (hover: hover) {
|
|
219
|
+
.ion-table__sort:hover {
|
|
220
|
+
color: var(--text-default);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.ion-table__sort:focus-visible {
|
|
225
|
+
outline: var(--border-width-thick) solid var(--ring-focus);
|
|
226
|
+
outline-offset: 2px;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.ion-table__sort--active {
|
|
230
|
+
color: var(--text-default);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.ion-table th .ion-table__sort-icon {
|
|
234
|
+
color: var(--icon-tertiary);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.ion-table th .ion-table__sort--active .ion-table__sort-icon {
|
|
238
|
+
color: var(--icon-default);
|
|
239
|
+
}
|
|
240
|
+
|
|
190
241
|
/* Link cells — Figma's `Type=Link`. */
|
|
191
242
|
.ion-table__cell-content--link {
|
|
192
243
|
color: var(--text-link);
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* TagGroup, Tag
|
|
3
|
+
*
|
|
4
|
+
* Drawn in Figma as `Tag` and `Tag Group` on the Tag page.
|
|
5
|
+
*
|
|
6
|
+
* tag surface/subtle fill, border/subtle rule, text/default label
|
|
7
|
+
* label inset 8 (sm) / 12 (md) from the tag's edge, 4 / 6 to the button
|
|
8
|
+
* height pinned — spacing/24 (sm), spacing/32 (md) — the way Badge
|
|
9
|
+
* pins its ramp, so padding never nudges it off by a pixel
|
|
10
|
+
* radius radius/sm at sm, radius/md at md
|
|
11
|
+
* remove button 16 / 20 square, icon/secondary, surface/hover under the
|
|
12
|
+
* pointer, its own focus ring
|
|
13
|
+
*
|
|
14
|
+
* NEUTRAL ON PURPOSE
|
|
15
|
+
*
|
|
16
|
+
* No intent colours. A tag is a choice someone made, not a state the system
|
|
17
|
+
* reports; a red "Status: Failing" filter would read as the agent failing.
|
|
18
|
+
* That is Badge's job, and Badge is not removable.
|
|
19
|
+
*
|
|
20
|
+
* The tag carries its own background, so the contrast gate measures the label
|
|
21
|
+
* against the tag rather than whatever the group sits on.
|
|
22
|
+
*/
|
|
23
|
+
.ion-tag-group {
|
|
24
|
+
display: grid;
|
|
25
|
+
gap: var(--spacing-6);
|
|
26
|
+
min-width: 0;
|
|
27
|
+
font-family: var(--font-family-sans);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.ion-tag-group__label {
|
|
31
|
+
color: var(--text-secondary);
|
|
32
|
+
font-size: var(--type-body-sm);
|
|
33
|
+
line-height: var(--type-body-sm-line-height);
|
|
34
|
+
font-weight: var(--font-weight-medium);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.ion-tag-group__list {
|
|
38
|
+
display: flex;
|
|
39
|
+
flex-wrap: wrap;
|
|
40
|
+
gap: var(--spacing-6);
|
|
41
|
+
min-width: 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.ion-tag-group__list:focus-visible {
|
|
45
|
+
outline: var(--border-width-thick) solid var(--ring-focus);
|
|
46
|
+
outline-offset: 2px;
|
|
47
|
+
border-radius: var(--radius-xs);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.ion-tag-group__empty,
|
|
51
|
+
.ion-tag-group__description {
|
|
52
|
+
margin: 0;
|
|
53
|
+
color: var(--text-tertiary);
|
|
54
|
+
font-size: var(--type-body-sm);
|
|
55
|
+
line-height: var(--type-body-sm-line-height);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.ion-tag {
|
|
59
|
+
display: inline-flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
max-width: 100%;
|
|
62
|
+
height: var(--spacing-24);
|
|
63
|
+
padding-inline: calc(var(--spacing-8) - var(--border-width-default));
|
|
64
|
+
border: var(--border-width-default) solid var(--border-subtle);
|
|
65
|
+
border-radius: var(--radius-sm);
|
|
66
|
+
background-color: var(--surface-subtle);
|
|
67
|
+
color: var(--text-default);
|
|
68
|
+
font-size: var(--type-body-sm);
|
|
69
|
+
line-height: var(--type-body-sm-line-height);
|
|
70
|
+
outline: none;
|
|
71
|
+
cursor: default;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* The remove button sits closer to the edge than the label does. */
|
|
75
|
+
.ion-tag--removable {
|
|
76
|
+
padding-inline-end: calc(var(--spacing-4) - var(--border-width-default));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.ion-tag-group--md .ion-tag {
|
|
80
|
+
height: var(--spacing-32);
|
|
81
|
+
padding-inline: calc(var(--spacing-12) - var(--border-width-default));
|
|
82
|
+
border-radius: var(--radius-md);
|
|
83
|
+
font-size: var(--type-body);
|
|
84
|
+
line-height: var(--type-body-line-height);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.ion-tag-group--md .ion-tag--removable {
|
|
88
|
+
padding-inline-end: calc(var(--spacing-6) - var(--border-width-default));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.ion-tag[data-focus-visible='true'] {
|
|
92
|
+
outline: var(--border-width-thick) solid var(--ring-focus);
|
|
93
|
+
outline-offset: 2px;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.ion-tag--disabled {
|
|
97
|
+
border-color: var(--border-disabled);
|
|
98
|
+
background-color: var(--surface-disabled);
|
|
99
|
+
color: var(--text-disabled);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.ion-tag__cell {
|
|
103
|
+
display: inline-flex;
|
|
104
|
+
align-items: center;
|
|
105
|
+
gap: var(--spacing-4);
|
|
106
|
+
min-width: 0;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* A long label ends in an ellipsis rather than stretching the row. */
|
|
110
|
+
.ion-tag__label {
|
|
111
|
+
overflow: hidden;
|
|
112
|
+
text-overflow: ellipsis;
|
|
113
|
+
white-space: nowrap;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.ion-tag__remove {
|
|
117
|
+
display: inline-flex;
|
|
118
|
+
flex-shrink: 0;
|
|
119
|
+
align-items: center;
|
|
120
|
+
justify-content: center;
|
|
121
|
+
width: var(--spacing-16);
|
|
122
|
+
height: var(--spacing-16);
|
|
123
|
+
margin: 0;
|
|
124
|
+
padding: 0;
|
|
125
|
+
border: 0;
|
|
126
|
+
border-radius: var(--radius-xs);
|
|
127
|
+
background: none;
|
|
128
|
+
color: var(--icon-secondary);
|
|
129
|
+
cursor: pointer;
|
|
130
|
+
transition:
|
|
131
|
+
background-color var(--ion-duration-base) var(--ion-ease-out),
|
|
132
|
+
color var(--ion-duration-base) var(--ion-ease-out);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* Figma's Label Slot pads 4 / 6 on each side, which is the gap to the button. */
|
|
136
|
+
.ion-tag-group--md .ion-tag__cell {
|
|
137
|
+
gap: var(--spacing-6);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.ion-tag-group--md .ion-tag__remove {
|
|
141
|
+
width: var(--spacing-20);
|
|
142
|
+
height: var(--spacing-20);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.ion-tag__remove svg {
|
|
146
|
+
width: var(--icon-size-2xs);
|
|
147
|
+
height: var(--icon-size-2xs);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@media (hover: hover) {
|
|
151
|
+
.ion-tag__remove:hover {
|
|
152
|
+
background-color: var(--surface-hover);
|
|
153
|
+
color: var(--icon-default);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.ion-tag__remove[data-focus-visible='true'] {
|
|
158
|
+
outline: var(--border-width-thick) solid var(--ring-focus);
|
|
159
|
+
outline-offset: 1px;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.ion-tag--disabled .ion-tag__remove {
|
|
163
|
+
color: var(--icon-disabled);
|
|
164
|
+
cursor: default;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* Forced colours drop the fill; the rule keeps each tag a separate shape. */
|
|
168
|
+
@media (forced-colors: active) {
|
|
169
|
+
.ion-tag {
|
|
170
|
+
border-color: CanvasText;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* TimeField
|
|
3
|
+
*
|
|
4
|
+
* Drawn in Figma as `Time Field` on the Date Picker page: the Input box with
|
|
5
|
+
* a leading clock icon and hour, minute and period segments.
|
|
6
|
+
*
|
|
7
|
+
* Everything but the box's cursor comes from elsewhere, on purpose:
|
|
8
|
+
*
|
|
9
|
+
* the box `.ion-input` and its size and state modifiers — the same
|
|
10
|
+
* box DatePicker and Combobox reuse
|
|
11
|
+
* the segments `.ion-date-field` in date-picker.css, which is imported
|
|
12
|
+
* before this file; a time segment is a date segment
|
|
13
|
+
* the clock `.ion-input__icon-start`, decorative, icon/tertiary
|
|
14
|
+
*
|
|
15
|
+
* A second copy of the segment rules would drift from DatePicker's the first
|
|
16
|
+
* time either changed, and the two fields sit side by side in every schedule
|
|
17
|
+
* form.
|
|
18
|
+
*/
|
|
19
|
+
.ion-time-field {
|
|
20
|
+
cursor: text;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* Digits sit against the separator, not centred in their reserved width.
|
|
25
|
+
* A 12-hour clock shows "9", not "09", in a segment wide enough for "12", so
|
|
26
|
+
* centring read as "9 :00 AM". Right-aligned, the spare width falls beside
|
|
27
|
+
* the clock icon, where it looks like padding rather than a typo.
|
|
28
|
+
*/
|
|
29
|
+
.ion-time-field .ion-date-field__segment {
|
|
30
|
+
text-align: end;
|
|
31
|
+
}
|
package/llms.txt
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> IonBase is a React design system for enterprise SaaS, built to be consumed by an agent rather than read by a developer. Every component ships a machine-readable contract carrying the judgement a type signature cannot: when to use it, what to use instead, the anti-patterns, and what it guarantees for accessibility versus what it requires of you.
|
|
4
4
|
|
|
5
|
-
Version 0.
|
|
5
|
+
Version 0.81.1. 81 components.
|
|
6
6
|
|
|
7
7
|
## Read these, in this order
|
|
8
8
|
|
|
@@ -13,7 +13,7 @@ Both are importable: `ionbase-ui/meta/index` and `ionbase-ui/meta/<Name>.json`.
|
|
|
13
13
|
|
|
14
14
|
## Components
|
|
15
15
|
|
|
16
|
-
`Accordion`, `AccordionItem`, `AgentActivity`, `AgentActivityStep`, `AgentStop`, `Alert`, `ApprovalGate`, `Avatar`, `AvatarGradient`, `AvatarGroup`, `Badge`, `Breadcrumb`, `BreadcrumbItem`, `Button`, `ChartLegend`, `ChartTooltip`, `Checkbox`, `Citation`, `CitationList`, `CitationListItem`, `Combobox`, `ConfidenceIndicator`, `DatePicker`, `DateRangePicker`, `Divider`, `Drawer`, `EmptyState`, `FileUpload`, `FullCard`, `Header`, `Icon`, `Input`, `Link`, `Logo`, `LogoMark`, `Menu`, `MenuItem`, `Modal`, `NavItem`, `NumberInput`, `Pagination`, `PhoneInput`, `Popover`, `ProgressBar`, `PromptInput`, `Radio`, `RadioGroup`, `ScrollProgress`, `SegmentedControl`, `SegmentedControlItem`, `Select`, `SettingRow`, `Sidebar`, `SidebarItem`, `SidebarSection`, `Skeleton`, `Spinner`, `StatGroup`, `StatTile`, `Stepper`, `StepperStep`, `StreamingText`, `TabItem`, `Table`, `TableBody`, `TableCell`, `TableHead`, `TableRow`, `Tabs`, `Textarea`, `Toast`, `ToastProvider`, `Toggle`, `ToolCall`, `Tooltip`
|
|
16
|
+
`Accordion`, `AccordionItem`, `AgentActivity`, `AgentActivityStep`, `AgentStop`, `Alert`, `ApprovalGate`, `Avatar`, `AvatarGradient`, `AvatarGroup`, `Badge`, `Breadcrumb`, `BreadcrumbItem`, `Button`, `Card`, `ChartLegend`, `ChartTooltip`, `Checkbox`, `Citation`, `CitationList`, `CitationListItem`, `Combobox`, `CommandPalette`, `ConfidenceIndicator`, `DatePicker`, `DateRangePicker`, `Divider`, `Drawer`, `EmptyState`, `FileUpload`, `FullCard`, `Header`, `Icon`, `Input`, `Kbd`, `Link`, `Logo`, `LogoMark`, `Menu`, `MenuItem`, `Modal`, `NavItem`, `NumberInput`, `Pagination`, `PhoneInput`, `Popover`, `ProgressBar`, `PromptInput`, `Radio`, `RadioGroup`, `ScrollProgress`, `SegmentedControl`, `SegmentedControlItem`, `Select`, `SettingRow`, `Sidebar`, `SidebarItem`, `SidebarSection`, `Skeleton`, `Spinner`, `StatGroup`, `StatTile`, `Stepper`, `StepperStep`, `StreamingText`, `TabItem`, `Table`, `TableBody`, `TableCell`, `TableHead`, `TableRow`, `Tabs`, `Tag`, `TagGroup`, `Textarea`, `TimeField`, `Toast`, `ToastProvider`, `Toggle`, `ToolCall`, `Tooltip`
|
|
17
17
|
|
|
18
18
|
## Patterns
|
|
19
19
|
|