windly-ui 1.0.3 → 1.0.5

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.
Files changed (38) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +8 -1
  3. package/dist/runtime/components/Accordion.vue +6 -2
  4. package/dist/runtime/components/Alert.d.vue.ts +83 -0
  5. package/dist/runtime/components/Alert.vue +78 -0
  6. package/dist/runtime/components/Alert.vue.d.ts +83 -0
  7. package/dist/runtime/components/Button.d.vue.ts +9 -0
  8. package/dist/runtime/components/Button.vue +2 -1
  9. package/dist/runtime/components/Button.vue.d.ts +9 -0
  10. package/dist/runtime/components/Dialog.d.vue.ts +9 -49
  11. package/dist/runtime/components/Dialog.vue +18 -85
  12. package/dist/runtime/components/Dialog.vue.d.ts +9 -49
  13. package/dist/runtime/components/FileUploader.d.vue.ts +22 -15
  14. package/dist/runtime/components/FileUploader.vue +286 -130
  15. package/dist/runtime/components/FileUploader.vue.d.ts +22 -15
  16. package/dist/runtime/components/Input.d.vue.ts +5 -3
  17. package/dist/runtime/components/Input.vue +15 -7
  18. package/dist/runtime/components/Input.vue.d.ts +5 -3
  19. package/dist/runtime/components/Select.d.vue.ts +25 -17
  20. package/dist/runtime/components/Select.vue +207 -136
  21. package/dist/runtime/components/Select.vue.d.ts +25 -17
  22. package/dist/runtime/components/Table.d.vue.ts +1 -1
  23. package/dist/runtime/components/Table.vue.d.ts +1 -1
  24. package/dist/runtime/components/Textarea.d.vue.ts +1 -1
  25. package/dist/runtime/components/Textarea.vue.d.ts +1 -1
  26. package/dist/runtime/docs/component.d.vue.ts +28 -0
  27. package/dist/runtime/docs/component.vue +34 -0
  28. package/dist/runtime/docs/component.vue.d.ts +28 -0
  29. package/dist/runtime/docs/index.d.vue.ts +3 -0
  30. package/dist/runtime/docs/index.vue +2537 -0
  31. package/dist/runtime/docs/index.vue.d.ts +3 -0
  32. package/dist/runtime/docs/megaSection.d.vue.ts +39 -0
  33. package/dist/runtime/docs/megaSection.vue +52 -0
  34. package/dist/runtime/docs/megaSection.vue.d.ts +39 -0
  35. package/dist/runtime/docs/section.d.vue.ts +39 -0
  36. package/dist/runtime/docs/section.vue +52 -0
  37. package/dist/runtime/docs/section.vue.d.ts +39 -0
  38. package/package.json +1 -1
