@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.
@@ -1,12 +1,22 @@
1
1
  {
2
- "version": "0.2.0",
3
- "packageVersion": "0.1.1",
4
- "generatedAt": "2026-05-10T13:15:02.040Z",
2
+ "version": "1.1.0",
3
+ "packageVersion": "1.1.0",
4
+ "generatedAt": "2026-05-15T15:01:34.101Z",
5
5
  "validFor": [
6
- "@usevyre/react@0.1.1+",
7
- "@usevyre/vue@0.1.1+"
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": "0.1.1",
24
- "lastUpdated": "2026-05-08",
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": "0.1.1",
31
- "lastUpdated": "2026-05-08",
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": "0.1.1",
38
- "lastUpdated": "2026-05-08",
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": "0.1.1",
45
- "lastUpdated": "2026-05-08",
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": "0.1.1",
52
- "lastUpdated": "2026-05-08",
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": "0.1.1",
59
- "lastUpdated": "2026-05-08",
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": "0.1.1",
66
- "lastUpdated": "2026-05-08",
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": "0.1.1",
73
- "lastUpdated": "2026-05-08",
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": "0.1.1",
80
- "lastUpdated": "2026-05-08",
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": "0.1.1",
87
- "lastUpdated": "2026-05-08",
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": "0.1.1",
94
- "lastUpdated": "2026-05-08",
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": "0.1.1",
101
- "lastUpdated": "2026-05-08",
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": "0.1.1",
108
- "lastUpdated": "2026-05-08",
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": "0.1.1",
115
- "lastUpdated": "2026-05-08",
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": "0.1.1",
122
- "lastUpdated": "2026-05-08",
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": "0.1.1",
129
- "lastUpdated": "2026-05-08",
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": "0.1.1",
136
- "lastUpdated": "2026-05-08",
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": "0.1.1",
143
- "lastUpdated": "2026-05-08",
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": "0.1.1",
150
- "lastUpdated": "2026-05-08",
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": "0.1.1",
157
- "lastUpdated": "2026-05-08",
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": "0.1.1",
164
- "lastUpdated": "2026-05-08",
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": "0.1.1",
171
- "lastUpdated": "2026-05-08",
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": "0.1.1",
178
- "lastUpdated": "2026-05-08",
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": "0.1.1",
185
- "lastUpdated": "2026-05-08",
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": "0.1.1",
192
- "lastUpdated": "2026-05-08",
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": "0.1.1",
199
- "lastUpdated": "2026-05-08",
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": "0.1.1",
206
- "lastUpdated": "2026-05-08",
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": "0.1.1",
213
- "lastUpdated": "2026-05-08",
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": "0.1.1",
220
- "lastUpdated": "2026-05-08",
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": "0.1.1",
227
- "lastUpdated": "2026-05-08",
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
@@ -1,5 +1,5 @@
1
1
  # useVyre Rules for Windsurf
2
- # Version: 0.2.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.0",
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",