@usevyre/ai-context 1.0.0 → 1.1.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/dist/anti-patterns.json +106 -1
- package/dist/cheat-sheets/buttongroup.md +42 -0
- package/dist/cheat-sheets/combobox.md +37 -0
- package/dist/cheat-sheets/datagrid.md +44 -0
- package/dist/cheat-sheets/index.md +6 -0
- package/dist/cheat-sheets/tag.md +46 -0
- package/dist/cheat-sheets/taggroup.md +33 -0
- package/dist/cheat-sheets/tagsinput.md +35 -0
- package/dist/claude-context.md +198 -1
- package/dist/copilot-instructions.md +198 -1
- package/dist/cursor-rules.md +72 -1
- package/dist/full-context.md +197 -0
- package/dist/index.js +1504 -114
- package/dist/schema.json +373 -5
- package/dist/tokens.json +1 -1
- package/dist/tokens.md +1 -1
- package/dist/version-info.json +117 -65
- package/dist/windsurf-rules.md +198 -1
- package/package.json +1 -1
package/dist/version-info.json
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
3
|
-
"packageVersion": "
|
|
4
|
-
"generatedAt": "2026-05-
|
|
2
|
+
"version": "1.1.0",
|
|
3
|
+
"packageVersion": "1.1.0",
|
|
4
|
+
"generatedAt": "2026-05-15T15:01:34.101Z",
|
|
5
5
|
"validFor": [
|
|
6
|
-
"@usevyre/react@
|
|
7
|
-
"@usevyre/vue@
|
|
6
|
+
"@usevyre/react@1.1.0+",
|
|
7
|
+
"@usevyre/vue@1.1.0+"
|
|
8
8
|
],
|
|
9
9
|
"changelog": {
|
|
10
|
+
"1.1.0": {
|
|
11
|
+
"date": "2026-05-15",
|
|
12
|
+
"breaking": false,
|
|
13
|
+
"summary": "Added 6 components: ButtonGroup, TagsInput, Combobox, DataGrid, Tag, TagGroup"
|
|
14
|
+
},
|
|
15
|
+
"1.0.0": {
|
|
16
|
+
"date": "2026-05-13",
|
|
17
|
+
"breaking": true,
|
|
18
|
+
"summary": "Stable v1.0 release — VyreCode renamed to Code in Vue, BreadcrumbLink + BreadcrumbSeparator added to React, Toast setup updated"
|
|
19
|
+
},
|
|
10
20
|
"0.2.0": {
|
|
11
21
|
"date": "2026-05-08",
|
|
12
22
|
"breaking": false,
|
|
@@ -20,211 +30,253 @@
|
|
|
20
30
|
},
|
|
21
31
|
"components": {
|
|
22
32
|
"Accordion": {
|
|
23
|
-
"version": "
|
|
24
|
-
"lastUpdated": "2026-05-
|
|
33
|
+
"version": "1.1.0",
|
|
34
|
+
"lastUpdated": "2026-05-15",
|
|
25
35
|
"breaking": false,
|
|
26
36
|
"stable": true,
|
|
27
37
|
"changelog": null
|
|
28
38
|
},
|
|
29
39
|
"Alert": {
|
|
30
|
-
"version": "
|
|
31
|
-
"lastUpdated": "2026-05-
|
|
40
|
+
"version": "1.1.0",
|
|
41
|
+
"lastUpdated": "2026-05-15",
|
|
32
42
|
"breaking": false,
|
|
33
43
|
"stable": true,
|
|
34
44
|
"changelog": null
|
|
35
45
|
},
|
|
36
46
|
"Avatar": {
|
|
37
|
-
"version": "
|
|
38
|
-
"lastUpdated": "2026-05-
|
|
47
|
+
"version": "1.1.0",
|
|
48
|
+
"lastUpdated": "2026-05-15",
|
|
39
49
|
"breaking": false,
|
|
40
50
|
"stable": true,
|
|
41
51
|
"changelog": null
|
|
42
52
|
},
|
|
43
53
|
"Badge": {
|
|
44
|
-
"version": "
|
|
45
|
-
"lastUpdated": "2026-05-
|
|
54
|
+
"version": "1.1.0",
|
|
55
|
+
"lastUpdated": "2026-05-15",
|
|
46
56
|
"breaking": false,
|
|
47
57
|
"stable": true,
|
|
48
58
|
"changelog": null
|
|
49
59
|
},
|
|
50
60
|
"Breadcrumb": {
|
|
51
|
-
"version": "
|
|
52
|
-
"lastUpdated": "2026-05-
|
|
61
|
+
"version": "1.1.0",
|
|
62
|
+
"lastUpdated": "2026-05-15",
|
|
53
63
|
"breaking": false,
|
|
54
64
|
"stable": true,
|
|
55
65
|
"changelog": null
|
|
56
66
|
},
|
|
57
67
|
"Button": {
|
|
58
|
-
"version": "
|
|
59
|
-
"lastUpdated": "2026-05-
|
|
68
|
+
"version": "1.1.0",
|
|
69
|
+
"lastUpdated": "2026-05-15",
|
|
60
70
|
"breaking": false,
|
|
61
71
|
"stable": true,
|
|
62
72
|
"changelog": null
|
|
63
73
|
},
|
|
64
74
|
"Calendar": {
|
|
65
|
-
"version": "
|
|
66
|
-
"lastUpdated": "2026-05-
|
|
75
|
+
"version": "1.1.0",
|
|
76
|
+
"lastUpdated": "2026-05-15",
|
|
67
77
|
"breaking": false,
|
|
68
78
|
"stable": true,
|
|
69
79
|
"changelog": null
|
|
70
80
|
},
|
|
71
81
|
"Card": {
|
|
72
|
-
"version": "
|
|
73
|
-
"lastUpdated": "2026-05-
|
|
82
|
+
"version": "1.1.0",
|
|
83
|
+
"lastUpdated": "2026-05-15",
|
|
74
84
|
"breaking": false,
|
|
75
85
|
"stable": true,
|
|
76
86
|
"changelog": null
|
|
77
87
|
},
|
|
78
88
|
"Checkbox": {
|
|
79
|
-
"version": "
|
|
80
|
-
"lastUpdated": "2026-05-
|
|
89
|
+
"version": "1.1.0",
|
|
90
|
+
"lastUpdated": "2026-05-15",
|
|
81
91
|
"breaking": false,
|
|
82
92
|
"stable": true,
|
|
83
93
|
"changelog": null
|
|
84
94
|
},
|
|
85
95
|
"Command": {
|
|
86
|
-
"version": "
|
|
87
|
-
"lastUpdated": "2026-05-
|
|
96
|
+
"version": "1.1.0",
|
|
97
|
+
"lastUpdated": "2026-05-15",
|
|
88
98
|
"breaking": false,
|
|
89
99
|
"stable": true,
|
|
90
100
|
"changelog": null
|
|
91
101
|
},
|
|
92
102
|
"DropdownMenu": {
|
|
93
|
-
"version": "
|
|
94
|
-
"lastUpdated": "2026-05-
|
|
103
|
+
"version": "1.1.0",
|
|
104
|
+
"lastUpdated": "2026-05-15",
|
|
95
105
|
"breaking": false,
|
|
96
106
|
"stable": true,
|
|
97
107
|
"changelog": null
|
|
98
108
|
},
|
|
99
109
|
"Field": {
|
|
100
|
-
"version": "
|
|
101
|
-
"lastUpdated": "2026-05-
|
|
110
|
+
"version": "1.1.0",
|
|
111
|
+
"lastUpdated": "2026-05-15",
|
|
102
112
|
"breaking": false,
|
|
103
113
|
"stable": true,
|
|
104
114
|
"changelog": null
|
|
105
115
|
},
|
|
106
116
|
"Input": {
|
|
107
|
-
"version": "
|
|
108
|
-
"lastUpdated": "2026-05-
|
|
117
|
+
"version": "1.1.0",
|
|
118
|
+
"lastUpdated": "2026-05-15",
|
|
109
119
|
"breaking": false,
|
|
110
120
|
"stable": true,
|
|
111
121
|
"changelog": null
|
|
112
122
|
},
|
|
113
123
|
"Label": {
|
|
114
|
-
"version": "
|
|
115
|
-
"lastUpdated": "2026-05-
|
|
124
|
+
"version": "1.1.0",
|
|
125
|
+
"lastUpdated": "2026-05-15",
|
|
116
126
|
"breaking": false,
|
|
117
127
|
"stable": true,
|
|
118
128
|
"changelog": null
|
|
119
129
|
},
|
|
120
130
|
"Modal": {
|
|
121
|
-
"version": "
|
|
122
|
-
"lastUpdated": "2026-05-
|
|
131
|
+
"version": "1.1.0",
|
|
132
|
+
"lastUpdated": "2026-05-15",
|
|
123
133
|
"breaking": false,
|
|
124
134
|
"stable": true,
|
|
125
135
|
"changelog": null
|
|
126
136
|
},
|
|
127
137
|
"Pagination": {
|
|
128
|
-
"version": "
|
|
129
|
-
"lastUpdated": "2026-05-
|
|
138
|
+
"version": "1.1.0",
|
|
139
|
+
"lastUpdated": "2026-05-15",
|
|
130
140
|
"breaking": false,
|
|
131
141
|
"stable": true,
|
|
132
142
|
"changelog": null
|
|
133
143
|
},
|
|
134
144
|
"Popover": {
|
|
135
|
-
"version": "
|
|
136
|
-
"lastUpdated": "2026-05-
|
|
145
|
+
"version": "1.1.0",
|
|
146
|
+
"lastUpdated": "2026-05-15",
|
|
137
147
|
"breaking": false,
|
|
138
148
|
"stable": true,
|
|
139
149
|
"changelog": null
|
|
140
150
|
},
|
|
141
151
|
"Progress": {
|
|
142
|
-
"version": "
|
|
143
|
-
"lastUpdated": "2026-05-
|
|
152
|
+
"version": "1.1.0",
|
|
153
|
+
"lastUpdated": "2026-05-15",
|
|
144
154
|
"breaking": false,
|
|
145
155
|
"stable": true,
|
|
146
156
|
"changelog": null
|
|
147
157
|
},
|
|
148
158
|
"Select": {
|
|
149
|
-
"version": "
|
|
150
|
-
"lastUpdated": "2026-05-
|
|
159
|
+
"version": "1.1.0",
|
|
160
|
+
"lastUpdated": "2026-05-15",
|
|
151
161
|
"breaking": false,
|
|
152
162
|
"stable": true,
|
|
153
163
|
"changelog": null
|
|
154
164
|
},
|
|
155
165
|
"Separator": {
|
|
156
|
-
"version": "
|
|
157
|
-
"lastUpdated": "2026-05-
|
|
166
|
+
"version": "1.1.0",
|
|
167
|
+
"lastUpdated": "2026-05-15",
|
|
158
168
|
"breaking": false,
|
|
159
169
|
"stable": true,
|
|
160
170
|
"changelog": null
|
|
161
171
|
},
|
|
162
172
|
"Sheet": {
|
|
163
|
-
"version": "
|
|
164
|
-
"lastUpdated": "2026-05-
|
|
173
|
+
"version": "1.1.0",
|
|
174
|
+
"lastUpdated": "2026-05-15",
|
|
165
175
|
"breaking": false,
|
|
166
176
|
"stable": true,
|
|
167
177
|
"changelog": null
|
|
168
178
|
},
|
|
169
179
|
"Sidebar": {
|
|
170
|
-
"version": "
|
|
171
|
-
"lastUpdated": "2026-05-
|
|
180
|
+
"version": "1.1.0",
|
|
181
|
+
"lastUpdated": "2026-05-15",
|
|
172
182
|
"breaking": false,
|
|
173
183
|
"stable": true,
|
|
174
184
|
"changelog": null
|
|
175
185
|
},
|
|
176
186
|
"Skeleton": {
|
|
177
|
-
"version": "
|
|
178
|
-
"lastUpdated": "2026-05-
|
|
187
|
+
"version": "1.1.0",
|
|
188
|
+
"lastUpdated": "2026-05-15",
|
|
179
189
|
"breaking": false,
|
|
180
190
|
"stable": true,
|
|
181
191
|
"changelog": null
|
|
182
192
|
},
|
|
183
193
|
"Slider": {
|
|
184
|
-
"version": "
|
|
185
|
-
"lastUpdated": "2026-05-
|
|
194
|
+
"version": "1.1.0",
|
|
195
|
+
"lastUpdated": "2026-05-15",
|
|
186
196
|
"breaking": false,
|
|
187
197
|
"stable": true,
|
|
188
198
|
"changelog": null
|
|
189
199
|
},
|
|
190
200
|
"Switch": {
|
|
191
|
-
"version": "
|
|
192
|
-
"lastUpdated": "2026-05-
|
|
201
|
+
"version": "1.1.0",
|
|
202
|
+
"lastUpdated": "2026-05-15",
|
|
193
203
|
"breaking": false,
|
|
194
204
|
"stable": true,
|
|
195
205
|
"changelog": null
|
|
196
206
|
},
|
|
197
207
|
"Table": {
|
|
198
|
-
"version": "
|
|
199
|
-
"lastUpdated": "2026-05-
|
|
208
|
+
"version": "1.1.0",
|
|
209
|
+
"lastUpdated": "2026-05-15",
|
|
200
210
|
"breaking": false,
|
|
201
211
|
"stable": true,
|
|
202
212
|
"changelog": null
|
|
203
213
|
},
|
|
204
214
|
"Tabs": {
|
|
205
|
-
"version": "
|
|
206
|
-
"lastUpdated": "2026-05-
|
|
215
|
+
"version": "1.1.0",
|
|
216
|
+
"lastUpdated": "2026-05-15",
|
|
207
217
|
"breaking": false,
|
|
208
218
|
"stable": true,
|
|
209
219
|
"changelog": null
|
|
210
220
|
},
|
|
211
221
|
"Toast": {
|
|
212
|
-
"version": "
|
|
213
|
-
"lastUpdated": "2026-05-
|
|
222
|
+
"version": "1.1.0",
|
|
223
|
+
"lastUpdated": "2026-05-15",
|
|
214
224
|
"breaking": false,
|
|
215
225
|
"stable": true,
|
|
216
226
|
"changelog": null
|
|
217
227
|
},
|
|
218
228
|
"Tooltip": {
|
|
219
|
-
"version": "
|
|
220
|
-
"lastUpdated": "2026-05-
|
|
229
|
+
"version": "1.1.0",
|
|
230
|
+
"lastUpdated": "2026-05-15",
|
|
221
231
|
"breaking": false,
|
|
222
232
|
"stable": true,
|
|
223
233
|
"changelog": null
|
|
224
234
|
},
|
|
225
235
|
"Typography": {
|
|
226
|
-
"version": "
|
|
227
|
-
"lastUpdated": "2026-05-
|
|
236
|
+
"version": "1.1.0",
|
|
237
|
+
"lastUpdated": "2026-05-15",
|
|
238
|
+
"breaking": false,
|
|
239
|
+
"stable": true,
|
|
240
|
+
"changelog": null
|
|
241
|
+
},
|
|
242
|
+
"ButtonGroup": {
|
|
243
|
+
"version": "1.1.0",
|
|
244
|
+
"lastUpdated": "2026-05-15",
|
|
245
|
+
"breaking": false,
|
|
246
|
+
"stable": true,
|
|
247
|
+
"changelog": null
|
|
248
|
+
},
|
|
249
|
+
"TagsInput": {
|
|
250
|
+
"version": "1.1.0",
|
|
251
|
+
"lastUpdated": "2026-05-15",
|
|
252
|
+
"breaking": false,
|
|
253
|
+
"stable": true,
|
|
254
|
+
"changelog": null
|
|
255
|
+
},
|
|
256
|
+
"Combobox": {
|
|
257
|
+
"version": "1.1.0",
|
|
258
|
+
"lastUpdated": "2026-05-15",
|
|
259
|
+
"breaking": false,
|
|
260
|
+
"stable": true,
|
|
261
|
+
"changelog": null
|
|
262
|
+
},
|
|
263
|
+
"DataGrid": {
|
|
264
|
+
"version": "1.1.0",
|
|
265
|
+
"lastUpdated": "2026-05-15",
|
|
266
|
+
"breaking": false,
|
|
267
|
+
"stable": true,
|
|
268
|
+
"changelog": null
|
|
269
|
+
},
|
|
270
|
+
"Tag": {
|
|
271
|
+
"version": "1.1.0",
|
|
272
|
+
"lastUpdated": "2026-05-15",
|
|
273
|
+
"breaking": false,
|
|
274
|
+
"stable": true,
|
|
275
|
+
"changelog": null
|
|
276
|
+
},
|
|
277
|
+
"TagGroup": {
|
|
278
|
+
"version": "1.1.0",
|
|
279
|
+
"lastUpdated": "2026-05-15",
|
|
228
280
|
"breaking": false,
|
|
229
281
|
"stable": true,
|
|
230
282
|
"changelog": null
|
package/dist/windsurf-rules.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# useVyre Rules for Windsurf
|
|
2
|
-
# Version:
|
|
2
|
+
# Version: 1.1.0
|
|
3
3
|
|
|
4
4
|
# useVyre Design System — AI Context
|
|
5
5
|
# Version: 0.2.0
|
|
@@ -884,6 +884,188 @@ import { Text, Heading, Lead, Code, Blockquote } from "@usevyre/react"
|
|
|
884
884
|
|
|
885
885
|
---
|
|
886
886
|
|
|
887
|
+
### ButtonGroup
|
|
888
|
+
|
|
889
|
+
Groups multiple Button components into one visual unit (toolbar, segmented control). Pure layout — no internal state.
|
|
890
|
+
|
|
891
|
+
```tsx
|
|
892
|
+
import { ButtonGroup, Button } from "@usevyre/react"
|
|
893
|
+
|
|
894
|
+
// Props:
|
|
895
|
+
// orientation = "horizontal" | "vertical" (default: horizontal)
|
|
896
|
+
// attached = boolean (default: false)
|
|
897
|
+
// size = "sm" | "md" | "lg" | "icon"
|
|
898
|
+
|
|
899
|
+
// Examples:
|
|
900
|
+
<ButtonGroup attached>
|
|
901
|
+
<Button variant="secondary">Day</Button>
|
|
902
|
+
<Button variant="secondary">Week</Button>
|
|
903
|
+
<Button variant="secondary">Month</Button>
|
|
904
|
+
</ButtonGroup>
|
|
905
|
+
<ButtonGroup orientation="vertical" attached>
|
|
906
|
+
<Button variant="secondary">Top</Button>
|
|
907
|
+
<Button variant="secondary">Bottom</Button>
|
|
908
|
+
</ButtonGroup>
|
|
909
|
+
```
|
|
910
|
+
|
|
911
|
+
**Common mistakes:**
|
|
912
|
+
- ❌ `ButtonGroup variant="..."` → Set variant on each <Button> inside the group
|
|
913
|
+
- ❌ `ButtonGroup without Button children` → Place <Button> elements as direct children
|
|
914
|
+
|
|
915
|
+
---
|
|
916
|
+
|
|
917
|
+
### TagsInput
|
|
918
|
+
|
|
919
|
+
Multi-tag input. Type and press Enter or comma to add a tag, click x to remove, Backspace on empty input removes the last tag. Controlled.
|
|
920
|
+
|
|
921
|
+
```tsx
|
|
922
|
+
import { TagsInput } from "@usevyre/react"
|
|
923
|
+
|
|
924
|
+
// Props:
|
|
925
|
+
// value = string[]
|
|
926
|
+
// onChange = (tags: string[]) => void
|
|
927
|
+
// placeholder = string
|
|
928
|
+
// disabled = boolean (default: false)
|
|
929
|
+
// max = number
|
|
930
|
+
// size = "sm" | "md" | "lg" (default: md)
|
|
931
|
+
|
|
932
|
+
// Examples:
|
|
933
|
+
const [tags, setTags] = useState<string[]>([]);
|
|
934
|
+
<TagsInput value={tags} onChange={setTags} placeholder="Add a tag…" />
|
|
935
|
+
<TagsInput value={tags} onChange={setTags} max={5} />
|
|
936
|
+
```
|
|
937
|
+
|
|
938
|
+
**Common mistakes:**
|
|
939
|
+
- ❌ `TagsInput value={string}` → Pass an array: value={['react','vue']}
|
|
940
|
+
- ❌ `TagsInput without onChange` → Provide value and onChange (React) or v-model (Vue)
|
|
941
|
+
|
|
942
|
+
---
|
|
943
|
+
|
|
944
|
+
### Combobox
|
|
945
|
+
|
|
946
|
+
Searchable single-select dropdown with typeahead filtering and keyboard navigation. Use when the list is long enough to need search. Differs from Select (no search) and Command (palette).
|
|
947
|
+
|
|
948
|
+
```tsx
|
|
949
|
+
import { Combobox } from "@usevyre/react"
|
|
950
|
+
|
|
951
|
+
// Props:
|
|
952
|
+
// options = { value: string; label: string; disabled?: boolean }[]
|
|
953
|
+
// value = string | null
|
|
954
|
+
// onChange = (value: string | null) => void
|
|
955
|
+
// placeholder = string (default: "Search…")
|
|
956
|
+
// disabled = boolean (default: false)
|
|
957
|
+
// size = "sm" | "md" | "lg" (default: md)
|
|
958
|
+
// emptyText = string (default: "No results")
|
|
959
|
+
|
|
960
|
+
// Examples:
|
|
961
|
+
const [lang, setLang] = useState<string | null>(null);
|
|
962
|
+
<Combobox
|
|
963
|
+
options={[{ value: "ts", label: "TypeScript" }, { value: "go", label: "Go" }]}
|
|
964
|
+
value={lang}
|
|
965
|
+
onChange={setLang}
|
|
966
|
+
placeholder="Search language…"
|
|
967
|
+
/>
|
|
968
|
+
```
|
|
969
|
+
|
|
970
|
+
**Common mistakes:**
|
|
971
|
+
- ❌ `Combobox value=""` → Use value={null} for no selection
|
|
972
|
+
- ❌ `Combobox options={string[]}` → Use [{ value: 'ts', label: 'TypeScript' }]
|
|
973
|
+
- ❌ `Using Combobox for command palette` → Use Command for command palettes
|
|
974
|
+
|
|
975
|
+
---
|
|
976
|
+
|
|
977
|
+
### DataGrid
|
|
978
|
+
|
|
979
|
+
Table with built-in column sorting, loading skeletons, and empty state. Filtering and pagination are out of scope — compose with the Pagination component.
|
|
980
|
+
|
|
981
|
+
```tsx
|
|
982
|
+
import { DataGrid } from "@usevyre/react"
|
|
983
|
+
|
|
984
|
+
// Props:
|
|
985
|
+
// columns = { key: string; label: string; sortable?: boolean; width?: string }[]
|
|
986
|
+
// rows = Record<string, unknown>[]
|
|
987
|
+
// sortKey = string
|
|
988
|
+
// sortDir = "asc" | "desc"
|
|
989
|
+
// onSort = (key: string, dir: 'asc' | 'desc') => void
|
|
990
|
+
// loading = boolean (default: false)
|
|
991
|
+
// emptyText = string (default: "No data")
|
|
992
|
+
// stickyHeader = boolean (default: false)
|
|
993
|
+
|
|
994
|
+
// Examples:
|
|
995
|
+
const cols = [{ key: "name", label: "Name", sortable: true }];
|
|
996
|
+
<DataGrid
|
|
997
|
+
columns={cols}
|
|
998
|
+
rows={people}
|
|
999
|
+
sortKey={sortKey}
|
|
1000
|
+
sortDir={sortDir}
|
|
1001
|
+
onSort={(k, d) => { setSortKey(k); setSortDir(d); }}
|
|
1002
|
+
/>
|
|
1003
|
+
<DataGrid columns={cols} rows={[]} loading />
|
|
1004
|
+
```
|
|
1005
|
+
|
|
1006
|
+
**Common mistakes:**
|
|
1007
|
+
- ❌ `DataGrid expecting built-in pagination` → Slice rows yourself and use the Pagination component
|
|
1008
|
+
- ❌ `DataGrid expecting built-in filtering` → Filter the rows array before passing it in
|
|
1009
|
+
- ❌ `sortable without onSort` → Handle onSort and sort the rows array in your state
|
|
1010
|
+
|
|
1011
|
+
---
|
|
1012
|
+
|
|
1013
|
+
### Tag
|
|
1014
|
+
|
|
1015
|
+
Standalone display tag/chip for categories, labels, or filter chips. NOT an input — for tag input use TagsInput. Group multiple with TagGroup.
|
|
1016
|
+
|
|
1017
|
+
```tsx
|
|
1018
|
+
import { Tag } from "@usevyre/react"
|
|
1019
|
+
|
|
1020
|
+
// Props:
|
|
1021
|
+
// variant = "default" | "accent" | "danger" (default: default)
|
|
1022
|
+
// size = "sm" | "md" | "lg" (default: md)
|
|
1023
|
+
// onRemove = () => void
|
|
1024
|
+
// onClick = () => void
|
|
1025
|
+
// disabled = boolean (default: false)
|
|
1026
|
+
|
|
1027
|
+
// Examples:
|
|
1028
|
+
<TagGroup>
|
|
1029
|
+
<Tag>Design</Tag>
|
|
1030
|
+
<Tag variant="accent">Featured</Tag>
|
|
1031
|
+
<Tag>Engineering</Tag>
|
|
1032
|
+
</TagGroup>
|
|
1033
|
+
<Tag onRemove={() => removeFilter("react")}>react</Tag>
|
|
1034
|
+
<Tag onClick={() => toggleFilter("vue")}>vue</Tag>
|
|
1035
|
+
```
|
|
1036
|
+
|
|
1037
|
+
**Common mistakes:**
|
|
1038
|
+
- ❌ `Tag variant="success"` → Use Badge for success/warning/teal status colors; Tag is for categories/filters
|
|
1039
|
+
- ❌ `Using Tag for tag input` → Use TagsInput for adding/removing tags via keyboard
|
|
1040
|
+
- ❌ `Tag size="xl"` → Use size="lg"
|
|
1041
|
+
|
|
1042
|
+
---
|
|
1043
|
+
|
|
1044
|
+
### TagGroup
|
|
1045
|
+
|
|
1046
|
+
Read-only container that lays out multiple Tag elements with automatic wrapping and consistent spacing. For tag input use TagsInput.
|
|
1047
|
+
|
|
1048
|
+
```tsx
|
|
1049
|
+
import { TagGroup, Tag } from "@usevyre/react"
|
|
1050
|
+
|
|
1051
|
+
// Props:
|
|
1052
|
+
// gap = "sm" | "md" | "lg" (default: md)
|
|
1053
|
+
// wrap = boolean (default: true)
|
|
1054
|
+
|
|
1055
|
+
// Examples:
|
|
1056
|
+
<TagGroup gap="sm">
|
|
1057
|
+
<Tag>React</Tag>
|
|
1058
|
+
<Tag>Vue</Tag>
|
|
1059
|
+
<Tag variant="accent">TypeScript</Tag>
|
|
1060
|
+
</TagGroup>
|
|
1061
|
+
```
|
|
1062
|
+
|
|
1063
|
+
**Common mistakes:**
|
|
1064
|
+
- ❌ `TagGroup without Tag children` → Place <Tag> elements as direct children
|
|
1065
|
+
- ❌ `Using TagGroup for tag input` → Use TagsInput for an editable tag field
|
|
1066
|
+
|
|
1067
|
+
---
|
|
1068
|
+
|
|
887
1069
|
## Hallucination Guard — Common AI Mistakes
|
|
888
1070
|
|
|
889
1071
|
The following prop values and patterns do NOT exist in useVyre.
|
|
@@ -920,6 +1102,21 @@ If you generate these, you are hallucinating.
|
|
|
920
1102
|
- ❌ `<Toast variant="info">` → Use variant="default"
|
|
921
1103
|
- ❌ `<Tooltip Using Tooltip for rich content (forms, buttons, etc.)>` → Use Popover for rich interactive content
|
|
922
1104
|
- ❌ `<Typography Using raw <h1>, <p> tags instead of Typography components>` → Use <Heading>, <Text>, <Lead> from @usevyre/react
|
|
1105
|
+
- ❌ `<ButtonGroup ButtonGroup variant="...">` → Set variant on each <Button> inside the group
|
|
1106
|
+
- ❌ `<ButtonGroup ButtonGroup without Button children>` → Place <Button> elements as direct children
|
|
1107
|
+
- ❌ `<TagsInput TagsInput value={string}>` → Pass an array: value={['react','vue']}
|
|
1108
|
+
- ❌ `<TagsInput TagsInput without onChange>` → Provide value and onChange (React) or v-model (Vue)
|
|
1109
|
+
- ❌ `<Combobox Combobox value="">` → Use value={null} for no selection
|
|
1110
|
+
- ❌ `<Combobox Combobox options={string[]}>` → Use [{ value: 'ts', label: 'TypeScript' }]
|
|
1111
|
+
- ❌ `<Combobox Using Combobox for command palette>` → Use Command for command palettes
|
|
1112
|
+
- ❌ `<DataGrid DataGrid expecting built-in pagination>` → Slice rows yourself and use the Pagination component
|
|
1113
|
+
- ❌ `<DataGrid DataGrid expecting built-in filtering>` → Filter the rows array before passing it in
|
|
1114
|
+
- ❌ `<DataGrid sortable without onSort>` → Handle onSort and sort the rows array in your state
|
|
1115
|
+
- ❌ `<Tag Tag variant="success">` → Use Badge for success/warning/teal status colors; Tag is for categories/filters
|
|
1116
|
+
- ❌ `<Tag Using Tag for tag input>` → Use TagsInput for adding/removing tags via keyboard
|
|
1117
|
+
- ❌ `<Tag Tag size="xl">` → Use size="lg"
|
|
1118
|
+
- ❌ `<TagGroup TagGroup without Tag children>` → Place <Tag> elements as direct children
|
|
1119
|
+
- ❌ `<TagGroup Using TagGroup for tag input>` → Use TagsInput for an editable tag field
|
|
923
1120
|
|
|
924
1121
|
---
|
|
925
1122
|
|