@auronui/vue 1.1.0 → 1.2.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/ai-rules.md +884 -0
- package/bin/setup-ai.mjs +74 -0
- package/dist/cjs/index.cjs +9472 -8601
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/components/checkbox/Checkbox.js.map +1 -1
- package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +8 -0
- package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/checkbox/CheckboxGroup.js.map +1 -1
- package/dist/components/checkbox/CheckboxGroup.vue_vue_type_script_setup_true_lang.js +17 -2
- package/dist/components/checkbox/CheckboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/checkbox/checkbox-group.context.js.map +1 -1
- package/dist/components/date-picker/DatePicker.js.map +1 -1
- package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js +9 -3
- package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js +9 -3
- package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/DateTimePicker.js.map +1 -1
- package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js +9 -3
- package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form/validation.js +1 -1
- package/dist/components/form/validation.js.map +1 -1
- package/dist/components/modal/ModalContent.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/popover/PopoverContent.js.map +1 -1
- package/dist/components/popover/PopoverContent.vue_vue_type_script_setup_true_lang.js +46 -34
- package/dist/components/popover/PopoverContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/radio/Radio.js.map +1 -1
- package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js +9 -1
- package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/radio/RadioGroup.js.map +1 -1
- package/dist/components/radio/RadioGroup.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/components/radio/RadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/radio/radio-group.context.js.map +1 -1
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js +8 -0
- package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/switch/SwitchGroup.js.map +1 -1
- package/dist/components/switch/SwitchGroup.vue_vue_type_script_setup_true_lang.js +17 -2
- package/dist/components/switch/SwitchGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/switch/switch-group.context.js.map +1 -1
- package/dist/components/tooltip/TooltipContent.js.map +1 -1
- package/dist/components/tooltip/TooltipContent.vue_vue_type_script_setup_true_lang.js +46 -34
- package/dist/components/tooltip/TooltipContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/composables/useAccordion.js +58 -0
- package/dist/composables/useAccordion.js.map +1 -0
- package/dist/composables/useCalendar.js +47 -0
- package/dist/composables/useCalendar.js.map +1 -0
- package/dist/composables/useCheckboxGroup.js +64 -0
- package/dist/composables/useCheckboxGroup.js.map +1 -0
- package/dist/composables/useColorPicker.js +68 -0
- package/dist/composables/useColorPicker.js.map +1 -0
- package/dist/composables/useDisclosure.js +43 -0
- package/dist/composables/useDisclosure.js.map +1 -0
- package/dist/composables/useListBox.js +61 -0
- package/dist/composables/useListBox.js.map +1 -0
- package/dist/composables/useOTP.js +29 -0
- package/dist/composables/useOTP.js.map +1 -0
- package/dist/composables/usePagination.js +54 -0
- package/dist/composables/usePagination.js.map +1 -0
- package/dist/composables/useRadioGroup.js +38 -0
- package/dist/composables/useRadioGroup.js.map +1 -0
- package/dist/composables/useRangeCalendar.js +51 -0
- package/dist/composables/useRangeCalendar.js.map +1 -0
- package/dist/composables/useSlider.js +46 -0
- package/dist/composables/useSlider.js.map +1 -0
- package/dist/composables/useSplitter.js +39 -0
- package/dist/composables/useSplitter.js.map +1 -0
- package/dist/composables/useStepper.js +58 -0
- package/dist/composables/useStepper.js.map +1 -0
- package/dist/composables/useSwatchPicker.js +31 -0
- package/dist/composables/useSwatchPicker.js.map +1 -0
- package/dist/composables/useTabs.js +34 -0
- package/dist/composables/useTabs.js.map +1 -0
- package/dist/composables/useTree.js +88 -0
- package/dist/composables/useTree.js.map +1 -0
- package/dist/index.d.ts +863 -83
- package/dist/index.js +17 -1
- package/package.json +11 -5
package/ai-rules.md
ADDED
|
@@ -0,0 +1,884 @@
|
|
|
1
|
+
# AuronUI Rules for AI Assistants
|
|
2
|
+
|
|
3
|
+
> `@auronui/vue` — 85+ accessible Vue 3 components built on Reka UI, Tailwind CSS 4.
|
|
4
|
+
> **These rules override default code generation behavior.**
|
|
5
|
+
> When generating Vue code for a project using `@auronui/vue`, follow every rule below exactly.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @auronui/vue vue@^3.5.0 reka-ui@^2.9.0 @vueuse/core@^14.0.0
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Import the stylesheet once in your app entry:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import '@auronui/vue/style'
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
|
|
21
|
+
1. **NEVER use raw HTML elements** when an AuronUI component covers the use case
|
|
22
|
+
2. **NEVER write** `<button>`, `<input>`, `<textarea>`, `<select>`, `<dialog>`, `<a>`, `<label>`, `<kbd>`, `<hr>`, `<progress>`, `<details>`, `<summary>`
|
|
23
|
+
3. **ALWAYS import from `@auronui/vue`** — never import directly from `reka-ui`
|
|
24
|
+
4. **ALWAYS use `v-model`** — never wire `:value` + `@input` manually
|
|
25
|
+
5. **ALWAYS use component `variant`/`color`/`size` props** instead of raw Tailwind utility classes on interactive elements. Use `classNames` slot props only for layout/spacing adjustments
|
|
26
|
+
6. **ALWAYS use compound sub-components** — e.g. `<Modal>` requires `<ModalContent>`, `<ModalHeader>`, etc.; never use the root component alone when a compound structure is defined
|
|
27
|
+
|
|
28
|
+
## HTML → Component Substitution Table
|
|
29
|
+
|
|
30
|
+
| Raw HTML | Use instead |
|
|
31
|
+
|---------------------------|--------------------------|
|
|
32
|
+
| `<button>` | `<Button>` |
|
|
33
|
+
| `<input>` | `<Input>` |
|
|
34
|
+
| `<textarea>` | `<Textarea>` |
|
|
35
|
+
| `<select>` + `<option>` | `<Select>` compound |
|
|
36
|
+
| `<dialog>` | `<Modal>` compound |
|
|
37
|
+
| `<a>` (navigation) | `<Link>` |
|
|
38
|
+
| `<label>` | `<Label>` |
|
|
39
|
+
| `<kbd>` | `<Kbd>` |
|
|
40
|
+
| `<hr>` | `<Separator>` |
|
|
41
|
+
| `<progress>` | `<ProgressBar>` |
|
|
42
|
+
| `<details>`/`<summary>` | `<Collapsible>` compound |
|
|
43
|
+
|
|
44
|
+
## Anti-Patterns
|
|
45
|
+
|
|
46
|
+
### 1. Raw button instead of Button
|
|
47
|
+
|
|
48
|
+
```vue
|
|
49
|
+
<!-- ❌ Never -->
|
|
50
|
+
<button class="bg-primary-500 px-4 py-2 rounded-lg text-white font-medium" @click="save">
|
|
51
|
+
Save
|
|
52
|
+
</button>
|
|
53
|
+
|
|
54
|
+
<!-- ✅ Always -->
|
|
55
|
+
<Button color="primary" @click="save">Save</Button>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 2. Raw input with manual v-model wiring
|
|
59
|
+
|
|
60
|
+
```vue
|
|
61
|
+
<!-- ❌ Never -->
|
|
62
|
+
<input
|
|
63
|
+
type="email"
|
|
64
|
+
:value="email"
|
|
65
|
+
@input="email = ($event.target as HTMLInputElement).value"
|
|
66
|
+
class="border border-gray-300 rounded px-3 py-2 w-full"
|
|
67
|
+
placeholder="you@example.com"
|
|
68
|
+
/>
|
|
69
|
+
|
|
70
|
+
<!-- ✅ Always -->
|
|
71
|
+
<Input v-model="email" type="email" label="Email" placeholder="you@example.com" />
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 3. Importing from reka-ui directly
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
// ❌ Never
|
|
78
|
+
import { Button } from 'reka-ui'
|
|
79
|
+
import { DialogRoot, DialogContent } from 'reka-ui'
|
|
80
|
+
|
|
81
|
+
// ✅ Always
|
|
82
|
+
import { Button, Modal, ModalContent } from '@auronui/vue'
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 4. Raw Tailwind on interactive elements
|
|
86
|
+
|
|
87
|
+
```vue
|
|
88
|
+
<!-- ❌ Never — bypasses design system -->
|
|
89
|
+
<Button class="bg-red-500 hover:bg-red-600 active:bg-red-700 text-white">Delete</Button>
|
|
90
|
+
|
|
91
|
+
<!-- ✅ Always — use the color prop -->
|
|
92
|
+
<Button color="danger">Delete</Button>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 5. dialog element instead of Modal
|
|
96
|
+
|
|
97
|
+
```vue
|
|
98
|
+
<!-- ❌ Never -->
|
|
99
|
+
<dialog :open="isOpen">
|
|
100
|
+
<h2>Confirm Delete</h2>
|
|
101
|
+
<p>This action cannot be undone.</p>
|
|
102
|
+
<button @click="isOpen = false">Cancel</button>
|
|
103
|
+
<button @click="handleDelete">Delete</button>
|
|
104
|
+
</dialog>
|
|
105
|
+
|
|
106
|
+
<!-- ✅ Always -->
|
|
107
|
+
<Modal v-model:open="isOpen">
|
|
108
|
+
<ModalContent>
|
|
109
|
+
<ModalHeader>
|
|
110
|
+
<ModalTitle>Confirm Delete</ModalTitle>
|
|
111
|
+
</ModalHeader>
|
|
112
|
+
<ModalBody>This action cannot be undone.</ModalBody>
|
|
113
|
+
<ModalFooter>
|
|
114
|
+
<Button variant="ghost" @click="isOpen = false">Cancel</Button>
|
|
115
|
+
<Button color="danger" @click="handleDelete">Delete</Button>
|
|
116
|
+
</ModalFooter>
|
|
117
|
+
</ModalContent>
|
|
118
|
+
</Modal>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 6. select + option instead of Select
|
|
122
|
+
|
|
123
|
+
```vue
|
|
124
|
+
<!-- ❌ Never -->
|
|
125
|
+
<select v-model="country">
|
|
126
|
+
<option value="">Select country</option>
|
|
127
|
+
<option value="us">United States</option>
|
|
128
|
+
<option value="gb">United Kingdom</option>
|
|
129
|
+
</select>
|
|
130
|
+
|
|
131
|
+
<!-- ✅ Always -->
|
|
132
|
+
<Select v-model="country" label="Country" placeholder="Select country">
|
|
133
|
+
<SelectTrigger />
|
|
134
|
+
<SelectContent>
|
|
135
|
+
<SelectItem value="us">United States</SelectItem>
|
|
136
|
+
<SelectItem value="gb">United Kingdom</SelectItem>
|
|
137
|
+
</SelectContent>
|
|
138
|
+
</Select>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 7. hr instead of Separator
|
|
142
|
+
|
|
143
|
+
```vue
|
|
144
|
+
<!-- ❌ Never -->
|
|
145
|
+
<hr class="my-4 border-gray-200" />
|
|
146
|
+
|
|
147
|
+
<!-- ✅ Always -->
|
|
148
|
+
<Separator />
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### 8. progress instead of ProgressBar
|
|
152
|
+
|
|
153
|
+
```vue
|
|
154
|
+
<!-- ❌ Never -->
|
|
155
|
+
<progress :value="upload.progress" :max="100" class="w-full"></progress>
|
|
156
|
+
|
|
157
|
+
<!-- ✅ Always -->
|
|
158
|
+
<ProgressBar :value="upload.progress" :max="100" label="Upload progress" />
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 9. details/summary instead of Collapsible
|
|
162
|
+
|
|
163
|
+
```vue
|
|
164
|
+
<!-- ❌ Never -->
|
|
165
|
+
<details>
|
|
166
|
+
<summary class="cursor-pointer font-medium">Advanced options</summary>
|
|
167
|
+
<div class="mt-2">Hidden content</div>
|
|
168
|
+
</details>
|
|
169
|
+
|
|
170
|
+
<!-- ✅ Always -->
|
|
171
|
+
<Collapsible>
|
|
172
|
+
<CollapsibleTrigger as-child>
|
|
173
|
+
<Button variant="ghost">Advanced options</Button>
|
|
174
|
+
</CollapsibleTrigger>
|
|
175
|
+
<CollapsibleContent>Hidden content</CollapsibleContent>
|
|
176
|
+
</Collapsible>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Components
|
|
182
|
+
|
|
183
|
+
### Presentational
|
|
184
|
+
|
|
185
|
+
**Spinner** — loading indicator
|
|
186
|
+
```vue
|
|
187
|
+
<Spinner size="md" color="primary" />
|
|
188
|
+
<!-- size: xs | sm | md | lg | xl -->
|
|
189
|
+
<!-- color: default | primary | secondary | success | warning | danger | current -->
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Skeleton** — loading placeholder
|
|
193
|
+
```vue
|
|
194
|
+
<Skeleton class="h-8 w-32 rounded-lg" />
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Separator** — horizontal or vertical dividing line
|
|
198
|
+
```vue
|
|
199
|
+
<Separator orientation="horizontal" />
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Badge** — small status label
|
|
203
|
+
```vue
|
|
204
|
+
<Badge variant="solid" color="primary">New</Badge>
|
|
205
|
+
<!-- variant: solid | flat | outline -->
|
|
206
|
+
<!-- color: default | primary | secondary | success | warning | danger -->
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Chip** — closeable tag/filter pill
|
|
210
|
+
```vue
|
|
211
|
+
<Chip variant="flat" color="primary" @close="remove">Label</Chip>
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Text** — semantic text with size/weight variants
|
|
215
|
+
```vue
|
|
216
|
+
<Text size="sm" weight="medium">Hello</Text>
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Label** — accessible form label
|
|
220
|
+
```vue
|
|
221
|
+
<Label for="email">Email</Label>
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Kbd** — keyboard shortcut display
|
|
225
|
+
```vue
|
|
226
|
+
<Kbd>⌘K</Kbd>
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Avatar** — user avatar with image + fallback initials
|
|
230
|
+
```vue
|
|
231
|
+
<Avatar src="/user.jpg" name="Jane Doe" size="md" />
|
|
232
|
+
<AvatarGroup :max="3">
|
|
233
|
+
<Avatar name="Alice" />
|
|
234
|
+
<Avatar name="Bob" />
|
|
235
|
+
</AvatarGroup>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Card** — content container with optional header/body/footer slots
|
|
239
|
+
```vue
|
|
240
|
+
<Card>
|
|
241
|
+
<CardHeader>Title</CardHeader>
|
|
242
|
+
<CardBody>Content</CardBody>
|
|
243
|
+
<CardFooter>Actions</CardFooter>
|
|
244
|
+
</Card>
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**EmptyState** — zero-data placeholder
|
|
248
|
+
```vue
|
|
249
|
+
<EmptyState>
|
|
250
|
+
<EmptyStateContent>No results found</EmptyStateContent>
|
|
251
|
+
</EmptyState>
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
### Buttons & Actions
|
|
257
|
+
|
|
258
|
+
**Button** — primary interactive element
|
|
259
|
+
```vue
|
|
260
|
+
<Button variant="solid" color="primary" size="md" radius="md" @click="handle">
|
|
261
|
+
Click me
|
|
262
|
+
</Button>
|
|
263
|
+
<!-- variant: solid | bordered | light | flat | faded | shadow | ghost -->
|
|
264
|
+
<!-- color: default | primary | secondary | success | warning | danger -->
|
|
265
|
+
<!-- size: xs | sm | md | lg | xl -->
|
|
266
|
+
<!-- radius: none | sm | md | lg | full -->
|
|
267
|
+
<!-- isIconOnly: boolean — square icon button -->
|
|
268
|
+
<!-- isLoading: boolean — shows spinner -->
|
|
269
|
+
<!-- fullWidth: boolean -->
|
|
270
|
+
<!-- disabled: boolean -->
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**ButtonGroup** — group of related buttons
|
|
274
|
+
```vue
|
|
275
|
+
<ButtonGroup variant="bordered" size="sm">
|
|
276
|
+
<Button>Left</Button>
|
|
277
|
+
<Button>Middle</Button>
|
|
278
|
+
<Button>Right</Button>
|
|
279
|
+
</ButtonGroup>
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**ToggleButton** — pressable on/off button
|
|
283
|
+
```vue
|
|
284
|
+
<ToggleButton v-model="pressed">Bold</ToggleButton>
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**ToggleButtonGroup** — single/multiple selection from button set
|
|
288
|
+
```vue
|
|
289
|
+
<ToggleButtonGroup v-model="selected" selection-mode="single">
|
|
290
|
+
<ToggleButton value="left">Left</ToggleButton>
|
|
291
|
+
<ToggleButton value="center">Center</ToggleButton>
|
|
292
|
+
<ToggleButton value="right">Right</ToggleButton>
|
|
293
|
+
</ToggleButtonGroup>
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
**CloseButton** — accessible × dismiss button
|
|
297
|
+
```vue
|
|
298
|
+
<CloseButton @click="close" />
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**Link** — accessible anchor element
|
|
302
|
+
```vue
|
|
303
|
+
<Link href="/docs">Read the docs</Link>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
### Form Inputs
|
|
309
|
+
|
|
310
|
+
**Input** — text field with floating label, validation, and clear button
|
|
311
|
+
```vue
|
|
312
|
+
<Input
|
|
313
|
+
v-model="value"
|
|
314
|
+
label="Email"
|
|
315
|
+
type="email"
|
|
316
|
+
placeholder="you@example.com"
|
|
317
|
+
:is-required="true"
|
|
318
|
+
:is-invalid="!!error"
|
|
319
|
+
:error-message="error"
|
|
320
|
+
/>
|
|
321
|
+
<!-- variant: flat | bordered | faded | underlined -->
|
|
322
|
+
<!-- size: sm | md | lg -->
|
|
323
|
+
<!-- labelPlacement: inside | outside | outside-left -->
|
|
324
|
+
<!-- isClearable: boolean -->
|
|
325
|
+
<!-- showPasswordToggle: boolean (for type="password") -->
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Textarea** — multiline text input
|
|
329
|
+
```vue
|
|
330
|
+
<Textarea v-model="bio" label="Bio" :min-rows="3" />
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**NumberField** — numeric input with increment/decrement
|
|
334
|
+
```vue
|
|
335
|
+
<NumberField v-model="qty" label="Quantity" :min="0" :max="99" :step="1" />
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Checkbox** — single checkbox
|
|
339
|
+
```vue
|
|
340
|
+
<Checkbox v-model="agreed">I agree to the terms</Checkbox>
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**CheckboxGroup** — grouped checkboxes
|
|
344
|
+
```vue
|
|
345
|
+
<CheckboxGroup v-model="selected" label="Options">
|
|
346
|
+
<Checkbox value="a">Option A</Checkbox>
|
|
347
|
+
<Checkbox value="b">Option B</Checkbox>
|
|
348
|
+
</CheckboxGroup>
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
**Radio / RadioGroup** — radio button group
|
|
352
|
+
```vue
|
|
353
|
+
<RadioGroup v-model="plan" label="Plan">
|
|
354
|
+
<Radio value="free">Free</Radio>
|
|
355
|
+
<Radio value="pro">Pro</Radio>
|
|
356
|
+
</RadioGroup>
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
**Switch** — toggle switch
|
|
360
|
+
```vue
|
|
361
|
+
<Switch v-model="enabled">Notifications</Switch>
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
**Select** — dropdown select
|
|
365
|
+
```vue
|
|
366
|
+
<Select v-model="country" label="Country" placeholder="Pick one">
|
|
367
|
+
<SelectTrigger />
|
|
368
|
+
<SelectContent>
|
|
369
|
+
<SelectItem value="us">United States</SelectItem>
|
|
370
|
+
<SelectItem value="gb">United Kingdom</SelectItem>
|
|
371
|
+
</SelectContent>
|
|
372
|
+
</Select>
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
**InputOTP** — one-time password input
|
|
376
|
+
```vue
|
|
377
|
+
<InputOTP v-model="code" :length="6" />
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
**Fieldset** — groups related form fields
|
|
381
|
+
```vue
|
|
382
|
+
<Fieldset legend="Personal info">
|
|
383
|
+
<Input v-model="name" label="Name" />
|
|
384
|
+
<Input v-model="email" label="Email" />
|
|
385
|
+
</Fieldset>
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
**Form / FormField** — form wrapper with validation
|
|
389
|
+
```vue
|
|
390
|
+
<Form @submit="onSubmit">
|
|
391
|
+
<FormField name="email" :rules="{ required: true }">
|
|
392
|
+
<Input v-model="email" label="Email" />
|
|
393
|
+
</FormField>
|
|
394
|
+
</Form>
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
### Overlays
|
|
400
|
+
|
|
401
|
+
**Modal** — dialog overlay
|
|
402
|
+
```vue
|
|
403
|
+
<Modal v-model:open="isOpen">
|
|
404
|
+
<ModalTrigger as-child>
|
|
405
|
+
<Button>Open</Button>
|
|
406
|
+
</ModalTrigger>
|
|
407
|
+
<ModalContent>
|
|
408
|
+
<ModalHeader>
|
|
409
|
+
<ModalTitle>Title</ModalTitle>
|
|
410
|
+
<ModalDescription>Description</ModalDescription>
|
|
411
|
+
</ModalHeader>
|
|
412
|
+
<ModalBody>Content here</ModalBody>
|
|
413
|
+
<ModalFooter>
|
|
414
|
+
<Button variant="ghost" @click="isOpen = false">Cancel</Button>
|
|
415
|
+
<Button color="primary">Confirm</Button>
|
|
416
|
+
</ModalFooter>
|
|
417
|
+
</ModalContent>
|
|
418
|
+
</Modal>
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
**AlertDialog** — destructive confirmation dialog
|
|
422
|
+
```vue
|
|
423
|
+
<AlertDialog v-model:open="isOpen">
|
|
424
|
+
<AlertDialogTrigger as-child>
|
|
425
|
+
<Button color="danger">Delete</Button>
|
|
426
|
+
</AlertDialogTrigger>
|
|
427
|
+
<AlertDialogContent>
|
|
428
|
+
<AlertDialogHeader>
|
|
429
|
+
<AlertDialogTitle>Are you sure?</AlertDialogTitle>
|
|
430
|
+
<AlertDialogDescription>This cannot be undone.</AlertDialogDescription>
|
|
431
|
+
</AlertDialogHeader>
|
|
432
|
+
<AlertDialogFooter>
|
|
433
|
+
<AlertDialogCancel>Cancel</AlertDialogCancel>
|
|
434
|
+
<AlertDialogAction>Delete</AlertDialogAction>
|
|
435
|
+
</AlertDialogFooter>
|
|
436
|
+
</AlertDialogContent>
|
|
437
|
+
</AlertDialog>
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
**Drawer** — slide-in panel
|
|
441
|
+
```vue
|
|
442
|
+
<Drawer v-model:open="isOpen" placement="right">
|
|
443
|
+
<DrawerTrigger as-child><Button>Open</Button></DrawerTrigger>
|
|
444
|
+
<DrawerContent>
|
|
445
|
+
<DrawerHeader><DrawerTitle>Settings</DrawerTitle></DrawerHeader>
|
|
446
|
+
<DrawerBody>Content</DrawerBody>
|
|
447
|
+
</DrawerContent>
|
|
448
|
+
</Drawer>
|
|
449
|
+
<!-- placement: left | right | top | bottom -->
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
**Tooltip** — hover label
|
|
453
|
+
```vue
|
|
454
|
+
<TooltipProvider>
|
|
455
|
+
<Tooltip>
|
|
456
|
+
<TooltipTrigger as-child>
|
|
457
|
+
<Button>Hover me</Button>
|
|
458
|
+
</TooltipTrigger>
|
|
459
|
+
<TooltipContent>Helpful text</TooltipContent>
|
|
460
|
+
</Tooltip>
|
|
461
|
+
</TooltipProvider>
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
**Popover** — click-triggered floating panel
|
|
465
|
+
```vue
|
|
466
|
+
<Popover>
|
|
467
|
+
<PopoverTrigger as-child><Button>Open</Button></PopoverTrigger>
|
|
468
|
+
<PopoverContent>Panel content</PopoverContent>
|
|
469
|
+
</Popover>
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
474
|
+
### Feedback
|
|
475
|
+
|
|
476
|
+
**Alert** — inline status message
|
|
477
|
+
```vue
|
|
478
|
+
<Alert severity="success">
|
|
479
|
+
<AlertIcon />
|
|
480
|
+
<AlertTitle>Done!</AlertTitle>
|
|
481
|
+
<AlertDescription>Your changes were saved.</AlertDescription>
|
|
482
|
+
</Alert>
|
|
483
|
+
<!-- severity: info | success | warning | danger -->
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
**Toast** — ephemeral notification (imperative API)
|
|
487
|
+
```vue
|
|
488
|
+
<script setup>
|
|
489
|
+
import { useToast } from '@auronui/vue'
|
|
490
|
+
const { toast } = useToast()
|
|
491
|
+
function notify() {
|
|
492
|
+
toast({ title: 'Saved!', variant: 'success' })
|
|
493
|
+
}
|
|
494
|
+
</script>
|
|
495
|
+
<template>
|
|
496
|
+
<ToastProvider>
|
|
497
|
+
<ToastViewport />
|
|
498
|
+
</ToastProvider>
|
|
499
|
+
</template>
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
**ProgressBar** — linear progress
|
|
503
|
+
```vue
|
|
504
|
+
<ProgressBar :value="60" :max="100" label="Upload" />
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
**ProgressCircle** — circular progress
|
|
508
|
+
```vue
|
|
509
|
+
<ProgressCircle :value="75" size="md" />
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
**Meter** — bounded measurement (e.g. disk usage)
|
|
513
|
+
```vue
|
|
514
|
+
<Meter :value="40" :min="0" :max="100" label="Storage" />
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
---
|
|
518
|
+
|
|
519
|
+
### Navigation
|
|
520
|
+
|
|
521
|
+
**Tabs** — tabbed content panels
|
|
522
|
+
```vue
|
|
523
|
+
<Tabs default-value="one" variant="primary">
|
|
524
|
+
<TabList>
|
|
525
|
+
<Tab value="one">Overview</Tab>
|
|
526
|
+
<Tab value="two">Details</Tab>
|
|
527
|
+
<TabIndicator />
|
|
528
|
+
</TabList>
|
|
529
|
+
<TabPanel value="one">Overview content</TabPanel>
|
|
530
|
+
<TabPanel value="two">Details content</TabPanel>
|
|
531
|
+
</Tabs>
|
|
532
|
+
<!-- variant: primary | secondary -->
|
|
533
|
+
<!-- orientation: horizontal | vertical -->
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
**Accordion** — collapsible sections
|
|
537
|
+
```vue
|
|
538
|
+
<Accordion type="single" collapsible>
|
|
539
|
+
<AccordionItem value="a">
|
|
540
|
+
<AccordionHeader>
|
|
541
|
+
<AccordionTrigger>Section A</AccordionTrigger>
|
|
542
|
+
</AccordionHeader>
|
|
543
|
+
<AccordionContent>Body A</AccordionContent>
|
|
544
|
+
</AccordionItem>
|
|
545
|
+
</Accordion>
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
**Collapsible** — single show/hide section
|
|
549
|
+
```vue
|
|
550
|
+
<Collapsible v-model:open="open">
|
|
551
|
+
<CollapsibleTrigger as-child><Button>Toggle</Button></CollapsibleTrigger>
|
|
552
|
+
<CollapsibleContent>Hidden content</CollapsibleContent>
|
|
553
|
+
</Collapsible>
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
**Breadcrumbs** — hierarchical navigation
|
|
557
|
+
```vue
|
|
558
|
+
<Breadcrumbs>
|
|
559
|
+
<BreadcrumbItem href="/">Home</BreadcrumbItem>
|
|
560
|
+
<BreadcrumbItem href="/docs">Docs</BreadcrumbItem>
|
|
561
|
+
<BreadcrumbItem>Current</BreadcrumbItem>
|
|
562
|
+
</Breadcrumbs>
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
**Pagination** — page navigation
|
|
566
|
+
```vue
|
|
567
|
+
<Pagination v-model:page="page" :total="100" :per-page="10">
|
|
568
|
+
<PaginationContent>
|
|
569
|
+
<PaginationPrev />
|
|
570
|
+
<PaginationItem v-for="p in pages" :key="p" :value="p">{{ p }}</PaginationItem>
|
|
571
|
+
<PaginationNext />
|
|
572
|
+
</PaginationContent>
|
|
573
|
+
</Pagination>
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
---
|
|
577
|
+
|
|
578
|
+
### Selection & Menus
|
|
579
|
+
|
|
580
|
+
**ListBox** — accessible list selection
|
|
581
|
+
```vue
|
|
582
|
+
<ListBox v-model="selected" selection-mode="single">
|
|
583
|
+
<ListBoxItem value="a">Option A</ListBoxItem>
|
|
584
|
+
<ListBoxItem value="b">Option B</ListBoxItem>
|
|
585
|
+
</ListBox>
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
**Dropdown** — context menu / action menu
|
|
589
|
+
```vue
|
|
590
|
+
<Dropdown>
|
|
591
|
+
<DropdownTrigger as-child><Button>Actions</Button></DropdownTrigger>
|
|
592
|
+
<DropdownMenu>
|
|
593
|
+
<DropdownItem @click="edit">Edit</DropdownItem>
|
|
594
|
+
<DropdownItem @click="remove" class="text-danger">Delete</DropdownItem>
|
|
595
|
+
</DropdownMenu>
|
|
596
|
+
</Dropdown>
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
**ComboBox** — searchable dropdown
|
|
600
|
+
```vue
|
|
601
|
+
<ComboBox v-model="value" :items="options" label="Framework">
|
|
602
|
+
<ComboBoxInput placeholder="Search..." />
|
|
603
|
+
<ComboBoxContent>
|
|
604
|
+
<ComboBoxItem v-for="item in filtered" :key="item.value" :value="item.value">
|
|
605
|
+
{{ item.label }}
|
|
606
|
+
</ComboBoxItem>
|
|
607
|
+
<ComboBoxEmpty>No results</ComboBoxEmpty>
|
|
608
|
+
</ComboBoxContent>
|
|
609
|
+
</ComboBox>
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
---
|
|
613
|
+
|
|
614
|
+
### Data Display
|
|
615
|
+
|
|
616
|
+
**Table** — accessible data table
|
|
617
|
+
```vue
|
|
618
|
+
<Table>
|
|
619
|
+
<TableHeader>
|
|
620
|
+
<TableRow>
|
|
621
|
+
<TableHeaderCell>Name</TableHeaderCell>
|
|
622
|
+
<TableHeaderCell>Role</TableHeaderCell>
|
|
623
|
+
</TableRow>
|
|
624
|
+
</TableHeader>
|
|
625
|
+
<TableBody>
|
|
626
|
+
<TableRow v-for="row in rows" :key="row.id">
|
|
627
|
+
<TableCell>{{ row.name }}</TableCell>
|
|
628
|
+
<TableCell>{{ row.role }}</TableCell>
|
|
629
|
+
</TableRow>
|
|
630
|
+
</TableBody>
|
|
631
|
+
</Table>
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
---
|
|
635
|
+
|
|
636
|
+
### Specialized
|
|
637
|
+
|
|
638
|
+
**Slider** — range input
|
|
639
|
+
```vue
|
|
640
|
+
<Slider v-model="volume" :min="0" :max="100" :step="1" />
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
**ScrollArea** — custom scrollbar container
|
|
644
|
+
```vue
|
|
645
|
+
<ScrollArea class="h-64">
|
|
646
|
+
<div v-for="item in longList" :key="item">{{ item }}</div>
|
|
647
|
+
</ScrollArea>
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
**ScrollShadow** — fades content edges to indicate overflow
|
|
651
|
+
```vue
|
|
652
|
+
<ScrollShadow class="h-64 overflow-y-auto">
|
|
653
|
+
Long content...
|
|
654
|
+
</ScrollShadow>
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
**Stepper** — multi-step wizard indicator
|
|
658
|
+
```vue
|
|
659
|
+
<Stepper :value="currentStep">
|
|
660
|
+
<StepperItem :step="1">
|
|
661
|
+
<StepperIndicator />
|
|
662
|
+
<StepperTitle>Account</StepperTitle>
|
|
663
|
+
</StepperItem>
|
|
664
|
+
<StepperSeparator />
|
|
665
|
+
<StepperItem :step="2">
|
|
666
|
+
<StepperIndicator />
|
|
667
|
+
<StepperTitle>Profile</StepperTitle>
|
|
668
|
+
</StepperItem>
|
|
669
|
+
</Stepper>
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
**Calendar** — date picker calendar
|
|
673
|
+
```vue
|
|
674
|
+
<Calendar v-model="date" />
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
**DatePicker** — date picker with input
|
|
678
|
+
```vue
|
|
679
|
+
<DatePicker v-model="date" label="Pick a date" />
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
**ColorPicker** — full color picker
|
|
683
|
+
```vue
|
|
684
|
+
<ColorPicker v-model="color" />
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
**AspectRatio** — enforces a width/height ratio
|
|
688
|
+
```vue
|
|
689
|
+
<AspectRatio :ratio="16/9">
|
|
690
|
+
<img src="..." class="w-full h-full object-cover" />
|
|
691
|
+
</AspectRatio>
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
**Toolbar** — accessible horizontal toolbar
|
|
695
|
+
```vue
|
|
696
|
+
<Toolbar>
|
|
697
|
+
<ToolbarButton>Bold</ToolbarButton>
|
|
698
|
+
<ToolbarSeparator />
|
|
699
|
+
<ToolbarButton>Italic</ToolbarButton>
|
|
700
|
+
</Toolbar>
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
**Tree** — hierarchical tree view
|
|
704
|
+
```vue
|
|
705
|
+
<Tree v-model:expanded="expanded" v-model:selected="selected">
|
|
706
|
+
<TreeItem value="root" label="Root">
|
|
707
|
+
<TreeItem value="child" label="Child" />
|
|
708
|
+
</TreeItem>
|
|
709
|
+
</Tree>
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
**SplitterGroup** — resizable panel splitter
|
|
713
|
+
```vue
|
|
714
|
+
<SplitterGroup direction="horizontal">
|
|
715
|
+
<SplitterPanel :default-size="30">Sidebar</SplitterPanel>
|
|
716
|
+
<SplitterResizeHandle />
|
|
717
|
+
<SplitterPanel>Main</SplitterPanel>
|
|
718
|
+
</SplitterGroup>
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
---
|
|
722
|
+
|
|
723
|
+
## Common Patterns
|
|
724
|
+
|
|
725
|
+
### Login Form
|
|
726
|
+
|
|
727
|
+
```vue
|
|
728
|
+
<script setup lang="ts">
|
|
729
|
+
import { ref } from 'vue'
|
|
730
|
+
import { Button, Input, Form, FormField, Link, Separator, Text } from '@auronui/vue'
|
|
731
|
+
|
|
732
|
+
const email = ref('')
|
|
733
|
+
const password = ref('')
|
|
734
|
+
|
|
735
|
+
async function onSubmit() {
|
|
736
|
+
// handle login
|
|
737
|
+
}
|
|
738
|
+
</script>
|
|
739
|
+
|
|
740
|
+
<template>
|
|
741
|
+
<Form @submit="onSubmit" class="space-y-4 w-full max-w-sm">
|
|
742
|
+
<FormField name="email">
|
|
743
|
+
<Input v-model="email" type="email" label="Email" :is-required="true" />
|
|
744
|
+
</FormField>
|
|
745
|
+
<FormField name="password">
|
|
746
|
+
<Input v-model="password" type="password" label="Password" :show-password-toggle="true" />
|
|
747
|
+
</FormField>
|
|
748
|
+
<Button type="submit" color="primary" :full-width="true">Sign in</Button>
|
|
749
|
+
<Separator />
|
|
750
|
+
<Text size="sm" class="text-center">
|
|
751
|
+
No account? <Link href="/register">Sign up</Link>
|
|
752
|
+
</Text>
|
|
753
|
+
</Form>
|
|
754
|
+
</template>
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
### Confirm Delete Dialog
|
|
758
|
+
|
|
759
|
+
```vue
|
|
760
|
+
<script setup lang="ts">
|
|
761
|
+
import {
|
|
762
|
+
Button, AlertDialog, AlertDialogTrigger, AlertDialogContent,
|
|
763
|
+
AlertDialogHeader, AlertDialogTitle, AlertDialogDescription,
|
|
764
|
+
AlertDialogFooter, AlertDialogAction, AlertDialogCancel,
|
|
765
|
+
} from '@auronui/vue'
|
|
766
|
+
|
|
767
|
+
const emit = defineEmits<{ deleted: [] }>()
|
|
768
|
+
</script>
|
|
769
|
+
|
|
770
|
+
<template>
|
|
771
|
+
<AlertDialog>
|
|
772
|
+
<AlertDialogTrigger as-child>
|
|
773
|
+
<Button color="danger" variant="bordered">Delete account</Button>
|
|
774
|
+
</AlertDialogTrigger>
|
|
775
|
+
<AlertDialogContent>
|
|
776
|
+
<AlertDialogHeader>
|
|
777
|
+
<AlertDialogTitle>Delete account?</AlertDialogTitle>
|
|
778
|
+
<AlertDialogDescription>
|
|
779
|
+
This will permanently delete your account and all your data.
|
|
780
|
+
This action cannot be undone.
|
|
781
|
+
</AlertDialogDescription>
|
|
782
|
+
</AlertDialogHeader>
|
|
783
|
+
<AlertDialogFooter>
|
|
784
|
+
<AlertDialogCancel>Cancel</AlertDialogCancel>
|
|
785
|
+
<AlertDialogAction @click="emit('deleted')">Delete account</AlertDialogAction>
|
|
786
|
+
</AlertDialogFooter>
|
|
787
|
+
</AlertDialogContent>
|
|
788
|
+
</AlertDialog>
|
|
789
|
+
</template>
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
### Data Table with Pagination
|
|
793
|
+
|
|
794
|
+
```vue
|
|
795
|
+
<script setup lang="ts">
|
|
796
|
+
import { ref, computed } from 'vue'
|
|
797
|
+
import {
|
|
798
|
+
Table, TableHeader, TableBody, TableRow, TableHeaderCell, TableCell,
|
|
799
|
+
Pagination, PaginationContent, PaginationItem, PaginationPrev, PaginationNext,
|
|
800
|
+
Spinner,
|
|
801
|
+
} from '@auronui/vue'
|
|
802
|
+
|
|
803
|
+
const props = defineProps<{
|
|
804
|
+
rows: Array<{ id: string; name: string; email: string; role: string }>
|
|
805
|
+
loading?: boolean
|
|
806
|
+
}>()
|
|
807
|
+
|
|
808
|
+
const page = ref(1)
|
|
809
|
+
const perPage = 10
|
|
810
|
+
const totalPages = computed(() => Math.ceil(props.rows.length / perPage))
|
|
811
|
+
const pageRows = computed(() =>
|
|
812
|
+
props.rows.slice((page.value - 1) * perPage, page.value * perPage)
|
|
813
|
+
)
|
|
814
|
+
</script>
|
|
815
|
+
|
|
816
|
+
<template>
|
|
817
|
+
<div class="space-y-4">
|
|
818
|
+
<div v-if="loading" class="flex justify-center py-8">
|
|
819
|
+
<Spinner size="lg" color="primary" />
|
|
820
|
+
</div>
|
|
821
|
+
<Table v-else>
|
|
822
|
+
<TableHeader>
|
|
823
|
+
<TableRow>
|
|
824
|
+
<TableHeaderCell>Name</TableHeaderCell>
|
|
825
|
+
<TableHeaderCell>Email</TableHeaderCell>
|
|
826
|
+
<TableHeaderCell>Role</TableHeaderCell>
|
|
827
|
+
</TableRow>
|
|
828
|
+
</TableHeader>
|
|
829
|
+
<TableBody>
|
|
830
|
+
<TableRow v-for="row in pageRows" :key="row.id">
|
|
831
|
+
<TableCell>{{ row.name }}</TableCell>
|
|
832
|
+
<TableCell>{{ row.email }}</TableCell>
|
|
833
|
+
<TableCell>{{ row.role }}</TableCell>
|
|
834
|
+
</TableRow>
|
|
835
|
+
</TableBody>
|
|
836
|
+
</Table>
|
|
837
|
+
<Pagination v-model:page="page" :total="rows.length" :per-page="perPage">
|
|
838
|
+
<PaginationContent>
|
|
839
|
+
<PaginationPrev />
|
|
840
|
+
<PaginationItem v-for="p in totalPages" :key="p" :value="p">{{ p }}</PaginationItem>
|
|
841
|
+
<PaginationNext />
|
|
842
|
+
</PaginationContent>
|
|
843
|
+
</Pagination>
|
|
844
|
+
</div>
|
|
845
|
+
</template>
|
|
846
|
+
```
|
|
847
|
+
|
|
848
|
+
---
|
|
849
|
+
|
|
850
|
+
## Imports
|
|
851
|
+
|
|
852
|
+
```ts
|
|
853
|
+
import {
|
|
854
|
+
Button, ButtonGroup, CloseButton, ToggleButton, ToggleButtonGroup,
|
|
855
|
+
Input, Textarea, NumberField, Checkbox, CheckboxGroup,
|
|
856
|
+
Radio, RadioGroup, Switch, SwitchGroup,
|
|
857
|
+
Select, SelectTrigger, SelectContent, SelectItem,
|
|
858
|
+
Modal, ModalTrigger, ModalContent, ModalHeader, ModalBody, ModalFooter,
|
|
859
|
+
ModalTitle, ModalDescription, ModalClose,
|
|
860
|
+
AlertDialog, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader,
|
|
861
|
+
AlertDialogBody, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription,
|
|
862
|
+
AlertDialogAction, AlertDialogCancel,
|
|
863
|
+
Drawer, DrawerTrigger, DrawerContent, DrawerHeader, DrawerBody,
|
|
864
|
+
Tooltip, TooltipProvider, TooltipTrigger, TooltipContent,
|
|
865
|
+
Popover, PopoverTrigger, PopoverContent,
|
|
866
|
+
Tabs, TabList, Tab, TabPanel, TabIndicator,
|
|
867
|
+
Accordion, AccordionItem, AccordionHeader, AccordionTrigger, AccordionContent,
|
|
868
|
+
Alert, AlertIcon, AlertTitle, AlertDescription,
|
|
869
|
+
ToastProvider, Toast, ToastViewport, useToast,
|
|
870
|
+
Badge, Chip, Avatar, AvatarGroup, Card, CardHeader, CardBody, CardFooter,
|
|
871
|
+
Spinner, Skeleton, Separator, Text, Label, Kbd,
|
|
872
|
+
Pagination, PaginationContent, PaginationItem, PaginationPrev, PaginationNext,
|
|
873
|
+
Table, TableHeader, TableBody, TableRow, TableCell, TableHeaderCell,
|
|
874
|
+
ListBox, ListBoxItem, Dropdown, DropdownTrigger, DropdownMenu, DropdownItem,
|
|
875
|
+
ComboBox, ComboBoxInput, ComboBoxContent, ComboBoxItem, ComboBoxEmpty,
|
|
876
|
+
TagGroup, TagGroupInput, Tag, TagText, TagDelete,
|
|
877
|
+
Slider, ScrollArea, ScrollShadow, ProgressBar, ProgressCircle, Meter,
|
|
878
|
+
Calendar, DatePicker, ColorPicker,
|
|
879
|
+
Breadcrumbs, BreadcrumbItem, Toolbar, ToolbarButton, ToolbarSeparator,
|
|
880
|
+
Collapsible, CollapsibleTrigger, CollapsibleContent,
|
|
881
|
+
Stepper, StepperItem, StepperIndicator, StepperTitle, StepperSeparator,
|
|
882
|
+
Tree, TreeItem, AspectRatio, SplitterGroup, SplitterPanel, SplitterResizeHandle,
|
|
883
|
+
} from '@auronui/vue'
|
|
884
|
+
```
|