vaderjs-daisyui 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +356 -0
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
# **VaderUI Component Library**
|
|
2
|
+
|
|
3
|
+
A comprehensive DaisyUI component library built for **Vader.js** — no React, no runtime bloat, fully composable with Vader's reactive system.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ✨ **Features**
|
|
8
|
+
|
|
9
|
+
* **22+ DaisyUI Components** - Complete coverage of DaisyUI's design system
|
|
10
|
+
* **Zero React Dependency** - Pure Vader.js implementation
|
|
11
|
+
* **Vader-first APIs** - Built specifically for Vader's reactive system
|
|
12
|
+
* **Tree-shakable** - Import only what you need
|
|
13
|
+
* **TypeScript Ready** - Full type definitions included
|
|
14
|
+
* **Lightweight** - Minimal runtime overhead
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 📦 **Installation**
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
bun vaderjs add vaderui
|
|
22
|
+
```
|
|
23
|
+
## 🔌 Plugin Setup
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
import daisyui from "vaderjs-daisyui";
|
|
27
|
+
|
|
28
|
+
export default {
|
|
29
|
+
plugins: [daisyui]
|
|
30
|
+
};
|
|
31
|
+
```
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 🔌 **Quick Setup**
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
// Import components as needed
|
|
40
|
+
import Button from 'vaderjs-daisyui/Components/Actions/Button';
|
|
41
|
+
import { Card, CardWithBadge } from 'vaderjs-daisyui/Components/Data/Display/Card';
|
|
42
|
+
import { Stats, Stat, StatValue } from 'vaderjs-daisyui/Components/Data/Display/Stat';
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 🚀 **Basic Usage**
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
import { component, createElement } from "vaderjs";
|
|
51
|
+
import Button from "vaderjs-daisyui/Components/Actions/Button";
|
|
52
|
+
import { Card } from "vaderjs-daisyui/Components/Data/Display/Card";
|
|
53
|
+
import { Badge } from "vaderjs-daisyui/Components/Data/Display/Badge";
|
|
54
|
+
|
|
55
|
+
const App = component(() => {
|
|
56
|
+
return createElement('div', { className: 'p-6' },
|
|
57
|
+
createElement(Button, {
|
|
58
|
+
color: 'primary',
|
|
59
|
+
onClick: () => alert('Hello!')
|
|
60
|
+
}, 'Click Me'),
|
|
61
|
+
|
|
62
|
+
createElement(Card, {
|
|
63
|
+
title: createElement('div', { className: 'flex items-center gap-2' },
|
|
64
|
+
'Dashboard',
|
|
65
|
+
createElement(Badge, { color: 'success' }, 'Active')
|
|
66
|
+
),
|
|
67
|
+
body: 'Welcome to your dashboard',
|
|
68
|
+
actions: createElement(Button, { size: 'sm' }, 'View Details')
|
|
69
|
+
})
|
|
70
|
+
);
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 🧩 **Components**
|
|
77
|
+
|
|
78
|
+
### **🎯 Actions (4)**
|
|
79
|
+
| Component | Description | Import Path |
|
|
80
|
+
|-----------|-------------|-------------|
|
|
81
|
+
| `Button` | Versatile button with multiple variants | `vaderjs-daisyui/Components/Actions/Button` |
|
|
82
|
+
| `Dropdown` | Menu dropdown for navigation | `vaderjs-daisyui/Components/Actions/Dropdown` |
|
|
83
|
+
| `Modal` | Overlay dialogs with actions | `vaderjs-daisyui/Components/Actions/Modal` |
|
|
84
|
+
| `Link` | Styled link components | `vaderjs-daisyui/Components/Data/Display/Link` |
|
|
85
|
+
|
|
86
|
+
### **📊 Data Display (18)**
|
|
87
|
+
| Component | Description | Import Path |
|
|
88
|
+
|-----------|-------------|-------------|
|
|
89
|
+
| `Badge` | Status indicators and labels | `vaderjs-daisyui/Components/Data/Display/Badge` |
|
|
90
|
+
| `Card` | Content containers with titles | `vaderjs-daisyui/Components/Data/Display/Card` |
|
|
91
|
+
| `Table` | Data tables with zebra striping | `vaderjs-daisyui/Components/Data/Display/Table` |
|
|
92
|
+
| `Stats` | Metrics and KPI displays | `vaderjs-daisyui/Components/Data/Display/Stat` |
|
|
93
|
+
| `Avatar` | User avatars with status | `vaderjs-daisyui/Components/Data/Display/Avatar` |
|
|
94
|
+
| `Timeline` | Chronological event display | `vaderjs-daisyui/Components/Data/Display/Timeline` |
|
|
95
|
+
| `Breadcrumbs` | Navigation hierarchy | `vaderjs-daisyui/Components/Data/Display/Breadcrumbs` |
|
|
96
|
+
| `Dock` | Application navigation dock | `vaderjs-daisyui/Components/Data/Display/Dock` |
|
|
97
|
+
| `Swap` | Toggle between two states | `vaderjs-daisyui/Components/Data/Display/Swap` |
|
|
98
|
+
| `ThemeController` | Theme selection controls | `vaderjs-daisyui/Components/Data/Display/ThemeController` |
|
|
99
|
+
| `Countdown` | Animated countdown timer | `vaderjs-daisyui/Components/Data/Display/Countdown` |
|
|
100
|
+
| `Carousel` | Image slideshow with controls | `vaderjs-daisyui/Components/Data/Display/Carousel` |
|
|
101
|
+
| `ChatBubbles` | Chat message interfaces | `vaderjs-daisyui/Components/Data/Display/ChatBubbles` |
|
|
102
|
+
| `Collapse` | Expandable sections | `vaderjs-daisyui/Components/Data/Display/Collapse` |
|
|
103
|
+
| `Diff` | Image comparison slider | `vaderjs-daisyui/Components/Data/Display/Diff` |
|
|
104
|
+
| `Hover3D` | 3D hover effects | `vaderjs-daisyui/Components/Data/Display/Hover3D` |
|
|
105
|
+
| `HoverGallery` | Hover-based galleries | `vaderjs-daisyui/Components/Data/Display/HoverGallery` |
|
|
106
|
+
| `TextRotate` | Rotating text animations | `vaderjs-daisyui/Components/Data/Display/TextRotate` |
|
|
107
|
+
| `Kbd` | Keyboard shortcut display | `vaderjs-daisyui/Components/Data/Display/Kbd` |
|
|
108
|
+
| `List` | Structured list components | `vaderjs-daisyui/Components/Data/Display/List` |
|
|
109
|
+
| `Accordion` | Collapsible content panels | `vaderjs-daisyui/Components/Data/Display/Accordion` |
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 🎨 **Theming**
|
|
114
|
+
|
|
115
|
+
```javascript
|
|
116
|
+
// Set theme globally
|
|
117
|
+
document.documentElement.setAttribute('data-theme', 'dark');
|
|
118
|
+
|
|
119
|
+
// Or use ThemeController component
|
|
120
|
+
createElement(ThemeController, {
|
|
121
|
+
type: 'dropdown',
|
|
122
|
+
options: [
|
|
123
|
+
{ value: 'light', label: 'Light' },
|
|
124
|
+
{ value: 'dark', label: 'Dark' },
|
|
125
|
+
{ value: 'cupcake', label: 'Cupcake' }
|
|
126
|
+
],
|
|
127
|
+
onChange: (theme) => document.documentElement.setAttribute('data-theme', theme)
|
|
128
|
+
});
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 📱 **Responsive Design**
|
|
134
|
+
|
|
135
|
+
All components work seamlessly with Tailwind's responsive utilities:
|
|
136
|
+
|
|
137
|
+
```javascript
|
|
138
|
+
createElement(Card, {
|
|
139
|
+
className: 'w-full md:w-1/2 lg:w-1/3', // Responsive width
|
|
140
|
+
title: 'Responsive Card',
|
|
141
|
+
body: 'Adapts to screen size automatically'
|
|
142
|
+
});
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## 🎯 **Advanced Examples**
|
|
148
|
+
|
|
149
|
+
### **Dashboard Layout**
|
|
150
|
+
```javascript
|
|
151
|
+
const Dashboard = component(() => {
|
|
152
|
+
return createElement('div', { className: 'p-6 grid gap-6' },
|
|
153
|
+
// Stats row
|
|
154
|
+
createElement(Stats, null,
|
|
155
|
+
createElement(Stat, { centered: true },
|
|
156
|
+
createElement(StatTitle, null, 'Total Users'),
|
|
157
|
+
createElement(StatValue, { className: 'text-primary' }, '4,200'),
|
|
158
|
+
createElement(StatDesc, null, '↗ 400 (22%)')
|
|
159
|
+
)
|
|
160
|
+
),
|
|
161
|
+
|
|
162
|
+
// Data table with badges
|
|
163
|
+
createElement(Table, { zebra: true },
|
|
164
|
+
createElement('thead', null,
|
|
165
|
+
createElement('tr', null,
|
|
166
|
+
createElement('th', null, 'Name'),
|
|
167
|
+
createElement('th', null, 'Role'),
|
|
168
|
+
createElement('th', null, 'Status')
|
|
169
|
+
)
|
|
170
|
+
),
|
|
171
|
+
createElement('tbody', null,
|
|
172
|
+
createElement('tr', null,
|
|
173
|
+
createElement('td', null, 'John Doe'),
|
|
174
|
+
createElement('td', null, 'Admin'),
|
|
175
|
+
createElement('td', null,
|
|
176
|
+
createElement(Badge, { color: 'success' }, 'Active')
|
|
177
|
+
)
|
|
178
|
+
)
|
|
179
|
+
)
|
|
180
|
+
),
|
|
181
|
+
|
|
182
|
+
// Interactive timeline
|
|
183
|
+
createElement(Timeline, {
|
|
184
|
+
items: [
|
|
185
|
+
{ middle: '🚀', end: 'Project Launch', box: true },
|
|
186
|
+
{ middle: '✨', end: 'Version 2.0', box: true }
|
|
187
|
+
],
|
|
188
|
+
vertical: true
|
|
189
|
+
})
|
|
190
|
+
);
|
|
191
|
+
});
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### **Interactive UI**
|
|
195
|
+
```javascript
|
|
196
|
+
// Toggle theme with Swap
|
|
197
|
+
createElement(Swap, {
|
|
198
|
+
on: '🌞',
|
|
199
|
+
off: '🌙',
|
|
200
|
+
rotate: true,
|
|
201
|
+
onChange: (active) => {
|
|
202
|
+
document.documentElement.setAttribute('data-theme', active ? 'light' : 'dark');
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
// Countdown timer
|
|
207
|
+
createElement(Countdown, {
|
|
208
|
+
units: [
|
|
209
|
+
{ label: 'Days', value: 5 },
|
|
210
|
+
{ label: 'Hours', value: 12 },
|
|
211
|
+
{ label: 'Minutes', value: 30 },
|
|
212
|
+
{ label: 'Seconds', value: 45 }
|
|
213
|
+
],
|
|
214
|
+
interval: 1000,
|
|
215
|
+
loop: false
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
// Image carousel
|
|
219
|
+
createElement(Carousel, {
|
|
220
|
+
images: ['/img1.jpg', '/img2.jpg', '/img3.jpg'],
|
|
221
|
+
indicators: true,
|
|
222
|
+
controls: true,
|
|
223
|
+
snap: 'center'
|
|
224
|
+
});
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 🔧 **Customization**
|
|
230
|
+
|
|
231
|
+
### **Custom Styling**
|
|
232
|
+
```javascript
|
|
233
|
+
createElement(Button, {
|
|
234
|
+
className: 'custom-class animate-pulse',
|
|
235
|
+
color: 'primary'
|
|
236
|
+
}, 'Custom Button');
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### **Component Composition**
|
|
240
|
+
```javascript
|
|
241
|
+
const CustomCard = component((props) => {
|
|
242
|
+
return createElement(Card, {
|
|
243
|
+
...props,
|
|
244
|
+
className: `${props.className} border-2 border-dashed`,
|
|
245
|
+
title: createElement('div', { className: 'flex items-center gap-2' },
|
|
246
|
+
props.title,
|
|
247
|
+
createElement(Badge, { color: 'warning' }, 'New')
|
|
248
|
+
)
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
## 🧠 **Philosophy**
|
|
258
|
+
|
|
259
|
+
* **No React** - Pure Vader.js implementation
|
|
260
|
+
* **No DaisyUI JS** - CSS-only dependencies
|
|
261
|
+
* **Just Vader** - Built for Vader's reactive system
|
|
262
|
+
* **Class-accurate** - Follows DaisyUI's HTML structure
|
|
263
|
+
* **Predictable State** - Clear, reactive state management
|
|
264
|
+
* **Composable** - Build complex UIs from simple components
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## 🛣 **Roadmap**
|
|
269
|
+
|
|
270
|
+
### **Coming Soon**
|
|
271
|
+
- [ ] Form components (Input, Select, Checkbox, Radio)
|
|
272
|
+
- [ ] Layout components (Grid, Container, Flex)
|
|
273
|
+
- [ ] Notification components (Toast, Alert)
|
|
274
|
+
- [ ] Loading states (Skeleton, Spinner)
|
|
275
|
+
- [ ] Data visualization (Charts, Graphs)
|
|
276
|
+
- [ ] Advanced navigation (Sidebar, Tabs)
|
|
277
|
+
- [ ] File upload components
|
|
278
|
+
- [ ] Date/Time pickers
|
|
279
|
+
- [ ] Rich text editor
|
|
280
|
+
- [ ] Color picker
|
|
281
|
+
- [ ] Drag & drop components
|
|
282
|
+
|
|
283
|
+
### **Planned**
|
|
284
|
+
- [ ] Component themes
|
|
285
|
+
- [ ] RTL support
|
|
286
|
+
- [ ] Icon pack integration
|
|
287
|
+
- [ ] Documentation site
|
|
288
|
+
- [ ] Interactive playground
|
|
289
|
+
- [ ] Component testing suite
|
|
290
|
+
- [ ] Performance optimizations
|
|
291
|
+
- [ ] Accessibility improvements
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## 📊 **Statistics**
|
|
296
|
+
|
|
297
|
+
* **Total Components**: 22
|
|
298
|
+
* **Actions Components**: 4
|
|
299
|
+
* **Data Display Components**: 18
|
|
300
|
+
* **Interactive Components**: 8
|
|
301
|
+
* **Navigation Components**: 3
|
|
302
|
+
* **Animation Components**: 4
|
|
303
|
+
* **Layout Components**: 6
|
|
304
|
+
* **Avg. Bundle Size**: < 2KB per component
|
|
305
|
+
* **TypeScript Coverage**: 100%
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
## 📄 **License**
|
|
311
|
+
|
|
312
|
+
MIT License - see [LICENSE](LICENSE) file for details.
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## 🤝 **Contributing**
|
|
317
|
+
|
|
318
|
+
1. Fork the repository
|
|
319
|
+
2. Create a feature branch (`git checkout -b feature/AmazingComponent`)
|
|
320
|
+
3. Commit your changes (`git commit -m 'Add AmazingComponent'`)
|
|
321
|
+
4. Push to the branch (`git push origin feature/AmazingComponent`)
|
|
322
|
+
5. Open a Pull Request
|
|
323
|
+
|
|
324
|
+
### **Component Guidelines**
|
|
325
|
+
- Follow existing component patterns
|
|
326
|
+
- Include TypeScript types
|
|
327
|
+
- Add comprehensive props documentation
|
|
328
|
+
- Include usage examples
|
|
329
|
+
- Test with DaisyUI's default themes
|
|
330
|
+
- Ensure accessibility compliance
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 🐛 **Reporting Issues**
|
|
335
|
+
|
|
336
|
+
Found a bug or have a feature request?
|
|
337
|
+
1. Check existing issues
|
|
338
|
+
2. Create a minimal reproduction
|
|
339
|
+
3. Open an issue with details
|
|
340
|
+
4. Include component version and DaisyUI version
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## 📞 **Support**
|
|
345
|
+
|
|
346
|
+
- **Documentation**: Included in each component file
|
|
347
|
+
- **Examples**: See the API reference page
|
|
348
|
+
- **Community**: Join Vader.js discussions
|
|
349
|
+
- **Issues**: GitHub issue tracker
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
**Built with ❤️ for the Vader.js community**
|
|
355
|
+
|
|
356
|
+
|
package/package.json
CHANGED