@@ -0,0 +1,2537 @@
1
+ <template>
2
+ <div class="min-h-screen bg-gray-50 text-gray-800 font-sans">
3
+ <!-- Header -->
4
+ <header>
5
+ </header>
6
+ <!-- Main Content -->
7
+ <main class="max-w-5xl mx-auto p-6 space-y-10">
8
+ <DocMegaSection title="Tailwind-based UI Library"
9
+ sub-title="A lightweight, Tailwind CSS–powered component library for Nuxt 4">
10
+ <p class="text-gray-700 my-4 font-light">
11
+ UI Library is a component-based UI library built specifically for Nuxt 4 applications. Inspired by Quasar, it
12
+ focuses on simplicity, modularity, and rapid development, while ensuring seamless integration with Tailwind
13
+ CSS.
14
+ </p>
15
+ <p class="text-gray-700 font-light">
16
+ All components are auto-imported, so no manual imports are required. Each component accepts Tailwind CSS
17
+ utility classes directly via the class prop or standard class bindings, making customization straightforward
18
+ and flexible.
19
+ </p>
20
+ </DocMegaSection>
21
+ <!-- Getting Started -->
22
+ <DocMegaSection title="Getting Started" sub-title="Set up UI Library in your Nuxt 4 project in minutes.">
23
+ <p class="text-gray-700 my-4 font-light">
24
+ UI Library is designed to work out of the box with Nuxt 4 and Tailwind CSS. Once installed, all components are
25
+ automatically available throughout your application—no manual imports required.
26
+ </p>
27
+ <p class="text-gray-700 mb-4 font-light">
28
+ To begin, install the library and ensure Tailwind CSS is properly configured in your Nuxt project. You can
29
+ then start using components directly in your templates and customize them using Tailwind utility classes.es
30
+ directly via the class prop or standard class bindings, making customization straightforward and flexible.
31
+ </p>
32
+ <p class="text-gray-700 font-light">
33
+ This documentation will guide you through installation, basic usage, and common patterns to help you get
34
+ productive quickly.
35
+ </p>
36
+ </DocMegaSection>
37
+ <!-- Installation -->
38
+ <DocMegaSection title="Installation" sub-title="Install UI Library in a Nuxt 4 application.">
39
+ <p class="text-gray-700 my-4 font-light">
40
+ UI Library is designed to integrate seamlessly with Nuxt 4. Install the package using your preferred package
41
+ manager, then register it as a Nuxt module.
42
+ </p>
43
+ </DocMegaSection>
44
+ <!-- Form Controls -->
45
+ <DocMegaSection title="Form Controls"
46
+ sub-title="Interactive checkbox component for boolean and multi-state selections.">
47
+ <DocSection title="UIInput"
48
+ sub-title="Flexible input component with built-in validation, floating labels, styling variants, customizable sizes, colors, border radius options, and native input type support.">
49
+ <DocComponent title="Basic Input" caption="A standard text input with a floating label.">
50
+ <UIInput v-model="value" label="Basic Input" />
51
+ </DocComponent>
52
+ <DocComponent title="Input Variants" caption="Choose from multiple visual styles to match your design.">
53
+ <UIInput v-model="value" label="Default Input" />
54
+ <UIInput v-model="value" outlined label="Outlined Input" />
55
+ <UIInput v-model="value" flat label="Flat Input" />
56
+ <UIInput v-model="value" borderless label="Borderless Input" />
57
+ </DocComponent>
58
+ <DocComponent title="Placeholder" caption="Display placeholder text when the input is empty.">
59
+ <UIInput v-model="value" label="Placeholder Input" placeholder="Enter keyword" />
60
+ <UIInput v-model="value" outlined label="Placeholder Input" placeholder="Enter keyword" />
61
+ <UIInput v-model="value" flat label="Placeholder Input" placeholder="Enter keyword" />
62
+ <UIInput v-model="value" borderless label="Placeholder Input" placeholder="Enter keyword" />
63
+ </DocComponent>
64
+ <DocComponent title="Hint Text" caption="Provide additional guidance or instructions below the input.">
65
+ <UIInput v-model="value" label="Input with Hint" hint="Minimum 6 characters recommended." />
66
+ <UIInput v-model="value" outlined label="Input with Hint" hint="Minimum 6 characters recommended." />
67
+ <UIInput v-model="value" flat label="Input with Hint" hint="Minimum 6 characters recommended." />
68
+ <UIInput v-model="value" borderless label="Input with Hint" hint="Minimum 6 characters recommended." />
69
+ </DocComponent>
70
+ <DocComponent title="Cases" caption="Control text transformation using the case prop.">
71
+ <UIInput v-model="value" label="Uppercase Input" case="upper" />
72
+ <UIInput v-model="value" outlined label="Lowercase Input" case="lower" />
73
+ <UIInput v-model="value" flat label="Capitalized Input" case="capitalize" />
74
+ <UIInput v-model="value" borderless label="Normal Case Input" case="normal" />
75
+ </DocComponent>
76
+ <DocComponent title="Required Field" caption="Mark an input field as mandatory.">
77
+ <UIInput v-model="value" label="Required Field" required />
78
+ <UIInput v-model="value" outlined label="Required Field" required />
79
+ <UIInput v-model="value" flat label="Required Field" required />
80
+ <UIInput v-model="value" borderless label="Required Field" required />
81
+ </DocComponent>
82
+ <DocComponent title="Input Sizes" caption="Control input height and spacing using the size prop.">
83
+ <div class="grid grid-cols-3 gap-4">
84
+ <UIInput v-model="value" size="sm" label="Small Input" />
85
+ <UIInput v-model="value" size="md" label="Medium Input (Default)" />
86
+ <UIInput v-model="value" size="lg" label="Large Input" />
87
+ <UIInput v-model="value" outlined size="sm" label="Small Input" />
88
+ <UIInput v-model="value" outlined size="md" label="Medium Input (Default)" />
89
+ <UIInput v-model="value" outlined size="lg" label="Large Input" />
90
+ <UIInput v-model="value" flat size="sm" label="Small Input" />
91
+ <UIInput v-model="value" flat size="md" label="Medium Input (Default)" />
92
+ <UIInput v-model="value" flat size="lg" label="Large Input" />
93
+ <UIInput v-model="value" borderless size="sm" label="Small Input" />
94
+ <UIInput v-model="value" borderless size="md" label="Medium Input (Default)" />
95
+ <UIInput v-model="value" borderless size="lg" label="Large Input" />
96
+ </div>
97
+ </DocComponent>
98
+ <DocComponent title="HEX Color" caption="Customize the input accent color using a HEX color value.">
99
+ <UIInput v-model="value" color="#8200db" label="HEX Color Input" />
100
+ <UIInput v-model="value" outlined color="#76e322" label="HEX Color Input" />
101
+ <UIInput v-model="value" flat color="#f0b100" label="HEX Color Input" />
102
+ <UIInput v-model="value" borderless color="#7d32aa" label="HEX Color Input" />
103
+ </DocComponent>
104
+ <DocComponent title="Tailwind Color" caption="Customize the input accent color using a Tailwind color name.">
105
+ <UIInput v-model="value" color="purple-600" label="Tailwind Color Input" />
106
+ <UIInput v-model="value" outlined color="green-600" label="Tailwind Color Input" />
107
+ <UIInput v-model="value" flat color="orange-600" label="Tailwind Color Input" />
108
+ <UIInput v-model="value" borderless color="teal-600" label="Tailwind Color Input" />
109
+ </DocComponent>
110
+ <DocComponent title="Width" caption="Control the width using CSS values or Tailwind width classes.">
111
+ <div class="flex flex-wrap items-end gap-4">
112
+ <!-- CSS Width Values -->
113
+ <UIInput v-model="value" width="120px" label="120px" />
114
+ <UIInput v-model="value" width="160px" label="160px" />
115
+ <UIInput v-model="value" width="200px" label="200px" />
116
+ <UIInput v-model="value" width="240px" label="240px" />
117
+ <UIInput v-model="value" width="300px" label="300px" />
118
+ <UIInput v-model="value" width="20rem" label="20rem" />
119
+
120
+ <!-- Tailwind Width Classes -->
121
+ <UIInput v-model="value" width="24" label="w-24" />
122
+ <UIInput v-model="value" width="32" label="w-32" />
123
+ <UIInput v-model="value" width="40" label="w-40" />
124
+ <UIInput v-model="value" width="48" label="w-48" />
125
+ <UIInput v-model="value" width="56" label="w-56" />
126
+ <UIInput v-model="value" width="64" label="w-64" />
127
+ <UIInput v-model="value" width="72" label="w-72" />
128
+ <UIInput v-model="value" width="80" label="w-80" />
129
+ <UIInput v-model="value" width="96" label="w-96" />
130
+ </div>
131
+
132
+ <div class="flex flex-col tems-end gap-4">
133
+
134
+ <UIInput v-model="value" width="50%" label="50%" />
135
+ <UIInput v-model="value" width="full" label="w-full" />
136
+ <UIInput v-model="value" width="fit" label="w-fit" />
137
+ <UIInput v-model="value" width="auto" label="w-auto" />
138
+
139
+ </div>
140
+ </DocComponent>
141
+ <DocComponent title="Rounded Corners" caption="Control border radius using the rounded prop.">
142
+ <div class="flex flex-wrap justify-between items-end gap-4">
143
+ <UIInput v-model="value" rounded="none" label="Rounded None" />
144
+ <UIInput v-model="value" outlined rounded="none" label="Rounded None" />
145
+ <UIInput v-model="value" flat rounded="none" label="Rounded None" />
146
+ <UIInput v-model="value" borderless rounded="none" label="Rounded None" />
147
+ <UIInput v-model="value" rounded="sm" label="Rounded Small" />
148
+ <UIInput v-model="value" outlined rounded="sm" label="Rounded Small" />
149
+ <UIInput v-model="value" flat rounded="sm" label="Rounded Small" />
150
+ <UIInput v-model="value" borderless rounded="sm" label="Rounded Small" />
151
+ <UIInput v-model="value" rounded="md" label="Rounded Medium" />
152
+ <UIInput v-model="value" outlined rounded="md" label="Rounded Medium" />
153
+ <UIInput v-model="value" flat rounded="md" label="Rounded Medium" />
154
+ <UIInput v-model="value" borderless rounded="md" label="Rounded Medium" />
155
+ <UIInput v-model="value" rounded="lg" label="Rounded Large" />
156
+ <UIInput v-model="value" outlined rounded="lg" label="Rounded Large" />
157
+ <UIInput v-model="value" flat rounded="lg" label="Rounded Large" />
158
+ <UIInput v-model="value" borderless rounded="lg" label="Rounded Large" />
159
+ <UIInput v-model="value" rounded="xl" label="Rounded Extra Large" />
160
+ <UIInput v-model="value" outlined rounded="xl" label="Rounded Extra Large" />
161
+ <UIInput v-model="value" flat rounded="xl" label="Rounded Extra Large" />
162
+ <UIInput v-model="value" borderless rounded="xl" label="Rounded Extra Large" />
163
+ <UIInput v-model="value" rounded="full" label="Rounded Full" />
164
+ <UIInput v-model="value" outlined rounded="full" label="Rounded Full" />
165
+ <UIInput v-model="value" flat rounded="full" label="Rounded Full" />
166
+ <UIInput v-model="value" borderless rounded="full" label="Rounded Full" />
167
+ </div>
168
+ </DocComponent>
169
+ <DocComponent title="Input Types"
170
+ caption="Supports native HTML input types for appropriate keyboards and validation.">
171
+ <div class="flex flex-wrap justify-between items-end gap-4">
172
+ <UIInput v-model="value" type="text" label="Text Input" placeholder="Enter text" />
173
+ <UIInput v-model="value" type="text" label="Text Input" placeholder="Enter text" flat />
174
+ <UIInput v-model="value" type="text" label="Text Input" placeholder="Enter text" outlined />
175
+ <UIInput v-model="value" type="text" label="Text Input" placeholder="Enter text" borderless />
176
+ <UIInput v-model="password" type="password" label="Password Input" placeholder="Enter password" />
177
+ <UIInput v-model="password" type="password" label="Password Input" placeholder="Enter password" flat />
178
+ <UIInput v-model="password" type="password" label="Password Input" placeholder="Enter password"
179
+ outlined />
180
+ <UIInput v-model="password" type="password" label="Password Input" placeholder="Enter password"
181
+ borderless />
182
+ <UIInput v-model="search" type="search" label="Search Input" placeholder="Search..." />
183
+ <UIInput v-model="search" type="search" label="Search Input" placeholder="Search..." flat />
184
+ <UIInput v-model="search" type="search" label="Search Input" placeholder="Search..." outlined />
185
+ <UIInput v-model="search" type="search" label="Search Input" placeholder="Search..." borderless />
186
+ <UIInput v-model="email" type="email" label="Email Input" placeholder="Enter your email" />
187
+ <UIInput v-model="email" type="email" label="Email Input" placeholder="Enter your email" flat />
188
+ <UIInput v-model="email" type="email" label="Email Input" placeholder="Enter your email" outlined />
189
+ <UIInput v-model="email" type="email" label="Email Input" placeholder="Enter your email" borderless />
190
+ <UIInput v-model="url" type="url" label="URL Input" placeholder="Enter your website URL" />
191
+ <UIInput v-model="url" type="url" label="URL Input" placeholder="Enter your website URL" flat />
192
+ <UIInput v-model="url" type="url" label="URL Input" placeholder="Enter your website URL" outlined />
193
+ <UIInput v-model="url" type="url" label="URL Input" placeholder="Enter your website URL" borderless />
194
+ <UIInput v-model="telphone" type="tel" label="Phone Input" placeholder="Enter your phone number" />
195
+ <UIInput v-model="telphone" type="tel" label="Phone Input" placeholder="Enter your phone number" flat />
196
+ <UIInput v-model="telphone" type="tel" label="Phone Input" placeholder="Enter your phone number"
197
+ outlined />
198
+ <UIInput v-model="telphone" type="tel" label="Phone Input" placeholder="Enter your phone number"
199
+ borderless />
200
+ <UIInput v-model="number" type="number" label="Number Input" placeholder="Enter a number" />
201
+ <UIInput v-model="number" type="number" label="Number Input" placeholder="Enter a number" flat />
202
+ <UIInput v-model="number" type="number" label="Number Input" placeholder="Enter a number" outlined />
203
+ <UIInput v-model="number" type="number" label="Number Input" placeholder="Enter a number" borderless />
204
+ </div>
205
+ </DocComponent>
206
+ <DocComponent title="Date and Time Input Types"
207
+ caption="Supports additional HTML input types for specialized use cases.">
208
+ <div class="grid grid-cols-4 gap-4">
209
+ <UIInput v-model="date" type="date" label="Date Input" />
210
+ <UIInput v-model="date" type="date" label="Date Input" flat />
211
+ <UIInput v-model="date" type="date" label="Date Input" outlined />
212
+ <UIInput v-model="date" type="date" label="Date Input" borderless />
213
+ <UIInput v-model="time" type="time" label="Time Input" />
214
+ <UIInput v-model="time" type="time" label="Time Input" flat />
215
+ <UIInput v-model="time" type="time" label="Time Input" outlined />
216
+ <UIInput v-model="time" type="time" label="Time Input" borderless />
217
+ <UIInput v-model="datetimeLocal" type="datetime-local" label="Datetime Local Input" />
218
+ <UIInput v-model="datetimeLocal" type="datetime-local" label="Datetime Local Input" flat />
219
+ <UIInput v-model="datetimeLocal" type="datetime-local" label="Datetime Local Input" outlined />
220
+ <UIInput v-model="datetimeLocal" type="datetime-local" label="Datetime Local Input" borderless />
221
+ <UIInput v-model="month" type="month" label="Month Input" />
222
+ <UIInput v-model="month" type="month" label="Month Input" flat />
223
+ <UIInput v-model="month" type="month" label="Month Input" outlined />
224
+ <UIInput v-model="month" type="month" label="Month Input" borderless />
225
+ <UIInput v-model="week" type="week" label="Week Input" />
226
+ <UIInput v-model="week" type="week" label="Week Input" flat />
227
+ <UIInput v-model="week" type="week" label="Week Input" outlined />
228
+ <UIInput v-model="week" type="week" label="Week Input" borderless />
229
+ </div>
230
+ </DocComponent>
231
+ <DocComponent title="Validation Triggers"
232
+ caption="Configure when validation occurs using the validateOn prop.">
233
+ <UIInput v-model="email" label="Validate on Blur" validateOn="blur" type="email" />
234
+ <UIInput v-model="email" label="Validate on Input" validateOn="input" type="email" />
235
+ </DocComponent>
236
+ </DocSection>
237
+ <DocSection title="UITextarea"
238
+ sub-title="Multi-line text input with auto-grow, counters, validation, and styling support.">
239
+ <DocComponent title="Basic Textarea" caption="Standard multi-line text input.">
240
+ <UITextarea v-model="text" placeholder="Enter text..." />
241
+ </DocComponent>
242
+ <DocComponent title="Label" caption="Labels help users understand the purpose of the field.">
243
+ <UITextarea v-model="text" label="Description" />
244
+ </DocComponent>
245
+ <DocComponent title="Placeholder" caption="Placeholder text provides input guidance.">
246
+ <UITextarea v-model="text" placeholder="Tell us about yourself..." />
247
+ </DocComponent>
248
+ <DocComponent title="Auto Grow" caption="Automatically expands vertically as content grows.">
249
+ <UITextarea v-model="text" autoGrow placeholder="Start typing..." />
250
+ </DocComponent>
251
+ <DocComponent title="Word Count" caption="Displays the current number of words entered.">
252
+ <UITextarea v-model="text" showWordCount />
253
+ </DocComponent>
254
+ <DocComponent title="Character Count" caption="Displays the current number of characters entered.">
255
+ <UITextarea v-model="text" showCharCount />
256
+ </DocComponent>
257
+ <DocComponent title="Maximum Length" caption="Displays progress toward the maximum character limit.">
258
+ <UITextarea v-model="text" :maxlength="200" showCharCount />
259
+ </DocComponent>
260
+ <DocComponent title="Helper Text" caption="Provide additional guidance below the field.">
261
+ <UITextarea v-model="text" hint="Maximum 500 characters." />
262
+ </DocComponent>
263
+ <DocComponent title="Error State" caption="Displays validation errors and highlights the field.">
264
+ <UITextarea v-model="text" error errorMessage="Description is required." />
265
+ </DocComponent>
266
+ <DocComponent title="Disabled" caption="Prevents user interaction.">
267
+ <UITextarea v-model="text" disable />
268
+ </DocComponent>
269
+ <DocComponent title="Read Only" caption="Allows content to be viewed without editing.">
270
+ <UITextarea v-model="text" modelValue="This content cannot be edited." readonly />
271
+ </DocComponent>
272
+ <DocComponent title="Rounded Variants" caption="Control border radius using the rounded prop.">
273
+ <div class="space-y-4">
274
+ <UITextarea v-model="text" rounded="none" label="Rounded None" />
275
+
276
+ <UITextarea v-model="text" rounded="md" label="Rounded Medium" />
277
+
278
+ <UITextarea v-model="text" rounded="xl" label="Rounded XL" />
279
+ </div>
280
+ </DocComponent>
281
+ <DocComponent title="Size Variants" caption="Adjust textarea sizing using the size prop.">
282
+ <div class="space-y-4">
283
+ <UITextarea v-model="text" size="sm" label="Small" />
284
+
285
+ <UITextarea v-model="text" size="md" label="Medium" />
286
+
287
+ <UITextarea v-model="text" size="lg" label="Large" />
288
+ </div>
289
+ </DocComponent>
290
+ <DocComponent title="Tailwind Colors" caption="Apply border colors using Tailwind utility colors.">
291
+ <UITextarea v-model="text" color="blue-500" label="Blue Border" />
292
+ </DocComponent>
293
+ <DocComponent title="Hex Colors" caption="Custom border colors can be provided using hex values.">
294
+ <UITextarea v-model="text" color="#10b981" label="Green Border" />
295
+ </DocComponent>
296
+ <DocComponent title="Text Colors" caption="Customize the textarea text color.">
297
+ <UITextarea v-model="text" textColor="purple-600" label="Purple Text" />
298
+ </DocComponent>
299
+ <DocComponent title="Custom Classes" caption="Apply custom Tailwind utility classes using contentClass.">
300
+ <UITextarea v-model="text" contentClass="bg-blue-50 shadow-md" label="Custom Styled" />
301
+ </DocComponent>
302
+ <DocComponent title="Custom Styles" caption="Apply inline styles using contentStyle.">
303
+ <UITextarea v-model="text" contentStyle="`{
304
+ backgroundColor: '#fefce8',
305
+ borderColor: '#facc15'
306
+ }`" label="Inline Styled" />
307
+ </DocComponent>
308
+ <DocComponent title="Combined Example" caption="Combines multiple styling and behavior options.">
309
+ <UITextarea v-model="feedback" label="Feedback" placeholder="Tell us what you think..." rounded="xl"
310
+ size="lg" color="blue-500" autoGrow showWordCount showCharCount :maxlength="500"
311
+ contentClass="shadow-md" />
312
+ </DocComponent>
313
+ </DocSection>
314
+ <DocSection title="UIToggle" sub-title="Switch / Toggle input. Works like a checkbox.">
315
+ <DocComponent title="Basic Toggle" caption="A simple toggle with default styling.">
316
+ <UIToggle v-model="toggleInput" />
317
+ </DocComponent>
318
+ <DocComponent title="Toggle With Label" caption="Toggle with a descriptive label.">
319
+ <UIToggle v-model="toggleInput" label="Enable Notifications" />
320
+ </DocComponent>
321
+ <DocComponent title="Label Positions" caption="Labels can be positioned on any side of the toggle.">
322
+ <div class="flex flex-wrap gap-6">
323
+ <UIToggle v-model="toggleInput" label="Top" label-position="top" />
324
+ <UIToggle v-model="toggleInput" label="Bottom" label-position="bottom" />
325
+ <UIToggle v-model="toggleInput" label="Left" label-position="left" />
326
+ <UIToggle v-model="toggleInput" label="Right" label-position="right" />
327
+ </div>
328
+ </DocComponent>
329
+ <DocComponent title="Toggle Sizes" caption="Small, medium, and large toggle sizes.">
330
+ <div class="flex items-center gap-6">
331
+ <UIToggle v-model="toggleInput" size="small" />
332
+ <UIToggle v-model="toggleInput" size="medium" />
333
+ <UIToggle v-model="toggleInput" size="large" />
334
+ </div>
335
+ </DocComponent>
336
+ <DocComponent title="Tailwind Colors" caption="Toggle supports Tailwind utility colors.">
337
+ <div class="flex flex-wrap gap-6">
338
+ <UIToggle v-model="toggleInput" true-color="green-500" />
339
+ <UIToggle v-model="toggleInput" true-color="purple-500" />
340
+ <UIToggle v-model="toggleInput" true-color="rose-500" />
341
+ </div>
342
+ </DocComponent>
343
+ <DocComponent title="Hex Colors" caption="Toggle also supports arbitrary hex colors.">
344
+ <div class="flex flex-wrap gap-6">
345
+ <UIToggle v-model="toggleInput" true-color="#22c55e" />
346
+ <UIToggle v-model="toggleInput" true-color="#8b5cf6" />
347
+ <UIToggle v-model="toggleInput" true-color="#ef4444" />
348
+ </div>
349
+ </DocComponent>
350
+ <DocComponent title="Custom False Color" caption="Customize both active and inactive colors.">
351
+ <UIToggle v-model="toggleInput" true-color="emerald-500" false-color="red-300" />
352
+ </DocComponent>
353
+ <DocComponent title="Toggle Icons" caption="Display icons inside the toggle thumb.">
354
+ <div class="flex flex-wrap gap-6">
355
+ <UIToggle v-model="toggleInput" active-icon="check" inactive-icon="close" />
356
+ <UIToggle v-model="toggleInput" active-icon="light_mode" inactive-icon="dark_mode"
357
+ true-color="amber-400" />
358
+ <UIToggle v-model="toggleInput" active-icon="favorite" inactive-icon="favorite_border"
359
+ true-color="rose-500" />
360
+ </div>
361
+ </DocComponent>
362
+ <DocComponent title="Disabled Toggle" caption="Disabled state prevents user interaction.">
363
+ <div class="flex flex-wrap gap-6">
364
+ <UIToggle v-model="toggleInput" disable />
365
+ <UIToggle v-model="toggleInput" disable :model-value="true" />
366
+ </div>
367
+ </DocComponent>
368
+ <DocComponent title="Custom Active/Inactive Values"
369
+ caption="Toggle can emit custom values instead of booleans.">
370
+ <UIToggle v-model="toggleCustomValue" active-value="enabled" inactive-value="disabled"
371
+ label="Feature Status" />
372
+ <div class="mt-3 text-sm text-gray-500">
373
+ Current Value:
374
+ {{ toggleCustomValue }}
375
+ </div>
376
+ </DocComponent>
377
+ <DocComponent title="Custom Classes" caption="Apply custom utility classes to the wrapper.">
378
+ <UIToggle v-model="toggleInput" custom-classes="p-4 border rounded-xl bg-gray-50" label="Custom Wrapper" />
379
+ </DocComponent>
380
+ </DocSection>
381
+ <DocSection title="UICheckbox" sub-title="Single or group selection.">
382
+ <DocComponent title="Basic Checkbox" caption="A standard checkbox used to toggle a boolean value on and off.">
383
+ <div class="flex gap-6 items-center">
384
+ <UICheckbox v-model="checked" label="Accept terms" />
385
+ <UICheckbox v-model="checked" label="Subscribe to newsletter" />
386
+ </div>
387
+ </DocComponent>
388
+ <DocComponent title="Checkbox Sizes"
389
+ caption="UICheckbox supports multiple sizes to adapt to different layouts and densities.">
390
+ <div class="flex gap-6 items-center">
391
+ <UICheckbox v-model="checked" size="sm" label="Small" />
392
+ <UICheckbox v-model="checked" size="md" label="Medium" />
393
+ <UICheckbox v-model="checked" size="lg" label="Large" />
394
+ </div>
395
+ </DocComponent>
396
+ <DocComponent title="Checkbox Icons" caption="You can customize the icons displayed for each checkbox state.">
397
+ <div class="flex gap-6 items-center">
398
+ <UICheckbox v-model="checked" checkedIcon="done" uncheckedIcon="close" label="Custom icons" />
399
+ <UICheckbox v-model="checked" checkedIcon="favorite" uncheckedIcon="favorite_border"
400
+ checkedColor="red-500" label="Favorite" />
401
+ </div>
402
+ </DocComponent>
403
+ <DocComponent title="Checkbox Colors"
404
+ caption="Apply different colors to represent states or semantic meaning.">
405
+ <div class="flex gap-6 items-center">
406
+ <UICheckbox v-model="checked" checkedColor="green-500" label="Success" />
407
+ <UICheckbox v-model="checked" checkedColor="yellow-500" label="Warning" />
408
+ <UICheckbox v-model="checked" checkedColor="red-500" label="Danger" />
409
+ </div>
410
+ </DocComponent>
411
+ <DocComponent title="Dense Checkbox"
412
+ caption="Dense checkboxes are ideal for compact layouts like tables or filter panels.">
413
+ <div class="flex flex-col gap-2">
414
+ <UICheckbox v-model="checked" dense label="Compact option 1" />
415
+ <UICheckbox v-model="checked" dense label="Compact option 2" />
416
+ <UICheckbox v-model="checked" dense label="Compact option 3" />
417
+ </div>
418
+ </DocComponent>
419
+ <DocComponent title="Checkbox Values"
420
+ caption="UICheckbox supports custom true, false, and intermediate values.">
421
+ <div class="flex gap-6 items-center">
422
+ <UICheckbox v-model="checked" trueValue="enabled" falseValue="disabled" label="Feature status" />
423
+ <UICheckbox v-model="checked" trueValue="approved" intermediateValue="pending" falseValue="rejected"
424
+ label="Approval state" />
425
+ </div>
426
+ </DocComponent>
427
+ <DocComponent title="Disabled Checkbox"
428
+ caption="Disabled checkboxes prevent interaction and indicate unavailable options.">
429
+ <div class="flex gap-6 items-center">
430
+ <UICheckbox v-model="checked" disable label="Locked option" />
431
+ <UICheckbox v-model="checked" disable checkedColor="blue-500" label="Read-only" />
432
+ </div>
433
+ </DocComponent>
434
+ <DocComponent title="Rounded Checkbox" caption="Change the checkbox shape using the rounded prop.">
435
+ <div class="flex gap-6 items-center">
436
+ <UICheckbox v-model="checked" rounded="sm" label="Rounded SM" />
437
+ <UICheckbox v-model="checked" rounded="md" label="Rounded MD" />
438
+ <UICheckbox v-model="checked" rounded="full" label="Rounded Full" />
439
+ </div>
440
+ </DocComponent>
441
+ <DocComponent title="Checkbox Without Label"
442
+ caption="Checkboxes can be used without labels for minimal or inline selection.">
443
+ <div class="flex gap-4 items-center">
444
+ <UICheckbox v-model="checked" />
445
+ <UICheckbox v-model="checked" checkedColor="blue-500" />
446
+ <UICheckbox v-model="checked" checkedIcon="check_circle" />
447
+ </div>
448
+ </DocComponent>
449
+ <DocComponent title="Checkbox With Custom Values"
450
+ caption="Checkboxes can be used without labels for minimal or inline selection.">
451
+ <div class="flex gap-4 items-center">
452
+ <UICheckbox v-model="checkedValue" true-value="green" false-value="red" />
453
+ <div>Checked Value - {{ checkedValue }}</div>
454
+ </div>
455
+ </DocComponent>
456
+ </DocSection>
457
+ <DocSection title="UIRadio" sub-title="Radio buttons with optional labels.">
458
+ <DocComponent title="Basic Radio" caption="Simple radio button usage.">
459
+ <UIRadio v-model="radioValue" value="apple" label="Apple" />
460
+ </DocComponent>
461
+ <DocComponent title="Radio Group" caption="Multiple radio buttons sharing the same model.">
462
+ <div class="flex flex-col gap-3">
463
+ <UIRadio v-model="radioValue" name="fruit" value="apple" label="Apple" />
464
+ <UIRadio v-model="radioValue" name="fruit" value="banana" label="Banana" />
465
+ <UIRadio v-model="radioValue" name="fruit" value="orange" label="Orange" />
466
+ </div>
467
+ </DocComponent>
468
+ <DocComponent title="Radio Sizes" caption="Small, medium, and large radios.">
469
+ <div class="flex items-center gap-6">
470
+ <UIRadio v-model="radioValue" value="sm" label="Small" size="sm" />
471
+
472
+ <UIRadio v-model="radioValue" value="md" label="Medium" size="md" />
473
+
474
+ <UIRadio v-model="radioValue" value="lg" label="Large" size="lg" />
475
+ </div>
476
+ </DocComponent>
477
+ <DocComponent title="Tailwind Colors" caption="Supports Tailwind color tokens.">
478
+ <div class="flex flex-col gap-3">
479
+ <UIRadio v-model="radioValue" value="blue" label="Blue" color="blue-500" icon="check" />
480
+
481
+ <UIRadio v-model="radioValue" value="green" label="Green" color="green-500" icon="check" />
482
+
483
+ <UIRadio v-model="radioValue" value="rose" label="Rose" color="rose-500" icon="check" />
484
+ </div>
485
+ </DocComponent>
486
+ <DocComponent title="Hex Colors" caption="Supports arbitrary hex colors.">
487
+ <div class="flex flex-col gap-3">
488
+ <UIRadio v-model="radioValue" value="one" label="Purple" color="#7c3aed" icon="check" />
489
+
490
+ <UIRadio v-model="radioValue" value="two" label="Green" color="#22c55e" icon="check" />
491
+ </div>
492
+ </DocComponent>
493
+ <DocComponent title="Rounded Variants" caption="Different rounded styles.">
494
+ <div class="flex flex-col gap-3">
495
+ <UIRadio v-model="radioValue" value="none" label="Rounded None" rounded="none" icon="check" />
496
+
497
+ <UIRadio v-model="radioValue" value="md" label="Rounded MD" rounded="md" icon="check" />
498
+
499
+ <UIRadio v-model="radioValue" value="full" label="Rounded Full" rounded="full" icon="check" />
500
+ </div>
501
+ </DocComponent>
502
+ <DocComponent title="Flat Radios" caption="Remove shadows using flat mode.">
503
+ <UIRadio v-model="radioValue" value="flat" label="Flat Radio" flat icon="check" />
504
+ </DocComponent>
505
+ <DocComponent title="Disabled Radios" caption="Disabled state prevents interaction.">
506
+ <div class="flex flex-col gap-3">
507
+ <UIRadio v-model="radioValue" value="one" label="Disabled" disable />
508
+
509
+ <UIRadio v-model="radioValue" value="two" label="Disabled Selected" disable />
510
+ </div>
511
+ </DocComponent>
512
+ <DocComponent title="Label Positions" caption="Labels can appear on all sides.">
513
+ <div class="flex gap-8">
514
+ <UIRadio v-model="radioValue" value="top" label="Top" label-position="top" />
515
+
516
+ <UIRadio v-model="radioValue" value="bottom" label="Bottom" label-position="bottom" />
517
+
518
+ <UIRadio v-model="radioValue" value="left" label="Left" label-position="left" />
519
+
520
+ <UIRadio v-model="radioValue" value="right" label="Right" label-position="right" />
521
+ </div>
522
+ </DocComponent>
523
+ <DocComponent title="Custom Icons" caption="Use Material Icons inside the radio.">
524
+ <div class="flex flex-col gap-3">
525
+ <UIRadio v-model="radioValue" value="favorite" label="Favorite" icon="favorite" color="rose-500" />
526
+
527
+ <UIRadio v-model="radioValue" value="done" label="Completed" icon="done" color="emerald-500" />
528
+ </div>
529
+ </DocComponent>
530
+ </DocSection>
531
+ <DocSection title="UISelect" sub-title="Material-inspired select component with native and searchable modes.">
532
+ <DocComponent title="Basic Select" caption="Simple native select dropdown.">
533
+ <UISelect v-model="selectValue" label="Country" :options="countries" />
534
+ </DocComponent>
535
+
536
+ <DocComponent title="Filterable Select" caption="Search through available options.">
537
+ <UISelect v-model="selectValue" filter label="Country" :options="countries" />
538
+ </DocComponent>
539
+
540
+ <DocComponent title="Placeholder" caption="Customize the placeholder.">
541
+ <UISelect v-model="selectValue" label="Framework" placeholder="Choose a framework" :options="frameworks" />
542
+ </DocComponent>
543
+
544
+ <DocComponent title="Hint" caption="Display helper text below the component.">
545
+ <UISelect v-model="selectValue" label="Theme" hint="Select your preferred theme." :options="themes" />
546
+ </DocComponent>
547
+
548
+ <DocComponent title="Required" caption="Mark the field as required.">
549
+ <UISelect v-model="selectValue" label="Country" required hint="Required field" :options="countries" />
550
+ </DocComponent>
551
+
552
+ <DocComponent title="Disabled" caption="Prevent user interaction.">
553
+ <UISelect v-model="selectValue" disabled label="Country" :options="countries" />
554
+ </DocComponent>
555
+
556
+ <DocComponent title="Readonly" caption="Display the value without allowing changes.">
557
+ <UISelect v-model="selectValue" readonly label="Country" :options="countries" />
558
+ </DocComponent>
559
+
560
+ <DocComponent title="Outlined" caption="Display a full outlined border.">
561
+ <UISelect v-model="selectValue" outlined label="Country" :options="countries" />
562
+ </DocComponent>
563
+
564
+ <DocComponent title="Borderless" caption="Remove borders completely.">
565
+ <UISelect v-model="selectValue" borderless label="Country" :options="countries" />
566
+ </DocComponent>
567
+
568
+ <DocComponent title="Flat" caption="Remove the default shadow.">
569
+ <UISelect v-model="selectValue" flat outlined label="Country" :options="countries" />
570
+ </DocComponent>
571
+
572
+ <DocComponent title="Rounded" caption="Different corner radius options.">
573
+ <div class="space-y-4">
574
+ <UISelect v-model="selectValue" rounded="sm" label="Small" :options="countries" />
575
+
576
+ <UISelect v-model="selectValue" rounded="md" label="Medium" :options="countries" />
577
+
578
+ <UISelect v-model="selectValue" rounded="lg" label="Large" :options="countries" />
579
+
580
+ <UISelect v-model="selectValue" rounded="xl" label="Extra Large" :options="countries" />
581
+
582
+ <UISelect v-model="selectValue" rounded="full" label="Full" :options="countries" />
583
+ </div>
584
+ </DocComponent>
585
+
586
+ <DocComponent title="Sizes" caption="Supports small, medium and large variants.">
587
+ <div class="space-y-4">
588
+ <UISelect v-model="selectValue" size="sm" label="Small" :options="countries" />
589
+
590
+ <UISelect v-model="selectValue" size="md" label="Medium" :options="countries" />
591
+
592
+ <UISelect v-model="selectValue" size="lg" label="Large" :options="countries" />
593
+ </div>
594
+ </DocComponent>
595
+
596
+ <DocComponent title="Dense" caption="Compact vertical spacing.">
597
+ <UISelect v-model="selectValue" dense label="Country" :options="countries" />
598
+ </DocComponent>
599
+
600
+ <DocComponent title="Tailwind Color" caption="Apply Tailwind border colors.">
601
+ <UISelect v-model="selectValue" outlined color="emerald-500" label="Status" :options="statuses" />
602
+ </DocComponent>
603
+
604
+ <DocComponent title="Hex Color" caption="Supports custom hex colors.">
605
+ <UISelect v-model="selectValue" outlined color="#7c3aed" label="Priority" :options="priorities" />
606
+ </DocComponent>
607
+
608
+ <DocComponent title="Custom Width" caption="Use Tailwind widths or CSS widths.">
609
+ <div class="space-y-4">
610
+ <UISelect v-model="selectValue" width="64" label="Tailwind Width" :options="countries" />
611
+
612
+ <UISelect v-model="selectValue" width="350px" label="CSS Width" :options="countries" />
613
+ </div>
614
+ </DocComponent>
615
+
616
+ <DocComponent title="Large Dataset" caption="Search through many options.">
617
+ <UISelect v-model="selectValue" filter label="City" placeholder="Search cities..." :options="cities" />
618
+ </DocComponent>
619
+ </DocSection>
620
+ <DocSection title="UIColorPicker" sub-title="The UIColor component provides a method to input colors.">
621
+ <DocComponent title="Basic Color Picker" caption="The simplest form — uses default props and behavior.">
622
+ <div class="flex gap-6 items-center">
623
+ <UIColorPicker v-model="colorPickerValue" />
624
+ </div>
625
+ </DocComponent>
626
+ <DocComponent title="Color Picker with Default Color"
627
+ caption="The simplest form — uses default props and behavior.">
628
+ <div class="flex gap-6 items-center">
629
+ <UIColorPicker v-model="colorPickerValue" default-value="#45321f" />
630
+ <UIColorPicker v-model="colorPickerValue" default-value="#78aee2" />
631
+ <UIColorPicker v-model="colorPickerValue" default-value="#765ead" />
632
+ </div>
633
+ </DocComponent>
634
+ <DocComponent title="Disabled Color Picker" caption="The simplest form — uses default props and behavior.">
635
+ <div class="flex gap-6 items-center">
636
+ <UIColorPicker v-model="colorPickerValue" :disabled="true" />
637
+ <UIColorPicker v-model="colorPickerValue" :disabled="true" :show-opacity="true" />
638
+ </div>
639
+ </DocComponent>
640
+ <DocComponent title="Flat Color Picker" caption="The simplest form — uses default props and behavior.">
641
+ <div class="flex gap-6 items-center">
642
+ <UIColorPicker v-model="colorPickerValue" :flat="true" />
643
+ <UIColorPicker v-model="colorPickerValue" :flat="true" :bordered="true" :show-opacity="true" />
644
+ </div>
645
+ </DocComponent>
646
+ <DocComponent title="Square Color Picker" caption="The simplest form — uses default props and behavior.">
647
+ <div class="flex gap-6 items-center">
648
+ <UIColorPicker v-model="colorPickerValue" :square="true" />
649
+ <UIColorPicker v-model="colorPickerValue" :flat="true" :bordered="true" :square="true" />
650
+ </div>
651
+ </DocComponent>
652
+ <DocComponent title="Bordered Color Picker" caption="The simplest form — uses default props and behavior.">
653
+ <div class="flex gap-6 items-center">
654
+ <UIColorPicker v-model="colorPickerValue" :bordered="true" />
655
+ <UIColorPicker v-model="colorPickerValue" :bordered="true" :border-radius="20" />
656
+ <UIColorPicker v-model="colorPickerValue" :flat="true" :bordered="true" :border-radius="25" />
657
+ </div>
658
+ </DocComponent>
659
+ </DocSection>
660
+ <DocSection title="UIDate" sub-title="The UIDate component provides a method to input date.">
661
+ <DocComponent title="Basic Date"
662
+ caption="A simple date component with default styling and single date selection.">
663
+ <UIDate v-model="dateValue" />
664
+ </DocComponent>
665
+ <DocComponent title="With Custom Color" caption="Apply theme color to match your design system.">
666
+ <UIDate v-model="dateValue" color="rose" />
667
+ </DocComponent>
668
+ <DocComponent title="Flat Style" caption="Removes background and shadow for a minimal look.">
669
+ <UIDate v-model="dateValue" :flat="true" />
670
+ </DocComponent>
671
+ <DocComponent title="Bordered" caption="Adds a border around the date picker.">
672
+ <UIDate v-model="dateValue" :bordered="true" />
673
+ </DocComponent>
674
+ <DocComponent title="Border Radius Variant" caption="Applies different border radius styles.">
675
+ <div class="flex gap-6 items-center py-4 w-full overflow-x-auto">
676
+ <UIDate v-model="dateValue" border-radius="none" />
677
+ <UIDate v-model="dateValue" border-radius="sm" />
678
+ <UIDate v-model="dateValue" border-radius="md" />
679
+ <UIDate v-model="dateValue" border-radius="lg" />
680
+ <UIDate v-model="dateValue" border-radius="xl" />
681
+ </div>
682
+ </DocComponent>
683
+ <DocComponent title="Custom Text Color" caption="Control text color independently from background.">
684
+ <div class="flex gap-6 items-center py-4 w-full overflow-x-auto">
685
+ <UIDate v-model="dateValue" textColor="green-700" />
686
+ <UIDate v-model="dateValue" textColor="yellow-500" />
687
+ <UIDate v-model="dateValue" textColor="purple-400" />
688
+ <UIDate v-model="dateValue" textColor="pink-500" />
689
+ </div>
690
+ </DocComponent>
691
+ <DocComponent title="Multiple Date Selection" caption="Select multiple dates at once.">
692
+ <UIDate v-model="multiDates" multiDate />
693
+ </DocComponent>
694
+ <DocComponent title="Date Range Selection" caption="Select a continuous range of dates.">
695
+ <UIDate v-model="rangeDates" rangeDate />
696
+ </DocComponent>
697
+ <DocComponent title="Range with Disabled Dates" caption="Prevent selection of specific dates within a range.">
698
+ <div class="flex gap-6 items-center py-4 w-full overflow-x-auto">
699
+ <UIDate v-model="rangeDates" :disabledDates="['2026-04-12', '2026-04-14']" />
700
+ <UIDate v-model="rangeDates" range-date :disabledDates="['2026-04-10', '2026-04-15']" />
701
+ </div>
702
+ </DocComponent>
703
+ <DocComponent title="Custom Date Format" caption="Output date in a specific format.">
704
+ <div class="flex gap-6 items-center py-4 w-full overflow-x-auto">
705
+ <UIDate v-model="dateValue" format="YYYY-MM-DD" />
706
+ <UIDate v-model="dateValue" format="DD-MM-YYYY" />
707
+ <UIDate v-model="dateValue" format="MM-DD-YYYY" />
708
+ <UIDate v-model="dateValue" format="DD/MM/YYYY" />
709
+ </div>
710
+ </DocComponent>
711
+ <DocComponent title="Timestamp Output" caption="Return selected date as a timestamp.">
712
+ <UIDate v-model="dateValue" format="timestamp" />
713
+ </DocComponent>
714
+ <DocComponent title="Disable Weekends" caption="Dynamically disable weekends from selection.">
715
+ {{ disabledWeekends }}
716
+ <!-- <UIDate
717
+ v-model="dateValue"
718
+ :disabledDates="disabledWeekends"
719
+ /> -->
720
+ </DocComponent>
721
+ <DocComponent title="Highlight Events" caption="Highlight important dates with custom colors.">
722
+ <UIDate v-model="dateValue" :events="[
723
+ { date: '2026-04-10', color: 'red-500' },
724
+ { date: '2026-04-15', color: 'green-500' }
725
+ ]" />
726
+ </DocComponent>
727
+ <DocComponent title="Today Highlight" caption="Automatically highlight today's date.">
728
+ <UIDate v-model="dateValue" today />
729
+ </DocComponent>
730
+ <DocComponent title="Custom Header Slot" caption="Replace the default header with custom content.">
731
+ <UIDate v-model="dateValue">
732
+ <template #header>
733
+ <div class="text-center font-bold text-lg">
734
+ Select Your Date
735
+ </div>
736
+ </template>
737
+ </UIDate>
738
+ </DocComponent>
739
+ <DocComponent title="Hide Header" caption="Remove the header section completely.">
740
+ <UIDate v-model="dateValue" :showHeader="false" />
741
+ </DocComponent>
742
+ <DocComponent title="Date & Time Picker" caption="Enable time selection along with date.">
743
+ <UIDate v-model="dateTime" type="datetime" />
744
+ </DocComponent>
745
+ <!-- <DocComponent
746
+ title="Full Featured Example"
747
+ caption="Combining multiple features into a powerful date picker."
748
+ >
749
+ <UIDate
750
+ v-model="rangeDates"
751
+ range-date
752
+ color="indigo-600"
753
+ bordered
754
+ :events="[
755
+ { date: '2026-04-12', color: 'yellow-400' }
756
+ ]"
757
+ :disabledDates="['2026-04-10']"
758
+ format="DD MMM YYYY"
759
+ />
760
+ </DocComponent> -->
761
+ </DocSection>
762
+ <DocSection title="UIFileUploader" sub-title="Material-inspired file uploader with drag-and-drop support.">
763
+ <DocComponent title="Basic Upload" caption="Default uploader.">
764
+ <UIFileUploader v-model="files" label="Attachments" />
765
+ </DocComponent>
766
+
767
+ <DocComponent title="Single File" caption="Restrict uploads to one file.">
768
+ <UIFileUploader v-model="singleFile" :multiple="false" label="Resume" />
769
+ </DocComponent>
770
+
771
+ <DocComponent title="Multiple Files" caption="Allow uploading multiple files.">
772
+ <UIFileUploader v-model="multipleFiles" multiple label="Project Files" />
773
+ </DocComponent>
774
+
775
+ <DocComponent title="Hint" caption="Display helper text.">
776
+ <UIFileUploader v-model="files" label="Documents" hint="Upload PDF or image files." />
777
+ </DocComponent>
778
+
779
+ <DocComponent title="Outlined" caption="Use outlined styling.">
780
+ <UIFileUploader v-model="files" outlined label="Attachments" />
781
+ </DocComponent>
782
+
783
+ <DocComponent title="Borderless" caption="Remove borders completely.">
784
+ <UIFileUploader v-model="files" borderless label="Attachments" />
785
+ </DocComponent>
786
+
787
+ <DocComponent title="Flat" caption="Remove shadow.">
788
+ <UIFileUploader v-model="files" outlined flat label="Attachments" />
789
+ </DocComponent>
790
+
791
+ <DocComponent title="Rounded" caption="Different rounded variants.">
792
+ <div class="space-y-4">
793
+ <UIFileUploader v-model="files" rounded="sm" label="Rounded SM" />
794
+
795
+ <UIFileUploader v-model="files" rounded="md" label="Rounded MD" />
796
+
797
+ <UIFileUploader v-model="files" rounded="lg" label="Rounded LG" />
798
+
799
+ <UIFileUploader v-model="files" rounded="xl" label="Rounded XL" />
800
+
801
+ <UIFileUploader v-model="files" rounded="full" label="Rounded Full" />
802
+ </div>
803
+ </DocComponent>
804
+
805
+ <DocComponent title="Sizes" caption="Small, medium and large variants.">
806
+ <div class="space-y-4">
807
+ <UIFileUploader v-model="files" size="sm" label="Small" />
808
+
809
+ <UIFileUploader v-model="files" size="md" label="Medium" />
810
+
811
+ <UIFileUploader v-model="files" size="lg" label="Large" />
812
+ </div>
813
+ </DocComponent>
814
+
815
+ <DocComponent title="Dense" caption="Compact vertical spacing.">
816
+ <UIFileUploader v-model="files" dense label="Compact Upload" />
817
+ </DocComponent>
818
+
819
+ <DocComponent title="Tailwind Color" caption="Apply Tailwind border colors.">
820
+ <UIFileUploader v-model="files" outlined color="emerald-500" label="Success Upload" />
821
+ </DocComponent>
822
+
823
+ <DocComponent title="Hex Color" caption="Supports custom hex colors.">
824
+ <UIFileUploader v-model="files" outlined color="#7c3aed" label="Custom Upload" />
825
+ </DocComponent>
826
+
827
+ <DocComponent title="Separator" caption="Solid, dashed and dotted borders.">
828
+ <div class="space-y-4">
829
+ <UIFileUploader v-model="files" separator="solid" label="Solid" />
830
+
831
+ <UIFileUploader v-model="files" separator="dashed" label="Dashed" />
832
+
833
+ <UIFileUploader v-model="files" separator="dotted" label="Dotted" />
834
+ </div>
835
+ </DocComponent>
836
+
837
+ <DocComponent title="Disabled" caption="Prevent interaction.">
838
+ <UIFileUploader v-model="files" disabled label="Disabled Upload" />
839
+ </DocComponent>
840
+
841
+ <DocComponent title="Readonly" caption="Display without allowing changes.">
842
+ <UIFileUploader v-model="files" readonly label="Readonly Upload" />
843
+ </DocComponent>
844
+
845
+ <DocComponent title="Width" caption="Supports Tailwind and CSS widths.">
846
+ <div class="space-y-4">
847
+ <UIFileUploader v-model="files" width="96" label="Tailwind Width" />
848
+
849
+ <UIFileUploader v-model="files" width="450px" label="CSS Width" />
850
+ </div>
851
+ </DocComponent>
852
+
853
+ <DocComponent title="File Size Limit" caption="Restrict maximum upload size.">
854
+ <UIFileUploader v-model="files" :fileSizeLimitKb="500" label="Max 500 KB" />
855
+ </DocComponent>
856
+
857
+ <DocComponent title="PDF Only" caption="Accept only PDF documents.">
858
+ <UIFileUploader v-model="files" fileType="application/pdf" label="PDF Upload" />
859
+ </DocComponent>
860
+
861
+ <DocComponent title="Images Only" caption="Accept image files.">
862
+ <UIFileUploader v-model="files" fileType="image/*" label="Image Upload" />
863
+ </DocComponent>
864
+
865
+ <DocComponent title="Custom Slot" caption="Replace the default upload content.">
866
+ <UIFileUploader v-model="files" label="Assets">
867
+ <template #content>
868
+ <div class="text-center py-4">
869
+ <span class="material-icons text-5xl text-indigo-500">
870
+ cloud_upload
871
+ </span>
872
+
873
+ <div class="mt-2 font-medium">
874
+ Upload your assets
875
+ </div>
876
+
877
+ <div class="text-sm text-gray-500">
878
+ Drag files here or click to browse
879
+ </div>
880
+ </div>
881
+ </template>
882
+ </UIFileUploader>
883
+ </DocComponent>
884
+
885
+ <DocComponent title="Custom Remove Icon" caption="Customize the remove button icon.">
886
+ <UIFileUploader v-model="files" fileRemoverIcon="delete_forever" label="Attachments" />
887
+ </DocComponent>
888
+ </DocSection>
889
+ </DocMegaSection>
890
+ <!-- Button -->
891
+ <DocSection title="UIButton" sub-title="Represents a clickable element for triggering actions."
892
+ caption="UIButtons are used to trigger actions and guide user interactions across the interface. This section showcases a wide range of UIButton styles including basic, outline, flat, rounded, dense, unelevated, stacked, gradient, size variations, icon buttons, icon-with-label buttons, and disabled states. Each example demonstrates how buttons can be customized in appearance, size, elevation, and behavior to suit different UI needs while maintaining consistency and usability.">
893
+ <DocComponent title="Basic Button"
894
+ caption="Standard buttons used for primary actions. They provide clear visual emphasis and are suitable for most common interactions.">
895
+ <div class="flex items-center gap-4 mb-4">
896
+ <UIButton color="blue-500" label="Click Me" />
897
+ <UIButton color="green-600" label="Click Me" />
898
+ <UIButton color="yellow-500" label="Click Me" />
899
+ <UIButton color="red-600" label="Click Me" />
900
+ <UIButton color="gray-600" label="Click Me" />
901
+ </div>
902
+ <div class="flex gap-4">
903
+ <UIButton color="blue-200" label="Click Me" />
904
+ <UIButton color="green-300" label="Click Me" />
905
+ <UIButton color="yellow-300" label="Click Me" />
906
+ <UIButton color="red-300" label="Click Me" />
907
+ <UIButton color="gray-200" label="Click Me" />
908
+ </div>
909
+ </DocComponent>
910
+ <DocComponent title="Outline Button"
911
+ caption="Buttons with a transparent background and visible border. Ideal for secondary actions that need less visual weight.">
912
+ <div class="flex items-center gap-4 mb-4">
913
+ <UIButton outline color="blue-500" label="Click Me" />
914
+ <UIButton outline color="green-600" label="Click Me" />
915
+ <UIButton outline color="yellow-500" label="Click Me" />
916
+ <UIButton outline color="red-600" label="Click Me" />
917
+ <UIButton outline color="gray-600" label="Click Me" />
918
+ </div>
919
+ </DocComponent>
920
+ <DocComponent title="Flat Button"
921
+ caption="Minimal buttons without borders or elevation. Commonly used for inline actions or low-priority interactions.">
922
+ <div class="flex items-center gap-4 mb-4">
923
+ <UIButton flat color="blue-500" label="Click Me" />
924
+ <UIButton flat color="green-600" label="Click Me" />
925
+ <UIButton flat color="yellow-500" label="Click Me" />
926
+ <UIButton flat color="red-600" label="Click Me" />
927
+ <UIButton flat color="gray-600" label="Click Me" />
928
+ </div>
929
+ </DocComponent>
930
+ <DocComponent title="Rounded Button"
931
+ caption="Buttons with adjustable border radius options, ranging from subtle rounding to fully pill-shaped styles.">
932
+ <div class="flex items-center gap-4 mb-4">
933
+ <UIButton rounded="none" color="blue-500" label="None" />
934
+ <UIButton rounded="sm" color="blue-500" label="Small" />
935
+ <UIButton rounded="md" color="blue-500" label="Medium (Default)" />
936
+ <UIButton rounded="lg" color="blue-500" label="Large" />
937
+ <UIButton rounded="xl" color="blue-500" label="X Large" />
938
+ <UIButton rounded="full" color="blue-500" label="Full" />
939
+ </div>
940
+ </DocComponent>
941
+ <DocComponent title="Dense Button"
942
+ caption="Compact buttons with reduced padding, designed for space-constrained layouts or data-dense interfaces.">
943
+ <div class="flex items-center gap-4 mb-4">
944
+ <UIButton dense color="blue-500" label="Click Me" />
945
+ <UIButton dense color="green-600" label="Click Me" />
946
+ <UIButton dense color="yellow-500" label="Click Me" />
947
+ <UIButton dense color="red-600" label="Click Me" />
948
+ <UIButton dense color="gray-600" label="Click Me" />
949
+ </div>
950
+ </DocComponent>
951
+ <DocComponent title="Unelevated Button"
952
+ caption="Buttons without shadows or elevation, offering a flat appearance while retaining a solid background.">
953
+ <div class="flex items-center gap-4 mb-4">
954
+ <UIButton unelevated color="blue-500" label="Click Me" />
955
+ <UIButton unelevated color="green-600" label="Click Me" />
956
+ <UIButton unelevated color="yellow-500" label="Click Me" />
957
+ <UIButton unelevated color="red-600" label="Click Me" />
958
+ <UIButton unelevated color="gray-600" label="Click Me" />
959
+ </div>
960
+ </DocComponent>
961
+ <DocComponent title="Stacked Button"
962
+ caption="Buttons that combine icons and labels in a vertical layout, useful for navigation menus or feature highlights.">
963
+ <div class="flex items-center gap-4 mb-4">
964
+ <UIButton stacked icon="home" color="blue-500" label="Click Me" />
965
+ <UIButton stacked icon="home" outlined color="green-600" label="Outlined" />
966
+ <UIButton stacked icon="home" flat color="yellow-500" label="Flat" />
967
+ <UIButton stacked icon="home" unelevated color="red-600" label="Unelevated" />
968
+ <UIButton stacked icon="home" dense color="gray-600" label="Dense" />
969
+ </div>
970
+ </DocComponent>
971
+ <DocComponent title="Gradient Button"
972
+ caption="Buttons with gradient backgrounds that add visual depth and emphasis for prominent or call-to-action elements.">
973
+ <div class="flex items-center gap-4 mb-4">
974
+ <UIButton gradient color="blue-500" label="Click Me" />
975
+ <UIButton gradient color="green-600" label="Click Me" />
976
+ <UIButton gradient color="yellow-500" color2="pink-500" label="Click Me" />
977
+ <UIButton gradient color="red-200" color2="blue-300" label="Click Me" />
978
+ <UIButton gradient color="gray-200" color2="purple-600" label="Click Me" />
979
+ </div>
980
+ </DocComponent>
981
+ <DocComponent title="Size Button"
982
+ caption="Buttons available in multiple sizes to match different layout requirements and visual hierarchies.">
983
+ <div class="flex items-center gap-4 mb-4">
984
+ <UIButton size="sm" color="blue-500" label="Small" />
985
+ <UIButton size="md" color="blue-500" label="Medium (Default)" />
986
+ <UIButton size="lg" color="blue-500" label="Large" />
987
+ <UIButton size="sm" rounded="full" color="blue-500" label="Small Rounded" />
988
+ <UIButton size="md" rounded="full" color="blue-500" label="Medium Rounded" />
989
+ <UIButton size="lg" rounded="full" color="blue-500" label="Large Rounded" />
990
+ </div>
991
+ </DocComponent>
992
+ <DocComponent title="Icon Button"
993
+ caption="Icon-only buttons used for compact actions where space is limited or the action is universally recognizable.">
994
+ <div class="flex items-center gap-4 mb-4">
995
+ <UIButton icon="home" color="blue-500" />
996
+ <UIButton icon="settings" color="green-600" />
997
+ <UIButton icon="search" color="yellow-500" />
998
+ <UIButton icon="refresh" color="red-600" />
999
+ <UIButton icon="cancel" color="gray-600" />
1000
+ </div>
1001
+ </DocComponent>
1002
+ <DocComponent title="Icon with Label Button"
1003
+ caption="Buttons that pair icons with text labels, improving clarity and accessibility for user actions.">
1004
+ <div class="flex items-center gap-4 mb-4">
1005
+ <UIButton icon="home" color="blue-500" label="Home" />
1006
+ <UIButton icon="settings" color="green-600" label="Settings" />
1007
+ <UIButton icon="search" color="yellow-500" label="Search" />
1008
+ <UIButton icon="refresh" color="red-600" label="Refresh" />
1009
+ <UIButton icon="cancel" color="gray-600" label="Cancel" />
1010
+ </div>
1011
+ </DocComponent>
1012
+ <DocComponent title="Disabled Button"
1013
+ caption="Buttons in an inactive state with no hover or click interaction, used to indicate unavailable actions.">
1014
+ <div class="flex items-center gap-4 mb-4">
1015
+ <UIButton label="Toggle Enable" @click="disable = !disable" />
1016
+ <UIButton :disable="disable" color="blue-500" label="Click Me" />
1017
+ <UIButton :disable="disable" outline color="green-600" label="Outlined" />
1018
+ <UIButton :disable="disable" flat color="yellow-500" label="Flat" />
1019
+ <UIButton :disable="disable" unelevated color="red-600" label="Unelevated" />
1020
+ <UIButton :disable="disable" rounded="lg" color="gray-600" label="Rounded Lg" />
1021
+ </div>
1022
+ </DocComponent>
1023
+ </DocSection>
1024
+ <!-- Navigation -->
1025
+ <DocMegaSection title="Navigation" sub-title="Components to guide users through your app efficiently.">
1026
+ <DocSection title="UIBreadcrumbs" sub-title="Hierarchical navigation display.">
1027
+ <DocComponent title="Basic Breadcrumbs"
1028
+ caption="A simple breadcrumb trail showing hierarchical navigation using text-only items.">
1029
+ <UIBreadcrumbs :items="basicBreadcrumbs" />
1030
+ </DocComponent>
1031
+ <DocComponent title="Icon Breadcrumbs"
1032
+ caption="Breadcrumb items enhanced with icons to improve visual recognition and scannability.">
1033
+ <UIBreadcrumbs :items="iconBreadcrumbs" active-color="amber-500" />
1034
+ </DocComponent>
1035
+ <DocComponent title="Custom Selector Breadcrumbs"
1036
+ caption="Customize the separator character to match different design styles or branding needs.">
1037
+ <div class="flex flex-col gap-4">
1038
+ <UIBreadcrumbs :items="basicBreadcrumbs" separator="-" active-color="green-500" />
1039
+ <UIBreadcrumbs :items="basicBreadcrumbs" separator=">" active-color="blue-500" />
1040
+ <UIBreadcrumbs :items="basicBreadcrumbs" separator="::" active-color="purple-500" />
1041
+ </div>
1042
+ </DocComponent>
1043
+ <DocComponent title="Gutter Space Breadcrumbs"
1044
+ caption="Control the spacing between breadcrumb items using the gutter property for tighter or looser layouts.">
1045
+ <div class="flex flex-col gap-4">
1046
+ <UIBreadcrumbs :items="breadcrumbs" gutter="0rem" active-color="blue-500" />
1047
+ <UIBreadcrumbs :items="breadcrumbs" gutter="0.75rem" active-color="blue-500" />
1048
+ <UIBreadcrumbs :items="breadcrumbs" gutter="1rem" active-color="green-500" />
1049
+ <UIBreadcrumbs :items="breadcrumbs" gutter="1.5rem" active-color="amber-500" />
1050
+ </div>
1051
+ </DocComponent>
1052
+ <DocComponent title="Aligned Breadcrumbs"
1053
+ caption="Align breadcrumbs horizontally to the start, center, or end of the container.">
1054
+ <div class="flex flex-col gap-4">
1055
+ <UIBreadcrumbs :items="breadcrumbs" align="start" active-color="blue-600s" separator-color="blue-700" />
1056
+ <UIBreadcrumbs :items="breadcrumbs" separator="/" align="center" active-color="green-600"
1057
+ separator-color="green-700" />
1058
+ <UIBreadcrumbs :items="breadcrumbs" separator="/" align="end" active-color="yellow-600"
1059
+ separator-color="yellow-700" />
1060
+ </div>
1061
+ </DocComponent>
1062
+ </DocSection>
1063
+ <DocSection title="UITabs + UITabPanel" sub-title="Tabbed navigation for content panels."
1064
+ caption="UITabs is a flexible tab navigation component that manages active state and renders a visual indicator for the selected tab. It can be used on its own as a tab header controller, or paired with UITabPanel to display conditional tab content.">
1065
+ <div class="font-light text-gray-800 pl-7 my-2">UITabs uses <code>v-model</code> to control the active tab and
1066
+ exposes shared state to child tab panels via Vue’s provide / inject mechanism.</div>
1067
+ <div class="font-light text-gray-800 pl-7">
1068
+ <span class="font-medium text-sky-600">Important:</span>
1069
+ <ul class="list-disc pl-4">
1070
+ <li>
1071
+ UITabs can exist with or without UITabPanel
1072
+ </li>
1073
+ <li>
1074
+ UITabPanel must always be used inside UITabs
1075
+ </li>
1076
+ </ul>
1077
+ </div>
1078
+ <DocComponent title="Basic Tabs (Header Only)"
1079
+ caption="Use UITabs by itself when you only need tab navigation and want to control the content manually.">
1080
+ <UITabs v-model="activeTab" />
1081
+ <div class="mt-4">
1082
+ <p v-if="activeTab === 'first'">Tab One Content</p>
1083
+ <p v-else-if="activeTab === 'second'">Tab Two Content</p>
1084
+ </div>
1085
+ </DocComponent>
1086
+ <div class="font-light text-gray-800 pl-7 my-2">UITabPanel represents a single tab and its associated content.
1087
+ It automatically registers itself with the nearest parent UITabs component and renders its slot only when
1088
+ active.</div>
1089
+ <div class="font-light text-gray-800 pl-7">
1090
+ <span class="font-medium text-sky-600">Each panel defines:</span>
1091
+ <ul class="list-disc pl-4">
1092
+ <li>
1093
+ a name (used as the tab identifier)
1094
+ </li>
1095
+ <li>
1096
+ a label (displayed in the tab header)
1097
+ </li>
1098
+ </ul>
1099
+ </div>
1100
+ <div class="font-light text-gray-800 pl-7 my-2">UITabPanel cannot function independently and must be nested
1101
+ inside UITabs.</div>
1102
+ <DocComponent title="Tabs with Panels"
1103
+ caption="Pair UITabs with UITabPanel to automatically render content based on the active tab.">
1104
+ <UITabs v-model="activeTab">
1105
+ <UITabPanel name="first" label="Overview">
1106
+ <p>Overview content goes here.</p>
1107
+ </UITabPanel>
1108
+
1109
+ <UITabPanel name="second" label="Details">
1110
+ <p>Details content goes here.</p>
1111
+ </UITabPanel>
1112
+
1113
+ <UITabPanel name="third" label="Settings">
1114
+ <p>Settings content goes here.</p>
1115
+ </UITabPanel>
1116
+ </UITabs>
1117
+ </DocComponent>
1118
+ <DocComponent title="Default Active Tab" caption="Control which tab is active by default using v-model.">
1119
+ <UITabs v-model="activeTab">
1120
+ <UITabPanel name="first" label="First Tab">
1121
+ <p>This tab is active by default.</p>
1122
+ </UITabPanel>
1123
+ <UITabPanel name="second" label="Second Tab">
1124
+ <p>This tab is inactive.</p>
1125
+ </UITabPanel>
1126
+ </UITabs>
1127
+ </DocComponent>
1128
+ </DocSection>
1129
+ <DocSection title="UIAccordion" sub-title="Expandable/collapsible content sections.">
1130
+ <DocComponent title="Basic Accordion"
1131
+ caption="A simple accordion with a title and default click-to-toggle behavior.">
1132
+ <UIAccordion title="Basic Accordion">
1133
+ <p>This is the content of the accordion.</p>
1134
+ </UIAccordion>
1135
+ </DocComponent>
1136
+ <DocComponent title="Accordion with Caption"
1137
+ caption="Accordion with a subtitle or description under the title.">
1138
+ <UIAccordion title="Accordion with Caption" caption="This is a description">
1139
+ <p>Here is the content of the accordion.</p>
1140
+ </UIAccordion>
1141
+ </DocComponent>
1142
+ <DocComponent title="Controlled Expansion (Click Trigger)" caption="Toggle the accordion using click events.">
1143
+ <UIAccordion title="Click to Expand" trigger="click">
1144
+ <p>Click the header to expand or collapse.</p>
1145
+ </UIAccordion>
1146
+ </DocComponent>
1147
+ <DocComponent title="Controlled Expansion (Hover Trigger)"
1148
+ caption="xpand the accordion when hovering over the header.">
1149
+ <UIAccordion title="Hover to Expand" trigger="hover">
1150
+ <p>Hover over the header to expand the content.</p>
1151
+ </UIAccordion>
1152
+ </DocComponent>
1153
+ <DocComponent title="Default Open" caption="Accordion starts open by default.">
1154
+ <UIAccordion title="Default Open Accordion" defaultOpen>
1155
+ <p>This content is visible when the page loads.</p>
1156
+ </UIAccordion>
1157
+ </DocComponent>
1158
+ <DocComponent title="Controlled Accordion (v-model)"
1159
+ caption="Programmatically control open/close state using v-model.">
1160
+ <UIButton @click="isOpen = !isOpen" label="Toggle Accordion" />
1161
+ <UIAccordion v-model="isOpen" title="Controlled Accordion" class="mt-4">
1162
+ <p>The parent component controls whether this accordion is open.</p>
1163
+ </UIAccordion>
1164
+ </DocComponent>
1165
+ <DocComponent title="Header Slot" caption="Replace the default header with a custom slot.">
1166
+ <UIAccordion>
1167
+ <template #header>
1168
+ <h3 class="text-blue-600 font-bold">Custom Header</h3>
1169
+ <p class="text-gray-400 text-sm">Custom subtitle here</p>
1170
+ </template>
1171
+ <p>Accordion content with a custom header.</p>
1172
+ </UIAccordion>
1173
+ </DocComponent>
1174
+ <DocComponent title="Content Slot"
1175
+ caption="Provide custom content inside the accordion using the default slot.">
1176
+ <UIAccordion title="Custom Content Accordion">
1177
+ <div class="flex flex-col gap-2">
1178
+ <h5 class="text-2xl font-semibold text-sky-400">Header inside accordion</h5>
1179
+ <p class="text-gray-700">Paragraph inside accordion</p>
1180
+ <ul class="list-disc pl-4 text-gray-800">
1181
+ <li>List item A</li>
1182
+ <li>List item B</li>
1183
+ </ul>
1184
+ </div>
1185
+ </UIAccordion>
1186
+ </DocComponent>
1187
+ <DocComponent title="Toggle Position" caption="Show the chevron on the left or right side of the header.">
1188
+ <UIAccordion title="Toggle Left" toggleSide="left" class="my-2">
1189
+ <p>The chevron icon appears on the left side.</p>
1190
+ </UIAccordion>
1191
+ <UIAccordion title="Toggle Right" toggleSide="right" class="my-2">
1192
+ <p>The chevron icon appears on the right side.</p>
1193
+ </UIAccordion>
1194
+ </DocComponent>
1195
+ <DocComponent title="Dense Mode" caption="A more compact accordion with smaller paddings and text.">
1196
+ <UIAccordion title="Dense Accordion" dense>
1197
+ <p>This accordion uses less padding and smaller text.</p>
1198
+ </UIAccordion>
1199
+ </DocComponent>
1200
+ <DocComponent title="Disabled Accordion" caption="Accordion that cannot be opened or closed.">
1201
+ <UIAccordion title="Disabled Accordion" disabled>
1202
+ <p>This content cannot be toggled because the accordion is disabled.</p>
1203
+ </UIAccordion>
1204
+ </DocComponent>
1205
+ <DocComponent title="No Margin" caption="Accordion content has no extra padding around it.">
1206
+ <UIAccordion title="No Margin Accordion" :margin="false">
1207
+ <p>The content spans edge-to-edge without padding.</p>
1208
+ </UIAccordion>
1209
+ </DocComponent>
1210
+ </DocSection>
1211
+ <DocSection title="UIStepper" sub-title="Visual representation of a multi-step process.">
1212
+ <DocComponent title="Basic Stepper" caption="Simple horizontal stepper with text labels.">
1213
+ <UIStepper v-model="step" :steps="[
1214
+ 'Account',
1215
+ 'Profile',
1216
+ 'Confirmation',
1217
+ ]" />
1218
+ </DocComponent>
1219
+ <DocComponent title="Vertical Stepper" caption="Display steps vertically for side layouts and forms.">
1220
+ <UIStepper v-model="step" vertical :steps="[
1221
+ 'Shipping',
1222
+ 'Billing',
1223
+ 'Review',
1224
+ 'Payment',
1225
+ ]">
1226
+ <template #default="{ step }">
1227
+ <div class="p-4 border rounded-md">
1228
+ Current Step: {{ step + 1 }}
1229
+ </div>
1230
+ </template>
1231
+ </UIStepper>
1232
+ </DocComponent>
1233
+ <DocComponent title="Stepper With Icons" caption="Use icons to visually represent each step.">
1234
+ <UIStepper v-model="step" :steps="[
1235
+ {
1236
+ label: 'Cart',
1237
+ icon: 'shopping_cart',
1238
+ },
1239
+ {
1240
+ label: 'Delivery',
1241
+ icon: 'local_shipping',
1242
+ },
1243
+ {
1244
+ label: 'Payment',
1245
+ icon: 'payments',
1246
+ },
1247
+ {
1248
+ label: 'Success',
1249
+ icon: 'check_circle',
1250
+ },
1251
+ ]" />
1252
+ </DocComponent>
1253
+ <DocComponent title="Custom Colors" caption="Customize active, completed, and inactive step colors.">
1254
+ <UIStepper v-model="step" active-color="purple-500" completed-color="green-500" inactive-color="gray-200"
1255
+ connector-completed-color="green-500" connector-inactive-color="gray-300" :steps="[
1256
+ 'Planning',
1257
+ 'Development',
1258
+ 'Testing',
1259
+ 'Deployment',
1260
+ ]" />
1261
+ </DocComponent>
1262
+ <DocComponent title="Stepper Content Slot" caption="Render dynamic content based on the active step.">
1263
+ <UIStepper v-model="step" :steps="[
1264
+ 'Personal Info',
1265
+ 'Address',
1266
+ 'Review',
1267
+ ]">
1268
+ <template #default="{ step }">
1269
+ <div class="mt-4 border rounded-lg p-4">
1270
+ <div v-if="step === 0">
1271
+ Personal information form goes here.
1272
+ </div>
1273
+
1274
+ <div v-else-if="step === 1">
1275
+ Address form goes here.
1276
+ </div>
1277
+
1278
+ <div v-else>
1279
+ Review and submit section.
1280
+ </div>
1281
+ </div>
1282
+ </template>
1283
+ </UIStepper>
1284
+ </DocComponent>
1285
+ <DocComponent title="Workflow Stepper with Inactive Steps"
1286
+ caption="Useful for indicating upcoming steps in a process while showing some as inactive or disabled.">
1287
+ <UIStepper v-model="step" vertical completed-color="emerald-500" active-color="blue-500" :steps="[
1288
+ {
1289
+ label: 'Draft',
1290
+ icon: 'edit_document',
1291
+ },
1292
+ {
1293
+ label: 'Review',
1294
+ icon: 'rate_review',
1295
+ },
1296
+ {
1297
+ label: 'Approval',
1298
+ icon: 'verified',
1299
+ },
1300
+ {
1301
+ label: 'Published',
1302
+ icon: 'public',
1303
+ },
1304
+ ]" :inactive-steps="[2]" />
1305
+ </DocComponent>
1306
+ <DocComponent title="Checkout Flow" caption="Perfect for ecommerce checkout experiences.">
1307
+ <UIStepper v-model="step" :steps="[
1308
+ {
1309
+ label: 'Cart',
1310
+ icon: 'shopping_bag',
1311
+ },
1312
+ {
1313
+ label: 'Shipping',
1314
+ icon: 'local_shipping',
1315
+ },
1316
+ {
1317
+ label: 'Payment',
1318
+ icon: 'credit_card',
1319
+ },
1320
+ {
1321
+ label: 'Complete',
1322
+ icon: 'task_alt',
1323
+ },
1324
+ ]">
1325
+ <template #default="{ step }">
1326
+ <div class="mt-6 p-4 border rounded-lg">
1327
+ Active Checkout Step: {{ step + 1 }}
1328
+ </div>
1329
+ </template>
1330
+ </UIStepper>
1331
+ </DocComponent>
1332
+ <DocComponent title="Minimal Stepper" caption="A clean and compact stepper layout.">
1333
+ <UIStepper flat :steps="[
1334
+ 'Start',
1335
+ 'Setup',
1336
+ 'Finish',
1337
+ ]" />
1338
+ </DocComponent>
1339
+ <DocComponent title="Multi-Step Form" caption="Ideal for onboarding and registration flows.">
1340
+ <UIStepper v-model="step" vertical :steps="[
1341
+ 'Account Setup',
1342
+ 'Personal Details',
1343
+ 'Preferences',
1344
+ 'Verification',
1345
+ 'Completion',
1346
+ ]">
1347
+ <template #default="{ step }">
1348
+ <div class="border rounded-lg p-4 min-h-[120px]">
1349
+ Step {{ step + 1 }} Content
1350
+ </div>
1351
+ </template>
1352
+ </UIStepper>
1353
+ </DocComponent>
1354
+ </DocSection>
1355
+ </DocMegaSection>
1356
+ <!-- Feedback / Popups -->
1357
+ <DocMegaSection title="Feedback / Popups" sub-title="Notify and guide users effectively.">
1358
+ <DocSection title="UITooltip" sub-title="Hover or focus tooltips for any element.">
1359
+ <DocComponent title="Basic Tooltip"
1360
+ caption="Displays helpful information when the user hovers over an element.">
1361
+ <UITooltip text="Hello world">
1362
+ <button class="btn">Hover me</button>
1363
+ </UITooltip>
1364
+ </DocComponent>
1365
+ <DocComponent title="No Arrow Tooltip"
1366
+ caption="A simplified tooltip without an arrow indicator for a cleaner look.">
1367
+ <UITooltip text="No arrow here" :arrow="false">
1368
+ <span>Hover</span>
1369
+ </UITooltip>
1370
+ </DocComponent>
1371
+ <DocComponent title="Placement"
1372
+ caption="Tooltips can be positioned on the top, right, bottom, or left of the trigger element.">
1373
+ <div class="flex gap-4 items-center">
1374
+ <UITooltip text="On the left" placement="left">
1375
+ <span>Hover</span>
1376
+ </UITooltip>
1377
+ <UITooltip text="On the right" placement="right">
1378
+ <span>Hover</span>
1379
+ </UITooltip>
1380
+ <UITooltip text="At the top" placement="top">
1381
+ <span>Hover</span>
1382
+ </UITooltip>
1383
+ <UITooltip text="On the bottom" placement="bottom">
1384
+ <span>Hover</span>
1385
+ </UITooltip>
1386
+ </div>
1387
+ </DocComponent>
1388
+ <DocComponent title="Custom Colors" caption="Supports both Tailwind utility colors and HEX values.">
1389
+ <div class="flex gap-4">
1390
+ <UITooltip text="Custom tooltip" color="blue-300" textColor="red-800">
1391
+ <UIButton label="Hover" />
1392
+ </UITooltip>
1393
+ <UITooltip text="Tailwind color" color="indigo-500">
1394
+ <UIButton label="Hover" />
1395
+ </UITooltip>
1396
+ <UITooltip text="Hex color" color="#e11d48">
1397
+ <UIButton label="Hover" />
1398
+ </UITooltip>
1399
+ </div>
1400
+ </DocComponent>
1401
+ </DocSection>
1402
+ <DocSection title="UIAlert" sub-title="Modal dialog for confirmations, alerts, or forms.">
1403
+ <DocComponent title="Basic Alert Dialog"
1404
+ caption="Displays a simple dialog to present information or messages to the user.">
1405
+ <UIButton label="Open Alert" @click="dialogToggle1 = true" />
1406
+ <UIAlert v-model:isOpen="dialogToggle1" title="Welcome" message="This is a basic alert example." />
1407
+ </DocComponent>
1408
+ <DocComponent title="Alert with Custom Content"
1409
+ caption="Use slots to fully customize the alert title, content and confirmation button.">
1410
+ <UIButton label="Open Custom Alert" @click="dialogToggle2 = true" />
1411
+ <UIAlert v-model:isOpen="dialogToggle2" show-confirm-btn>
1412
+ <template #title>
1413
+ <h2 class="text-xl font-semibold text-blue-600">
1414
+ Custom Title
1415
+ </h2>
1416
+ </template>
1417
+ <template #message>
1418
+ <p class="text-gray-700">
1419
+ You can place <strong>any content</strong> inside the dialog,
1420
+ including other components.
1421
+ </p>
1422
+ </template>
1423
+ </UIAlert>
1424
+ </DocComponent>
1425
+ </DocSection>
1426
+ <DocSection title="UIDialog" sub-title="Modal dialog for any content in a centered overlay.">
1427
+ <DocComponent title="Basic Dialog"
1428
+ caption="A simple modal dialog that can be opened and closed programmatically.">
1429
+ <UIButton label="Open Dialog" @click="dialogToggle3 = true" />
1430
+ <UIDialog v-model:isOpen="dialogToggle3">
1431
+ <UICard>
1432
+ <template #header>
1433
+ <h3 class="text-lg font-semibold">Dialog Title</h3>
1434
+ </template>
1435
+ <div class="grid grid-cols-2 gap-4">
1436
+ <UIScrollArea class="h-40 w-full">
1437
+ <p>
1438
+ This is a basic dialog content area. You can place any content here, including text, forms, or
1439
+ other
1440
+ components.
1441
+ </p>
1442
+ <p>
1443
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed
1444
+ cursus
1445
+ ante dapibus diam.
1446
+ </p>
1447
+ <p>
1448
+ Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris.
1449
+ </p>
1450
+ </UIScrollArea>
1451
+ <UIImage
1452
+ src="https://img.magnific.com/premium-photo/red-yellow-leaf-that-is-reflecting-water-surface_1267893-21099.jpg?semt=ais_hybrid&w=740&q=80"
1453
+ class="w-32 h-32 object-cover rounded-md" alt="Dialog image" />
1454
+ </div>
1455
+ </UICard>
1456
+ </UIDialog>
1457
+ </DocComponent>
1458
+ </DocSection>
1459
+ </DocMegaSection>
1460
+ <!-- Data Display / Media -->
1461
+ <!-- Card -->
1462
+ <DocSection title="UICard" sub-title="Container with header, body, footer. Supports Tailwind classes.">
1463
+ <DocComponent title="UICard"
1464
+ caption="This variant allows passing custom Tailwind classes for advanced styling needs. Use this when the default appearance needs to be adjusted to match a specific layout.">
1465
+ <UICard bordered>
1466
+ <template #header>
1467
+ <h3 class="text-lg font-semibold">Card title</h3>
1468
+ </template>
1469
+ <p>This is the card content.</p>
1470
+ <template #footer>
1471
+ <div class="flex gap-4">
1472
+ <UIButton flat label="Action 1" />
1473
+ <UIButton flat label="Action 2" />
1474
+ </div>
1475
+ </template>
1476
+ </UICard>
1477
+ </DocComponent>
1478
+ <DocComponent title="Basic Card" caption="Default card with border, elevation, and content spacing.">
1479
+ <UICard>
1480
+ <p>This is a basic card with default styling.</p>
1481
+ </UICard>
1482
+ </DocComponent>
1483
+ <DocComponent title="Flat Card" caption="Flat cards have no shadow and blend with the background.">
1484
+ <UICard flat>
1485
+ <p>This is a flat card without elevation.</p>
1486
+ </UICard>
1487
+ </DocComponent>
1488
+ <DocComponent title="Square Card" caption="Square cards remove border radius for sharp edges.">
1489
+ <UICard square>
1490
+ <p>This card has no border radius.</p>
1491
+ </UICard>
1492
+ </DocComponent>
1493
+ <DocComponent title="Dense Card" caption="Dense cards remove inner padding for compact layouts.">
1494
+ <UICard dense>
1495
+ <p>This card has no inner padding.</p>
1496
+ </UICard>
1497
+ </DocComponent>
1498
+ <DocComponent title="Border Color" caption="Change the card border color using Tailwind or hex values.">
1499
+ <UICard bordered borderColor="blue-500">
1500
+ <p>This card uses a Tailwind border color.</p>
1501
+ </UICard>
1502
+ <UICard bordered borderColor="#22c55e" class="mt-4">
1503
+ <p>This card uses a hex border color.</p>
1504
+ </UICard>
1505
+ </DocComponent>
1506
+ <DocComponent title="Background Color" caption="Apply background colors using Tailwind classes or hex values.">
1507
+ <UICard color="gray-100">
1508
+ <p>This card has a Tailwind background color.</p>
1509
+ </UICard>
1510
+ <UICard color="#fef3c7" class="mt-4">
1511
+ <p>This card has a hex background color.</p>
1512
+ </UICard>
1513
+ </DocComponent>
1514
+ <DocComponent title="Media Card (Image)" caption="Media content can be placed inside the default slot.">
1515
+ <UICard bordered>
1516
+ <img
1517
+ src="https://img.freepik.com/free-photo/wet-vietnam-mountain-flow-stream-rural_1417-1357.jpg?t=st=1770568864~exp=1770572464~hmac=ffd2484ba81a03498d09e075b7d5eebf9509278138ecc069f0e8ddc6080fea8d&w=2000"
1518
+ class="w-full object-cover rounded-md mb-4" alt="Card media" />
1519
+
1520
+ <p>This card displays an image using the default slot.</p>
1521
+ </UICard>
1522
+ </DocComponent>
1523
+ <DocComponent title="Media Card (Video)" caption="Videos can also be embedded inside the card content.">
1524
+ <UICard bordered>
1525
+ <div class="relative pb-[56.25%] h-0 overflow-hidden">
1526
+ <iframe class="absolute top-0 left-0 w-full h-full" src="https://www.youtube.com/embed/bDJKs6r___g"
1527
+ title="YouTube video player"
1528
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
1529
+ allowfullscreen>
1530
+ </iframe>
1531
+ </div>
1532
+ </UICard>
1533
+ </DocComponent>
1534
+ <DocComponent title="Card with Header" caption="Use the header slot to display titles or actions.">
1535
+ <UICard bordered>
1536
+ <template #header>
1537
+ <h3 class="text-lg font-semibold">Card Title</h3>
1538
+ </template>
1539
+ <p>This card has a header section.</p>
1540
+ </UICard>
1541
+ </DocComponent>
1542
+ <DocComponent title="Card with Footer" caption="Use the footer slot for supplementary content.">
1543
+ <UICard bordered>
1544
+ <p>This card contains footer content.</p>
1545
+ <template #footer>
1546
+ <span class="text-sm text-gray-500">
1547
+ Last updated 2 days ago
1548
+ </span>
1549
+ </template>
1550
+ </UICard>
1551
+ </DocComponent>
1552
+ <DocComponent title="Card Actions (Horizontal)" caption="Actions aligned horizontally in the footer.">
1553
+ <UICard bordered>
1554
+ <p>Card with horizontal actions.</p>
1555
+ <template #footer>
1556
+ <div class="flex justify-end gap-3">
1557
+ <UIButton flat label="Cancel" />
1558
+ <UIButton label="Confirm" />
1559
+ </div>
1560
+ </template>
1561
+ </UICard>
1562
+ </DocComponent>
1563
+ <DocComponent title="Card Actions (Vertical)" caption="Actions stacked vertically for narrow layouts.">
1564
+ <UICard bordered>
1565
+ <p>Card with vertical actions.</p>
1566
+ <template #footer>
1567
+ <div class="flex flex-col gap-2 w-32">
1568
+ <UIButton label="Primary Action" />
1569
+ <UIButton flat label="Secondary Action" />
1570
+ </div>
1571
+ </template>
1572
+ </UICard>
1573
+ </DocComponent>
1574
+ </DocSection>
1575
+ <!-- Dropdown -->
1576
+ <DocSection title="UIDropdown" sub-title="Dropdown menu for actions, settings, or navigation links.">
1577
+ <DocComponent title="Basic Dropdown" caption="Simple dropdown with trigger and menu slots.">
1578
+ <UIDropdown>
1579
+ <template #trigger>
1580
+ <button class="px-4 py-2 bg-blue-500 text-white rounded-md">
1581
+ Open Menu
1582
+ </button>
1583
+ </template>
1584
+ <template #menu>
1585
+ <div class="flex flex-col gap-1">
1586
+ <button class="px-3 py-2 rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-left">
1587
+ Profile
1588
+ </button>
1589
+
1590
+ <button class="px-3 py-2 rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-left">
1591
+ Settings
1592
+ </button>
1593
+
1594
+ <button class="px-3 py-2 rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-left">
1595
+ Logout
1596
+ </button>
1597
+ </div>
1598
+ </template>
1599
+ </UIDropdown>
1600
+ </DocComponent>
1601
+ <DocComponent title="Right Aligned Dropdown" caption="Align the dropdown menu to the right side.">
1602
+ <UIDropdown align="right">
1603
+ <template #trigger>
1604
+ <button class="px-4 py-2 bg-purple-500 text-white rounded-md">
1605
+ Right Menu
1606
+ </button>
1607
+ </template>
1608
+ <template #menu>
1609
+ <div class="flex flex-col gap-1">
1610
+ <button class="px-3 py-2 rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-left">
1611
+ Dashboard
1612
+ </button>
1613
+
1614
+ <button class="px-3 py-2 rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-left">
1615
+ Billing
1616
+ </button>
1617
+ </div>
1618
+ </template>
1619
+ </UIDropdown>
1620
+ </DocComponent>
1621
+ <DocComponent title="Custom Width" caption="Control dropdown width using Tailwind width utilities.">
1622
+ <div class="flex gap-6">
1623
+ <UIDropdown width="w-40">
1624
+ <template #trigger>
1625
+ <button class="px-4 py-2 bg-gray-800 text-white rounded-md">
1626
+ Small
1627
+ </button>
1628
+ </template>
1629
+ <template #menu>
1630
+ <div class="p-2">
1631
+ Small width dropdown
1632
+ </div>
1633
+ </template>
1634
+ </UIDropdown>
1635
+ <UIDropdown width="w-72">
1636
+ <template #trigger>
1637
+ <button class="px-4 py-2 bg-gray-800 text-white rounded-md">
1638
+ Large
1639
+ </button>
1640
+ </template>
1641
+ <template #menu>
1642
+ <div class="p-2">
1643
+ Large width dropdown
1644
+ </div>
1645
+ </template>
1646
+ </UIDropdown>
1647
+ </div>
1648
+ </DocComponent>
1649
+ <DocComponent title="Rounded Variants" caption="Different rounded styles for the dropdown.">
1650
+ <div class="flex flex-wrap gap-6">
1651
+ <UIDropdown rounded="none">
1652
+ <template #trigger>
1653
+ <button class="px-4 py-2 bg-slate-700 text-white rounded">
1654
+ None
1655
+ </button>
1656
+ </template>
1657
+
1658
+ <template #menu>
1659
+ <div>Rounded None</div>
1660
+ </template>
1661
+ </UIDropdown>
1662
+
1663
+ <UIDropdown rounded="md">
1664
+ <template #trigger>
1665
+ <button class="px-4 py-2 bg-slate-700 text-white rounded">
1666
+ Medium
1667
+ </button>
1668
+ </template>
1669
+
1670
+ <template #menu>
1671
+ <div>Rounded MD</div>
1672
+ </template>
1673
+ </UIDropdown>
1674
+
1675
+ <UIDropdown rounded="xl">
1676
+ <template #trigger>
1677
+ <button class="px-4 py-2 bg-slate-700 text-white rounded">
1678
+ XL
1679
+ </button>
1680
+ </template>
1681
+
1682
+ <template #menu>
1683
+ <div>Rounded XL</div>
1684
+ </template>
1685
+ </UIDropdown>
1686
+ </div>
1687
+ </DocComponent>
1688
+ <DocComponent title="Flat Dropdown" caption="Remove dropdown shadow using the flat prop.">
1689
+ <UIDropdown flat bordered>
1690
+ <template #trigger>
1691
+ <button class="px-4 py-2 bg-emerald-500 text-white rounded-md">
1692
+ Flat Dropdown
1693
+ </button>
1694
+ </template>
1695
+
1696
+ <template #menu>
1697
+ <div class="flex flex-col gap-1">
1698
+ <button class="px-3 py-2 rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-left">
1699
+ Item One
1700
+ </button>
1701
+
1702
+ <button class="px-3 py-2 rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-left">
1703
+ Item Two
1704
+ </button>
1705
+ </div>
1706
+ </template>
1707
+ </UIDropdown>
1708
+ </DocComponent>
1709
+ <DocComponent title="Bordered Dropdown" caption="Add borders using bordered and borderColor props.">
1710
+ <div class="flex flex-wrap gap-6">
1711
+ <UIDropdown bordered border-color="blue-300">
1712
+ <template #trigger>
1713
+ <button class="px-4 py-2 bg-blue-500 text-white rounded-md">
1714
+ Tailwind Border
1715
+ </button>
1716
+ </template>
1717
+
1718
+ <template #menu>
1719
+ <div>
1720
+ Blue border dropdown
1721
+ </div>
1722
+ </template>
1723
+ </UIDropdown>
1724
+
1725
+ <UIDropdown bordered border-color="#22c55e">
1726
+ <template #trigger>
1727
+ <button class="px-4 py-2 bg-green-500 text-white rounded-md">
1728
+ Hex Border
1729
+ </button>
1730
+ </template>
1731
+
1732
+ <template #menu>
1733
+ <div>
1734
+ Hex border dropdown
1735
+ </div>
1736
+ </template>
1737
+ </UIDropdown>
1738
+ </div>
1739
+ </DocComponent>
1740
+ <DocComponent title="Custom Background" caption="Customize the dropdown menu background.">
1741
+ <UIDropdown menu-bg-class="bg-slate-900 text-white">
1742
+ <template #trigger>
1743
+ <button class="px-4 py-2 bg-slate-900 text-white rounded-md">
1744
+ Dark Menu
1745
+ </button>
1746
+ </template>
1747
+
1748
+ <template #menu>
1749
+ <div class="flex flex-col gap-2">
1750
+ <button class="px-3 py-2 rounded hover:bg-slate-800 text-left">
1751
+ Analytics
1752
+ </button>
1753
+
1754
+ <button class="px-3 py-2 rounded hover:bg-slate-800 text-left">
1755
+ Reports
1756
+ </button>
1757
+ </div>
1758
+ </template>
1759
+ </UIDropdown>
1760
+ </DocComponent>
1761
+ <DocComponent title="Complex Menu" caption="Dropdown menus can contain rich custom content.">
1762
+ <UIDropdown width="w-80" rounded="xl" bordered>
1763
+ <template #trigger>
1764
+ <button class="px-4 py-2 bg-indigo-500 text-white rounded-md">
1765
+ User Menu
1766
+ </button>
1767
+ </template>
1768
+ <template #menu>
1769
+ <div class="space-y-4">
1770
+ <div class="flex items-center gap-3">
1771
+ <div class="w-10 h-10 rounded-full bg-indigo-500 text-white flex items-center justify-center">
1772
+ JD
1773
+ </div>
1774
+
1775
+ <div>
1776
+ <div class="font-medium">
1777
+ John Doe
1778
+ </div>
1779
+
1780
+ <div class="text-sm text-gray-500">
1781
+ john@example.com
1782
+ </div>
1783
+ </div>
1784
+ </div>
1785
+
1786
+ <div class="border-t pt-3 flex flex-col gap-1">
1787
+ <button class="px-3 py-2 rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-left">
1788
+ Account Settings
1789
+ </button>
1790
+
1791
+ <button class="px-3 py-2 rounded hover:bg-gray-100 dark:hover:bg-gray-700 text-left">
1792
+ Team Members
1793
+ </button>
1794
+
1795
+ <button class="px-3 py-2 rounded hover:bg-red-100 text-red-500 text-left">
1796
+ Logout
1797
+ </button>
1798
+ </div>
1799
+ </div>
1800
+ </template>
1801
+ </UIDropdown>
1802
+ </DocComponent>
1803
+ </DocSection>
1804
+ <!-- Drawer -->
1805
+ <DocSection title="UIDrawer"
1806
+ sub-title="Flexible sliding drawer component for side panels, menus, and modal-style content.">
1807
+ <DocComponent title="Basic Drawer" caption="A simple drawer that slides in from the side with overlay support.">
1808
+ <button class="px-4 py-2 bg-black text-white rounded-lg" @click="drawerToggle.basic = true"> Open Drawer
1809
+ </button>
1810
+ <UIDrawer :isOpen="drawerToggle.basic" @close="drawerToggle.basic = false">
1811
+ <h2 class="text-xl font-semibold mb-4"> Drawer Content </h2>
1812
+ <p> This is a basic drawer component. </p>
1813
+ </UIDrawer>
1814
+ </DocComponent>
1815
+ <DocComponent title="Left Drawer"
1816
+ caption="Display the drawer from the left side instead of the default right placement.">
1817
+ <button class="px-4 py-2 bg-black text-white rounded-lg" @click="drawerToggle.left = true"> Open Drawer in
1818
+ Left
1819
+ </button>
1820
+ <UIDrawer :isOpen="drawerToggle.left" direction="left" @close="drawerToggle.left = false">
1821
+ <h2 class="text-xl font-semibold mb-4"> Drawer Content </h2>
1822
+ <p> This is a left drawer component. </p>
1823
+ </UIDrawer>
1824
+ </DocComponent>
1825
+ <DocComponent title="Custom Width" caption="Control the drawer width using Tailwind width utility classes.">
1826
+ <button class="px-4 py-2 bg-black text-white rounded-lg" @click="drawerToggle.customWidth = true"> Open Drawer
1827
+ with
1828
+ custom width </button>
1829
+ <UIDrawer :isOpen="drawerToggle.customWidth" width="w-64" @close="drawerToggle.customWidth = false">
1830
+ <h2 class="text-xl font-semibold mb-4"> Drawer Content </h2>
1831
+ <p> This is a drawer component with custom width. </p>
1832
+ </UIDrawer>
1833
+ </DocComponent>
1834
+ <DocComponent title="Custom Background"
1835
+ caption="Apply custom background styles for light and dark themed drawers.">
1836
+ <button class="px-4 py-2 bg-black text-white rounded-lg" @click="drawerToggle.customBg = true"> Open Drawer
1837
+ with
1838
+ Custom Background </button>
1839
+ <UIDrawer :isOpen="drawerToggle.customBg" background="bg-green-200" @close="drawerToggle.customBg = false">
1840
+ <h2 class="text-xl font-semibold mb-4"> Drawer Content </h2>
1841
+ <p> This is a drawer component with custom background. </p>
1842
+ </UIDrawer>
1843
+ </DocComponent>
1844
+ </DocSection>
1845
+ <!-- UI List and ListItem -->
1846
+ <DocMegaSection title="UIList + UIListItem" sub-title="List and list items for grouped content.">
1847
+ <DocSection title="UIList"></DocSection>
1848
+ <DocSection title="UIListItem"></DocSection>
1849
+ </DocMegaSection>
1850
+ <!-- Table-->
1851
+ <DocSection title="UITable" sub-title="Data grid / table with rows, columns, and sorting.">
1852
+ <DocComponent title="Basic Table" caption="A simple table with headers and rows.">
1853
+ <UITable bordered>
1854
+ <tr>
1855
+ <th class="px-4 py-3 text-left">Name</th>
1856
+ <th class="px-4 py-3 text-left">Email</th>
1857
+ </tr>
1858
+ <tr>
1859
+ <td class="px-4 py-3">John Doe</td>
1860
+ <td class="px-4 py-3">john@example.com</td>
1861
+ </tr>
1862
+ <tr>
1863
+ <td class="px-4 py-3">Jane Smith</td>
1864
+ <td class="px-4 py-3">jane@example.com</td>
1865
+ </tr>
1866
+ </UITable>
1867
+ </DocComponent>
1868
+ <DocComponent title="Striped Table" caption="Table with alternating row colors for better readability.">
1869
+ <UITable bordered striped>
1870
+ <tr>
1871
+ <th class="px-4 py-3 text-left">Name</th>
1872
+ <th class="px-4 py-3 text-left">Email</th>
1873
+ </tr>
1874
+ <tr>
1875
+ <td class="px-4 py-3">John Doe</td>
1876
+ <td class="px-4 py-3">john@example.com</td>
1877
+ </tr>
1878
+ <tr>
1879
+ <td class="px-4 py-3">Jane Smith</td>
1880
+ <td class="px-4 py-3">jane@example.com</td>
1881
+ </tr>
1882
+ </UITable>
1883
+ </DocComponent>
1884
+ <DocComponent title="Dense Table" caption="Table with reduced padding for a more compact layout.">
1885
+ <UITable bordered dense>
1886
+ <tr>
1887
+ <th class="px-4 py-3 text-left">Name</th>
1888
+ <th class="px-4 py-3 text-left">Email</th>
1889
+ </tr>
1890
+ <tr>
1891
+ <td class="px-4 py-3">John Doe</td>
1892
+ <td class="px-4 py-3">john@example.com</td>
1893
+ </tr>
1894
+ <tr>
1895
+ <td class="px-4 py-3">Jane Smith</td>
1896
+ <td class="px-4 py-3">jane@example.com</td>
1897
+ </tr>
1898
+ </UITable>
1899
+ </DocComponent>
1900
+ <DocComponent title="Border & Border Color" caption="Customize table borders using border utilities.">
1901
+ <UITable bordered border-color="border-blue-300 dark:border-blue-700">
1902
+ <template #header>
1903
+ <tr>
1904
+ <th class="px-4 py-3 text-left">Service</th>
1905
+ <th class="px-4 py-3 text-left">Status</th>
1906
+ </tr>
1907
+ </template>
1908
+
1909
+ <tr>
1910
+ <td class="px-4 py-3">API</td>
1911
+ <td class="px-4 py-3">Online</td>
1912
+ </tr>
1913
+
1914
+ <tr>
1915
+ <td class="px-4 py-3">Database</td>
1916
+ <td class="px-4 py-3">Healthy</td>
1917
+ </tr>
1918
+ </UITable>
1919
+ </DocComponent>
1920
+ <DocComponent title="Rounded Table" caption="Apply different rounded styles to the table container.">
1921
+ <UITable bordered rounded="xl">
1922
+ <template #header>
1923
+ <tr>
1924
+ <th class="px-4 py-3 text-left">Invoice</th>
1925
+ <th class="px-4 py-3 text-left">Amount</th>
1926
+ </tr>
1927
+ </template>
1928
+
1929
+ <tr>
1930
+ <td class="px-4 py-3">INV-001</td>
1931
+ <td class="px-4 py-3">$480</td>
1932
+ </tr>
1933
+
1934
+ <tr>
1935
+ <td class="px-4 py-3">INV-002</td>
1936
+ <td class="px-4 py-3">$920</td>
1937
+ </tr>
1938
+ </UITable>
1939
+ </DocComponent>
1940
+ <DocComponent title="Flat Table" caption="Remove table shadow using the flat prop.">
1941
+ <UITable flat bordered>
1942
+ <template #header>
1943
+ <tr>
1944
+ <th class="px-4 py-3 text-left">Project</th>
1945
+ <th class="px-4 py-3 text-left">Progress</th>
1946
+ </tr>
1947
+ </template>
1948
+
1949
+ <tr>
1950
+ <td class="px-4 py-3">Dashboard</td>
1951
+ <td class="px-4 py-3">80%</td>
1952
+ </tr>
1953
+
1954
+ <tr>
1955
+ <td class="px-4 py-3">Mobile App</td>
1956
+ <td class="px-4 py-3">55%</td>
1957
+ </tr>
1958
+ </UITable>
1959
+ </DocComponent>
1960
+ <DocComponent title="Horizontal Separators" caption="Display horizontal row separators.">
1961
+ <UITable bordered separator="horizontal">
1962
+ <template #header>
1963
+ <tr>
1964
+ <th class="px-4 py-3 text-left">Country</th>
1965
+ <th class="px-4 py-3 text-left">Capital</th>
1966
+ </tr>
1967
+ </template>
1968
+
1969
+ <tr>
1970
+ <td class="px-4 py-3">Japan</td>
1971
+ <td class="px-4 py-3">Tokyo</td>
1972
+ </tr>
1973
+
1974
+ <tr>
1975
+ <td class="px-4 py-3">France</td>
1976
+ <td class="px-4 py-3">Paris</td>
1977
+ </tr>
1978
+ </UITable>
1979
+ </DocComponent>
1980
+ <DocComponent title="Vertical Separators" caption="Display separators between columns.">
1981
+ <UITable bordered separator="vertical">
1982
+ <template #header>
1983
+ <tr>
1984
+ <th class="px-4 py-3 text-left">Name</th>
1985
+ <th class="px-4 py-3 text-left">Department</th>
1986
+ </tr>
1987
+ </template>
1988
+
1989
+ <tr>
1990
+ <td class="px-4 py-3">Sarah</td>
1991
+ <td class="px-4 py-3">Engineering</td>
1992
+ </tr>
1993
+
1994
+ <tr>
1995
+ <td class="px-4 py-3">David</td>
1996
+ <td class="px-4 py-3">Design</td>
1997
+ </tr>
1998
+ </UITable>
1999
+ </DocComponent>
2000
+ <DocComponent title="Cell Separators" caption="Apply borders to every table cell.">
2001
+ <UITable bordered separator="cell">
2002
+ <template #header>
2003
+ <tr>
2004
+ <th class="px-4 py-3 text-left">Language</th>
2005
+ <th class="px-4 py-3 text-left">Creator</th>
2006
+ </tr>
2007
+ </template>
2008
+
2009
+ <tr>
2010
+ <td class="px-4 py-3">JavaScript</td>
2011
+ <td class="px-4 py-3">Brendan Eich</td>
2012
+ </tr>
2013
+
2014
+ <tr>
2015
+ <td class="px-4 py-3">Python</td>
2016
+ <td class="px-4 py-3">Guido van Rossum</td>
2017
+ </tr>
2018
+ </UITable>
2019
+ </DocComponent>
2020
+ <DocComponent title="No Separators" caption="Render a clean table without internal separators.">
2021
+ <UITable bordered separator="none">
2022
+ <template #header>
2023
+ <tr>
2024
+ <th class="px-4 py-3 text-left">Framework</th>
2025
+ <th class="px-4 py-3 text-left">Language</th>
2026
+ </tr>
2027
+ </template>
2028
+
2029
+ <tr>
2030
+ <td class="px-4 py-3">Vue</td>
2031
+ <td class="px-4 py-3">JavaScript</td>
2032
+ </tr>
2033
+
2034
+ <tr>
2035
+ <td class="px-4 py-3">Laravel</td>
2036
+ <td class="px-4 py-3">PHP</td>
2037
+ </tr>
2038
+ </UITable>
2039
+ </DocComponent>
2040
+ <DocComponent title="Header & Footer Slots"
2041
+ caption="Use header and footer slots to fully customize table sections.">
2042
+ <UITable bordered>
2043
+ <template #header>
2044
+ <tr>
2045
+ <th class="px-4 py-3 text-left">Product</th>
2046
+ <th class="px-4 py-3 text-right">Price</th>
2047
+ </tr>
2048
+ </template>
2049
+
2050
+ <tr>
2051
+ <td class="px-4 py-3">Keyboard</td>
2052
+ <td class="px-4 py-3 text-right">$120</td>
2053
+ </tr>
2054
+
2055
+ <tr>
2056
+ <td class="px-4 py-3">Monitor</td>
2057
+ <td class="px-4 py-3 text-right">$300</td>
2058
+ </tr>
2059
+
2060
+ <template #footer>
2061
+ <tr>
2062
+ <td class="px-4 py-3 font-semibold">Total</td>
2063
+ <td class="px-4 py-3 text-right font-semibold">$420</td>
2064
+ </tr>
2065
+ </template>
2066
+ </UITable>
2067
+ </DocComponent>
2068
+ <DocComponent title="Table with Custom Cell Content"
2069
+ caption="Use slots to render custom content inside table cells.">
2070
+ <UITable bordered>
2071
+ <tr>
2072
+ <th class="px-4 py-3 text-left">Name</th>
2073
+ <th class="px-4 py-3 text-left">Email</th>
2074
+ <th class="px-4 py-3 text-left">Actions</th>
2075
+ </tr>
2076
+ <tr>
2077
+ <td class="px-4 py-3">John Doe</td>
2078
+ <td class="px-4 py-3">john@example.com</td>
2079
+ <td class="px-4 py-3">
2080
+ <button class="text-blue-600 hover:underline">Edit</button>
2081
+ <button class="text-red-600 hover:underline">Delete</button>
2082
+ </td>
2083
+ </tr>
2084
+ <tr>
2085
+ <td class="px-4 py-3">Jane Smith</td>
2086
+ <td class="px-4 py-3">jane@example.com</td>
2087
+ <td class="px-4 py-3">
2088
+ <button class="text-blue-600 hover:underline">Edit</button>
2089
+ <button class="text-red-600 hover:underline">Delete</button>
2090
+ </td>
2091
+ </tr>
2092
+ </UITable>
2093
+ </DocComponent>
2094
+ </DocSection>
2095
+ <!-- Scroll Area-->
2096
+ <DocSection title="UIScrollArea" sub-title="Custom scrollable container with hidden native scrollbars.">
2097
+ <DocComponent title="Basic Scroll Area"
2098
+ caption="Creates a vertically scrollable container with a fixed height.">
2099
+ <UIScrollArea height="150px" class="border rounded-md">
2100
+ <div v-for="n in 20" :key="n" class="p-2 border-b">
2101
+ Item {{ n }}
2102
+ </div>
2103
+ </UIScrollArea>
2104
+ </DocComponent>
2105
+
2106
+ <DocComponent title="Horizontal Scroll"
2107
+ caption="Enable horizontal scrolling for content wider than the container.">
2108
+ <UIScrollArea horizontal :vertical="false" height="100px" class="border rounded-md">
2109
+ <div class="flex gap-4 w-max p-4">
2110
+ <UICard v-for="n in 10" :key="n" width="200px">
2111
+ Card {{ n }}
2112
+ </UICard>
2113
+ </div>
2114
+ </UIScrollArea>
2115
+ </DocComponent>
2116
+
2117
+ <DocComponent title="Both Directions" caption="Allows scrolling in both horizontal and vertical directions.">
2118
+ <UIScrollArea horizontal vertical width="300px" height="150px" class="border rounded-md">
2119
+ <div style="width:800px;height:400px">
2120
+ Large Content Area
2121
+ </div>
2122
+ </UIScrollArea>
2123
+ </DocComponent>
2124
+
2125
+ <DocComponent title="Hidden Scrollbar"
2126
+ caption="Useful when scrolling should remain functional without visible scrollbars.">
2127
+ <UIScrollArea hideScrollbar height="150px" class="border rounded-md">
2128
+ <div v-for="n in 20" :key="n" class="p-2">
2129
+ Item {{ n }}
2130
+ </div>
2131
+ </UIScrollArea>
2132
+ </DocComponent>
2133
+
2134
+ <DocComponent title="Custom Styling"
2135
+ caption="Additional Tailwind classes can be applied through the component root.">
2136
+ <UIScrollArea height="150px" class="border-2 border-blue-500 rounded-xl bg-gray-50">
2137
+ <div v-for="n in 15" :key="n" class="p-2">
2138
+ Styled Item {{ n }}
2139
+ </div>
2140
+ </UIScrollArea>
2141
+ </DocComponent>
2142
+ </DocSection>
2143
+ <!-- Image -->
2144
+ <DocSection title="UIImage" sub-title="Image container with optional aspect ratio and rounded corners.">
2145
+ <DocComponent title="Basic Image" caption="Displays an image using the default sizing behavior.">
2146
+ <UIImage src="https://picsum.photos/600/300" alt="Sample image" />
2147
+ </DocComponent>
2148
+
2149
+ <DocComponent title="Custom Dimensions" caption="Control image width and height explicitly.">
2150
+ <UIImage src="https://picsum.photos/600/300" width="300px" height="200px" />
2151
+ </DocComponent>
2152
+
2153
+ <DocComponent title="Tailwind Border Color"
2154
+ caption="Border colors can be provided using Tailwind color utilities.">
2155
+ <UIImage src="https://picsum.photos/600/300" borderType="solid" borderColor="blue-500" />
2156
+ </DocComponent>
2157
+
2158
+ <DocComponent title="Hex Border Color" caption="Hex values are also supported for border styling.">
2159
+ <UIImage src="https://picsum.photos/600/300" borderType="solid" borderColor="#22c55e" />
2160
+ </DocComponent>
2161
+
2162
+ <DocComponent title="Dashed Border" caption="Use dashed borders for alternative visual emphasis.">
2163
+ <UIImage src="https://picsum.photos/600/300" borderType="dashed" borderColor="red-500" />
2164
+ </DocComponent>
2165
+
2166
+ <DocComponent title="Object Contain"
2167
+ caption="Contain mode preserves the full image inside the available space.">
2168
+ <UIImage src="https://picsum.photos/600/300" width="400px" height="250px" fit="contain" class="bg-gray-100" />
2169
+ </DocComponent>
2170
+
2171
+ <DocComponent title="Rounded Image" caption="Tailwind classes can be used to customize appearance.">
2172
+ <UIImage src="https://picsum.photos/300" class="rounded-full shadow-lg" width="200px" height="200px" />
2173
+ </DocComponent>
2174
+
2175
+ <DocComponent title="Placeholder Fallback" caption="Displays a fallback image when loading fails.">
2176
+ <UIImage src="/invalid-image.jpg" placeholder="https://picsum.photos/300" />
2177
+ </DocComponent>
2178
+ </DocSection>
2179
+ <!-- Icon -->
2180
+ <DocSection title="UIIcon" sub-title="Render icons from any supported library.">
2181
+ <DocComponent title="Material Icon" caption="Uses Google's Material Icons library.">
2182
+ <UIIcon name="home" library="material" />
2183
+ </DocComponent>
2184
+
2185
+ <DocComponent title="Material Symbols" caption="Displays icons from Material Symbols.">
2186
+ <UIIcon name="settings" library="material-symbols" />
2187
+ </DocComponent>
2188
+
2189
+ <DocComponent title="Font Awesome" caption="Supports Font Awesome icon classes.">
2190
+ <UIIcon library="fontawesome" name="fa-solid fa-user" />
2191
+ </DocComponent>
2192
+
2193
+ <DocComponent title="Icon Sizes" caption="Icons can be displayed in multiple predefined sizes.">
2194
+ <div class="flex items-center gap-4">
2195
+ <UIIcon name="favorite" size="xs" />
2196
+ <UIIcon name="favorite" size="sm" />
2197
+ <UIIcon name="favorite" size="md" />
2198
+ <UIIcon name="favorite" size="lg" />
2199
+ <UIIcon name="favorite" size="xl" />
2200
+ </div>
2201
+ </DocComponent>
2202
+
2203
+ <DocComponent title="Tailwind Colors" caption="Apply colors using Tailwind utility names.">
2204
+ <div class="flex gap-4">
2205
+ <UIIcon name="favorite" color="red-500" />
2206
+ <UIIcon name="favorite" color="green-500" />
2207
+ <UIIcon name="favorite" color="blue-500" />
2208
+ </div>
2209
+ </DocComponent>
2210
+
2211
+ <DocComponent title="Hex Colors" caption="Custom colors can be supplied using hex values.">
2212
+ <UIIcon name="favorite" color="#9333ea" size="xl" />
2213
+ </DocComponent>
2214
+
2215
+ <DocComponent title="Custom Styling" caption="Tailwind classes can be combined with icon props.">
2216
+ <UIIcon name="star" size="xl" class="rotate-12" color="yellow-500" />
2217
+ </DocComponent>
2218
+ </DocSection>
2219
+ <!-- Avatar -->
2220
+ <DocSection title="UIAvatar" sub-title="Profile image or placeholder icon.">
2221
+ <DocComponent title="Basic UIAvatar"
2222
+ caption="The Basic UIAvatar provides a simple, circular avatar with sensible defaults. Use it when no additional styling, sizing, or customization is required.">
2223
+ <UIAvatar />
2224
+ </DocComponent>
2225
+ <DocComponent title="UIAvatar with Initials"
2226
+ caption="This variant displays user initials when an image is unavailable.It ensures a consistent visual identity while gracefully handling missing avatars.">
2227
+ <UIAvatar initials="JD" />
2228
+ </DocComponent>
2229
+ <DocComponent title="UIAvatar with Image"
2230
+ caption="The image-based UIAvatar displays a user’s profile picture inside a circular container. Use this when a reliable image URL is available for the user.">
2231
+ <UIAvatar image="/doc/avatar.avif" alt-text="John Doe" />
2232
+ </DocComponent>
2233
+ <DocComponent title="UIAvatar Sizes"
2234
+ caption="UIAvatar supports multiple predefined sizes to fit different layouts and densities. Choose the appropriate size based on context, such as lists, cards, or profile headers.">
2235
+ <div class="flex gap-4 items-center">
2236
+ <UIAvatar size="sm" initials="SM" />
2237
+ <UIAvatar size="md" initials="MD" />
2238
+ <UIAvatar size="lg" initials="LG" />
2239
+ </div>
2240
+ </DocComponent>
2241
+ <DocComponent title="UIAvatar Colors"
2242
+ caption="UIAvatar supports multiple predefined sizes to fit different layouts and densities. Choose the appropriate size based on context, such as lists, cards, or profile headers.">
2243
+ <div class="flex gap-4 items-center">
2244
+ <UIAvatar initials="BL" color="blue-200" />
2245
+ <UIAvatar initials="GR" color="green-200" />
2246
+ <UIAvatar initials="YL" color="yellow-200" />
2247
+ <UIAvatar initials="PR" color="#dab2ff" />
2248
+ <UIAvatar initials="IG" color="#c6d2ff" />
2249
+ </div>
2250
+ </DocComponent>
2251
+ <DocComponent title="UIAvatar Text Colors"
2252
+ caption="UIAvatar supports multiple predefined sizes to fit different layouts and densities. Choose the appropriate size based on context, such as lists, cards, or profile headers.">
2253
+ <div class="flex gap-4 items-center">
2254
+ <UIAvatar initials="BL" color="blue-200" text-color="blue-800" />
2255
+ <UIAvatar initials="GR" color="green-200" text-color="green-800" />
2256
+ <UIAvatar initials="YL" color="yellow-200" text-color="yellow-800" />
2257
+ <UIAvatar initials="PR" color="#dab2ff" text-color="#6e11b0" />
2258
+ <UIAvatar initials="IG" color="#c6d2ff" text-color="#372aac" />
2259
+ </div>
2260
+ </DocComponent>
2261
+ <DocComponent title="UIAvatar with Custom Border"
2262
+ caption="This variant allows customizing the avatar’s border color and thickness. It is useful for highlighting users, indicating status, or matching brand themes.">
2263
+ <UIAvatar image="/doc/avatar.avif" border-color="#3b82f6" :border-thickness="3" />
2264
+ </DocComponent>
2265
+ </DocSection>
2266
+ <!-- Badge -->
2267
+ <DocSection title="UIBadge" sub-title="Status indicators or small labels.">
2268
+ <DocComponent title="Basic UIBadge"
2269
+ caption="The Basic UIBadge displays a small indicator used to highlight notifications, counts, or statuses. Use it when you need a simple visual cue without additional customization.">
2270
+ <div class="flex gap-4 items-center">
2271
+ <UIBadge />
2272
+ <UIBadge color="sky-400" />
2273
+ <UIBadge color="lime-400" />
2274
+ <UIBadge color="amber-400" />
2275
+ <UIBadge color="purple-400" />
2276
+ </div>
2277
+ </DocComponent>
2278
+ <DocComponent title="UIBadge with Number"
2279
+ caption="This variant displays a numeric value inside the badge, commonly used for unread counts or alerts. It helps users quickly identify quantities that require attention.">
2280
+ <div class="flex gap-4 items-center">
2281
+ <UIBadge content="5" />
2282
+ <UIBadge content="4" color="sky-400" />
2283
+ <UIBadge content="2" color="lime-400" />
2284
+ <UIBadge content="7" color="amber-400" />
2285
+ <UIBadge content="10" color="purple-400" />
2286
+ </div>
2287
+ </DocComponent>
2288
+ <DocComponent title="UIBadge with Icon"
2289
+ caption="The icon-based UIBadge displays a Material icon instead of text or numbers. Use this when a symbolic representation is more meaningful than a numeric value.">
2290
+ <div class="flex gap-4 items-center">
2291
+ <UIBadge icon="notifications" />
2292
+ <UIBadge icon="person" color="sky-400" />
2293
+ <UIBadge icon="energy_savings_leaf" content="90%" color="lime-400" />
2294
+ <UIBadge icon="visibility" content="7" color="amber-400" />
2295
+ <UIBadge icon="check" content="10" color="purple-400" />
2296
+ </div>
2297
+ </DocComponent>
2298
+ <DocComponent title="UIBadge Sizes"
2299
+ caption="UIBadge supports multiple predefined sizes to fit different UI densities and components. Choose smaller sizes for subtle indicators and larger ones for prominent alerts.">
2300
+ <div class="flex gap-4 items-center">
2301
+ <UIBadge size="xs" content="xs" />
2302
+ <UIBadge size="sm" content="sm" />
2303
+ <UIBadge size="md" content="md" />
2304
+ <UIBadge size="lg" content="lg" />
2305
+ </div>
2306
+ </DocComponent>
2307
+ <DocComponent title="UIBadge Rounded"
2308
+ caption="UIBadge supports multiple predefined sizes to fit different UI densities and components. Choose smaller sizes for subtle indicators and larger ones for prominent alerts.">
2309
+ <div class="flex gap-4 items-center">
2310
+ <UIBadge rounded="xs" content="xs" />
2311
+ <UIBadge rounded="sm" content="sm" />
2312
+ <UIBadge rounded="md" content="mg" />
2313
+ <UIBadge rounded="lg" content="lg" />
2314
+ <UIBadge rounded="full" content="full" />
2315
+ </div>
2316
+ </DocComponent>
2317
+ <DocComponent title="UIBadge Colors"
2318
+ caption="UIBadge supports multiple color variants to represent different meanings or statuses. Colors can be used to indicate urgency, success, warnings, or neutral information.">
2319
+ <div class="flex gap-4 items-center">
2320
+ <UIBadge color="red-400" content="!" />
2321
+ <UIBadge color="green-400" content="✓" />
2322
+ <UIBadge color="yellow-400" content="!" />
2323
+ <UIBadge color="blue-400" content="i" />
2324
+ <UIBadge color="gray-400" content="0" />
2325
+ </div>
2326
+ </DocComponent>
2327
+ <DocComponent title="UIBadge Superscript Position"
2328
+ caption="This variant positions the badge as a superscript, typically attached to another UI element. It is commonly used for notification indicators on icons, avatars, or buttons.">
2329
+ <div class="flex gap-4 items-center">
2330
+ <UIBadge content="5">
2331
+ <UIButton flat icon="mail" />
2332
+ </UIBadge>
2333
+ <UIBadge color="amber-500" content="5">
2334
+ <UIButton label="Notification" color="amber-400" />
2335
+ </UIBadge>
2336
+ </div>
2337
+ </DocComponent>
2338
+ <DocComponent title="UIBadge Visibility Control"
2339
+ caption="UIBadge visibility can be dynamically controlled using the show prop. This is useful for conditionally displaying badges based on application state.">
2340
+ <div class="flex gap-4 items-center">
2341
+ <UIButton label="show/ hide" @click="isOpen = !isOpen" />
2342
+ <UIBadge color="blue-500" content="10" :show="isOpen">
2343
+ <UIButton color="blue-400" icon="notifications" />
2344
+ </UIBadge>
2345
+ </div>
2346
+ </DocComponent>
2347
+ <DocComponent title="UIBadge with Custom Classes"
2348
+ caption="This variant allows passing custom Tailwind classes for advanced styling needs. Use this when the default appearance needs to be adjusted to match a specific layout.">
2349
+ <UIBadge content-class="shadow-md bg-white border border-green-400 text-green-500" content="56">
2350
+ <UIButton color="green-500" icon="mail" />
2351
+ </UIBadge>
2352
+ </DocComponent>
2353
+ </DocSection>
2354
+ <!-- Divider -->
2355
+ <DocSection title="UIDivider" sub-title="Horizontal or vertical separators.">
2356
+ <DocComponent title="Basic Divider" caption="Default horizontal divider.">
2357
+ <div>
2358
+ <p>Above Content</p>
2359
+ <UIDivider class="my-4" />
2360
+ <p>Below Content</p>
2361
+ </div>
2362
+ </DocComponent>
2363
+
2364
+ <DocComponent title="Dashed Divider" caption="Displays a dashed separator.">
2365
+ <UIDivider type="dashed" color="blue-500" />
2366
+ </DocComponent>
2367
+
2368
+ <DocComponent title="Dotted Divider" caption="Displays a dotted separator.">
2369
+ <UIDivider type="dotted" color="green-500" />
2370
+ </DocComponent>
2371
+
2372
+ <DocComponent title="Hex Color" caption="Supports custom hex color values.">
2373
+ <UIDivider color="#f97316" />
2374
+ </DocComponent>
2375
+
2376
+ <DocComponent title="Inset Divider" caption="Inset dividers add horizontal margins.">
2377
+ <UIDivider inset color="gray-400" />
2378
+ </DocComponent>
2379
+
2380
+ <DocComponent title="Thick Divider" caption="Increase divider thickness for stronger visual separation.">
2381
+ <UIDivider thickness="4px" color="purple-500" />
2382
+ </DocComponent>
2383
+
2384
+ <DocComponent title="Vertical Divider" caption="Vertical dividers separate content horizontally.">
2385
+ <div class="flex items-center h-20 gap-4">
2386
+ <span>Left</span>
2387
+
2388
+ <UIDivider vertical color="gray-400" />
2389
+
2390
+ <span>Right</span>
2391
+ </div>
2392
+ </DocComponent>
2393
+
2394
+ <DocComponent title="Content Separator" caption="A common usage pattern between content sections.">
2395
+ <UICard>
2396
+ <p>Section One</p>
2397
+
2398
+ <UIDivider class="my-4" />
2399
+
2400
+ <p>Section Two</p>
2401
+ </UICard>
2402
+ </DocComponent>
2403
+ </DocSection>
2404
+ </main>
2405
+ </div>
2406
+ </template>
2407
+
2408
+ <script setup>
2409
+ import DocSection from "./section.vue";
2410
+ import DocMegaSection from "./megaSection.vue";
2411
+ import DocComponent from "./component.vue";
2412
+ import { ref } from "vue";
2413
+ const value = ref("");
2414
+ const email = ref("");
2415
+ const url = ref("");
2416
+ const password = ref("");
2417
+ const search = ref("");
2418
+ const number = ref(0);
2419
+ const telphone = ref(0);
2420
+ const date = ref("");
2421
+ const datetimeLocal = ref("");
2422
+ const month = ref("");
2423
+ const week = ref("");
2424
+ const time = ref("");
2425
+ const color = ref("");
2426
+ const range = ref(null);
2427
+ const text = ref("");
2428
+ const feedback = ref("");
2429
+ const toggleInput = ref(false);
2430
+ const toggleCustomValue = ref("disable");
2431
+ const checked = ref(null);
2432
+ const checkedValue = ref(null);
2433
+ const radioValue = ref("");
2434
+ const countries = [
2435
+ { text: "India", value: "india" },
2436
+ { text: "USA", value: "usa" },
2437
+ { text: "Canada", value: "canada" },
2438
+ { text: "Australia", value: "australia" }
2439
+ ];
2440
+ const frameworks = [
2441
+ { text: "Vue", value: "vue" },
2442
+ { text: "React", value: "react" },
2443
+ { text: "Angular", value: "angular" },
2444
+ { text: "Svelte", value: "svelte" }
2445
+ ];
2446
+ const statuses = [
2447
+ { text: "Active", value: "active" },
2448
+ { text: "Inactive", value: "inactive" }
2449
+ ];
2450
+ const priorities = [
2451
+ { text: "Low", value: "low" },
2452
+ { text: "Medium", value: "medium" },
2453
+ { text: "High", value: "high" }
2454
+ ];
2455
+ const themes = [
2456
+ { text: "Light", value: "light" },
2457
+ { text: "Dark", value: "dark" }
2458
+ ];
2459
+ const cities = [
2460
+ { text: "New York", value: "ny" },
2461
+ { text: "London", value: "london" },
2462
+ { text: "Tokyo", value: "tokyo" },
2463
+ { text: "Singapore", value: "singapore" },
2464
+ { text: "Sydney", value: "sydney" },
2465
+ { text: "Paris", value: "paris" }
2466
+ ];
2467
+ const selectValue = ref("");
2468
+ const colorPickerValue = ref("");
2469
+ const dateValue = ref("");
2470
+ const multiDates = ref("");
2471
+ const rangeDates = ref("");
2472
+ const dateTime = ref("");
2473
+ const disabledWeekends = (date2) => {
2474
+ const d = new Date(date2);
2475
+ return d.getDay() === 0 || d.getDay() === 6;
2476
+ };
2477
+ const files = ref([]);
2478
+ const singleFile = ref([]);
2479
+ const multipleFiles = ref([]);
2480
+ const disable = ref(true);
2481
+ const isOpen = ref(false);
2482
+ const dialogToggle1 = ref(false);
2483
+ const dialogToggle2 = ref(false);
2484
+ const dialogToggle3 = ref(false);
2485
+ const drawerToggle = ref({
2486
+ basic: false,
2487
+ left: false,
2488
+ customWidth: false,
2489
+ customBg: false,
2490
+ withContent: false
2491
+ });
2492
+ const activeTab = ref("first");
2493
+ const basicBreadcrumbs = ref([
2494
+ {
2495
+ label: "Home"
2496
+ },
2497
+ {
2498
+ label: "Products"
2499
+ },
2500
+ {
2501
+ label: "Shoes"
2502
+ }
2503
+ ]);
2504
+ const iconBreadcrumbs = ref([
2505
+ {
2506
+ icon: "home"
2507
+ },
2508
+ {
2509
+ icon: "category"
2510
+ },
2511
+ {
2512
+ icon: "umbrella"
2513
+ }
2514
+ ]);
2515
+ const breadcrumbs = ref([
2516
+ {
2517
+ label: "Home",
2518
+ icon: "home",
2519
+ to: "#"
2520
+ },
2521
+ {
2522
+ label: "Products",
2523
+ to: "#",
2524
+ caption: "All items"
2525
+ },
2526
+ {
2527
+ label: "Shoes",
2528
+ to: "#",
2529
+ caption: "Current page"
2530
+ }
2531
+ ]);
2532
+ const step = ref(0);
2533
+ </script>
2534
+
2535
+ <style scoped>
2536
+ table td,table th{vertical-align:top}
2537
+ </style>