@maestro-js/components 1.0.0-alpha.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/commands/add.ts +41 -0
- package/commands/index.ts +7 -0
- package/commands/list.ts +9 -0
- package/dist/components.json +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +48 -0
- package/package.json +49 -0
- package/registry.json +1445 -0
- package/scripts/build.ts +44 -0
- package/src/components/alert-dialog.tsx +150 -0
- package/src/components/autocomplete.tsx +288 -0
- package/src/components/autosuggest.tsx +314 -0
- package/src/components/avatar.tsx +54 -0
- package/src/components/boolean-select.tsx +48 -0
- package/src/components/button-group.tsx +75 -0
- package/src/components/button-link.tsx +71 -0
- package/src/components/button.tsx +132 -0
- package/src/components/checkbox-group.tsx +172 -0
- package/src/components/checkbox.tsx +207 -0
- package/src/components/chip.tsx +158 -0
- package/src/components/container.tsx +82 -0
- package/src/components/currency-field.tsx +183 -0
- package/src/components/date-input.tsx +189 -0
- package/src/components/date-picker.tsx +211 -0
- package/src/components/date-range-picker.tsx +290 -0
- package/src/components/date-time-picker.tsx +196 -0
- package/src/components/dialog.tsx +97 -0
- package/src/components/disclosure.tsx +114 -0
- package/src/components/drawer.tsx +78 -0
- package/src/components/enum-chip.tsx +30 -0
- package/src/components/file-input.tsx +245 -0
- package/src/components/form.tsx +82 -0
- package/src/components/headless-file-input.tsx +362 -0
- package/src/components/helpers/animated-popover.tsx +24 -0
- package/src/components/helpers/button-context.ts +10 -0
- package/src/components/helpers/calendar-month-year-picker.tsx +280 -0
- package/src/components/helpers/form-field.tsx +229 -0
- package/src/components/helpers/get-button-classes.ts +138 -0
- package/src/components/helpers/headless-button.tsx +36 -0
- package/src/components/helpers/pdf-dist.client.ts +6 -0
- package/src/components/icon.tsx +26 -0
- package/src/components/image-input.tsx +265 -0
- package/src/components/img.tsx +46 -0
- package/src/components/inline-alert.tsx +54 -0
- package/src/components/labeled-value.tsx +480 -0
- package/src/components/link-tabs.tsx +118 -0
- package/src/components/menu.tsx +152 -0
- package/src/components/month-day-input.tsx +176 -0
- package/src/components/multi-file-input.tsx +244 -0
- package/src/components/multi-image-input.tsx +389 -0
- package/src/components/multicomplete.tsx +322 -0
- package/src/components/multiselect.tsx +325 -0
- package/src/components/multisuggest.tsx +357 -0
- package/src/components/number-field.tsx +143 -0
- package/src/components/numeric-tag-field.tsx +271 -0
- package/src/components/pdf-input.tsx +249 -0
- package/src/components/pdf.tsx +86 -0
- package/src/components/percentage-field.tsx +187 -0
- package/src/components/phone-number-field.tsx +166 -0
- package/src/components/radio-group.tsx +112 -0
- package/src/components/radio.tsx +91 -0
- package/src/components/select.tsx +215 -0
- package/src/components/spinner.tsx +16 -0
- package/src/components/stepper.tsx +181 -0
- package/src/components/switch.tsx +186 -0
- package/src/components/tabs.tsx +151 -0
- package/src/components/tag-field.tsx +250 -0
- package/src/components/text-area.tsx +148 -0
- package/src/components/text-field.tsx +144 -0
- package/src/components/time-input.tsx +198 -0
- package/src/components/toast.tsx +176 -0
- package/src/components/toggle-button-group.tsx +94 -0
- package/src/components/year-month-input.tsx +187 -0
- package/src/utils/colors.ts +44 -0
- package/src/utils/compose-refs.ts +32 -0
- package/src/utils/enum-colors.ts +1 -0
- package/src/utils/file-input.ts +49 -0
- package/src/utils/icons.d.ts +20 -0
- package/src/utils/tw.ts +13 -0
- package/src/utils/use-element-size.ts +35 -0
- package/src/utils/use-number-input.ts +143 -0
- package/src/utils/use-pagination.ts +38 -0
- package/src/utils/use-prevent-default.ts +27 -0
- package/src/utils/use-render-props.ts +39 -0
- package/src/utils/use-spin-delay.ts +24 -0
- package/src/utils/use-stable-accessor.ts +11 -0
- package/src/utils/use-tab-indicator.ts +106 -0
- package/tests/commands.test.ts +81 -0
- package/tsconfig.json +27 -0
package/registry.json
ADDED
|
@@ -0,0 +1,1445 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "button",
|
|
4
|
+
"title": "Button",
|
|
5
|
+
"description": "A polymorphic button with variants, colors, sizes, shapes, toggle state, and built-in async click handling with a delayed spinner.",
|
|
6
|
+
"files": [
|
|
7
|
+
{
|
|
8
|
+
"path": "src/components/button.tsx",
|
|
9
|
+
"type": "components"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"path": "src/components/icon.tsx",
|
|
13
|
+
"type": "components"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"path": "src/components/spinner.tsx",
|
|
17
|
+
"type": "components"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"path": "src/components/helpers/button-context.ts",
|
|
21
|
+
"type": "components/helpers"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "src/components/helpers/get-button-classes.ts",
|
|
25
|
+
"type": "components/helpers"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"path": "src/components/helpers/headless-button.tsx",
|
|
29
|
+
"type": "components/helpers"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"path": "src/utils/compose-refs.ts",
|
|
33
|
+
"type": "utils"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"path": "src/utils/tw.ts",
|
|
37
|
+
"type": "utils"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"path": "src/utils/use-prevent-default.ts",
|
|
41
|
+
"type": "utils"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"path": "src/utils/use-render-props.ts",
|
|
45
|
+
"type": "utils"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"path": "src/utils/use-spin-delay.ts",
|
|
49
|
+
"type": "utils"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"path": "src/utils/use-stable-accessor.ts",
|
|
53
|
+
"type": "utils"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "icon",
|
|
59
|
+
"title": "Icon",
|
|
60
|
+
"description": "An SVG icon component that renders icons from a sprite sheet.",
|
|
61
|
+
"files": [
|
|
62
|
+
{
|
|
63
|
+
"path": "src/components/icon.tsx",
|
|
64
|
+
"type": "components"
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "headless-file-input",
|
|
70
|
+
"title": "Headless File Input",
|
|
71
|
+
"description": "A headless file input with drag-and-drop, multiple file support, controlled/uncontrolled state, file preview, and form submission for both files and URLs.",
|
|
72
|
+
"files": [
|
|
73
|
+
{
|
|
74
|
+
"path": "src/components/headless-file-input.tsx",
|
|
75
|
+
"type": "components"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"path": "src/utils/compose-refs.ts",
|
|
79
|
+
"type": "utils"
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "button-link",
|
|
85
|
+
"title": "Button Link",
|
|
86
|
+
"description": "A React Router Link styled as a button with variants, colors, sizes, shapes, and a loading spinner for pending navigation.",
|
|
87
|
+
"files": [
|
|
88
|
+
{
|
|
89
|
+
"path": "src/components/button-link.tsx",
|
|
90
|
+
"type": "components"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"path": "src/components/icon.tsx",
|
|
94
|
+
"type": "components"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"path": "src/components/spinner.tsx",
|
|
98
|
+
"type": "components"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"path": "src/components/helpers/button-context.ts",
|
|
102
|
+
"type": "components/helpers"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"path": "src/components/helpers/get-button-classes.ts",
|
|
106
|
+
"type": "components/helpers"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"path": "src/utils/tw.ts",
|
|
110
|
+
"type": "utils"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"path": "src/utils/use-spin-delay.ts",
|
|
114
|
+
"type": "utils"
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "button-group",
|
|
120
|
+
"title": "Button Group",
|
|
121
|
+
"description": "A container for grouping buttons with configurable orientation, alignment, sizing, and full-width support.",
|
|
122
|
+
"files": [
|
|
123
|
+
{
|
|
124
|
+
"path": "src/components/button-group.tsx",
|
|
125
|
+
"type": "components"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"path": "src/utils/tw.ts",
|
|
129
|
+
"type": "utils"
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"name": "toggle-button-group",
|
|
135
|
+
"title": "Toggle Button Group",
|
|
136
|
+
"description": "A radio-style group of toggle buttons with horizontal/vertical layout, keyboard navigation, and size variants.",
|
|
137
|
+
"files": [
|
|
138
|
+
{
|
|
139
|
+
"path": "src/components/toggle-button-group.tsx",
|
|
140
|
+
"type": "components"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"path": "src/components/helpers/get-button-classes.ts",
|
|
144
|
+
"type": "components/helpers"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"path": "src/utils/tw.ts",
|
|
148
|
+
"type": "utils"
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"name": "date-picker",
|
|
154
|
+
"title": "Date Picker",
|
|
155
|
+
"description": "An accessible date picker with calendar popup, month/year navigation, form validation integration, and ISO date string handling.",
|
|
156
|
+
"files": [
|
|
157
|
+
{
|
|
158
|
+
"path": "src/components/date-picker.tsx",
|
|
159
|
+
"type": "components"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"path": "src/components/icon.tsx",
|
|
163
|
+
"type": "components"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
167
|
+
"type": "components/helpers"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"path": "src/components/helpers/calendar-month-year-picker.tsx",
|
|
171
|
+
"type": "components/helpers"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
175
|
+
"type": "components/helpers"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"path": "src/utils/tw.ts",
|
|
179
|
+
"type": "utils"
|
|
180
|
+
}
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"name": "text-field",
|
|
185
|
+
"title": "Text Field",
|
|
186
|
+
"description": "A text input with type variants (email, password, url, etc.), trailing addon support, shape options, form validation integration, and accessible labeling.",
|
|
187
|
+
"files": [
|
|
188
|
+
{
|
|
189
|
+
"path": "src/components/text-field.tsx",
|
|
190
|
+
"type": "components"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
194
|
+
"type": "components/helpers"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"path": "src/components/helpers/headless-button.tsx",
|
|
198
|
+
"type": "components/helpers"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"path": "src/utils/compose-refs.ts",
|
|
202
|
+
"type": "utils"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"path": "src/utils/tw.ts",
|
|
206
|
+
"type": "utils"
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"path": "src/utils/use-render-props.ts",
|
|
210
|
+
"type": "utils"
|
|
211
|
+
}
|
|
212
|
+
]
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"name": "text-area",
|
|
216
|
+
"title": "Text Area",
|
|
217
|
+
"description": "A multi-line text input with auto-resize, min/max rows, resize control, form validation integration, and accessible labeling.",
|
|
218
|
+
"files": [
|
|
219
|
+
{
|
|
220
|
+
"path": "src/components/text-area.tsx",
|
|
221
|
+
"type": "components"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
225
|
+
"type": "components/helpers"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"path": "src/utils/tw.ts",
|
|
229
|
+
"type": "utils"
|
|
230
|
+
}
|
|
231
|
+
]
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"name": "number-field",
|
|
235
|
+
"title": "Number Field",
|
|
236
|
+
"description": "A numeric input with min/max/step constraints, Intl.NumberFormat formatting, form validation integration, and accessible labeling.",
|
|
237
|
+
"files": [
|
|
238
|
+
{
|
|
239
|
+
"path": "src/components/number-field.tsx",
|
|
240
|
+
"type": "components"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
244
|
+
"type": "components/helpers"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"path": "src/utils/tw.ts",
|
|
248
|
+
"type": "utils"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"path": "src/utils/use-number-input.ts",
|
|
252
|
+
"type": "utils"
|
|
253
|
+
}
|
|
254
|
+
]
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"name": "currency-field",
|
|
258
|
+
"title": "Currency Field",
|
|
259
|
+
"description": "A dollar/cents currency input with Intl.NumberFormat formatting, cents-to-dollars conversion, form validation integration, and accessible labeling.",
|
|
260
|
+
"files": [
|
|
261
|
+
{
|
|
262
|
+
"path": "src/components/currency-field.tsx",
|
|
263
|
+
"type": "components"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
267
|
+
"type": "components/helpers"
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"path": "src/utils/tw.ts",
|
|
271
|
+
"type": "utils"
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"path": "src/utils/use-number-input.ts",
|
|
275
|
+
"type": "utils"
|
|
276
|
+
}
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"name": "percentage-field",
|
|
281
|
+
"title": "Percentage Field",
|
|
282
|
+
"description": "A percentage input with integer/decimal unit conversion, Intl.NumberFormat percent formatting, form validation integration, and accessible labeling.",
|
|
283
|
+
"files": [
|
|
284
|
+
{
|
|
285
|
+
"path": "src/components/percentage-field.tsx",
|
|
286
|
+
"type": "components"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
290
|
+
"type": "components/helpers"
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"path": "src/utils/tw.ts",
|
|
294
|
+
"type": "utils"
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"path": "src/utils/use-number-input.ts",
|
|
298
|
+
"type": "utils"
|
|
299
|
+
}
|
|
300
|
+
]
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"name": "phone-number-field",
|
|
304
|
+
"title": "Phone Number Field",
|
|
305
|
+
"description": "A phone number input with auto-formatting for US/CA/international numbers, form validation integration, and accessible labeling.",
|
|
306
|
+
"files": [
|
|
307
|
+
{
|
|
308
|
+
"path": "src/components/phone-number-field.tsx",
|
|
309
|
+
"type": "components"
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
313
|
+
"type": "components/helpers"
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"path": "src/utils/tw.ts",
|
|
317
|
+
"type": "utils"
|
|
318
|
+
}
|
|
319
|
+
]
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"name": "tag-field",
|
|
323
|
+
"title": "Tag Field",
|
|
324
|
+
"description": "A string tag input with custom separators, duplicate prevention, tag validation/transformation, max tag limits, and form integration.",
|
|
325
|
+
"files": [
|
|
326
|
+
{
|
|
327
|
+
"path": "src/components/tag-field.tsx",
|
|
328
|
+
"type": "components"
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"path": "src/components/icon.tsx",
|
|
332
|
+
"type": "components"
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
336
|
+
"type": "components/helpers"
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"path": "src/utils/tw.ts",
|
|
340
|
+
"type": "utils"
|
|
341
|
+
}
|
|
342
|
+
]
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
"name": "numeric-tag-field",
|
|
346
|
+
"title": "Numeric Tag Field",
|
|
347
|
+
"description": "A tag input for numeric values with min/max bounds, duplicate prevention, tag validation/transformation, and form integration.",
|
|
348
|
+
"files": [
|
|
349
|
+
{
|
|
350
|
+
"path": "src/components/numeric-tag-field.tsx",
|
|
351
|
+
"type": "components"
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"path": "src/components/icon.tsx",
|
|
355
|
+
"type": "components"
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
359
|
+
"type": "components/helpers"
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"path": "src/utils/tw.ts",
|
|
363
|
+
"type": "utils"
|
|
364
|
+
}
|
|
365
|
+
]
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"name": "date-input",
|
|
369
|
+
"title": "Date Input",
|
|
370
|
+
"description": "An accessible inline date field (no popup) with min/max constraints, form validation integration, and ISO date string handling.",
|
|
371
|
+
"files": [
|
|
372
|
+
{
|
|
373
|
+
"path": "src/components/date-input.tsx",
|
|
374
|
+
"type": "components"
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
378
|
+
"type": "components/helpers"
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
"path": "src/utils/tw.ts",
|
|
382
|
+
"type": "utils"
|
|
383
|
+
}
|
|
384
|
+
]
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
"name": "date-range-picker",
|
|
388
|
+
"title": "Date Range Picker",
|
|
389
|
+
"description": "An accessible date range picker with dual calendar popover, preset ranges, form validation integration, and ISO date string handling.",
|
|
390
|
+
"files": [
|
|
391
|
+
{
|
|
392
|
+
"path": "src/components/date-range-picker.tsx",
|
|
393
|
+
"type": "components"
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"path": "src/components/icon.tsx",
|
|
397
|
+
"type": "components"
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
401
|
+
"type": "components/helpers"
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
405
|
+
"type": "components/helpers"
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"path": "src/utils/tw.ts",
|
|
409
|
+
"type": "utils"
|
|
410
|
+
}
|
|
411
|
+
]
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"name": "date-time-picker",
|
|
415
|
+
"title": "Date Time Picker",
|
|
416
|
+
"description": "An accessible combined date and time picker with calendar popup, month/year navigation, 12/24-hour format, form validation integration, and ISO datetime string handling.",
|
|
417
|
+
"files": [
|
|
418
|
+
{
|
|
419
|
+
"path": "src/components/date-time-picker.tsx",
|
|
420
|
+
"type": "components"
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
"path": "src/components/icon.tsx",
|
|
424
|
+
"type": "components"
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
428
|
+
"type": "components/helpers"
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
"path": "src/components/helpers/calendar-month-year-picker.tsx",
|
|
432
|
+
"type": "components/helpers"
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
436
|
+
"type": "components/helpers"
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"path": "src/utils/tw.ts",
|
|
440
|
+
"type": "utils"
|
|
441
|
+
}
|
|
442
|
+
]
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"name": "time-input",
|
|
446
|
+
"title": "Time Input",
|
|
447
|
+
"description": "An accessible time picker with 12/24-hour format, min/max constraints, form validation integration, and ISO time string handling.",
|
|
448
|
+
"files": [
|
|
449
|
+
{
|
|
450
|
+
"path": "src/components/time-input.tsx",
|
|
451
|
+
"type": "components"
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
455
|
+
"type": "components/helpers"
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"path": "src/utils/tw.ts",
|
|
459
|
+
"type": "utils"
|
|
460
|
+
}
|
|
461
|
+
]
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"name": "month-day-input",
|
|
465
|
+
"title": "Month Day Input",
|
|
466
|
+
"description": "An accessible month-day input (--MM-DD format) with year segment hidden, form validation integration, and ISO month-day string handling.",
|
|
467
|
+
"files": [
|
|
468
|
+
{
|
|
469
|
+
"path": "src/components/month-day-input.tsx",
|
|
470
|
+
"type": "components"
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
474
|
+
"type": "components/helpers"
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
"path": "src/utils/tw.ts",
|
|
478
|
+
"type": "utils"
|
|
479
|
+
}
|
|
480
|
+
]
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
"name": "year-month-input",
|
|
484
|
+
"title": "Year Month Input",
|
|
485
|
+
"description": "An accessible year-month input (YYYY-MM format) with day segment hidden, form validation integration, and ISO year-month string handling.",
|
|
486
|
+
"files": [
|
|
487
|
+
{
|
|
488
|
+
"path": "src/components/year-month-input.tsx",
|
|
489
|
+
"type": "components"
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
493
|
+
"type": "components/helpers"
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"path": "src/utils/tw.ts",
|
|
497
|
+
"type": "utils"
|
|
498
|
+
}
|
|
499
|
+
]
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
"name": "select",
|
|
503
|
+
"title": "Select",
|
|
504
|
+
"description": "A single-select dropdown with colored options, custom rendering, keyboard navigation, form validation integration, and accessible labeling.",
|
|
505
|
+
"files": [
|
|
506
|
+
{
|
|
507
|
+
"path": "src/components/select.tsx",
|
|
508
|
+
"type": "components"
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
"path": "src/components/icon.tsx",
|
|
512
|
+
"type": "components"
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
516
|
+
"type": "components/helpers"
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
520
|
+
"type": "components/helpers"
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"path": "src/utils/colors.ts",
|
|
524
|
+
"type": "utils"
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
"path": "src/utils/tw.ts",
|
|
528
|
+
"type": "utils"
|
|
529
|
+
}
|
|
530
|
+
]
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"name": "boolean-select",
|
|
534
|
+
"title": "Boolean Select",
|
|
535
|
+
"description": "A Yes/No dropdown with optional null state, customizable labels, and form validation integration. Built on the Select component.",
|
|
536
|
+
"files": [
|
|
537
|
+
{
|
|
538
|
+
"path": "src/components/boolean-select.tsx",
|
|
539
|
+
"type": "components"
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
"path": "src/components/icon.tsx",
|
|
543
|
+
"type": "components"
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
"path": "src/components/select.tsx",
|
|
547
|
+
"type": "components"
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
551
|
+
"type": "components/helpers"
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
555
|
+
"type": "components/helpers"
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
"path": "src/utils/colors.ts",
|
|
559
|
+
"type": "utils"
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
"path": "src/utils/tw.ts",
|
|
563
|
+
"type": "utils"
|
|
564
|
+
}
|
|
565
|
+
]
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"name": "autocomplete",
|
|
569
|
+
"title": "Autocomplete",
|
|
570
|
+
"description": "A searchable single-select dropdown with matchSorter filtering, colored options, custom rendering, form validation integration, and accessible labeling.",
|
|
571
|
+
"files": [
|
|
572
|
+
{
|
|
573
|
+
"path": "src/components/autocomplete.tsx",
|
|
574
|
+
"type": "components"
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
"path": "src/components/icon.tsx",
|
|
578
|
+
"type": "components"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
582
|
+
"type": "components/helpers"
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
586
|
+
"type": "components/helpers"
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
"path": "src/utils/colors.ts",
|
|
590
|
+
"type": "utils"
|
|
591
|
+
},
|
|
592
|
+
{
|
|
593
|
+
"path": "src/utils/tw.ts",
|
|
594
|
+
"type": "utils"
|
|
595
|
+
}
|
|
596
|
+
]
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
"name": "autosuggest",
|
|
600
|
+
"title": "Autosuggest",
|
|
601
|
+
"description": "A text input with suggestions that allows custom (non-option) values, matchSorter filtering, form validation integration, and accessible labeling.",
|
|
602
|
+
"files": [
|
|
603
|
+
{
|
|
604
|
+
"path": "src/components/autosuggest.tsx",
|
|
605
|
+
"type": "components"
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
"path": "src/components/icon.tsx",
|
|
609
|
+
"type": "components"
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
613
|
+
"type": "components/helpers"
|
|
614
|
+
},
|
|
615
|
+
{
|
|
616
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
617
|
+
"type": "components/helpers"
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
"path": "src/utils/tw.ts",
|
|
621
|
+
"type": "utils"
|
|
622
|
+
}
|
|
623
|
+
]
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
"name": "multiselect",
|
|
627
|
+
"title": "Multiselect",
|
|
628
|
+
"description": "A multi-select dropdown with chip display, optional select all, colored options, custom rendering, form validation integration, and accessible labeling.",
|
|
629
|
+
"files": [
|
|
630
|
+
{
|
|
631
|
+
"path": "src/components/multiselect.tsx",
|
|
632
|
+
"type": "components"
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
"path": "src/components/icon.tsx",
|
|
636
|
+
"type": "components"
|
|
637
|
+
},
|
|
638
|
+
{
|
|
639
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
640
|
+
"type": "components/helpers"
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
644
|
+
"type": "components/helpers"
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
"path": "src/utils/colors.ts",
|
|
648
|
+
"type": "utils"
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
"path": "src/utils/compose-refs.ts",
|
|
652
|
+
"type": "utils"
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
"path": "src/utils/tw.ts",
|
|
656
|
+
"type": "utils"
|
|
657
|
+
},
|
|
658
|
+
{
|
|
659
|
+
"path": "src/utils/use-element-size.ts",
|
|
660
|
+
"type": "utils"
|
|
661
|
+
}
|
|
662
|
+
]
|
|
663
|
+
},
|
|
664
|
+
{
|
|
665
|
+
"name": "multicomplete",
|
|
666
|
+
"title": "Multicomplete",
|
|
667
|
+
"description": "A multi-select with search filtering, colored chips, matchSorter filtering, custom rendering, form validation integration, and accessible labeling.",
|
|
668
|
+
"files": [
|
|
669
|
+
{
|
|
670
|
+
"path": "src/components/multicomplete.tsx",
|
|
671
|
+
"type": "components"
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
"path": "src/components/icon.tsx",
|
|
675
|
+
"type": "components"
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
679
|
+
"type": "components/helpers"
|
|
680
|
+
},
|
|
681
|
+
{
|
|
682
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
683
|
+
"type": "components/helpers"
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
"path": "src/utils/colors.ts",
|
|
687
|
+
"type": "utils"
|
|
688
|
+
},
|
|
689
|
+
{
|
|
690
|
+
"path": "src/utils/tw.ts",
|
|
691
|
+
"type": "utils"
|
|
692
|
+
}
|
|
693
|
+
]
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
"name": "multisuggest",
|
|
697
|
+
"title": "Multisuggest",
|
|
698
|
+
"description": "A multi-select autocomplete with suggestions that allows adding custom values not in the options list, chip display, matchSorter filtering, form validation integration, and accessible labeling.",
|
|
699
|
+
"files": [
|
|
700
|
+
{
|
|
701
|
+
"path": "src/components/multisuggest.tsx",
|
|
702
|
+
"type": "components"
|
|
703
|
+
},
|
|
704
|
+
{
|
|
705
|
+
"path": "src/components/icon.tsx",
|
|
706
|
+
"type": "components"
|
|
707
|
+
},
|
|
708
|
+
{
|
|
709
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
710
|
+
"type": "components/helpers"
|
|
711
|
+
},
|
|
712
|
+
{
|
|
713
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
714
|
+
"type": "components/helpers"
|
|
715
|
+
},
|
|
716
|
+
{
|
|
717
|
+
"path": "src/utils/tw.ts",
|
|
718
|
+
"type": "utils"
|
|
719
|
+
}
|
|
720
|
+
]
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
"name": "checkbox",
|
|
724
|
+
"title": "Checkbox",
|
|
725
|
+
"description": "A single checkbox with plain and labeled variants, indeterminate state support, form validation integration, and accessible keyboard navigation.",
|
|
726
|
+
"files": [
|
|
727
|
+
{
|
|
728
|
+
"path": "src/components/checkbox.tsx",
|
|
729
|
+
"type": "components"
|
|
730
|
+
},
|
|
731
|
+
{
|
|
732
|
+
"path": "src/components/icon.tsx",
|
|
733
|
+
"type": "components"
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
737
|
+
"type": "components/helpers"
|
|
738
|
+
},
|
|
739
|
+
{
|
|
740
|
+
"path": "src/utils/tw.ts",
|
|
741
|
+
"type": "utils"
|
|
742
|
+
}
|
|
743
|
+
]
|
|
744
|
+
},
|
|
745
|
+
{
|
|
746
|
+
"name": "checkbox-group",
|
|
747
|
+
"title": "Checkbox Group",
|
|
748
|
+
"description": "A group of checkboxes with select all, min/max selection constraints, horizontal/vertical orientation, form validation integration, and accessible labeling.",
|
|
749
|
+
"files": [
|
|
750
|
+
{
|
|
751
|
+
"path": "src/components/checkbox-group.tsx",
|
|
752
|
+
"type": "components"
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
"path": "src/components/checkbox.tsx",
|
|
756
|
+
"type": "components"
|
|
757
|
+
},
|
|
758
|
+
{
|
|
759
|
+
"path": "src/components/icon.tsx",
|
|
760
|
+
"type": "components"
|
|
761
|
+
},
|
|
762
|
+
{
|
|
763
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
764
|
+
"type": "components/helpers"
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
"path": "src/utils/tw.ts",
|
|
768
|
+
"type": "utils"
|
|
769
|
+
}
|
|
770
|
+
]
|
|
771
|
+
},
|
|
772
|
+
{
|
|
773
|
+
"name": "radio",
|
|
774
|
+
"title": "Radio",
|
|
775
|
+
"description": "A single radio option with plain and labeled variants, optional description text, and accessible keyboard navigation.",
|
|
776
|
+
"files": [
|
|
777
|
+
{
|
|
778
|
+
"path": "src/components/radio.tsx",
|
|
779
|
+
"type": "components"
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
"path": "src/utils/tw.ts",
|
|
783
|
+
"type": "utils"
|
|
784
|
+
}
|
|
785
|
+
]
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
"name": "radio-group",
|
|
789
|
+
"title": "Radio Group",
|
|
790
|
+
"description": "A mutually exclusive radio group with horizontal/vertical/grid orientation, form validation integration, and accessible labeling.",
|
|
791
|
+
"files": [
|
|
792
|
+
{
|
|
793
|
+
"path": "src/components/radio-group.tsx",
|
|
794
|
+
"type": "components"
|
|
795
|
+
},
|
|
796
|
+
{
|
|
797
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
798
|
+
"type": "components/helpers"
|
|
799
|
+
},
|
|
800
|
+
{
|
|
801
|
+
"path": "src/utils/tw.ts",
|
|
802
|
+
"type": "utils"
|
|
803
|
+
}
|
|
804
|
+
]
|
|
805
|
+
},
|
|
806
|
+
{
|
|
807
|
+
"name": "switch",
|
|
808
|
+
"title": "Switch",
|
|
809
|
+
"description": "A boolean toggle switch with plain and labeled variants, description text, label positioning, form validation integration, and accessible keyboard navigation.",
|
|
810
|
+
"files": [
|
|
811
|
+
{
|
|
812
|
+
"path": "src/components/switch.tsx",
|
|
813
|
+
"type": "components"
|
|
814
|
+
},
|
|
815
|
+
{
|
|
816
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
817
|
+
"type": "components/helpers"
|
|
818
|
+
},
|
|
819
|
+
{
|
|
820
|
+
"path": "src/utils/tw.ts",
|
|
821
|
+
"type": "utils"
|
|
822
|
+
}
|
|
823
|
+
]
|
|
824
|
+
},
|
|
825
|
+
{
|
|
826
|
+
"name": "file-input",
|
|
827
|
+
"title": "File Input",
|
|
828
|
+
"description": "A single file upload with drag-and-drop zone, file type and size validation, custom preview rendering, form validation integration, and accessible labeling.",
|
|
829
|
+
"files": [
|
|
830
|
+
{
|
|
831
|
+
"path": "src/components/file-input.tsx",
|
|
832
|
+
"type": "components"
|
|
833
|
+
},
|
|
834
|
+
{
|
|
835
|
+
"path": "src/components/headless-file-input.tsx",
|
|
836
|
+
"type": "components"
|
|
837
|
+
},
|
|
838
|
+
{
|
|
839
|
+
"path": "src/components/icon.tsx",
|
|
840
|
+
"type": "components"
|
|
841
|
+
},
|
|
842
|
+
{
|
|
843
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
844
|
+
"type": "components/helpers"
|
|
845
|
+
},
|
|
846
|
+
{
|
|
847
|
+
"path": "src/utils/compose-refs.ts",
|
|
848
|
+
"type": "utils"
|
|
849
|
+
},
|
|
850
|
+
{
|
|
851
|
+
"path": "src/utils/file-input.ts",
|
|
852
|
+
"type": "utils"
|
|
853
|
+
},
|
|
854
|
+
{
|
|
855
|
+
"path": "src/utils/tw.ts",
|
|
856
|
+
"type": "utils"
|
|
857
|
+
}
|
|
858
|
+
]
|
|
859
|
+
},
|
|
860
|
+
{
|
|
861
|
+
"name": "multi-file-input",
|
|
862
|
+
"title": "Multi File Input",
|
|
863
|
+
"description": "A multi-file upload with drag-and-drop zone, file list display, per-file type and size validation, max file count, form validation integration, and accessible labeling.",
|
|
864
|
+
"files": [
|
|
865
|
+
{
|
|
866
|
+
"path": "src/components/multi-file-input.tsx",
|
|
867
|
+
"type": "components"
|
|
868
|
+
},
|
|
869
|
+
{
|
|
870
|
+
"path": "src/components/headless-file-input.tsx",
|
|
871
|
+
"type": "components"
|
|
872
|
+
},
|
|
873
|
+
{
|
|
874
|
+
"path": "src/components/icon.tsx",
|
|
875
|
+
"type": "components"
|
|
876
|
+
},
|
|
877
|
+
{
|
|
878
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
879
|
+
"type": "components/helpers"
|
|
880
|
+
},
|
|
881
|
+
{
|
|
882
|
+
"path": "src/utils/compose-refs.ts",
|
|
883
|
+
"type": "utils"
|
|
884
|
+
},
|
|
885
|
+
{
|
|
886
|
+
"path": "src/utils/file-input.ts",
|
|
887
|
+
"type": "utils"
|
|
888
|
+
},
|
|
889
|
+
{
|
|
890
|
+
"path": "src/utils/tw.ts",
|
|
891
|
+
"type": "utils"
|
|
892
|
+
}
|
|
893
|
+
]
|
|
894
|
+
},
|
|
895
|
+
{
|
|
896
|
+
"name": "image-input",
|
|
897
|
+
"title": "Image Input",
|
|
898
|
+
"description": "A single image upload with drag-and-drop zone, image preview with gradient overlay, file type and size validation, custom preview rendering, form validation integration, and accessible labeling.",
|
|
899
|
+
"files": [
|
|
900
|
+
{
|
|
901
|
+
"path": "src/components/image-input.tsx",
|
|
902
|
+
"type": "components"
|
|
903
|
+
},
|
|
904
|
+
{
|
|
905
|
+
"path": "src/components/headless-file-input.tsx",
|
|
906
|
+
"type": "components"
|
|
907
|
+
},
|
|
908
|
+
{
|
|
909
|
+
"path": "src/components/icon.tsx",
|
|
910
|
+
"type": "components"
|
|
911
|
+
},
|
|
912
|
+
{
|
|
913
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
914
|
+
"type": "components/helpers"
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
"path": "src/utils/compose-refs.ts",
|
|
918
|
+
"type": "utils"
|
|
919
|
+
},
|
|
920
|
+
{
|
|
921
|
+
"path": "src/utils/file-input.ts",
|
|
922
|
+
"type": "utils"
|
|
923
|
+
},
|
|
924
|
+
{
|
|
925
|
+
"path": "src/utils/tw.ts",
|
|
926
|
+
"type": "utils"
|
|
927
|
+
}
|
|
928
|
+
]
|
|
929
|
+
},
|
|
930
|
+
{
|
|
931
|
+
"name": "multi-image-input",
|
|
932
|
+
"title": "Multi Image Input",
|
|
933
|
+
"description": "A multi-image upload with grid display, drag-and-drop, optional reordering, per-image type and size validation, max image count, custom preview rendering, form validation integration, and accessible labeling.",
|
|
934
|
+
"files": [
|
|
935
|
+
{
|
|
936
|
+
"path": "src/components/multi-image-input.tsx",
|
|
937
|
+
"type": "components"
|
|
938
|
+
},
|
|
939
|
+
{
|
|
940
|
+
"path": "src/components/headless-file-input.tsx",
|
|
941
|
+
"type": "components"
|
|
942
|
+
},
|
|
943
|
+
{
|
|
944
|
+
"path": "src/components/icon.tsx",
|
|
945
|
+
"type": "components"
|
|
946
|
+
},
|
|
947
|
+
{
|
|
948
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
949
|
+
"type": "components/helpers"
|
|
950
|
+
},
|
|
951
|
+
{
|
|
952
|
+
"path": "src/utils/compose-refs.ts",
|
|
953
|
+
"type": "utils"
|
|
954
|
+
},
|
|
955
|
+
{
|
|
956
|
+
"path": "src/utils/file-input.ts",
|
|
957
|
+
"type": "utils"
|
|
958
|
+
},
|
|
959
|
+
{
|
|
960
|
+
"path": "src/utils/tw.ts",
|
|
961
|
+
"type": "utils"
|
|
962
|
+
}
|
|
963
|
+
]
|
|
964
|
+
},
|
|
965
|
+
{
|
|
966
|
+
"name": "pdf-input",
|
|
967
|
+
"title": "PDF Input",
|
|
968
|
+
"description": "A single PDF upload with drag-and-drop zone, PDF preview using the Pdf component, file size validation, custom preview rendering, form validation integration, and accessible labeling.",
|
|
969
|
+
"files": [
|
|
970
|
+
{
|
|
971
|
+
"path": "src/components/pdf-input.tsx",
|
|
972
|
+
"type": "components"
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
"path": "src/components/headless-file-input.tsx",
|
|
976
|
+
"type": "components"
|
|
977
|
+
},
|
|
978
|
+
{
|
|
979
|
+
"path": "src/components/icon.tsx",
|
|
980
|
+
"type": "components"
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
"path": "src/components/pdf.tsx",
|
|
984
|
+
"type": "components"
|
|
985
|
+
},
|
|
986
|
+
{
|
|
987
|
+
"path": "src/components/helpers/form-field.tsx",
|
|
988
|
+
"type": "components/helpers"
|
|
989
|
+
},
|
|
990
|
+
{
|
|
991
|
+
"path": "src/utils/compose-refs.ts",
|
|
992
|
+
"type": "utils"
|
|
993
|
+
},
|
|
994
|
+
{
|
|
995
|
+
"path": "src/utils/file-input.ts",
|
|
996
|
+
"type": "utils"
|
|
997
|
+
},
|
|
998
|
+
{
|
|
999
|
+
"path": "src/utils/tw.ts",
|
|
1000
|
+
"type": "utils"
|
|
1001
|
+
},
|
|
1002
|
+
{
|
|
1003
|
+
"path": "src/utils/use-pagination.ts",
|
|
1004
|
+
"type": "utils"
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
"path": "src/components/helpers/pdf-dist.client.ts",
|
|
1008
|
+
"type": "components/helpers"
|
|
1009
|
+
}
|
|
1010
|
+
]
|
|
1011
|
+
},
|
|
1012
|
+
{
|
|
1013
|
+
"name": "dialog",
|
|
1014
|
+
"title": "Dialog",
|
|
1015
|
+
"description": "A centered modal dialog with size variants, animated entry/exit, close button, and accessible keyboard navigation.",
|
|
1016
|
+
"files": [
|
|
1017
|
+
{
|
|
1018
|
+
"path": "src/components/dialog.tsx",
|
|
1019
|
+
"type": "components"
|
|
1020
|
+
},
|
|
1021
|
+
{
|
|
1022
|
+
"path": "src/components/icon.tsx",
|
|
1023
|
+
"type": "components"
|
|
1024
|
+
},
|
|
1025
|
+
{
|
|
1026
|
+
"path": "src/components/helpers/headless-button.tsx",
|
|
1027
|
+
"type": "components/helpers"
|
|
1028
|
+
},
|
|
1029
|
+
{
|
|
1030
|
+
"path": "src/utils/compose-refs.ts",
|
|
1031
|
+
"type": "utils"
|
|
1032
|
+
},
|
|
1033
|
+
{
|
|
1034
|
+
"path": "src/utils/tw.ts",
|
|
1035
|
+
"type": "utils"
|
|
1036
|
+
},
|
|
1037
|
+
{
|
|
1038
|
+
"path": "src/utils/use-render-props.ts",
|
|
1039
|
+
"type": "utils"
|
|
1040
|
+
}
|
|
1041
|
+
]
|
|
1042
|
+
},
|
|
1043
|
+
{
|
|
1044
|
+
"name": "drawer",
|
|
1045
|
+
"title": "Drawer",
|
|
1046
|
+
"description": "A slide-out drawer built on vaul with left/right/top/bottom positioning, drag-to-dismiss, size variants, actions slot, and close button.",
|
|
1047
|
+
"files": [
|
|
1048
|
+
{
|
|
1049
|
+
"path": "src/components/drawer.tsx",
|
|
1050
|
+
"type": "components"
|
|
1051
|
+
},
|
|
1052
|
+
{
|
|
1053
|
+
"path": "src/components/icon.tsx",
|
|
1054
|
+
"type": "components"
|
|
1055
|
+
},
|
|
1056
|
+
{
|
|
1057
|
+
"path": "src/components/helpers/headless-button.tsx",
|
|
1058
|
+
"type": "components/helpers"
|
|
1059
|
+
},
|
|
1060
|
+
{
|
|
1061
|
+
"path": "src/utils/compose-refs.ts",
|
|
1062
|
+
"type": "utils"
|
|
1063
|
+
},
|
|
1064
|
+
{
|
|
1065
|
+
"path": "src/utils/tw.ts",
|
|
1066
|
+
"type": "utils"
|
|
1067
|
+
},
|
|
1068
|
+
{
|
|
1069
|
+
"path": "src/utils/use-render-props.ts",
|
|
1070
|
+
"type": "utils"
|
|
1071
|
+
}
|
|
1072
|
+
]
|
|
1073
|
+
},
|
|
1074
|
+
{
|
|
1075
|
+
"name": "alert-dialog",
|
|
1076
|
+
"title": "Alert Dialog",
|
|
1077
|
+
"description": "An alert modal with 5 variants (info/positive/warning/negative/notice), icon display, animated entry/exit, cancel button, and accessible keyboard navigation.",
|
|
1078
|
+
"files": [
|
|
1079
|
+
{
|
|
1080
|
+
"path": "src/components/alert-dialog.tsx",
|
|
1081
|
+
"type": "components"
|
|
1082
|
+
},
|
|
1083
|
+
{
|
|
1084
|
+
"path": "src/components/button-group.tsx",
|
|
1085
|
+
"type": "components"
|
|
1086
|
+
},
|
|
1087
|
+
{
|
|
1088
|
+
"path": "src/components/button.tsx",
|
|
1089
|
+
"type": "components"
|
|
1090
|
+
},
|
|
1091
|
+
{
|
|
1092
|
+
"path": "src/components/icon.tsx",
|
|
1093
|
+
"type": "components"
|
|
1094
|
+
},
|
|
1095
|
+
{
|
|
1096
|
+
"path": "src/components/spinner.tsx",
|
|
1097
|
+
"type": "components"
|
|
1098
|
+
},
|
|
1099
|
+
{
|
|
1100
|
+
"path": "src/components/helpers/button-context.ts",
|
|
1101
|
+
"type": "components/helpers"
|
|
1102
|
+
},
|
|
1103
|
+
{
|
|
1104
|
+
"path": "src/components/helpers/get-button-classes.ts",
|
|
1105
|
+
"type": "components/helpers"
|
|
1106
|
+
},
|
|
1107
|
+
{
|
|
1108
|
+
"path": "src/components/helpers/headless-button.tsx",
|
|
1109
|
+
"type": "components/helpers"
|
|
1110
|
+
},
|
|
1111
|
+
{
|
|
1112
|
+
"path": "src/utils/compose-refs.ts",
|
|
1113
|
+
"type": "utils"
|
|
1114
|
+
},
|
|
1115
|
+
{
|
|
1116
|
+
"path": "src/utils/tw.ts",
|
|
1117
|
+
"type": "utils"
|
|
1118
|
+
},
|
|
1119
|
+
{
|
|
1120
|
+
"path": "src/utils/use-prevent-default.ts",
|
|
1121
|
+
"type": "utils"
|
|
1122
|
+
},
|
|
1123
|
+
{
|
|
1124
|
+
"path": "src/utils/use-render-props.ts",
|
|
1125
|
+
"type": "utils"
|
|
1126
|
+
},
|
|
1127
|
+
{
|
|
1128
|
+
"path": "src/utils/use-spin-delay.ts",
|
|
1129
|
+
"type": "utils"
|
|
1130
|
+
},
|
|
1131
|
+
{
|
|
1132
|
+
"path": "src/utils/use-stable-accessor.ts",
|
|
1133
|
+
"type": "utils"
|
|
1134
|
+
}
|
|
1135
|
+
]
|
|
1136
|
+
},
|
|
1137
|
+
{
|
|
1138
|
+
"name": "menu",
|
|
1139
|
+
"title": "Menu",
|
|
1140
|
+
"description": "A dropdown menu with keyboard navigation, groups, link items, separator support, and accessible ARIA attributes.",
|
|
1141
|
+
"files": [
|
|
1142
|
+
{
|
|
1143
|
+
"path": "src/components/menu.tsx",
|
|
1144
|
+
"type": "components"
|
|
1145
|
+
},
|
|
1146
|
+
{
|
|
1147
|
+
"path": "src/components/helpers/animated-popover.tsx",
|
|
1148
|
+
"type": "components/helpers"
|
|
1149
|
+
},
|
|
1150
|
+
{
|
|
1151
|
+
"path": "src/utils/tw.ts",
|
|
1152
|
+
"type": "utils"
|
|
1153
|
+
}
|
|
1154
|
+
]
|
|
1155
|
+
},
|
|
1156
|
+
{
|
|
1157
|
+
"name": "tabs",
|
|
1158
|
+
"title": "Tabs",
|
|
1159
|
+
"description": "A tab group with animated underline indicator, color variants (blue/forest/sand/dune), keyboard navigation, and accessible ARIA attributes.",
|
|
1160
|
+
"files": [
|
|
1161
|
+
{
|
|
1162
|
+
"path": "src/components/tabs.tsx",
|
|
1163
|
+
"type": "components"
|
|
1164
|
+
},
|
|
1165
|
+
{
|
|
1166
|
+
"path": "src/utils/tw.ts",
|
|
1167
|
+
"type": "utils"
|
|
1168
|
+
},
|
|
1169
|
+
{
|
|
1170
|
+
"path": "src/utils/use-tab-indicator.ts",
|
|
1171
|
+
"type": "utils"
|
|
1172
|
+
}
|
|
1173
|
+
]
|
|
1174
|
+
},
|
|
1175
|
+
{
|
|
1176
|
+
"name": "link-tabs",
|
|
1177
|
+
"title": "Link Tabs",
|
|
1178
|
+
"description": "Router-based tab navigation with animated underline indicator, color variants (blue/forest/sand/dune), and accessible ARIA attributes.",
|
|
1179
|
+
"files": [
|
|
1180
|
+
{
|
|
1181
|
+
"path": "src/components/link-tabs.tsx",
|
|
1182
|
+
"type": "components"
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
"path": "src/utils/tw.ts",
|
|
1186
|
+
"type": "utils"
|
|
1187
|
+
},
|
|
1188
|
+
{
|
|
1189
|
+
"path": "src/utils/use-tab-indicator.ts",
|
|
1190
|
+
"type": "utils"
|
|
1191
|
+
}
|
|
1192
|
+
]
|
|
1193
|
+
},
|
|
1194
|
+
{
|
|
1195
|
+
"name": "stepper",
|
|
1196
|
+
"title": "Stepper",
|
|
1197
|
+
"description": "A step indicator with horizontal/vertical orientation, error/completed states, connecting lines, and accessible progress semantics.",
|
|
1198
|
+
"files": [
|
|
1199
|
+
{
|
|
1200
|
+
"path": "src/components/stepper.tsx",
|
|
1201
|
+
"type": "components"
|
|
1202
|
+
},
|
|
1203
|
+
{
|
|
1204
|
+
"path": "src/components/icon.tsx",
|
|
1205
|
+
"type": "components"
|
|
1206
|
+
},
|
|
1207
|
+
{
|
|
1208
|
+
"path": "src/utils/tw.ts",
|
|
1209
|
+
"type": "utils"
|
|
1210
|
+
}
|
|
1211
|
+
]
|
|
1212
|
+
},
|
|
1213
|
+
{
|
|
1214
|
+
"name": "avatar",
|
|
1215
|
+
"title": "Avatar",
|
|
1216
|
+
"description": "A user profile image with initials fallback, shape variants (circle/rounded/square), and error handling for broken image sources.",
|
|
1217
|
+
"files": [
|
|
1218
|
+
{
|
|
1219
|
+
"path": "src/components/avatar.tsx",
|
|
1220
|
+
"type": "components"
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
"path": "src/utils/tw.ts",
|
|
1224
|
+
"type": "utils"
|
|
1225
|
+
}
|
|
1226
|
+
]
|
|
1227
|
+
},
|
|
1228
|
+
{
|
|
1229
|
+
"name": "chip",
|
|
1230
|
+
"title": "Chip",
|
|
1231
|
+
"description": "An inline badge with optional remove button, color variants, size options, light/dark color modes, and a clickable ChipButton variant.",
|
|
1232
|
+
"files": [
|
|
1233
|
+
{
|
|
1234
|
+
"path": "src/components/chip.tsx",
|
|
1235
|
+
"type": "components"
|
|
1236
|
+
},
|
|
1237
|
+
{
|
|
1238
|
+
"path": "src/components/icon.tsx",
|
|
1239
|
+
"type": "components"
|
|
1240
|
+
},
|
|
1241
|
+
{
|
|
1242
|
+
"path": "src/utils/tw.ts",
|
|
1243
|
+
"type": "utils"
|
|
1244
|
+
}
|
|
1245
|
+
]
|
|
1246
|
+
},
|
|
1247
|
+
{
|
|
1248
|
+
"name": "enum-chip",
|
|
1249
|
+
"title": "Enum Chip",
|
|
1250
|
+
"description": "A colored chip for enum values with automatic color assignment based on option index or string hash.",
|
|
1251
|
+
"files": [
|
|
1252
|
+
{
|
|
1253
|
+
"path": "src/components/enum-chip.tsx",
|
|
1254
|
+
"type": "components"
|
|
1255
|
+
},
|
|
1256
|
+
{
|
|
1257
|
+
"path": "src/components/chip.tsx",
|
|
1258
|
+
"type": "components"
|
|
1259
|
+
},
|
|
1260
|
+
{
|
|
1261
|
+
"path": "src/components/icon.tsx",
|
|
1262
|
+
"type": "components"
|
|
1263
|
+
},
|
|
1264
|
+
{
|
|
1265
|
+
"path": "src/utils/colors.ts",
|
|
1266
|
+
"type": "utils"
|
|
1267
|
+
},
|
|
1268
|
+
{
|
|
1269
|
+
"path": "src/utils/enum-colors.ts",
|
|
1270
|
+
"type": "utils"
|
|
1271
|
+
},
|
|
1272
|
+
{
|
|
1273
|
+
"path": "src/utils/tw.ts",
|
|
1274
|
+
"type": "utils"
|
|
1275
|
+
}
|
|
1276
|
+
]
|
|
1277
|
+
},
|
|
1278
|
+
{
|
|
1279
|
+
"name": "img",
|
|
1280
|
+
"title": "Img",
|
|
1281
|
+
"description": "An image element with object-fit variants (cover, contain, fill, none, scale-down) and shape variants (rounded, rectangle, circle).",
|
|
1282
|
+
"files": [
|
|
1283
|
+
{
|
|
1284
|
+
"path": "src/components/img.tsx",
|
|
1285
|
+
"type": "components"
|
|
1286
|
+
},
|
|
1287
|
+
{
|
|
1288
|
+
"path": "src/utils/tw.ts",
|
|
1289
|
+
"type": "utils"
|
|
1290
|
+
}
|
|
1291
|
+
]
|
|
1292
|
+
},
|
|
1293
|
+
{
|
|
1294
|
+
"name": "labeled-value",
|
|
1295
|
+
"title": "Labeled Value",
|
|
1296
|
+
"description": "A read-only display component with smart type detection for strings, numbers, booleans, dates, times, durations, and ranges, with configurable label orientation and alignment.",
|
|
1297
|
+
"files": [
|
|
1298
|
+
{
|
|
1299
|
+
"path": "src/components/labeled-value.tsx",
|
|
1300
|
+
"type": "components"
|
|
1301
|
+
},
|
|
1302
|
+
{
|
|
1303
|
+
"path": "src/utils/tw.ts",
|
|
1304
|
+
"type": "utils"
|
|
1305
|
+
}
|
|
1306
|
+
]
|
|
1307
|
+
},
|
|
1308
|
+
{
|
|
1309
|
+
"name": "inline-alert",
|
|
1310
|
+
"title": "Inline Alert",
|
|
1311
|
+
"description": "An inline notification with 5 variants (info/positive/warning/negative/notice), default icons per variant, optional title, description, and actions slot.",
|
|
1312
|
+
"files": [
|
|
1313
|
+
{
|
|
1314
|
+
"path": "src/components/inline-alert.tsx",
|
|
1315
|
+
"type": "components"
|
|
1316
|
+
},
|
|
1317
|
+
{
|
|
1318
|
+
"path": "src/components/icon.tsx",
|
|
1319
|
+
"type": "components"
|
|
1320
|
+
},
|
|
1321
|
+
{
|
|
1322
|
+
"path": "src/utils/tw.ts",
|
|
1323
|
+
"type": "utils"
|
|
1324
|
+
}
|
|
1325
|
+
]
|
|
1326
|
+
},
|
|
1327
|
+
{
|
|
1328
|
+
"name": "pdf",
|
|
1329
|
+
"title": "Pdf",
|
|
1330
|
+
"description": "A PDF viewer with canvas-based rendering via pdfjs-dist, pagination controls with page navigation, and responsive width handling.",
|
|
1331
|
+
"files": [
|
|
1332
|
+
{
|
|
1333
|
+
"path": "src/components/pdf.tsx",
|
|
1334
|
+
"type": "components"
|
|
1335
|
+
},
|
|
1336
|
+
{
|
|
1337
|
+
"path": "src/components/icon.tsx",
|
|
1338
|
+
"type": "components"
|
|
1339
|
+
},
|
|
1340
|
+
{
|
|
1341
|
+
"path": "src/utils/tw.ts",
|
|
1342
|
+
"type": "utils"
|
|
1343
|
+
},
|
|
1344
|
+
{
|
|
1345
|
+
"path": "src/utils/use-pagination.ts",
|
|
1346
|
+
"type": "utils"
|
|
1347
|
+
},
|
|
1348
|
+
{
|
|
1349
|
+
"path": "src/components/helpers/pdf-dist.client.ts",
|
|
1350
|
+
"type": "components/helpers"
|
|
1351
|
+
}
|
|
1352
|
+
]
|
|
1353
|
+
},
|
|
1354
|
+
{
|
|
1355
|
+
"name": "container",
|
|
1356
|
+
"title": "Container",
|
|
1357
|
+
"description": "A layout wrapper with padding, border, and elevation variants. Includes ContainerSection with label/actions header, and a plain Section component.",
|
|
1358
|
+
"files": [
|
|
1359
|
+
{
|
|
1360
|
+
"path": "src/components/container.tsx",
|
|
1361
|
+
"type": "components"
|
|
1362
|
+
},
|
|
1363
|
+
{
|
|
1364
|
+
"path": "src/utils/tw.ts",
|
|
1365
|
+
"type": "utils"
|
|
1366
|
+
}
|
|
1367
|
+
]
|
|
1368
|
+
},
|
|
1369
|
+
{
|
|
1370
|
+
"name": "disclosure",
|
|
1371
|
+
"title": "Disclosure",
|
|
1372
|
+
"description": "A collapsible section with size variants, animated expand/collapse, chevron indicator, and accordion group support via React Aria.",
|
|
1373
|
+
"files": [
|
|
1374
|
+
{
|
|
1375
|
+
"path": "src/components/disclosure.tsx",
|
|
1376
|
+
"type": "components"
|
|
1377
|
+
},
|
|
1378
|
+
{
|
|
1379
|
+
"path": "src/components/container.tsx",
|
|
1380
|
+
"type": "components"
|
|
1381
|
+
},
|
|
1382
|
+
{
|
|
1383
|
+
"path": "src/components/icon.tsx",
|
|
1384
|
+
"type": "components"
|
|
1385
|
+
},
|
|
1386
|
+
{
|
|
1387
|
+
"path": "src/utils/tw.ts",
|
|
1388
|
+
"type": "utils"
|
|
1389
|
+
}
|
|
1390
|
+
]
|
|
1391
|
+
},
|
|
1392
|
+
{
|
|
1393
|
+
"name": "use-pagination",
|
|
1394
|
+
"title": "usePagination",
|
|
1395
|
+
"description": "Hook that generates pagination page arrays with ellipsis, prev/next logic, and selected-page tracking for paginated UIs.",
|
|
1396
|
+
"files": [
|
|
1397
|
+
{
|
|
1398
|
+
"path": "src/utils/use-pagination.ts",
|
|
1399
|
+
"type": "utils"
|
|
1400
|
+
}
|
|
1401
|
+
]
|
|
1402
|
+
},
|
|
1403
|
+
{
|
|
1404
|
+
"name": "form",
|
|
1405
|
+
"title": "Form",
|
|
1406
|
+
"description": "A React Router form wrapper with client-side and server-side validation, hidden inputs, controlled state management, and validation error helpers.",
|
|
1407
|
+
"files": [
|
|
1408
|
+
{
|
|
1409
|
+
"path": "src/components/form.tsx",
|
|
1410
|
+
"type": "components"
|
|
1411
|
+
}
|
|
1412
|
+
]
|
|
1413
|
+
},
|
|
1414
|
+
{
|
|
1415
|
+
"name": "toast",
|
|
1416
|
+
"title": "Toast",
|
|
1417
|
+
"description": "A toast notification system with 5 variants (info/positive/warning/negative/notice), auto-dismiss timeout, close button, and slide-in animation. Includes ToastRegion (render once at app root) and showToast function.",
|
|
1418
|
+
"files": [
|
|
1419
|
+
{
|
|
1420
|
+
"path": "src/components/toast.tsx",
|
|
1421
|
+
"type": "components"
|
|
1422
|
+
},
|
|
1423
|
+
{
|
|
1424
|
+
"path": "src/components/icon.tsx",
|
|
1425
|
+
"type": "components"
|
|
1426
|
+
},
|
|
1427
|
+
{
|
|
1428
|
+
"path": "src/components/helpers/headless-button.tsx",
|
|
1429
|
+
"type": "components/helpers"
|
|
1430
|
+
},
|
|
1431
|
+
{
|
|
1432
|
+
"path": "src/utils/compose-refs.ts",
|
|
1433
|
+
"type": "utils"
|
|
1434
|
+
},
|
|
1435
|
+
{
|
|
1436
|
+
"path": "src/utils/tw.ts",
|
|
1437
|
+
"type": "utils"
|
|
1438
|
+
},
|
|
1439
|
+
{
|
|
1440
|
+
"path": "src/utils/use-render-props.ts",
|
|
1441
|
+
"type": "utils"
|
|
1442
|
+
}
|
|
1443
|
+
]
|
|
1444
|
+
}
|
|
1445
|
+
]
|