@usevyre/ai-context 1.0.1 → 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.
@@ -1,12 +1,17 @@
1
1
  {
2
- "version": "1.0.0",
3
- "packageVersion": "1.0.0",
4
- "generatedAt": "2026-05-13T08:35:50.053Z",
2
+ "version": "1.1.0",
3
+ "packageVersion": "1.1.0",
4
+ "generatedAt": "2026-05-15T15:01:34.101Z",
5
5
  "validFor": [
6
- "@usevyre/react@1.0.0+",
7
- "@usevyre/vue@1.0.0+"
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
+ },
10
15
  "1.0.0": {
11
16
  "date": "2026-05-13",
12
17
  "breaking": true,
@@ -25,211 +30,253 @@
25
30
  },
26
31
  "components": {
27
32
  "Accordion": {
28
- "version": "1.0.0",
29
- "lastUpdated": "2026-05-13",
33
+ "version": "1.1.0",
34
+ "lastUpdated": "2026-05-15",
30
35
  "breaking": false,
31
36
  "stable": true,
32
37
  "changelog": null
33
38
  },
34
39
  "Alert": {
35
- "version": "1.0.0",
36
- "lastUpdated": "2026-05-13",
40
+ "version": "1.1.0",
41
+ "lastUpdated": "2026-05-15",
37
42
  "breaking": false,
38
43
  "stable": true,
39
44
  "changelog": null
40
45
  },
41
46
  "Avatar": {
42
- "version": "1.0.0",
43
- "lastUpdated": "2026-05-13",
47
+ "version": "1.1.0",
48
+ "lastUpdated": "2026-05-15",
44
49
  "breaking": false,
45
50
  "stable": true,
46
51
  "changelog": null
47
52
  },
48
53
  "Badge": {
49
- "version": "1.0.0",
50
- "lastUpdated": "2026-05-13",
54
+ "version": "1.1.0",
55
+ "lastUpdated": "2026-05-15",
51
56
  "breaking": false,
52
57
  "stable": true,
53
58
  "changelog": null
54
59
  },
55
60
  "Breadcrumb": {
56
- "version": "1.0.0",
57
- "lastUpdated": "2026-05-13",
61
+ "version": "1.1.0",
62
+ "lastUpdated": "2026-05-15",
58
63
  "breaking": false,
59
64
  "stable": true,
60
65
  "changelog": null
61
66
  },
62
67
  "Button": {
63
- "version": "1.0.0",
64
- "lastUpdated": "2026-05-13",
68
+ "version": "1.1.0",
69
+ "lastUpdated": "2026-05-15",
65
70
  "breaking": false,
66
71
  "stable": true,
67
72
  "changelog": null
68
73
  },
69
74
  "Calendar": {
70
- "version": "1.0.0",
71
- "lastUpdated": "2026-05-13",
75
+ "version": "1.1.0",
76
+ "lastUpdated": "2026-05-15",
72
77
  "breaking": false,
73
78
  "stable": true,
74
79
  "changelog": null
75
80
  },
76
81
  "Card": {
77
- "version": "1.0.0",
78
- "lastUpdated": "2026-05-13",
82
+ "version": "1.1.0",
83
+ "lastUpdated": "2026-05-15",
79
84
  "breaking": false,
80
85
  "stable": true,
81
86
  "changelog": null
82
87
  },
83
88
  "Checkbox": {
84
- "version": "1.0.0",
85
- "lastUpdated": "2026-05-13",
89
+ "version": "1.1.0",
90
+ "lastUpdated": "2026-05-15",
86
91
  "breaking": false,
87
92
  "stable": true,
88
93
  "changelog": null
89
94
  },
90
95
  "Command": {
91
- "version": "1.0.0",
92
- "lastUpdated": "2026-05-13",
96
+ "version": "1.1.0",
97
+ "lastUpdated": "2026-05-15",
93
98
  "breaking": false,
94
99
  "stable": true,
95
100
  "changelog": null
96
101
  },
97
102
  "DropdownMenu": {
98
- "version": "1.0.0",
99
- "lastUpdated": "2026-05-13",
103
+ "version": "1.1.0",
104
+ "lastUpdated": "2026-05-15",
100
105
  "breaking": false,
101
106
  "stable": true,
102
107
  "changelog": null
103
108
  },
104
109
  "Field": {
105
- "version": "1.0.0",
106
- "lastUpdated": "2026-05-13",
110
+ "version": "1.1.0",
111
+ "lastUpdated": "2026-05-15",
107
112
  "breaking": false,
108
113
  "stable": true,
109
114
  "changelog": null
110
115
  },
111
116
  "Input": {
112
- "version": "1.0.0",
113
- "lastUpdated": "2026-05-13",
117
+ "version": "1.1.0",
118
+ "lastUpdated": "2026-05-15",
114
119
  "breaking": false,
115
120
  "stable": true,
116
121
  "changelog": null
117
122
  },
118
123
  "Label": {
119
- "version": "1.0.0",
120
- "lastUpdated": "2026-05-13",
124
+ "version": "1.1.0",
125
+ "lastUpdated": "2026-05-15",
121
126
  "breaking": false,
122
127
  "stable": true,
123
128
  "changelog": null
124
129
  },
125
130
  "Modal": {
126
- "version": "1.0.0",
127
- "lastUpdated": "2026-05-13",
131
+ "version": "1.1.0",
132
+ "lastUpdated": "2026-05-15",
128
133
  "breaking": false,
129
134
  "stable": true,
130
135
  "changelog": null
131
136
  },
132
137
  "Pagination": {
133
- "version": "1.0.0",
134
- "lastUpdated": "2026-05-13",
138
+ "version": "1.1.0",
139
+ "lastUpdated": "2026-05-15",
135
140
  "breaking": false,
136
141
  "stable": true,
137
142
  "changelog": null
138
143
  },
139
144
  "Popover": {
140
- "version": "1.0.0",
141
- "lastUpdated": "2026-05-13",
145
+ "version": "1.1.0",
146
+ "lastUpdated": "2026-05-15",
142
147
  "breaking": false,
143
148
  "stable": true,
144
149
  "changelog": null
145
150
  },
146
151
  "Progress": {
147
- "version": "1.0.0",
148
- "lastUpdated": "2026-05-13",
152
+ "version": "1.1.0",
153
+ "lastUpdated": "2026-05-15",
149
154
  "breaking": false,
150
155
  "stable": true,
151
156
  "changelog": null
152
157
  },
153
158
  "Select": {
154
- "version": "1.0.0",
155
- "lastUpdated": "2026-05-13",
159
+ "version": "1.1.0",
160
+ "lastUpdated": "2026-05-15",
156
161
  "breaking": false,
157
162
  "stable": true,
158
163
  "changelog": null
159
164
  },
160
165
  "Separator": {
161
- "version": "1.0.0",
162
- "lastUpdated": "2026-05-13",
166
+ "version": "1.1.0",
167
+ "lastUpdated": "2026-05-15",
163
168
  "breaking": false,
164
169
  "stable": true,
165
170
  "changelog": null
166
171
  },
167
172
  "Sheet": {
168
- "version": "1.0.0",
169
- "lastUpdated": "2026-05-13",
173
+ "version": "1.1.0",
174
+ "lastUpdated": "2026-05-15",
170
175
  "breaking": false,
171
176
  "stable": true,
172
177
  "changelog": null
173
178
  },
174
179
  "Sidebar": {
175
- "version": "1.0.0",
176
- "lastUpdated": "2026-05-13",
180
+ "version": "1.1.0",
181
+ "lastUpdated": "2026-05-15",
177
182
  "breaking": false,
178
183
  "stable": true,
179
184
  "changelog": null
180
185
  },
181
186
  "Skeleton": {
182
- "version": "1.0.0",
183
- "lastUpdated": "2026-05-13",
187
+ "version": "1.1.0",
188
+ "lastUpdated": "2026-05-15",
184
189
  "breaking": false,
185
190
  "stable": true,
186
191
  "changelog": null
187
192
  },
188
193
  "Slider": {
189
- "version": "1.0.0",
190
- "lastUpdated": "2026-05-13",
194
+ "version": "1.1.0",
195
+ "lastUpdated": "2026-05-15",
191
196
  "breaking": false,
192
197
  "stable": true,
193
198
  "changelog": null
194
199
  },
195
200
  "Switch": {
196
- "version": "1.0.0",
197
- "lastUpdated": "2026-05-13",
201
+ "version": "1.1.0",
202
+ "lastUpdated": "2026-05-15",
198
203
  "breaking": false,
199
204
  "stable": true,
200
205
  "changelog": null
201
206
  },
202
207
  "Table": {
203
- "version": "1.0.0",
204
- "lastUpdated": "2026-05-13",
208
+ "version": "1.1.0",
209
+ "lastUpdated": "2026-05-15",
205
210
  "breaking": false,
206
211
  "stable": true,
207
212
  "changelog": null
208
213
  },
209
214
  "Tabs": {
210
- "version": "1.0.0",
211
- "lastUpdated": "2026-05-13",
215
+ "version": "1.1.0",
216
+ "lastUpdated": "2026-05-15",
212
217
  "breaking": false,
213
218
  "stable": true,
214
219
  "changelog": null
215
220
  },
216
221
  "Toast": {
217
- "version": "1.0.0",
218
- "lastUpdated": "2026-05-13",
222
+ "version": "1.1.0",
223
+ "lastUpdated": "2026-05-15",
219
224
  "breaking": false,
220
225
  "stable": true,
221
226
  "changelog": null
222
227
  },
223
228
  "Tooltip": {
224
- "version": "1.0.0",
225
- "lastUpdated": "2026-05-13",
229
+ "version": "1.1.0",
230
+ "lastUpdated": "2026-05-15",
226
231
  "breaking": false,
227
232
  "stable": true,
228
233
  "changelog": null
229
234
  },
230
235
  "Typography": {
231
- "version": "1.0.0",
232
- "lastUpdated": "2026-05-13",
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",
233
280
  "breaking": false,
234
281
  "stable": true,
235
282
  "changelog": null
@@ -1,5 +1,5 @@
1
1
  # useVyre Rules for Windsurf
2
- # Version: 1.0.0
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usevyre/ai-context",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "useVyre AI context — inject into LLM system prompts to eliminate UI hallucinations",
5
5
  "keywords": [
6
6
  "design-system",